@rio-cloud/rio-uikit 2.1.0 → 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.
- package/CircularProgress.d.ts +2 -0
- package/CircularProgress.js +5 -0
- package/CircularProgress.js.map +1 -0
- package/RadioCardGroup.d.ts +2 -0
- package/RadioCardGroup.js +7 -0
- package/RadioCardGroup.js.map +1 -0
- package/SearchHighlightText.d.ts +2 -0
- package/SearchHighlightText.js +5 -0
- package/SearchHighlightText.js.map +1 -0
- package/TextTruncateMiddle.d.ts +2 -0
- package/TextTruncateMiddle.js +5 -0
- package/TextTruncateMiddle.js.map +1 -0
- package/Tracker.d.ts +2 -0
- package/Tracker.js +5 -0
- package/Tracker.js.map +1 -0
- package/classNames.d.ts +2 -0
- package/classNames.js +5 -0
- package/classNames.js.map +1 -0
- package/components/accentBar/AccentBar.js +1 -1
- package/components/accentBar/AccentBar.js.map +1 -1
- package/components/actionBarItem/ActionBarItem.js +7 -7
- package/components/actionBarItem/ActionBarItem.js.map +1 -1
- package/components/actionBarItem/ActionBarItemIcon.js +1 -1
- package/components/actionBarItem/ActionBarItemIcon.js.map +1 -1
- package/components/actionBarItem/ActionBarItemList.js +1 -1
- package/components/actionBarItem/ActionBarItemList.js.map +1 -1
- package/components/actionBarItem/ActionBarItemListItem.js +1 -1
- package/components/actionBarItem/ActionBarItemListItem.js.map +1 -1
- package/components/actionBarItem/ActionBarItemListSeparator.js +1 -1
- package/components/actionBarItem/ActionBarItemListSeparator.js.map +1 -1
- package/components/actionBarItem/ActionBarItemPopoverContent.js +3 -3
- package/components/actionBarItem/ActionBarItemPopoverContent.js.map +1 -1
- package/components/actionBarItem/ActionBarOverlay.js +1 -1
- package/components/actionBarItem/ActionBarOverlay.js.map +1 -1
- package/components/activity/Activity.js +1 -1
- package/components/activity/Activity.js.map +1 -1
- package/components/animatedTextReveal/AnimatedTextReveal.js +1 -1
- package/components/animatedTextReveal/AnimatedTextReveal.js.map +1 -1
- package/components/applicationHeader/AppMenu.js +2 -2
- package/components/applicationHeader/AppMenu.js.map +1 -1
- package/components/applicationHeader/AppMenuDropdown.js +13 -11
- package/components/applicationHeader/AppMenuDropdown.js.map +1 -1
- package/components/applicationHeader/ApplicationHeader.js +1 -1
- package/components/applicationHeader/ApplicationHeader.js.map +1 -1
- package/components/applicationHeader/MobileHeaderModal.js +8 -8
- package/components/applicationHeader/MobileHeaderModal.js.map +1 -1
- package/components/applicationHeader/MobileSubmoduleNavigation.js +1 -1
- package/components/applicationHeader/MobileSubmoduleNavigation.js.map +1 -1
- package/components/applicationHeader/NavItems.js +4 -4
- package/components/applicationHeader/NavItems.js.map +1 -1
- package/components/applicationLayout/ApplicationLayout.js +10 -10
- package/components/applicationLayout/ApplicationLayout.js.map +1 -1
- package/components/applicationLayout/ApplicationLayoutBody.js +2 -2
- package/components/applicationLayout/ApplicationLayoutBody.js.map +1 -1
- package/components/applicationLayout/ApplicationLayoutBodyBanner.js +1 -1
- package/components/applicationLayout/ApplicationLayoutBodyBanner.js.map +1 -1
- package/components/applicationLayout/ApplicationLayoutBodyBottomBar.js +1 -1
- package/components/applicationLayout/ApplicationLayoutBodyBottomBar.js.map +1 -1
- package/components/applicationLayout/ApplicationLayoutBodyNavigation.js +1 -1
- package/components/applicationLayout/ApplicationLayoutBodyNavigation.js.map +1 -1
- package/components/applicationLayout/ApplicationLayoutHeader.js +1 -1
- package/components/applicationLayout/ApplicationLayoutHeader.js.map +1 -1
- package/components/applicationLayout/ApplicationLayoutSidebar.js +1 -1
- package/components/applicationLayout/ApplicationLayoutSidebar.js.map +1 -1
- package/components/applicationLayout/SubNavigation.js +1 -1
- package/components/applicationLayout/SubNavigation.js.map +1 -1
- package/components/assetTree/AssetTree.js +1 -1
- package/components/assetTree/AssetTree.js.map +1 -1
- package/components/assetTree/Tree.js +1 -1
- package/components/assetTree/Tree.js.map +1 -1
- package/components/assetTree/TreeIcon.js +3 -3
- package/components/assetTree/TreeIcon.js.map +1 -1
- package/components/assetTree/TreeLeaf.js +4 -4
- package/components/assetTree/TreeLeaf.js.map +1 -1
- package/components/assetTree/TreeNode.js +1 -1
- package/components/assetTree/TreeNode.js.map +1 -1
- package/components/assetTree/TreeNodeContainer.js +1 -1
- package/components/assetTree/TreeNodeContainer.js.map +1 -1
- package/components/assetTree/TreeOption.js +3 -3
- package/components/assetTree/TreeOption.js.map +1 -1
- package/components/assetTree/TreeOptions.js +4 -4
- package/components/assetTree/TreeOptions.js.map +1 -1
- package/components/assetTree/TreeRoot.js +3 -3
- package/components/assetTree/TreeRoot.js.map +1 -1
- package/components/assetTree/TreeSearch.js +3 -3
- package/components/assetTree/TreeSearch.js.map +1 -1
- package/components/assetTree/TreeSidebar.js +1 -1
- package/components/assetTree/TreeSidebar.js.map +1 -1
- package/components/assetTree/TreeSidebarCategories.js +4 -4
- package/components/assetTree/TreeSidebarCategories.js.map +1 -1
- package/components/assetTree/TreeSummary.js +1 -1
- package/components/assetTree/TreeSummary.js.map +1 -1
- package/components/assetTree/TypeCounter.js +1 -1
- package/components/assetTree/TypeCounter.js.map +1 -1
- package/components/autosuggest/AutoSuggest.js +1 -1
- package/components/autosuggest/AutoSuggest.js.map +1 -1
- package/components/avatar/Avatar.js +1 -1
- package/components/avatar/Avatar.js.map +1 -1
- package/components/banner/Banner.js +1 -1
- package/components/banner/Banner.js.map +1 -1
- package/components/banner/BannerContent.js +1 -1
- package/components/banner/BannerContent.js.map +1 -1
- package/components/barList/BarList.js +1 -1
- package/components/barList/BarList.js.map +1 -1
- package/components/bottomSheet/BottomSheet.js +1 -1
- package/components/bottomSheet/BottomSheet.js.map +1 -1
- package/components/button/Button.d.ts +53 -7
- package/components/button/Button.js +87 -64
- package/components/button/Button.js.map +1 -1
- package/components/button/ButtonToolbar.js +1 -1
- package/components/button/ButtonToolbar.js.map +1 -1
- package/components/button/ToggleButton.d.ts +4 -1
- package/components/button/ToggleButton.js.map +1 -1
- package/components/calendarStripe/CalendarStripe.js +16 -16
- package/components/calendarStripe/CalendarStripe.js.map +1 -1
- package/components/card/Card.js +1 -1
- package/components/card/Card.js.map +1 -1
- package/components/charts/RadialBarChart.js +106 -103
- package/components/charts/RadialBarChart.js.map +1 -1
- package/components/checkbox/Checkbox.js +6 -6
- package/components/checkbox/Checkbox.js.map +1 -1
- package/components/circularProgress/CircularProgress.d.ts +139 -0
- package/components/circularProgress/CircularProgress.js +197 -0
- package/components/circularProgress/CircularProgress.js.map +1 -0
- package/components/clearableInput/ClearableInput.js +9 -9
- package/components/clearableInput/ClearableInput.js.map +1 -1
- package/components/dataTabs/DataTabHeader.js +1 -1
- package/components/dataTabs/DataTabHeader.js.map +1 -1
- package/components/dataTabs/DataTabs.js +4 -4
- package/components/dataTabs/DataTabs.js.map +1 -1
- package/components/datepicker/DatePicker.js +6 -6
- package/components/datepicker/DatePicker.js.map +1 -1
- package/components/datepicker/DateRangePicker.js +1 -1
- package/components/datepicker/DateRangePicker.js.map +1 -1
- package/components/datepicker/DayPicker.js +1 -1
- package/components/datepicker/DayPicker.js.map +1 -1
- package/components/dialog/Dialog.js +55 -55
- package/components/dialog/Dialog.js.map +1 -1
- package/components/dialog/DialogBody.js +1 -1
- package/components/dialog/DialogBody.js.map +1 -1
- package/components/dialog/DialogFooter.js +1 -1
- package/components/dialog/DialogFooter.js.map +1 -1
- package/components/dialog/DialogHeader.js +1 -1
- package/components/dialog/DialogHeader.js.map +1 -1
- package/components/dialog/MediaDialog.js +1 -1
- package/components/dialog/MediaDialog.js.map +1 -1
- package/components/dialog/SplitDialog.js +1 -1
- package/components/dialog/SplitDialog.js.map +1 -1
- package/components/divider/Divider.js +1 -1
- package/components/divider/Divider.js.map +1 -1
- package/components/dropdown/ButtonDropdown.js +1 -1
- package/components/dropdown/ButtonDropdown.js.map +1 -1
- package/components/dropdown/DropdownSubmenu.js +3 -3
- package/components/dropdown/DropdownSubmenu.js.map +1 -1
- package/components/dropdown/DropdownToggleButton.d.ts +1 -1
- package/components/dropdown/DropdownToggleButton.js +4 -3
- package/components/dropdown/DropdownToggleButton.js.map +1 -1
- package/components/dropdown/SplitCaretButton.js +6 -6
- package/components/dropdown/SplitCaretButton.js.map +1 -1
- package/components/editableContent/EditableContent.js +1 -1
- package/components/editableContent/EditableContent.js.map +1 -1
- package/components/ellipsis/TextTruncateMiddle.d.ts +23 -0
- package/components/ellipsis/TextTruncateMiddle.js +21 -0
- package/components/ellipsis/TextTruncateMiddle.js.map +1 -0
- package/components/expander/ExpanderList.js +5 -5
- package/components/expander/ExpanderList.js.map +1 -1
- package/components/expander/ExpanderPanel.js +1 -1
- package/components/expander/ExpanderPanel.js.map +1 -1
- package/components/feedback/FeedbackRating.js +1 -1
- package/components/feedback/FeedbackRating.js.map +1 -1
- package/components/feedback/FeedbackReactions.js +1 -1
- package/components/feedback/FeedbackReactions.js.map +1 -1
- package/components/formLabel/FormLabel.js +6 -9
- package/components/formLabel/FormLabel.js.map +1 -1
- package/components/formLabel/LabeledElement.js +1 -1
- package/components/formLabel/LabeledElement.js.map +1 -1
- package/components/listMenu/ListMenu.js +2 -5
- package/components/listMenu/ListMenu.js.map +1 -1
- package/components/listMenu/ListMenuGroup.js +2 -2
- package/components/listMenu/ListMenuGroup.js.map +1 -1
- package/components/loadMore/LoadMoreButton.js +1 -1
- package/components/loadMore/LoadMoreButton.js.map +1 -1
- package/components/loadMore/LoadMoreProgress.js +1 -1
- package/components/loadMore/LoadMoreProgress.js.map +1 -1
- package/components/map/components/features/MapSettings.js +4 -4
- package/components/map/components/features/MapSettings.js.map +1 -1
- package/components/map/components/features/settings/MapSettingsItem.js +1 -1
- package/components/map/components/features/settings/MapSettingsItem.js.map +1 -1
- package/components/map/components/features/settings/MapSettingsPanel.js +6 -20
- package/components/map/components/features/settings/MapSettingsPanel.js.map +1 -1
- package/components/map/components/features/settings/MapSettingsTile.js +87 -61
- package/components/map/components/features/settings/MapSettingsTile.js.map +1 -1
- package/components/map/components/features/settings/ZoomButtons.js +1 -1
- package/components/map/components/features/settings/ZoomButtons.js.map +1 -1
- package/components/map/components/features/settings/builtinSettings/MapTypeSettings.d.ts +38 -1
- package/components/map/components/features/settings/builtinSettings/MapTypeSettings.js +128 -92
- package/components/map/components/features/settings/builtinSettings/MapTypeSettings.js.map +1 -1
- package/components/map/utils/eventHandling.js +9 -9
- package/components/map/utils/eventHandling.js.map +1 -1
- package/components/map/utils/mapUtils.d.ts +6 -6
- package/components/map/utils/mapUtils.js +14 -19
- package/components/map/utils/mapUtils.js.map +1 -1
- package/components/mapMarker/ClusterMapMarker.js +1 -1
- package/components/mapMarker/ClusterMapMarker.js.map +1 -1
- package/components/mapMarker/SingleMapMarker.js +1 -1
- package/components/mapMarker/SingleMapMarker.js.map +1 -1
- package/components/menuItems/MenuItem.js +1 -1
- package/components/menuItems/MenuItem.js.map +1 -1
- package/components/menuItems/MenuItemList.js +1 -1
- package/components/menuItems/MenuItemList.js.map +1 -1
- package/components/navigation/AppNavigationBar.js +4 -4
- package/components/navigation/AppNavigationBar.js.map +1 -1
- package/components/noData/NoData.js +1 -1
- package/components/noData/NoData.js.map +1 -1
- package/components/numberControl/NumberControl.js +4 -4
- package/components/numberControl/NumberControl.js.map +1 -1
- package/components/numberInput/NumberInput.js +1 -1
- package/components/numberInput/NumberInput.js.map +1 -1
- package/components/onboarding/OnboardingTip.js +4 -4
- package/components/onboarding/OnboardingTip.js.map +1 -1
- package/components/page/Page.js +1 -1
- package/components/page/Page.js.map +1 -1
- package/components/pager/Pager.js +1 -1
- package/components/pager/Pager.js.map +1 -1
- package/components/radiobutton/RadioButton.d.ts +1 -1
- package/components/radiobutton/RadioButton.js +5 -5
- package/components/radiobutton/RadioButton.js.map +1 -1
- package/components/radiobutton/RadioCardGroup.d.ts +86 -0
- package/components/radiobutton/RadioCardGroup.js +110 -0
- package/components/radiobutton/RadioCardGroup.js.map +1 -0
- package/components/resizer/Resizer.js +1 -1
- package/components/resizer/Resizer.js.map +1 -1
- package/components/responsiveColumnStripe/ResponsiveColumnStripe.js +1 -1
- package/components/responsiveColumnStripe/ResponsiveColumnStripe.js.map +1 -1
- package/components/rioglyph/Rioglyph.js +1 -1
- package/components/rioglyph/Rioglyph.js.map +1 -1
- package/components/rioglyph/RioglyphIconType.d.ts +1 -1
- package/components/rules/RuleConnector.js +1 -1
- package/components/rules/RuleConnector.js.map +1 -1
- package/components/rules/RuleContainer.js +27 -27
- package/components/rules/RuleContainer.js.map +1 -1
- package/components/saveableInput/SaveableDateInput.js +1 -1
- package/components/saveableInput/SaveableDateInput.js.map +1 -1
- package/components/saveableInput/SaveableInput.js +49 -49
- package/components/saveableInput/SaveableInput.js.map +1 -1
- package/components/searchHighlight/SearchHighlightText.d.ts +28 -0
- package/components/searchHighlight/SearchHighlightText.js +15 -0
- package/components/searchHighlight/SearchHighlightText.js.map +1 -0
- package/components/selects/BaseSelectDropdown.js +1 -1
- package/components/selects/BaseSelectDropdown.js.map +1 -1
- package/components/selects/ClearButton.js +4 -4
- package/components/selects/ClearButton.js.map +1 -1
- package/components/selects/Multiselect.js +6 -6
- package/components/selects/Multiselect.js.map +1 -1
- package/components/selects/MultiselectToggleFilter.js +4 -4
- package/components/selects/MultiselectToggleFilter.js.map +1 -1
- package/components/selects/MultiselectToggleSelection.js +1 -1
- package/components/selects/MultiselectToggleSelection.js.map +1 -1
- package/components/selects/Select.js +6 -6
- package/components/selects/Select.js.map +1 -1
- package/components/selects/SelectFilter.js +1 -1
- package/components/selects/SelectFilter.js.map +1 -1
- package/components/selects/WithFeedbackAndAddon.js +1 -1
- package/components/selects/WithFeedbackAndAddon.js.map +1 -1
- package/components/sidebars/Sidebar.js +54 -54
- package/components/sidebars/Sidebar.js.map +1 -1
- package/components/sidebars/SidebarBackdrop.js +4 -4
- package/components/sidebars/SidebarBackdrop.js.map +1 -1
- package/components/sidebars/SidebarFooter.js +1 -1
- package/components/sidebars/SidebarFooter.js.map +1 -1
- package/components/sidebars/SidebarFullscreenToggle.js +4 -4
- package/components/sidebars/SidebarFullscreenToggle.js.map +1 -1
- package/components/slider/RangeSlider.js +1 -1
- package/components/slider/RangeSlider.js.map +1 -1
- package/components/slider/Slider.js +1 -1
- package/components/slider/Slider.js.map +1 -1
- package/components/smoothScrollbars/SmoothScrollbars.js +1 -1
- package/components/smoothScrollbars/SmoothScrollbars.js.map +1 -1
- package/components/spinner/Spinner.js +5 -4
- package/components/spinner/Spinner.js.map +1 -1
- package/components/states/CustomState.d.ts +69 -1
- package/components/states/CustomState.js +1 -1
- package/components/states/CustomState.js.map +1 -1
- package/components/states/EmptyState.d.ts +1 -1
- package/components/states/EmptyState.js.map +1 -1
- package/components/states/ErrorState.d.ts +1 -1
- package/components/states/ErrorState.js.map +1 -1
- package/components/states/ForbiddenState.d.ts +1 -1
- package/components/states/ForbiddenState.js.map +1 -1
- package/components/states/MaintenanceState.d.ts +1 -1
- package/components/states/MaintenanceState.js.map +1 -1
- package/components/states/NotBookedState.d.ts +1 -1
- package/components/states/NotBookedState.js.map +1 -1
- package/components/states/NotFoundState.d.ts +1 -1
- package/components/states/NotFoundState.js.map +1 -1
- package/components/states/StateButton.js +1 -1
- package/components/states/StateButton.js.map +1 -1
- package/components/statsWidget/StatsWidget.js +1 -1
- package/components/statsWidget/StatsWidget.js.map +1 -1
- package/components/statsWidget/StatsWidgetBody.js +1 -1
- package/components/statsWidget/StatsWidgetBody.js.map +1 -1
- package/components/statsWidget/StatsWidgetFooter.js +1 -1
- package/components/statsWidget/StatsWidgetFooter.js.map +1 -1
- package/components/statsWidget/StatsWidgetHeader.js +1 -1
- package/components/statsWidget/StatsWidgetHeader.js.map +1 -1
- package/components/statsWidget/StatsWidgetNumber.js +2 -2
- package/components/statsWidget/StatsWidgetNumber.js.map +1 -1
- package/components/statsWidget/StatsWidgetSpacer.js +1 -1
- package/components/statsWidget/StatsWidgetSpacer.js.map +1 -1
- package/components/statsWidget/StatsWidgets.js +1 -1
- package/components/statsWidget/StatsWidgets.js.map +1 -1
- package/components/statusBar/StatusBar.d.ts +126 -2
- package/components/statusBar/StatusBar.js +24 -17
- package/components/statusBar/StatusBar.js.map +1 -1
- package/components/statusBar/StatusBarIcon.d.ts +1 -1
- package/components/statusBar/StatusBarIcon.js +4 -4
- package/components/statusBar/StatusBarIcon.js.map +1 -1
- package/components/statusBar/StatusBarLabel.d.ts +1 -1
- package/components/statusBar/StatusBarLabel.js +5 -7
- package/components/statusBar/StatusBarLabel.js.map +1 -1
- package/components/statusBar/StatusBarProgressBar.d.ts +1 -1
- package/components/statusBar/StatusBarProgressBar.js +1 -1
- package/components/statusBar/StatusBarProgressBar.js.map +1 -1
- package/components/steppedProgressBar/SteppedProgressBar.js +1 -1
- package/components/steppedProgressBar/SteppedProgressBar.js.map +1 -1
- package/components/switch/Switch.d.ts +16 -1
- package/components/switch/Switch.js +77 -35
- package/components/switch/Switch.js.map +1 -1
- package/components/table/TableCardsSorting.js +4 -4
- package/components/table/TableCardsSorting.js.map +1 -1
- package/components/table/TableHead.js +1 -1
- package/components/table/TableHead.js.map +1 -1
- package/components/table/TableSearch.js +1 -1
- package/components/table/TableSearch.js.map +1 -1
- package/components/table/TableSettingsColumnButtons.d.ts +1 -1
- package/components/table/TableSettingsColumnButtons.js +1 -1
- package/components/table/TableSettingsColumnButtons.js.map +1 -1
- package/components/table/TableSettingsColumnDetails.d.ts +1 -1
- package/components/table/TableSettingsColumnDetails.js +1 -1
- package/components/table/TableSettingsColumnDetails.js.map +1 -1
- package/components/table/TableSettingsDialog.d.ts +51 -1
- package/components/table/TableSettingsDialog.js +164 -148
- package/components/table/TableSettingsDialog.js.map +1 -1
- package/components/table/TableSettingsDialogFooter.js +1 -1
- package/components/table/TableSettingsDialogFooter.js.map +1 -1
- package/components/table/TableSettingsListContainer.d.ts +1 -1
- package/components/table/TableSettingsListContainer.js.map +1 -1
- package/components/table/TableSettingsListItem.d.ts +1 -1
- package/components/table/TableSettingsListItem.js +8 -8
- package/components/table/TableSettingsListItem.js.map +1 -1
- package/components/table/TableToolbar.js +1 -1
- package/components/table/TableToolbar.js.map +1 -1
- package/components/table/TableViewToggles.js +1 -1
- package/components/table/TableViewToggles.js.map +1 -1
- package/components/tag/Tag.js +1 -1
- package/components/tag/Tag.js.map +1 -1
- package/components/tag/TagList.js +1 -1
- package/components/tag/TagList.js.map +1 -1
- package/components/tagManager/CustomSuggestionItem.js +1 -1
- package/components/tagManager/CustomSuggestionItem.js.map +1 -1
- package/components/tagManager/TagManager.d.ts +14 -2
- package/components/tagManager/TagManager.js +6 -6
- package/components/tagManager/TagManager.js.map +1 -1
- package/components/tagManager/TagManagerItemList.d.ts +1 -1
- package/components/tagManager/TagManagerItemList.js +1 -1
- package/components/tagManager/TagManagerItemList.js.map +1 -1
- package/components/teaser/Teaser.js +1 -1
- package/components/teaser/Teaser.js.map +1 -1
- package/components/teaser/TeaserContainer.js +1 -1
- package/components/teaser/TeaserContainer.js.map +1 -1
- package/components/timepicker/TimePicker.d.ts +20 -0
- package/components/timepicker/TimePicker.js +153 -99
- package/components/timepicker/TimePicker.js.map +1 -1
- package/components/tooltip/Tooltip.js +1 -1
- package/components/tooltip/Tooltip.js.map +1 -1
- package/components/tracker/Tracker.d.ts +85 -0
- package/components/tracker/Tracker.js +54 -0
- package/components/tracker/Tracker.js.map +1 -0
- package/components/tracker/TrackerBlock.d.ts +11 -0
- package/components/tracker/TrackerBlock.js +34 -0
- package/components/tracker/TrackerBlock.js.map +1 -0
- package/components/video/ResponsiveVideo.js +1 -1
- package/components/video/ResponsiveVideo.js.map +1 -1
- package/hooks/useCookies.d.ts +79 -0
- package/hooks/useCookies.js +33 -0
- package/hooks/useCookies.js.map +1 -0
- package/hooks/useInterval.js +5 -5
- package/hooks/useInterval.js.map +1 -1
- package/hooks/useIsFocusWithin.js +3 -3
- package/hooks/useIsFocusWithin.js.map +1 -1
- package/hooks/useLatest.d.ts +16 -0
- package/hooks/useLatest.js +11 -0
- package/hooks/useLatest.js.map +1 -0
- package/hooks/usePostMessage.d.ts +2 -1
- package/hooks/usePostMessage.js.map +1 -1
- package/hooks/useRioCookieConsent.d.ts +49 -0
- package/hooks/useRioCookieConsent.js +44 -0
- package/hooks/useRioCookieConsent.js.map +1 -0
- package/hooks/useSearch.d.ts +1 -1
- package/hooks/useSearch.js +28 -17
- package/hooks/useSearch.js.map +1 -1
- package/hooks/useSearchHighlight.d.ts +60 -0
- package/hooks/useSearchHighlight.js +54 -0
- package/hooks/useSearchHighlight.js.map +1 -0
- package/hooks/useTimeout.js +11 -11
- package/hooks/useTimeout.js.map +1 -1
- package/hooks/useUrlState.d.ts +62 -0
- package/hooks/useUrlState.js +137 -0
- package/hooks/useUrlState.js.map +1 -0
- package/mergeClassNameOverrides.d.ts +1 -0
- package/mergeClassNameOverrides.js +5 -0
- package/mergeClassNameOverrides.js.map +1 -0
- package/package.json +17 -18
- package/routeUtils.js +11 -5
- package/routeUtils.js.map +1 -1
- package/themes/Volkswagen/components/applicationHeader/VolkswagenApplicationHeader.js +1 -1
- package/themes/Volkswagen/components/applicationHeader/VolkswagenApplicationHeader.js.map +1 -1
- package/useCookies.d.ts +2 -0
- package/useCookies.js +5 -0
- package/useCookies.js.map +1 -0
- package/useRioCookieConsent.d.ts +2 -0
- package/useRioCookieConsent.js +5 -0
- package/useRioCookieConsent.js.map +1 -0
- package/useSearchHighlight.d.ts +2 -0
- package/useSearchHighlight.js +6 -0
- package/useSearchHighlight.js.map +1 -0
- package/useUrlState.d.ts +2 -0
- package/useUrlState.js +5 -0
- package/useUrlState.js.map +1 -0
- package/utils/classNames.d.ts +3 -0
- package/utils/classNames.js +5 -0
- package/utils/classNames.js.map +1 -0
- package/utils/mergeClassNameOverrides.d.ts +1 -0
- package/utils/mergeClassNameOverrides.js +55 -0
- package/utils/mergeClassNameOverrides.js.map +1 -0
- package/utils/routeUtils.d.ts +122 -13
- package/utils/routeUtils.js +89 -31
- package/utils/routeUtils.js.map +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.js.map +1 -1
- package/components/states/BaseStateProps.d.ts +0 -70
- package/components/statusBar/StatusBarProps.d.ts +0 -127
- package/components/table/TableSettingsDialog.types.d.ts +0 -39
- package/components/tagManager/TagManagerTag.d.ts +0 -14
|
@@ -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 * 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":"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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":"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"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { jsx as e } from "react/jsx-runtime";
|
|
2
|
-
import m from "
|
|
3
|
-
import
|
|
2
|
+
import { withRioglyphPrefix as m } from "./treeUtils.js";
|
|
3
|
+
import a from "../../utils/classNames.js";
|
|
4
4
|
const p = [".png", ".webp", ".jpg", ".jpeg", ".svg"], d = ({ icon: t, expandedIcon: o, isOpen: i }) => {
|
|
5
5
|
const s = i && o || t;
|
|
6
6
|
if (!s)
|
|
7
7
|
return null;
|
|
8
8
|
if (p.some((c) => s.toLowerCase().endsWith(c)))
|
|
9
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 =
|
|
10
|
+
const n = m(s), r = a("rioglyph", n);
|
|
11
11
|
return /* @__PURE__ */ e("span", { className: r });
|
|
12
12
|
};
|
|
13
13
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeIcon.js","sources":["../../../src/components/assetTree/TreeIcon.tsx"],"sourcesContent":["import
|
|
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,7 +1,7 @@
|
|
|
1
1
|
import { jsxs as o, jsx as a, Fragment as u } from "react/jsx-runtime";
|
|
2
2
|
import N from "react";
|
|
3
|
-
import h from "
|
|
4
|
-
import
|
|
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
6
|
import T from "../radiobutton/RadioButton.js";
|
|
7
7
|
import i from "./TreeIcon.js";
|
|
@@ -11,7 +11,7 @@ const I = (n) => {
|
|
|
11
11
|
const e = n.icon ?? n.type, c = n.pairIcon === null ? null : n.pairIcon ?? n.subType ?? null;
|
|
12
12
|
return { primaryIcon: e, subIcon: c };
|
|
13
13
|
}, j = N.memo((n) => {
|
|
14
|
-
const { item: e, hasMultiselect: c, showRadioButtons: m, isSelected: s, onSelectItem: t, onActiveItem: p } = n, d =
|
|
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
17
|
s && "active",
|
|
@@ -27,7 +27,7 @@ const I = (n) => {
|
|
|
27
27
|
/* @__PURE__ */ a(i, { icon: l })
|
|
28
28
|
] }),
|
|
29
29
|
/* @__PURE__ */ o("span", { className: "TreeLabelNameText", children: [
|
|
30
|
-
/* @__PURE__ */ a("span", { className: "TreeLabelNameTextHeadline", 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
|
|
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;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeNode.js","sources":["../../../src/components/assetTree/TreeNode.tsx"],"sourcesContent":["import React from 'react';\nimport classNames from '
|
|
1
|
+
{"version":3,"file":"TreeNode.js","sources":["../../../src/components/assetTree/TreeNode.tsx"],"sourcesContent":["import React from 'react';\n\nimport classNames from '../../utils/classNames';\nimport Checkbox from '../checkbox/Checkbox';\nimport type { GroupedItem } from './Tree';\nimport TreeIcon from './TreeIcon';\n\nexport type TreeNodeProps = {\n node: GroupedItem;\n hasMultiselect?: boolean;\n isSelected?: boolean;\n isOpen?: boolean;\n isIndeterminate?: boolean;\n onToggleNode: (nodeId: string) => void;\n onSelect: (node: GroupedItem, isIndeterminate: boolean) => void;\n className?: string;\n};\n\nconst TreeNode = React.memo((props: TreeNodeProps) => {\n const {\n node,\n hasMultiselect = false,\n isSelected = false,\n isOpen = false,\n isIndeterminate = false,\n onToggleNode,\n onSelect,\n } = props;\n\n const treeNodeClassNames = classNames(\n 'TreeNode',\n 'from-group',\n isSelected && 'checked',\n node.className && node.className\n );\n\n const hasChildren = !!node.items.length;\n\n const handleNodeSelection = () => {\n onSelect(node, isIndeterminate);\n };\n\n const handleContainerClick = (event: React.MouseEvent<HTMLDivElement>) => {\n // Ignore clicks on checkboxes and don't expand or collapse on checkbox clicks\n const isCheckbox = (event.target as HTMLElement).closest('.TreeCheckbox');\n if (isCheckbox) {\n return;\n }\n\n if (hasChildren) {\n onToggleNode(node.id);\n }\n };\n\n return (\n <div className={treeNodeClassNames} data-key={node.id} onClick={handleContainerClick}>\n {hasMultiselect && (\n <Checkbox\n className='TreeCheckbox'\n checked={isSelected}\n disabled={node.disabled}\n indeterminate={isIndeterminate}\n onClick={handleNodeSelection}\n />\n )}\n <span className='TreeLabel TreeLabelName'>\n <TreeIcon icon={node.icon} expandedIcon={node.expandedIcon} isOpen={isOpen} />\n <span className='TreeLabelNameText'>\n <span className='TreeLabelNameTextHeadline'>{node.name}</span>\n </span>\n <span className='TreeLabelCount label label-muted label-filled label-condensed'>\n {node.items.length}\n </span>\n <span\n className={`TreeLabelExpander rioglyph rioglyph-chevron-down ${\n hasChildren ? '' : 'text-color-light'\n }`}\n />\n </span>\n </div>\n );\n});\n\nexport default TreeNode;\n"],"names":["TreeNode","React","props","node","hasMultiselect","isSelected","isOpen","isIndeterminate","onToggleNode","onSelect","treeNodeClassNames","classNames","hasChildren","handleNodeSelection","handleContainerClick","event","jsxs","jsx","Checkbox","TreeIcon"],"mappings":";;;;;AAkBA,MAAMA,IAAWC,EAAM,KAAK,CAACC,MAAyB;AAClD,QAAM;AAAA,IACF,MAAAC;AAAA,IACA,gBAAAC,IAAiB;AAAA,IACjB,YAAAC,IAAa;AAAA,IACb,QAAAC,IAAS;AAAA,IACT,iBAAAC,IAAkB;AAAA,IAClB,cAAAC;AAAA,IACA,UAAAC;AAAA,EAAA,IACAP,GAEEQ,IAAqBC;AAAA,IACvB;AAAA,IACA;AAAA,IACAN,KAAc;AAAA,IACdF,EAAK,aAAaA,EAAK;AAAA,EAAA,GAGrBS,IAAc,CAAC,CAACT,EAAK,MAAM,QAE3BU,IAAsB,MAAM;AAC9B,IAAAJ,EAASN,GAAMI,CAAe;AAAA,EAClC,GAEMO,IAAuB,CAACC,MAA4C;AAGtE,IADoBA,EAAM,OAAuB,QAAQ,eAAe,KAKpEH,KACAJ,EAAaL,EAAK,EAAE;AAAA,EAE5B;AAEA,SACI,gBAAAa,EAAC,SAAI,WAAWN,GAAoB,YAAUP,EAAK,IAAI,SAASW,GAC3D,UAAA;AAAA,IAAAV,KACG,gBAAAa;AAAA,MAACC;AAAA,MAAA;AAAA,QACG,WAAU;AAAA,QACV,SAASb;AAAA,QACT,UAAUF,EAAK;AAAA,QACf,eAAeI;AAAA,QACf,SAASM;AAAA,MAAA;AAAA,IAAA;AAAA,IAGjB,gBAAAG,EAAC,QAAA,EAAK,WAAU,2BACZ,UAAA;AAAA,MAAA,gBAAAC,EAACE,KAAS,MAAMhB,EAAK,MAAM,cAAcA,EAAK,cAAc,QAAAG,GAAgB;AAAA,MAC5E,gBAAAW,EAAC,QAAA,EAAK,WAAU,qBACZ,UAAA,gBAAAA,EAAC,UAAK,WAAU,6BAA6B,UAAAd,EAAK,KAAA,CAAK,EAAA,CAC3D;AAAA,wBACC,QAAA,EAAK,WAAU,iEACX,UAAAA,EAAK,MAAM,QAChB;AAAA,MACA,gBAAAc;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,WAAW,oDACPL,IAAc,KAAK,kBACvB;AAAA,QAAA;AAAA,MAAA;AAAA,IACJ,EAAA,CACJ;AAAA,EAAA,GACJ;AAER,CAAC;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeNodeContainer.js","sources":["../../../src/components/assetTree/TreeNodeContainer.tsx"],"sourcesContent":["import type { PropsWithChildren } from 'react';\nimport classNames from '
|
|
1
|
+
{"version":3,"file":"TreeNodeContainer.js","sources":["../../../src/components/assetTree/TreeNodeContainer.tsx"],"sourcesContent":["import type { PropsWithChildren } from 'react';\nimport classNames from '../../utils/classNames';\n\nexport type TreeNodeContainerProps = {\n isOpen: boolean;\n groupId?: string;\n disableAnimation: boolean;\n};\n\nconst TreeNodeContainer = (props: PropsWithChildren<TreeNodeContainerProps>) => {\n const { isOpen, groupId, disableAnimation, children } = props;\n\n const treeNodeContainerClasses = classNames(\n 'TreeNodeContainer',\n 'user-select-none overflow-hidden',\n isOpen && 'open'\n );\n\n return (\n <div className={treeNodeContainerClasses} data-id={groupId}>\n {children}\n </div>\n );\n};\n\nexport default TreeNodeContainer;\n"],"names":["TreeNodeContainer","props","isOpen","groupId","disableAnimation","children","treeNodeContainerClasses","classNames"],"mappings":";;AASA,MAAMA,IAAoB,CAACC,MAAqD;AAC5E,QAAM,EAAE,QAAAC,GAAQ,SAAAC,GAAS,kBAAAC,GAAkB,UAAAC,MAAaJ,GAElDK,IAA2BC;AAAA,IAC7B;AAAA,IACA;AAAA,IACAL,KAAU;AAAA,EAAA;AAGd,2BACK,OAAA,EAAI,WAAWI,GAA0B,WAASH,GAC9C,UAAAE,GACL;AAER;"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsxs as c, jsx as e } from "react/jsx-runtime";
|
|
2
|
-
import l from "
|
|
3
|
-
import
|
|
2
|
+
import { noop as l } from "es-toolkit/function";
|
|
3
|
+
import p from "../../utils/classNames.js";
|
|
4
4
|
import m from "../switch/Switch.js";
|
|
5
5
|
const x = (s) => {
|
|
6
|
-
const { isChecked: n = !1, className: o, label: t, onChange: a =
|
|
6
|
+
const { isChecked: n = !1, className: o, label: t, onChange: a = l, ...r } = s, i = p(
|
|
7
7
|
"TreeOption",
|
|
8
8
|
"display-flex",
|
|
9
9
|
"justify-content-start",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeOption.js","sources":["../../../src/components/assetTree/TreeOption.tsx"],"sourcesContent":["import type React from 'react';\nimport
|
|
1
|
+
{"version":3,"file":"TreeOption.js","sources":["../../../src/components/assetTree/TreeOption.tsx"],"sourcesContent":["import type React from 'react';\nimport { noop } from 'es-toolkit/function';\n\nimport classNames from '../../utils/classNames';\nimport Switch from '../switch/Switch';\n\nexport type TreeOptionProps = {\n /**\n * Defines whether the option is set.\n *\n * @default false\n */\n isChecked?: boolean;\n\n /**\n * Callback triggered when option is selected.\n * @param event\n * @returns\n */\n onChange?: (event: React.MouseEvent<HTMLDivElement>) => void;\n\n /**\n * The label for the option.\n */\n label: string | React.ReactNode;\n\n /**\n * Additional classes added to the wrapping element.\n */\n className?: string;\n};\n\nconst TreeOption = (props: TreeOptionProps) => {\n const { isChecked = false, className, label, onChange = noop, ...remainingProps } = props;\n\n const optionClasses = classNames(\n 'TreeOption',\n 'display-flex',\n 'justify-content-start',\n 'align-items-center',\n 'gap-10',\n 'cursor-pointer',\n className\n );\n\n return (\n <div {...remainingProps} className={optionClasses} onClick={onChange}>\n <span className='flex-1-1'>{label}</span>\n <span className='pointer-events-none scale-80'>\n <Switch keyName='TreeOption-switch' checked={isChecked} />\n </span>\n </div>\n );\n};\n\nexport default TreeOption;\n"],"names":["TreeOption","props","isChecked","className","label","onChange","noop","remainingProps","optionClasses","classNames","jsx","Switch"],"mappings":";;;;AAgCA,MAAMA,IAAa,CAACC,MAA2B;AAC3C,QAAM,EAAE,WAAAC,IAAY,IAAO,WAAAC,GAAW,OAAAC,GAAO,UAAAC,IAAWC,GAAM,GAAGC,EAAA,IAAmBN,GAE9EO,IAAgBC;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACAN;AAAA,EAAA;AAGJ,2BACK,OAAA,EAAK,GAAGI,GAAgB,WAAWC,GAAe,SAASH,GACxD,UAAA;AAAA,IAAA,gBAAAK,EAAC,QAAA,EAAK,WAAU,YAAY,UAAAN,GAAM;AAAA,IAClC,gBAAAM,EAAC,QAAA,EAAK,WAAU,gCACZ,UAAA,gBAAAA,EAACC,KAAO,SAAQ,qBAAoB,SAAST,EAAA,CAAW,EAAA,CAC5D;AAAA,EAAA,GACJ;AAER;"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { jsx as o } from "react/jsx-runtime";
|
|
2
|
-
import l from "
|
|
3
|
-
import
|
|
2
|
+
import { isEmpty as l } from "es-toolkit/compat";
|
|
3
|
+
import p from "../../utils/classNames.js";
|
|
4
4
|
import a from "../dropdown/ButtonDropdown.js";
|
|
5
5
|
import d from "../tooltip/SimpleTooltip.js";
|
|
6
6
|
const w = (i) => {
|
|
7
7
|
const { treeOptions: e = [], treeOptionsTooltip: t, className: s } = i;
|
|
8
|
-
if (
|
|
8
|
+
if (l(e))
|
|
9
9
|
return null;
|
|
10
|
-
const n =
|
|
10
|
+
const n = p("display-flex flex-column gap-10", "width-250", "padding-15", s), r = /* @__PURE__ */ o(
|
|
11
11
|
a,
|
|
12
12
|
{
|
|
13
13
|
title: /* @__PURE__ */ o("span", { className: "rioglyph rioglyph-option-vertical", "aria-hidden": "true" }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeOptions.js","sources":["../../../src/components/assetTree/TreeOptions.tsx"],"sourcesContent":["import type React from 'react';\nimport
|
|
1
|
+
{"version":3,"file":"TreeOptions.js","sources":["../../../src/components/assetTree/TreeOptions.tsx"],"sourcesContent":["import type React from 'react';\nimport { isEmpty } from 'es-toolkit/compat';\n\nimport classNames from '../../utils/classNames';\nimport ButtonDropdown from '../dropdown/ButtonDropdown';\nimport SimpleTooltip from '../tooltip/SimpleTooltip';\n\nexport type TreeOptionsProps = {\n treeOptions?: React.ReactNode[];\n treeOptionsTooltip?: React.ReactNode;\n className?: string;\n};\n\nconst TreeOptions = (props: TreeOptionsProps) => {\n const { treeOptions = [], treeOptionsTooltip, className } = props;\n\n if (isEmpty(treeOptions)) {\n return null;\n }\n\n const dropdownClasses = classNames('display-flex flex-column gap-10', 'width-250', 'padding-15', className);\n\n const customDropdown = <div className={dropdownClasses}>{treeOptions}</div>;\n\n const dropdown = (\n <ButtonDropdown\n title={<span className='rioglyph rioglyph-option-vertical' aria-hidden='true' />}\n bsStyle='default'\n bsSize='sm'\n customDropdown={customDropdown}\n toggleClassName='hover-bg-white border-none text-color-gray hover-text-color-dark'\n className='TreeHeaderOptions height-20'\n pullRight\n iconOnly\n />\n );\n\n if (treeOptionsTooltip) {\n return (\n <SimpleTooltip\n content={treeOptionsTooltip}\n placement='bottom-end'\n delay={{ show: 1000, hide: 0 }}\n popperConfig={{\n modifiers: [\n {\n name: 'offset',\n options: {\n offset: [10, 5],\n },\n },\n {\n name: 'arrow',\n options: {},\n },\n ],\n }}\n >\n <div>{dropdown}</div>\n </SimpleTooltip>\n );\n }\n\n return dropdown;\n};\n\nexport default TreeOptions;\n"],"names":["TreeOptions","props","treeOptions","treeOptionsTooltip","className","isEmpty","dropdownClasses","classNames","dropdown","jsx","ButtonDropdown","SimpleTooltip"],"mappings":";;;;;AAaA,MAAMA,IAAc,CAACC,MAA4B;AAC7C,QAAM,EAAE,aAAAC,IAAc,CAAA,GAAI,oBAAAC,GAAoB,WAAAC,MAAcH;AAE5D,MAAII,EAAQH,CAAW;AACnB,WAAO;AAGX,QAAMI,IAAkBC,EAAW,mCAAmC,aAAa,cAAcH,CAAS,GAIpGI,IACF,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACG,OAAO,gBAAAD,EAAC,QAAA,EAAK,WAAU,qCAAoC,eAAY,QAAO;AAAA,MAC9E,SAAQ;AAAA,MACR,QAAO;AAAA,MACP,gBAPe,gBAAAA,EAAC,OAAA,EAAI,WAAWH,GAAkB,UAAAJ,GAAY;AAAA,MAQ7D,iBAAgB;AAAA,MAChB,WAAU;AAAA,MACV,WAAS;AAAA,MACT,UAAQ;AAAA,IAAA;AAAA,EAAA;AAIhB,SAAIC,IAEI,gBAAAM;AAAA,IAACE;AAAA,IAAA;AAAA,MACG,SAASR;AAAA,MACT,WAAU;AAAA,MACV,OAAO,EAAE,MAAM,KAAM,MAAM,EAAA;AAAA,MAC3B,cAAc;AAAA,QACV,WAAW;AAAA,UACP;AAAA,YACI,MAAM;AAAA,YACN,SAAS;AAAA,cACL,QAAQ,CAAC,IAAI,CAAC;AAAA,YAAA;AAAA,UAClB;AAAA,UAEJ;AAAA,YACI,MAAM;AAAA,YACN,SAAS,CAAA;AAAA,UAAC;AAAA,QACd;AAAA,MACJ;AAAA,MAGJ,UAAA,gBAAAM,EAAC,SAAK,UAAAD,EAAA,CAAS;AAAA,IAAA;AAAA,EAAA,IAKpBA;AACX;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as a } from "react/jsx-runtime";
|
|
2
|
-
import l from "
|
|
3
|
-
import
|
|
2
|
+
import { useAutoAnimate as l } from "@formkit/auto-animate/react";
|
|
3
|
+
import m from "../../utils/classNames.js";
|
|
4
4
|
const u = ({ maxHeight: e, disableAnimation: o, children: t }) => {
|
|
5
|
-
const s =
|
|
5
|
+
const s = m("TreeRoot", "user-select-none", e ? "overflow-auto" : "overflow-hidden"), [r, n] = l();
|
|
6
6
|
return n(!o), /* @__PURE__ */ a("div", { ref: r, className: s, style: { maxHeight: e }, children: t });
|
|
7
7
|
};
|
|
8
8
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeRoot.js","sources":["../../../src/components/assetTree/TreeRoot.tsx"],"sourcesContent":["import type { PropsWithChildren } from 'react';\nimport
|
|
1
|
+
{"version":3,"file":"TreeRoot.js","sources":["../../../src/components/assetTree/TreeRoot.tsx"],"sourcesContent":["import type { PropsWithChildren } from 'react';\nimport { useAutoAnimate } from '@formkit/auto-animate/react';\n\nimport classNames from '../../utils/classNames';\n\nexport type TreeRootProps = {\n disableAnimation: boolean;\n maxHeight?: number;\n};\n\nconst TreeRoot = ({ maxHeight, disableAnimation, children }: PropsWithChildren<TreeRootProps>) => {\n const treeRootClasses = classNames('TreeRoot', 'user-select-none', maxHeight ? 'overflow-auto' : 'overflow-hidden');\n\n const [parent, enableAnimations] = useAutoAnimate();\n enableAnimations(!disableAnimation);\n\n return (\n <div ref={parent} className={treeRootClasses} style={{ maxHeight }}>\n {children}\n </div>\n );\n};\n\nexport default TreeRoot;\n"],"names":["TreeRoot","maxHeight","disableAnimation","children","treeRootClasses","classNames","parent","enableAnimations","useAutoAnimate","jsx"],"mappings":";;;AAUA,MAAMA,IAAW,CAAC,EAAE,WAAAC,GAAW,kBAAAC,GAAkB,UAAAC,QAAiD;AAC9F,QAAMC,IAAkBC,EAAW,YAAY,oBAAoBJ,IAAY,kBAAkB,iBAAiB,GAE5G,CAACK,GAAQC,CAAgB,IAAIC,EAAA;AACnC,SAAAD,EAAiB,CAACL,CAAgB,GAG9B,gBAAAO,EAAC,OAAA,EAAI,KAAKH,GAAQ,WAAWF,GAAiB,OAAO,EAAE,WAAAH,EAAA,GAClD,UAAAE,EAAA,CACL;AAER;"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { jsx as e, jsxs as m } from "react/jsx-runtime";
|
|
2
2
|
import n from "react";
|
|
3
|
-
import p from "
|
|
4
|
-
import
|
|
3
|
+
import { noop as p } from "es-toolkit/function";
|
|
4
|
+
import i from "../../utils/classNames.js";
|
|
5
5
|
import t from "../clearableInput/ClearableInput.js";
|
|
6
6
|
const g = n.memo((a) => {
|
|
7
|
-
const { value: r, className: s, placeholder: o, onChange: l =
|
|
7
|
+
const { value: r, className: s, placeholder: o, onChange: l = p } = a, c = i("TreeSearch", s);
|
|
8
8
|
return /* @__PURE__ */ e("div", { className: c, children: /* @__PURE__ */ m("div", { className: "input-group flex-1-0", children: [
|
|
9
9
|
/* @__PURE__ */ e("span", { className: "input-group-addon", children: /* @__PURE__ */ e("span", { className: "rioglyph rioglyph-search", "aria-hidden": "true" }) }),
|
|
10
10
|
/* @__PURE__ */ e(t, { value: r, onChange: l, placeholder: o })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeSearch.js","sources":["../../../src/components/assetTree/TreeSearch.tsx"],"sourcesContent":["import React from 'react';\nimport
|
|
1
|
+
{"version":3,"file":"TreeSearch.js","sources":["../../../src/components/assetTree/TreeSearch.tsx"],"sourcesContent":["import React from 'react';\nimport { noop } from 'es-toolkit/function';\n\nimport classNames from '../../utils/classNames';\nimport ClearableInput from '../clearableInput/ClearableInput';\n\nexport type TreeSearchProps = {\n /**\n * The search value to be shown and used for the search.\n */\n value?: string;\n\n /**\n * Callback for when the search value changes.\n *\n * @default () => {}\n * @param newValue\n * @param event\n * @returns\n */\n onChange?: (newValue: string, event: React.ChangeEvent | React.MouseEvent) => void;\n\n /**\n * The placeholder text used for the input field.\n */\n placeholder?: string;\n\n /**\n * Additional classes added to the wrapping element.\n */\n className?: string;\n};\n\nconst TreeSearch = React.memo((props: TreeSearchProps) => {\n const { value, className, placeholder, onChange = noop } = props;\n\n const classes = classNames('TreeSearch', className);\n\n return (\n <div className={classes}>\n <div className='input-group flex-1-0'>\n <span className='input-group-addon'>\n <span className='rioglyph rioglyph-search' aria-hidden='true' />\n </span>\n <ClearableInput value={value} onChange={onChange} placeholder={placeholder} />\n </div>\n </div>\n );\n});\n\nexport default TreeSearch;\n"],"names":["TreeSearch","React","props","value","className","placeholder","onChange","noop","classes","classNames","jsxs","jsx","ClearableInput"],"mappings":";;;;;AAiCA,MAAMA,IAAaC,EAAM,KAAK,CAACC,MAA2B;AACtD,QAAM,EAAE,OAAAC,GAAO,WAAAC,GAAW,aAAAC,GAAa,UAAAC,IAAWC,MAASL,GAErDM,IAAUC,EAAW,cAAcL,CAAS;AAElD,2BACK,OAAA,EAAI,WAAWI,GACZ,UAAA,gBAAAE,EAAC,OAAA,EAAI,WAAU,wBACX,UAAA;AAAA,IAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,qBACZ,UAAA,gBAAAA,EAAC,UAAK,WAAU,4BAA2B,eAAY,OAAA,CAAO,EAAA,CAClE;AAAA,IACA,gBAAAA,EAACC,GAAA,EAAe,OAAAT,GAAc,UAAAG,GAAoB,aAAAD,EAAA,CAA0B;AAAA,EAAA,EAAA,CAChF,EAAA,CACJ;AAER,CAAC;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs as m, jsx as e } from "react/jsx-runtime";
|
|
2
2
|
import l from "react";
|
|
3
3
|
import { noop as c } from "es-toolkit/function";
|
|
4
|
-
import t from "
|
|
4
|
+
import t from "../../utils/classNames.js";
|
|
5
5
|
import n from "./TreeSidebarCategories.js";
|
|
6
6
|
const h = l.memo((a) => {
|
|
7
7
|
const { className: s, onClick: r = c, ...o } = a, i = t("TreeSidebar", s);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeSidebar.js","sources":["../../../src/components/assetTree/TreeSidebar.tsx"],"sourcesContent":["import React from 'react';\nimport { noop } from 'es-toolkit/function';\nimport classNames from '
|
|
1
|
+
{"version":3,"file":"TreeSidebar.js","sources":["../../../src/components/assetTree/TreeSidebar.tsx"],"sourcesContent":["import React from 'react';\nimport { noop } from 'es-toolkit/function';\n\nimport classNames from '../../utils/classNames';\nimport TreeSidebarCategories from './TreeSidebarCategories';\nimport type { TreeCategoryNode } from './TreeCategory';\n\nexport type TreeSidebarProps = {\n currentCategoryId?: string;\n onSelectCategory?: (selectedCategory: string) => void;\n onClick?: VoidFunction;\n className?: string;\n children?: TreeCategoryNode[];\n};\n\nconst TreeSidebar = React.memo((props: TreeSidebarProps) => {\n const { className, onClick = noop, ...remainingProps } = props;\n\n const classes = classNames('TreeSidebar', className);\n\n return (\n <div className={classes}>\n <ul className='TreeSidebarNavigation' onClick={onClick}>\n <TreeSidebarCategories {...remainingProps} />\n </ul>\n <div className='TreeSidebarToggle' onClick={onClick}>\n <span className='rioglyph rioglyph-chevron-left' />\n </div>\n </div>\n );\n});\n\nexport default TreeSidebar;\n"],"names":["TreeSidebar","React","props","className","onClick","noop","remainingProps","classes","classNames","jsxs","jsx","TreeSidebarCategories"],"mappings":";;;;;AAeA,MAAMA,IAAcC,EAAM,KAAK,CAACC,MAA4B;AACxD,QAAM,EAAE,WAAAC,GAAW,SAAAC,IAAUC,GAAM,GAAGC,MAAmBJ,GAEnDK,IAAUC,EAAW,eAAeL,CAAS;AAEnD,SACI,gBAAAM,EAAC,OAAA,EAAI,WAAWF,GACZ,UAAA;AAAA,IAAA,gBAAAG,EAAC,MAAA,EAAG,WAAU,yBAAwB,SAAAN,GAClC,4BAACO,GAAA,EAAuB,GAAGL,GAAgB,EAAA,CAC/C;AAAA,IACA,gBAAAI,EAAC,SAAI,WAAU,qBAAoB,SAAAN,GAC/B,UAAA,gBAAAM,EAAC,QAAA,EAAK,WAAU,iCAAA,CAAiC,EAAA,CACrD;AAAA,EAAA,GACJ;AAER,CAAC;"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { jsx as e, Fragment as g } from "react/jsx-runtime";
|
|
2
|
-
import h from "
|
|
3
|
-
import
|
|
2
|
+
import { noop as h } from "es-toolkit/function";
|
|
3
|
+
import C from "../../utils/classNames.js";
|
|
4
4
|
import u from "../overlay/OverlayTrigger.js";
|
|
5
5
|
import s from "../tooltip/Tooltip.js";
|
|
6
6
|
const y = "active", S = "selected", f = 1500, _ = (l) => {
|
|
7
|
-
const { children: r, currentCategoryId: c, onSelectCategory: i =
|
|
7
|
+
const { children: r, currentCategoryId: c, onSelectCategory: i = h } = l;
|
|
8
8
|
return r ? /* @__PURE__ */ e(g, { children: r.map((o) => {
|
|
9
|
-
const t = o.props.id, p = o.props.icon || "", a = o.props.label, m =
|
|
9
|
+
const t = o.props.id, p = o.props.icon || "", a = o.props.label, m = C(
|
|
10
10
|
c === t ? y : "",
|
|
11
11
|
o.props.hasSelection && S
|
|
12
12
|
), n = /* @__PURE__ */ e("li", { onClick: (d) => {
|