@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
@@ -20,6 +20,7 @@ export type AssetTreeProps = {
20
20
  bordered?: boolean;
21
21
  /**
22
22
  * Defines the width of the component. The value is set as inline style.
23
+ *
23
24
  * Note: when component is resizable it will take the provided
24
25
  * width in px only and convert it to number in case.
25
26
  *
@@ -50,6 +51,8 @@ export type AssetTreeProps = {
50
51
  isOpen?: boolean;
51
52
  /**
52
53
  * Callback for when the tree visibility is toggled.
54
+ *
55
+ * @default () => {}
53
56
  * @param isOpen
54
57
  * @returns
55
58
  */
@@ -60,12 +63,16 @@ export type AssetTreeProps = {
60
63
  currentCategoryId?: string;
61
64
  /**
62
65
  * Callback for handling change of category.
66
+ *
67
+ * @default () => {}
63
68
  * @param selectedCategoryId
64
69
  * @returns
65
70
  */
66
71
  onCategoryChange?: (selectedCategoryId: string) => void;
67
72
  /**
68
73
  * Callback for when the resize is done.
74
+ *
75
+ * @default () => {}
69
76
  */
70
77
  onResizeEnd?: VoidFunction;
71
78
  /**
@@ -1,8 +1,8 @@
1
1
  import { jsxs as A, jsx as d } from "react/jsx-runtime";
2
2
  import R, { memo as re, forwardRef as oe, useState as f, useRef as ne } from "react";
3
- import g from "classnames";
4
3
  import { noop as y, head as E, isArray as L } from "es-toolkit/compat";
5
4
  import ie from "tiny-invariant";
5
+ import g from "../../utils/classNames.js";
6
6
  import de from "./TreeCategory.js";
7
7
  import T from "../resizer/Resizer.js";
8
8
  import ae from "./TreeSidebar.js";
@@ -1 +1 @@
1
- {"version":3,"file":"AssetTree.js","sources":["../../../src/components/assetTree/AssetTree.tsx"],"sourcesContent":["import React, { memo, useState, useRef, forwardRef, type PropsWithChildren } from 'react';\nimport classNames from 'classnames';\nimport { head, isArray, noop } from 'es-toolkit/compat';\nimport invariant from 'tiny-invariant';\n\nimport TreeCategory, { type TreeCategoryProps } from './TreeCategory';\nimport Resizer from '../resizer/Resizer';\nimport TreeSidebar from './TreeSidebar';\nimport getWidthInBoundaries from '../../utils/getWidthInBoundaries';\nimport mergeRefs from '../../utils/mergeRefs';\nimport usePrevious from '../../usePrevious';\nimport SmoothScrollbars from '../smoothScrollbars/SmoothScrollbars';\n\nconst DEFAULT_WIDTH = 350;\nconst DEFAULT_MIN_WIDTH = 100;\nconst DEFAULT_MAX_WIDTH = 0;\n\nconst TreeMode = {\n MODE_FLY: 'fly',\n MODE_FLUID: 'fluid',\n} as const;\n\nconst getSidebarBodyRef = (sidebarRef: React.MutableRefObject<HTMLDivElement | null>) =>\n head(sidebarRef?.current?.getElementsByClassName('AssetTreeBody'));\n\nconst getCurrentCategoryElement = (children: React.ReactElement[], currentCategoryId: string) => {\n return isArray(children) ? children.find(child => child && child.props.id === currentCategoryId) : children;\n};\n\nconst renderTreesOffscreen = (children: React.ReactElement[], categoryId: string | undefined) => {\n return React.Children.map(children, child => {\n const offscreenClasses = classNames(\n 'TreeOffscreenWrapper',\n child && child.props.id !== categoryId && 'position-offscreen pointer-events-none'\n );\n return <div className={offscreenClasses}>{child}</div>;\n });\n};\n\nexport type AssetTreeProps = {\n /**\n * Defines if the component will overlap the body content.\n *\n * @default false\n */\n fly?: boolean;\n\n /**\n * Defines whether or not the sidebar is resizable.\n *\n * @default true\n */\n resizable?: boolean;\n\n /**\n * Defines whether the component has a border or not.\n *\n * @default false\n */\n bordered?: boolean;\n\n /**\n * Defines the width of the component. The value is set as inline style.\n * Note: when component is resizable it will take the provided\n * width in px only and convert it to number in case.\n *\n * @default 350\n */\n width?: number;\n\n /**\n * Defines the minimum width of the component in px that will take effect when resizing.\n *\n * @default 100\n */\n minWidth?: number;\n\n /**\n * Defines the maximum width of the component in px that will take effect when resizing.\n *\n * @default 0\n */\n maxWidth?: number;\n\n /**\n * Defines the height of the component in px.\n */\n height?: number;\n\n /**\n * Defines whether the component is open or not.\n *\n * @default true\n */\n isOpen?: boolean;\n\n /**\n * Callback for when the tree visibility is toggled.\n * @param isOpen\n * @returns\n */\n onToggleTree?: (isOpen: boolean) => void;\n\n /**\n * The id of the category which is currently active and shall be shown.\n */\n currentCategoryId?: string;\n\n /**\n * Callback for handling change of category.\n * @param selectedCategoryId\n * @returns\n */\n onCategoryChange?: (selectedCategoryId: string) => void;\n\n /**\n * Callback for when the resize is done.\n */\n onResizeEnd?: VoidFunction;\n\n /**\n * Defines whether the tree components are rendered offscreen and kept mounted in the DOM.\n *\n * @default false\n */\n useOffscreen?: boolean;\n\n /**\n * Additional classes added on the wrapper element.\n */\n className?: string;\n};\n\n// Check if the child is a React element and if it has the type TreeCategory\nconst isTreeCategory = (child: React.ReactNode): child is React.ReactElement<TreeCategoryProps> => {\n return React.isValidElement(child) && child.type === TreeCategory;\n};\n\nconst AssetTree = memo(\n forwardRef<HTMLDivElement, PropsWithChildren<AssetTreeProps>>((props, ref) => {\n const {\n className,\n resizable = true,\n width = DEFAULT_WIDTH,\n minWidth = DEFAULT_MIN_WIDTH,\n maxWidth = DEFAULT_MAX_WIDTH,\n height,\n bordered = false,\n currentCategoryId,\n isOpen = true,\n useOffscreen = false,\n fly = false,\n onCategoryChange = noop,\n onToggleTree = noop,\n onResizeEnd = noop,\n children = [],\n ...remainingProps\n } = props;\n\n const getSidebarMode = (isFly: boolean) => (isFly ? TreeMode.MODE_FLY : TreeMode.MODE_FLUID);\n\n const [treeWidth, setTreeWidth] = useState(width);\n const [isResize, setIsResize] = useState(false);\n const [sidebarMode, setSidebarMode] = useState(getSidebarMode(fly));\n\n const sidebarRef = useRef<HTMLDivElement>(null);\n\n const mergedRefs = mergeRefs([ref, sidebarRef]);\n\n // Update internal state when props change\n const previousWidth = usePrevious(width);\n if (previousWidth !== width) {\n setTreeWidth(width);\n }\n\n const [previousMode, setPreviousMode] = useState(fly);\n if (previousMode !== fly) {\n setSidebarMode(getSidebarMode(fly));\n setPreviousMode(fly);\n }\n\n const childrenArray = React.Children.toArray(children);\n\n // check for children type of TreeCategory and throw error in case\n invariant(childrenArray.every(isTreeCategory), 'AssetTree only excepts children of type \"TreeCategory\"');\n\n const classes = classNames(\n 'AssetTree',\n className,\n !isOpen && 'closed',\n bordered && 'border',\n sidebarMode === TreeMode.MODE_FLY ? 'fly' : 'fluid'\n );\n\n const resizeLimitClasses = classNames('AssetTreeResizeLimit', isResize && 'display-block');\n\n const resizeIndicatorPosition = maxWidth || window.innerWidth * 0.5;\n const resizeLimitStyle = { left: resizeIndicatorPosition };\n\n const firstChild = head(childrenArray);\n\n const category = currentCategoryId ? getCurrentCategoryElement(childrenArray, currentCategoryId) : firstChild;\n\n const style = {\n width: treeWidth,\n height,\n };\n\n const handleToggleTreeContent = () => onToggleTree(!isOpen);\n\n const handleSelectCategory = (selectedCategoryId: string) => {\n onCategoryChange(selectedCategoryId);\n\n if (!isOpen) {\n handleToggleTreeContent();\n } else if (isOpen && currentCategoryId === selectedCategoryId) {\n handleToggleTreeContent();\n }\n };\n\n const handleResize = (diff: number) => {\n const halfWindowWidth = window.innerWidth * 0.5;\n const usedMaxWidth = maxWidth || halfWindowWidth;\n\n // Check for sidebar width if it is half window size. If it was before but the sidebar was resized so it is\n // no longer half window size, set the sidebar width to half the window size to avoid jumping sidebar\n // to old width\n setTreeWidth(oldWidth => {\n const updatedWidth = oldWidth - diff;\n return getWidthInBoundaries(minWidth, usedMaxWidth, updatedWidth);\n });\n };\n\n const handleResizeStart = () => {\n const body = getSidebarBodyRef(sidebarRef);\n if (body) {\n body.classList.add('pointer-events-none');\n }\n setIsResize(true);\n };\n\n const handleResizeEnd = () => {\n const body = getSidebarBodyRef(sidebarRef);\n if (body) {\n body.classList.remove('pointer-events-none');\n }\n setIsResize(false);\n onResizeEnd();\n };\n\n return (\n <div {...remainingProps} className={classes} style={style} ref={mergedRefs}>\n <div className={resizeLimitClasses} style={resizeLimitStyle} />\n <div className='AssetTreeContent'>\n <TreeSidebar\n onSelectCategory={handleSelectCategory}\n currentCategoryId={currentCategoryId}\n onClick={handleToggleTreeContent}\n >\n {isArray(children) ? children : [children]}\n </TreeSidebar>\n <SmoothScrollbars slideIn className='AssetTreeBody'>\n {useOffscreen ? renderTreesOffscreen(childrenArray, currentCategoryId) : category}\n </SmoothScrollbars>\n </div>\n {resizable && isOpen && (\n <Resizer\n onResizeStart={handleResizeStart}\n onResize={handleResize}\n onResizeEnd={handleResizeEnd}\n direction={Resizer.HORIZONTAL}\n position={Resizer.RIGHT}\n />\n )}\n </div>\n );\n })\n);\n\nObject.assign(AssetTree, TreeMode);\n\nexport default AssetTree;\n"],"names":["DEFAULT_WIDTH","DEFAULT_MIN_WIDTH","DEFAULT_MAX_WIDTH","TreeMode","getSidebarBodyRef","sidebarRef","head","getCurrentCategoryElement","children","currentCategoryId","isArray","child","renderTreesOffscreen","categoryId","React","offscreenClasses","classNames","jsx","isTreeCategory","TreeCategory","AssetTree","memo","forwardRef","props","ref","className","resizable","width","minWidth","maxWidth","height","bordered","isOpen","useOffscreen","fly","onCategoryChange","noop","onToggleTree","onResizeEnd","remainingProps","getSidebarMode","isFly","treeWidth","setTreeWidth","useState","isResize","setIsResize","sidebarMode","setSidebarMode","useRef","mergedRefs","mergeRefs","usePrevious","previousMode","setPreviousMode","childrenArray","invariant","classes","resizeLimitClasses","resizeLimitStyle","firstChild","category","style","handleToggleTreeContent","handleSelectCategory","selectedCategoryId","handleResize","diff","halfWindowWidth","usedMaxWidth","oldWidth","updatedWidth","getWidthInBoundaries","handleResizeStart","body","handleResizeEnd","jsxs","TreeSidebar","SmoothScrollbars","Resizer"],"mappings":"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"}
1
+ {"version":3,"file":"AssetTree.js","sources":["../../../src/components/assetTree/AssetTree.tsx"],"sourcesContent":["import React, { memo, useState, useRef, forwardRef, type PropsWithChildren } from 'react';\nimport { head, isArray, noop } from 'es-toolkit/compat';\nimport invariant from 'tiny-invariant';\n\nimport classNames from '../../utils/classNames';\nimport TreeCategory, { type TreeCategoryProps } from './TreeCategory';\nimport Resizer from '../resizer/Resizer';\nimport TreeSidebar from './TreeSidebar';\nimport getWidthInBoundaries from '../../utils/getWidthInBoundaries';\nimport mergeRefs from '../../utils/mergeRefs';\nimport usePrevious from '../../usePrevious';\nimport SmoothScrollbars from '../smoothScrollbars/SmoothScrollbars';\n\nconst DEFAULT_WIDTH = 350;\nconst DEFAULT_MIN_WIDTH = 100;\nconst DEFAULT_MAX_WIDTH = 0;\n\nconst TreeMode = {\n MODE_FLY: 'fly',\n MODE_FLUID: 'fluid',\n} as const;\n\nconst getSidebarBodyRef = (sidebarRef: React.MutableRefObject<HTMLDivElement | null>) =>\n head(sidebarRef?.current?.getElementsByClassName('AssetTreeBody'));\n\nconst getCurrentCategoryElement = (children: React.ReactElement[], currentCategoryId: string) => {\n return isArray(children) ? children.find(child => child && child.props.id === currentCategoryId) : children;\n};\n\nconst renderTreesOffscreen = (children: React.ReactElement[], categoryId: string | undefined) => {\n return React.Children.map(children, child => {\n const offscreenClasses = classNames(\n 'TreeOffscreenWrapper',\n child && child.props.id !== categoryId && 'position-offscreen pointer-events-none'\n );\n return <div className={offscreenClasses}>{child}</div>;\n });\n};\n\nexport type AssetTreeProps = {\n /**\n * Defines if the component will overlap the body content.\n *\n * @default false\n */\n fly?: boolean;\n\n /**\n * Defines whether or not the sidebar is resizable.\n *\n * @default true\n */\n resizable?: boolean;\n\n /**\n * Defines whether the component has a border or not.\n *\n * @default false\n */\n bordered?: boolean;\n\n /**\n * Defines the width of the component. The value is set as inline style.\n *\n * Note: when component is resizable it will take the provided\n * width in px only and convert it to number in case.\n *\n * @default 350\n */\n width?: number;\n\n /**\n * Defines the minimum width of the component in px that will take effect when resizing.\n *\n * @default 100\n */\n minWidth?: number;\n\n /**\n * Defines the maximum width of the component in px that will take effect when resizing.\n *\n * @default 0\n */\n maxWidth?: number;\n\n /**\n * Defines the height of the component in px.\n */\n height?: number;\n\n /**\n * Defines whether the component is open or not.\n *\n * @default true\n */\n isOpen?: boolean;\n\n /**\n * Callback for when the tree visibility is toggled.\n *\n * @default () => {}\n * @param isOpen\n * @returns\n */\n onToggleTree?: (isOpen: boolean) => void;\n\n /**\n * The id of the category which is currently active and shall be shown.\n */\n currentCategoryId?: string;\n\n /**\n * Callback for handling change of category.\n *\n * @default () => {}\n * @param selectedCategoryId\n * @returns\n */\n onCategoryChange?: (selectedCategoryId: string) => void;\n\n /**\n * Callback for when the resize is done.\n *\n * @default () => {}\n */\n onResizeEnd?: VoidFunction;\n\n /**\n * Defines whether the tree components are rendered offscreen and kept mounted in the DOM.\n *\n * @default false\n */\n useOffscreen?: boolean;\n\n /**\n * Additional classes added on the wrapper element.\n */\n className?: string;\n};\n\n// Check if the child is a React element and if it has the type TreeCategory\nconst isTreeCategory = (child: React.ReactNode): child is React.ReactElement<TreeCategoryProps> => {\n return React.isValidElement(child) && child.type === TreeCategory;\n};\n\nconst AssetTree = memo(\n forwardRef<HTMLDivElement, PropsWithChildren<AssetTreeProps>>((props, ref) => {\n const {\n className,\n resizable = true,\n width = DEFAULT_WIDTH,\n minWidth = DEFAULT_MIN_WIDTH,\n maxWidth = DEFAULT_MAX_WIDTH,\n height,\n bordered = false,\n currentCategoryId,\n isOpen = true,\n useOffscreen = false,\n fly = false,\n onCategoryChange = noop,\n onToggleTree = noop,\n onResizeEnd = noop,\n children = [],\n ...remainingProps\n } = props;\n\n const getSidebarMode = (isFly: boolean) => (isFly ? TreeMode.MODE_FLY : TreeMode.MODE_FLUID);\n\n const [treeWidth, setTreeWidth] = useState(width);\n const [isResize, setIsResize] = useState(false);\n const [sidebarMode, setSidebarMode] = useState(getSidebarMode(fly));\n\n const sidebarRef = useRef<HTMLDivElement>(null);\n\n const mergedRefs = mergeRefs([ref, sidebarRef]);\n\n // Update internal state when props change\n const previousWidth = usePrevious(width);\n if (previousWidth !== width) {\n setTreeWidth(width);\n }\n\n const [previousMode, setPreviousMode] = useState(fly);\n if (previousMode !== fly) {\n setSidebarMode(getSidebarMode(fly));\n setPreviousMode(fly);\n }\n\n const childrenArray = React.Children.toArray(children);\n\n // check for children type of TreeCategory and throw error in case\n invariant(childrenArray.every(isTreeCategory), 'AssetTree only excepts children of type \"TreeCategory\"');\n\n const classes = classNames(\n 'AssetTree',\n className,\n !isOpen && 'closed',\n bordered && 'border',\n sidebarMode === TreeMode.MODE_FLY ? 'fly' : 'fluid'\n );\n\n const resizeLimitClasses = classNames('AssetTreeResizeLimit', isResize && 'display-block');\n\n const resizeIndicatorPosition = maxWidth || window.innerWidth * 0.5;\n const resizeLimitStyle = { left: resizeIndicatorPosition };\n\n const firstChild = head(childrenArray);\n\n const category = currentCategoryId ? getCurrentCategoryElement(childrenArray, currentCategoryId) : firstChild;\n\n const style = {\n width: treeWidth,\n height,\n };\n\n const handleToggleTreeContent = () => onToggleTree(!isOpen);\n\n const handleSelectCategory = (selectedCategoryId: string) => {\n onCategoryChange(selectedCategoryId);\n\n if (!isOpen) {\n handleToggleTreeContent();\n } else if (isOpen && currentCategoryId === selectedCategoryId) {\n handleToggleTreeContent();\n }\n };\n\n const handleResize = (diff: number) => {\n const halfWindowWidth = window.innerWidth * 0.5;\n const usedMaxWidth = maxWidth || halfWindowWidth;\n\n // Check for sidebar width if it is half window size. If it was before but the sidebar was resized so it is\n // no longer half window size, set the sidebar width to half the window size to avoid jumping sidebar\n // to old width\n setTreeWidth(oldWidth => {\n const updatedWidth = oldWidth - diff;\n return getWidthInBoundaries(minWidth, usedMaxWidth, updatedWidth);\n });\n };\n\n const handleResizeStart = () => {\n const body = getSidebarBodyRef(sidebarRef);\n if (body) {\n body.classList.add('pointer-events-none');\n }\n setIsResize(true);\n };\n\n const handleResizeEnd = () => {\n const body = getSidebarBodyRef(sidebarRef);\n if (body) {\n body.classList.remove('pointer-events-none');\n }\n setIsResize(false);\n onResizeEnd();\n };\n\n return (\n <div {...remainingProps} className={classes} style={style} ref={mergedRefs}>\n <div className={resizeLimitClasses} style={resizeLimitStyle} />\n <div className='AssetTreeContent'>\n <TreeSidebar\n onSelectCategory={handleSelectCategory}\n currentCategoryId={currentCategoryId}\n onClick={handleToggleTreeContent}\n >\n {isArray(children) ? children : [children]}\n </TreeSidebar>\n <SmoothScrollbars slideIn className='AssetTreeBody'>\n {useOffscreen ? renderTreesOffscreen(childrenArray, currentCategoryId) : category}\n </SmoothScrollbars>\n </div>\n {resizable && isOpen && (\n <Resizer\n onResizeStart={handleResizeStart}\n onResize={handleResize}\n onResizeEnd={handleResizeEnd}\n direction={Resizer.HORIZONTAL}\n position={Resizer.RIGHT}\n />\n )}\n </div>\n );\n })\n);\n\nObject.assign(AssetTree, TreeMode);\n\nexport default AssetTree;\n"],"names":["DEFAULT_WIDTH","DEFAULT_MIN_WIDTH","DEFAULT_MAX_WIDTH","TreeMode","getSidebarBodyRef","sidebarRef","head","getCurrentCategoryElement","children","currentCategoryId","isArray","child","renderTreesOffscreen","categoryId","React","offscreenClasses","classNames","jsx","isTreeCategory","TreeCategory","AssetTree","memo","forwardRef","props","ref","className","resizable","width","minWidth","maxWidth","height","bordered","isOpen","useOffscreen","fly","onCategoryChange","noop","onToggleTree","onResizeEnd","remainingProps","getSidebarMode","isFly","treeWidth","setTreeWidth","useState","isResize","setIsResize","sidebarMode","setSidebarMode","useRef","mergedRefs","mergeRefs","usePrevious","previousMode","setPreviousMode","childrenArray","invariant","classes","resizeLimitClasses","resizeLimitStyle","firstChild","category","style","handleToggleTreeContent","handleSelectCategory","selectedCategoryId","handleResize","diff","halfWindowWidth","usedMaxWidth","oldWidth","updatedWidth","getWidthInBoundaries","handleResizeStart","body","handleResizeEnd","jsxs","TreeSidebar","SmoothScrollbars","Resizer"],"mappings":"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"}
@@ -25,12 +25,20 @@ export type TreeGroup = {
25
25
  * The rioglyph icon name for a group.
26
26
  *
27
27
  * The prefix `rioglyph-` can be omitted.
28
+ *
29
+ * For custom icons and logos, provide an image URL with one of these extensions:
30
+ * `.png`, `.webp`, `.jpg`, `.jpeg`, `.svg`.
31
+ * In this case, an img tag is rendered instead of the rioglyph.
28
32
  */
29
33
  icon?: string;
30
34
  /**
31
35
  * The rioglyph icon name for a expanded group.
32
36
  *
33
37
  * The prefix `rioglyph-` can be omitted.
38
+ *
39
+ * For custom icons and logos, provide an image URL with one of these extensions:
40
+ * `.png`, `.webp`, `.jpg`, `.jpeg`, `.svg`.
41
+ * In this case, an img tag is rendered instead of the rioglyph.
34
42
  */
35
43
  expandedIcon?: string;
36
44
  /**
@@ -67,6 +75,10 @@ export type TreeItem = {
67
75
  * - If set to `null`, no icon will be rendered, even if `type` is defined.
68
76
  *
69
77
  * This allows full control over the icon behavior while maintaining backward compatibility with type-based icons.
78
+ *
79
+ * For custom icons and logos, provide an image URL with one of these extensions:
80
+ * `.png`, `.webp`, `.jpg`, `.jpeg`, `.svg`.
81
+ * In this case, an img tag is rendered instead of the rioglyph.
70
82
  */
71
83
  icon?: string | null;
72
84
  /**
@@ -197,6 +209,9 @@ export type TreeProps = {
197
209
  * @default false
198
210
  */
199
211
  hideTreeHead?: boolean;
212
+ /**
213
+ * Additional custom content that is rendered at the top of the tree component. This can be used for nav pills.
214
+ */
200
215
  treeHeaderContent?: React.ReactElement;
201
216
  /**
202
217
  * Defines the max-height of the scrollable list.
@@ -1,8 +1,8 @@
1
1
  import { jsxs as R, jsx as n } from "react/jsx-runtime";
2
2
  import pt, { useReducer as mt, useRef as E, useCallback as pe, useEffect as F } from "react";
3
- import me from "classnames";
4
3
  import { noop as k, size as y, isEmpty as u, filter as H, cond as q, stubTrue as Z, map as Y, flow as ht, omit as ft, find as gt, without as St } from "es-toolkit/compat";
5
4
  import { isNil as It, isEqual as W } from "es-toolkit/predicate";
5
+ import me from "../../utils/classNames.js";
6
6
  import Tt from "./TreeSearch.js";
7
7
  import yt from "./TreeSelectAll.js";
8
8
  import Gt from "./TreeSummary.js";
@@ -1 +1 @@
1
- {"version":3,"file":"Tree.js","sources":["../../../src/components/assetTree/Tree.tsx"],"sourcesContent":["/* eslint-disable no-use-before-define */\nimport React, { useCallback, useEffect, useReducer, useRef } from 'react';\nimport classNames from 'classnames';\nimport {\n cond,\n filter,\n isEmpty,\n noop,\n omit,\n size,\n stubTrue as otherwise,\n flow,\n map,\n find,\n without,\n} from 'es-toolkit/compat';\nimport { isEqual, isNil } from 'es-toolkit/predicate';\n\nimport TreeSearch from './TreeSearch';\nimport TreeSelectAll from './TreeSelectAll';\nimport TreeSummary, { type AssetType } from './TreeSummary';\nimport TreeNodeContainer from './TreeNodeContainer';\nimport TreeNode from './TreeNode';\nimport TreeLeafList from './TreeLeafList';\nimport TreeNothingFound from './TreeNothingFound';\nimport TreeOptions from './TreeOptions';\nimport TreeRoot from './TreeRoot';\nimport TypeCounter from './TypeCounter';\nimport {\n containsItemById,\n debounceFn,\n filterAssetByType,\n filterEmptyGroups,\n filterOutByItemId,\n getTypeCounts,\n getFlatItems,\n getListIds,\n notEmpty,\n notEqual,\n excludeFromList,\n getMappedItemsToGroups,\n sortGroupItemsByName,\n sortGroupsByName,\n addOrRemoveFromList,\n} from './treeUtils';\nimport {\n treeReducer,\n assetCounted,\n allCheckedChanged,\n visibleTypeCountersChanged,\n searchValueChanged,\n flatItemsChanged,\n emptyGroupsChanged,\n groupedItemsChanged,\n typeFilterChanged,\n type State,\n} from './treeReducer';\nimport { useTreeVirtualization } from './useTreeVirtualization';\nimport { useTreeExpansion } from './useTreeExpansion';\nimport { useTreeHeight } from './useTreeHeight';\nimport { useTreeScrollPosition } from './useTreeScrollPosition';\nimport SmoothScrollbars from '../../SmoothScrollbars';\n\nexport { getTypeCounts, getSubTypeCounts } from './treeUtils';\n\nexport type TreeItemName = {\n firstName?: string;\n lastName: string;\n};\n\nexport type TreeGroup = {\n /**\n * A unique identifier of a group.\n */\n id: string;\n\n /**\n * The name of a group.\n */\n name: string | React.ReactNode;\n\n /**\n * Can be set to \"last\" to enforce the last position in the tree.\n */\n position?: 'last';\n\n /**\n * Disallows the selection of the group itself.\n */\n disabled?: boolean;\n\n /**\n * The rioglyph icon name for a group.\n *\n * The prefix `rioglyph-` can be omitted.\n */\n icon?: string;\n\n /**\n * The rioglyph icon name for a expanded group.\n *\n * The prefix `rioglyph-` can be omitted.\n */\n expandedIcon?: string;\n\n /**\n * Additional classes added to the group element.\n */\n className?: string;\n};\n\nexport type TreeItem = {\n /**\n * A unique identifier of an item.\n */\n id: string;\n\n /**\n * The name of an item. Either it is a plain string or an object composed of:\n * `firstName` and `lastName` where __lastName__ is mandatory.\n */\n name: string | TreeItemName;\n\n /**\n * The subline of an item. This can e used to show additional information for that item.\n */\n info?: string | React.ReactNode;\n\n /**\n * The primary type of the item.\n *\n * This is also used as the fallback icon name and refers to the name of the respective\n * rioglyph icon (excluding the `rioglyph-` prefix).\n */\n type: string;\n\n /**\n * Optional icon override for the item.\n *\n * - If set to a string (e.g. `'truck'`), this icon will be used explicitly.\n * - If set to `undefined`, the `type` property will be used as the fallback icon.\n * - If set to `null`, no icon will be rendered, even if `type` is defined.\n *\n * This allows full control over the icon behavior while maintaining backward compatibility with type-based icons.\n */\n icon?: string | null;\n\n /**\n * Optional sub-type of the item.\n *\n * This refers to the name of an additional rioglyph icon (excluding the `rioglyph-` prefix),\n * typically used to render a secondary icon next to the primary one (Note: for fuel types better use the pairIcon prop).\n */\n subType?: string;\n\n /**\n * Optional pair icon override for the subType.\n *\n * - If set to a string (e.g. `'fuel-gas'`), this icon will be used explicitly.\n * - If set to `undefined`, the `subType` property will be used as the fallback icon.\n * - If set to `null`, no icon will be rendered, even if `subType` is defined.\n *\n * This allows full control over the icon behavior while maintaining backward compatibility with subType-based icons.\n */\n pairIcon?: string | null | undefined;\n\n /**\n * List of group ids the items is associated with.\n *\n * @default []\n */\n groupIds?: string[];\n\n /**\n * Additional classes added to the item element.\n */\n className?: string;\n};\n\nexport type GroupedItem = TreeGroup & {\n items: TreeItem[];\n};\n\nexport type GroupedItems = {\n [key: string]: GroupedItem;\n};\n\nexport type SelectionChangeResponse = { items: string[]; groups: string[] };\n\nexport type TreeProps = {\n /**\n * The list of groups of the items. If no groups are provided all items\n * are rendered as flat list.\n *\n * @default []\n */\n groups?: TreeGroup[];\n\n /**\n * The list of items.\n *\n * @default []\n */\n items?: TreeItem[];\n\n /**\n * List of selected group ids.\n *\n * @default []\n */\n selectedGroups?: string[];\n\n /**\n * List of selected item ids.\n *\n * @default []\n */\n selectedItems?: string[];\n\n /**\n * Merged Callback for item and group selection changes.\n * It responds with a selection object that contains the selected itemIds and groupIds:\n * `{ items: [], groups: [] }`\n * @returns\n */\n onSelectionChange?: ({ items, groups }: SelectionChangeResponse) => void;\n\n /**\n * Defines the selection behavior of the tree.\n *\n * @default true\n */\n hasMultiselect?: boolean;\n\n /**\n * Defines if the single selection should also show radios.\n *\n * @default false\n */\n showRadioButtons?: boolean;\n\n /**\n * Defines whether or not the built-in Search is shown.\n *\n * @default false\n */\n hideSearch?: boolean;\n\n /**\n * The text used as placeholder for the search input.\n */\n searchPlaceholder?: string;\n\n /**\n * Callback for when the search value changes.\n * @param value\n * @returns\n */\n onSearchChange?: (value: string) => void;\n\n /**\n * Used to define custom search component which replaces the built-in search.\n */\n search?: React.ReactNode;\n\n /**\n * Used to define custom asset type counter component which replaces the built-in summary.\n */\n summary?: React.ReactNode;\n\n /**\n * Defines whether a summary is shown.\n *\n * @default false\n */\n hideSummary?: boolean;\n\n /**\n * Callback triggered when the built-in asset type filter changes.\n * This is only available when the default summary is used.\n *\n * @param type\n * @returns\n */\n onTypeFilterChange?: (currentTypes: string[]) => void;\n\n /**\n * Defines whether the entire area below the search field is shown or not. Note: Disabling the\n * tree head will hide the select all checkbox and the tree options as well as the tree summary.\n *\n * @default false\n */\n hideTreeHead?: boolean;\n\n treeHeaderContent?: React.ReactElement;\n\n /**\n * Defines the max-height of the scrollable list.\n */\n scrollHeight?: number;\n\n /**\n * List of group ids which are expanded.\n */\n expandedGroups?: string[];\n\n /**\n * Callback function triggered when a group expands or collapses.\n * @param newExpandedGroups\n * @returns\n */\n onExpandGroupsChange?: (newExpandedGroups: string[]) => void;\n\n /**\n * Defines whether empty groups are shown or not.\n *\n * @default true\n */\n showEmptyGroups?: boolean;\n\n /**\n * Component to offer customization options for the tree.\n */\n treeOptions?: React.ReactNode[];\n\n /**\n * Tooltip content for the tree options dropdown.\n */\n treeOptionsTooltip?: React.ReactNode;\n\n /**\n * Disables animation when filtering or using search\n *\n * @default false\n */\n disableAnimation?: boolean;\n\n /**\n * The number of items (including groups and children) used for virtualizing the tree.\n *\n * @default 50\n */\n virtualizeThreshold?: number;\n\n /**\n * The number of items rendered beyond the visible area of a virtualized tree.\n *\n * @default 5\n */\n overscan?: number;\n\n /**\n * Additional classes added to the wrapping element.\n */\n className?: string;\n};\n\nconst filterProps = (props: TreeProps) =>\n omit(props, ['expandedGroups', 'onExpandGroupsChange', 'onSearchChange', 'onSelectionChange', 'treeOptions']);\n\nconst customCompare = (prevProps: TreeProps, nextProps: TreeProps) =>\n isEqual(filterProps(prevProps), filterProps(nextProps));\n\nconst VIRTUALIZED_THRESHOLD = 50;\nconst DEFAULT_VIRTUALIZED_OVERSCAN = 5;\n\nconst Tree = React.memo((props: TreeProps) => {\n const {\n groups = [],\n items = [],\n selectedGroups = [],\n selectedItems = [],\n onSelectionChange = noop,\n hasMultiselect = true,\n showRadioButtons = false,\n hideSearch = false,\n hideTreeHead,\n treeHeaderContent,\n summary,\n hideSummary = false,\n search,\n searchPlaceholder = 'Type here to filter by name',\n onSearchChange = noop,\n className,\n scrollHeight,\n expandedGroups,\n onExpandGroupsChange = noop,\n showEmptyGroups = true,\n treeOptions = [],\n treeOptionsTooltip,\n disableAnimation = false,\n onTypeFilterChange = noop,\n virtualizeThreshold = VIRTUALIZED_THRESHOLD,\n overscan = DEFAULT_VIRTUALIZED_OVERSCAN,\n ...remainingProps\n } = props;\n\n const [state, dispatch] = useReducer(treeReducer, {\n groupedItems: {},\n flatItems: [],\n allChecked: false,\n searchValue: '',\n assetCounts: {},\n typeFilter: [],\n visibleTypeCounters: [],\n emptyGroups: [],\n } as State);\n\n const treeRef = useRef<HTMLDivElement>(null);\n\n const previousItems = useRef<TreeItem[]>();\n const previousGroups = useRef<TreeGroup[]>();\n const previousSearchValue = useRef('');\n\n const { internalExpandedGroups, handleToggleNode } = useTreeExpansion(\n props.expandedGroups,\n props.onExpandGroupsChange\n );\n\n const hasGroups = () => groups && notEmpty(groups);\n const hasInternalSearchValue = () => notEmpty(state.searchValue);\n const hasSearchAndGroups = () => hasInternalSearchValue() && hasGroups();\n const hasNoSearchAndGroups = () => !hasInternalSearchValue() && hasGroups();\n\n const scrollElementRef = useRef<HTMLDivElement>(null);\n\n const { virtualizedItems, virtualizer } = useTreeVirtualization(\n state.groupedItems,\n state.flatItems,\n hasInternalSearchValue(),\n hasGroups(),\n internalExpandedGroups,\n scrollElementRef,\n overscan\n );\n\n const { scrollToTop } = useTreeScrollPosition(virtualizer, scrollElementRef);\n\n // Enhance the handleToggleNode function\n const enhancedHandleToggleNode = useCallback(\n (nodeId: string) => {\n // Execute the original toggle logic\n handleToggleNode(nodeId);\n },\n [handleToggleNode]\n );\n\n // Create a callback for scroll events that works with the virtualizer\n const handleVirtualizedScroll = useCallback(\n (event: React.UIEvent<unknown> | undefined) => {\n if (virtualizer && event?.target) {\n const scrollElement = event.target as HTMLElement;\n virtualizer.scrollToOffset(scrollElement.scrollTop, { align: 'start' });\n }\n },\n [virtualizer]\n );\n\n useEffect(() => {\n // Update Tree when items or groups have changed\n if (notEqual(previousItems.current, items) || notEqual(previousGroups.current, groups)) {\n previousItems.current = items;\n previousGroups.current = groups;\n\n const typeCounts = getTypeCounts(items);\n\n dispatch(assetCounted(typeCounts));\n\n const allChecked = checkAllSelected({ items, groups, selectedItems, selectedGroups }, state.flatItems);\n dispatch(allCheckedChanged(allChecked));\n\n // Get the distinct asset types from the asset list that is passed into the component\n // to know which asset type counter to render\n dispatch(visibleTypeCountersChanged(Object.keys(typeCounts) as AssetType[]));\n\n makeTree(groups, items);\n }\n }, [items, groups]);\n\n const debouncedMakeTree = debounceFn((losGroupos: TreeGroup[], losItems: TreeItem[]) =>\n makeTree(losGroupos, losItems)\n );\n\n useEffect(() => {\n // To prevent executing the effect on first render, use a ref to check previous render values\n if (notEqual(previousSearchValue.current, state.searchValue)) {\n debouncedMakeTree(groups, items);\n previousSearchValue.current = state.searchValue;\n }\n }, [state.searchValue]);\n\n useEffect(() => makeTree(groups, items), [state.typeFilter]);\n\n // Update tree when empty groups are toggled from outside\n useEffect(() => makeTree(groups, items), [showEmptyGroups]);\n\n // Update \"select all\" state from outside when groups are selected outside programmatically\n // without using the \"select all\" checkbox\n useEffect(() => {\n const numOfAllGroups = size(groups);\n const numOfSelectedGroups = size(selectedGroups);\n\n if (numOfSelectedGroups !== numOfAllGroups && state.allChecked) {\n dispatch(allCheckedChanged(false));\n } else if (numOfSelectedGroups !== 0 && numOfSelectedGroups === numOfAllGroups && !state.allChecked) {\n dispatch(allCheckedChanged(true));\n }\n }, [selectedGroups]);\n\n const checkAllSelected = (\n updatedProps: { items: TreeItem[]; groups: TreeGroup[]; selectedItems: string[]; selectedGroups: string[] },\n flatItems: TreeItem[]\n ) => {\n const {\n items: updatedItems,\n groups: updatedGroups,\n selectedItems: updatedSelectedItems,\n selectedGroups: updatedSelectedGroups,\n } = updatedProps;\n\n if (\n (!hasGroups() && isEmpty(updatedSelectedItems)) ||\n (hasNoSearchAndGroups() && isEmpty(updatedSelectedGroups)) ||\n (hasSearchAndGroups() && isEmpty(updatedSelectedItems))\n ) {\n return false;\n }\n\n if (hasNoSearchAndGroups()) {\n const unselectedGroups = filter(updatedGroups, filterOutByItemId(updatedSelectedGroups));\n return isEmpty(unselectedGroups);\n }\n\n if (hasSearchAndGroups()) {\n const unselectedSearchItems = filter(flatItems, filterOutByItemId(updatedSelectedItems));\n return isEmpty(unselectedSearchItems);\n }\n\n const unselectedItems = updatedItems.filter(filterOutByItemId(updatedSelectedItems));\n return isEmpty(unselectedItems);\n };\n\n const selectAllSearchResultItems = (shouldSelect: boolean) => selectAllFlatItems(shouldSelect);\n\n const handleSelectAll = (shouldSelect: boolean, isStateIndeterminate: boolean) => {\n const shouldSelectAll = shouldSelect && !isStateIndeterminate;\n dispatch(allCheckedChanged(shouldSelectAll));\n\n cond([\n [hasNoSearchAndGroups, () => selectAllGroups(shouldSelectAll)],\n [hasSearchAndGroups, () => selectAllSearchResultItems(shouldSelectAll)],\n [otherwise, () => selectAllFlatItems(shouldSelectAll)],\n ])();\n };\n\n const selectAllGroups = (shouldSelect: boolean) => respondSelection([], shouldSelect ? getListIds(groups) : []);\n\n const selectAllFlatItems = (shouldSelect: boolean) =>\n respondSelection(shouldSelect ? getListIds(state.flatItems) : [], []);\n\n const respondSelection = (updatedSelectedItemIds: string[], updatedSelectedGroupIds: string[]) => {\n onSelectionChange({\n items: updatedSelectedItemIds,\n groups: updatedSelectedGroupIds,\n });\n };\n\n const handleGroupSelection = (group: TreeGroup, isStateIndeterminate: boolean) => {\n const groupId = group.id;\n\n const isSelected = selectedGroups.includes(groupId);\n const shouldSelectGroup = !isSelected && !isStateIndeterminate;\n\n // handle group selection\n const newSelectedGroups = shouldSelectGroup\n ? [...selectedGroups, groupId]\n : excludeFromList(selectedGroups, groupId);\n\n // deselect all items of a node since they will be selected inherently via the group itself\n const itemsInGroup = find(state.groupedItems, (entry: GroupedItem) => entry.id === groupId);\n const itemIdsOfGroup = map(itemsInGroup?.items, (item: TreeItem) => item.id);\n const updatedSelectedItems = without(selectedItems, ...itemIdsOfGroup);\n\n // check if all groups are selected to change the state of TreeSelectAll\n const groupAmount = groups.length;\n const emptyGroupAmount = showEmptyGroups ? 0 : state.emptyGroups.length;\n const totalGroupAmount = groupAmount - emptyGroupAmount;\n const areAllGroupsChecked = totalGroupAmount === newSelectedGroups.length;\n dispatch(allCheckedChanged(areAllGroupsChecked));\n\n respondSelection(updatedSelectedItems, newSelectedGroups);\n };\n\n const handleSearchChange = (updatedSearchValue: string) => {\n onSearchChange(updatedSearchValue);\n dispatch(searchValueChanged(updatedSearchValue));\n\n if (virtualizer) {\n // Every time search changes or is cleared, scroll to the top\n setTimeout(() => {\n scrollToTop();\n }, 10);\n }\n };\n\n const setFlatItemList = (updatedItems: TreeItem[], searchValue: string) => {\n const flatItems = getFlatItems(updatedItems, searchValue);\n dispatch(flatItemsChanged(flatItems));\n };\n\n const setGroupedItemList = (\n groupsToProcess: TreeGroup[],\n itemsToProcess: TreeItem[],\n considerEmptyGroups: boolean\n ) => {\n // Map items to groups with filtered items\n const mappedItemsToGroups = getMappedItemsToGroups(groupsToProcess, itemsToProcess);\n const newGroupedItems = flow(sortGroupsByName, sortGroupItemsByName)(mappedItemsToGroups);\n const groupedItems = considerEmptyGroups ? newGroupedItems : filterEmptyGroups(newGroupedItems);\n\n // Keep the empty groups in memory for later access in select all, without re-iterating on every\n // group selection\n const emptyGroups = filter(newGroupedItems, (group: GroupedItem) => isEmpty(group.items));\n\n dispatch(emptyGroupsChanged(emptyGroups));\n dispatch(assetCounted(getTypeCounts(items)));\n dispatch(groupedItemsChanged(groupedItems));\n\n // Update expanded groups again\n };\n\n const makeTree = (updatedGroups: TreeGroup[], updatedItems: TreeItem[]) => {\n const internalSearchValue = state.searchValue;\n const internalTypeFilter = state.typeFilter;\n\n const groupsToProcess = updatedGroups;\n const itemsToProcess = updatedItems;\n\n const hasGroupList = (groupList: TreeGroup[]) => groupList && notEmpty(groupList);\n\n const hasNoInternalSearchAndGroups = () => isEmpty(internalSearchValue) && hasGroupList(groupsToProcess);\n const hasInternalSearchAndGroups = () => notEmpty(internalSearchValue) && hasGroupList(groupsToProcess);\n\n const filteredItems = isEmpty(internalTypeFilter)\n ? itemsToProcess\n : filterAssetByType(itemsToProcess, internalTypeFilter);\n\n const setGroupedItems = () => setGroupedItemList(groupsToProcess, filteredItems, showEmptyGroups);\n\n const setFlatItems = () => setFlatItemList(filteredItems, internalSearchValue);\n\n cond([\n [hasNoInternalSearchAndGroups, setGroupedItems],\n [hasInternalSearchAndGroups, setFlatItems],\n [otherwise, setFlatItems],\n ])();\n };\n\n const containerHeight = useTreeHeight(treeRef, scrollHeight);\n\n const renderVirtualizedTree = () => {\n const items = virtualizer.getVirtualItems();\n const isGroupedList = hasGroups() && !hasInternalSearchValue();\n\n return (\n <SmoothScrollbars\n ref={scrollElementRef}\n className='tree-virtual-scrollbar'\n onScroll={handleVirtualizedScroll}\n autoHeight={false}\n slideIn\n style={{\n height: `${containerHeight}px`,\n }}\n >\n <div\n className={isGroupedList ? 'grouped-list' : 'flat-list'}\n style={{\n height: `${virtualizer.getTotalSize()}px`,\n position: 'relative',\n }}\n >\n {items.map(virtualItem => {\n const item = virtualizedItems[virtualItem.index];\n\n if (!item) {\n return null;\n }\n\n const isGroupSelected =\n selectedGroups.includes(item.id) ||\n (item.type === 'leaf' && selectedGroups.includes(item.groupId));\n\n return (\n <div\n key={`${item.type}-${item.id}-${virtualItem.index}`}\n data-index={virtualItem.index}\n ref={virtualizer.measureElement}\n className={`virtualized-tree-item ${item.type === 'group' ? 'group-item' : 'leaf-item'} ${isGroupSelected ? 'checked' : ''}`}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: `${virtualItem.size}px`,\n transform: `translateY(${virtualItem.start}px)`,\n }}\n >\n {item.type === 'group' ? (\n <TreeNodeContainer\n key={item.id}\n groupId={item.id}\n isOpen={item.isExpanded}\n disableAnimation={disableAnimation}\n >\n <TreeNode\n node={item.data}\n hasMultiselect={hasMultiselect}\n onToggleNode={enhancedHandleToggleNode}\n onSelect={handleGroupSelection}\n isSelected={isGroupSelected}\n isOpen={item.isExpanded}\n isIndeterminate={\n !isGroupSelected &&\n item.data.items.some(groupItem => selectedItems.includes(groupItem.id))\n }\n />\n </TreeNodeContainer>\n ) : (\n // Render individual leaf item with proper styling\n <TreeNodeContainer key={item.id} isOpen disableAnimation={disableAnimation}>\n <TreeLeafList\n leafList={[item.data]}\n hasMultiselect={hasMultiselect}\n showRadioButtons={showRadioButtons}\n selectedItems={selectedItems}\n selectedGroups={selectedGroups}\n onSelectionChange={respondSelection}\n />\n </TreeNodeContainer>\n )}\n </div>\n );\n })}\n </div>\n </SmoothScrollbars>\n );\n };\n\n const renderTree = () => {\n const { groupedItems } = state;\n\n if (isEmpty(groupedItems)) {\n return <TreeNothingFound />;\n }\n\n if (virtualizedItems.length > virtualizeThreshold) {\n return renderVirtualizedTree();\n }\n\n const result = map(groupedItems, (group: GroupedItem) => {\n const groupId = group.id;\n const groupItems = group.items;\n\n const isOpen = internalExpandedGroups?.includes(groupId) ?? false;\n\n const numSelectedGroupItems = filter(groupItems, containsItemById(selectedItems)).length;\n\n const isGroupSelected = selectedGroups.includes(groupId);\n const isStateIndeterminate = !isGroupSelected && numSelectedGroupItems > 0;\n\n return (\n <TreeNodeContainer key={groupId} groupId={groupId} isOpen={isOpen} disableAnimation={disableAnimation}>\n <TreeNode\n node={group}\n hasMultiselect={hasMultiselect}\n onToggleNode={handleToggleNode}\n onSelect={handleGroupSelection}\n isSelected={isGroupSelected}\n isIndeterminate={isStateIndeterminate}\n isOpen={isOpen}\n />\n {isOpen && (\n <TreeLeafList\n leafList={groupItems}\n hasMultiselect={hasMultiselect}\n showRadioButtons={showRadioButtons}\n selectedItems={selectedItems}\n selectedGroups={selectedGroups}\n onSelectionChange={respondSelection}\n />\n )}\n </TreeNodeContainer>\n );\n });\n\n return result;\n };\n\n const renderFlatList = () => {\n const { flatItems } = state;\n const hasLeafs = isEmpty(flatItems);\n\n if (virtualizedItems.length > virtualizeThreshold) {\n return renderVirtualizedTree();\n }\n\n const getLeafs = () => (\n <TreeLeafList\n leafList={flatItems}\n hasMultiselect={hasMultiselect}\n showRadioButtons={showRadioButtons}\n selectedItems={selectedItems}\n selectedGroups={selectedGroups}\n onSelectionChange={respondSelection}\n />\n );\n\n return (\n <TreeNodeContainer disableAnimation={disableAnimation} isOpen>\n {hasLeafs ? <TreeNothingFound /> : getLeafs()}\n </TreeNodeContainer>\n );\n };\n\n const hasExternalGroups = notEmpty(groups);\n\n const hasSelectedAllItems = () => isEqual(size(selectedItems), size(state.flatItems));\n\n const hasPartiallySelectedItems = () => notEmpty(selectedItems) && !hasSelectedAllItems();\n\n const hasSelectedAllGroups = () => {\n const emptyGroupAmount = showEmptyGroups ? 0 : state.emptyGroups.length;\n return isEqual(size(selectedGroups), size(groups) - emptyGroupAmount);\n };\n\n const hasPartiallySelectedGroups = () => hasExternalGroups && notEmpty(selectedGroups) && !hasSelectedAllGroups();\n\n const hasSearchAndNoItems = hasInternalSearchValue() && isEmpty(state.flatItems);\n const hasSearchAndNoGroups = hasInternalSearchValue() && isEmpty(state.groupedItems) && hasExternalGroups;\n const hideSelectAll = hasSearchAndNoItems || hasSearchAndNoGroups;\n\n const isIndeterminate = hasPartiallySelectedGroups() || hasPartiallySelectedItems();\n\n const treeClassNames = classNames('Tree', className);\n\n const treeHeadClasses = classNames('TreeHead', 'display-flex gap-5', 'padding-15');\n\n const shouldRenderTree = () => hasGroups() && !hasInternalSearchValue();\n\n const content = cond([\n [shouldRenderTree, () => renderTree()],\n [otherwise, () => renderFlatList()],\n ])();\n\n const handleFilterByType = (type: string) => {\n const updatedTypeFilter = addOrRemoveFromList(state.typeFilter, type);\n dispatch(typeFilterChanged(updatedTypeFilter));\n onTypeFilterChange(updatedTypeFilter);\n };\n\n const enableActivity = size(state.visibleTypeCounters) !== 1;\n const isFilterActive = notEmpty(state.typeFilter);\n\n const showTreeHead = !hideTreeHead;\n const showSelectAll = !hideSelectAll;\n const showSearch = !hideSearch;\n const showSummary = !hideSummary;\n\n const hasCustomSearch = !isNil(search);\n\n return (\n <div {...remainingProps} className={treeClassNames} ref={treeRef}>\n <div className='TreeHeader'>\n {treeHeaderContent}\n {showSearch && !hasCustomSearch && (\n <TreeSearch\n value={state.searchValue}\n onChange={handleSearchChange}\n placeholder={searchPlaceholder}\n />\n )}\n {hasCustomSearch && search}\n {showTreeHead && (\n <div className={treeHeadClasses}>\n {showSelectAll && (\n <div className='border border-right-only hidden-empty padding-right-10 margin-right-2'>\n <TreeSelectAll\n isChecked={state.allChecked}\n isEnabled={hasMultiselect}\n isIndeterminate={isIndeterminate}\n onSelect={handleSelectAll}\n />\n </div>\n )}\n <div className='display-flex justify-content-between align-items-start width-100pct'>\n {showSummary\n ? summary || (\n <TreeSummary>\n {map(state.visibleTypeCounters, (typeCounter: AssetType) => (\n <TypeCounter\n key={typeCounter}\n type={typeCounter}\n icon={`${typeCounter}`}\n value={state.assetCounts[typeCounter]}\n onClick={handleFilterByType}\n isActive={state.typeFilter.includes(typeCounter)}\n hasFilter={isFilterActive}\n enableActivity={enableActivity}\n />\n ))}\n </TreeSummary>\n )\n : null}\n </div>\n <TreeOptions treeOptions={treeOptions} treeOptionsTooltip={treeOptionsTooltip} />\n </div>\n )}\n </div>\n <TreeRoot maxHeight={scrollHeight} disableAnimation={disableAnimation}>\n {content}\n </TreeRoot>\n </div>\n );\n}, customCompare);\n\nexport default Tree;\n"],"names":["filterProps","props","omit","customCompare","prevProps","nextProps","isEqual","VIRTUALIZED_THRESHOLD","DEFAULT_VIRTUALIZED_OVERSCAN","Tree","React","groups","items","selectedGroups","selectedItems","onSelectionChange","noop","hasMultiselect","showRadioButtons","hideSearch","hideTreeHead","treeHeaderContent","summary","hideSummary","search","searchPlaceholder","onSearchChange","className","scrollHeight","expandedGroups","onExpandGroupsChange","showEmptyGroups","treeOptions","treeOptionsTooltip","disableAnimation","onTypeFilterChange","virtualizeThreshold","overscan","remainingProps","state","dispatch","useReducer","treeReducer","treeRef","useRef","previousItems","previousGroups","previousSearchValue","internalExpandedGroups","handleToggleNode","useTreeExpansion","hasGroups","notEmpty","hasInternalSearchValue","hasSearchAndGroups","hasNoSearchAndGroups","scrollElementRef","virtualizedItems","virtualizer","useTreeVirtualization","scrollToTop","useTreeScrollPosition","enhancedHandleToggleNode","useCallback","nodeId","handleVirtualizedScroll","event","scrollElement","useEffect","notEqual","typeCounts","getTypeCounts","assetCounted","allChecked","checkAllSelected","allCheckedChanged","visibleTypeCountersChanged","makeTree","debouncedMakeTree","debounceFn","losGroupos","losItems","numOfAllGroups","size","numOfSelectedGroups","updatedProps","flatItems","updatedItems","updatedGroups","updatedSelectedItems","updatedSelectedGroups","isEmpty","unselectedGroups","filter","filterOutByItemId","unselectedSearchItems","unselectedItems","selectAllSearchResultItems","shouldSelect","selectAllFlatItems","handleSelectAll","isStateIndeterminate","shouldSelectAll","cond","selectAllGroups","otherwise","respondSelection","getListIds","updatedSelectedItemIds","updatedSelectedGroupIds","handleGroupSelection","group","groupId","newSelectedGroups","excludeFromList","itemsInGroup","find","entry","itemIdsOfGroup","map","item","without","groupAmount","emptyGroupAmount","areAllGroupsChecked","handleSearchChange","updatedSearchValue","searchValueChanged","setFlatItemList","searchValue","getFlatItems","flatItemsChanged","setGroupedItemList","groupsToProcess","itemsToProcess","considerEmptyGroups","mappedItemsToGroups","getMappedItemsToGroups","newGroupedItems","flow","sortGroupsByName","sortGroupItemsByName","groupedItems","filterEmptyGroups","emptyGroups","emptyGroupsChanged","groupedItemsChanged","internalSearchValue","internalTypeFilter","hasGroupList","groupList","hasNoInternalSearchAndGroups","hasInternalSearchAndGroups","filteredItems","filterAssetByType","setGroupedItems","setFlatItems","containerHeight","useTreeHeight","renderVirtualizedTree","isGroupedList","jsx","SmoothScrollbars","virtualItem","isGroupSelected","TreeNodeContainer","TreeNode","groupItem","TreeLeafList","renderTree","TreeNothingFound","groupItems","isOpen","numSelectedGroupItems","containsItemById","jsxs","renderFlatList","hasLeafs","hasExternalGroups","hasSelectedAllItems","hasPartiallySelectedItems","hasSelectedAllGroups","hasPartiallySelectedGroups","hasSearchAndNoItems","hasSearchAndNoGroups","hideSelectAll","isIndeterminate","treeClassNames","classNames","treeHeadClasses","content","handleFilterByType","type","updatedTypeFilter","addOrRemoveFromList","typeFilterChanged","enableActivity","isFilterActive","showTreeHead","showSelectAll","showSearch","showSummary","hasCustomSearch","isNil","TreeSearch","TreeSelectAll","TreeSummary","typeCounter","TypeCounter","TreeOptions","TreeRoot"],"mappings":"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"}
1
+ {"version":3,"file":"Tree.js","sources":["../../../src/components/assetTree/Tree.tsx"],"sourcesContent":["/* eslint-disable no-use-before-define */\nimport React, { useCallback, useEffect, useReducer, useRef } from 'react';\nimport {\n cond,\n filter,\n isEmpty,\n noop,\n omit,\n size,\n stubTrue as otherwise,\n flow,\n map,\n find,\n without,\n} from 'es-toolkit/compat';\nimport { isEqual, isNil } from 'es-toolkit/predicate';\n\nimport classNames from '../../utils/classNames';\nimport TreeSearch from './TreeSearch';\nimport TreeSelectAll from './TreeSelectAll';\nimport TreeSummary, { type AssetType } from './TreeSummary';\nimport TreeNodeContainer from './TreeNodeContainer';\nimport TreeNode from './TreeNode';\nimport TreeLeafList from './TreeLeafList';\nimport TreeNothingFound from './TreeNothingFound';\nimport TreeOptions from './TreeOptions';\nimport TreeRoot from './TreeRoot';\nimport TypeCounter from './TypeCounter';\nimport {\n containsItemById,\n debounceFn,\n filterAssetByType,\n filterEmptyGroups,\n filterOutByItemId,\n getTypeCounts,\n getFlatItems,\n getListIds,\n notEmpty,\n notEqual,\n excludeFromList,\n getMappedItemsToGroups,\n sortGroupItemsByName,\n sortGroupsByName,\n addOrRemoveFromList,\n} from './treeUtils';\nimport {\n treeReducer,\n assetCounted,\n allCheckedChanged,\n visibleTypeCountersChanged,\n searchValueChanged,\n flatItemsChanged,\n emptyGroupsChanged,\n groupedItemsChanged,\n typeFilterChanged,\n type State,\n} from './treeReducer';\nimport { useTreeVirtualization } from './useTreeVirtualization';\nimport { useTreeExpansion } from './useTreeExpansion';\nimport { useTreeHeight } from './useTreeHeight';\nimport { useTreeScrollPosition } from './useTreeScrollPosition';\nimport SmoothScrollbars from '../../SmoothScrollbars';\n\nexport { getTypeCounts, getSubTypeCounts } from './treeUtils';\n\nexport type TreeItemName = {\n firstName?: string;\n lastName: string;\n};\n\nexport type TreeGroup = {\n /**\n * A unique identifier of a group.\n */\n id: string;\n\n /**\n * The name of a group.\n */\n name: string | React.ReactNode;\n\n /**\n * Can be set to \"last\" to enforce the last position in the tree.\n */\n position?: 'last';\n\n /**\n * Disallows the selection of the group itself.\n */\n disabled?: boolean;\n\n /**\n * The rioglyph icon name for a group.\n *\n * The prefix `rioglyph-` can be omitted.\n *\n * For custom icons and logos, provide an image URL with one of these extensions:\n * `.png`, `.webp`, `.jpg`, `.jpeg`, `.svg`.\n * In this case, an img tag is rendered instead of the rioglyph.\n */\n icon?: string;\n\n /**\n * The rioglyph icon name for a expanded group.\n *\n * The prefix `rioglyph-` can be omitted.\n *\n * For custom icons and logos, provide an image URL with one of these extensions:\n * `.png`, `.webp`, `.jpg`, `.jpeg`, `.svg`.\n * In this case, an img tag is rendered instead of the rioglyph.\n */\n expandedIcon?: string;\n\n /**\n * Additional classes added to the group element.\n */\n className?: string;\n};\n\nexport type TreeItem = {\n /**\n * A unique identifier of an item.\n */\n id: string;\n\n /**\n * The name of an item. Either it is a plain string or an object composed of:\n * `firstName` and `lastName` where __lastName__ is mandatory.\n */\n name: string | TreeItemName;\n\n /**\n * The subline of an item. This can e used to show additional information for that item.\n */\n info?: string | React.ReactNode;\n\n /**\n * The primary type of the item.\n *\n * This is also used as the fallback icon name and refers to the name of the respective\n * rioglyph icon (excluding the `rioglyph-` prefix).\n */\n type: string;\n\n /**\n * Optional icon override for the item.\n *\n * - If set to a string (e.g. `'truck'`), this icon will be used explicitly.\n * - If set to `undefined`, the `type` property will be used as the fallback icon.\n * - If set to `null`, no icon will be rendered, even if `type` is defined.\n *\n * This allows full control over the icon behavior while maintaining backward compatibility with type-based icons.\n *\n * For custom icons and logos, provide an image URL with one of these extensions:\n * `.png`, `.webp`, `.jpg`, `.jpeg`, `.svg`.\n * In this case, an img tag is rendered instead of the rioglyph.\n */\n icon?: string | null;\n\n /**\n * Optional sub-type of the item.\n *\n * This refers to the name of an additional rioglyph icon (excluding the `rioglyph-` prefix),\n * typically used to render a secondary icon next to the primary one (Note: for fuel types better use the pairIcon prop).\n */\n subType?: string;\n\n /**\n * Optional pair icon override for the subType.\n *\n * - If set to a string (e.g. `'fuel-gas'`), this icon will be used explicitly.\n * - If set to `undefined`, the `subType` property will be used as the fallback icon.\n * - If set to `null`, no icon will be rendered, even if `subType` is defined.\n *\n * This allows full control over the icon behavior while maintaining backward compatibility with subType-based icons.\n */\n pairIcon?: string | null | undefined;\n\n /**\n * List of group ids the items is associated with.\n *\n * @default []\n */\n groupIds?: string[];\n\n /**\n * Additional classes added to the item element.\n */\n className?: string;\n};\n\nexport type GroupedItem = TreeGroup & {\n items: TreeItem[];\n};\n\nexport type GroupedItems = {\n [key: string]: GroupedItem;\n};\n\nexport type SelectionChangeResponse = { items: string[]; groups: string[] };\n\nexport type TreeProps = {\n /**\n * The list of groups of the items. If no groups are provided all items\n * are rendered as flat list.\n *\n * @default []\n */\n groups?: TreeGroup[];\n\n /**\n * The list of items.\n *\n * @default []\n */\n items?: TreeItem[];\n\n /**\n * List of selected group ids.\n *\n * @default []\n */\n selectedGroups?: string[];\n\n /**\n * List of selected item ids.\n *\n * @default []\n */\n selectedItems?: string[];\n\n /**\n * Merged Callback for item and group selection changes.\n * It responds with a selection object that contains the selected itemIds and groupIds:\n * `{ items: [], groups: [] }`\n * @returns\n */\n onSelectionChange?: ({ items, groups }: SelectionChangeResponse) => void;\n\n /**\n * Defines the selection behavior of the tree.\n *\n * @default true\n */\n hasMultiselect?: boolean;\n\n /**\n * Defines if the single selection should also show radios.\n *\n * @default false\n */\n showRadioButtons?: boolean;\n\n /**\n * Defines whether or not the built-in Search is shown.\n *\n * @default false\n */\n hideSearch?: boolean;\n\n /**\n * The text used as placeholder for the search input.\n */\n searchPlaceholder?: string;\n\n /**\n * Callback for when the search value changes.\n * @param value\n * @returns\n */\n onSearchChange?: (value: string) => void;\n\n /**\n * Used to define custom search component which replaces the built-in search.\n */\n search?: React.ReactNode;\n\n /**\n * Used to define custom asset type counter component which replaces the built-in summary.\n */\n summary?: React.ReactNode;\n\n /**\n * Defines whether a summary is shown.\n *\n * @default false\n */\n hideSummary?: boolean;\n\n /**\n * Callback triggered when the built-in asset type filter changes.\n * This is only available when the default summary is used.\n *\n * @param type\n * @returns\n */\n onTypeFilterChange?: (currentTypes: string[]) => void;\n\n /**\n * Defines whether the entire area below the search field is shown or not. Note: Disabling the\n * tree head will hide the select all checkbox and the tree options as well as the tree summary.\n *\n * @default false\n */\n hideTreeHead?: boolean;\n\n /**\n * Additional custom content that is rendered at the top of the tree component. This can be used for nav pills.\n */\n treeHeaderContent?: React.ReactElement;\n\n /**\n * Defines the max-height of the scrollable list.\n */\n scrollHeight?: number;\n\n /**\n * List of group ids which are expanded.\n */\n expandedGroups?: string[];\n\n /**\n * Callback function triggered when a group expands or collapses.\n * @param newExpandedGroups\n * @returns\n */\n onExpandGroupsChange?: (newExpandedGroups: string[]) => void;\n\n /**\n * Defines whether empty groups are shown or not.\n *\n * @default true\n */\n showEmptyGroups?: boolean;\n\n /**\n * Component to offer customization options for the tree.\n */\n treeOptions?: React.ReactNode[];\n\n /**\n * Tooltip content for the tree options dropdown.\n */\n treeOptionsTooltip?: React.ReactNode;\n\n /**\n * Disables animation when filtering or using search\n *\n * @default false\n */\n disableAnimation?: boolean;\n\n /**\n * The number of items (including groups and children) used for virtualizing the tree.\n *\n * @default 50\n */\n virtualizeThreshold?: number;\n\n /**\n * The number of items rendered beyond the visible area of a virtualized tree.\n *\n * @default 5\n */\n overscan?: number;\n\n /**\n * Additional classes added to the wrapping element.\n */\n className?: string;\n};\n\nconst filterProps = (props: TreeProps) =>\n omit(props, ['expandedGroups', 'onExpandGroupsChange', 'onSearchChange', 'onSelectionChange', 'treeOptions']);\n\nconst customCompare = (prevProps: TreeProps, nextProps: TreeProps) =>\n isEqual(filterProps(prevProps), filterProps(nextProps));\n\nconst VIRTUALIZED_THRESHOLD = 50;\nconst DEFAULT_VIRTUALIZED_OVERSCAN = 5;\n\nconst Tree = React.memo((props: TreeProps) => {\n const {\n groups = [],\n items = [],\n selectedGroups = [],\n selectedItems = [],\n onSelectionChange = noop,\n hasMultiselect = true,\n showRadioButtons = false,\n hideSearch = false,\n hideTreeHead,\n treeHeaderContent,\n summary,\n hideSummary = false,\n search,\n searchPlaceholder = 'Type here to filter by name',\n onSearchChange = noop,\n className,\n scrollHeight,\n expandedGroups,\n onExpandGroupsChange = noop,\n showEmptyGroups = true,\n treeOptions = [],\n treeOptionsTooltip,\n disableAnimation = false,\n onTypeFilterChange = noop,\n virtualizeThreshold = VIRTUALIZED_THRESHOLD,\n overscan = DEFAULT_VIRTUALIZED_OVERSCAN,\n ...remainingProps\n } = props;\n\n const [state, dispatch] = useReducer(treeReducer, {\n groupedItems: {},\n flatItems: [],\n allChecked: false,\n searchValue: '',\n assetCounts: {},\n typeFilter: [],\n visibleTypeCounters: [],\n emptyGroups: [],\n } as State);\n\n const treeRef = useRef<HTMLDivElement>(null);\n\n const previousItems = useRef<TreeItem[]>();\n const previousGroups = useRef<TreeGroup[]>();\n const previousSearchValue = useRef('');\n\n const { internalExpandedGroups, handleToggleNode } = useTreeExpansion(\n props.expandedGroups,\n props.onExpandGroupsChange\n );\n\n const hasGroups = () => groups && notEmpty(groups);\n const hasInternalSearchValue = () => notEmpty(state.searchValue);\n const hasSearchAndGroups = () => hasInternalSearchValue() && hasGroups();\n const hasNoSearchAndGroups = () => !hasInternalSearchValue() && hasGroups();\n\n const scrollElementRef = useRef<HTMLDivElement>(null);\n\n const { virtualizedItems, virtualizer } = useTreeVirtualization(\n state.groupedItems,\n state.flatItems,\n hasInternalSearchValue(),\n hasGroups(),\n internalExpandedGroups,\n scrollElementRef,\n overscan\n );\n\n const { scrollToTop } = useTreeScrollPosition(virtualizer, scrollElementRef);\n\n // Enhance the handleToggleNode function\n const enhancedHandleToggleNode = useCallback(\n (nodeId: string) => {\n // Execute the original toggle logic\n handleToggleNode(nodeId);\n },\n [handleToggleNode]\n );\n\n // Create a callback for scroll events that works with the virtualizer\n const handleVirtualizedScroll = useCallback(\n (event: React.UIEvent<unknown> | undefined) => {\n if (virtualizer && event?.target) {\n const scrollElement = event.target as HTMLElement;\n virtualizer.scrollToOffset(scrollElement.scrollTop, { align: 'start' });\n }\n },\n [virtualizer]\n );\n\n useEffect(() => {\n // Update Tree when items or groups have changed\n if (notEqual(previousItems.current, items) || notEqual(previousGroups.current, groups)) {\n previousItems.current = items;\n previousGroups.current = groups;\n\n const typeCounts = getTypeCounts(items);\n\n dispatch(assetCounted(typeCounts));\n\n const allChecked = checkAllSelected({ items, groups, selectedItems, selectedGroups }, state.flatItems);\n dispatch(allCheckedChanged(allChecked));\n\n // Get the distinct asset types from the asset list that is passed into the component\n // to know which asset type counter to render\n dispatch(visibleTypeCountersChanged(Object.keys(typeCounts) as AssetType[]));\n\n makeTree(groups, items);\n }\n }, [items, groups]);\n\n const debouncedMakeTree = debounceFn((losGroupos: TreeGroup[], losItems: TreeItem[]) =>\n makeTree(losGroupos, losItems)\n );\n\n useEffect(() => {\n // To prevent executing the effect on first render, use a ref to check previous render values\n if (notEqual(previousSearchValue.current, state.searchValue)) {\n debouncedMakeTree(groups, items);\n previousSearchValue.current = state.searchValue;\n }\n }, [state.searchValue]);\n\n useEffect(() => makeTree(groups, items), [state.typeFilter]);\n\n // Update tree when empty groups are toggled from outside\n useEffect(() => makeTree(groups, items), [showEmptyGroups]);\n\n // Update \"select all\" state from outside when groups are selected outside programmatically\n // without using the \"select all\" checkbox\n useEffect(() => {\n const numOfAllGroups = size(groups);\n const numOfSelectedGroups = size(selectedGroups);\n\n if (numOfSelectedGroups !== numOfAllGroups && state.allChecked) {\n dispatch(allCheckedChanged(false));\n } else if (numOfSelectedGroups !== 0 && numOfSelectedGroups === numOfAllGroups && !state.allChecked) {\n dispatch(allCheckedChanged(true));\n }\n }, [selectedGroups]);\n\n const checkAllSelected = (\n updatedProps: { items: TreeItem[]; groups: TreeGroup[]; selectedItems: string[]; selectedGroups: string[] },\n flatItems: TreeItem[]\n ) => {\n const {\n items: updatedItems,\n groups: updatedGroups,\n selectedItems: updatedSelectedItems,\n selectedGroups: updatedSelectedGroups,\n } = updatedProps;\n\n if (\n (!hasGroups() && isEmpty(updatedSelectedItems)) ||\n (hasNoSearchAndGroups() && isEmpty(updatedSelectedGroups)) ||\n (hasSearchAndGroups() && isEmpty(updatedSelectedItems))\n ) {\n return false;\n }\n\n if (hasNoSearchAndGroups()) {\n const unselectedGroups = filter(updatedGroups, filterOutByItemId(updatedSelectedGroups));\n return isEmpty(unselectedGroups);\n }\n\n if (hasSearchAndGroups()) {\n const unselectedSearchItems = filter(flatItems, filterOutByItemId(updatedSelectedItems));\n return isEmpty(unselectedSearchItems);\n }\n\n const unselectedItems = updatedItems.filter(filterOutByItemId(updatedSelectedItems));\n return isEmpty(unselectedItems);\n };\n\n const selectAllSearchResultItems = (shouldSelect: boolean) => selectAllFlatItems(shouldSelect);\n\n const handleSelectAll = (shouldSelect: boolean, isStateIndeterminate: boolean) => {\n const shouldSelectAll = shouldSelect && !isStateIndeterminate;\n dispatch(allCheckedChanged(shouldSelectAll));\n\n cond([\n [hasNoSearchAndGroups, () => selectAllGroups(shouldSelectAll)],\n [hasSearchAndGroups, () => selectAllSearchResultItems(shouldSelectAll)],\n [otherwise, () => selectAllFlatItems(shouldSelectAll)],\n ])();\n };\n\n const selectAllGroups = (shouldSelect: boolean) => respondSelection([], shouldSelect ? getListIds(groups) : []);\n\n const selectAllFlatItems = (shouldSelect: boolean) =>\n respondSelection(shouldSelect ? getListIds(state.flatItems) : [], []);\n\n const respondSelection = (updatedSelectedItemIds: string[], updatedSelectedGroupIds: string[]) => {\n onSelectionChange({\n items: updatedSelectedItemIds,\n groups: updatedSelectedGroupIds,\n });\n };\n\n const handleGroupSelection = (group: TreeGroup, isStateIndeterminate: boolean) => {\n const groupId = group.id;\n\n const isSelected = selectedGroups.includes(groupId);\n const shouldSelectGroup = !isSelected && !isStateIndeterminate;\n\n // handle group selection\n const newSelectedGroups = shouldSelectGroup\n ? [...selectedGroups, groupId]\n : excludeFromList(selectedGroups, groupId);\n\n // deselect all items of a node since they will be selected inherently via the group itself\n const itemsInGroup = find(state.groupedItems, (entry: GroupedItem) => entry.id === groupId);\n const itemIdsOfGroup = map(itemsInGroup?.items, (item: TreeItem) => item.id);\n const updatedSelectedItems = without(selectedItems, ...itemIdsOfGroup);\n\n // check if all groups are selected to change the state of TreeSelectAll\n const groupAmount = groups.length;\n const emptyGroupAmount = showEmptyGroups ? 0 : state.emptyGroups.length;\n const totalGroupAmount = groupAmount - emptyGroupAmount;\n const areAllGroupsChecked = totalGroupAmount === newSelectedGroups.length;\n dispatch(allCheckedChanged(areAllGroupsChecked));\n\n respondSelection(updatedSelectedItems, newSelectedGroups);\n };\n\n const handleSearchChange = (updatedSearchValue: string) => {\n onSearchChange(updatedSearchValue);\n dispatch(searchValueChanged(updatedSearchValue));\n\n if (virtualizer) {\n // Every time search changes or is cleared, scroll to the top\n setTimeout(() => {\n scrollToTop();\n }, 10);\n }\n };\n\n const setFlatItemList = (updatedItems: TreeItem[], searchValue: string) => {\n const flatItems = getFlatItems(updatedItems, searchValue);\n dispatch(flatItemsChanged(flatItems));\n };\n\n const setGroupedItemList = (\n groupsToProcess: TreeGroup[],\n itemsToProcess: TreeItem[],\n considerEmptyGroups: boolean\n ) => {\n // Map items to groups with filtered items\n const mappedItemsToGroups = getMappedItemsToGroups(groupsToProcess, itemsToProcess);\n const newGroupedItems = flow(sortGroupsByName, sortGroupItemsByName)(mappedItemsToGroups);\n const groupedItems = considerEmptyGroups ? newGroupedItems : filterEmptyGroups(newGroupedItems);\n\n // Keep the empty groups in memory for later access in select all, without re-iterating on every\n // group selection\n const emptyGroups = filter(newGroupedItems, (group: GroupedItem) => isEmpty(group.items));\n\n dispatch(emptyGroupsChanged(emptyGroups));\n dispatch(assetCounted(getTypeCounts(items)));\n dispatch(groupedItemsChanged(groupedItems));\n\n // Update expanded groups again\n };\n\n const makeTree = (updatedGroups: TreeGroup[], updatedItems: TreeItem[]) => {\n const internalSearchValue = state.searchValue;\n const internalTypeFilter = state.typeFilter;\n\n const groupsToProcess = updatedGroups;\n const itemsToProcess = updatedItems;\n\n const hasGroupList = (groupList: TreeGroup[]) => groupList && notEmpty(groupList);\n\n const hasNoInternalSearchAndGroups = () => isEmpty(internalSearchValue) && hasGroupList(groupsToProcess);\n const hasInternalSearchAndGroups = () => notEmpty(internalSearchValue) && hasGroupList(groupsToProcess);\n\n const filteredItems = isEmpty(internalTypeFilter)\n ? itemsToProcess\n : filterAssetByType(itemsToProcess, internalTypeFilter);\n\n const setGroupedItems = () => setGroupedItemList(groupsToProcess, filteredItems, showEmptyGroups);\n\n const setFlatItems = () => setFlatItemList(filteredItems, internalSearchValue);\n\n cond([\n [hasNoInternalSearchAndGroups, setGroupedItems],\n [hasInternalSearchAndGroups, setFlatItems],\n [otherwise, setFlatItems],\n ])();\n };\n\n const containerHeight = useTreeHeight(treeRef, scrollHeight);\n\n const renderVirtualizedTree = () => {\n const items = virtualizer.getVirtualItems();\n const isGroupedList = hasGroups() && !hasInternalSearchValue();\n\n return (\n <SmoothScrollbars\n ref={scrollElementRef}\n className='tree-virtual-scrollbar'\n onScroll={handleVirtualizedScroll}\n autoHeight={false}\n slideIn\n style={{\n height: `${containerHeight}px`,\n }}\n >\n <div\n className={isGroupedList ? 'grouped-list' : 'flat-list'}\n style={{\n height: `${virtualizer.getTotalSize()}px`,\n position: 'relative',\n }}\n >\n {items.map(virtualItem => {\n const item = virtualizedItems[virtualItem.index];\n\n if (!item) {\n return null;\n }\n\n const isGroupSelected =\n selectedGroups.includes(item.id) ||\n (item.type === 'leaf' && selectedGroups.includes(item.groupId));\n\n return (\n <div\n key={`${item.type}-${item.id}-${virtualItem.index}`}\n data-index={virtualItem.index}\n ref={virtualizer.measureElement}\n className={`virtualized-tree-item ${item.type === 'group' ? 'group-item' : 'leaf-item'} ${isGroupSelected ? 'checked' : ''}`}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: `${virtualItem.size}px`,\n transform: `translateY(${virtualItem.start}px)`,\n }}\n >\n {item.type === 'group' ? (\n <TreeNodeContainer\n key={item.id}\n groupId={item.id}\n isOpen={item.isExpanded}\n disableAnimation={disableAnimation}\n >\n <TreeNode\n node={item.data}\n hasMultiselect={hasMultiselect}\n onToggleNode={enhancedHandleToggleNode}\n onSelect={handleGroupSelection}\n isSelected={isGroupSelected}\n isOpen={item.isExpanded}\n isIndeterminate={\n !isGroupSelected &&\n item.data.items.some(groupItem => selectedItems.includes(groupItem.id))\n }\n />\n </TreeNodeContainer>\n ) : (\n // Render individual leaf item with proper styling\n <TreeNodeContainer key={item.id} isOpen disableAnimation={disableAnimation}>\n <TreeLeafList\n leafList={[item.data]}\n hasMultiselect={hasMultiselect}\n showRadioButtons={showRadioButtons}\n selectedItems={selectedItems}\n selectedGroups={selectedGroups}\n onSelectionChange={respondSelection}\n />\n </TreeNodeContainer>\n )}\n </div>\n );\n })}\n </div>\n </SmoothScrollbars>\n );\n };\n\n const renderTree = () => {\n const { groupedItems } = state;\n\n if (isEmpty(groupedItems)) {\n return <TreeNothingFound />;\n }\n\n if (virtualizedItems.length > virtualizeThreshold) {\n return renderVirtualizedTree();\n }\n\n const result = map(groupedItems, (group: GroupedItem) => {\n const groupId = group.id;\n const groupItems = group.items;\n\n const isOpen = internalExpandedGroups?.includes(groupId) ?? false;\n\n const numSelectedGroupItems = filter(groupItems, containsItemById(selectedItems)).length;\n\n const isGroupSelected = selectedGroups.includes(groupId);\n const isStateIndeterminate = !isGroupSelected && numSelectedGroupItems > 0;\n\n return (\n <TreeNodeContainer key={groupId} groupId={groupId} isOpen={isOpen} disableAnimation={disableAnimation}>\n <TreeNode\n node={group}\n hasMultiselect={hasMultiselect}\n onToggleNode={handleToggleNode}\n onSelect={handleGroupSelection}\n isSelected={isGroupSelected}\n isIndeterminate={isStateIndeterminate}\n isOpen={isOpen}\n />\n {isOpen && (\n <TreeLeafList\n leafList={groupItems}\n hasMultiselect={hasMultiselect}\n showRadioButtons={showRadioButtons}\n selectedItems={selectedItems}\n selectedGroups={selectedGroups}\n onSelectionChange={respondSelection}\n />\n )}\n </TreeNodeContainer>\n );\n });\n\n return result;\n };\n\n const renderFlatList = () => {\n const { flatItems } = state;\n const hasLeafs = isEmpty(flatItems);\n\n if (virtualizedItems.length > virtualizeThreshold) {\n return renderVirtualizedTree();\n }\n\n const getLeafs = () => (\n <TreeLeafList\n leafList={flatItems}\n hasMultiselect={hasMultiselect}\n showRadioButtons={showRadioButtons}\n selectedItems={selectedItems}\n selectedGroups={selectedGroups}\n onSelectionChange={respondSelection}\n />\n );\n\n return (\n <TreeNodeContainer disableAnimation={disableAnimation} isOpen>\n {hasLeafs ? <TreeNothingFound /> : getLeafs()}\n </TreeNodeContainer>\n );\n };\n\n const hasExternalGroups = notEmpty(groups);\n\n const hasSelectedAllItems = () => isEqual(size(selectedItems), size(state.flatItems));\n\n const hasPartiallySelectedItems = () => notEmpty(selectedItems) && !hasSelectedAllItems();\n\n const hasSelectedAllGroups = () => {\n const emptyGroupAmount = showEmptyGroups ? 0 : state.emptyGroups.length;\n return isEqual(size(selectedGroups), size(groups) - emptyGroupAmount);\n };\n\n const hasPartiallySelectedGroups = () => hasExternalGroups && notEmpty(selectedGroups) && !hasSelectedAllGroups();\n\n const hasSearchAndNoItems = hasInternalSearchValue() && isEmpty(state.flatItems);\n const hasSearchAndNoGroups = hasInternalSearchValue() && isEmpty(state.groupedItems) && hasExternalGroups;\n const hideSelectAll = hasSearchAndNoItems || hasSearchAndNoGroups;\n\n const isIndeterminate = hasPartiallySelectedGroups() || hasPartiallySelectedItems();\n\n const treeClassNames = classNames('Tree', className);\n\n const treeHeadClasses = classNames('TreeHead', 'display-flex gap-5', 'padding-15');\n\n const shouldRenderTree = () => hasGroups() && !hasInternalSearchValue();\n\n const content = cond([\n [shouldRenderTree, () => renderTree()],\n [otherwise, () => renderFlatList()],\n ])();\n\n const handleFilterByType = (type: string) => {\n const updatedTypeFilter = addOrRemoveFromList(state.typeFilter, type);\n dispatch(typeFilterChanged(updatedTypeFilter));\n onTypeFilterChange(updatedTypeFilter);\n };\n\n const enableActivity = size(state.visibleTypeCounters) !== 1;\n const isFilterActive = notEmpty(state.typeFilter);\n\n const showTreeHead = !hideTreeHead;\n const showSelectAll = !hideSelectAll;\n const showSearch = !hideSearch;\n const showSummary = !hideSummary;\n\n const hasCustomSearch = !isNil(search);\n\n return (\n <div {...remainingProps} className={treeClassNames} ref={treeRef}>\n <div className='TreeHeader'>\n {treeHeaderContent}\n {showSearch && !hasCustomSearch && (\n <TreeSearch\n value={state.searchValue}\n onChange={handleSearchChange}\n placeholder={searchPlaceholder}\n />\n )}\n {hasCustomSearch && search}\n {showTreeHead && (\n <div className={treeHeadClasses}>\n {showSelectAll && (\n <div className='border border-right-only hidden-empty padding-right-10 margin-right-2'>\n <TreeSelectAll\n isChecked={state.allChecked}\n isEnabled={hasMultiselect}\n isIndeterminate={isIndeterminate}\n onSelect={handleSelectAll}\n />\n </div>\n )}\n <div className='display-flex justify-content-between align-items-start width-100pct'>\n {showSummary\n ? summary || (\n <TreeSummary>\n {map(state.visibleTypeCounters, (typeCounter: AssetType) => (\n <TypeCounter\n key={typeCounter}\n type={typeCounter}\n icon={`${typeCounter}`}\n value={state.assetCounts[typeCounter]}\n onClick={handleFilterByType}\n isActive={state.typeFilter.includes(typeCounter)}\n hasFilter={isFilterActive}\n enableActivity={enableActivity}\n />\n ))}\n </TreeSummary>\n )\n : null}\n </div>\n <TreeOptions treeOptions={treeOptions} treeOptionsTooltip={treeOptionsTooltip} />\n </div>\n )}\n </div>\n <TreeRoot maxHeight={scrollHeight} disableAnimation={disableAnimation}>\n {content}\n </TreeRoot>\n </div>\n );\n}, customCompare);\n\nexport default Tree;\n"],"names":["filterProps","props","omit","customCompare","prevProps","nextProps","isEqual","VIRTUALIZED_THRESHOLD","DEFAULT_VIRTUALIZED_OVERSCAN","Tree","React","groups","items","selectedGroups","selectedItems","onSelectionChange","noop","hasMultiselect","showRadioButtons","hideSearch","hideTreeHead","treeHeaderContent","summary","hideSummary","search","searchPlaceholder","onSearchChange","className","scrollHeight","expandedGroups","onExpandGroupsChange","showEmptyGroups","treeOptions","treeOptionsTooltip","disableAnimation","onTypeFilterChange","virtualizeThreshold","overscan","remainingProps","state","dispatch","useReducer","treeReducer","treeRef","useRef","previousItems","previousGroups","previousSearchValue","internalExpandedGroups","handleToggleNode","useTreeExpansion","hasGroups","notEmpty","hasInternalSearchValue","hasSearchAndGroups","hasNoSearchAndGroups","scrollElementRef","virtualizedItems","virtualizer","useTreeVirtualization","scrollToTop","useTreeScrollPosition","enhancedHandleToggleNode","useCallback","nodeId","handleVirtualizedScroll","event","scrollElement","useEffect","notEqual","typeCounts","getTypeCounts","assetCounted","allChecked","checkAllSelected","allCheckedChanged","visibleTypeCountersChanged","makeTree","debouncedMakeTree","debounceFn","losGroupos","losItems","numOfAllGroups","size","numOfSelectedGroups","updatedProps","flatItems","updatedItems","updatedGroups","updatedSelectedItems","updatedSelectedGroups","isEmpty","unselectedGroups","filter","filterOutByItemId","unselectedSearchItems","unselectedItems","selectAllSearchResultItems","shouldSelect","selectAllFlatItems","handleSelectAll","isStateIndeterminate","shouldSelectAll","cond","selectAllGroups","otherwise","respondSelection","getListIds","updatedSelectedItemIds","updatedSelectedGroupIds","handleGroupSelection","group","groupId","newSelectedGroups","excludeFromList","itemsInGroup","find","entry","itemIdsOfGroup","map","item","without","groupAmount","emptyGroupAmount","areAllGroupsChecked","handleSearchChange","updatedSearchValue","searchValueChanged","setFlatItemList","searchValue","getFlatItems","flatItemsChanged","setGroupedItemList","groupsToProcess","itemsToProcess","considerEmptyGroups","mappedItemsToGroups","getMappedItemsToGroups","newGroupedItems","flow","sortGroupsByName","sortGroupItemsByName","groupedItems","filterEmptyGroups","emptyGroups","emptyGroupsChanged","groupedItemsChanged","internalSearchValue","internalTypeFilter","hasGroupList","groupList","hasNoInternalSearchAndGroups","hasInternalSearchAndGroups","filteredItems","filterAssetByType","setGroupedItems","setFlatItems","containerHeight","useTreeHeight","renderVirtualizedTree","isGroupedList","jsx","SmoothScrollbars","virtualItem","isGroupSelected","TreeNodeContainer","TreeNode","groupItem","TreeLeafList","renderTree","TreeNothingFound","groupItems","isOpen","numSelectedGroupItems","containsItemById","jsxs","renderFlatList","hasLeafs","hasExternalGroups","hasSelectedAllItems","hasPartiallySelectedItems","hasSelectedAllGroups","hasPartiallySelectedGroups","hasSearchAndNoItems","hasSearchAndNoGroups","hideSelectAll","isIndeterminate","treeClassNames","classNames","treeHeadClasses","content","handleFilterByType","type","updatedTypeFilter","addOrRemoveFromList","typeFilterChanged","enableActivity","isFilterActive","showTreeHead","showSelectAll","showSearch","showSummary","hasCustomSearch","isNil","TreeSearch","TreeSelectAll","TreeSummary","typeCounter","TypeCounter","TreeOptions","TreeRoot"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAoXA,MAAMA,KAAc,CAACC,MACjBC,GAAKD,GAAO,CAAC,kBAAkB,wBAAwB,kBAAkB,qBAAqB,aAAa,CAAC,GAE1GE,KAAgB,CAACC,GAAsBC,MACzCC,EAAQN,GAAYI,CAAS,GAAGJ,GAAYK,CAAS,CAAC,GAEpDE,KAAwB,IACxBC,KAA+B,GAE/BC,KAAOC,GAAM,KAAK,CAACT,MAAqB;AAC1C,QAAM;AAAA,IACF,QAAAU,IAAS,CAAA;AAAA,IACT,OAAAC,IAAQ,CAAA;AAAA,IACR,gBAAAC,IAAiB,CAAA;AAAA,IACjB,eAAAC,IAAgB,CAAA;AAAA,IAChB,mBAAAC,KAAoBC;AAAA,IACpB,gBAAAC,IAAiB;AAAA,IACjB,kBAAAC,IAAmB;AAAA,IACnB,YAAAC,KAAa;AAAA,IACb,cAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,SAAAC;AAAA,IACA,aAAAC,KAAc;AAAA,IACd,QAAAC;AAAA,IACA,mBAAAC,KAAoB;AAAA,IACpB,gBAAAC,KAAiBV;AAAA,IACjB,WAAAW;AAAA,IACA,cAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,sBAAAC,KAAuBd;AAAA,IACvB,iBAAAe,IAAkB;AAAA,IAClB,aAAAC,KAAc,CAAA;AAAA,IACd,oBAAAC;AAAA,IACA,kBAAAC,IAAmB;AAAA,IACnB,oBAAAC,KAAqBnB;AAAA,IACrB,qBAAAoB,KAAsB7B;AAAA,IACtB,UAAA8B,KAAW7B;AAAA,IACX,GAAG8B;AAAA,EAAA,IACHrC,GAEE,CAACsC,GAAOC,CAAQ,IAAIC,GAAWC,IAAa;AAAA,IAC9C,cAAc,CAAA;AAAA,IACd,WAAW,CAAA;AAAA,IACX,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa,CAAA;AAAA,IACb,YAAY,CAAA;AAAA,IACZ,qBAAqB,CAAA;AAAA,IACrB,aAAa,CAAA;AAAA,EAAC,CACR,GAEJC,KAAUC,EAAuB,IAAI,GAErCC,KAAgBD,EAAA,GAChBE,KAAiBF,EAAA,GACjBG,KAAsBH,EAAO,EAAE,GAE/B,EAAE,wBAAAI,IAAwB,kBAAAC,EAAA,IAAqBC;AAAA,IACjDjD,EAAM;AAAA,IACNA,EAAM;AAAA,EAAA,GAGJkD,IAAY,MAAMxC,KAAUyC,EAASzC,CAAM,GAC3C0C,IAAyB,MAAMD,EAASb,EAAM,WAAW,GACzDe,IAAqB,MAAMD,EAAA,KAA4BF,EAAA,GACvDI,IAAuB,MAAM,CAACF,EAAA,KAA4BF,EAAA,GAE1DK,IAAmBZ,EAAuB,IAAI,GAE9C,EAAE,kBAAAa,GAAkB,aAAAC,EAAA,IAAgBC;AAAA,IACtCpB,EAAM;AAAA,IACNA,EAAM;AAAA,IACNc,EAAA;AAAA,IACAF,EAAA;AAAA,IACAH;AAAA,IACAQ;AAAA,IACAnB;AAAA,EAAA,GAGE,EAAE,aAAAuB,GAAA,IAAgBC,GAAsBH,GAAaF,CAAgB,GAGrEM,KAA2BC;AAAA,IAC7B,CAACC,MAAmB;AAEhB,MAAAf,EAAiBe,CAAM;AAAA,IAC3B;AAAA,IACA,CAACf,CAAgB;AAAA,EAAA,GAIfgB,KAA0BF;AAAA,IAC5B,CAACG,MAA8C;AAC3C,UAAIR,KAAeQ,GAAO,QAAQ;AAC9B,cAAMC,IAAgBD,EAAM;AAC5B,QAAAR,EAAY,eAAeS,EAAc,WAAW,EAAE,OAAO,SAAS;AAAA,MAC1E;AAAA,IACJ;AAAA,IACA,CAACT,CAAW;AAAA,EAAA;AAGhB,EAAAU,EAAU,MAAM;AAEZ,QAAIC,EAASxB,GAAc,SAASjC,CAAK,KAAKyD,EAASvB,GAAe,SAASnC,CAAM,GAAG;AACpF,MAAAkC,GAAc,UAAUjC,GACxBkC,GAAe,UAAUnC;AAEzB,YAAM2D,IAAaC,GAAc3D,CAAK;AAEtC,MAAA4B,EAASgC,GAAaF,CAAU,CAAC;AAEjC,YAAMG,IAAaC,GAAiB,EAAE,OAAA9D,GAAO,QAAAD,GAAQ,eAAAG,GAAe,gBAAAD,EAAA,GAAkB0B,EAAM,SAAS;AACrG,MAAAC,EAASmC,EAAkBF,CAAU,CAAC,GAItCjC,EAASoC,GAA2B,OAAO,KAAKN,CAAU,CAAgB,CAAC,GAE3EO,EAASlE,GAAQC,CAAK;AAAA,IAC1B;AAAA,EACJ,GAAG,CAACA,GAAOD,CAAM,CAAC;AAElB,QAAMmE,KAAoBC;AAAA,IAAW,CAACC,GAAyBC,MAC3DJ,EAASG,GAAYC,CAAQ;AAAA,EAAA;AAGjC,EAAAb,EAAU,MAAM;AAEZ,IAAIC,EAAStB,GAAoB,SAASR,EAAM,WAAW,MACvDuC,GAAkBnE,GAAQC,CAAK,GAC/BmC,GAAoB,UAAUR,EAAM;AAAA,EAE5C,GAAG,CAACA,EAAM,WAAW,CAAC,GAEtB6B,EAAU,MAAMS,EAASlE,GAAQC,CAAK,GAAG,CAAC2B,EAAM,UAAU,CAAC,GAG3D6B,EAAU,MAAMS,EAASlE,GAAQC,CAAK,GAAG,CAACmB,CAAe,CAAC,GAI1DqC,EAAU,MAAM;AACZ,UAAMc,IAAiBC,EAAKxE,CAAM,GAC5ByE,IAAsBD,EAAKtE,CAAc;AAE/C,IAAIuE,MAAwBF,KAAkB3C,EAAM,aAChDC,EAASmC,EAAkB,EAAK,CAAC,IAC1BS,MAAwB,KAAKA,MAAwBF,KAAkB,CAAC3C,EAAM,cACrFC,EAASmC,EAAkB,EAAI,CAAC;AAAA,EAExC,GAAG,CAAC9D,CAAc,CAAC;AAEnB,QAAM6D,KAAmB,CACrBW,GACAC,MACC;AACD,UAAM;AAAA,MACF,OAAOC;AAAA,MACP,QAAQC;AAAA,MACR,eAAeC;AAAA,MACf,gBAAgBC;AAAA,IAAA,IAChBL;AAEJ,QACK,CAAClC,EAAA,KAAewC,EAAQF,CAAoB,KAC5ClC,EAAA,KAA0BoC,EAAQD,CAAqB,KACvDpC,EAAA,KAAwBqC,EAAQF,CAAoB;AAErD,aAAO;AAGX,QAAIlC,KAAwB;AACxB,YAAMqC,IAAmBC,EAAOL,GAAeM,EAAkBJ,CAAqB,CAAC;AACvF,aAAOC,EAAQC,CAAgB;AAAA,IACnC;AAEA,QAAItC,KAAsB;AACtB,YAAMyC,IAAwBF,EAAOP,GAAWQ,EAAkBL,CAAoB,CAAC;AACvF,aAAOE,EAAQI,CAAqB;AAAA,IACxC;AAEA,UAAMC,IAAkBT,EAAa,OAAOO,EAAkBL,CAAoB,CAAC;AACnF,WAAOE,EAAQK,CAAe;AAAA,EAClC,GAEMC,KAA6B,CAACC,MAA0BC,GAAmBD,CAAY,GAEvFE,KAAkB,CAACF,GAAuBG,MAAkC;AAC9E,UAAMC,IAAkBJ,KAAgB,CAACG;AACzC,IAAA7D,EAASmC,EAAkB2B,CAAe,CAAC,GAE3CC,EAAK;AAAA,MACD,CAAChD,GAAsB,MAAMiD,GAAgBF,CAAe,CAAC;AAAA,MAC7D,CAAChD,GAAoB,MAAM2C,GAA2BK,CAAe,CAAC;AAAA,MACtE,CAACG,GAAW,MAAMN,GAAmBG,CAAe,CAAC;AAAA,IAAA,CACxD,EAAA;AAAA,EACL,GAEME,KAAkB,CAACN,MAA0BQ,EAAiB,CAAA,GAAIR,IAAeS,GAAWhG,CAAM,IAAI,EAAE,GAExGwF,KAAqB,CAACD,MACxBQ,EAAiBR,IAAeS,GAAWpE,EAAM,SAAS,IAAI,CAAA,GAAI,EAAE,GAElEmE,IAAmB,CAACE,GAAkCC,MAAsC;AAC9F,IAAA9F,GAAkB;AAAA,MACd,OAAO6F;AAAA,MACP,QAAQC;AAAA,IAAA,CACX;AAAA,EACL,GAEMC,KAAuB,CAACC,GAAkBV,MAAkC;AAC9E,UAAMW,IAAUD,EAAM,IAMhBE,IAHoB,CADPpG,EAAe,SAASmG,CAAO,KACT,CAACX,IAIpC,CAAC,GAAGxF,GAAgBmG,CAAO,IAC3BE,GAAgBrG,GAAgBmG,CAAO,GAGvCG,IAAeC,GAAK7E,EAAM,cAAc,CAAC8E,MAAuBA,EAAM,OAAOL,CAAO,GACpFM,IAAiBC,EAAIJ,GAAc,OAAO,CAACK,MAAmBA,EAAK,EAAE,GACrE/B,IAAuBgC,GAAQ3G,GAAe,GAAGwG,CAAc,GAG/DI,IAAc/G,EAAO,QACrBgH,IAAmB5F,IAAkB,IAAIQ,EAAM,YAAY,QAE3DqF,IADmBF,IAAcC,MACUV,EAAkB;AACnE,IAAAzE,EAASmC,EAAkBiD,CAAmB,CAAC,GAE/ClB,EAAiBjB,GAAsBwB,CAAiB;AAAA,EAC5D,GAEMY,KAAqB,CAACC,MAA+B;AACvD,IAAApG,GAAeoG,CAAkB,GACjCtF,EAASuF,GAAmBD,CAAkB,CAAC,GAE3CpE,KAEA,WAAW,MAAM;AACb,MAAAE,GAAA;AAAA,IACJ,GAAG,EAAE;AAAA,EAEb,GAEMoE,KAAkB,CAACzC,GAA0B0C,MAAwB;AACvE,UAAM3C,IAAY4C,GAAa3C,GAAc0C,CAAW;AACxD,IAAAzF,EAAS2F,GAAiB7C,CAAS,CAAC;AAAA,EACxC,GAEM8C,KAAqB,CACvBC,GACAC,GACAC,MACC;AAED,UAAMC,IAAsBC,GAAuBJ,GAAiBC,CAAc,GAC5EI,IAAkBC,GAAKC,IAAkBC,EAAoB,EAAEL,CAAmB,GAClFM,IAAeP,IAAsBG,IAAkBK,GAAkBL,CAAe,GAIxFM,IAAcnD,EAAO6C,GAAiB,CAAC3B,MAAuBpB,EAAQoB,EAAM,KAAK,CAAC;AAExF,IAAAvE,EAASyG,GAAmBD,CAAW,CAAC,GACxCxG,EAASgC,GAAaD,GAAc3D,CAAK,CAAC,CAAC,GAC3C4B,EAAS0G,GAAoBJ,CAAY,CAAC;AAAA,EAG9C,GAEMjE,IAAW,CAACW,GAA4BD,MAA6B;AACvE,UAAM4D,IAAsB5G,EAAM,aAC5B6G,IAAqB7G,EAAM,YAE3B8F,IAAkB7C,GAClB8C,IAAiB/C,GAEjB8D,IAAe,CAACC,MAA2BA,KAAalG,EAASkG,CAAS,GAE1EC,IAA+B,MAAM5D,EAAQwD,CAAmB,KAAKE,EAAahB,CAAe,GACjGmB,IAA6B,MAAMpG,EAAS+F,CAAmB,KAAKE,EAAahB,CAAe,GAEhGoB,IAAgB9D,EAAQyD,CAAkB,IAC1Cd,IACAoB,GAAkBpB,GAAgBc,CAAkB,GAEpDO,IAAkB,MAAMvB,GAAmBC,GAAiBoB,GAAe1H,CAAe,GAE1F6H,IAAe,MAAM5B,GAAgByB,GAAeN,CAAmB;AAE7E,IAAA5C,EAAK;AAAA,MACD,CAACgD,GAA8BI,CAAe;AAAA,MAC9C,CAACH,GAA4BI,CAAY;AAAA,MACzC,CAACnD,GAAWmD,CAAY;AAAA,IAAA,CAC3B,EAAA;AAAA,EACL,GAEMC,KAAkBC,GAAcnH,IAASf,EAAY,GAErDmI,KAAwB,MAAM;AAChC,UAAMnJ,IAAQ8C,EAAY,gBAAA,GACpBsG,IAAgB7G,OAAe,CAACE,EAAA;AAEtC,WACI,gBAAA4G;AAAA,MAACC;AAAA,MAAA;AAAA,QACG,KAAK1G;AAAA,QACL,WAAU;AAAA,QACV,UAAUS;AAAA,QACV,YAAY;AAAA,QACZ,SAAO;AAAA,QACP,OAAO;AAAA,UACH,QAAQ,GAAG4F,EAAe;AAAA,QAAA;AAAA,QAG9B,UAAA,gBAAAI;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,WAAWD,IAAgB,iBAAiB;AAAA,YAC5C,OAAO;AAAA,cACH,QAAQ,GAAGtG,EAAY,aAAA,CAAc;AAAA,cACrC,UAAU;AAAA,YAAA;AAAA,YAGb,UAAA9C,EAAM,IAAI,CAAAuJ,MAAe;AACtB,oBAAM3C,IAAO/D,EAAiB0G,EAAY,KAAK;AAE/C,kBAAI,CAAC3C;AACD,uBAAO;AAGX,oBAAM4C,IACFvJ,EAAe,SAAS2G,EAAK,EAAE,KAC9BA,EAAK,SAAS,UAAU3G,EAAe,SAAS2G,EAAK,OAAO;AAEjE,qBACI,gBAAAyC;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEG,cAAYE,EAAY;AAAA,kBACxB,KAAKzG,EAAY;AAAA,kBACjB,WAAW,yBAAyB8D,EAAK,SAAS,UAAU,eAAe,WAAW,IAAI4C,IAAkB,YAAY,EAAE;AAAA,kBAC1H,OAAO;AAAA,oBACH,UAAU;AAAA,oBACV,KAAK;AAAA,oBACL,MAAM;AAAA,oBACN,OAAO;AAAA,oBACP,QAAQ,GAAGD,EAAY,IAAI;AAAA,oBAC3B,WAAW,cAAcA,EAAY,KAAK;AAAA,kBAAA;AAAA,kBAG7C,UAAA3C,EAAK,SAAS,UACX,gBAAAyC;AAAA,oBAACI;AAAA,oBAAA;AAAA,sBAEG,SAAS7C,EAAK;AAAA,sBACd,QAAQA,EAAK;AAAA,sBACb,kBAAAtF;AAAA,sBAEA,UAAA,gBAAA+H;AAAA,wBAACK;AAAA,wBAAA;AAAA,0BACG,MAAM9C,EAAK;AAAA,0BACX,gBAAAvG;AAAA,0BACA,cAAc6C;AAAA,0BACd,UAAUgD;AAAA,0BACV,YAAYsD;AAAA,0BACZ,QAAQ5C,EAAK;AAAA,0BACb,iBACI,CAAC4C,KACD5C,EAAK,KAAK,MAAM,KAAK,CAAA+C,MAAazJ,EAAc,SAASyJ,EAAU,EAAE,CAAC;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBAE9E;AAAA,oBAhBK/C,EAAK;AAAA,kBAAA;AAAA;AAAA,oBAoBd,gBAAAyC,EAACI,GAAA,EAAgC,QAAM,IAAC,kBAAAnI,GACpC,UAAA,gBAAA+H;AAAA,sBAACO;AAAA,sBAAA;AAAA,wBACG,UAAU,CAAChD,EAAK,IAAI;AAAA,wBACpB,gBAAAvG;AAAA,wBACA,kBAAAC;AAAA,wBACA,eAAAJ;AAAA,wBACA,gBAAAD;AAAA,wBACA,mBAAmB6F;AAAA,sBAAA;AAAA,oBAAA,EACvB,GARoBc,EAAK,EAS7B;AAAA;AAAA,gBAAA;AAAA,gBA5CC,GAAGA,EAAK,IAAI,IAAIA,EAAK,EAAE,IAAI2C,EAAY,KAAK;AAAA,cAAA;AAAA,YAgD7D,CAAC;AAAA,UAAA;AAAA,QAAA;AAAA,MACL;AAAA,IAAA;AAAA,EAGZ,GAEMM,KAAa,MAAM;AACrB,UAAM,EAAE,cAAA3B,MAAiBvG;AAEzB,WAAIoD,EAAQmD,CAAY,sBACZ4B,IAAA,EAAiB,IAGzBjH,EAAiB,SAASrB,KACnB2H,GAAA,IAGIxC,EAAIuB,GAAc,CAAC/B,MAAuB;AACrD,YAAMC,IAAUD,EAAM,IAChB4D,IAAa5D,EAAM,OAEnB6D,IAAS5H,IAAwB,SAASgE,CAAO,KAAK,IAEtD6D,IAAwBhF,EAAO8E,GAAYG,GAAiBhK,CAAa,CAAC,EAAE,QAE5EsJ,IAAkBvJ,EAAe,SAASmG,CAAO,GACjDX,IAAuB,CAAC+D,KAAmBS,IAAwB;AAEzE,aACI,gBAAAE,EAACV,GAAA,EAAgC,SAAArD,GAAkB,QAAA4D,GAAgB,kBAAA1I,GAC/D,UAAA;AAAA,QAAA,gBAAA+H;AAAA,UAACK;AAAA,UAAA;AAAA,YACG,MAAMvD;AAAA,YACN,gBAAA9F;AAAA,YACA,cAAcgC;AAAA,YACd,UAAU6D;AAAA,YACV,YAAYsD;AAAA,YACZ,iBAAiB/D;AAAA,YACjB,QAAAuE;AAAA,UAAA;AAAA,QAAA;AAAA,QAEHA,KACG,gBAAAX;AAAA,UAACO;AAAA,UAAA;AAAA,YACG,UAAUG;AAAA,YACV,gBAAA1J;AAAA,YACA,kBAAAC;AAAA,YACA,eAAAJ;AAAA,YACA,gBAAAD;AAAA,YACA,mBAAmB6F;AAAA,UAAA;AAAA,QAAA;AAAA,MACvB,EAAA,GAlBgBM,CAoBxB;AAAA,IAER,CAAC;AAAA,EAGL,GAEMgE,KAAiB,MAAM;AACzB,UAAM,EAAE,WAAA1F,MAAc/C,GAChB0I,IAAWtF,EAAQL,CAAS;AAElC,WAAI7B,EAAiB,SAASrB,KACnB2H,GAAA,IAeP,gBAAAE,EAACI,GAAA,EAAkB,kBAAAnI,GAAoC,QAAM,IACxD,cAAW,gBAAA+H,EAACS,IAAA,CAAA,CAAiB,IAZlC,gBAAAT;AAAA,MAACO;AAAA,MAAA;AAAA,QACG,UAAUlF;AAAA,QACV,gBAAArE;AAAA,QACA,kBAAAC;AAAA,QACA,eAAAJ;AAAA,QACA,gBAAAD;AAAA,QACA,mBAAmB6F;AAAA,MAAA;AAAA,IAAA,EAMyB,CAChD;AAAA,EAER,GAEMwE,KAAoB9H,EAASzC,CAAM,GAEnCwK,KAAsB,MAAM7K,EAAQ6E,EAAKrE,CAAa,GAAGqE,EAAK5C,EAAM,SAAS,CAAC,GAE9E6I,KAA4B,MAAMhI,EAAStC,CAAa,KAAK,CAACqK,GAAA,GAE9DE,KAAuB,MAAM;AAC/B,UAAM1D,IAAmB5F,IAAkB,IAAIQ,EAAM,YAAY;AACjE,WAAOjC,EAAQ6E,EAAKtE,CAAc,GAAGsE,EAAKxE,CAAM,IAAIgH,CAAgB;AAAA,EACxE,GAEM2D,KAA6B,MAAMJ,MAAqB9H,EAASvC,CAAc,KAAK,CAACwK,GAAA,GAErFE,KAAsBlI,EAAA,KAA4BsC,EAAQpD,EAAM,SAAS,GACzEiJ,KAAuBnI,EAAA,KAA4BsC,EAAQpD,EAAM,YAAY,KAAK2I,IAClFO,KAAgBF,MAAuBC,IAEvCE,KAAkBJ,GAAA,KAAgCF,GAAA,GAElDO,KAAiBC,GAAW,QAAQjK,EAAS,GAE7CkK,KAAkBD,GAAW,YAAY,sBAAsB,YAAY,GAI3EE,KAAUvF,EAAK;AAAA,IACjB,CAHqB,MAAMpD,EAAA,KAAe,CAACE,EAAA,GAGxB,MAAMoH,IAAY;AAAA,IACrC,CAAChE,GAAW,MAAMuE,GAAA,CAAgB;AAAA,EAAA,CACrC,EAAA,GAEKe,KAAqB,CAACC,MAAiB;AACzC,UAAMC,IAAoBC,GAAoB3J,EAAM,YAAYyJ,CAAI;AACpE,IAAAxJ,EAAS2J,GAAkBF,CAAiB,CAAC,GAC7C9J,GAAmB8J,CAAiB;AAAA,EACxC,GAEMG,KAAiBjH,EAAK5C,EAAM,mBAAmB,MAAM,GACrD8J,KAAiBjJ,EAASb,EAAM,UAAU,GAE1C+J,KAAe,CAAClL,IAChBmL,KAAgB,CAACd,IACjBe,KAAa,CAACrL,IACdsL,KAAc,CAAClL,IAEfmL,KAAkB,CAACC,GAAMnL,CAAM;AAErC,2BACK,OAAA,EAAK,GAAGc,IAAgB,WAAWqJ,IAAgB,KAAKhJ,IACrD,UAAA;AAAA,IAAA,gBAAAoI,EAAC,OAAA,EAAI,WAAU,cACV,UAAA;AAAA,MAAA1J;AAAA,MACAmL,MAAc,CAACE,MACZ,gBAAAzC;AAAA,QAAC2C;AAAA,QAAA;AAAA,UACG,OAAOrK,EAAM;AAAA,UACb,UAAUsF;AAAA,UACV,aAAapG;AAAA,QAAA;AAAA,MAAA;AAAA,MAGpBiL,MAAmBlL;AAAA,MACnB8K,MACG,gBAAAvB,EAAC,OAAA,EAAI,WAAWc,IACX,UAAA;AAAA,QAAAU,MACG,gBAAAtC,EAAC,OAAA,EAAI,WAAU,yEACX,UAAA,gBAAAA;AAAA,UAAC4C;AAAA,UAAA;AAAA,YACG,WAAWtK,EAAM;AAAA,YACjB,WAAWtB;AAAA,YACX,iBAAAyK;AAAA,YACA,UAAUtF;AAAA,UAAA;AAAA,QAAA,GAElB;AAAA,QAEJ,gBAAA6D,EAAC,OAAA,EAAI,WAAU,uEACV,UAAAwC,KACKnL,MACI,gBAAA2I,EAAC6C,IAAA,EACI,UAAAvF,EAAIhF,EAAM,qBAAqB,CAACwK,MAC7B,gBAAA9C;AAAA,UAAC+C;AAAA,UAAA;AAAA,YAEG,MAAMD;AAAA,YACN,MAAM,GAAGA,CAAW;AAAA,YACpB,OAAOxK,EAAM,YAAYwK,CAAW;AAAA,YACpC,SAAShB;AAAA,YACT,UAAUxJ,EAAM,WAAW,SAASwK,CAAW;AAAA,YAC/C,WAAWV;AAAA,YACX,gBAAAD;AAAA,UAAA;AAAA,UAPKW;AAAA,QAAA,CASZ,EAAA,CACL,IAEJ,MACV;AAAA,QACA,gBAAA9C,EAACgD,IAAA,EAAY,aAAAjL,IAA0B,oBAAAC,GAAA,CAAwC;AAAA,MAAA,EAAA,CACnF;AAAA,IAAA,GAER;AAAA,IACA,gBAAAgI,EAACiD,IAAA,EAAS,WAAWtL,IAAc,kBAAAM,GAC9B,UAAA4J,GAAA,CACL;AAAA,EAAA,GACJ;AAER,GAAG3L,EAAa;"}
@@ -0,0 +1,30 @@
1
+ type TreeIconProps = {
2
+ /**
3
+ * Icon name (rioglyph) or image URL for the default (collapsed) state.
4
+ *
5
+ * Allows to add custom icons and logos by providing an image URL.
6
+ *
7
+ * Allowed custom file extensions inside the URLs:
8
+ *
9
+ * - `'.png'`
10
+ * - `'.webp'`
11
+ * - `'.jpg'`
12
+ * - `'.jpeg'`
13
+ * - `'.svg'`
14
+ */
15
+ icon?: string;
16
+ /**
17
+ * Icon name (rioglyph) or image URL for the expanded state.
18
+ * If not provided, it will show the icon instead.
19
+ */
20
+ expandedIcon?: string;
21
+ /**
22
+ * Whether the tree node is currently expanded.
23
+ */
24
+ isOpen?: boolean;
25
+ };
26
+ /**
27
+ * Renders an icon for an asset tree node, supporting rioglyph names and custom image URLs.
28
+ */
29
+ declare const TreeIcon: ({ icon, expandedIcon, isOpen }: TreeIconProps) => import("react/jsx-runtime").JSX.Element | null;
30
+ export default TreeIcon;
@@ -0,0 +1,16 @@
1
+ import { jsx as e } from "react/jsx-runtime";
2
+ import { withRioglyphPrefix as m } from "./treeUtils.js";
3
+ import a from "../../utils/classNames.js";
4
+ const p = [".png", ".webp", ".jpg", ".jpeg", ".svg"], d = ({ icon: t, expandedIcon: o, isOpen: i }) => {
5
+ const s = i && o || t;
6
+ if (!s)
7
+ return null;
8
+ if (p.some((c) => s.toLowerCase().endsWith(c)))
9
+ return /* @__PURE__ */ e("div", { className: "display-grid place-items-center margin-right-5", style: { width: "18px", height: "18px" }, children: /* @__PURE__ */ e("img", { src: s, style: { maxWidth: "100%", maxHeight: "100%" } }) });
10
+ const n = m(s), r = a("rioglyph", n);
11
+ return /* @__PURE__ */ e("span", { className: r });
12
+ };
13
+ export {
14
+ d as default
15
+ };
16
+ //# sourceMappingURL=TreeIcon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TreeIcon.js","sources":["../../../src/components/assetTree/TreeIcon.tsx"],"sourcesContent":["import { withRioglyphPrefix } from './treeUtils';\n\nimport classNames from '../../utils/classNames';\n\ntype TreeIconProps = {\n /**\n * Icon name (rioglyph) or image URL for the default (collapsed) state.\n *\n * Allows to add custom icons and logos by providing an image URL.\n *\n * Allowed custom file extensions inside the URLs:\n *\n * - `'.png'`\n * - `'.webp'`\n * - `'.jpg'`\n * - `'.jpeg'`\n * - `'.svg'`\n */\n icon?: string;\n\n /**\n * Icon name (rioglyph) or image URL for the expanded state.\n * If not provided, it will show the icon instead.\n */\n expandedIcon?: string;\n\n /**\n * Whether the tree node is currently expanded.\n */\n isOpen?: boolean;\n};\n\nconst customIconExtensions = ['.png', '.webp', '.jpg', '.jpeg', '.svg'];\n\n/**\n * Renders an icon for an asset tree node, supporting rioglyph names and custom image URLs.\n */\nconst TreeIcon = ({ icon, expandedIcon, isOpen }: TreeIconProps) => {\n const effectiveIcon = isOpen ? expandedIcon || icon : icon;\n\n if (!effectiveIcon) {\n return null;\n }\n\n const isCustomIcon = customIconExtensions.some(ext => effectiveIcon.toLowerCase().endsWith(ext));\n\n if (isCustomIcon) {\n return (\n <div className='display-grid place-items-center margin-right-5' style={{ width: '18px', height: '18px' }}>\n <img src={effectiveIcon} style={{ maxWidth: '100%', maxHeight: '100%' }} />\n </div>\n );\n }\n\n const iconName = withRioglyphPrefix(effectiveIcon);\n const spanClassName = classNames('rioglyph', iconName);\n\n return <span className={spanClassName} />;\n};\n\nexport default TreeIcon;\n"],"names":["customIconExtensions","TreeIcon","icon","expandedIcon","isOpen","effectiveIcon","ext","jsx","iconName","withRioglyphPrefix","spanClassName","classNames"],"mappings":";;;AAgCA,MAAMA,IAAuB,CAAC,QAAQ,SAAS,QAAQ,SAAS,MAAM,GAKhEC,IAAW,CAAC,EAAE,MAAAC,GAAM,cAAAC,GAAc,QAAAC,QAA4B;AAChE,QAAMC,IAAgBD,KAASD,KAAgBD;AAE/C,MAAI,CAACG;AACD,WAAO;AAKX,MAFqBL,EAAqB,KAAK,CAAAM,MAAOD,EAAc,YAAA,EAAc,SAASC,CAAG,CAAC;AAG3F,WACI,gBAAAC,EAAC,SAAI,WAAU,kDAAiD,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAA,GAC5F,4BAAC,OAAA,EAAI,KAAKF,GAAe,OAAO,EAAE,UAAU,QAAQ,WAAW,OAAA,EAAO,CAAG,EAAA,CAC7E;AAIR,QAAMG,IAAWC,EAAmBJ,CAAa,GAC3CK,IAAgBC,EAAW,YAAYH,CAAQ;AAErD,SAAO,gBAAAD,EAAC,QAAA,EAAK,WAAWG,EAAA,CAAe;AAC3C;"}
@@ -1,33 +1,33 @@
1
- import { jsxs as s, jsx as a, Fragment as N } from "react/jsx-runtime";
2
- import d from "react";
3
- import u from "classnames";
4
- import { isObject as f } from "es-toolkit/compat";
1
+ import { jsxs as o, jsx as a, Fragment as u } from "react/jsx-runtime";
2
+ import N from "react";
3
+ import { isObject as h } from "es-toolkit/compat";
4
+ import f from "../../utils/classNames.js";
5
5
  import b from "../checkbox/Checkbox.js";
6
- import I from "../radiobutton/RadioButton.js";
7
- import { withRioglyphPrefix as m } from "./treeUtils.js";
8
- const g = (n) => {
6
+ import T from "../radiobutton/RadioButton.js";
7
+ import i from "./TreeIcon.js";
8
+ const I = (n) => {
9
9
  if (n.icon === null)
10
10
  return { primaryIcon: null, subIcon: null };
11
- const e = n.icon ?? n.type, o = n.pairIcon === null ? null : n.pairIcon ?? n.subType ?? null;
12
- return { primaryIcon: m(e), subIcon: m(o) };
13
- }, j = d.memo((n) => {
14
- const { item: e, hasMultiselect: o, showRadioButtons: t, isSelected: c, onSelectItem: i, onActiveItem: p } = n, h = u(
11
+ const e = n.icon ?? n.type, c = n.pairIcon === null ? null : n.pairIcon ?? n.subType ?? null;
12
+ return { primaryIcon: e, subIcon: c };
13
+ }, j = N.memo((n) => {
14
+ const { item: e, hasMultiselect: c, showRadioButtons: m, isSelected: s, onSelectItem: t, onActiveItem: p } = n, d = f(
15
15
  "TreeLeaf",
16
16
  "form-group margin-bottom-0",
17
- c && "active",
17
+ s && "active",
18
18
  e.className && e.className
19
- ), { primaryIcon: r, subIcon: l } = g(e);
20
- return /* @__PURE__ */ s("div", { className: h, "data-key": e.id, children: [
21
- o && /* @__PURE__ */ a(b, { className: "TreeCheckbox", checked: c, onClick: i }),
22
- !o && t && /* @__PURE__ */ a(I, { className: "TreeRadioButton", checked: c, onChange: i }),
23
- /* @__PURE__ */ s("span", { className: "TreeLabel TreeLabelName", onClick: p, children: [
24
- r && !l && /* @__PURE__ */ a("span", { className: `rioglyph ${r}` }),
25
- r && l && /* @__PURE__ */ s("span", { className: "rioglyph-icon-pair", children: [
26
- /* @__PURE__ */ a("span", { className: `rioglyph ${r}` }),
27
- /* @__PURE__ */ a("span", { className: `rioglyph ${l}` })
19
+ ), { primaryIcon: r, subIcon: l } = I(e);
20
+ return /* @__PURE__ */ o("div", { className: d, "data-key": e.id, children: [
21
+ c && /* @__PURE__ */ a(b, { className: "TreeCheckbox", checked: s, onClick: t }),
22
+ !c && m && /* @__PURE__ */ a(T, { className: "TreeRadioButton", checked: s, onChange: t }),
23
+ /* @__PURE__ */ o("span", { className: "TreeLabel TreeLabelName", onClick: p, children: [
24
+ r && !l && /* @__PURE__ */ a(i, { icon: r }),
25
+ r && l && /* @__PURE__ */ o("span", { className: "rioglyph-icon-pair", children: [
26
+ /* @__PURE__ */ a(i, { icon: r }),
27
+ /* @__PURE__ */ a(i, { icon: l })
28
28
  ] }),
29
- /* @__PURE__ */ s("span", { className: "TreeLabelNameText", children: [
30
- /* @__PURE__ */ a("span", { className: "TreeLabelNameTextHeadline", children: f(e.name) ? /* @__PURE__ */ s(N, { children: [
29
+ /* @__PURE__ */ o("span", { className: "TreeLabelNameText", children: [
30
+ /* @__PURE__ */ a("span", { className: "TreeLabelNameTextHeadline", children: h(e.name) ? /* @__PURE__ */ o(u, { children: [
31
31
  /* @__PURE__ */ a("span", { className: "text-light margin-right-3", children: e.name.firstName }),
32
32
  /* @__PURE__ */ a("span", { children: e.name.lastName })
33
33
  ] }) : e.name }),
@@ -1 +1 @@
1
- {"version":3,"file":"TreeLeaf.js","sources":["../../../src/components/assetTree/TreeLeaf.tsx"],"sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport { isObject } from 'es-toolkit/compat';\n\nimport Checkbox from '../checkbox/Checkbox';\nimport RadioButton from '../radiobutton/RadioButton';\nimport type { TreeItem } from './Tree';\nimport { withRioglyphPrefix } from './treeUtils';\n\nexport type TreeLeafProps = {\n item: TreeItem;\n hasMultiselect: boolean;\n showRadioButtons: boolean;\n isSelected: boolean;\n onSelectItem: VoidFunction;\n onActiveItem: VoidFunction;\n};\n\nconst getIconRenderInfo = (item: TreeItem) => {\n if (item.icon === null) {\n // explicit opt-out\n return { primaryIcon: null, subIcon: null };\n }\n\n // fallback to type\n const primaryIcon = item.icon ?? item.type;\n\n // pairIcon with fallback to subType\n const subIcon = item.pairIcon === null ? null : (item.pairIcon ?? item.subType ?? null);\n\n return { primaryIcon: withRioglyphPrefix(primaryIcon), subIcon: withRioglyphPrefix(subIcon) };\n};\n\nconst TreeLeaf = React.memo((props: TreeLeafProps) => {\n const { item, hasMultiselect, showRadioButtons, isSelected, onSelectItem, onActiveItem } = props;\n\n const treeNodeClassNames = classNames(\n 'TreeLeaf',\n 'form-group margin-bottom-0',\n isSelected && 'active',\n item.className && item.className\n );\n\n const { primaryIcon, subIcon } = getIconRenderInfo(item);\n\n return (\n <div className={treeNodeClassNames} data-key={item.id}>\n {hasMultiselect && <Checkbox className='TreeCheckbox' checked={isSelected} onClick={onSelectItem} />}\n {!hasMultiselect && showRadioButtons && (\n <RadioButton className='TreeRadioButton' checked={isSelected} onChange={onSelectItem} />\n )}\n <span className='TreeLabel TreeLabelName' onClick={onActiveItem}>\n {primaryIcon && !subIcon && <span className={`rioglyph ${primaryIcon}`} />}\n {primaryIcon && subIcon && (\n <span className='rioglyph-icon-pair'>\n <span className={`rioglyph ${primaryIcon}`} />\n <span className={`rioglyph ${subIcon}`} />\n </span>\n )}\n <span className='TreeLabelNameText'>\n <span className='TreeLabelNameTextHeadline'>\n {isObject(item.name) ? (\n <>\n <span className='text-light margin-right-3'>{item.name.firstName}</span>\n <span>{item.name.lastName}</span>\n </>\n ) : (\n item.name\n )}\n </span>\n {item.info && <span className='TreeLabelNameTextSubline'>{item.info}</span>}\n </span>\n </span>\n </div>\n );\n});\n\nexport default TreeLeaf;\n"],"names":["getIconRenderInfo","item","primaryIcon","subIcon","withRioglyphPrefix","TreeLeaf","React","props","hasMultiselect","showRadioButtons","isSelected","onSelectItem","onActiveItem","treeNodeClassNames","classNames","Checkbox","jsx","RadioButton","jsxs","Fragment"],"mappings":";;;;;;;AAkBA,MAAMA,IAAoB,CAACC,MAAmB;AAC1C,MAAIA,EAAK,SAAS;AAEd,WAAO,EAAE,aAAa,MAAM,SAAS,KAAA;AAIzC,QAAMC,IAAcD,EAAK,QAAQA,EAAK,MAGhCE,IAAUF,EAAK,aAAa,OAAO,OAAQA,EAAK,YAAYA,EAAK,WAAW;AAElF,SAAO,EAAE,aAAaG,EAAmBF,CAAW,GAAG,SAASE,EAAmBD,CAAO,EAAA;AAC9F,GAEME,IAAWC,EAAM,KAAK,CAACC,MAAyB;AAClD,QAAM,EAAE,MAAAN,GAAM,gBAAAO,GAAgB,kBAAAC,GAAkB,YAAAC,GAAY,cAAAC,GAAc,cAAAC,MAAiBL,GAErFM,IAAqBC;AAAA,IACvB;AAAA,IACA;AAAA,IACAJ,KAAc;AAAA,IACdT,EAAK,aAAaA,EAAK;AAAA,EAAA,GAGrB,EAAE,aAAAC,GAAa,SAAAC,MAAYH,EAAkBC,CAAI;AAEvD,2BACK,OAAA,EAAI,WAAWY,GAAoB,YAAUZ,EAAK,IAC9C,UAAA;AAAA,IAAAO,uBAAmBO,GAAA,EAAS,WAAU,gBAAe,SAASL,GAAY,SAASC,GAAc;AAAA,IACjG,CAACH,KAAkBC,KAChB,gBAAAO,EAACC,GAAA,EAAY,WAAU,mBAAkB,SAASP,GAAY,UAAUC,EAAA,CAAc;AAAA,IAE1F,gBAAAO,EAAC,QAAA,EAAK,WAAU,2BAA0B,SAASN,GAC9C,UAAA;AAAA,MAAAV,KAAe,CAACC,KAAW,gBAAAa,EAAC,UAAK,WAAW,YAAYd,CAAW,IAAI;AAAA,MACvEA,KAAeC,KACZ,gBAAAe,EAAC,QAAA,EAAK,WAAU,sBACZ,UAAA;AAAA,QAAA,gBAAAF,EAAC,QAAA,EAAK,WAAW,YAAYd,CAAW,IAAI;AAAA,QAC5C,gBAAAc,EAAC,QAAA,EAAK,WAAW,YAAYb,CAAO,GAAA,CAAI;AAAA,MAAA,GAC5C;AAAA,MAEJ,gBAAAe,EAAC,QAAA,EAAK,WAAU,qBACZ,UAAA;AAAA,QAAA,gBAAAF,EAAC,UAAK,WAAU,6BACX,YAASf,EAAK,IAAI,IACf,gBAAAiB,EAAAC,GAAA,EACI,UAAA;AAAA,UAAA,gBAAAH,EAAC,QAAA,EAAK,WAAU,6BAA6B,UAAAf,EAAK,KAAK,WAAU;AAAA,UACjE,gBAAAe,EAAC,QAAA,EAAM,UAAAf,EAAK,KAAK,SAAA,CAAS;AAAA,QAAA,GAC9B,IAEAA,EAAK,MAEb;AAAA,QACCA,EAAK,QAAQ,gBAAAe,EAAC,UAAK,WAAU,4BAA4B,YAAK,KAAA,CAAK;AAAA,MAAA,EAAA,CACxE;AAAA,IAAA,EAAA,CACJ;AAAA,EAAA,GACJ;AAER,CAAC;"}
1
+ {"version":3,"file":"TreeLeaf.js","sources":["../../../src/components/assetTree/TreeLeaf.tsx"],"sourcesContent":["import React from 'react';\nimport { isObject } from 'es-toolkit/compat';\n\nimport classNames from '../../utils/classNames';\nimport Checkbox from '../checkbox/Checkbox';\nimport RadioButton from '../radiobutton/RadioButton';\nimport type { TreeItem } from './Tree';\nimport TreeIcon from './TreeIcon';\n\nexport type TreeLeafProps = {\n item: TreeItem;\n hasMultiselect: boolean;\n showRadioButtons: boolean;\n isSelected: boolean;\n onSelectItem: VoidFunction;\n onActiveItem: VoidFunction;\n};\n\nconst getIconRenderInfo = (item: TreeItem) => {\n if (item.icon === null) {\n // explicit opt-out\n return { primaryIcon: null, subIcon: null };\n }\n\n // fallback to type\n const primaryIcon = item.icon ?? item.type;\n\n // pairIcon with fallback to subType\n const subIcon = item.pairIcon === null ? null : (item.pairIcon ?? item.subType ?? null);\n\n return { primaryIcon, subIcon };\n};\n\nconst TreeLeaf = React.memo((props: TreeLeafProps) => {\n const { item, hasMultiselect, showRadioButtons, isSelected, onSelectItem, onActiveItem } = props;\n\n const treeNodeClassNames = classNames(\n 'TreeLeaf',\n 'form-group margin-bottom-0',\n isSelected && 'active',\n item.className && item.className\n );\n\n const { primaryIcon, subIcon } = getIconRenderInfo(item);\n\n return (\n <div className={treeNodeClassNames} data-key={item.id}>\n {hasMultiselect && <Checkbox className='TreeCheckbox' checked={isSelected} onClick={onSelectItem} />}\n {!hasMultiselect && showRadioButtons && (\n <RadioButton className='TreeRadioButton' checked={isSelected} onChange={onSelectItem} />\n )}\n <span className='TreeLabel TreeLabelName' onClick={onActiveItem}>\n {primaryIcon && !subIcon && <TreeIcon icon={primaryIcon} />}\n {primaryIcon && subIcon && (\n <span className='rioglyph-icon-pair'>\n <TreeIcon icon={primaryIcon} />\n <TreeIcon icon={subIcon} />\n </span>\n )}\n <span className='TreeLabelNameText'>\n <span className='TreeLabelNameTextHeadline'>\n {isObject(item.name) ? (\n <>\n <span className='text-light margin-right-3'>{item.name.firstName}</span>\n <span>{item.name.lastName}</span>\n </>\n ) : (\n item.name\n )}\n </span>\n {item.info && <span className='TreeLabelNameTextSubline'>{item.info}</span>}\n </span>\n </span>\n </div>\n );\n});\n\nexport default TreeLeaf;\n"],"names":["getIconRenderInfo","item","primaryIcon","subIcon","TreeLeaf","React","props","hasMultiselect","showRadioButtons","isSelected","onSelectItem","onActiveItem","treeNodeClassNames","classNames","Checkbox","jsx","RadioButton","jsxs","TreeIcon","Fragment"],"mappings":";;;;;;;AAkBA,MAAMA,IAAoB,CAACC,MAAmB;AAC1C,MAAIA,EAAK,SAAS;AAEd,WAAO,EAAE,aAAa,MAAM,SAAS,KAAA;AAIzC,QAAMC,IAAcD,EAAK,QAAQA,EAAK,MAGhCE,IAAUF,EAAK,aAAa,OAAO,OAAQA,EAAK,YAAYA,EAAK,WAAW;AAElF,SAAO,EAAE,aAAAC,GAAa,SAAAC,EAAA;AAC1B,GAEMC,IAAWC,EAAM,KAAK,CAACC,MAAyB;AAClD,QAAM,EAAE,MAAAL,GAAM,gBAAAM,GAAgB,kBAAAC,GAAkB,YAAAC,GAAY,cAAAC,GAAc,cAAAC,MAAiBL,GAErFM,IAAqBC;AAAA,IACvB;AAAA,IACA;AAAA,IACAJ,KAAc;AAAA,IACdR,EAAK,aAAaA,EAAK;AAAA,EAAA,GAGrB,EAAE,aAAAC,GAAa,SAAAC,MAAYH,EAAkBC,CAAI;AAEvD,2BACK,OAAA,EAAI,WAAWW,GAAoB,YAAUX,EAAK,IAC9C,UAAA;AAAA,IAAAM,uBAAmBO,GAAA,EAAS,WAAU,gBAAe,SAASL,GAAY,SAASC,GAAc;AAAA,IACjG,CAACH,KAAkBC,KAChB,gBAAAO,EAACC,GAAA,EAAY,WAAU,mBAAkB,SAASP,GAAY,UAAUC,EAAA,CAAc;AAAA,IAE1F,gBAAAO,EAAC,QAAA,EAAK,WAAU,2BAA0B,SAASN,GAC9C,UAAA;AAAA,MAAAT,KAAe,CAACC,KAAW,gBAAAY,EAACG,GAAA,EAAS,MAAMhB,GAAa;AAAA,MACxDA,KAAeC,KACZ,gBAAAc,EAAC,QAAA,EAAK,WAAU,sBACZ,UAAA;AAAA,QAAA,gBAAAF,EAACG,GAAA,EAAS,MAAMhB,EAAA,CAAa;AAAA,QAC7B,gBAAAa,EAACG,GAAA,EAAS,MAAMf,EAAA,CAAS;AAAA,MAAA,GAC7B;AAAA,MAEJ,gBAAAc,EAAC,QAAA,EAAK,WAAU,qBACZ,UAAA;AAAA,QAAA,gBAAAF,EAAC,UAAK,WAAU,6BACX,YAASd,EAAK,IAAI,IACf,gBAAAgB,EAAAE,GAAA,EACI,UAAA;AAAA,UAAA,gBAAAJ,EAAC,QAAA,EAAK,WAAU,6BAA6B,UAAAd,EAAK,KAAK,WAAU;AAAA,UACjE,gBAAAc,EAAC,QAAA,EAAM,UAAAd,EAAK,KAAK,SAAA,CAAS;AAAA,QAAA,GAC9B,IAEAA,EAAK,MAEb;AAAA,QACCA,EAAK,QAAQ,gBAAAc,EAAC,UAAK,WAAU,4BAA4B,YAAK,KAAA,CAAK;AAAA,MAAA,EAAA,CACxE;AAAA,IAAA,EAAA,CACJ;AAAA,EAAA,GACJ;AAER,CAAC;"}