@rio-cloud/rio-uikit 2.0.1 → 2.2.0

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 (567) hide show
  1. package/CircularProgress.d.ts +2 -0
  2. package/CircularProgress.js +5 -0
  3. package/CircularProgress.js.map +1 -0
  4. package/RadioCardGroup.d.ts +2 -0
  5. package/RadioCardGroup.js +7 -0
  6. package/RadioCardGroup.js.map +1 -0
  7. package/SearchHighlightText.d.ts +2 -0
  8. package/SearchHighlightText.js +5 -0
  9. package/SearchHighlightText.js.map +1 -0
  10. package/TextTruncateMiddle.d.ts +2 -0
  11. package/TextTruncateMiddle.js +5 -0
  12. package/TextTruncateMiddle.js.map +1 -0
  13. package/Tracker.d.ts +2 -0
  14. package/Tracker.js +5 -0
  15. package/Tracker.js.map +1 -0
  16. package/classNames.d.ts +2 -0
  17. package/classNames.js +5 -0
  18. package/classNames.js.map +1 -0
  19. package/components/accentBar/AccentBar.js +1 -1
  20. package/components/accentBar/AccentBar.js.map +1 -1
  21. package/components/actionBarItem/ActionBarItem.d.ts +2 -2
  22. package/components/actionBarItem/ActionBarItem.js +7 -7
  23. package/components/actionBarItem/ActionBarItem.js.map +1 -1
  24. package/components/actionBarItem/ActionBarItemIcon.js +1 -1
  25. package/components/actionBarItem/ActionBarItemIcon.js.map +1 -1
  26. package/components/actionBarItem/ActionBarItemList.js +1 -1
  27. package/components/actionBarItem/ActionBarItemList.js.map +1 -1
  28. package/components/actionBarItem/ActionBarItemListItem.js +1 -1
  29. package/components/actionBarItem/ActionBarItemListItem.js.map +1 -1
  30. package/components/actionBarItem/ActionBarItemListSeparator.js +1 -1
  31. package/components/actionBarItem/ActionBarItemListSeparator.js.map +1 -1
  32. package/components/actionBarItem/ActionBarItemPopoverContent.js +3 -3
  33. package/components/actionBarItem/ActionBarItemPopoverContent.js.map +1 -1
  34. package/components/actionBarItem/ActionBarOverlay.js +1 -1
  35. package/components/actionBarItem/ActionBarOverlay.js.map +1 -1
  36. package/components/activity/Activity.js +1 -1
  37. package/components/activity/Activity.js.map +1 -1
  38. package/components/animatedTextReveal/AnimatedTextReveal.js +1 -1
  39. package/components/animatedTextReveal/AnimatedTextReveal.js.map +1 -1
  40. package/components/applicationHeader/AppMenu.js +2 -2
  41. package/components/applicationHeader/AppMenu.js.map +1 -1
  42. package/components/applicationHeader/AppMenuDropdown.js +13 -11
  43. package/components/applicationHeader/AppMenuDropdown.js.map +1 -1
  44. package/components/applicationHeader/ApplicationHeader.d.ts +6 -7
  45. package/components/applicationHeader/ApplicationHeader.js +1 -1
  46. package/components/applicationHeader/ApplicationHeader.js.map +1 -1
  47. package/components/applicationHeader/MobileHeaderModal.js +8 -8
  48. package/components/applicationHeader/MobileHeaderModal.js.map +1 -1
  49. package/components/applicationHeader/MobileSubmoduleNavigation.js +1 -1
  50. package/components/applicationHeader/MobileSubmoduleNavigation.js.map +1 -1
  51. package/components/applicationHeader/NavItems.js +4 -4
  52. package/components/applicationHeader/NavItems.js.map +1 -1
  53. package/components/applicationLayout/ApplicationLayout.js +10 -10
  54. package/components/applicationLayout/ApplicationLayout.js.map +1 -1
  55. package/components/applicationLayout/ApplicationLayoutBody.js +2 -2
  56. package/components/applicationLayout/ApplicationLayoutBody.js.map +1 -1
  57. package/components/applicationLayout/ApplicationLayoutBodyBanner.js +1 -1
  58. package/components/applicationLayout/ApplicationLayoutBodyBanner.js.map +1 -1
  59. package/components/applicationLayout/ApplicationLayoutBodyBottomBar.js +1 -1
  60. package/components/applicationLayout/ApplicationLayoutBodyBottomBar.js.map +1 -1
  61. package/components/applicationLayout/ApplicationLayoutBodyNavigation.js +1 -1
  62. package/components/applicationLayout/ApplicationLayoutBodyNavigation.js.map +1 -1
  63. package/components/applicationLayout/ApplicationLayoutHeader.js +1 -1
  64. package/components/applicationLayout/ApplicationLayoutHeader.js.map +1 -1
  65. package/components/applicationLayout/ApplicationLayoutSidebar.js +1 -1
  66. package/components/applicationLayout/ApplicationLayoutSidebar.js.map +1 -1
  67. package/components/applicationLayout/SubNavigation.d.ts +7 -0
  68. package/components/applicationLayout/SubNavigation.js +1 -1
  69. package/components/applicationLayout/SubNavigation.js.map +1 -1
  70. package/components/assetTree/AssetTree.d.ts +7 -0
  71. package/components/assetTree/AssetTree.js +1 -1
  72. package/components/assetTree/AssetTree.js.map +1 -1
  73. package/components/assetTree/Tree.d.ts +15 -0
  74. package/components/assetTree/Tree.js +1 -1
  75. package/components/assetTree/Tree.js.map +1 -1
  76. package/components/assetTree/TreeIcon.d.ts +30 -0
  77. package/components/assetTree/TreeIcon.js +16 -0
  78. package/components/assetTree/TreeIcon.js.map +1 -0
  79. package/components/assetTree/TreeLeaf.js +23 -23
  80. package/components/assetTree/TreeLeaf.js.map +1 -1
  81. package/components/assetTree/TreeNode.js +25 -25
  82. package/components/assetTree/TreeNode.js.map +1 -1
  83. package/components/assetTree/TreeNodeContainer.js +1 -1
  84. package/components/assetTree/TreeNodeContainer.js.map +1 -1
  85. package/components/assetTree/TreeOption.js +3 -3
  86. package/components/assetTree/TreeOption.js.map +1 -1
  87. package/components/assetTree/TreeOptions.js +4 -4
  88. package/components/assetTree/TreeOptions.js.map +1 -1
  89. package/components/assetTree/TreeRoot.js +3 -3
  90. package/components/assetTree/TreeRoot.js.map +1 -1
  91. package/components/assetTree/TreeSearch.d.ts +2 -0
  92. package/components/assetTree/TreeSearch.js +3 -3
  93. package/components/assetTree/TreeSearch.js.map +1 -1
  94. package/components/assetTree/TreeSidebar.js +1 -1
  95. package/components/assetTree/TreeSidebar.js.map +1 -1
  96. package/components/assetTree/TreeSidebarCategories.js +4 -4
  97. package/components/assetTree/TreeSidebarCategories.js.map +1 -1
  98. package/components/assetTree/TreeSummary.js +1 -1
  99. package/components/assetTree/TreeSummary.js.map +1 -1
  100. package/components/assetTree/TypeCounter.js +1 -1
  101. package/components/assetTree/TypeCounter.js.map +1 -1
  102. package/components/autosuggest/AutoSuggest.js +1 -1
  103. package/components/autosuggest/AutoSuggest.js.map +1 -1
  104. package/components/avatar/Avatar.js +1 -1
  105. package/components/avatar/Avatar.js.map +1 -1
  106. package/components/banner/Banner.js +1 -1
  107. package/components/banner/Banner.js.map +1 -1
  108. package/components/banner/BannerContent.js +1 -1
  109. package/components/banner/BannerContent.js.map +1 -1
  110. package/components/barList/BarList.d.ts +26 -0
  111. package/components/barList/BarList.js +1 -1
  112. package/components/barList/BarList.js.map +1 -1
  113. package/components/bottomSheet/BottomSheet.d.ts +17 -3
  114. package/components/bottomSheet/BottomSheet.js +1 -1
  115. package/components/bottomSheet/BottomSheet.js.map +1 -1
  116. package/components/bottomSheet/TimedBottomSheet.d.ts +10 -0
  117. package/components/bottomSheet/TimedBottomSheet.js.map +1 -1
  118. package/components/button/Button.d.ts +53 -7
  119. package/components/button/Button.js +87 -64
  120. package/components/button/Button.js.map +1 -1
  121. package/components/button/ButtonToolbar.js +1 -1
  122. package/components/button/ButtonToolbar.js.map +1 -1
  123. package/components/button/ToggleButton.d.ts +4 -1
  124. package/components/button/ToggleButton.js.map +1 -1
  125. package/components/calendarStripe/CalendarStripe.d.ts +1 -1
  126. package/components/calendarStripe/CalendarStripe.js +48 -50
  127. package/components/calendarStripe/CalendarStripe.js.map +1 -1
  128. package/components/card/Card.js +1 -1
  129. package/components/card/Card.js.map +1 -1
  130. package/components/charts/Area.d.ts +2 -2
  131. package/components/charts/Area.js.map +1 -1
  132. package/components/charts/Line.d.ts +2 -2
  133. package/components/charts/Line.js.map +1 -1
  134. package/components/charts/RadialBarChart.js +106 -103
  135. package/components/charts/RadialBarChart.js.map +1 -1
  136. package/components/checkbox/Checkbox.d.ts +0 -3
  137. package/components/checkbox/Checkbox.js +6 -6
  138. package/components/checkbox/Checkbox.js.map +1 -1
  139. package/components/circularProgress/CircularProgress.d.ts +139 -0
  140. package/components/circularProgress/CircularProgress.js +197 -0
  141. package/components/circularProgress/CircularProgress.js.map +1 -0
  142. package/components/clearableInput/ClearableInput.d.ts +21 -20
  143. package/components/clearableInput/ClearableInput.js +9 -9
  144. package/components/clearableInput/ClearableInput.js.map +1 -1
  145. package/components/collapse/Collapse.d.ts +3 -0
  146. package/components/collapse/Collapse.js +12 -12
  147. package/components/collapse/Collapse.js.map +1 -1
  148. package/components/contentLoader/ContentLoader.d.ts +10 -2
  149. package/components/contentLoader/ContentLoader.js.map +1 -1
  150. package/components/dataTabs/DataTabHeader.js +1 -1
  151. package/components/dataTabs/DataTabHeader.js.map +1 -1
  152. package/components/dataTabs/DataTabs.d.ts +6 -0
  153. package/components/dataTabs/DataTabs.js +4 -4
  154. package/components/dataTabs/DataTabs.js.map +1 -1
  155. package/components/datepicker/DatePicker.js +6 -6
  156. package/components/datepicker/DatePicker.js.map +1 -1
  157. package/components/datepicker/DateRangePicker.js +1 -1
  158. package/components/datepicker/DateRangePicker.js.map +1 -1
  159. package/components/datepicker/DayPicker.js +1 -1
  160. package/components/datepicker/DayPicker.js.map +1 -1
  161. package/components/dialog/ConfirmationDialog.d.ts +22 -0
  162. package/components/dialog/ConfirmationDialog.js.map +1 -1
  163. package/components/dialog/Dialog.d.ts +13 -1
  164. package/components/dialog/Dialog.js +55 -55
  165. package/components/dialog/Dialog.js.map +1 -1
  166. package/components/dialog/DialogBody.js +1 -1
  167. package/components/dialog/DialogBody.js.map +1 -1
  168. package/components/dialog/DialogFooter.js +1 -1
  169. package/components/dialog/DialogFooter.js.map +1 -1
  170. package/components/dialog/DialogHeader.js +1 -1
  171. package/components/dialog/DialogHeader.js.map +1 -1
  172. package/components/dialog/MediaDialog.js +1 -1
  173. package/components/dialog/MediaDialog.js.map +1 -1
  174. package/components/dialog/ReleaseNotesDialog.d.ts +3 -3
  175. package/components/dialog/ReleaseNotesDialog.js.map +1 -1
  176. package/components/dialog/SplitDialog.js +1 -1
  177. package/components/dialog/SplitDialog.js.map +1 -1
  178. package/components/divider/Divider.js +1 -1
  179. package/components/divider/Divider.js.map +1 -1
  180. package/components/dropdown/ButtonDropdown.d.ts +4 -0
  181. package/components/dropdown/ButtonDropdown.js +52 -52
  182. package/components/dropdown/ButtonDropdown.js.map +1 -1
  183. package/components/dropdown/DropdownSubmenu.d.ts +4 -0
  184. package/components/dropdown/DropdownSubmenu.js +3 -3
  185. package/components/dropdown/DropdownSubmenu.js.map +1 -1
  186. package/components/dropdown/DropdownToggleButton.d.ts +1 -1
  187. package/components/dropdown/DropdownToggleButton.js +4 -3
  188. package/components/dropdown/DropdownToggleButton.js.map +1 -1
  189. package/components/dropdown/SplitCaretButton.js +6 -6
  190. package/components/dropdown/SplitCaretButton.js.map +1 -1
  191. package/components/editableContent/EditableContent.d.ts +6 -0
  192. package/components/editableContent/EditableContent.js +1 -1
  193. package/components/editableContent/EditableContent.js.map +1 -1
  194. package/components/ellipsis/TextTruncateMiddle.d.ts +23 -0
  195. package/components/ellipsis/TextTruncateMiddle.js +21 -0
  196. package/components/ellipsis/TextTruncateMiddle.js.map +1 -0
  197. package/components/expander/ExpanderList.d.ts +3 -0
  198. package/components/expander/ExpanderList.js +5 -5
  199. package/components/expander/ExpanderList.js.map +1 -1
  200. package/components/expander/ExpanderPanel.d.ts +14 -4
  201. package/components/expander/ExpanderPanel.js +1 -1
  202. package/components/expander/ExpanderPanel.js.map +1 -1
  203. package/components/fade/Fade.d.ts +1 -1
  204. package/components/fade/Fade.js.map +1 -1
  205. package/components/feedback/FeedbackRating.js +1 -1
  206. package/components/feedback/FeedbackRating.js.map +1 -1
  207. package/components/feedback/FeedbackReactions.js +1 -1
  208. package/components/feedback/FeedbackReactions.js.map +1 -1
  209. package/components/filepicker/FilePicker.d.ts +0 -2
  210. package/components/filepicker/FilePicker.js.map +1 -1
  211. package/components/formLabel/FormLabel.js +6 -9
  212. package/components/formLabel/FormLabel.js.map +1 -1
  213. package/components/formLabel/LabeledElement.js +1 -1
  214. package/components/formLabel/LabeledElement.js.map +1 -1
  215. package/components/groupedItemList/GroupedItemList.d.ts +10 -7
  216. package/components/groupedItemList/GroupedItemList.js.map +1 -1
  217. package/components/listMenu/ListMenu.js +2 -5
  218. package/components/listMenu/ListMenu.js.map +1 -1
  219. package/components/listMenu/ListMenuGroup.d.ts +2 -1
  220. package/components/listMenu/ListMenuGroup.js +2 -2
  221. package/components/listMenu/ListMenuGroup.js.map +1 -1
  222. package/components/loadMore/LoadMoreButton.js +1 -1
  223. package/components/loadMore/LoadMoreButton.js.map +1 -1
  224. package/components/loadMore/LoadMoreProgress.js +1 -1
  225. package/components/loadMore/LoadMoreProgress.js.map +1 -1
  226. package/components/map/components/Map.js.map +1 -1
  227. package/components/map/components/constants.js.map +1 -1
  228. package/components/map/components/features/ContextMenuItem.d.ts +1 -1
  229. package/components/map/components/features/ContextMenuItem.js +2 -17
  230. package/components/map/components/features/ContextMenuItem.js.map +1 -1
  231. package/components/map/components/features/MapSettings.js +4 -4
  232. package/components/map/components/features/MapSettings.js.map +1 -1
  233. package/components/map/components/features/basics/Polyline.d.ts +4 -1
  234. package/components/map/components/features/basics/Polyline.js +1 -1
  235. package/components/map/components/features/basics/Polyline.js.map +1 -1
  236. package/components/map/components/features/layers/MarkerLayer.d.ts +3 -1
  237. package/components/map/components/features/layers/MarkerLayer.js.map +1 -1
  238. package/components/map/components/features/layers/clustering/ClusterLayer.js +1 -1
  239. package/components/map/components/features/layers/clustering/ClusterLayer.js.map +1 -1
  240. package/components/map/components/features/layers/clustering/SimpleClusterLayer.d.ts +3 -2
  241. package/components/map/components/features/layers/clustering/SimpleClusterLayer.js.map +1 -1
  242. package/components/map/components/features/layers/overlayLayers/RoadRestrictionLayer.js +7 -7
  243. package/components/map/components/features/layers/overlayLayers/RoadRestrictionLayer.js.map +1 -1
  244. package/components/map/components/features/layers/overlayLayers/TrafficLayer.js +4 -4
  245. package/components/map/components/features/layers/overlayLayers/TrafficLayer.js.map +1 -1
  246. package/components/map/components/features/settings/MapSettingsItem.js +1 -1
  247. package/components/map/components/features/settings/MapSettingsItem.js.map +1 -1
  248. package/components/map/components/features/settings/MapSettingsPanel.js +6 -20
  249. package/components/map/components/features/settings/MapSettingsPanel.js.map +1 -1
  250. package/components/map/components/features/settings/MapSettingsTile.js +87 -61
  251. package/components/map/components/features/settings/MapSettingsTile.js.map +1 -1
  252. package/components/map/components/features/settings/ZoomButtons.js +1 -1
  253. package/components/map/components/features/settings/ZoomButtons.js.map +1 -1
  254. package/components/map/components/features/settings/builtinSettings/MapTypeSettings.d.ts +38 -1
  255. package/components/map/components/features/settings/builtinSettings/MapTypeSettings.js +128 -92
  256. package/components/map/components/features/settings/builtinSettings/MapTypeSettings.js.map +1 -1
  257. package/components/map/utils/clustering.d.ts +6 -1
  258. package/components/map/utils/clustering.js +25 -19
  259. package/components/map/utils/clustering.js.map +1 -1
  260. package/components/map/utils/eventHandling.js +9 -9
  261. package/components/map/utils/eventHandling.js.map +1 -1
  262. package/components/map/utils/mapUtils.d.ts +6 -6
  263. package/components/map/utils/mapUtils.js +14 -19
  264. package/components/map/utils/mapUtils.js.map +1 -1
  265. package/components/map/utils/rendering.d.ts +1 -1
  266. package/components/map/utils/rendering.js +23 -23
  267. package/components/map/utils/rendering.js.map +1 -1
  268. package/components/mapMarker/ClusterMapMarker.js +1 -1
  269. package/components/mapMarker/ClusterMapMarker.js.map +1 -1
  270. package/components/mapMarker/SingleMapMarker.js +1 -1
  271. package/components/mapMarker/SingleMapMarker.js.map +1 -1
  272. package/components/menuItems/MenuItem.d.ts +23 -0
  273. package/components/menuItems/MenuItem.js +1 -1
  274. package/components/menuItems/MenuItem.js.map +1 -1
  275. package/components/menuItems/MenuItemList.js +1 -1
  276. package/components/menuItems/MenuItemList.js.map +1 -1
  277. package/components/navigation/AppNavigationBar.js +4 -4
  278. package/components/navigation/AppNavigationBar.js.map +1 -1
  279. package/components/noData/NoData.js +1 -1
  280. package/components/noData/NoData.js.map +1 -1
  281. package/components/notification/Notification.js +4 -4
  282. package/components/notification/Notification.js.map +1 -1
  283. package/components/numberControl/NumberControl.js +4 -4
  284. package/components/numberControl/NumberControl.js.map +1 -1
  285. package/components/numberInput/NumberInput.js +1 -1
  286. package/components/numberInput/NumberInput.js.map +1 -1
  287. package/components/onboarding/OnboardingTip.d.ts +18 -12
  288. package/components/onboarding/OnboardingTip.js +4 -4
  289. package/components/onboarding/OnboardingTip.js.map +1 -1
  290. package/components/overlay/OverlayTrigger.d.ts +43 -1
  291. package/components/overlay/OverlayTrigger.js.map +1 -1
  292. package/components/page/Page.js +1 -1
  293. package/components/page/Page.js.map +1 -1
  294. package/components/pager/Pager.d.ts +3 -0
  295. package/components/pager/Pager.js +1 -1
  296. package/components/pager/Pager.js.map +1 -1
  297. package/components/popover/Popover.d.ts +1 -0
  298. package/components/popover/Popover.js.map +1 -1
  299. package/components/preloader/ImagePreloader.d.ts +1 -1
  300. package/components/preloader/ImagePreloader.js.map +1 -1
  301. package/components/radiobutton/RadioButton.d.ts +10 -6
  302. package/components/radiobutton/RadioButton.js +5 -5
  303. package/components/radiobutton/RadioButton.js.map +1 -1
  304. package/components/radiobutton/RadioCardGroup.d.ts +86 -0
  305. package/components/radiobutton/RadioCardGroup.js +110 -0
  306. package/components/radiobutton/RadioCardGroup.js.map +1 -0
  307. package/components/releaseNotes/ReleaseNotes.d.ts +0 -3
  308. package/components/releaseNotes/ReleaseNotes.js.map +1 -1
  309. package/components/resizer/Resizer.d.ts +17 -3
  310. package/components/resizer/Resizer.js +1 -1
  311. package/components/resizer/Resizer.js.map +1 -1
  312. package/components/responsiveColumnStripe/ResponsiveColumnStripe.js +1 -1
  313. package/components/responsiveColumnStripe/ResponsiveColumnStripe.js.map +1 -1
  314. package/components/rioglyph/Rioglyph.d.ts +20 -8
  315. package/components/rioglyph/Rioglyph.js +1 -1
  316. package/components/rioglyph/Rioglyph.js.map +1 -1
  317. package/components/rioglyph/RioglyphIconType.d.ts +1 -1
  318. package/components/rules/RuleConnector.js +1 -1
  319. package/components/rules/RuleConnector.js.map +1 -1
  320. package/components/rules/RuleContainer.js +27 -27
  321. package/components/rules/RuleContainer.js.map +1 -1
  322. package/components/rules/RulesWrapper.js +1 -1
  323. package/components/rules/RulesWrapper.js.map +1 -1
  324. package/components/saveableInput/SaveableDateInput.d.ts +20 -2
  325. package/components/saveableInput/SaveableDateInput.js +1 -1
  326. package/components/saveableInput/SaveableDateInput.js.map +1 -1
  327. package/components/saveableInput/SaveableInput.d.ts +10 -2
  328. package/components/saveableInput/SaveableInput.js +49 -49
  329. package/components/saveableInput/SaveableInput.js.map +1 -1
  330. package/components/searchHighlight/SearchHighlightText.d.ts +28 -0
  331. package/components/searchHighlight/SearchHighlightText.js +15 -0
  332. package/components/searchHighlight/SearchHighlightText.js.map +1 -0
  333. package/components/selects/BaseSelectDropdown.js +90 -79
  334. package/components/selects/BaseSelectDropdown.js.map +1 -1
  335. package/components/selects/ClearButton.js +4 -4
  336. package/components/selects/ClearButton.js.map +1 -1
  337. package/components/selects/Multiselect.js +6 -6
  338. package/components/selects/Multiselect.js.map +1 -1
  339. package/components/selects/MultiselectToggleFilter.js +4 -4
  340. package/components/selects/MultiselectToggleFilter.js.map +1 -1
  341. package/components/selects/MultiselectToggleSelection.js +1 -1
  342. package/components/selects/MultiselectToggleSelection.js.map +1 -1
  343. package/components/selects/Select.d.ts +5 -0
  344. package/components/selects/Select.js +93 -93
  345. package/components/selects/Select.js.map +1 -1
  346. package/components/selects/SelectFilter.js +1 -1
  347. package/components/selects/SelectFilter.js.map +1 -1
  348. package/components/selects/WithFeedbackAndAddon.js +1 -1
  349. package/components/selects/WithFeedbackAndAddon.js.map +1 -1
  350. package/components/sidebars/Sidebar.d.ts +19 -3
  351. package/components/sidebars/Sidebar.js +54 -54
  352. package/components/sidebars/Sidebar.js.map +1 -1
  353. package/components/sidebars/SidebarBackdrop.js +4 -4
  354. package/components/sidebars/SidebarBackdrop.js.map +1 -1
  355. package/components/sidebars/SidebarFooter.js +1 -1
  356. package/components/sidebars/SidebarFooter.js.map +1 -1
  357. package/components/sidebars/SidebarFullscreenToggle.js +4 -4
  358. package/components/sidebars/SidebarFullscreenToggle.js.map +1 -1
  359. package/components/slider/RangeSlider.d.ts +15 -0
  360. package/components/slider/RangeSlider.js +1 -1
  361. package/components/slider/RangeSlider.js.map +1 -1
  362. package/components/slider/Slider.d.ts +9 -0
  363. package/components/slider/Slider.js +1 -1
  364. package/components/slider/Slider.js.map +1 -1
  365. package/components/smoothScrollbars/SmoothScrollbars.d.ts +44 -0
  366. package/components/smoothScrollbars/SmoothScrollbars.js +1 -1
  367. package/components/smoothScrollbars/SmoothScrollbars.js.map +1 -1
  368. package/components/spinner/Spinner.d.ts +3 -3
  369. package/components/spinner/Spinner.js +5 -4
  370. package/components/spinner/Spinner.js.map +1 -1
  371. package/components/states/CustomState.d.ts +69 -1
  372. package/components/states/CustomState.js +1 -1
  373. package/components/states/CustomState.js.map +1 -1
  374. package/components/states/EmptyState.d.ts +1 -1
  375. package/components/states/EmptyState.js.map +1 -1
  376. package/components/states/ErrorState.d.ts +1 -1
  377. package/components/states/ErrorState.js.map +1 -1
  378. package/components/states/ForbiddenState.d.ts +1 -1
  379. package/components/states/ForbiddenState.js.map +1 -1
  380. package/components/states/MaintenanceState.d.ts +1 -1
  381. package/components/states/MaintenanceState.js.map +1 -1
  382. package/components/states/NotBookedState.d.ts +1 -1
  383. package/components/states/NotBookedState.js.map +1 -1
  384. package/components/states/NotFoundState.d.ts +1 -1
  385. package/components/states/NotFoundState.js.map +1 -1
  386. package/components/states/StateButton.js +1 -1
  387. package/components/states/StateButton.js.map +1 -1
  388. package/components/states/StateIcon.d.ts +14 -1
  389. package/components/states/StateIcon.js.map +1 -1
  390. package/components/statsWidget/StatsWidget.d.ts +2 -0
  391. package/components/statsWidget/StatsWidget.js +1 -1
  392. package/components/statsWidget/StatsWidget.js.map +1 -1
  393. package/components/statsWidget/StatsWidgetBody.d.ts +1 -0
  394. package/components/statsWidget/StatsWidgetBody.js +1 -1
  395. package/components/statsWidget/StatsWidgetBody.js.map +1 -1
  396. package/components/statsWidget/StatsWidgetFooter.js +1 -1
  397. package/components/statsWidget/StatsWidgetFooter.js.map +1 -1
  398. package/components/statsWidget/StatsWidgetHeader.js +1 -1
  399. package/components/statsWidget/StatsWidgetHeader.js.map +1 -1
  400. package/components/statsWidget/StatsWidgetNumber.d.ts +2 -0
  401. package/components/statsWidget/StatsWidgetNumber.js +2 -2
  402. package/components/statsWidget/StatsWidgetNumber.js.map +1 -1
  403. package/components/statsWidget/StatsWidgetSpacer.js +1 -1
  404. package/components/statsWidget/StatsWidgetSpacer.js.map +1 -1
  405. package/components/statsWidget/StatsWidgets.js +1 -1
  406. package/components/statsWidget/StatsWidgets.js.map +1 -1
  407. package/components/statusBar/StatusBar.d.ts +98 -3
  408. package/components/statusBar/StatusBar.js +24 -17
  409. package/components/statusBar/StatusBar.js.map +1 -1
  410. package/components/statusBar/StatusBarIcon.d.ts +2 -2
  411. package/components/statusBar/StatusBarIcon.js +4 -4
  412. package/components/statusBar/StatusBarIcon.js.map +1 -1
  413. package/components/statusBar/StatusBarLabel.d.ts +2 -2
  414. package/components/statusBar/StatusBarLabel.js +5 -7
  415. package/components/statusBar/StatusBarLabel.js.map +1 -1
  416. package/components/statusBar/StatusBarProgressBar.d.ts +1 -1
  417. package/components/statusBar/StatusBarProgressBar.js +1 -1
  418. package/components/statusBar/StatusBarProgressBar.js.map +1 -1
  419. package/components/steppedProgressBar/SteppedProgressBar.d.ts +1 -1
  420. package/components/steppedProgressBar/SteppedProgressBar.js +1 -1
  421. package/components/steppedProgressBar/SteppedProgressBar.js.map +1 -1
  422. package/components/switch/Switch.d.ts +28 -1
  423. package/components/switch/Switch.js +77 -35
  424. package/components/switch/Switch.js.map +1 -1
  425. package/components/table/SortArrowDown.d.ts +1 -1
  426. package/components/table/SortArrowDown.js.map +1 -1
  427. package/components/table/SortArrowUp.d.ts +1 -1
  428. package/components/table/SortArrowUp.js.map +1 -1
  429. package/components/table/TableCardsSorting.js +4 -4
  430. package/components/table/TableCardsSorting.js.map +1 -1
  431. package/components/table/TableHead.js +1 -1
  432. package/components/table/TableHead.js.map +1 -1
  433. package/components/table/TableSearch.js +1 -1
  434. package/components/table/TableSearch.js.map +1 -1
  435. package/components/table/TableSettingsColumnButtons.d.ts +1 -1
  436. package/components/table/TableSettingsColumnButtons.js +1 -1
  437. package/components/table/TableSettingsColumnButtons.js.map +1 -1
  438. package/components/table/TableSettingsColumnDetails.d.ts +1 -1
  439. package/components/table/TableSettingsColumnDetails.js +1 -1
  440. package/components/table/TableSettingsColumnDetails.js.map +1 -1
  441. package/components/table/TableSettingsDialog.d.ts +56 -1
  442. package/components/table/TableSettingsDialog.js +170 -144
  443. package/components/table/TableSettingsDialog.js.map +1 -1
  444. package/components/table/TableSettingsDialogFooter.js +9 -9
  445. package/components/table/TableSettingsDialogFooter.js.map +1 -1
  446. package/components/table/TableSettingsListContainer.d.ts +1 -1
  447. package/components/table/TableSettingsListContainer.js.map +1 -1
  448. package/components/table/TableSettingsListItem.d.ts +1 -1
  449. package/components/table/TableSettingsListItem.js +8 -8
  450. package/components/table/TableSettingsListItem.js.map +1 -1
  451. package/components/table/TableToolbar.js +1 -1
  452. package/components/table/TableToolbar.js.map +1 -1
  453. package/components/table/TableViewToggles.d.ts +21 -1
  454. package/components/table/TableViewToggles.js +1 -1
  455. package/components/table/TableViewToggles.js.map +1 -1
  456. package/components/tag/Tag.d.ts +7 -2
  457. package/components/tag/Tag.js +1 -1
  458. package/components/tag/Tag.js.map +1 -1
  459. package/components/tag/TagList.js +1 -1
  460. package/components/tag/TagList.js.map +1 -1
  461. package/components/tagManager/CustomSuggestionItem.js +1 -1
  462. package/components/tagManager/CustomSuggestionItem.js.map +1 -1
  463. package/components/tagManager/TagManager.d.ts +29 -2
  464. package/components/tagManager/TagManager.js +6 -6
  465. package/components/tagManager/TagManager.js.map +1 -1
  466. package/components/tagManager/TagManagerItemList.d.ts +1 -1
  467. package/components/tagManager/TagManagerItemList.js +1 -1
  468. package/components/tagManager/TagManagerItemList.js.map +1 -1
  469. package/components/teaser/Teaser.d.ts +57 -55
  470. package/components/teaser/Teaser.js +1 -1
  471. package/components/teaser/Teaser.js.map +1 -1
  472. package/components/teaser/TeaserContainer.d.ts +1 -1
  473. package/components/teaser/TeaserContainer.js +1 -1
  474. package/components/teaser/TeaserContainer.js.map +1 -1
  475. package/components/timepicker/TimePicker.d.ts +20 -0
  476. package/components/timepicker/TimePicker.js +153 -99
  477. package/components/timepicker/TimePicker.js.map +1 -1
  478. package/components/tooltip/SimpleTooltip.d.ts +22 -4
  479. package/components/tooltip/SimpleTooltip.js.map +1 -1
  480. package/components/tooltip/Tooltip.d.ts +22 -2
  481. package/components/tooltip/Tooltip.js +1 -1
  482. package/components/tooltip/Tooltip.js.map +1 -1
  483. package/components/tracker/Tracker.d.ts +85 -0
  484. package/components/tracker/Tracker.js +54 -0
  485. package/components/tracker/Tracker.js.map +1 -0
  486. package/components/tracker/TrackerBlock.d.ts +11 -0
  487. package/components/tracker/TrackerBlock.js +34 -0
  488. package/components/tracker/TrackerBlock.js.map +1 -0
  489. package/components/video/ResponsiveVideo.d.ts +8 -3
  490. package/components/video/ResponsiveVideo.js +1 -1
  491. package/components/video/ResponsiveVideo.js.map +1 -1
  492. package/hooks/useCookies.d.ts +79 -0
  493. package/hooks/useCookies.js +33 -0
  494. package/hooks/useCookies.js.map +1 -0
  495. package/hooks/useInterval.js +5 -5
  496. package/hooks/useInterval.js.map +1 -1
  497. package/hooks/useIsFocusWithin.js +3 -3
  498. package/hooks/useIsFocusWithin.js.map +1 -1
  499. package/hooks/useKey.d.ts +1 -1
  500. package/hooks/useKey.js.map +1 -1
  501. package/hooks/useLatest.d.ts +16 -0
  502. package/hooks/useLatest.js +11 -0
  503. package/hooks/useLatest.js.map +1 -0
  504. package/hooks/useOnboarding.d.ts +86 -80
  505. package/hooks/useOnboarding.js.map +1 -1
  506. package/hooks/usePostMessage.d.ts +2 -1
  507. package/hooks/usePostMessage.js.map +1 -1
  508. package/hooks/useRioCookieConsent.d.ts +49 -0
  509. package/hooks/useRioCookieConsent.js +44 -0
  510. package/hooks/useRioCookieConsent.js.map +1 -0
  511. package/hooks/useSearch.d.ts +1 -1
  512. package/hooks/useSearch.js +28 -17
  513. package/hooks/useSearch.js.map +1 -1
  514. package/hooks/useSearchHighlight.d.ts +60 -0
  515. package/hooks/useSearchHighlight.js +54 -0
  516. package/hooks/useSearchHighlight.js.map +1 -0
  517. package/hooks/useTableExport.js.map +1 -1
  518. package/hooks/useTimeout.js +11 -11
  519. package/hooks/useTimeout.js.map +1 -1
  520. package/hooks/useUncontrollable.d.ts +1 -1
  521. package/hooks/useUncontrollable.js.map +1 -1
  522. package/hooks/useUrlState.d.ts +62 -0
  523. package/hooks/useUrlState.js +137 -0
  524. package/hooks/useUrlState.js.map +1 -0
  525. package/mergeClassNameOverrides.d.ts +1 -0
  526. package/mergeClassNameOverrides.js +5 -0
  527. package/mergeClassNameOverrides.js.map +1 -0
  528. package/package.json +18 -21
  529. package/routeUtils.js +11 -5
  530. package/routeUtils.js.map +1 -1
  531. package/themes/Volkswagen/components/applicationHeader/VolkswagenApplicationHeader.js +1 -1
  532. package/themes/Volkswagen/components/applicationHeader/VolkswagenApplicationHeader.js.map +1 -1
  533. package/useCookies.d.ts +2 -0
  534. package/useCookies.js +5 -0
  535. package/useCookies.js.map +1 -0
  536. package/useRioCookieConsent.d.ts +2 -0
  537. package/useRioCookieConsent.js +5 -0
  538. package/useRioCookieConsent.js.map +1 -0
  539. package/useSearchHighlight.d.ts +2 -0
  540. package/useSearchHighlight.js +6 -0
  541. package/useSearchHighlight.js.map +1 -0
  542. package/useUrlState.d.ts +2 -0
  543. package/useUrlState.js +5 -0
  544. package/useUrlState.js.map +1 -0
  545. package/utils/classNames.d.ts +3 -0
  546. package/utils/classNames.js +5 -0
  547. package/utils/classNames.js.map +1 -0
  548. package/utils/colorScheme.js +14 -13
  549. package/utils/colorScheme.js.map +1 -1
  550. package/utils/cssuseragent.js.map +1 -1
  551. package/utils/mergeClassNameOverrides.d.ts +1 -0
  552. package/utils/mergeClassNameOverrides.js +55 -0
  553. package/utils/mergeClassNameOverrides.js.map +1 -0
  554. package/utils/routeUtils.d.ts +122 -13
  555. package/utils/routeUtils.js +89 -31
  556. package/utils/routeUtils.js.map +1 -1
  557. package/utils/scrollItemIntoView.js +12 -11
  558. package/utils/scrollItemIntoView.js.map +1 -1
  559. package/utils/urlFeatureToggles.js +19 -20
  560. package/utils/urlFeatureToggles.js.map +1 -1
  561. package/version.d.ts +1 -1
  562. package/version.js +1 -1
  563. package/version.js.map +1 -1
  564. package/components/states/BaseStateProps.d.ts +0 -66
  565. package/components/statusBar/StatusBar.types.d.ts +0 -85
  566. package/components/table/TableSettingsDialog.types.d.ts +0 -39
  567. package/components/tagManager/TagManagerTag.d.ts +0 -5
@@ -0,0 +1,54 @@
1
+ import { useMemo as d, useEffect as x } from "react";
2
+ const m = "search-result-highlight", u = () => typeof window < "u" && "CSS" in window && "highlights" in CSS && typeof Highlight < "u", w = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), H = (s, c, h) => {
3
+ const t = [];
4
+ if (!c)
5
+ return t;
6
+ const n = new RegExp(w(c), h ? "g" : "gi"), a = document.createTreeWalker(s, NodeFilter.SHOW_TEXT);
7
+ let e = a.nextNode();
8
+ for (; e; ) {
9
+ const o = e.textContent ?? "";
10
+ n.lastIndex = 0;
11
+ let r = n.exec(o);
12
+ for (; r; ) {
13
+ const i = document.createRange();
14
+ i.setStart(e, r.index), i.setEnd(e, r.index + r[0].length), t.push(i), r = n.exec(o);
15
+ }
16
+ e = a.nextNode();
17
+ }
18
+ return t;
19
+ }, C = (s) => {
20
+ const {
21
+ ref: c,
22
+ query: h,
23
+ highlightClassName: t = m,
24
+ scopeSelector: n,
25
+ caseSensitive: a = !1,
26
+ deps: e
27
+ } = s, o = d(() => h.trim(), [h]), r = d(() => e ?? [], [e]);
28
+ x(() => {
29
+ if (!u())
30
+ return;
31
+ const i = c.current;
32
+ if (!i)
33
+ return;
34
+ const g = CSS.highlights.get(t) ?? new Highlight();
35
+ CSS.highlights.set(t, g);
36
+ const p = () => {
37
+ if (g.clear(), !o)
38
+ return;
39
+ const l = n ? i.querySelector(n) : i;
40
+ if (l)
41
+ for (const f of H(l, o, a))
42
+ g.add(f);
43
+ }, S = window.requestAnimationFrame(p);
44
+ return () => {
45
+ window.cancelAnimationFrame(S), g.clear();
46
+ };
47
+ }, [a, t, o, c, n, r]);
48
+ };
49
+ C.supported = () => u();
50
+ export {
51
+ m as SEARCH_HIGHLIGHT_CLASS,
52
+ C as default
53
+ };
54
+ //# sourceMappingURL=useSearchHighlight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSearchHighlight.js","sources":["../../src/hooks/useSearchHighlight.ts"],"sourcesContent":["import { useEffect, useMemo } from 'react';\n\nexport const SEARCH_HIGHLIGHT_CLASS = 'search-result-highlight';\n\nexport type UseSearchHighlightParams = {\n /**\n * Ref to the element whose text content should be searched.\n */\n ref: React.RefObject<HTMLElement>;\n\n /**\n * Search query used for highlighting.\n */\n query: string;\n\n /**\n * Name of the CSS highlight.\n *\n * @default 'search-result-highlight'\n */\n highlightClassName?: string;\n\n /**\n * Optional selector to limit the search scope\n * (e.g. '.ListMenuGroup' or '.OptionLabel').\n */\n scopeSelector?: string;\n\n /**\n * Whether to perform a case-sensitive match.\n *\n * @default false\n */\n caseSensitive?: boolean;\n\n /**\n * Optional dependencies that should trigger re-collecting and applying ranges.\n * Useful when the DOM changes after the query changes (e.g. debounced filtering).\n */\n deps?: unknown[];\n};\n\n// Guard for browser support of the CSS Highlight API.\nconst isSearchHighlightSupported = () =>\n typeof window !== 'undefined' && 'CSS' in window && 'highlights' in CSS && typeof Highlight !== 'undefined';\n\nconst escapeRegExp = (value: string) => value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n/**\n * Collects DOM Ranges for all matches of a search query\n * within the text content of a given root element.\n *\n * Purpose:\n * This utility is used by `useSearchHighlight` to translate a plain-text\n * search query into DOM `Range` objects that can be consumed by the\n * native CSS Highlight API (`Highlight` / `CSS.highlights`).\n *\n * Why this exists:\n * - The Highlight API does not accept strings or selectors, only `Range`s.\n * - React nodes may contain arbitrary nested markup; injecting `<mark>`\n * elements would break component structure and semantics.\n * - Walking the DOM text nodes allows highlighting without mutating\n * the rendered output.\n *\n * What it does:\n * - Traverses all text nodes inside `root` using a `TreeWalker`\n * - Finds all matches of `query`\n * - Creates a `Range` for each match, precisely spanning the matched text\n * - Returns all collected ranges in document order\n *\n * What it does NOT do:\n * - It does not modify the DOM\n * - It does not register or apply highlights\n * - It does not perform filtering or visibility logic\n *\n * Performance notes:\n * - Intended for reasonably sized, already-filtered DOM trees\n * (e.g. visible menu items, dropdown options)\n * - Consumers should avoid running this on large, unbounded documents\n *\n * @param root The root element whose text content should be searched\n * @param query The normalized (trimmed) search query\n * @param caseSensitive Whether matches should be case-sensitive\n * @returns An array of DOM Ranges matching the query\n */\nconst collectRanges = (root: HTMLElement, query: string, caseSensitive: boolean): Range[] => {\n const ranges: Range[] = [];\n\n if (!query) {\n return ranges;\n }\n\n const regex = new RegExp(escapeRegExp(query), caseSensitive ? 'g' : 'gi');\n\n // Walk text nodes only to avoid splitting markup.\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\n\n let node: Node | null = walker.nextNode();\n\n while (node) {\n const text = node.textContent ?? '';\n regex.lastIndex = 0;\n\n let match: RegExpExecArray | null = regex.exec(text);\n\n while (match) {\n const range = document.createRange();\n range.setStart(node, match.index);\n range.setEnd(node, match.index + match[0].length);\n ranges.push(range);\n\n match = regex.exec(text);\n }\n\n node = walker.nextNode();\n }\n\n return ranges;\n};\n\n/**\n * React hook for visually highlighting search query matches\n * using the native CSS Highlight API.\n *\n * The hook scans the text content of the referenced element\n * and applies a named CSS highlight to all matching substrings.\n *\n * Key characteristics:\n * - Progressive enhancement: safely no-ops in unsupported browsers\n * - Does not modify or re-render DOM markup\n * - Designed for search UIs (Autocomplete, ListMenu, Dropdown, etc.)\n *\n * Usage notes:\n * - The hook must always be called unconditionally\n * - Use `useSearchHighlight.supported()` only for render-time\n * fallback decisions (e.g. `<mark>` rendering)\n *\n * @param ref Ref to the element whose text should be searched\n * @param query Search query to highlight\n * @param highlightName Optional CSS highlight name\n * @param scopeSelector Optional selector to limit the search scope\n */\nconst useSearchHighlight = (params: UseSearchHighlightParams) => {\n const {\n ref,\n query,\n highlightClassName = SEARCH_HIGHLIGHT_CLASS,\n scopeSelector,\n caseSensitive = false,\n deps,\n } = params;\n\n const normalizedQuery = useMemo(() => query.trim(), [query]);\n\n const extraDeps = useMemo(() => deps ?? [], [deps]);\n\n useEffect(() => {\n if (!isSearchHighlightSupported()) {\n return;\n }\n\n const container = ref.current;\n if (!container) {\n return;\n }\n\n // Reuse the named highlight so multiple renders update the same layer.\n const highlight = CSS.highlights.get(highlightClassName) ?? new Highlight();\n CSS.highlights.set(highlightClassName, highlight);\n\n const applyHighlight = () => {\n // Always clear before re-adding to avoid stale ranges.\n highlight.clear();\n\n if (!normalizedQuery) {\n return;\n }\n\n const scopeRoot = scopeSelector\n ? (container.querySelector(scopeSelector) as HTMLElement | null)\n : container;\n\n if (!scopeRoot) {\n return;\n }\n\n for (const range of collectRanges(scopeRoot, normalizedQuery, caseSensitive)) {\n highlight.add(range);\n }\n };\n\n // Defer until after layout so text nodes are in place.\n const raf = window.requestAnimationFrame(applyHighlight);\n\n return () => {\n window.cancelAnimationFrame(raf);\n // Ensure highlights are removed when query or component unmounts.\n highlight.clear();\n };\n }, [caseSensitive, highlightClassName, normalizedQuery, ref, scopeSelector, extraDeps]);\n};\n\n/**\n * Indicates whether the current environment supports\n * the native CSS Highlight API.\n *\n * Can be used to decide whether to render a `<mark>` fallback.\n */\nuseSearchHighlight.supported = () => isSearchHighlightSupported();\n\nexport default useSearchHighlight;\n"],"names":["SEARCH_HIGHLIGHT_CLASS","isSearchHighlightSupported","escapeRegExp","value","collectRanges","root","query","caseSensitive","ranges","regex","walker","node","text","match","range","useSearchHighlight","params","ref","highlightClassName","scopeSelector","deps","normalizedQuery","useMemo","extraDeps","useEffect","container","highlight","applyHighlight","scopeRoot","raf"],"mappings":";AAEO,MAAMA,IAAyB,2BAyChCC,IAA6B,MAC/B,OAAO,SAAW,OAAe,SAAS,UAAU,gBAAgB,OAAO,OAAO,YAAc,KAE9FC,IAAe,CAACC,MAAkBA,EAAM,QAAQ,uBAAuB,MAAM,GAuC7EC,IAAgB,CAACC,GAAmBC,GAAeC,MAAoC;AACzF,QAAMC,IAAkB,CAAA;AAExB,MAAI,CAACF;AACD,WAAOE;AAGX,QAAMC,IAAQ,IAAI,OAAOP,EAAaI,CAAK,GAAGC,IAAgB,MAAM,IAAI,GAGlEG,IAAS,SAAS,iBAAiBL,GAAM,WAAW,SAAS;AAEnE,MAAIM,IAAoBD,EAAO,SAAA;AAE/B,SAAOC,KAAM;AACT,UAAMC,IAAOD,EAAK,eAAe;AACjC,IAAAF,EAAM,YAAY;AAElB,QAAII,IAAgCJ,EAAM,KAAKG,CAAI;AAEnD,WAAOC,KAAO;AACV,YAAMC,IAAQ,SAAS,YAAA;AACvB,MAAAA,EAAM,SAASH,GAAME,EAAM,KAAK,GAChCC,EAAM,OAAOH,GAAME,EAAM,QAAQA,EAAM,CAAC,EAAE,MAAM,GAChDL,EAAO,KAAKM,CAAK,GAEjBD,IAAQJ,EAAM,KAAKG,CAAI;AAAA,IAC3B;AAEA,IAAAD,IAAOD,EAAO,SAAA;AAAA,EAClB;AAEA,SAAOF;AACX,GAwBMO,IAAqB,CAACC,MAAqC;AAC7D,QAAM;AAAA,IACF,KAAAC;AAAA,IACA,OAAAX;AAAA,IACA,oBAAAY,IAAqBlB;AAAA,IACrB,eAAAmB;AAAA,IACA,eAAAZ,IAAgB;AAAA,IAChB,MAAAa;AAAA,EAAA,IACAJ,GAEEK,IAAkBC,EAAQ,MAAMhB,EAAM,QAAQ,CAACA,CAAK,CAAC,GAErDiB,IAAYD,EAAQ,MAAMF,KAAQ,CAAA,GAAI,CAACA,CAAI,CAAC;AAElD,EAAAI,EAAU,MAAM;AACZ,QAAI,CAACvB;AACD;AAGJ,UAAMwB,IAAYR,EAAI;AACtB,QAAI,CAACQ;AACD;AAIJ,UAAMC,IAAY,IAAI,WAAW,IAAIR,CAAkB,KAAK,IAAI,UAAA;AAChE,QAAI,WAAW,IAAIA,GAAoBQ,CAAS;AAEhD,UAAMC,IAAiB,MAAM;AAIzB,UAFAD,EAAU,MAAA,GAEN,CAACL;AACD;AAGJ,YAAMO,IAAYT,IACXM,EAAU,cAAcN,CAAa,IACtCM;AAEN,UAAKG;AAIL,mBAAWd,KAASV,EAAcwB,GAAWP,GAAiBd,CAAa;AACvE,UAAAmB,EAAU,IAAIZ,CAAK;AAAA,IAE3B,GAGMe,IAAM,OAAO,sBAAsBF,CAAc;AAEvD,WAAO,MAAM;AACT,aAAO,qBAAqBE,CAAG,GAE/BH,EAAU,MAAA;AAAA,IACd;AAAA,EACJ,GAAG,CAACnB,GAAeW,GAAoBG,GAAiBJ,GAAKE,GAAeI,CAAS,CAAC;AAC1F;AAQAR,EAAmB,YAAY,MAAMd,EAAA;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useTableExport.js","sources":["../../src/hooks/useTableExport.ts"],"sourcesContent":["import { useCallback } from 'react';\n\n/**\n * Options for exporting tabular data to CSV.\n */\nexport type ExportOptions<T extends object> = {\n /**\n * Array of data objects to export. Each object represents one row in the table.\n */\n data: T[];\n\n /**\n * Optional name for the exported file.\n * @default \"export.csv\"\n */\n fileName?: string;\n\n /**\n * Optional list of object keys to export as columns.\n * If omitted, all keys from the first row will be used.\n */\n columns?: (keyof T)[];\n\n /**\n * Optional map of column keys to custom header labels.\n * @example { firstName: 'First Name' }\n */\n headers?: Partial<Record<keyof T, string>>;\n\n /**\n * Optional delimiter to use between values in the CSV.\n * You can use `\";\"` or `\"\\t\"` for other formats.\n * @default \",\"\n */\n delimiter?: string;\n\n /**\n * Whether to include UTF-8 BOM (useful for Excel).\n * @default true\n */\n withBom?: boolean;\n};\n\n/**\n * Converts a dataset into CSV format as a string.\n *\n * @template T Type of each row object.\n * @param data The data array to convert.\n * @param columns Optional keys to include as columns.\n * @param headers Optional key-to-label mapping for header row.\n * @param delimiter Delimiter to separate columns. Defaults to `\",\"`.\n * @returns A string representing the CSV data.\n */\nconst convertToCSV = <T extends object>(\n data: T[],\n columns: (keyof T)[],\n headers?: Partial<Record<keyof T, string>>,\n delimiter = ','\n): string => {\n if (!data.length) {\n return '';\n }\n\n const escapeFn = (val: any) => {\n if (val === null || val === undefined) {\n return '';\n }\n\n const str = String(val);\n const needsQuotes = str.includes(delimiter) || str.includes('\"') || str.includes('\\n');\n const escaped = str.replace(/\"/g, '\"\"');\n return needsQuotes ? `\"${escaped}\"` : escaped;\n };\n\n const headerRow = columns.map(key => escapeFn(headers?.[key] ?? String(key))).join(delimiter);\n\n const dataRows = data.map(row => columns.map(key => escapeFn(row[key])).join(delimiter));\n\n return [headerRow, ...dataRows].join('\\n');\n};\n\n/**\n * React hook for exporting tabular data to a downloadable CSV file.\n *\n * @template T Type of each data row object.\n * @returns An object with a `exportToCSV` function to trigger the export.\n *\n * @example\n * const { exportToCSV } = useTableExport<User>();\n * exportToCSV({ data: users, fileName: 'users.csv', delimiter: ';' });\n */\nconst useTableExport = <T extends object>() => {\n const exportToCSV = useCallback(\n ({ data, fileName = 'export.csv', columns, headers, delimiter = ',', withBom = true }: ExportOptions<T>) => {\n if (!data.length) {\n return;\n }\n\n const cols = columns ?? (Object.keys(data[0]) as (keyof T)[]);\n const csv = convertToCSV(data, cols, headers, delimiter);\n\n const bom = withBom ? '\\uFEFF' : '';\n const blob = new Blob([bom + csv], { type: 'text/csv;charset=utf-8;' });\n\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.setAttribute('download', fileName);\n\n document.body.appendChild(link);\n link.click();\n\n document.body.removeChild(link);\n },\n []\n );\n\n return { exportToCSV };\n};\n\nexport default useTableExport;\n"],"names":["convertToCSV","data","columns","headers","delimiter","escapeFn","val","str","needsQuotes","escaped","headerRow","key","dataRows","row","useTableExport","useCallback","fileName","withBom","cols","csv","bom","blob","link"],"mappings":";AAqDA,MAAMA,IAAe,CACjBC,GACAC,GACAC,GACAC,IAAY,QACH;AACT,MAAI,CAACH,EAAK;AACN,WAAO;AAGX,QAAMI,IAAW,CAACC,MAAa;AAC3B,QAAIA,KAAQ;AACR,aAAO;AAGX,UAAMC,IAAM,OAAOD,CAAG,GAChBE,IAAcD,EAAI,SAASH,CAAS,KAAKG,EAAI,SAAS,GAAG,KAAKA,EAAI,SAAS;AAAA,CAAI,GAC/EE,IAAUF,EAAI,QAAQ,MAAM,IAAI;AACtC,WAAOC,IAAc,IAAIC,CAAO,MAAMA;AAAA,EAC1C,GAEMC,IAAYR,EAAQ,IAAI,CAAAS,MAAON,EAASF,IAAUQ,CAAG,KAAK,OAAOA,CAAG,CAAC,CAAC,EAAE,KAAKP,CAAS,GAEtFQ,IAAWX,EAAK,IAAI,CAAAY,MAAOX,EAAQ,IAAI,CAAAS,MAAON,EAASQ,EAAIF,CAAG,CAAC,CAAC,EAAE,KAAKP,CAAS,CAAC;AAEvF,SAAO,CAACM,GAAW,GAAGE,CAAQ,EAAE,KAAK;AAAA,CAAI;AAC7C,GAYME,IAAiB,OAyBZ,EAAE,aAxBWC;AAAA,EAChB,CAAC,EAAE,MAAAd,GAAM,UAAAe,IAAW,cAAc,SAAAd,GAAS,SAAAC,GAAS,WAAAC,IAAY,KAAK,SAAAa,IAAU,SAA6B;AACxG,QAAI,CAAChB,EAAK;AACN;AAGJ,UAAMiB,IAAOhB,KAAY,OAAO,KAAKD,EAAK,CAAC,CAAC,GACtCkB,IAAMnB,EAAaC,GAAMiB,GAAMf,GAASC,CAAS,GAEjDgB,IAAMH,IAAU,WAAW,IAC3BI,IAAO,IAAI,KAAK,CAACD,IAAMD,CAAG,GAAG,EAAE,MAAM,2BAA2B,GAEhEG,IAAO,SAAS,cAAc,GAAG;AACvC,IAAAA,EAAK,OAAO,IAAI,gBAAgBD,CAAI,GACpCC,EAAK,aAAa,YAAYN,CAAQ,GAEtC,SAAS,KAAK,YAAYM,CAAI,GAC9BA,EAAK,MAAA,GAEL,SAAS,KAAK,YAAYA,CAAI;AAAA,EAClC;AAAA,EACA,CAAA;AAAC,EAGI;"}
1
+ {"version":3,"file":"useTableExport.js","sources":["../../src/hooks/useTableExport.ts"],"sourcesContent":["import { useCallback } from 'react';\n\n/**\n * Options for exporting tabular data to CSV.\n */\nexport type ExportOptions<T extends object> = {\n /**\n * Array of data objects to export. Each object represents one row in the table.\n */\n data: T[];\n\n /**\n * Optional name for the exported file.\n * @default \"export.csv\"\n */\n fileName?: string;\n\n /**\n * Optional list of object keys to export as columns.\n * If omitted, all keys from the first row will be used.\n */\n columns?: (keyof T)[];\n\n /**\n * Optional map of column keys to custom header labels.\n * @example { firstName: 'First Name' }\n */\n headers?: Partial<Record<keyof T, string>>;\n\n /**\n * Optional delimiter to use between values in the CSV.\n * You can use `\";\"` or `\"\\t\"` for other formats.\n * @default \",\"\n */\n delimiter?: string;\n\n /**\n * Whether to include UTF-8 BOM (useful for Excel).\n * @default true\n */\n withBom?: boolean;\n};\n\n/**\n * Converts a dataset into CSV format as a string.\n *\n * @template T Type of each row object.\n * @param data The data array to convert.\n * @param columns Optional keys to include as columns.\n * @param headers Optional key-to-label mapping for header row.\n * @param delimiter Delimiter to separate columns. Defaults to `\",\"`.\n * @returns A string representing the CSV data.\n */\nconst convertToCSV = <T extends object>(\n data: T[],\n columns: (keyof T)[],\n headers?: Partial<Record<keyof T, string>>,\n delimiter = ','\n): string => {\n if (!data.length) {\n return '';\n }\n\n // biome-ignore lint/suspicious/noExplicitAny: whatever type, it will be converted to string anyways\n const escapeFn = (val: any) => {\n if (val === null || val === undefined) {\n return '';\n }\n\n const str = String(val);\n const needsQuotes = str.includes(delimiter) || str.includes('\"') || str.includes('\\n');\n const escaped = str.replace(/\"/g, '\"\"');\n return needsQuotes ? `\"${escaped}\"` : escaped;\n };\n\n const headerRow = columns.map(key => escapeFn(headers?.[key] ?? String(key))).join(delimiter);\n\n const dataRows = data.map(row => columns.map(key => escapeFn(row[key])).join(delimiter));\n\n return [headerRow, ...dataRows].join('\\n');\n};\n\n/**\n * React hook for exporting tabular data to a downloadable CSV file.\n *\n * @template T Type of each data row object.\n * @returns An object with a `exportToCSV` function to trigger the export.\n *\n * @example\n * const { exportToCSV } = useTableExport<User>();\n * exportToCSV({ data: users, fileName: 'users.csv', delimiter: ';' });\n */\nconst useTableExport = <T extends object>() => {\n const exportToCSV = useCallback(\n ({ data, fileName = 'export.csv', columns, headers, delimiter = ',', withBom = true }: ExportOptions<T>) => {\n if (!data.length) {\n return;\n }\n\n const cols = columns ?? (Object.keys(data[0]) as (keyof T)[]);\n const csv = convertToCSV(data, cols, headers, delimiter);\n\n const bom = withBom ? '\\uFEFF' : '';\n const blob = new Blob([bom + csv], { type: 'text/csv;charset=utf-8;' });\n\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.setAttribute('download', fileName);\n\n document.body.appendChild(link);\n link.click();\n\n document.body.removeChild(link);\n },\n []\n );\n\n return { exportToCSV };\n};\n\nexport default useTableExport;\n"],"names":["convertToCSV","data","columns","headers","delimiter","escapeFn","val","str","needsQuotes","escaped","headerRow","key","dataRows","row","useTableExport","useCallback","fileName","withBom","cols","csv","bom","blob","link"],"mappings":";AAqDA,MAAMA,IAAe,CACjBC,GACAC,GACAC,GACAC,IAAY,QACH;AACT,MAAI,CAACH,EAAK;AACN,WAAO;AAIX,QAAMI,IAAW,CAACC,MAAa;AAC3B,QAAIA,KAAQ;AACR,aAAO;AAGX,UAAMC,IAAM,OAAOD,CAAG,GAChBE,IAAcD,EAAI,SAASH,CAAS,KAAKG,EAAI,SAAS,GAAG,KAAKA,EAAI,SAAS;AAAA,CAAI,GAC/EE,IAAUF,EAAI,QAAQ,MAAM,IAAI;AACtC,WAAOC,IAAc,IAAIC,CAAO,MAAMA;AAAA,EAC1C,GAEMC,IAAYR,EAAQ,IAAI,CAAAS,MAAON,EAASF,IAAUQ,CAAG,KAAK,OAAOA,CAAG,CAAC,CAAC,EAAE,KAAKP,CAAS,GAEtFQ,IAAWX,EAAK,IAAI,CAAAY,MAAOX,EAAQ,IAAI,CAAAS,MAAON,EAASQ,EAAIF,CAAG,CAAC,CAAC,EAAE,KAAKP,CAAS,CAAC;AAEvF,SAAO,CAACM,GAAW,GAAGE,CAAQ,EAAE,KAAK;AAAA,CAAI;AAC7C,GAYME,IAAiB,OAyBZ,EAAE,aAxBWC;AAAA,EAChB,CAAC,EAAE,MAAAd,GAAM,UAAAe,IAAW,cAAc,SAAAd,GAAS,SAAAC,GAAS,WAAAC,IAAY,KAAK,SAAAa,IAAU,SAA6B;AACxG,QAAI,CAAChB,EAAK;AACN;AAGJ,UAAMiB,IAAOhB,KAAY,OAAO,KAAKD,EAAK,CAAC,CAAC,GACtCkB,IAAMnB,EAAaC,GAAMiB,GAAMf,GAASC,CAAS,GAEjDgB,IAAMH,IAAU,WAAW,IAC3BI,IAAO,IAAI,KAAK,CAACD,IAAMD,CAAG,GAAG,EAAE,MAAM,2BAA2B,GAEhEG,IAAO,SAAS,cAAc,GAAG;AACvC,IAAAA,EAAK,OAAO,IAAI,gBAAgBD,CAAI,GACpCC,EAAK,aAAa,YAAYN,CAAQ,GAEtC,SAAS,KAAK,YAAYM,CAAI,GAC9BA,EAAK,MAAA,GAEL,SAAS,KAAK,YAAYA,CAAI;AAAA,EAClC;AAAA,EACA,CAAA;AAAC,EAGI;"}
@@ -4,30 +4,30 @@ const f = (s, t) => {
4
4
  return l(() => {
5
5
  c.current = s;
6
6
  }, [s]), l(() => {
7
- const r = () => c.current();
7
+ const n = () => c.current();
8
8
  if (typeof t == "number")
9
- return e.current = window.setTimeout(r, t), () => {
10
- e.current !== null && window.clearTimeout(e.current);
9
+ return e.current = setTimeout(n, t), () => {
10
+ e.current !== null && clearTimeout(e.current);
11
11
  };
12
12
  }, [t]), e;
13
13
  }, _ = () => {
14
14
  const t = (u, i, o) => {
15
- const n = o - Date.now();
16
- u.current = n <= 2147483647 ? setTimeout(i, n) : setTimeout(() => t(u, i, o), 2147483647);
17
- }, e = m(null), { set: c, clear: r } = T(() => {
15
+ const r = o - Date.now();
16
+ u.current = r <= 2147483647 ? setTimeout(i, r) : setTimeout(() => t(u, i, o), 2147483647);
17
+ }, e = m(null), { set: c, clear: n } = T(() => {
18
18
  const u = () => clearTimeout(e.current);
19
19
  return {
20
- set: (o, n = 0) => {
21
- u(), n <= 2147483647 ? e.current = setTimeout(o, n) : t(e, o, Date.now() + n);
20
+ set: (o, r = 0) => {
21
+ u(), r <= 2147483647 ? e.current = setTimeout(o, r) : t(e, o, Date.now() + r);
22
22
  },
23
23
  clear: u
24
24
  };
25
25
  }, []);
26
26
  return l(() => () => {
27
- r();
28
- }, [r]), {
27
+ n();
28
+ }, [n]), {
29
29
  set: c,
30
- clear: r,
30
+ clear: n,
31
31
  handleRef: e
32
32
  };
33
33
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useTimeout.js","sources":["../../src/hooks/useTimeout.ts"],"sourcesContent":["import type React from 'react';\nimport { useEffect, useMemo, useRef } from 'react';\n\n// See www.joshwcomeau.com/snippets/react-hooks/use-timeout/\n\n/**\n * A custom hook for handling timeout events.\n *\n * @param callback The callback function to execute after the timeout.\n * @param delay The duration of the timeout in milliseconds. Pass `null` to cancel the timeout.\n *\n * @returns A mutable ref object to manage the timeout ID.\n */\nconst useTimeout = (callback: () => void, delay: number | null): React.MutableRefObject<number | null> => {\n const timeoutRef = useRef<number | null>(null);\n const savedCallback = useRef<() => void>(callback);\n\n // Update the saved callback when the callback prop changes\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n // Set up the timeout when the delay changes\n useEffect(() => {\n const tick = () => savedCallback.current();\n\n // If delay is a number, set up the timeout\n if (typeof delay === 'number') {\n timeoutRef.current = window.setTimeout(tick, delay);\n\n // Cleanup function to clear the timeout when delay changes or component unmounts\n return () => {\n if (timeoutRef.current !== null) {\n window.clearTimeout(timeoutRef.current);\n }\n };\n }\n }, [delay]);\n\n return timeoutRef;\n};\n\nexport const useChainedTimeout = () => {\n const MAX_DELAY_MS = 2 ** 31 - 1;\n\n const setChainedTimeout = (ref: React.MutableRefObject<any>, fn: () => void, timeoutAtMs: number) => {\n const delayMs = timeoutAtMs - Date.now();\n\n ref.current =\n delayMs <= MAX_DELAY_MS\n ? setTimeout(fn, delayMs)\n : setTimeout(() => setChainedTimeout(ref, fn, timeoutAtMs), MAX_DELAY_MS);\n };\n\n const handleRef = useRef<any>(null);\n\n const { set, clear } = useMemo(() => {\n const clear = () => clearTimeout(handleRef.current);\n\n const set = (fn: () => void, delayMs = 0): void => {\n clear();\n\n if (delayMs <= MAX_DELAY_MS) {\n // For simplicity, if the timeout is short, just set a normal timeout.\n handleRef.current = setTimeout(fn, delayMs);\n } else {\n setChainedTimeout(handleRef, fn, Date.now() + delayMs);\n }\n };\n\n return {\n set,\n clear,\n };\n }, []);\n\n useEffect(() => {\n return () => {\n clear();\n };\n }, [clear]);\n\n return {\n set,\n clear,\n handleRef,\n };\n};\n\nexport default useTimeout;\n"],"names":["useTimeout","callback","delay","timeoutRef","useRef","savedCallback","useEffect","tick","useChainedTimeout","setChainedTimeout","ref","fn","timeoutAtMs","delayMs","handleRef","set","clear","useMemo"],"mappings":";AAaA,MAAMA,IAAa,CAACC,GAAsBC,MAAgE;AACtG,QAAMC,IAAaC,EAAsB,IAAI,GACvCC,IAAgBD,EAAmBH,CAAQ;AAGjD,SAAAK,EAAU,MAAM;AACZ,IAAAD,EAAc,UAAUJ;AAAA,EAC5B,GAAG,CAACA,CAAQ,CAAC,GAGbK,EAAU,MAAM;AACZ,UAAMC,IAAO,MAAMF,EAAc,QAAA;AAGjC,QAAI,OAAOH,KAAU;AACjB,aAAAC,EAAW,UAAU,OAAO,WAAWI,GAAML,CAAK,GAG3C,MAAM;AACT,QAAIC,EAAW,YAAY,QACvB,OAAO,aAAaA,EAAW,OAAO;AAAA,MAE9C;AAAA,EAER,GAAG,CAACD,CAAK,CAAC,GAEHC;AACX,GAEaK,IAAoB,MAAM;AAGnC,QAAMC,IAAoB,CAACC,GAAkCC,GAAgBC,MAAwB;AACjG,UAAMC,IAAUD,IAAc,KAAK,IAAA;AAEnC,IAAAF,EAAI,UACAG,KAAW,aACL,WAAWF,GAAIE,CAAO,IACtB,WAAW,MAAMJ,EAAkBC,GAAKC,GAAIC,CAAW,GAAG,UAAY;AAAA,EACpF,GAEME,IAAYV,EAAY,IAAI,GAE5B,EAAE,KAAAW,GAAK,OAAAC,EAAA,IAAUC,EAAQ,MAAM;AACjC,UAAMD,IAAQ,MAAM,aAAaF,EAAU,OAAO;AAalD,WAAO;AAAA,MACH,KAZQ,CAACH,GAAgBE,IAAU,MAAY;AAC/CG,QAAAA,EAAAA,GAEIH,KAAW,aAEXC,EAAU,UAAU,WAAWH,GAAIE,CAAO,IAE1CJ,EAAkBK,GAAWH,GAAI,KAAK,IAAA,IAAQE,CAAO;AAAA,MAE7D;AAAA,MAII,OAAAG;AAAAA,IAAA;AAAA,EAER,GAAG,CAAA,CAAE;AAEL,SAAAV,EAAU,MACC,MAAM;AACT,IAAAU,EAAA;AAAA,EACJ,GACD,CAACA,CAAK,CAAC,GAEH;AAAA,IACH,KAAAD;AAAA,IACA,OAAAC;AAAA,IACA,WAAAF;AAAA,EAAA;AAER;"}
1
+ {"version":3,"file":"useTimeout.js","sources":["../../src/hooks/useTimeout.ts"],"sourcesContent":["import type React from 'react';\nimport { useEffect, useMemo, useRef } from 'react';\n\n// See www.joshwcomeau.com/snippets/react-hooks/use-timeout/\n\n/**\n * A custom hook for handling timeout events.\n *\n * @param callback The callback function to execute after the timeout.\n * @param delay The duration of the timeout in milliseconds. Pass `null` to cancel the timeout.\n *\n * @returns A mutable ref object to manage the timeout ID.\n */\nconst useTimeout = (callback: () => void, delay: number | null): React.MutableRefObject<number | null> => {\n const timeoutRef = useRef<number | null>(null);\n const savedCallback = useRef<() => void>(callback);\n\n // Update the saved callback when the callback prop changes\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n // Set up the timeout when the delay changes\n useEffect(() => {\n const tick = () => savedCallback.current();\n\n // If delay is a number, set up the timeout\n if (typeof delay === 'number') {\n timeoutRef.current = setTimeout(tick, delay) as unknown as number;\n\n // Cleanup function to clear the timeout when delay changes or component unmounts\n return () => {\n if (timeoutRef.current !== null) {\n clearTimeout(timeoutRef.current);\n }\n };\n }\n }, [delay]);\n\n return timeoutRef;\n};\n\nexport const useChainedTimeout = () => {\n const MAX_DELAY_MS = 2 ** 31 - 1;\n\n const setChainedTimeout = (ref: React.MutableRefObject<any>, fn: () => void, timeoutAtMs: number) => {\n const delayMs = timeoutAtMs - Date.now();\n\n ref.current =\n delayMs <= MAX_DELAY_MS\n ? setTimeout(fn, delayMs)\n : setTimeout(() => setChainedTimeout(ref, fn, timeoutAtMs), MAX_DELAY_MS);\n };\n\n const handleRef = useRef<any>(null);\n\n const { set, clear } = useMemo(() => {\n const clear = () => clearTimeout(handleRef.current);\n\n const set = (fn: () => void, delayMs = 0): void => {\n clear();\n\n if (delayMs <= MAX_DELAY_MS) {\n // For simplicity, if the timeout is short, just set a normal timeout.\n handleRef.current = setTimeout(fn, delayMs);\n } else {\n setChainedTimeout(handleRef, fn, Date.now() + delayMs);\n }\n };\n\n return {\n set,\n clear,\n };\n }, []);\n\n useEffect(() => {\n return () => {\n clear();\n };\n }, [clear]);\n\n return {\n set,\n clear,\n handleRef,\n };\n};\n\nexport default useTimeout;\n"],"names":["useTimeout","callback","delay","timeoutRef","useRef","savedCallback","useEffect","tick","useChainedTimeout","setChainedTimeout","ref","fn","timeoutAtMs","delayMs","handleRef","set","clear","useMemo"],"mappings":";AAaA,MAAMA,IAAa,CAACC,GAAsBC,MAAgE;AACtG,QAAMC,IAAaC,EAAsB,IAAI,GACvCC,IAAgBD,EAAmBH,CAAQ;AAGjD,SAAAK,EAAU,MAAM;AACZ,IAAAD,EAAc,UAAUJ;AAAA,EAC5B,GAAG,CAACA,CAAQ,CAAC,GAGbK,EAAU,MAAM;AACZ,UAAMC,IAAO,MAAMF,EAAc,QAAA;AAGjC,QAAI,OAAOH,KAAU;AACjB,aAAAC,EAAW,UAAU,WAAWI,GAAML,CAAK,GAGpC,MAAM;AACT,QAAIC,EAAW,YAAY,QACvB,aAAaA,EAAW,OAAO;AAAA,MAEvC;AAAA,EAER,GAAG,CAACD,CAAK,CAAC,GAEHC;AACX,GAEaK,IAAoB,MAAM;AAGnC,QAAMC,IAAoB,CAACC,GAAkCC,GAAgBC,MAAwB;AACjG,UAAMC,IAAUD,IAAc,KAAK,IAAA;AAEnC,IAAAF,EAAI,UACAG,KAAW,aACL,WAAWF,GAAIE,CAAO,IACtB,WAAW,MAAMJ,EAAkBC,GAAKC,GAAIC,CAAW,GAAG,UAAY;AAAA,EACpF,GAEME,IAAYV,EAAY,IAAI,GAE5B,EAAE,KAAAW,GAAK,OAAAC,EAAA,IAAUC,EAAQ,MAAM;AACjC,UAAMD,IAAQ,MAAM,aAAaF,EAAU,OAAO;AAalD,WAAO;AAAA,MACH,KAZQ,CAACH,GAAgBE,IAAU,MAAY;AAC/CG,QAAAA,EAAAA,GAEIH,KAAW,aAEXC,EAAU,UAAU,WAAWH,GAAIE,CAAO,IAE1CJ,EAAkBK,GAAWH,GAAI,KAAK,IAAA,IAAQE,CAAO;AAAA,MAE7D;AAAA,MAII,OAAAG;AAAAA,IAAA;AAAA,EAER,GAAG,CAAA,CAAE;AAEL,SAAAV,EAAU,MACC,MAAM;AACT,IAAAU,EAAA;AAAA,EACJ,GACD,CAACA,CAAK,CAAC,GAEH;AAAA,IACH,KAAAD;AAAA,IACA,OAAAC;AAAA,IACA,WAAAF;AAAA,EAAA;AAER;"}
@@ -1,7 +1,7 @@
1
1
  export type Handler = (value: any, ...args: any[]) => any;
2
2
  export declare function defaultKey(key: string): string;
3
3
  declare function useUncontrolledProp<TProp, THandler extends Handler = Handler>(propValue: TProp | undefined, defaultValue: TProp, handler?: THandler): readonly [TProp, THandler];
4
- declare function useUncontrolledProp<TProp, THandler extends Handler = Handler>(propValue: TProp | undefined, defaultValue?: TProp | undefined, handler?: THandler): readonly [TProp | undefined, (...args: Parameters<THandler>) => ReturnType<THandler> | void];
4
+ declare function useUncontrolledProp<TProp, THandler extends Handler = Handler>(propValue: TProp | undefined, defaultValue?: TProp | undefined, handler?: THandler): readonly [TProp | undefined, (...args: Parameters<THandler>) => ReturnType<THandler> | undefined];
5
5
  export { useUncontrolledProp };
6
6
  type FilterFlags<Base, Condition> = {
7
7
  [Key in keyof Base]: NonNullable<Base[Key]> extends Condition ? Key : never;
@@ -1 +1 @@
1
- {"version":3,"file":"useUncontrollable.js","sources":["../../src/hooks/useUncontrollable.ts"],"sourcesContent":["/* eslint-disable prefer-arrow/prefer-arrow-functions */\n// forked from https://github.com/jquense/uncontrollable/blob/master/src/index.ts\nimport { useCallback, useRef, useState } from 'react';\n\nexport type Handler = (value: any, ...args: any[]) => any;\n\nexport function defaultKey(key: string) {\n return 'default' + key.charAt(0).toUpperCase() + key.substr(1);\n}\n\nfunction useUncontrolledProp<TProp, THandler extends Handler = Handler>(\n propValue: TProp | undefined,\n defaultValue: TProp,\n handler?: THandler\n): readonly [TProp, THandler];\n\nfunction useUncontrolledProp<TProp, THandler extends Handler = Handler>(\n propValue: TProp | undefined,\n defaultValue?: TProp | undefined,\n handler?: THandler\n): readonly [TProp | undefined, (...args: Parameters<THandler>) => ReturnType<THandler> | void];\n\nfunction useUncontrolledProp<TProp, THandler extends Handler = Handler>(\n propValue: TProp | undefined,\n defaultValue: TProp | undefined,\n handler?: THandler\n) {\n const wasPropRef = useRef<boolean>(propValue !== undefined);\n const [stateValue, setState] = useState<TProp | undefined>(defaultValue);\n\n const isProp = propValue !== undefined;\n const wasProp = wasPropRef.current;\n\n wasPropRef.current = isProp;\n\n /**\n * If a prop switches from controlled to Uncontrolled\n * reset its value to the defaultValue\n */\n if (!isProp && wasProp && stateValue !== defaultValue) {\n setState(defaultValue);\n }\n\n return [\n isProp ? propValue : stateValue,\n useCallback(\n (...args: Parameters<THandler>): ReturnType<THandler> | void => {\n const [value, ...rest] = args;\n const returnValue = handler?.(value, ...rest);\n setState(value);\n return returnValue;\n },\n [handler]\n ),\n ] as const;\n}\n\nexport { useUncontrolledProp };\n\ntype FilterFlags<Base, Condition> = {\n [Key in keyof Base]: NonNullable<Base[Key]> extends Condition ? Key : never;\n};\n\ntype AllowedNames<Base, Condition> = FilterFlags<Base, Condition>[keyof Base];\n\ntype ConfigMap<TProps extends object> = {\n [p in keyof TProps]?: AllowedNames<TProps, Function>;\n};\n\nexport function useUncontrolled<TProps extends object, TDefaults extends string = never>(\n props: TProps,\n config: ConfigMap<TProps>\n): Omit<TProps, TDefaults> {\n return Object.keys(config).reduce((result: TProps, fieldName: string) => {\n const { [defaultKey(fieldName)]: defaultValue, [fieldName]: propsValue, ...rest } = result as any;\n\n // @ts-ignore-next-line\n const handlerName = config[fieldName];\n // @ts-ignore-next-line\n const [value, handler] = useUncontrolledProp(propsValue, defaultValue, props[handlerName]);\n\n return {\n ...rest,\n [fieldName]: value,\n [handlerName]: handler,\n };\n }, props);\n}\n"],"names":["useUncontrolledProp","propValue","defaultValue","handler","wasPropRef","useRef","stateValue","setState","useState","isProp","wasProp","useCallback","args","value","rest","returnValue"],"mappings":";AAsBA,SAASA,EACLC,GACAC,GACAC,GACF;AACE,QAAMC,IAAaC,EAAgBJ,MAAc,MAAS,GACpD,CAACK,GAAYC,CAAQ,IAAIC,EAA4BN,CAAY,GAEjEO,IAASR,MAAc,QACvBS,IAAUN,EAAW;AAE3B,SAAAA,EAAW,UAAUK,GAMjB,CAACA,KAAUC,KAAWJ,MAAeJ,KACrCK,EAASL,CAAY,GAGlB;AAAA,IACHO,IAASR,IAAYK;AAAA,IACrBK;AAAA,MACI,IAAIC,MAA4D;AAC5D,cAAM,CAACC,GAAO,GAAGC,CAAI,IAAIF,GACnBG,IAAcZ,IAAUU,GAAO,GAAGC,CAAI;AAC5C,eAAAP,EAASM,CAAK,GACPE;AAAA,MACX;AAAA,MACA,CAACZ,CAAO;AAAA,IAAA;AAAA,EACZ;AAER;"}
1
+ {"version":3,"file":"useUncontrollable.js","sources":["../../src/hooks/useUncontrollable.ts"],"sourcesContent":["/* eslint-disable prefer-arrow/prefer-arrow-functions */\n// forked from https://github.com/jquense/uncontrollable/blob/master/src/index.ts\nimport { useCallback, useRef, useState } from 'react';\n\n// biome-ignore lint/suspicious/noExplicitAny: unknown types\nexport type Handler = (value: any, ...args: any[]) => any;\n\nexport function defaultKey(key: string) {\n return `default${key.charAt(0).toUpperCase()}${key.substr(1)}`;\n}\n\nfunction useUncontrolledProp<TProp, THandler extends Handler = Handler>(\n propValue: TProp | undefined,\n defaultValue: TProp,\n handler?: THandler\n): readonly [TProp, THandler];\n\nfunction useUncontrolledProp<TProp, THandler extends Handler = Handler>(\n propValue: TProp | undefined,\n defaultValue?: TProp | undefined,\n handler?: THandler\n): readonly [TProp | undefined, (...args: Parameters<THandler>) => ReturnType<THandler> | undefined];\n\nfunction useUncontrolledProp<TProp, THandler extends Handler = Handler>(\n propValue: TProp | undefined,\n defaultValue: TProp | undefined,\n handler?: THandler\n) {\n const wasPropRef = useRef<boolean>(propValue !== undefined);\n const [stateValue, setState] = useState<TProp | undefined>(defaultValue);\n\n const isProp = propValue !== undefined;\n const wasProp = wasPropRef.current;\n\n wasPropRef.current = isProp;\n\n /**\n * If a prop switches from controlled to Uncontrolled\n * reset its value to the defaultValue\n */\n if (!isProp && wasProp && stateValue !== defaultValue) {\n setState(defaultValue);\n }\n\n return [\n isProp ? propValue : stateValue,\n useCallback(\n (...args: Parameters<THandler>): ReturnType<THandler> | undefined => {\n const [value, ...rest] = args;\n const returnValue = handler?.(value, ...rest);\n setState(value);\n return returnValue;\n },\n [handler]\n ),\n ] as const;\n}\n\nexport { useUncontrolledProp };\n\ntype FilterFlags<Base, Condition> = {\n [Key in keyof Base]: NonNullable<Base[Key]> extends Condition ? Key : never;\n};\n\ntype AllowedNames<Base, Condition> = FilterFlags<Base, Condition>[keyof Base];\n\ntype ConfigMap<TProps extends object> = {\n // biome-ignore lint/complexity/noBannedTypes: any function\n [p in keyof TProps]?: AllowedNames<TProps, Function>;\n};\n\nexport function useUncontrolled<TProps extends object, TDefaults extends string = never>(\n props: TProps,\n config: ConfigMap<TProps>\n): Omit<TProps, TDefaults> {\n return Object.keys(config).reduce((result: TProps, fieldName: string) => {\n // biome-ignore lint/suspicious/noExplicitAny: any result\n const { [defaultKey(fieldName)]: defaultValue, [fieldName]: propsValue, ...rest } = result as any;\n\n // @ts-expect-error-next-line\n const handlerName = config[fieldName];\n // @ts-expect-error-next-line\n const [value, handler] = useUncontrolledProp(propsValue, defaultValue, props[handlerName]);\n\n return {\n ...rest,\n [fieldName]: value,\n [handlerName]: handler,\n };\n }, props);\n}\n"],"names":["useUncontrolledProp","propValue","defaultValue","handler","wasPropRef","useRef","stateValue","setState","useState","isProp","wasProp","useCallback","args","value","rest","returnValue"],"mappings":";AAuBA,SAASA,EACLC,GACAC,GACAC,GACF;AACE,QAAMC,IAAaC,EAAgBJ,MAAc,MAAS,GACpD,CAACK,GAAYC,CAAQ,IAAIC,EAA4BN,CAAY,GAEjEO,IAASR,MAAc,QACvBS,IAAUN,EAAW;AAE3B,SAAAA,EAAW,UAAUK,GAMjB,CAACA,KAAUC,KAAWJ,MAAeJ,KACrCK,EAASL,CAAY,GAGlB;AAAA,IACHO,IAASR,IAAYK;AAAA,IACrBK;AAAA,MACI,IAAIC,MAAiE;AACjE,cAAM,CAACC,GAAO,GAAGC,CAAI,IAAIF,GACnBG,IAAcZ,IAAUU,GAAO,GAAGC,CAAI;AAC5C,eAAAP,EAASM,CAAK,GACPE;AAAA,MACX;AAAA,MACA,CAACZ,CAAO;AAAA,IAAA;AAAA,EACZ;AAER;"}
@@ -0,0 +1,62 @@
1
+ import { UrlConfigItem } from '../utils/routeUtils';
2
+ type QueryString = string;
3
+ /**
4
+ * Configuration contract for `useUrlState`.
5
+ *
6
+ * Use this hook when your application uses **store/redux as source of truth**
7
+ * and you want a centralized URL synchronizer:
8
+ * - URL -> store: parse incoming search params and dispatch updates
9
+ * - store -> URL: serialize current store values and navigate with push/replace
10
+ *
11
+ * Recommended setup:
12
+ * - Mount one top-level synchronizer component near the router
13
+ * - Pass only URL-managed store values via `storeValues`
14
+ * - Keep URL writing centralized through this hook
15
+ *
16
+ * Not intended for "URL-only state" screens where you directly read/write
17
+ * params via router APIs (for example `useSearchParams`) without store sync.
18
+ */
19
+ type UseUrlStateProps<TState> = {
20
+ /**
21
+ * URL sync configuration.
22
+ * Each entry maps one query param key to a store selector and update action.
23
+ */
24
+ config: readonly UrlConfigItem<TState, any>[];
25
+ /**
26
+ * Current URL search string (for example `location.search`).
27
+ * Expected shape: `'?q=test&sort=-name'` or `''`.
28
+ */
29
+ searchString: QueryString;
30
+ /**
31
+ * Current store values used by the configured selectors. This could be values from a redux store.
32
+ * Keys should match the `config` keys, values are compared against URL/defaults.
33
+ */
34
+ storeValues: Record<string, unknown>;
35
+ /**
36
+ * Optional localStorage key for sticky URL state restore on initial load
37
+ * when managed URL params are missing.
38
+ */
39
+ localStorageKey?: string;
40
+ /**
41
+ * Router navigation type (typically from React Router `useNavigationType`).
42
+ * `POP` indicates browser back/forward navigation.
43
+ */
44
+ navigationType?: 'POP' | 'PUSH' | 'REPLACE' | string;
45
+ /**
46
+ * Store update callback invoked when URL -> store sync detects a change.
47
+ * Usually wraps `dispatch(...)`.
48
+ */
49
+ onUpdateStore: (action: any) => void;
50
+ /**
51
+ * Navigation callback used for store -> URL sync writes.
52
+ * `historyMode` controls whether to `push` or `replace` the history entry.
53
+ */
54
+ onNavigate: (search: string, historyMode: 'push' | 'replace') => void;
55
+ };
56
+ /**
57
+ * ----------------------------------------------------------------------------
58
+ * MAIN EXPORT
59
+ * ----------------------------------------------------------------------------
60
+ */
61
+ declare const useUrlState: <TState>(props: UseUrlStateProps<TState>) => void;
62
+ export default useUrlState;
@@ -0,0 +1,137 @@
1
+ import { useRef as R, useEffect as D } from "react";
2
+ import { isNil as z, isEqual as v } from "es-toolkit";
3
+ import { deserializeValue as T, toQueryString as M, serializeValue as A } from "../utils/routeUtils.js";
4
+ import E from "./useAfterMount.js";
5
+ import U from "./useLatest.js";
6
+ const C = (r) => {
7
+ const e = r.replace(/^\?/, "");
8
+ return new URLSearchParams(e).toString();
9
+ }, L = (r, e) => r.customDeserialize ? r.customDeserialize(e) : T(e, r.type ?? "string"), N = (r, e) => r ?? e, I = (r) => {
10
+ const { valueToApply: e, currentStoreValue: t, urlRawValue: a, defaultValue: d } = r;
11
+ if (typeof e > "u" || v(e, t))
12
+ return !1;
13
+ const l = z(a), n = v(t, d);
14
+ return !(l && n);
15
+ }, O = (r, e, t) => t ? null : r.customSerialize ? r.customSerialize(e) : A(e, r.type ?? "string"), x = (r) => {
16
+ const { nextParams: e, key: t, serializedValue: a } = r;
17
+ return z(a) ? e.has(t) ? (e.delete(t), !0) : !1 : (e.set(t, a), !0);
18
+ }, K = (r, e) => {
19
+ if (z(e))
20
+ return !0;
21
+ const t = L(r, e), a = N(t, r.defaultValue);
22
+ return v(a, r.defaultValue);
23
+ }, F = ({
24
+ config: r,
25
+ searchString: e,
26
+ storeValues: t,
27
+ navigationType: a,
28
+ onUpdateStore: d,
29
+ lastWrittenNormalizedSearchRef: l,
30
+ isRestoringRef: n,
31
+ hasCheckedStorageRef: g
32
+ }) => {
33
+ const h = U(r), p = U(t), y = U(d);
34
+ D(() => {
35
+ if (!g.current)
36
+ return;
37
+ const s = C(e);
38
+ if (l.current === s && (l.current = null), n.current)
39
+ return;
40
+ const P = new URLSearchParams(e);
41
+ h.current.forEach((c) => {
42
+ const u = P.get(c.key), i = L(c, u), f = N(i, c.defaultValue), S = p.current[c.key];
43
+ if (I({
44
+ valueToApply: f,
45
+ currentStoreValue: S,
46
+ urlRawValue: u,
47
+ defaultValue: c.defaultValue
48
+ })) {
49
+ if (z(u) && a !== "POP")
50
+ return;
51
+ y.current(c.action(f));
52
+ }
53
+ });
54
+ }, [e, l, n, g]);
55
+ }, q = (r) => {
56
+ const {
57
+ config: e,
58
+ searchString: t,
59
+ storeValues: a,
60
+ onNavigate: d,
61
+ lastWrittenNormalizedSearchRef: l,
62
+ localStorageKey: n,
63
+ navigationType: g
64
+ } = r, h = U(d), p = R(C(t));
65
+ E(() => {
66
+ const y = C(t), s = p.current !== y;
67
+ if (p.current = y, g === "POP" && s)
68
+ return;
69
+ const c = new URLSearchParams(t), u = new URLSearchParams(t);
70
+ let i = !1, f = !1, S = !0;
71
+ if (e.forEach((o) => {
72
+ const V = a[o.key], m = c.get(o.key), k = v(V, o.defaultValue);
73
+ k || (S = !1);
74
+ const w = O(o, V, k);
75
+ w !== m && (i = x({ nextParams: u, key: o.key, serializedValue: w }) || i, ((o.history ?? "push") === "push" || !k && K(o, m)) && (f = !0));
76
+ }), i) {
77
+ const o = M(u, e), V = u.toString();
78
+ l.current = V, n && (S && o === "" ? localStorage.removeItem(n) : localStorage.setItem(n, o));
79
+ const m = f ? "push" : "replace";
80
+ h.current(o, m);
81
+ }
82
+ }, [a, t, e, n, g]);
83
+ }, Q = (r) => {
84
+ const {
85
+ config: e,
86
+ searchString: t,
87
+ localStorageKey: a,
88
+ onUpdateStore: d,
89
+ onNavigate: l,
90
+ isRestoringRef: n,
91
+ lastWrittenNormalizedSearchRef: g,
92
+ hasCheckedStorageRef: h
93
+ } = r;
94
+ D(() => {
95
+ if (!a) {
96
+ h.current = !0;
97
+ return;
98
+ }
99
+ const p = new URLSearchParams(t);
100
+ if (!e.some((s) => p.has(s.key))) {
101
+ const s = localStorage.getItem(a);
102
+ if (s) {
103
+ n.current = !0;
104
+ const P = new URLSearchParams(s);
105
+ e.forEach((i) => {
106
+ const f = P.get(i.key), S = L(i, f);
107
+ S !== null && typeof S < "u" && d(i.action(S));
108
+ });
109
+ const c = s.replace(/^\?/, ""), u = t.replace(/^\?/, "");
110
+ c !== u && (g.current = new URLSearchParams(s).toString(), l(s, "replace")), setTimeout(() => {
111
+ n.current = !1;
112
+ }, 0);
113
+ }
114
+ }
115
+ h.current = !0;
116
+ }, [a]);
117
+ }, J = (r) => {
118
+ const e = R(null), t = R(!1), a = R(!r.localStorageKey);
119
+ Q({
120
+ ...r,
121
+ lastWrittenNormalizedSearchRef: e,
122
+ isRestoringRef: t,
123
+ hasCheckedStorageRef: a
124
+ }), F({
125
+ ...r,
126
+ lastWrittenNormalizedSearchRef: e,
127
+ isRestoringRef: t,
128
+ hasCheckedStorageRef: a
129
+ }), q({
130
+ ...r,
131
+ lastWrittenNormalizedSearchRef: e
132
+ });
133
+ };
134
+ export {
135
+ J as default
136
+ };
137
+ //# sourceMappingURL=useUrlState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUrlState.js","sources":["../../src/hooks/useUrlState.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport { isEqual, isNil } from 'es-toolkit';\n\nimport { deserializeValue, serializeValue, toQueryString, type UrlConfigItem } from '../utils/routeUtils';\nimport useAfterMount from './useAfterMount';\nimport useLatest from './useLatest';\n\ntype QueryString = string;\n\n/**\n * Configuration contract for `useUrlState`.\n *\n * Use this hook when your application uses **store/redux as source of truth**\n * and you want a centralized URL synchronizer:\n * - URL -> store: parse incoming search params and dispatch updates\n * - store -> URL: serialize current store values and navigate with push/replace\n *\n * Recommended setup:\n * - Mount one top-level synchronizer component near the router\n * - Pass only URL-managed store values via `storeValues`\n * - Keep URL writing centralized through this hook\n *\n * Not intended for \"URL-only state\" screens where you directly read/write\n * params via router APIs (for example `useSearchParams`) without store sync.\n */\ntype UseUrlStateProps<TState> = {\n /**\n * URL sync configuration.\n * Each entry maps one query param key to a store selector and update action.\n */\n config: readonly UrlConfigItem<TState, any>[];\n\n /**\n * Current URL search string (for example `location.search`).\n * Expected shape: `'?q=test&sort=-name'` or `''`.\n */\n searchString: QueryString;\n\n /**\n * Current store values used by the configured selectors. This could be values from a redux store.\n * Keys should match the `config` keys, values are compared against URL/defaults.\n */\n storeValues: Record<string, unknown>;\n\n /**\n * Optional localStorage key for sticky URL state restore on initial load\n * when managed URL params are missing.\n */\n localStorageKey?: string;\n\n /**\n * Router navigation type (typically from React Router `useNavigationType`).\n * `POP` indicates browser back/forward navigation.\n */\n navigationType?: 'POP' | 'PUSH' | 'REPLACE' | string;\n\n /**\n * Store update callback invoked when URL -> store sync detects a change.\n * Usually wraps `dispatch(...)`.\n */\n onUpdateStore: (action: any) => void;\n\n /**\n * Navigation callback used for store -> URL sync writes.\n * `historyMode` controls whether to `push` or `replace` the history entry.\n */\n onNavigate: (search: string, historyMode: 'push' | 'replace') => void;\n};\n\n// Helper for URL for Comparison:\n// Browsers/Routers might decode parts of the string automatically.\n// We force everything to a standard encoded format for reliable diffing.\nconst normalizeSearch = (search: string) => {\n const clean = search.replace(/^\\?/, '');\n return new URLSearchParams(clean).toString();\n};\n\nconst parseConfigValue = (item: UrlConfigItem<any, any>, urlRawValue: string | null) =>\n item.customDeserialize ? item.customDeserialize(urlRawValue) : deserializeValue(urlRawValue, item.type ?? 'string');\n\nconst getValueToApply = (parsedValue: unknown, defaultValue: unknown) => parsedValue ?? defaultValue;\n\nconst shouldDispatchParsedValue = (params: {\n valueToApply: unknown;\n currentStoreValue: unknown;\n urlRawValue: string | null;\n defaultValue: unknown;\n}) => {\n const { valueToApply, currentStoreValue, urlRawValue, defaultValue } = params;\n\n if (typeof valueToApply === 'undefined' || isEqual(valueToApply, currentStoreValue)) {\n return false;\n }\n\n const isUrlMissing = isNil(urlRawValue);\n const isStoreDefault = isEqual(currentStoreValue, defaultValue);\n return !(isUrlMissing && isStoreDefault);\n};\n\nconst serializeConfigValue = (\n item: UrlConfigItem<any, any>,\n storeValue: unknown,\n isDefault: boolean\n): string | null => {\n if (isDefault) {\n return null;\n }\n if (item.customSerialize) {\n return item.customSerialize(storeValue as never);\n }\n return serializeValue(storeValue as never, item.type ?? 'string');\n};\n\nconst applySearchParamUpdate = (params: {\n nextParams: URLSearchParams;\n key: string;\n serializedValue: string | null;\n}) => {\n const { nextParams, key, serializedValue } = params;\n\n if (isNil(serializedValue)) {\n if (!nextParams.has(key)) {\n return false;\n }\n nextParams.delete(key);\n return true;\n }\n\n nextParams.set(key, serializedValue);\n return true;\n};\n\nconst isUrlValueDefault = (item: UrlConfigItem<any, any>, urlRawValue: string | null) => {\n if (isNil(urlRawValue)) {\n return true;\n }\n const parsedValue = parseConfigValue(item, urlRawValue);\n const valueFromUrl = getValueToApply(parsedValue, item.defaultValue);\n return isEqual(valueFromUrl, item.defaultValue);\n};\n\n/**\n * ----------------------------------------------------------------------------\n * 1. URL -> Redux\n * ----------------------------------------------------------------------------\n * Responsibilities:\n * - Listen to searchString changes.\n * - Check against the \"Loop Lock\" (ignore if we just wrote this URL).\n * - Parse and Dispatch actions.\n */\ntype UseSyncUrlToStoreProps = {\n config: readonly UrlConfigItem<any, any>[];\n searchString: string;\n storeValues: Record<string, unknown>;\n navigationType?: string;\n onUpdateStore: (a: any) => void;\n lastWrittenNormalizedSearchRef: React.MutableRefObject<string | null>;\n isRestoringRef: React.MutableRefObject<boolean>;\n hasCheckedStorageRef: React.MutableRefObject<boolean>;\n};\n\nconst useSyncUrlToStore = ({\n config,\n searchString,\n storeValues,\n navigationType,\n onUpdateStore,\n lastWrittenNormalizedSearchRef,\n isRestoringRef,\n hasCheckedStorageRef,\n}: UseSyncUrlToStoreProps) => {\n // Keep latest values stable for URL-driven effect without adding them to deps.\n const latestConfigRef = useLatest(config);\n const latestStoreValuesRef = useLatest(storeValues);\n const latestOnUpdateStoreRef = useLatest(onUpdateStore);\n\n useEffect(() => {\n // SAFETY: Wait for Storage Check (Sticky State)\n if (!hasCheckedStorageRef.current) {\n return;\n }\n\n // 1. Check Loop Lock (Did we just write this URL?)\n const currentStandard = normalizeSearch(searchString);\n if (lastWrittenNormalizedSearchRef.current === currentStandard) {\n // Match found. Release marker and continue parsing.\n // This avoids skipping browser POP navigation when search equals\n // a previously written URL.\n lastWrittenNormalizedSearchRef.current = null;\n }\n\n // 2. Check Restoration Block\n if (isRestoringRef.current) {\n return;\n }\n\n // 3. Parse & Diff\n const currentParams = new URLSearchParams(searchString);\n\n latestConfigRef.current.forEach(item => {\n const urlRawValue = currentParams.get(item.key);\n const parsedValue = parseConfigValue(item, urlRawValue);\n const valueToApply = getValueToApply(parsedValue, item.defaultValue);\n const currentStoreValue = latestStoreValuesRef.current[item.key];\n\n if (\n shouldDispatchParsedValue({\n valueToApply,\n currentStoreValue,\n urlRawValue,\n defaultValue: item.defaultValue,\n })\n ) {\n // Missing URL params should not reset store on regular in-app navigations.\n // We only apply \"missing => default\" during POP (back/forward) transitions.\n if (isNil(urlRawValue) && navigationType !== 'POP') {\n return;\n }\n latestOnUpdateStoreRef.current(item.action(valueToApply));\n }\n });\n\n // CRITICAL: This dependency array MUST NOT include 'onUpdateStore' or 'storeValues'.\n // It should ONLY run when the URL string physically changes.\n }, [searchString, lastWrittenNormalizedSearchRef, isRestoringRef, hasCheckedStorageRef]);\n};\n\n/**\n * ----------------------------------------------------------------------------\n * 2. Redux -> URL\n * ----------------------------------------------------------------------------\n * Responsibilities:\n * - Listen to Redux changes.\n * - Calculate Ideal URL.\n * - Diff against Current URL.\n * - Handle Navigation Type ('POP' prevention).\n * - Set \"Loop Lock\" and Navigate.\n */\ntype UseSyncStoreToUrlProps = {\n config: readonly UrlConfigItem<any, any>[];\n searchString: string;\n storeValues: Record<string, unknown>;\n onNavigate: (s: string, m: 'push' | 'replace') => void;\n lastWrittenNormalizedSearchRef: React.MutableRefObject<string | null>;\n localStorageKey?: string;\n navigationType?: string;\n};\n\nconst useSyncStoreToUrl = (props: UseSyncStoreToUrlProps) => {\n const {\n config,\n searchString,\n storeValues,\n onNavigate,\n lastWrittenNormalizedSearchRef,\n localStorageKey,\n navigationType,\n } = props;\n\n // Keep navigate callback stable inside effect.\n const latestOnNavigateRef = useLatest(onNavigate);\n const previousSearchRef = useRef<string | null>(normalizeSearch(searchString));\n\n // Skip initial render (Reader handles hydration)\n useAfterMount(() => {\n const currentStandardSearch = normalizeSearch(searchString);\n const hasSearchChanged = previousSearchRef.current !== currentStandardSearch;\n previousSearchRef.current = currentStandardSearch;\n\n // POP navigation should be URL -> store only for the transition step.\n // If we write here, we can overwrite the forward stack.\n // This prevents the writer from immediately rewriting URL during back/forward\n // transitions (which can overwrite forward history).\n const isPopNavigationSync = navigationType === 'POP' && hasSearchChanged;\n if (isPopNavigationSync) {\n return;\n }\n\n const currentParams = new URLSearchParams(searchString);\n const nextParams = new URLSearchParams(searchString);\n\n let hasChanges = false;\n let hasPushChange = false;\n let isAllDefaults = true;\n\n config.forEach(item => {\n const storeVal = storeValues[item.key];\n const currentUrlVal = currentParams.get(item.key);\n const isDefault = isEqual(storeVal, item.defaultValue);\n\n if (!isDefault) isAllDefaults = false;\n\n const serializedVal = serializeConfigValue(item, storeVal, isDefault);\n\n if (serializedVal !== currentUrlVal) {\n hasChanges =\n applySearchParamUpdate({ nextParams, key: item.key, serializedValue: serializedVal }) || hasChanges;\n\n // Determine history mode preference for changed fields.\n // Global rule:\n // - 'push' items always push when changed.\n // - 'replace' items push once on default -> non-default, then replace thereafter.\n const historyMode = item.history ?? 'push';\n if (historyMode === 'push') {\n hasPushChange = true;\n } else if (!isDefault && isUrlValueDefault(item, currentUrlVal)) {\n hasPushChange = true;\n }\n }\n });\n\n if (hasChanges) {\n // 1. Generate URLs\n const prettyString = toQueryString(nextParams, config);\n const strictString = nextParams.toString();\n\n // 2. Set loop lock (Crucial: Use strict string for comparison)\n lastWrittenNormalizedSearchRef.current = strictString;\n\n // 3. Persist to Storage (if key provided)\n if (localStorageKey) {\n if (isAllDefaults && prettyString === '') {\n localStorage.removeItem(localStorageKey);\n } else {\n localStorage.setItem(localStorageKey, prettyString);\n }\n }\n\n // 4. Calculate Mode\n const mode = hasPushChange ? 'push' : 'replace';\n\n latestOnNavigateRef.current(prettyString, mode);\n }\n }, [storeValues, searchString, config, localStorageKey, navigationType]);\n // ^ onNavigate excluded from deps (used via ref) to be safe,\n // though storeValues changing is the main trigger.\n};\n\n/**\n * ----------------------------------------------------------------------------\n * 3. RESTORER HOOK (LocalStorage -> Redux)\n * ----------------------------------------------------------------------------\n * Responsibilities:\n * - Run once on mount.\n * - If URL is empty & Storage exists -> Force Redux update & URL Replace.\n */\n\ntype UseInitialRestoreFromStorageProps = {\n config: readonly UrlConfigItem<any, any>[];\n searchString: string;\n localStorageKey?: string;\n onUpdateStore: (a: any) => void;\n onNavigate: (s: string, m: 'push' | 'replace') => void;\n isRestoringRef: React.MutableRefObject<boolean>;\n lastWrittenNormalizedSearchRef: React.MutableRefObject<string | null>;\n hasCheckedStorageRef: React.MutableRefObject<boolean>;\n};\n\nconst useInitialRestoreFromStorage = (props: UseInitialRestoreFromStorageProps) => {\n const {\n config,\n searchString,\n localStorageKey,\n onUpdateStore,\n onNavigate,\n isRestoringRef,\n lastWrittenNormalizedSearchRef,\n hasCheckedStorageRef,\n } = props;\n\n useEffect(() => {\n if (!localStorageKey) {\n hasCheckedStorageRef.current = true;\n return;\n }\n\n const currentParams = new URLSearchParams(searchString);\n const hasManagedParams = config.some(item => currentParams.has(item.key));\n\n // Only restore if URL is \"empty\" regarding our config\n if (!hasManagedParams) {\n const savedString = localStorage.getItem(localStorageKey);\n\n if (savedString) {\n // Block the Reader from interfering\n isRestoringRef.current = true;\n\n // 1. Hydrate Redux (conceptually similar to Reader logic but forced)\n const savedParams = new URLSearchParams(savedString);\n config.forEach(item => {\n const val = savedParams.get(item.key);\n const deserialized = parseConfigValue(item, val);\n\n if (deserialized !== null && typeof deserialized !== 'undefined') {\n onUpdateStore(item.action(deserialized));\n }\n });\n\n // 2. Hydrate URL (Visual)\n const cleanSaved = savedString.replace(/^\\?/, '');\n const cleanCurrent = searchString.replace(/^\\?/, '');\n\n if (cleanSaved !== cleanCurrent) {\n // Set Lock so Reader doesn't freak out\n lastWrittenNormalizedSearchRef.current = new URLSearchParams(savedString).toString();\n onNavigate(savedString, 'replace');\n }\n\n // Unlock after tick\n setTimeout(() => {\n isRestoringRef.current = false;\n }, 0);\n }\n }\n\n hasCheckedStorageRef.current = true;\n }, [localStorageKey]); // Run once\n};\n\n/**\n * ----------------------------------------------------------------------------\n * MAIN EXPORT\n * ----------------------------------------------------------------------------\n */\nconst useUrlState = <TState>(props: UseUrlStateProps<TState>) => {\n // Shared communication channel between hooks\n\n // Stores the last URL search string written by this hook (normalized encoding).\n const lastWrittenNormalizedSearchRef = useRef<string | null>(null);\n\n // Shared flag for Restoration phase\n const isRestoringRef = useRef(false);\n const hasCheckedStorageRef = useRef(!props.localStorageKey);\n\n // 1. Sticky State (Restorer)\n useInitialRestoreFromStorage({\n ...props,\n lastWrittenNormalizedSearchRef,\n isRestoringRef,\n hasCheckedStorageRef,\n });\n\n // 2. Read from URL (URL -> Redux)\n useSyncUrlToStore({\n ...props,\n lastWrittenNormalizedSearchRef,\n isRestoringRef,\n hasCheckedStorageRef,\n });\n\n // 3. Write to URL (Redux -> URL)\n useSyncStoreToUrl({\n ...props,\n lastWrittenNormalizedSearchRef,\n });\n};\n\nexport default useUrlState;\n"],"names":["normalizeSearch","search","clean","parseConfigValue","item","urlRawValue","deserializeValue","getValueToApply","parsedValue","defaultValue","shouldDispatchParsedValue","params","valueToApply","currentStoreValue","isEqual","isUrlMissing","isNil","isStoreDefault","serializeConfigValue","storeValue","isDefault","serializeValue","applySearchParamUpdate","nextParams","key","serializedValue","isUrlValueDefault","valueFromUrl","useSyncUrlToStore","config","searchString","storeValues","navigationType","onUpdateStore","lastWrittenNormalizedSearchRef","isRestoringRef","hasCheckedStorageRef","latestConfigRef","useLatest","latestStoreValuesRef","latestOnUpdateStoreRef","useEffect","currentStandard","currentParams","useSyncStoreToUrl","props","onNavigate","localStorageKey","latestOnNavigateRef","previousSearchRef","useRef","useAfterMount","currentStandardSearch","hasSearchChanged","hasChanges","hasPushChange","isAllDefaults","storeVal","currentUrlVal","serializedVal","prettyString","toQueryString","strictString","mode","useInitialRestoreFromStorage","savedString","savedParams","val","deserialized","cleanSaved","cleanCurrent","useUrlState"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from './utils/mergeClassNameOverrides';
@@ -0,0 +1,5 @@
1
+ import { mergeClassNameOverrides as m } from "./utils/mergeClassNameOverrides.js";
2
+ export {
3
+ m as mergeClassNameOverrides
4
+ };
5
+ //# sourceMappingURL=mergeClassNameOverrides.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeClassNameOverrides.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rio-cloud/rio-uikit",
3
- "version": "2.0.1",
3
+ "version": "2.2.0",
4
4
  "description": "The RIO UIKIT component library",
5
5
  "repository": {
6
6
  "type": "git",
@@ -46,29 +46,28 @@
46
46
  }
47
47
  },
48
48
  "devDependencies": {
49
- "@biomejs/biome": "2.3.8",
49
+ "@biomejs/biome": "2.4.2",
50
50
  "@rio-cloud/biome-config": "1.1.0",
51
- "@rio-cloud/vite-plugin-frontend-license-check": "1.1.0",
51
+ "@rio-cloud/vite-plugin-frontend-license-check": "1.2.0",
52
52
  "@testing-library/dom": "10.4.1",
53
53
  "@testing-library/jest-dom": "6.9.1",
54
- "@testing-library/react": "16.3.0",
54
+ "@testing-library/react": "16.3.2",
55
55
  "@testing-library/user-event": "14.6.1",
56
56
  "@types/heremaps": "3.1.14",
57
57
  "@types/node": "24.10.1",
58
- "@types/qs": "6.14.0",
59
58
  "@types/react": "18.3.18",
60
59
  "@types/react-dom": "18.3.5",
61
60
  "@types/react-redux": "7.1.34",
62
61
  "@types/resize-observer-browser": "0.1.11",
63
- "@vitejs/plugin-react": "5.1.2",
62
+ "@vitejs/plugin-react": "5.1.4",
64
63
  "@vitest/coverage-c8": "0.33.0",
65
- "autoprefixer": "10.4.22",
64
+ "autoprefixer": "10.4.24",
66
65
  "backstopjs": "6.3.25",
67
66
  "copyfiles": "2.4.1",
68
- "dotenv": "17.2.3",
69
- "glob": "13.0.0",
70
- "happy-dom": "20.0.11",
71
- "jsdom": "27.3.0",
67
+ "dotenv": "17.3.1",
68
+ "glob": "13.0.5",
69
+ "happy-dom": "20.6.3",
70
+ "jsdom": "27.4.0",
72
71
  "jsdom-global": "3.0.2",
73
72
  "postcss": "8.5.6",
74
73
  "postcss-preset-env": "8.5.1",
@@ -78,11 +77,11 @@
78
77
  "react-dom": "18.0.0",
79
78
  "react-intl": "7.1.14",
80
79
  "rollup-plugin-copy": "3.5.0",
81
- "sass": "1.94.2",
80
+ "sass": "1.97.3",
82
81
  "strip-ansi": "7.1.2",
83
82
  "svgo": "4.0.0",
84
83
  "typescript": "5.9.3",
85
- "vite": "7.2.7",
84
+ "vite": "7.3.1",
86
85
  "vite-plugin-dts": "4.5.4",
87
86
  "vite-plugin-zip-pack": "1.2.4",
88
87
  "vitest": "3.2.4",
@@ -99,31 +98,29 @@
99
98
  "@dnd-kit/utilities": "3.2.2",
100
99
  "@formkit/auto-animate": "0.9.0",
101
100
  "@popperjs/core": "2.11.8",
102
- "@tanstack/react-virtual": "3.13.13",
103
- "classnames": "2.5.1",
101
+ "@tanstack/react-virtual": "3.13.18",
104
102
  "date-fns": "4.1.0",
105
103
  "driver.js": "1.4.0",
106
- "es-toolkit": "1.42.0",
104
+ "es-toolkit": "1.44.0",
107
105
  "events": "3.3.0",
108
106
  "iframe-resizer-react": "1.1.0",
109
107
  "moment": "2.30.1",
110
- "motion": "12.23.26",
108
+ "motion": "12.34.2",
111
109
  "natural-orderby": "5.0.0",
112
110
  "process": "0.11.10",
113
111
  "prop-types": "15.8.1",
114
- "qs": "6.14.0",
115
112
  "react-bootstrap": "1.6.4",
116
- "react-content-loader": "7.1.1",
113
+ "react-content-loader": "7.1.2",
117
114
  "react-custom-scrollbars-4": "4.5.1",
118
115
  "react-datetime": "github:rio-cloud/react-datetime#v3.1.1-1-merged",
119
- "react-day-picker": "9.12.0",
116
+ "react-day-picker": "9.13.2",
120
117
  "react-dropzone": "14.3.8",
121
118
  "react-imask": "7.6.1",
122
119
  "react-notifications": "1.7.4",
123
120
  "react-onclickoutside": "6.13.2",
124
121
  "react-popper": "2.3.0",
125
122
  "react-toastify": "11.0.5",
126
- "recharts": "3.5.1",
123
+ "recharts": "3.7.0",
127
124
  "tiny-invariant": "1.3.3",
128
125
  "tslib": "2.8.1"
129
126
  },
package/routeUtils.js CHANGED
@@ -1,8 +1,14 @@
1
- import { getSortDirShort as o, mapColumnsSettingsToStrings as s, parseColumnsSettingsStrings as n, parseSorting as S } from "./utils/routeUtils.js";
1
+ import { deserializeValue as i, getSortDirShort as t, mapColumnsSettingsToStrings as o, parseColumnsSettingsStrings as s, parseSorting as a, serializeSorting as n, serializeValue as S, toQueryString as g } from "./utils/routeUtils.js";
2
+ import { isEqual as u } from "es-toolkit";
2
3
  export {
3
- o as getSortDirShort,
4
- s as mapColumnsSettingsToStrings,
5
- n as parseColumnsSettingsStrings,
6
- S as parseSorting
4
+ i as deserializeValue,
5
+ t as getSortDirShort,
6
+ u as isEqual,
7
+ o as mapColumnsSettingsToStrings,
8
+ s as parseColumnsSettingsStrings,
9
+ a as parseSorting,
10
+ n as serializeSorting,
11
+ S as serializeValue,
12
+ g as toQueryString
7
13
  };
8
14
  //# sourceMappingURL=routeUtils.js.map
package/routeUtils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"routeUtils.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"routeUtils.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as a, jsxs as p } from "react/jsx-runtime";
2
2
  import { forwardRef as d } from "react";
3
3
  import { isEmpty as i } from "es-toolkit/compat";
4
- import u from "classnames";
4
+ import u from "../../../../utils/classNames.js";
5
5
  import N from "../../../../components/applicationHeader/ApplicationActionBar.js";
6
6
  const H = d(
7
7
  (r, n) => {