@rio-cloud/rio-uikit 2.1.0 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +170 -154
- 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 +8 -8
- package/components/table/TableSettingsListContainer.js.map +1 -1
- package/components/table/TableSettingsListItem.d.ts +1 -1
- package/components/table/TableSettingsListItem.js +26 -26
- 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 O, jsx as b } from "react/jsx-runtime";
|
|
2
2
|
import { useState as p, useEffect as f } from "react";
|
|
3
|
-
import v from "classnames";
|
|
4
3
|
import { noop as W, compact as h, isEmpty as d } from "es-toolkit/compat";
|
|
5
|
-
import { isEqual as
|
|
4
|
+
import { isEqual as v } from "es-toolkit/predicate";
|
|
5
|
+
import N from "../../utils/classNames.js";
|
|
6
6
|
import { AutoSuggest as _ } from "../autosuggest/AutoSuggest.js";
|
|
7
7
|
import k from "./CustomSuggestionItem.js";
|
|
8
8
|
import z from "./TagManagerItemList.js";
|
|
@@ -61,15 +61,15 @@ const B = (e, t) => ({
|
|
|
61
61
|
return;
|
|
62
62
|
}
|
|
63
63
|
m([...a, n]);
|
|
64
|
-
}, P = (o, r) => o.map((n) => (
|
|
65
|
-
o.toAdd ? m(a.filter((r) => !
|
|
64
|
+
}, P = (o, r) => o.map((n) => (v(n.label, r.label) && (n.toRemove ? delete n.toRemove : n.toRemove = !0), n)), V = (o) => {
|
|
65
|
+
o.toAdd ? m(a.filter((r) => !v(r, o))) : m(P(a, o));
|
|
66
66
|
}, j = {
|
|
67
67
|
className: "",
|
|
68
68
|
placeholder: l || "Start typing ...",
|
|
69
69
|
value: c,
|
|
70
70
|
tabIndex: 1
|
|
71
|
-
}, q =
|
|
72
|
-
return /* @__PURE__ */ O("div", { ...y, className:
|
|
71
|
+
}, q = N(!d(a) && "margin-bottom-10");
|
|
72
|
+
return /* @__PURE__ */ O("div", { ...y, className: N("TagManager", u), children: [
|
|
73
73
|
x && /* @__PURE__ */ b(
|
|
74
74
|
_,
|
|
75
75
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TagManager.js","sources":["../../../src/components/tagManager/TagManager.tsx"],"sourcesContent":["import type React from 'react';\nimport { useEffect, useState } from 'react';\nimport classNames from 'classnames';\nimport { compact, isEmpty, noop } from 'es-toolkit/compat';\nimport { isEqual } from 'es-toolkit/predicate';\n\nimport AutoSuggest, { type AutoSuggestProps, type AutoSuggestSuggestion } from '../autosuggest/AutoSuggest';\nimport CustomSuggestionItem from './CustomSuggestionItem';\nimport TagManagerItemList from './TagManagerItemList';\nimport type { TagManagerTag } from './TagManagerTag';\n\nconst getCustomSuggestion = (value: string, placeholder: string | undefined): AutoSuggestSuggestion => ({\n customSuggestion: <CustomSuggestionItem value={value} placeholder={placeholder} />,\n label: value,\n disabled: isEmpty(value),\n});\n\nconst getSuggestionSeparator = (dropdownSeparatorText: string): AutoSuggestSuggestion => ({\n header: true,\n label: dropdownSeparatorText,\n});\n\nconst cleanupTagState = (tag: TagManagerTag): TagManagerTag => {\n delete tag.toAdd;\n delete tag.toRemove;\n return tag;\n};\n\nconst hasTagAlreadySelected = (tags: TagManagerTag[], newSuggestion: AutoSuggestSuggestion) =>\n !!tags.find(tag => tag.label === newSuggestion.label);\n\nconst getNewSuggestion = (suggestion: AutoSuggestSuggestion) => {\n const newSuggestion = suggestion.customSuggestion ? { label: suggestion.label } : suggestion;\n newSuggestion.toAdd = true;\n return newSuggestion;\n};\n\nconst buildSuggestions =\n (useCustomTags: boolean, customTagPlaceholder: string | undefined, dropdownSeparatorText: string | undefined) =>\n (value: string, suggestions: TagManagerTag[]): AutoSuggestSuggestion[] => {\n const cleanedSuggestions = suggestions.map(cleanupTagState).filter(item => item.label);\n const hasDropdownSeparatorText = typeof dropdownSeparatorText === 'string' && !isEmpty(dropdownSeparatorText);\n\n return compact([\n useCustomTags && getCustomSuggestion(value, customTagPlaceholder),\n useCustomTags &&\n !isEmpty(cleanedSuggestions) &&\n hasDropdownSeparatorText &&\n getSuggestionSeparator(dropdownSeparatorText),\n ...(cleanedSuggestions as unknown as AutoSuggestSuggestion[]),\n ]);\n };\n\nconst filterSuggestions = (suggestions: AutoSuggestSuggestion[], selectedTagNames: string[], value = '') =>\n suggestions.filter(suggestion => {\n const label = suggestion.label;\n if (!label) {\n return false;\n }\n const lowerCaseLabel = label.toLowerCase();\n const lowerCaseValue = value.toLowerCase();\n return (\n lowerCaseLabel.includes(lowerCaseValue) &&\n !selectedTagNames.includes(label) &&\n !suggestion.header &&\n !suggestion.customSuggestion\n );\n });\n\nexport type { TagManagerTag } from './TagManagerTag';\n\nexport type TagManagerProps = {\n /**\n * The list of existing tags to be listed.\n */\n tagList: TagManagerTag[];\n\n /**\n * The list of tags used as suggestions for the built-in AutoSuggest.\n */\n tagSuggestions: TagManagerTag[];\n\n /**\n * Callback function triggered when the list of tags changes.\n *\n * For instance when a tag was added by the AutoSuggest or when a tag is marked to be deleted.\n *\n * This function returns the updated list of tags where tags may have additional properties indicating whether they\n * have to be removed or added to your data.\n *\n * @param newTags The updated list of tags.\n * \n * @example\n * [\n {\n label: 'Foo',\n },\n {\n label: 'Bar',\n toAdd: true,\n },\n {\n label: 'Lorem ipsum',\n toRemove: true,\n }\n ]\n */\n onTagListChange?: (newTags: TagManagerTag[]) => void;\n\n /**\n * The placeholder message for the AutoSuggest input.\n */\n placeholder?: string;\n\n /**\n * The placeholder message for custom tag in the AutoSuggest dropdown.\n *\n * This is only relevant when having custom tags enabled.\n */\n customTagPlaceholder?: string;\n\n /**\n * The header message for existing tags in the AutoSuggest dropdown.\n *\n * This is only relevant when having custom tags enabled.\n */\n dropdownSeparatorText?: string;\n\n /**\n * Enables or disabled to add custom tags from the AutoSuggest dropdown.\n *\n * @default true\n */\n useCustomTags?: boolean;\n\n /**\n * Define whether the input shall be shown and to allow to select tags.\n *\n * @default true\n */\n showInput?: boolean;\n\n /**\n * The message to be shown when no tag suggestion could be found for the entered value of the AutoSuggest.\n */\n noItemMessage?: string | React.ReactNode;\n\n /**\n * Additional classes to be set on the wrapper element.\n */\n className?: string;\n};\n\nconst TagManager = (props: TagManagerProps) => {\n const {\n tagList,\n tagSuggestions,\n placeholder,\n className,\n customTagPlaceholder,\n dropdownSeparatorText,\n onTagListChange = noop,\n useCustomTags = true,\n noItemMessage,\n showInput = true,\n ...remainingProps\n } = props;\n\n const [tags, setTags] = useState(tagList);\n const [inputValue, setInputValue] = useState('');\n const [currentSuggestions, setCurrentSuggestions] = useState([] as AutoSuggestSuggestion[]);\n\n const getSuggestions = buildSuggestions(useCustomTags, customTagPlaceholder, dropdownSeparatorText);\n\n // Update internal list of tags when they change from the outside i.e. when they have been saved,\n // additionally, cleanup previous state for adding or removing tags\n useEffect(() => setTags(compact(tagList.map(cleanupTagState))), [tagList]);\n\n // build suggestion when passed tag suggestions passed change i.e. when a tag got selected and removed from the list\n useEffect(() => setCurrentSuggestions(getSuggestions(inputValue, tagSuggestions)), [tagSuggestions]);\n\n // build suggestions when input value change as it should filter the list on suggestions\n useEffect(() => {\n const selectedTagNames = compact(tags.map(tag => tag.label));\n const value = inputValue || '';\n\n const filteredList = filterSuggestions(\n tagSuggestions as unknown as AutoSuggestSuggestion[],\n selectedTagNames,\n value\n );\n setCurrentSuggestions(getSuggestions(value, filteredList));\n }, [tags, inputValue, tagSuggestions]);\n\n const updateTags = (updatedTags: TagManagerTag[]) => {\n setTags(updatedTags);\n // Notify outside component\n console.log(updatedTags);\n\n onTagListChange(updatedTags);\n };\n\n const handleSuggestionsChange: AutoSuggestProps['onSuggestionsFetchRequested'] = ({ value }) =>\n setInputValue(value);\n\n const handleSuggestionSelected: AutoSuggestProps['onSuggestionSelected'] = (_, { suggestion }) => {\n setInputValue('');\n\n const newSuggestion = getNewSuggestion(suggestion);\n\n if (hasTagAlreadySelected(tags, newSuggestion)) {\n updateTags([...tags]);\n return;\n }\n\n updateTags([...tags, newSuggestion]);\n };\n\n const updateTagsWithSelectedTag = (tagItems: TagManagerTag[], selectedTag: TagManagerTag) => {\n return tagItems.map(tag => {\n if (isEqual(tag.label, selectedTag.label)) {\n // update tag and mark as \"to remove\"\n if (tag.toRemove) {\n delete tag.toRemove;\n } else {\n tag.toRemove = true;\n }\n }\n return tag;\n });\n };\n\n const handleRemoveFromTagList = (selectedTag: TagManagerTag) => {\n if (selectedTag.toAdd) {\n updateTags(tags.filter(tag => !isEqual(tag, selectedTag)));\n } else {\n updateTags(updateTagsWithSelectedTag(tags, selectedTag));\n }\n };\n\n const inputProps = {\n className: '',\n placeholder: placeholder || 'Start typing ...',\n value: inputValue,\n tabIndex: 1,\n };\n\n const autoSuggestClasses = classNames(!isEmpty(tags) && 'margin-bottom-10');\n\n return (\n <div {...remainingProps} className={classNames('TagManager', className)}>\n {showInput && (\n <AutoSuggest\n className={autoSuggestClasses}\n inputProps={inputProps}\n suggestions={currentSuggestions}\n onSuggestionSelected={handleSuggestionSelected}\n onSuggestionsFetchRequested={handleSuggestionsChange}\n openOnFocus\n noItemMessage={noItemMessage}\n />\n )}\n <TagManagerItemList tags={tags} onRemoveFromTagList={handleRemoveFromTagList} />\n </div>\n );\n};\n\nexport default TagManager;\n"],"names":["getCustomSuggestion","value","placeholder","jsx","CustomSuggestionItem","isEmpty","getSuggestionSeparator","dropdownSeparatorText","cleanupTagState","tag","hasTagAlreadySelected","tags","newSuggestion","getNewSuggestion","suggestion","buildSuggestions","useCustomTags","customTagPlaceholder","suggestions","cleanedSuggestions","item","hasDropdownSeparatorText","compact","filterSuggestions","selectedTagNames","label","lowerCaseLabel","lowerCaseValue","TagManager","props","tagList","tagSuggestions","className","onTagListChange","noop","noItemMessage","showInput","remainingProps","setTags","useState","inputValue","setInputValue","currentSuggestions","setCurrentSuggestions","getSuggestions","useEffect","filteredList","updateTags","updatedTags","handleSuggestionsChange","handleSuggestionSelected","_","updateTagsWithSelectedTag","tagItems","selectedTag","isEqual","handleRemoveFromTagList","inputProps","autoSuggestClasses","classNames","jsxs","AutoSuggest","TagManagerItemList"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TagManager.js","sources":["../../../src/components/tagManager/TagManager.tsx"],"sourcesContent":["import type React from 'react';\nimport { useEffect, useState } from 'react';\nimport { compact, isEmpty, noop } from 'es-toolkit/compat';\nimport { isEqual } from 'es-toolkit/predicate';\n\nimport classNames from '../../utils/classNames';\nimport AutoSuggest, { type AutoSuggestProps, type AutoSuggestSuggestion } from '../autosuggest/AutoSuggest';\nimport CustomSuggestionItem from './CustomSuggestionItem';\nimport TagManagerItemList from './TagManagerItemList';\n\nexport type TagManagerTag = {\n /**\n * The visible text of the tag.\n */\n label?: string;\n\n /**\n * Marks a tag that should be added (used to differentiate newly added tags).\n */\n toAdd?: boolean;\n\n /**\n * Marks a tag that should be removed (used to differentiate tags flagged for deletion).\n */\n toRemove?: boolean;\n};\n\nconst getCustomSuggestion = (value: string, placeholder: string | undefined): AutoSuggestSuggestion => ({\n customSuggestion: <CustomSuggestionItem value={value} placeholder={placeholder} />,\n label: value,\n disabled: isEmpty(value),\n});\n\nconst getSuggestionSeparator = (dropdownSeparatorText: string): AutoSuggestSuggestion => ({\n header: true,\n label: dropdownSeparatorText,\n});\n\nconst cleanupTagState = (tag: TagManagerTag): TagManagerTag => {\n delete tag.toAdd;\n delete tag.toRemove;\n return tag;\n};\n\nconst hasTagAlreadySelected = (tags: TagManagerTag[], newSuggestion: AutoSuggestSuggestion) =>\n !!tags.find(tag => tag.label === newSuggestion.label);\n\nconst getNewSuggestion = (suggestion: AutoSuggestSuggestion) => {\n const newSuggestion = suggestion.customSuggestion ? { label: suggestion.label } : suggestion;\n newSuggestion.toAdd = true;\n return newSuggestion;\n};\n\nconst buildSuggestions =\n (useCustomTags: boolean, customTagPlaceholder: string | undefined, dropdownSeparatorText: string | undefined) =>\n (value: string, suggestions: TagManagerTag[]): AutoSuggestSuggestion[] => {\n const cleanedSuggestions = suggestions.map(cleanupTagState).filter(item => item.label);\n const hasDropdownSeparatorText = typeof dropdownSeparatorText === 'string' && !isEmpty(dropdownSeparatorText);\n\n return compact([\n useCustomTags && getCustomSuggestion(value, customTagPlaceholder),\n useCustomTags &&\n !isEmpty(cleanedSuggestions) &&\n hasDropdownSeparatorText &&\n getSuggestionSeparator(dropdownSeparatorText),\n ...(cleanedSuggestions as unknown as AutoSuggestSuggestion[]),\n ]);\n };\n\nconst filterSuggestions = (suggestions: AutoSuggestSuggestion[], selectedTagNames: string[], value = '') =>\n suggestions.filter(suggestion => {\n const label = suggestion.label;\n if (!label) {\n return false;\n }\n const lowerCaseLabel = label.toLowerCase();\n const lowerCaseValue = value.toLowerCase();\n return (\n lowerCaseLabel.includes(lowerCaseValue) &&\n !selectedTagNames.includes(label) &&\n !suggestion.header &&\n !suggestion.customSuggestion\n );\n });\n\nexport type TagManagerProps = {\n /**\n * The list of existing tags to be listed.\n */\n tagList: TagManagerTag[];\n\n /**\n * The list of tags used as suggestions for the built-in AutoSuggest.\n */\n tagSuggestions: TagManagerTag[];\n\n /**\n * Callback function triggered when the list of tags changes.\n *\n * For instance when a tag was added by the AutoSuggest or when a tag is marked to be deleted.\n *\n * This function returns the updated list of tags where tags may have additional properties indicating whether they\n * have to be removed or added to your data.\n *\n * @param newTags The updated list of tags.\n * \n * @example\n * [\n {\n label: 'Foo',\n },\n {\n label: 'Bar',\n toAdd: true,\n },\n {\n label: 'Lorem ipsum',\n toRemove: true,\n }\n ]\n */\n onTagListChange?: (newTags: TagManagerTag[]) => void;\n\n /**\n * The placeholder message for the AutoSuggest input.\n */\n placeholder?: string;\n\n /**\n * The placeholder message for custom tag in the AutoSuggest dropdown.\n *\n * This is only relevant when having custom tags enabled.\n */\n customTagPlaceholder?: string;\n\n /**\n * The header message for existing tags in the AutoSuggest dropdown.\n *\n * This is only relevant when having custom tags enabled.\n */\n dropdownSeparatorText?: string;\n\n /**\n * Enables or disabled to add custom tags from the AutoSuggest dropdown.\n *\n * @default true\n */\n useCustomTags?: boolean;\n\n /**\n * Define whether the input shall be shown and to allow to select tags.\n *\n * @default true\n */\n showInput?: boolean;\n\n /**\n * The message to be shown when no tag suggestion could be found for the entered value of the AutoSuggest.\n */\n noItemMessage?: string | React.ReactNode;\n\n /**\n * Additional classes to be set on the wrapper element.\n */\n className?: string;\n};\n\nconst TagManager = (props: TagManagerProps) => {\n const {\n tagList,\n tagSuggestions,\n placeholder,\n className,\n customTagPlaceholder,\n dropdownSeparatorText,\n onTagListChange = noop,\n useCustomTags = true,\n noItemMessage,\n showInput = true,\n ...remainingProps\n } = props;\n\n const [tags, setTags] = useState(tagList);\n const [inputValue, setInputValue] = useState('');\n const [currentSuggestions, setCurrentSuggestions] = useState([] as AutoSuggestSuggestion[]);\n\n const getSuggestions = buildSuggestions(useCustomTags, customTagPlaceholder, dropdownSeparatorText);\n\n // Update internal list of tags when they change from the outside i.e. when they have been saved,\n // additionally, cleanup previous state for adding or removing tags\n useEffect(() => setTags(compact(tagList.map(cleanupTagState))), [tagList]);\n\n // build suggestion when passed tag suggestions passed change i.e. when a tag got selected and removed from the list\n useEffect(() => setCurrentSuggestions(getSuggestions(inputValue, tagSuggestions)), [tagSuggestions]);\n\n // build suggestions when input value change as it should filter the list on suggestions\n useEffect(() => {\n const selectedTagNames = compact(tags.map(tag => tag.label));\n const value = inputValue || '';\n\n const filteredList = filterSuggestions(\n tagSuggestions as unknown as AutoSuggestSuggestion[],\n selectedTagNames,\n value\n );\n setCurrentSuggestions(getSuggestions(value, filteredList));\n }, [tags, inputValue, tagSuggestions]);\n\n const updateTags = (updatedTags: TagManagerTag[]) => {\n setTags(updatedTags);\n // Notify outside component\n console.log(updatedTags);\n\n onTagListChange(updatedTags);\n };\n\n const handleSuggestionsChange: AutoSuggestProps['onSuggestionsFetchRequested'] = ({ value }) =>\n setInputValue(value);\n\n const handleSuggestionSelected: AutoSuggestProps['onSuggestionSelected'] = (_, { suggestion }) => {\n setInputValue('');\n\n const newSuggestion = getNewSuggestion(suggestion);\n\n if (hasTagAlreadySelected(tags, newSuggestion)) {\n updateTags([...tags]);\n return;\n }\n\n updateTags([...tags, newSuggestion]);\n };\n\n const updateTagsWithSelectedTag = (tagItems: TagManagerTag[], selectedTag: TagManagerTag) => {\n return tagItems.map(tag => {\n if (isEqual(tag.label, selectedTag.label)) {\n // update tag and mark as \"to remove\"\n if (tag.toRemove) {\n delete tag.toRemove;\n } else {\n tag.toRemove = true;\n }\n }\n return tag;\n });\n };\n\n const handleRemoveFromTagList = (selectedTag: TagManagerTag) => {\n if (selectedTag.toAdd) {\n updateTags(tags.filter(tag => !isEqual(tag, selectedTag)));\n } else {\n updateTags(updateTagsWithSelectedTag(tags, selectedTag));\n }\n };\n\n const inputProps = {\n className: '',\n placeholder: placeholder || 'Start typing ...',\n value: inputValue,\n tabIndex: 1,\n };\n\n const autoSuggestClasses = classNames(!isEmpty(tags) && 'margin-bottom-10');\n\n return (\n <div {...remainingProps} className={classNames('TagManager', className)}>\n {showInput && (\n <AutoSuggest\n className={autoSuggestClasses}\n inputProps={inputProps}\n suggestions={currentSuggestions}\n onSuggestionSelected={handleSuggestionSelected}\n onSuggestionsFetchRequested={handleSuggestionsChange}\n openOnFocus\n noItemMessage={noItemMessage}\n />\n )}\n <TagManagerItemList tags={tags} onRemoveFromTagList={handleRemoveFromTagList} />\n </div>\n );\n};\n\nexport default TagManager;\n"],"names":["getCustomSuggestion","value","placeholder","jsx","CustomSuggestionItem","isEmpty","getSuggestionSeparator","dropdownSeparatorText","cleanupTagState","tag","hasTagAlreadySelected","tags","newSuggestion","getNewSuggestion","suggestion","buildSuggestions","useCustomTags","customTagPlaceholder","suggestions","cleanedSuggestions","item","hasDropdownSeparatorText","compact","filterSuggestions","selectedTagNames","label","lowerCaseLabel","lowerCaseValue","TagManager","props","tagList","tagSuggestions","className","onTagListChange","noop","noItemMessage","showInput","remainingProps","setTags","useState","inputValue","setInputValue","currentSuggestions","setCurrentSuggestions","getSuggestions","useEffect","filteredList","updateTags","updatedTags","handleSuggestionsChange","handleSuggestionSelected","_","updateTagsWithSelectedTag","tagItems","selectedTag","isEqual","handleRemoveFromTagList","inputProps","autoSuggestClasses","classNames","jsxs","AutoSuggest","TagManagerItemList"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TagManagerItemList.js","sources":["../../../src/components/tagManager/TagManagerItemList.tsx"],"sourcesContent":["import classNames from '
|
|
1
|
+
{"version":3,"file":"TagManagerItemList.js","sources":["../../../src/components/tagManager/TagManagerItemList.tsx"],"sourcesContent":["import classNames from '../../utils/classNames';\nimport TagList from '../tag/TagList';\nimport Tag from '../tag/Tag';\nimport type { TagManagerTag } from './TagManager';\n\nexport type TagManagerItemListProps = {\n tags: TagManagerTag[];\n onRemoveFromTagList?: (tag: TagManagerTag) => void;\n};\n\nconst TagManagerItemList = (props: TagManagerItemListProps) => {\n const { tags, onRemoveFromTagList = () => {} } = props;\n\n return (\n <TagList inline={false}>\n {tags.map(tag => {\n const tagClasses = classNames(\n tag.toAdd && 'border-color-success text-color-success',\n tag.toRemove && 'border-color-danger text-color-danger'\n );\n\n return (\n <Tag\n key={tag.label}\n className={tagClasses}\n deletable\n round={false}\n onClick={() => onRemoveFromTagList(tag)}\n >\n {tag.label}\n </Tag>\n );\n })}\n </TagList>\n );\n};\n\nexport default TagManagerItemList;\n"],"names":["TagManagerItemList","props","tags","onRemoveFromTagList","TagList","tag","tagClasses","classNames","jsx","Tag"],"mappings":";;;;AAUA,MAAMA,IAAqB,CAACC,MAAmC;AAC3D,QAAM,EAAE,MAAAC,GAAM,qBAAAC,IAAsB,MAAM;AAAA,EAAC,MAAMF;AAEjD,2BACKG,GAAA,EAAQ,QAAQ,IACZ,UAAAF,EAAK,IAAI,CAAAG,MAAO;AACb,UAAMC,IAAaC;AAAA,MACfF,EAAI,SAAS;AAAA,MACbA,EAAI,YAAY;AAAA,IAAA;AAGpB,WACI,gBAAAG;AAAA,MAACC;AAAA,MAAA;AAAA,QAEG,WAAWH;AAAA,QACX,WAAS;AAAA,QACT,OAAO;AAAA,QACP,SAAS,MAAMH,EAAoBE,CAAG;AAAA,QAErC,UAAAA,EAAI;AAAA,MAAA;AAAA,MANAA,EAAI;AAAA,IAAA;AAAA,EASrB,CAAC,EAAA,CACL;AAER;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as d, jsxs as s } from "react/jsx-runtime";
|
|
2
|
-
import Q from "classnames";
|
|
3
2
|
import { noop as i } from "es-toolkit/function";
|
|
3
|
+
import Q from "../../utils/classNames.js";
|
|
4
4
|
import o from "../button/Button.js";
|
|
5
5
|
const O = (A) => {
|
|
6
6
|
const { segmentation: g, verticalAlignment: M = "top" } = A, w = M === "center" ? "align-items-center-sm" : "";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Teaser.js","sources":["../../../src/components/teaser/Teaser.tsx"],"sourcesContent":["import type React from 'react';\nimport type { SyntheticEvent } from 'react';\nimport classNames from 'classnames';\nimport { noop } from 'es-toolkit/function';\n\nimport Button, { type BUTTON_STYLE } from '../button/Button';\n\ntype TeaserButton = {\n /**\n * The text content for the button.\n */\n text?: string | React.ReactNode;\n\n /**\n * The button style.\n *\n * See the button styles definition for possible values.\n *\n * @default 'primary'\n */\n bsStyle?: BUTTON_STYLE;\n\n /**\n * Callback function for the button.\n */\n onClick?: (event: SyntheticEvent<HTMLButtonElement, MouseEvent>) => void;\n\n /**\n * Additional classes added to the button.\n */\n className?: string;\n};\n\ntype TeaserImage = {\n /**\n * The src URL for the image.\n */\n src: string;\n\n /**\n * The alternate text for the image.\n */\n alt?: string;\n\n /**\n * Defines whether the image is on the left or right side of the component.\n *\n * Possible values are: `'left'` and `'right'`.\n */\n align?: 'left' | 'right';\n\n /**\n * Callback function for the image.\n */\n onClick?: VoidFunction;\n\n /**\n * Ratio of the transparent image placeholder.\n *\n * Possible values are `'1:1'`, `'3:1'`, `'3:2'` and `'16:9'`.\n */\n aspectRatio?: '1:1' | '3:1' | '3:2' | '16:9';\n\n /**\n * Additional classes added to the image wrapper.\n */\n className?: string;\n};\n\nexport type TeaserProps = {\n /**\n * The headline for the teaser.\n */\n headline?: string | React.ReactNode;\n\n /**\n * The actual content to show e.g. some kind of text.\n */\n content?: string | React.ReactNode;\n\n /**\n * Defines an image to render.\n */\n image?: TeaserImage;\n\n /**\n * Defines a button to render with.\n */\n button?: TeaserButton;\n\n /**\n * Defines where the teaser content is aligned including headline and image.\n *\n * Possible values are: `'top'` and `'center'`.\n *\n * @default 'top'\n */\n verticalAlignment?: 'top' | 'center';\n\n /**\n * Defines how the teaser content is segmented.\n *\n * Possible values are: `'50'`, `'25:75'`, `'75:25'` and `'100'`.\n */\n segmentation?: '50' | '25:75' | '75:25' | '100';\n\n /**\n * Optional content for footer in case the prop \"button\" is not sufficient.\n */\n footer?: string | React.ReactNode;\n\n /**\n * Additional classes added to the wrapper.\n */\n className?: string;\n};\n\nconst Teaser = (props: TeaserProps) => {\n const { segmentation, verticalAlignment = 'top' } = props;\n\n const alignmentClass = verticalAlignment === 'center' ? 'align-items-center-sm' : '';\n\n if (segmentation === '100') {\n return <SingleColumnTeaser alignmentClass={alignmentClass} {...props} />;\n }\n\n // Thumbnail based layout for multiple segments or multiple teaser in a row\n return <MultipleSegmentsOrRowsTeaser alignmentClass={alignmentClass} {...props} />;\n};\n\nexport default Teaser;\n\nconst SingleColumnTeaser = (props: TeaserProps & { alignmentClass: string }) => {\n const { headline, content, footer, image, button, segmentation, className, alignmentClass } = props;\n\n const wrapperClassNames = classNames(\n 'teaser panel panel-default panel-body padding-20 margin-bottom-20 text-center',\n alignmentClass,\n className\n );\n\n return (\n <div className={wrapperClassNames}>\n <TeaserHeadline headline={headline} segmentation={segmentation} />\n <TeaserImageComp image={image} segmentation={segmentation} />\n <TeaserContent content={content} segmentation={segmentation} />\n <TeaserButtonComp button={button} />\n <TeaserFooter footer={footer} />\n </div>\n );\n};\n\nconst MultipleSegmentsOrRowsTeaser = (props: TeaserProps & { alignmentClass: string }) => {\n const { headline, content, footer, image, button, segmentation, className, alignmentClass } = props;\n\n const wrapperClasses = classNames(\n 'teaser thumbnail display-flex-sm',\n !segmentation && 'flex-column height-100pct-sm', // only for multiple teasers in a row\n alignmentClass,\n className\n );\n\n const captionClasses = classNames(\n 'caption',\n image?.align === 'left' && 'flex-order-2-sm',\n image?.align === 'right' && 'flex-order-1-sm',\n segmentation === '50' && 'width-50pct-sm',\n segmentation === '25:75' && 'width-50pct-sm width-25pct-lg',\n segmentation === '75:25' && 'width-50pct-sm width-75pct-lg',\n !segmentation && 'display-flex-sm flex-column-sm flex-1-0-sm'\n );\n\n return (\n <div className={wrapperClasses}>\n <TeaserImageComp image={image} segmentation={segmentation} />\n {(headline || content || button) && (\n <div className={captionClasses}>\n <TeaserHeadline headline={headline} segmentation={segmentation} />\n <TeaserContent content={content} segmentation={segmentation} />\n <TeaserButtonComp button={button} />\n <TeaserFooter footer={footer} />\n </div>\n )}\n </div>\n );\n};\n\nconst TeaserHeadline = ({ headline, segmentation }: Pick<TeaserProps, 'headline' | 'segmentation'>) => {\n if (!headline) {\n return null;\n }\n\n return <h2 className={segmentation === '100' ? 'margin-top-20 margin-bottom-25' : 'margin-top-5'}>{headline}</h2>;\n};\n\nconst TeaserContent = ({ content, segmentation }: Pick<TeaserProps, 'content' | 'segmentation'>) => {\n if (!content) {\n return null;\n }\n\n const classes = classNames(\n 'teaser-content-wrapper text-size-16',\n segmentation === '100' ? 'padding-left-25-sm padding-right-25-sm' : 'flex-1-0-sm'\n );\n return <div className={classes}>{content}</div>;\n};\n\nconst TeaserFooter = ({ footer }: Pick<TeaserProps, 'footer'>) => {\n if (!footer) {\n return null;\n }\n\n return <div className='teaser-footer-wrapper'>{footer}</div>;\n};\n\nconst TeaserButtonComp = ({ button }: Pick<TeaserProps, 'button'>) => {\n if (!button) {\n return null;\n }\n\n return (\n <span>\n <Button bsStyle={button.bsStyle ?? 'primary'} className={button.className} onClick={button.onClick}>\n {button.text}\n </Button>\n </span>\n );\n};\n\n/* eslint-disable max-len */\nconst placeholderImage1by1 =\n 'data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAA+gAAAPoCAQAAADnqhxvAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfiCw8ODSFLsnJ3AAAPvUlEQVR42u3VMQ0AIADAMMC/ZxDBQVhaBfs29wAAfrdeBwAA9wwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDgTLCM9BHrU/AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE4LTExLTE1VDEzOjEzOjMzKzAxOjAwgedH5AAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxOC0xMS0xNVQxMzoxMzozMyswMTowMPC6/1gAAAAASUVORK5CYII=';\n\nconst placeholderImage3by1 =\n 'data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAA+gAAAFNCAQAAAA55I0bAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfiCw8ODDQ/dKfdAAAFUUlEQVR42u3VMQ0AIADAMMC/ZxDBQVhaBfs29wAAfrdeBwAA9wwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIO/GUDmajv5qgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTgtMTEtMTVUMTM6MTI6NTIrMDE6MDAOPS7pAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE4LTExLTE1VDEzOjEyOjUyKzAxOjAwf2CWVQAAAABJRU5ErkJggg==';\n\nconst placeholderImage3by2 =\n 'data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAA+gAAAKaCAQAAAAHN7sRAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfiCw8ODALwzjJEAAAKhUlEQVR42u3VMQ0AIADAMMC/ZxDBQVhaBfs29wAAfrdeBwAA9wwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIOCbQGM8brNAQAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTgtMTEtMTVUMTM6MTI6MDIrMDE6MDBG3SCNAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE4LTExLTE1VDEzOjEyOjAyKzAxOjAwN4CYMQAAAABJRU5ErkJggg==';\n\nconst placeholderImage16by9 =\n 'data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAA+gAAAIwCAQAAAC/sImZAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfiDBwMBx70M0fPAAAI3UlEQVR42u3VMQ0AIADAMMC/ZxDBQVhaBfs29wAAfrdeBwAA9wwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAg55rgVfT+Sm9AAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxOC0xMi0yOFQxMTowNzozMCswMTowMOGwCPwAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTgtMTItMjhUMTE6MDc6MzArMDE6MDCQ7bBAAAAAAElFTkSuQmCC';\n/* eslint-enable max-len */\n\nconst teaserPlaceholderImages = {\n '1:1': placeholderImage1by1,\n '3:1': placeholderImage3by1,\n '3:2': placeholderImage3by2,\n '16:9': placeholderImage16by9,\n} as const;\n\nconst TeaserImageComp = ({ image, segmentation }: Pick<TeaserProps, 'image' | 'segmentation'>) => {\n if (!image) {\n return null;\n }\n\n let specificClassNames;\n if (segmentation !== '100') {\n specificClassNames = classNames(\n image.align === 'left' && 'flex-order-1-sm padding-left-20-sm',\n image.align === 'right' && 'flex-order-2-sm padding-right-20-sm',\n segmentation === '50' && 'width-50pct-sm',\n segmentation === '25:75' && 'width-50pct-sm width-75pct-lg',\n segmentation === '75:25' && 'width-50pct-sm width-25pct-lg',\n segmentation && 'padding-top-20-sm padding-bottom-20-sm'\n );\n }\n\n const imageWrapperClassNames = classNames(\n 'teaser-image-wrapper',\n specificClassNames,\n image.className && image.className\n );\n\n const callback = image?.onClick ?? noop;\n\n return (\n <div className={imageWrapperClassNames} onClick={callback}>\n <img\n className='img-responsive cover center'\n src={teaserPlaceholderImages[image.aspectRatio!] ?? placeholderImage16by9}\n alt={image.alt ?? ''}\n style={{ backgroundImage: `url(${image.src})` }}\n />\n </div>\n );\n};\n"],"names":["Teaser","props","segmentation","verticalAlignment","alignmentClass","jsx","SingleColumnTeaser","MultipleSegmentsOrRowsTeaser","headline","content","footer","image","button","className","wrapperClassNames","classNames","jsxs","TeaserHeadline","TeaserImageComp","TeaserContent","TeaserButtonComp","TeaserFooter","wrapperClasses","captionClasses","classes","Button","placeholderImage1by1","placeholderImage3by1","placeholderImage3by2","placeholderImage16by9","teaserPlaceholderImages","specificClassNames","imageWrapperClassNames","callback","noop"],"mappings":";;;;AAqHA,MAAMA,IAAS,CAACC,MAAuB;AACnC,QAAM,EAAE,cAAAC,GAAc,mBAAAC,IAAoB,MAAA,IAAUF,GAE9CG,IAAiBD,MAAsB,WAAW,0BAA0B;AAElF,SAAID,MAAiB,QACV,gBAAAG,EAACC,GAAA,EAAmB,gBAAAF,GAAiC,GAAGH,EAAA,CAAO,IAInE,gBAAAI,EAACE,GAAA,EAA6B,gBAAAH,GAAiC,GAAGH,EAAA,CAAO;AACpF,GAIMK,IAAqB,CAACL,MAAoD;AAC5E,QAAM,EAAE,UAAAO,GAAU,SAAAC,GAAS,QAAAC,GAAQ,OAAAC,GAAO,QAAAC,GAAQ,cAAAV,GAAc,WAAAW,GAAW,gBAAAT,EAAA,IAAmBH,GAExFa,IAAoBC;AAAA,IACtB;AAAA,IACAX;AAAA,IACAS;AAAA,EAAA;AAGJ,SACI,gBAAAG,EAAC,OAAA,EAAI,WAAWF,GACZ,UAAA;AAAA,IAAA,gBAAAT,EAACY,GAAA,EAAe,UAAAT,GAAoB,cAAAN,EAAA,CAA4B;AAAA,IAChE,gBAAAG,EAACa,GAAA,EAAgB,OAAAP,GAAc,cAAAT,EAAA,CAA4B;AAAA,IAC3D,gBAAAG,EAACc,GAAA,EAAc,SAAAV,GAAkB,cAAAP,EAAA,CAA4B;AAAA,IAC7D,gBAAAG,EAACe,KAAiB,QAAAR,GAAgB;AAAA,IAClC,gBAAAP,EAACgB,KAAa,QAAAX,EAAA,CAAgB;AAAA,EAAA,GAClC;AAER,GAEMH,IAA+B,CAACN,MAAoD;AACtF,QAAM,EAAE,UAAAO,GAAU,SAAAC,GAAS,QAAAC,GAAQ,OAAAC,GAAO,QAAAC,GAAQ,cAAAV,GAAc,WAAAW,GAAW,gBAAAT,EAAA,IAAmBH,GAExFqB,IAAiBP;AAAA,IACnB;AAAA,IACA,CAACb,KAAgB;AAAA;AAAA,IACjBE;AAAA,IACAS;AAAA,EAAA,GAGEU,IAAiBR;AAAA,IACnB;AAAA,IACAJ,GAAO,UAAU,UAAU;AAAA,IAC3BA,GAAO,UAAU,WAAW;AAAA,IAC5BT,MAAiB,QAAQ;AAAA,IACzBA,MAAiB,WAAW;AAAA,IAC5BA,MAAiB,WAAW;AAAA,IAC5B,CAACA,KAAgB;AAAA,EAAA;AAGrB,SACI,gBAAAc,EAAC,OAAA,EAAI,WAAWM,GACZ,UAAA;AAAA,IAAA,gBAAAjB,EAACa,GAAA,EAAgB,OAAAP,GAAc,cAAAT,EAAA,CAA4B;AAAA,KACzDM,KAAYC,KAAWG,MACrB,gBAAAI,EAAC,OAAA,EAAI,WAAWO,GACZ,UAAA;AAAA,MAAA,gBAAAlB,EAACY,GAAA,EAAe,UAAAT,GAAoB,cAAAN,EAAA,CAA4B;AAAA,MAChE,gBAAAG,EAACc,GAAA,EAAc,SAAAV,GAAkB,cAAAP,EAAA,CAA4B;AAAA,MAC7D,gBAAAG,EAACe,KAAiB,QAAAR,GAAgB;AAAA,MAClC,gBAAAP,EAACgB,KAAa,QAAAX,EAAA,CAAgB;AAAA,IAAA,EAAA,CAClC;AAAA,EAAA,GAER;AAER,GAEMO,IAAiB,CAAC,EAAE,UAAAT,GAAU,cAAAN,QAC3BM,sBAIG,MAAA,EAAG,WAAWN,MAAiB,QAAQ,mCAAmC,gBAAiB,UAAAM,GAAS,IAHjG,MAMTW,IAAgB,CAAC,EAAE,SAAAV,GAAS,cAAAP,QAAkE;AAChG,MAAI,CAACO;AACD,WAAO;AAGX,QAAMe,IAAUT;AAAA,IACZ;AAAA,IACAb,MAAiB,QAAQ,2CAA2C;AAAA,EAAA;AAExE,SAAO,gBAAAG,EAAC,OAAA,EAAI,WAAWmB,GAAU,UAAAf,GAAQ;AAC7C,GAEMY,IAAe,CAAC,EAAE,QAAAX,QACfA,IAIE,gBAAAL,EAAC,OAAA,EAAI,WAAU,yBAAyB,UAAAK,GAAO,IAH3C,MAMTU,IAAmB,CAAC,EAAE,QAAAR,QACnBA,sBAKA,QAAA,EACG,UAAA,gBAAAP,EAACoB,GAAA,EAAO,SAASb,EAAO,WAAW,WAAW,WAAWA,EAAO,WAAW,SAASA,EAAO,SACtF,UAAAA,EAAO,MACZ,GACJ,IARO,MAaTc,IACF,mmLAEEC,IACF,+nEAEEC,IACF,+2HAEEC,IACF,uzGAGEC,IAA0B;AAAA,EAC5B,OAAOJ;AAAA,EACP,OAAOC;AAAA,EACP,OAAOC;AAAA,EACP,QAAQC;AACZ,GAEMX,IAAkB,CAAC,EAAE,OAAAP,GAAO,cAAAT,QAAgE;AAC9F,MAAI,CAACS;AACD,WAAO;AAGX,MAAIoB;AACJ,EAAI7B,MAAiB,UACjB6B,IAAqBhB;AAAA,IACjBJ,EAAM,UAAU,UAAU;AAAA,IAC1BA,EAAM,UAAU,WAAW;AAAA,IAC3BT,MAAiB,QAAQ;AAAA,IACzBA,MAAiB,WAAW;AAAA,IAC5BA,MAAiB,WAAW;AAAA,IAC5BA,KAAgB;AAAA,EAAA;AAIxB,QAAM8B,IAAyBjB;AAAA,IAC3B;AAAA,IACAgB;AAAA,IACApB,EAAM,aAAaA,EAAM;AAAA,EAAA,GAGvBsB,IAAWtB,GAAO,WAAWuB;AAEnC,SACI,gBAAA7B,EAAC,OAAA,EAAI,WAAW2B,GAAwB,SAASC,GAC7C,UAAA,gBAAA5B;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,WAAU;AAAA,MACV,KAAKyB,EAAwBnB,EAAM,WAAY,KAAKkB;AAAA,MACpD,KAAKlB,EAAM,OAAO;AAAA,MAClB,OAAO,EAAE,iBAAiB,OAAOA,EAAM,GAAG,IAAA;AAAA,IAAI;AAAA,EAAA,GAEtD;AAER;"}
|
|
1
|
+
{"version":3,"file":"Teaser.js","sources":["../../../src/components/teaser/Teaser.tsx"],"sourcesContent":["import type React from 'react';\nimport type { SyntheticEvent } from 'react';\nimport { noop } from 'es-toolkit/function';\n\nimport classNames from '../../utils/classNames';\nimport Button, { type BUTTON_STYLE } from '../button/Button';\n\ntype TeaserButton = {\n /**\n * The text content for the button.\n */\n text?: string | React.ReactNode;\n\n /**\n * The button style.\n *\n * See the button styles definition for possible values.\n *\n * @default 'primary'\n */\n bsStyle?: BUTTON_STYLE;\n\n /**\n * Callback function for the button.\n */\n onClick?: (event: SyntheticEvent<HTMLButtonElement, MouseEvent>) => void;\n\n /**\n * Additional classes added to the button.\n */\n className?: string;\n};\n\ntype TeaserImage = {\n /**\n * The src URL for the image.\n */\n src: string;\n\n /**\n * The alternate text for the image.\n */\n alt?: string;\n\n /**\n * Defines whether the image is on the left or right side of the component.\n *\n * Possible values are: `'left'` and `'right'`.\n */\n align?: 'left' | 'right';\n\n /**\n * Callback function for the image.\n */\n onClick?: VoidFunction;\n\n /**\n * Ratio of the transparent image placeholder.\n *\n * Possible values are `'1:1'`, `'3:1'`, `'3:2'` and `'16:9'`.\n */\n aspectRatio?: '1:1' | '3:1' | '3:2' | '16:9';\n\n /**\n * Additional classes added to the image wrapper.\n */\n className?: string;\n};\n\nexport type TeaserProps = {\n /**\n * The headline for the teaser.\n */\n headline?: string | React.ReactNode;\n\n /**\n * The actual content to show e.g. some kind of text.\n */\n content?: string | React.ReactNode;\n\n /**\n * Defines an image to render.\n */\n image?: TeaserImage;\n\n /**\n * Defines a button to render with.\n */\n button?: TeaserButton;\n\n /**\n * Defines where the teaser content is aligned including headline and image.\n *\n * Possible values are: `'top'` and `'center'`.\n *\n * @default 'top'\n */\n verticalAlignment?: 'top' | 'center';\n\n /**\n * Defines how the teaser content is segmented.\n *\n * Possible values are: `'50'`, `'25:75'`, `'75:25'` and `'100'`.\n */\n segmentation?: '50' | '25:75' | '75:25' | '100';\n\n /**\n * Optional content for footer in case the prop \"button\" is not sufficient.\n */\n footer?: string | React.ReactNode;\n\n /**\n * Additional classes added to the wrapper.\n */\n className?: string;\n};\n\nconst Teaser = (props: TeaserProps) => {\n const { segmentation, verticalAlignment = 'top' } = props;\n\n const alignmentClass = verticalAlignment === 'center' ? 'align-items-center-sm' : '';\n\n if (segmentation === '100') {\n return <SingleColumnTeaser alignmentClass={alignmentClass} {...props} />;\n }\n\n // Thumbnail based layout for multiple segments or multiple teaser in a row\n return <MultipleSegmentsOrRowsTeaser alignmentClass={alignmentClass} {...props} />;\n};\n\nexport default Teaser;\n\nconst SingleColumnTeaser = (props: TeaserProps & { alignmentClass: string }) => {\n const { headline, content, footer, image, button, segmentation, className, alignmentClass } = props;\n\n const wrapperClassNames = classNames(\n 'teaser panel panel-default panel-body padding-20 margin-bottom-20 text-center',\n alignmentClass,\n className\n );\n\n return (\n <div className={wrapperClassNames}>\n <TeaserHeadline headline={headline} segmentation={segmentation} />\n <TeaserImageComp image={image} segmentation={segmentation} />\n <TeaserContent content={content} segmentation={segmentation} />\n <TeaserButtonComp button={button} />\n <TeaserFooter footer={footer} />\n </div>\n );\n};\n\nconst MultipleSegmentsOrRowsTeaser = (props: TeaserProps & { alignmentClass: string }) => {\n const { headline, content, footer, image, button, segmentation, className, alignmentClass } = props;\n\n const wrapperClasses = classNames(\n 'teaser thumbnail display-flex-sm',\n !segmentation && 'flex-column height-100pct-sm', // only for multiple teasers in a row\n alignmentClass,\n className\n );\n\n const captionClasses = classNames(\n 'caption',\n image?.align === 'left' && 'flex-order-2-sm',\n image?.align === 'right' && 'flex-order-1-sm',\n segmentation === '50' && 'width-50pct-sm',\n segmentation === '25:75' && 'width-50pct-sm width-25pct-lg',\n segmentation === '75:25' && 'width-50pct-sm width-75pct-lg',\n !segmentation && 'display-flex-sm flex-column-sm flex-1-0-sm'\n );\n\n return (\n <div className={wrapperClasses}>\n <TeaserImageComp image={image} segmentation={segmentation} />\n {(headline || content || button) && (\n <div className={captionClasses}>\n <TeaserHeadline headline={headline} segmentation={segmentation} />\n <TeaserContent content={content} segmentation={segmentation} />\n <TeaserButtonComp button={button} />\n <TeaserFooter footer={footer} />\n </div>\n )}\n </div>\n );\n};\n\nconst TeaserHeadline = ({ headline, segmentation }: Pick<TeaserProps, 'headline' | 'segmentation'>) => {\n if (!headline) {\n return null;\n }\n\n return <h2 className={segmentation === '100' ? 'margin-top-20 margin-bottom-25' : 'margin-top-5'}>{headline}</h2>;\n};\n\nconst TeaserContent = ({ content, segmentation }: Pick<TeaserProps, 'content' | 'segmentation'>) => {\n if (!content) {\n return null;\n }\n\n const classes = classNames(\n 'teaser-content-wrapper text-size-16',\n segmentation === '100' ? 'padding-left-25-sm padding-right-25-sm' : 'flex-1-0-sm'\n );\n return <div className={classes}>{content}</div>;\n};\n\nconst TeaserFooter = ({ footer }: Pick<TeaserProps, 'footer'>) => {\n if (!footer) {\n return null;\n }\n\n return <div className='teaser-footer-wrapper'>{footer}</div>;\n};\n\nconst TeaserButtonComp = ({ button }: Pick<TeaserProps, 'button'>) => {\n if (!button) {\n return null;\n }\n\n return (\n <span>\n <Button bsStyle={button.bsStyle ?? 'primary'} className={button.className} onClick={button.onClick}>\n {button.text}\n </Button>\n </span>\n );\n};\n\n/* eslint-disable max-len */\nconst placeholderImage1by1 =\n 'data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAA+gAAAPoCAQAAADnqhxvAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfiCw8ODSFLsnJ3AAAPvUlEQVR42u3VMQ0AIADAMMC/ZxDBQVhaBfs29wAAfrdeBwAA9wwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDgTLCM9BHrU/AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE4LTExLTE1VDEzOjEzOjMzKzAxOjAwgedH5AAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxOC0xMS0xNVQxMzoxMzozMyswMTowMPC6/1gAAAAASUVORK5CYII=';\n\nconst placeholderImage3by1 =\n 'data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAA+gAAAFNCAQAAAA55I0bAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfiCw8ODDQ/dKfdAAAFUUlEQVR42u3VMQ0AIADAMMC/ZxDBQVhaBfs29wAAfrdeBwAA9wwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIO/GUDmajv5qgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTgtMTEtMTVUMTM6MTI6NTIrMDE6MDAOPS7pAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE4LTExLTE1VDEzOjEyOjUyKzAxOjAwf2CWVQAAAABJRU5ErkJggg==';\n\nconst placeholderImage3by2 =\n 'data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAA+gAAAKaCAQAAAAHN7sRAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfiCw8ODALwzjJEAAAKhUlEQVR42u3VMQ0AIADAMMC/ZxDBQVhaBfs29wAAfrdeBwAA9wwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIOCbQGM8brNAQAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTgtMTEtMTVUMTM6MTI6MDIrMDE6MDBG3SCNAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE4LTExLTE1VDEzOjEyOjAyKzAxOjAwN4CYMQAAAABJRU5ErkJggg==';\n\nconst placeholderImage16by9 =\n 'data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAA+gAAAIwCAQAAAC/sImZAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfiDBwMBx70M0fPAAAI3UlEQVR42u3VMQ0AIADAMMC/ZxDBQVhaBfs29wAAfrdeBwAA9wwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAg55rgVfT+Sm9AAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxOC0xMi0yOFQxMTowNzozMCswMTowMOGwCPwAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTgtMTItMjhUMTE6MDc6MzArMDE6MDCQ7bBAAAAAAElFTkSuQmCC';\n/* eslint-enable max-len */\n\nconst teaserPlaceholderImages = {\n '1:1': placeholderImage1by1,\n '3:1': placeholderImage3by1,\n '3:2': placeholderImage3by2,\n '16:9': placeholderImage16by9,\n} as const;\n\nconst TeaserImageComp = ({ image, segmentation }: Pick<TeaserProps, 'image' | 'segmentation'>) => {\n if (!image) {\n return null;\n }\n\n let specificClassNames;\n if (segmentation !== '100') {\n specificClassNames = classNames(\n image.align === 'left' && 'flex-order-1-sm padding-left-20-sm',\n image.align === 'right' && 'flex-order-2-sm padding-right-20-sm',\n segmentation === '50' && 'width-50pct-sm',\n segmentation === '25:75' && 'width-50pct-sm width-75pct-lg',\n segmentation === '75:25' && 'width-50pct-sm width-25pct-lg',\n segmentation && 'padding-top-20-sm padding-bottom-20-sm'\n );\n }\n\n const imageWrapperClassNames = classNames(\n 'teaser-image-wrapper',\n specificClassNames,\n image.className && image.className\n );\n\n const callback = image?.onClick ?? noop;\n\n return (\n <div className={imageWrapperClassNames} onClick={callback}>\n <img\n className='img-responsive cover center'\n src={teaserPlaceholderImages[image.aspectRatio!] ?? placeholderImage16by9}\n alt={image.alt ?? ''}\n style={{ backgroundImage: `url(${image.src})` }}\n />\n </div>\n );\n};\n"],"names":["Teaser","props","segmentation","verticalAlignment","alignmentClass","jsx","SingleColumnTeaser","MultipleSegmentsOrRowsTeaser","headline","content","footer","image","button","className","wrapperClassNames","classNames","jsxs","TeaserHeadline","TeaserImageComp","TeaserContent","TeaserButtonComp","TeaserFooter","wrapperClasses","captionClasses","classes","Button","placeholderImage1by1","placeholderImage3by1","placeholderImage3by2","placeholderImage16by9","teaserPlaceholderImages","specificClassNames","imageWrapperClassNames","callback","noop"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TeaserContainer.js","sources":["../../../src/components/teaser/TeaserContainer.tsx"],"sourcesContent":["import { Children, type PropsWithChildren } from 'react';\nimport classNames from '
|
|
1
|
+
{"version":3,"file":"TeaserContainer.js","sources":["../../../src/components/teaser/TeaserContainer.tsx"],"sourcesContent":["import { Children, type PropsWithChildren } from 'react';\n\nimport classNames from '../../utils/classNames';\n\nconst getGridClasses = (amount: number) => {\n switch (amount) {\n case 1:\n return 'col-12';\n case 2:\n return 'col-12 col-sm-6';\n case 3:\n return 'col-12 col-md-4';\n case 4:\n return 'col-12 col-md-6 col-lg-3';\n case 6:\n return 'col-12 col-sm-4 col-lg-2';\n case 12:\n return 'col-12 col-sm-1';\n default:\n return 'col-12';\n }\n};\n\nexport type TeasersPerRow = 1 | 2 | 3 | 4 | 6 | 12;\n\nexport type TeaserContainerProps = {\n /**\n * Defines how many children are rendered into a row.\n *\n * If \"teaserPerRow\" is not defined, the container tries to put all children in a row with regard to the\n * Bootstrap grid. This is done by dividing the amount of children by 12 in order to figure out the col grid\n * classes.\n *\n * It is recommended to define \"teasersPerRow\" when having more than 4 teasers.\n *\n * Possible values are: `1` `2` `3` `4` `6` `12`\n */\n teaserPerRow?: TeasersPerRow;\n\n /**\n * Optional string for additional classes added to each column of a child.\n */\n columnClassName?: string;\n\n /**\n * Optional string for additional classes added to the row.\n */\n className?: string;\n};\n\nconst TeaserContainer = (props: PropsWithChildren<TeaserContainerProps>) => {\n const { className, teaserPerRow, children, columnClassName } = props;\n\n const rowClassNames = classNames('teaser-container', 'row', 'display-flex-sm flex-wrap-sm', className);\n\n const columnClassNames = teaserPerRow\n ? getGridClasses(teaserPerRow)\n : getGridClasses(Children.count(children) || 1);\n\n const aggregatedColumnClassNames = classNames(columnClassNames, columnClassName);\n\n return (\n <div className={rowClassNames}>\n {Children.map(children, child => {\n return <div className={aggregatedColumnClassNames}>{child}</div>;\n })}\n </div>\n );\n};\n\nexport default TeaserContainer;\n"],"names":["getGridClasses","amount","TeaserContainer","props","className","teaserPerRow","children","columnClassName","rowClassNames","classNames","columnClassNames","Children","aggregatedColumnClassNames","child","jsx"],"mappings":";;;AAIA,MAAMA,IAAiB,CAACC,MAAmB;AACvC,UAAQA,GAAA;AAAA,IACJ,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX;AACI,aAAO;AAAA,EAAA;AAEnB,GA6BMC,IAAkB,CAACC,MAAmD;AACxE,QAAM,EAAE,WAAAC,GAAW,cAAAC,GAAc,UAAAC,GAAU,iBAAAC,MAAoBJ,GAEzDK,IAAgBC,EAAW,oBAAoB,OAAO,gCAAgCL,CAAS,GAE/FM,IACAV,EADmBK,KAEJM,EAAS,MAAML,CAAQ,KAAK,CADhB,GAG3BM,IAA6BH,EAAWC,GAAkBH,CAAe;AAE/E,2BACK,OAAA,EAAI,WAAWC,GACX,UAAAG,EAAS,IAAIL,GAAU,CAAAO,MACb,gBAAAC,EAAC,OAAA,EAAI,WAAWF,GAA6B,UAAAC,GAAM,CAC7D,EAAA,CACL;AAER;"}
|
|
@@ -6,6 +6,7 @@ export type TimePickerProps = {
|
|
|
6
6
|
value?: string;
|
|
7
7
|
/**
|
|
8
8
|
* Callback function when the value changes and is a valid time format.
|
|
9
|
+
* It also emits an empty string when the input is cleared.
|
|
9
10
|
*
|
|
10
11
|
* If not it handles the state internally until the time is valid and filled.
|
|
11
12
|
*/
|
|
@@ -22,6 +23,25 @@ export type TimePickerProps = {
|
|
|
22
23
|
* @default false
|
|
23
24
|
*/
|
|
24
25
|
showIcon?: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Defines whether to show a dropdown with pre-defined time values.
|
|
28
|
+
*
|
|
29
|
+
* @default false
|
|
30
|
+
*/
|
|
31
|
+
dropdown?: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Defines the minute interval for time controls and dropdown values.
|
|
34
|
+
* Invalid values fallback to 15.
|
|
35
|
+
*
|
|
36
|
+
* @default 15
|
|
37
|
+
*/
|
|
38
|
+
minuteOffset?: number;
|
|
39
|
+
/**
|
|
40
|
+
* Defines whether the component is disabled.
|
|
41
|
+
*
|
|
42
|
+
* @default false
|
|
43
|
+
*/
|
|
44
|
+
disabled?: boolean;
|
|
25
45
|
/**
|
|
26
46
|
* Input error message.
|
|
27
47
|
*/
|
|
@@ -1,111 +1,165 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { useState as
|
|
3
|
-
import { IMaskInput as
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
},
|
|
13
|
-
|
|
1
|
+
import { jsxs as d, jsx as n, Fragment as ee } from "react/jsx-runtime";
|
|
2
|
+
import { useState as V, useRef as y, useEffect as P } from "react";
|
|
3
|
+
import { IMaskInput as se, IMask as I } from "react-imask";
|
|
4
|
+
import { noop as te } from "es-toolkit/compat";
|
|
5
|
+
import { isNil as ne } from "es-toolkit/predicate";
|
|
6
|
+
import O from "moment";
|
|
7
|
+
import oe from "tiny-invariant";
|
|
8
|
+
import re from "../selects/BaseSelectDropdown.js";
|
|
9
|
+
import ae from "../../hooks/useClickOutside.js";
|
|
10
|
+
import ie from "../../hooks/useMergeRefs.js";
|
|
11
|
+
import T from "../../utils/classNames.js";
|
|
12
|
+
const b = 15, ce = /^(?:\d|[01]\d|2[0-3]):[0-5]\d$/, C = (e) => e >= 10 ? `${e}` : `0${e}`, p = (e, t) => `${C(e)}:${C(t)}`, D = (e, t = b) => Math.floor(e.minutes() / t) * t, le = (e) => Number.isInteger(e) && e > 0 && e <= 60, me = (e) => le(e) ? e : b, de = (e) => {
|
|
13
|
+
const t = [];
|
|
14
|
+
for (let a = 0; a < 1440; a += e) {
|
|
15
|
+
const f = Math.floor(a / 60), i = a % 60;
|
|
16
|
+
t.push(p(f, i));
|
|
17
|
+
}
|
|
18
|
+
return t;
|
|
19
|
+
}, ue = () => {
|
|
20
|
+
const e = /* @__PURE__ */ new Date(), t = e.getHours(), r = e.getMinutes();
|
|
21
|
+
return p(t, r);
|
|
22
|
+
}, S = (e) => ce.test(e), R = (e) => {
|
|
23
|
+
if (!!ne(e))
|
|
14
24
|
return !1;
|
|
15
|
-
const
|
|
16
|
-
return
|
|
17
|
-
},
|
|
25
|
+
const r = e === "" || S(e);
|
|
26
|
+
return r || oe(!1, 'Wrong time format. Please pass in value with the following format: "hh:mm".'), r;
|
|
27
|
+
}, be = (e) => {
|
|
18
28
|
const {
|
|
19
|
-
value:
|
|
20
|
-
onChange:
|
|
21
|
-
alwaysShowMask:
|
|
22
|
-
showIcon:
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}, [
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
},
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
29
|
+
value: t,
|
|
30
|
+
onChange: r = te,
|
|
31
|
+
alwaysShowMask: a = !0,
|
|
32
|
+
showIcon: f = !1,
|
|
33
|
+
dropdown: i = !1,
|
|
34
|
+
minuteOffset: $ = b,
|
|
35
|
+
disabled: F = !1,
|
|
36
|
+
errorMessage: h,
|
|
37
|
+
warningMessage: g,
|
|
38
|
+
messageWhiteSpace: E = "normal",
|
|
39
|
+
className: H = "",
|
|
40
|
+
inputProps: k = {},
|
|
41
|
+
...A
|
|
42
|
+
} = e, W = R(t) ? t : ue(), [c, l] = V(W), [x, N] = V(!1), m = me($), u = F || !!k.disabled, j = y(null), w = y(!1), M = y(!1), B = ae(() => {
|
|
43
|
+
i && N(!1);
|
|
44
|
+
}), L = ie(j, B);
|
|
45
|
+
P(() => {
|
|
46
|
+
R(t) && l(t);
|
|
47
|
+
}, [t]), P(() => (w.current = !0, () => {
|
|
48
|
+
w.current = !1;
|
|
49
|
+
}), []);
|
|
50
|
+
const U = (s) => {
|
|
51
|
+
const o = s.target;
|
|
52
|
+
(!o.value || o.value.startsWith("-")) && setTimeout(() => {
|
|
53
|
+
o.setSelectionRange(0, 0);
|
|
54
|
+
}, 0), k.onFocus?.(s), i && !u && N(!0);
|
|
55
|
+
}, z = (s, o) => {
|
|
56
|
+
if (M.current) {
|
|
57
|
+
M.current = !1;
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
if (l(s), !!w.current) {
|
|
61
|
+
if (o.masked.isComplete) {
|
|
62
|
+
r(s);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
o.unmaskedValue === "" && r("");
|
|
66
|
+
}
|
|
67
|
+
}, _ = S(c), q = () => {
|
|
68
|
+
const s = O(`2020-01-01 ${c}`), o = D(s, m);
|
|
69
|
+
s.minute(o).second(0), s.add(m, "minutes");
|
|
70
|
+
const v = p(s.hours(), s.minutes());
|
|
71
|
+
l(v);
|
|
72
|
+
}, G = () => {
|
|
73
|
+
const s = O(`2020-01-01 ${c}`), o = D(s, m);
|
|
74
|
+
s.minute(o).second(0), s.subtract(m, "minutes");
|
|
75
|
+
const v = p(s.hours(), s.minutes());
|
|
76
|
+
l(v);
|
|
77
|
+
}, { className: J, ...K } = k, Q = de(m).map((s) => ({
|
|
78
|
+
id: s,
|
|
79
|
+
label: s,
|
|
80
|
+
selected: s === c
|
|
81
|
+
})), X = (s) => {
|
|
82
|
+
!s || u || (M.current = !0, l(s.id), r(s.id), N(!1));
|
|
83
|
+
}, Y = h || g, Z = T("TimePicker", i && "dropdown", x && "open", H);
|
|
84
|
+
return /* @__PURE__ */ d("div", { ...A, className: Z, ref: L, children: [
|
|
85
|
+
/* @__PURE__ */ d("div", { className: "input-group", children: [
|
|
86
|
+
f && /* @__PURE__ */ n("span", { className: "input-group-addon", children: /* @__PURE__ */ n("span", { className: "rioglyph rioglyph-time-alt" }) }),
|
|
87
|
+
/* @__PURE__ */ d("div", { className: "form-control-feedback-wrapper", children: [
|
|
88
|
+
/* @__PURE__ */ n(
|
|
89
|
+
se,
|
|
90
|
+
{
|
|
91
|
+
...K,
|
|
92
|
+
className: T("TimePickerInput", "form-control", J),
|
|
93
|
+
disabled: u,
|
|
94
|
+
mask: "HH:MM",
|
|
95
|
+
blocks: {
|
|
96
|
+
HH: {
|
|
97
|
+
mask: I.MaskedRange,
|
|
98
|
+
from: 0,
|
|
99
|
+
to: 23,
|
|
100
|
+
maxLength: 2
|
|
101
|
+
},
|
|
102
|
+
MM: {
|
|
103
|
+
mask: I.MaskedRange,
|
|
104
|
+
from: 0,
|
|
105
|
+
to: 59,
|
|
106
|
+
maxLength: 2
|
|
107
|
+
}
|
|
66
108
|
},
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
R && /* @__PURE__ */ l(A, { children: [
|
|
83
|
-
m && /* @__PURE__ */ t("span", { className: "form-control-feedback rioglyph rioglyph-error-sign" }),
|
|
84
|
-
d && /* @__PURE__ */ t("span", { className: "form-control-feedback rioglyph rioglyph-warning-sign" }),
|
|
85
|
-
/* @__PURE__ */ t("span", { className: `help-block white-space-${w}`, children: /* @__PURE__ */ t("span", { children: m || d }) })
|
|
86
|
-
] })
|
|
87
|
-
] }),
|
|
88
|
-
C && /* @__PURE__ */ l("div", { className: "TimePickerIncreaseButton input-group-addon", children: [
|
|
89
|
-
/* @__PURE__ */ t(
|
|
109
|
+
value: c,
|
|
110
|
+
onAccept: z,
|
|
111
|
+
onFocus: U,
|
|
112
|
+
lazy: !a,
|
|
113
|
+
placeholderChar: "-",
|
|
114
|
+
overwrite: !0
|
|
115
|
+
}
|
|
116
|
+
),
|
|
117
|
+
Y && /* @__PURE__ */ d(ee, { children: [
|
|
118
|
+
h && /* @__PURE__ */ n("span", { className: "form-control-feedback rioglyph rioglyph-error-sign" }),
|
|
119
|
+
g && /* @__PURE__ */ n("span", { className: "form-control-feedback rioglyph rioglyph-warning-sign" }),
|
|
120
|
+
/* @__PURE__ */ n("span", { className: `help-block white-space-${E}`, children: /* @__PURE__ */ n("span", { children: h || g }) })
|
|
121
|
+
] })
|
|
122
|
+
] }),
|
|
123
|
+
_ && /* @__PURE__ */ d(
|
|
90
124
|
"div",
|
|
91
125
|
{
|
|
92
|
-
className:
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
126
|
+
className: T(
|
|
127
|
+
"TimePickerIncreaseButton input-group-addon",
|
|
128
|
+
u && "pointer-events-none bg-lightest"
|
|
129
|
+
),
|
|
130
|
+
children: [
|
|
131
|
+
/* @__PURE__ */ n(
|
|
132
|
+
"div",
|
|
133
|
+
{
|
|
134
|
+
className: "text-color-gray hover-text-color-dark display-grid place-items-center cursor-pointer",
|
|
135
|
+
onClick: G,
|
|
136
|
+
children: /* @__PURE__ */ n("div", { className: "rioglyph rioglyph-chevron-left scale-90" })
|
|
137
|
+
}
|
|
138
|
+
),
|
|
139
|
+
/* @__PURE__ */ n(
|
|
140
|
+
"div",
|
|
141
|
+
{
|
|
142
|
+
className: "text-color-gray hover-text-color-dark margin-left-5 display-grid place-items-center cursor-pointer",
|
|
143
|
+
onClick: q,
|
|
144
|
+
children: /* @__PURE__ */ n("div", { className: "rioglyph rioglyph-chevron-right scale-90" })
|
|
145
|
+
}
|
|
146
|
+
)
|
|
147
|
+
]
|
|
103
148
|
}
|
|
104
149
|
)
|
|
105
|
-
] })
|
|
150
|
+
] }),
|
|
151
|
+
i && /* @__PURE__ */ n(
|
|
152
|
+
re,
|
|
153
|
+
{
|
|
154
|
+
isOpen: x,
|
|
155
|
+
options: Q,
|
|
156
|
+
onSelect: X,
|
|
157
|
+
dropdownClassName: "max-height-200 overflow-auto width-100pct"
|
|
158
|
+
}
|
|
159
|
+
)
|
|
106
160
|
] });
|
|
107
161
|
};
|
|
108
162
|
export {
|
|
109
|
-
|
|
163
|
+
be as default
|
|
110
164
|
};
|
|
111
165
|
//# sourceMappingURL=TimePicker.js.map
|