@amboss/design-system 4.8.2-canary.0 → 4.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/components/AIButton/AIButton.js +1 -1
- package/build/cjs/components/AccessCardItem/AccessCardItem.js +1 -1
- package/build/cjs/components/Avatar/Avatar.js +1 -1
- package/build/cjs/components/BulkActionsToolbar/BulkActionsToolbar.js +1 -1
- package/build/cjs/components/Button/Button.js +1 -1
- package/build/cjs/components/Card/CardHeader/CardHeader.js +1 -1
- package/build/cjs/components/CatalogCard/CatalogCard.d.ts +5 -1
- package/build/cjs/components/CatalogCard/CatalogCard.js +1 -1
- package/build/cjs/components/CheckboxCard/CheckboxCard.js +1 -1
- package/build/cjs/components/Collapsible/Collapsible.js +1 -1
- package/build/cjs/components/Container/Container.js +1 -1
- package/build/cjs/components/Content/ContentBadge/ContentBadge.js +1 -1
- package/build/cjs/components/Content/ContentCheckbox/ContentCheckbox.js +1 -1
- package/build/cjs/components/Content/ContentLink/ContentLink.js +1 -1
- package/build/cjs/components/Content/ContentPictogramButton/ContentPictogramButton.js +1 -1
- package/build/cjs/components/Content/ContentTableModal/ContentTableModal.js +2 -2
- package/build/cjs/components/Content/ContentText/ContentText.d.ts +1 -1
- package/build/cjs/components/Content/ContentText/ContentText.js +1 -1
- package/build/cjs/components/Content/DosageButton/DosageButton.d.ts +1 -1
- package/build/cjs/components/CountButton/CountButton.js +1 -1
- package/build/cjs/components/DataTable/header/SortableCellContent.js +1 -1
- package/build/cjs/components/DataTable/header/TableHeader.js +1 -1
- package/build/cjs/components/DataTable/useDataTableSelectRows.d.ts +2 -2
- package/build/cjs/components/DataTable/useDataTableSelectRows.js +1 -1
- package/build/cjs/components/DataTable/useDataTableSort.d.ts +3 -3
- package/build/cjs/components/Divider/Divider.js +1 -1
- package/build/cjs/components/DropdownMenu/DropdownMenu.d.ts +5 -1
- package/build/cjs/components/DropdownMenu/DropdownMenu.js +1 -1
- package/build/cjs/components/DropdownMenu/Menu.d.ts +1 -1
- package/build/cjs/components/DropdownMenu/Menu.js +1 -1
- package/build/cjs/components/EntityList/BaseEntityList.js +1 -1
- package/build/cjs/components/EntityList/EntityItemBody.d.ts +3 -1
- package/build/cjs/components/EntityList/EntityItemBody.js +1 -1
- package/build/cjs/components/EntityList/EntityListItem.js +1 -1
- package/build/cjs/components/EntityTree/BaseEntityTree.d.ts +3 -2
- package/build/cjs/components/EntityTree/BaseEntityTree.js +1 -1
- package/build/cjs/components/EntityTree/EntityTreeItem.js +1 -1
- package/build/cjs/components/EntityTree/EntityTreeItemExpandButton.d.ts +3 -1
- package/build/cjs/components/EntityTree/EntityTreeItemExpandButton.js +1 -1
- package/build/cjs/components/EntityTree/tree.d.ts +1 -1
- package/build/cjs/components/EntityTree/tree.js +1 -1
- package/build/cjs/components/Form/Checkbox/Checkbox.js +1 -1
- package/build/cjs/components/Form/Combobox/Combobox.js +1 -1
- package/build/cjs/components/Form/Combobox/MultiSelect.d.ts +1 -1
- package/build/cjs/components/Form/Combobox/MultiSelect.js +1 -1
- package/build/cjs/components/Form/Combobox/MultiSelectReducer.d.ts +1 -1
- package/build/cjs/components/Form/Combobox/OptionsList.d.ts +6 -3
- package/build/cjs/components/Form/Combobox/OptionsList.js +1 -1
- package/build/cjs/components/Form/Combobox/SingleSelect.d.ts +1 -1
- package/build/cjs/components/Form/Combobox/SingleSelect.js +1 -1
- package/build/cjs/components/Form/Combobox/constants.js +1 -1
- package/build/cjs/components/Form/FormFieldGroup/FormFieldGroup.js +1 -1
- package/build/cjs/components/Form/Input/Input.js +1 -1
- package/build/cjs/components/Form/PasswordInput/PasswordInput.js +1 -1
- package/build/cjs/components/Form/PasswordInput/PasswordInputButton.d.ts +2 -2
- package/build/cjs/components/Form/PasswordInput/PasswordInputButton.js +1 -1
- package/build/cjs/components/Form/Radio/Radio.js +1 -1
- package/build/cjs/components/Form/RangeInput/RangeInput.js +1 -1
- package/build/cjs/components/Form/SearchInput/SearchInput.js +1 -1
- package/build/cjs/components/Form/SegmentedControl/-types.d.ts +2 -2
- package/build/cjs/components/Form/SegmentedControl/SegmentedControl.js +1 -1
- package/build/cjs/components/Form/SegmentedControl/SegmentedControlOption.js +1 -1
- package/build/cjs/components/Form/Select/Select.js +1 -1
- package/build/cjs/components/Form/Select/SelectWithCustomTrigger.js +1 -1
- package/build/cjs/components/Form/Select/useTypeAheadSearch.js +1 -1
- package/build/cjs/components/Form/Textarea/Textarea.js +1 -1
- package/build/cjs/components/Form/Toggle/Toggle.js +1 -1
- package/build/cjs/components/Form/ToggleButton/ToggleButton.js +1 -1
- package/build/cjs/components/Grid/Grid.js +1 -1
- package/build/cjs/components/Icon/Icon.js +1 -1
- package/build/cjs/components/Image/Image.js +1 -1
- package/build/cjs/components/Inline/Inline.js +1 -1
- package/build/cjs/components/Internal/BaseTag/BaseTag.d.ts +5 -1
- package/build/cjs/components/Internal/BaseTag/BaseTag.js +1 -1
- package/build/cjs/components/Internal/Float/Float.d.ts +1 -1
- package/build/cjs/components/Internal/Float/Float.js +1 -1
- package/build/cjs/components/Internal/PanelHeader/PanelHeader.d.ts +4 -0
- package/build/cjs/components/Internal/PanelHeader/PanelHeader.js +1 -1
- package/build/cjs/components/Internal/Sandwich/useSandwichContext.d.ts +1 -1
- package/build/cjs/components/Layout/-constants.d.ts +4 -0
- package/build/cjs/components/Layout/-constants.js +1 -1
- package/build/cjs/components/Layout/-types.d.ts +16 -24
- package/build/cjs/components/Layout/Layout.js +1 -1
- package/build/cjs/components/Layout/LayoutCssVars.d.ts +1 -1
- package/build/cjs/components/Layout/LeftPanel/LeftBarLayers.d.ts +2 -3
- package/build/cjs/components/Layout/LeftPanel/LeftBarLayers.js +1 -1
- package/build/cjs/components/Layout/LeftPanel/LeftBarToggle.d.ts +3 -4
- package/build/cjs/components/Layout/LeftPanel/LeftBarToggle.js +1 -1
- package/build/cjs/components/Layout/LeftPanel/LeftPanel.d.ts +2 -2
- package/build/cjs/components/Layout/LeftPanel/LeftPanel.js +1 -1
- package/build/cjs/components/Layout/LeftPanel/LeftPanelDocked.d.ts +4 -9
- package/build/cjs/components/Layout/LeftPanel/LeftPanelDocked.js +1 -1
- package/build/cjs/components/Layout/LeftPanel/LeftPanelFooter.js +1 -1
- package/build/cjs/components/Layout/LeftPanel/LeftPanelHeader.js +1 -1
- package/build/cjs/components/Layout/LeftPanel/LeftPanelOffcanvas.d.ts +2 -3
- package/build/cjs/components/Layout/LeftPanel/LeftPanelOffcanvas.js +1 -1
- package/build/cjs/components/Layout/LeftPanel/useLeftBarContext.d.ts +1 -1
- package/build/cjs/components/Layout/LeftPanel/useLeftBarContext.js +1 -1
- package/build/cjs/components/Layout/LeftPanel/useLeftPanelCollapseContext.d.ts +3 -3
- package/build/cjs/components/Layout/LeftPanel/useLeftPanelCollapseContext.js +1 -1
- package/build/cjs/components/Layout/Split/MobileSplitView/useMobileSplitStack.d.ts +1 -1
- package/build/cjs/components/Layout/context.d.ts +1 -1
- package/build/cjs/components/Layout/reducer.js +1 -1
- package/build/cjs/components/Layout/registry.d.ts +5 -5
- package/build/cjs/components/Layout/registry.js +1 -1
- package/build/cjs/components/Layout/useLayout.js +1 -1
- package/build/cjs/components/Layout/useLayoutRules.js +1 -1
- package/build/cjs/components/Layout/usePanelDockedSlide.d.ts +1 -1
- package/build/cjs/components/Layout/usePanelDockedSlide.js +1 -1
- package/build/cjs/components/Lightbox/Lightbox.js +2 -2
- package/build/cjs/components/Link/Link.js +1 -1
- package/build/cjs/components/MediaItem/MediaItem.d.ts +1 -0
- package/build/cjs/components/MediaItem/MediaItem.js +1 -1
- package/build/cjs/components/MediaItem/MediaItemSkeleton.js +1 -1
- package/build/cjs/components/MediaViewerBar/MediaViewerBar.js +1 -1
- package/build/cjs/components/MediaViewerCarousel/CarouselThumbnail/CarouselThumbnail.js +1 -1
- package/build/cjs/components/MediaViewerCarousel/MediaCarousel/MediaCarousel.js +1 -1
- package/build/cjs/components/Notification/Notification.d.ts +1 -1
- package/build/cjs/components/Notification/Notification.js +1 -1
- package/build/cjs/components/Patterns/ButtonGroup/ButtonGroup.d.ts +1 -1
- package/build/cjs/components/Patterns/EmptyState/EmptyState.js +1 -1
- package/build/cjs/components/Patterns/Modal/Modal.js +2 -2
- package/build/cjs/components/PictogramButton/PictogramButton.js +1 -1
- package/build/cjs/components/Portal/Portal.d.ts +2 -2
- package/build/cjs/components/PromptButton/PromptButton.js +1 -1
- package/build/cjs/components/PromptInput/AutocompleteList.d.ts +1 -1
- package/build/cjs/components/PromptInput/AutocompleteList.js +1 -1
- package/build/cjs/components/PromptInput/PromptInput.js +1 -1
- package/build/cjs/components/PromptInput/PromptTextArea.js +1 -1
- package/build/cjs/components/RadioCard/RadioCard.js +1 -1
- package/build/cjs/components/RoundButton/RoundButton.js +1 -1
- package/build/cjs/components/SearchResult/SearchResult.js +1 -1
- package/build/cjs/components/SegmentedProgressBar/-utils/getPercentagesForVariants.d.ts +4 -2
- package/build/cjs/components/SegmentedProgressBar/-utils/getPercentagesForVariants.js +1 -1
- package/build/cjs/components/SegmentedProgressBar/LegendPopover.d.ts +2 -1
- package/build/cjs/components/SegmentedProgressBar/LegendPopover.js +1 -1
- package/build/cjs/components/SegmentedProgressBar/SegmentedProgressBar.js +1 -1
- package/build/cjs/components/ShadowWebComponent/ShadowWebComponent.js +1 -1
- package/build/cjs/components/Sheet/Sheet.d.ts +1 -1
- package/build/cjs/components/Sheet/Sheet.js +1 -1
- package/build/cjs/components/SplashCard/SplashCard.js +1 -1
- package/build/cjs/components/SplashCardMedia/SplashCardMedia.js +1 -1
- package/build/cjs/components/Stack/Stack.js +1 -1
- package/build/cjs/components/SubThemeProvider/SubThemeContext.d.ts +1 -1
- package/build/cjs/components/SubThemeProvider/SubThemeProvider.d.ts +2 -1
- package/build/cjs/components/SubThemeProvider/SubThemeProvider.js +1 -1
- package/build/cjs/components/Tabs/Tabs.js +1 -1
- package/build/cjs/components/TagGroup/TagGroup.js +1 -1
- package/build/cjs/components/Toast/Toast.d.ts +2 -1
- package/build/cjs/components/Toast/Toast.js +1 -1
- package/build/cjs/components/Toast/ToastProvider.d.ts +5 -3
- package/build/cjs/components/Toggletip/BasePopover.js +1 -1
- package/build/cjs/components/Tooltip/TooltipContent.d.ts +1 -1
- package/build/cjs/components/Tooltip/TooltipContent.js +1 -1
- package/build/cjs/components/Typography/StyledText/StyledText.d.ts +1 -1
- package/build/cjs/components/Typography/StyledText/StyledText.js +1 -1
- package/build/cjs/components/Typography/Text/Text.d.ts +1 -1
- package/build/cjs/components/Typography/Text/Text.js +1 -1
- package/build/cjs/components/Typography/Text/TextSkeleton.js +1 -1
- package/build/cjs/components/Typography/TextClamped/TextClamped.js +1 -1
- package/build/cjs/components/UserHighlightTooltip/UserHighlightTooltip.d.ts +1 -1
- package/build/cjs/components/UserHighlightTooltip/UserHighlightTooltip.js +1 -1
- package/build/cjs/components/Utilities/ContainerQuery/ContainerQueryContext.d.ts +1 -1
- package/build/cjs/components/Utilities/Expandable/Expandable.js +1 -1
- package/build/cjs/components/Utilities/FloatingPosition/utils.d.ts +1 -1
- package/build/cjs/components/VirtualScrollList/VirtualScrollList.d.ts +1 -1
- package/build/cjs/components/VirtualScrollList/VirtualScrollList.js +1 -1
- package/build/cjs/components/VirtualScrollList/VirtualScrollListReducer.d.ts +2 -2
- package/build/cjs/components/VirtualScrollList/VirtualScrollListReducer.js +1 -1
- package/build/cjs/shared/appendId.d.ts +1 -1
- package/build/cjs/shared/forwardRefPolymorphic.d.ts +2 -0
- package/build/cjs/shared/forwardRefPolymorphic.js +1 -0
- package/build/cjs/shared/intl/translations/de.json +7 -1
- package/build/cjs/shared/intl/translations/en.json +7 -1
- package/build/cjs/shared/mediaQueries.d.ts +3 -3
- package/build/cjs/shared/mixins/Button/getPillStyles.js +1 -1
- package/build/cjs/shared/useAutoPosition.js +1 -1
- package/build/cjs/shared/useHover.d.ts +1 -1
- package/build/cjs/shared/useHover.js +1 -1
- package/build/cjs/shared/useOutsideClickDeactivatesWithinPortal.d.ts +1 -1
- package/build/cjs/shared/useOutsideClickDeactivatesWithinPortal.js +1 -1
- package/build/cjs/web-tokens/_colors.json +12 -12
- package/build/cjs/web-tokens/_sizes.json +55 -55
- package/build/cjs/web-tokens/visualConfig.d.ts +1 -0
- package/build/cjs/web-tokens/visualConfig.js +1 -1
- package/build/esm/components/AIButton/AIButton.js +1 -1
- package/build/esm/components/AccessCardItem/AccessCardItem.js +1 -1
- package/build/esm/components/Avatar/Avatar.js +1 -1
- package/build/esm/components/BulkActionsToolbar/BulkActionsToolbar.js +1 -1
- package/build/esm/components/Button/Button.js +1 -1
- package/build/esm/components/Card/CardHeader/CardHeader.js +1 -1
- package/build/esm/components/CatalogCard/CatalogCard.d.ts +5 -1
- package/build/esm/components/CatalogCard/CatalogCard.js +1 -1
- package/build/esm/components/CheckboxCard/CheckboxCard.js +1 -1
- package/build/esm/components/Collapsible/Collapsible.js +1 -1
- package/build/esm/components/Container/Container.js +1 -1
- package/build/esm/components/Content/ContentBadge/ContentBadge.js +1 -1
- package/build/esm/components/Content/ContentCheckbox/ContentCheckbox.js +1 -1
- package/build/esm/components/Content/ContentLink/ContentLink.js +1 -1
- package/build/esm/components/Content/ContentPictogramButton/ContentPictogramButton.js +1 -1
- package/build/esm/components/Content/ContentTableModal/ContentTableModal.js +2 -2
- package/build/esm/components/Content/ContentText/ContentText.d.ts +1 -1
- package/build/esm/components/Content/ContentText/ContentText.js +1 -1
- package/build/esm/components/Content/DosageButton/DosageButton.d.ts +1 -1
- package/build/esm/components/CountButton/CountButton.js +1 -1
- package/build/esm/components/DataTable/header/SortableCellContent.js +1 -1
- package/build/esm/components/DataTable/header/TableHeader.js +1 -1
- package/build/esm/components/DataTable/useDataTableSelectRows.d.ts +2 -2
- package/build/esm/components/DataTable/useDataTableSelectRows.js +1 -1
- package/build/esm/components/DataTable/useDataTableSort.d.ts +3 -3
- package/build/esm/components/Divider/Divider.js +1 -1
- package/build/esm/components/DropdownMenu/DropdownMenu.d.ts +5 -1
- package/build/esm/components/DropdownMenu/DropdownMenu.js +1 -1
- package/build/esm/components/DropdownMenu/Menu.d.ts +1 -1
- package/build/esm/components/DropdownMenu/Menu.js +1 -1
- package/build/esm/components/EntityList/BaseEntityList.js +1 -1
- package/build/esm/components/EntityList/EntityItemBody.d.ts +3 -1
- package/build/esm/components/EntityList/EntityItemBody.js +1 -1
- package/build/esm/components/EntityList/EntityListItem.js +1 -1
- package/build/esm/components/EntityTree/BaseEntityTree.d.ts +3 -2
- package/build/esm/components/EntityTree/BaseEntityTree.js +1 -1
- package/build/esm/components/EntityTree/EntityTreeItem.js +1 -1
- package/build/esm/components/EntityTree/EntityTreeItemExpandButton.d.ts +3 -1
- package/build/esm/components/EntityTree/EntityTreeItemExpandButton.js +1 -1
- package/build/esm/components/EntityTree/tree.d.ts +1 -1
- package/build/esm/components/EntityTree/tree.js +1 -1
- package/build/esm/components/Form/Checkbox/Checkbox.js +1 -1
- package/build/esm/components/Form/Combobox/Combobox.js +1 -1
- package/build/esm/components/Form/Combobox/MultiSelect.d.ts +1 -1
- package/build/esm/components/Form/Combobox/MultiSelect.js +1 -1
- package/build/esm/components/Form/Combobox/MultiSelectReducer.d.ts +1 -1
- package/build/esm/components/Form/Combobox/OptionsList.d.ts +6 -3
- package/build/esm/components/Form/Combobox/OptionsList.js +1 -1
- package/build/esm/components/Form/Combobox/SingleSelect.d.ts +1 -1
- package/build/esm/components/Form/Combobox/SingleSelect.js +1 -1
- package/build/esm/components/Form/Combobox/constants.js +1 -1
- package/build/esm/components/Form/FormFieldGroup/FormFieldGroup.js +1 -1
- package/build/esm/components/Form/Input/Input.js +1 -1
- package/build/esm/components/Form/PasswordInput/PasswordInput.js +1 -1
- package/build/esm/components/Form/PasswordInput/PasswordInputButton.d.ts +2 -2
- package/build/esm/components/Form/PasswordInput/PasswordInputButton.js +1 -1
- package/build/esm/components/Form/Radio/Radio.js +1 -1
- package/build/esm/components/Form/RangeInput/RangeInput.js +1 -1
- package/build/esm/components/Form/SearchInput/SearchInput.js +1 -1
- package/build/esm/components/Form/SegmentedControl/-types.d.ts +2 -2
- package/build/esm/components/Form/SegmentedControl/SegmentedControl.js +1 -1
- package/build/esm/components/Form/SegmentedControl/SegmentedControlOption.js +1 -1
- package/build/esm/components/Form/Select/Select.js +1 -1
- package/build/esm/components/Form/Select/SelectWithCustomTrigger.js +1 -1
- package/build/esm/components/Form/Select/useTypeAheadSearch.js +1 -1
- package/build/esm/components/Form/Textarea/Textarea.js +1 -1
- package/build/esm/components/Form/Toggle/Toggle.js +1 -1
- package/build/esm/components/Form/ToggleButton/ToggleButton.js +1 -1
- package/build/esm/components/Grid/Grid.js +1 -1
- package/build/esm/components/Icon/Icon.js +1 -1
- package/build/esm/components/Image/Image.js +1 -1
- package/build/esm/components/Inline/Inline.js +1 -1
- package/build/esm/components/Internal/BaseTag/BaseTag.d.ts +5 -1
- package/build/esm/components/Internal/BaseTag/BaseTag.js +1 -1
- package/build/esm/components/Internal/Float/Float.d.ts +1 -1
- package/build/esm/components/Internal/Float/Float.js +1 -1
- package/build/esm/components/Internal/PanelHeader/PanelHeader.d.ts +4 -0
- package/build/esm/components/Internal/PanelHeader/PanelHeader.js +1 -1
- package/build/esm/components/Internal/Sandwich/useSandwichContext.d.ts +1 -1
- package/build/esm/components/Layout/-constants.d.ts +4 -0
- package/build/esm/components/Layout/-constants.js +1 -1
- package/build/esm/components/Layout/-types.d.ts +16 -24
- package/build/esm/components/Layout/Layout.js +1 -1
- package/build/esm/components/Layout/LayoutCssVars.d.ts +1 -1
- package/build/esm/components/Layout/LeftPanel/LeftBarLayers.d.ts +2 -3
- package/build/esm/components/Layout/LeftPanel/LeftBarLayers.js +1 -1
- package/build/esm/components/Layout/LeftPanel/LeftBarToggle.d.ts +3 -4
- package/build/esm/components/Layout/LeftPanel/LeftBarToggle.js +1 -1
- package/build/esm/components/Layout/LeftPanel/LeftPanel.d.ts +2 -2
- package/build/esm/components/Layout/LeftPanel/LeftPanel.js +1 -1
- package/build/esm/components/Layout/LeftPanel/LeftPanelDocked.d.ts +4 -9
- package/build/esm/components/Layout/LeftPanel/LeftPanelDocked.js +1 -1
- package/build/esm/components/Layout/LeftPanel/LeftPanelFooter.js +1 -1
- package/build/esm/components/Layout/LeftPanel/LeftPanelHeader.js +1 -1
- package/build/esm/components/Layout/LeftPanel/LeftPanelOffcanvas.d.ts +2 -3
- package/build/esm/components/Layout/LeftPanel/LeftPanelOffcanvas.js +1 -1
- package/build/esm/components/Layout/LeftPanel/useLeftBarContext.d.ts +1 -1
- package/build/esm/components/Layout/LeftPanel/useLeftBarContext.js +1 -1
- package/build/esm/components/Layout/LeftPanel/useLeftPanelCollapseContext.d.ts +3 -3
- package/build/esm/components/Layout/LeftPanel/useLeftPanelCollapseContext.js +1 -1
- package/build/esm/components/Layout/Split/MobileSplitView/useMobileSplitStack.d.ts +1 -1
- package/build/esm/components/Layout/context.d.ts +1 -1
- package/build/esm/components/Layout/reducer.js +1 -1
- package/build/esm/components/Layout/registry.d.ts +5 -5
- package/build/esm/components/Layout/registry.js +1 -1
- package/build/esm/components/Layout/useLayout.js +1 -1
- package/build/esm/components/Layout/useLayoutRules.js +1 -1
- package/build/esm/components/Layout/usePanelDockedSlide.d.ts +1 -1
- package/build/esm/components/Layout/usePanelDockedSlide.js +1 -1
- package/build/esm/components/Lightbox/Lightbox.js +2 -2
- package/build/esm/components/Link/Link.js +1 -1
- package/build/esm/components/MediaItem/MediaItem.d.ts +1 -0
- package/build/esm/components/MediaItem/MediaItem.js +1 -1
- package/build/esm/components/MediaItem/MediaItemSkeleton.js +1 -1
- package/build/esm/components/MediaViewerBar/MediaViewerBar.js +1 -1
- package/build/esm/components/MediaViewerCarousel/CarouselThumbnail/CarouselThumbnail.js +1 -1
- package/build/esm/components/MediaViewerCarousel/MediaCarousel/MediaCarousel.js +1 -1
- package/build/esm/components/Notification/Notification.d.ts +1 -1
- package/build/esm/components/Notification/Notification.js +1 -1
- package/build/esm/components/Patterns/ButtonGroup/ButtonGroup.d.ts +1 -1
- package/build/esm/components/Patterns/EmptyState/EmptyState.js +1 -1
- package/build/esm/components/Patterns/Modal/Modal.js +2 -2
- package/build/esm/components/PictogramButton/PictogramButton.js +1 -1
- package/build/esm/components/Portal/Portal.d.ts +2 -2
- package/build/esm/components/PromptButton/PromptButton.js +1 -1
- package/build/esm/components/PromptInput/AutocompleteList.d.ts +1 -1
- package/build/esm/components/PromptInput/AutocompleteList.js +1 -1
- package/build/esm/components/PromptInput/PromptInput.js +1 -1
- package/build/esm/components/PromptInput/PromptTextArea.js +1 -1
- package/build/esm/components/RadioCard/RadioCard.js +1 -1
- package/build/esm/components/RoundButton/RoundButton.js +1 -1
- package/build/esm/components/SearchResult/SearchResult.js +1 -1
- package/build/esm/components/SegmentedProgressBar/-utils/getPercentagesForVariants.d.ts +4 -2
- package/build/esm/components/SegmentedProgressBar/-utils/getPercentagesForVariants.js +1 -1
- package/build/esm/components/SegmentedProgressBar/LegendPopover.d.ts +2 -1
- package/build/esm/components/SegmentedProgressBar/LegendPopover.js +1 -1
- package/build/esm/components/SegmentedProgressBar/SegmentedProgressBar.js +1 -1
- package/build/esm/components/ShadowWebComponent/ShadowWebComponent.js +1 -1
- package/build/esm/components/Sheet/Sheet.d.ts +1 -1
- package/build/esm/components/Sheet/Sheet.js +1 -1
- package/build/esm/components/SplashCard/SplashCard.js +1 -1
- package/build/esm/components/SplashCardMedia/SplashCardMedia.js +1 -1
- package/build/esm/components/Stack/Stack.js +1 -1
- package/build/esm/components/SubThemeProvider/SubThemeContext.d.ts +1 -1
- package/build/esm/components/SubThemeProvider/SubThemeProvider.d.ts +2 -1
- package/build/esm/components/SubThemeProvider/SubThemeProvider.js +1 -1
- package/build/esm/components/Tabs/Tabs.js +1 -1
- package/build/esm/components/TagGroup/TagGroup.js +1 -1
- package/build/esm/components/Toast/Toast.d.ts +2 -1
- package/build/esm/components/Toast/Toast.js +1 -1
- package/build/esm/components/Toast/ToastProvider.d.ts +5 -3
- package/build/esm/components/Toggletip/BasePopover.js +1 -1
- package/build/esm/components/Tooltip/TooltipContent.d.ts +1 -1
- package/build/esm/components/Tooltip/TooltipContent.js +1 -1
- package/build/esm/components/Typography/StyledText/StyledText.d.ts +1 -1
- package/build/esm/components/Typography/StyledText/StyledText.js +1 -1
- package/build/esm/components/Typography/Text/Text.d.ts +1 -1
- package/build/esm/components/Typography/Text/Text.js +1 -1
- package/build/esm/components/Typography/Text/TextSkeleton.js +1 -1
- package/build/esm/components/Typography/TextClamped/TextClamped.js +1 -1
- package/build/esm/components/UserHighlightTooltip/UserHighlightTooltip.d.ts +1 -1
- package/build/esm/components/UserHighlightTooltip/UserHighlightTooltip.js +1 -1
- package/build/esm/components/Utilities/ContainerQuery/ContainerQueryContext.d.ts +1 -1
- package/build/esm/components/Utilities/Expandable/Expandable.js +1 -1
- package/build/esm/components/Utilities/FloatingPosition/utils.d.ts +1 -1
- package/build/esm/components/VirtualScrollList/VirtualScrollList.d.ts +1 -1
- package/build/esm/components/VirtualScrollList/VirtualScrollList.js +1 -1
- package/build/esm/components/VirtualScrollList/VirtualScrollListReducer.d.ts +2 -2
- package/build/esm/components/VirtualScrollList/VirtualScrollListReducer.js +1 -1
- package/build/esm/shared/appendId.d.ts +1 -1
- package/build/esm/shared/forwardRefPolymorphic.d.ts +2 -0
- package/build/esm/shared/forwardRefPolymorphic.js +1 -0
- package/build/esm/shared/intl/translations/de.json +7 -1
- package/build/esm/shared/intl/translations/en.json +7 -1
- package/build/esm/shared/mediaQueries.d.ts +3 -3
- package/build/esm/shared/mixins/Button/getPillStyles.js +1 -1
- package/build/esm/shared/useAutoPosition.js +1 -1
- package/build/esm/shared/useHover.d.ts +1 -1
- package/build/esm/shared/useHover.js +1 -1
- package/build/esm/shared/useOutsideClickDeactivatesWithinPortal.d.ts +1 -1
- package/build/esm/shared/useOutsideClickDeactivatesWithinPortal.js +1 -1
- package/build/esm/web-tokens/_colors.json +12 -12
- package/build/esm/web-tokens/_sizes.json +55 -55
- package/build/esm/web-tokens/visualConfig.d.ts +1 -0
- package/build/esm/web-tokens/visualConfig.js +1 -1
- package/package.json +9 -5
|
@@ -7,6 +7,6 @@ export type ContentTextProps = TypographyTextProps & {
|
|
|
7
7
|
/** Provides additional line-height */
|
|
8
8
|
isSpacedOut?: boolean;
|
|
9
9
|
};
|
|
10
|
-
export declare const ContentTextContext: React.Context<Pick<ContentTextProps, "color" | "size" | "weight" | "isSpacedOut"
|
|
10
|
+
export declare const ContentTextContext: React.Context<Pick<ContentTextProps, "color" | "size" | "weight" | "isSpacedOut"> | null>;
|
|
11
11
|
export declare const CONTENT_TEXT_LINE_HEIGHT_OFFSET = 0.14;
|
|
12
12
|
export declare function ContentText({ size, color, weight, isSpacedOut, children, ...rest }: ContentTextProps): React.ReactElement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React,{createContext,useContext,useMemo}from"react";import styled from"@emotion/styled";import{Text}from"../../Typography/Text";import{FontSizeOffsetContext}from"../ContentFontResizer/FontSizeOffsetContext";import{ContentTableContext}from"../ContentTable/ContentTableContext";import{getTextFontSize,getTextLineHeight}from"../../Typography/Text/Text";import{isContentColor}from"../utils/isContentColor";export const ContentTextContext=createContext(null);export const CONTENT_TEXT_LINE_HEIGHT_OFFSET=.14;let TextComponent=styled(Text,{target:"
|
|
1
|
+
import React,{createContext,useContext,useMemo}from"react";import styled from"@emotion/styled";import{Text}from"../../Typography/Text";import{FontSizeOffsetContext}from"../ContentFontResizer/FontSizeOffsetContext";import{ContentTableContext}from"../ContentTable/ContentTableContext";import{getTextFontSize,getTextLineHeight}from"../../Typography/Text/Text";import{isContentColor}from"../utils/isContentColor";export const ContentTextContext=createContext(null);export const CONTENT_TEXT_LINE_HEIGHT_OFFSET=.14;let TextComponent=styled(Text,{target:"e10ozzjp0",label:"TextComponent"})(({theme,fontSizeOffset,contentColor,size="m",isSpacedOut})=>{let fontSize=getTextFontSize({theme,size}),lineHeight=getTextLineHeight({theme,size}),textLineHeightOffset=.14*!!isSpacedOut;return{fontSize:0!==fontSizeOffset?`calc(${fontSize} + ${fontSizeOffset}px)`:fontSize,lineHeight:0!==textLineHeightOffset?`calc(${lineHeight} + ${textLineHeightOffset})`:lineHeight,...contentColor&&{color:theme.values.color.content.text[contentColor].default}}});export function ContentText({size="m",color,weight,isSpacedOut=!1,children,...rest}){let fontSizeOffset=useContext(FontSizeOffsetContext),contentTableContext=useContext(ContentTableContext),tableFontSizeOffset=contentTableContext?.fontSizeOffset??0,contentColor=isContentColor(color)?color:void 0,textColor=isContentColor(color)?void 0:color,contextValue=useMemo(()=>({color,size,weight,isSpacedOut}),[color,size,weight,isSpacedOut]);return React.createElement(TextComponent,{"data-ds-id":"ContentText",fontSizeOffset:fontSizeOffset+tableFontSizeOffset,size:size,color:textColor,contentColor:contentColor,weight:weight,isSpacedOut:isSpacedOut,...rest},React.createElement(ContentTextContext.Provider,{value:contextValue},children))}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
export type DosageButtonProps = React.ComponentPropsWithRef<"button">;
|
|
3
3
|
export declare const DosageButton: React.ForwardRefExoticComponent<Omit<Omit<React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & {
|
|
4
|
-
ref?: React.
|
|
4
|
+
ref?: ((instance: HTMLButtonElement | null) => void | React.DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof React.DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | React.RefObject<HTMLButtonElement> | null | undefined;
|
|
5
5
|
}, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React,{useCallback}from"react";import styled from"@emotion/styled";import isPropValid from"@emotion/is-prop-valid";import{keyframes}from"@emotion/react";import{Inline}from"../Inline/Inline";import{Icon}from"../Icon/Icon";import{getDisabledStyles,getButtonAppearanceReset,getBaseButtonStyles,getSecondaryVariantStyles}from"../../shared/mixins";import{BaseTag}from"../Internal/BaseTag/BaseTag";let StyledButton=styled("button",{shouldForwardProp:prop=>isPropValid(prop)&&"loading"!==prop,target:"
|
|
1
|
+
import React,{useCallback}from"react";import styled from"@emotion/styled";import isPropValid from"@emotion/is-prop-valid";import{keyframes}from"@emotion/react";import{forwardRefPolymorphic}from"../../shared/forwardRefPolymorphic";import{Inline}from"../Inline/Inline";import{Icon}from"../Icon/Icon";import{getDisabledStyles,getButtonAppearanceReset,getBaseButtonStyles,getSecondaryVariantStyles}from"../../shared/mixins";import{BaseTag}from"../Internal/BaseTag/BaseTag";let StyledButton=styled("button",{shouldForwardProp:prop=>isPropValid(prop)&&"loading"!==prop,target:"e1uvurwy0",label:"StyledButton"})(({theme,fullWidth,size,disabled,loading})=>({...getButtonAppearanceReset(),...getBaseButtonStyles({theme,size}),...getSecondaryVariantStyles({theme,disabled,size}),...loading&&{borderColor:theme.values.color.border.primary.disabled},...disabled&&{...!loading&&{...getDisabledStyles({theme})},cursor:"not-allowed"},...fullWidth&&{width:"100%"}})),StyledInner=styled("div",{shouldForwardProp:prop=>isPropValid(prop)&&"loading"!==prop,target:"e1uvurwy1",label:"StyledInner"})(({loading})=>loading&&{color:"transparent"}),StyledTagWrapper=styled("span",{shouldForwardProp:prop=>isPropValid(prop)&&"loading"!==prop,target:"e1uvurwy2",label:"StyledTagWrapper"})(({loading})=>({display:"flex",...loading&&{opacity:0}})),StyledLoaderWrap=styled("div",{target:"e1uvurwy3",label:"StyledLoaderWrap"})(()=>({position:"relative",width:"100%",height:"100%",top:0,left:0,display:"flex",justifyContent:"center"})),rotation=keyframes({from:{transform:"rotate(0deg)"},to:{transform:"rotate(360deg)"}},"label:rotation"),StyledLoader=styled("div",{target:"e1uvurwy4",label:"StyledLoader"})(()=>({position:"absolute",animation:`${rotation} 1s infinite linear`}));export const CountButton=forwardRefPolymorphic(({"data-e2e-test-id":dataE2eTestId,as,children,disabled=!1,fullWidth=!1,leftIcon,rightIcon,loading=!1,onBlur,onClick,onFocus,count,size="m",type="button",...rest},ref)=>{let handleClick=useCallback(e=>{disabled&&e.preventDefault(),onClick&&onClick(e)},[disabled,onClick]);return React.createElement(StyledButton,{ref:ref,"data-e2e-test-id":dataE2eTestId,"data-ds-id":"Button",as:as,disabled:disabled||loading,loading:loading,type:as&&"button"!==as?void 0:type??void 0,fullWidth:fullWidth,size:size,onClick:handleClick,onFocus:onFocus,onBlur:onBlur,...rest},loading&&React.createElement(StyledLoaderWrap,null,React.createElement(StyledLoader,null,React.createElement(Icon,{"aria-hidden":!0,size:"s",name:"loader",color:"primary","data-testid":"loader","data-e2e-test-id":"loader"}))),React.createElement(StyledInner,{loading:loading},React.createElement(Inline,{vAlignItems:"center",alignItems:"center",space:"s"===size?"xxs":"xs",noWrap:!0},leftIcon&&React.createElement(Icon,{"aria-hidden":!0,size:"s",name:leftIcon,"data-testid":leftIcon,"data-e2e-test-id":leftIcon}),React.createElement(Inline,{space:"xxs",vAlignItems:"center",alignItems:"center",noWrap:!0},children,null!==count&&React.createElement(StyledTagWrapper,{loading:loading},React.createElement(BaseTag,{colorVariant:"blue",size:"s",label:count.toString()}))),rightIcon&&React.createElement(Icon,{size:"s",name:rightIcon,"data-testid":rightIcon,"data-e2e-test-id":rightIcon,"aria-hidden":!0}))))});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React,{useState}from"react";import styled from"@emotion/styled";import{Text}from"../../Typography/Text/Text";import{Icon}from"../../Icon/Icon";import{useResponsiveValue}from"../../../shared/mediaQueries";import{DataTableHeaderToggletip}from"./DataTableHeaderToggletip";let SORT_DIRECTION_ICON={asc:"sort-ascending",desc:"sort-descending"},SortIcon=styled("span",{target:"
|
|
1
|
+
import React,{useState}from"react";import styled from"@emotion/styled";import{Text}from"../../Typography/Text/Text";import{Icon}from"../../Icon/Icon";import{useResponsiveValue}from"../../../shared/mediaQueries";import{DataTableHeaderToggletip}from"./DataTableHeaderToggletip";let SORT_DIRECTION_ICON={asc:"sort-ascending",desc:"sort-descending"},SortIcon=styled("span",{target:"e8dg4370",label:"SortIcon"})(({theme})=>({marginLeft:theme.variables.size.spacing.xxxs,verticalAlign:"middle",color:theme.values.color.text.primary.default,display:"flex"})),StyledSortableCellWrapper=styled("div",{target:"e8dg4371",label:"StyledSortableCellWrapper"})(({theme})=>({display:"inline-flex",gap:theme.variables.size.spacing.xs}));export const StyledLabel=styled(Text,{target:"e8dg4372",label:"StyledLabel"})(({theme,alignColumn,normalizeHeight})=>({display:"flex",alignItems:"center",flexWrap:"nowrap",fontWeight:theme.variables.weight.bold,lineHeight:theme.variables.size.lineHeight.m,...useResponsiveValue({textAlign:alignColumn}),...normalizeHeight&&{paddingTop:theme.variables.size.spacing.xxs,paddingBottom:theme.variables.size.spacing.xxs}}));let StyledSortableCellContent=styled("button",{target:"e8dg4373",label:"StyledSortableCellContent"})(({theme,alignColumn})=>({width:"100%",padding:0,background:"none",border:"none",cursor:"pointer",...useResponsiveValue({textAlign:alignColumn}),[`&:hover ${StyledLabel}`]:{color:theme.values.color.text.primary.default}}));export function SortableCellContent({name,label,align,toggletipContent,toggletipAriaLabel,sortDirection="asc",currentlySortedByColumn,onSort}){let[hovered,setHovered]=useState(!1),desiredSortDirection="asc"===sortDirection?"desc":"asc",iconName="sort-neutral";return name===currentlySortedByColumn&&(iconName=SORT_DIRECTION_ICON[sortDirection]),hovered&&(iconName=SORT_DIRECTION_ICON[desiredSortDirection]),React.createElement(StyledSortableCellWrapper,null,React.createElement(StyledSortableCellContent,{onClick:()=>{setHovered(!1),onSort&&onSort(name,desiredSortDirection)},type:"button",alignColumn:align,onPointerEnter:()=>setHovered(!0),onPointerLeave:()=>setHovered(!1)},React.createElement(StyledLabel,{as:"span",size:"s",variant:"tertiary",normalizeHeight:!toggletipContent},label,React.createElement(SortIcon,{"aria-hidden":"true"},React.createElement(Icon,{size:"s",name:iconName,color:"primary"})))),toggletipContent&&React.createElement(DataTableHeaderToggletip,{content:toggletipContent,"aria-label":toggletipAriaLabel}))}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React from"react";import styled from"@emotion/styled";import TableCell from"../TableCell";import{getColumnSticky}from"../internal/getColumnSticky";import{isControlColumn}from"../internal/types";import{buildColumnSegments}from"../internal/buildColumnSegments";import{SortableCellContent}from"./SortableCellContent";import{DataTableHeaderLabel,toToggletipSlotProps}from"./DataTableHeaderLabel";let SORT_DIRECTION_TEXT={asc:"ascending",desc:"descending"},StyledThead=styled("thead",{target:"
|
|
1
|
+
import React from"react";import styled from"@emotion/styled";import TableCell from"../TableCell";import{getColumnSticky}from"../internal/getColumnSticky";import{isControlColumn}from"../internal/types";import{buildColumnSegments}from"../internal/buildColumnSegments";import{SortableCellContent}from"./SortableCellContent";import{DataTableHeaderLabel,toToggletipSlotProps}from"./DataTableHeaderLabel";let SORT_DIRECTION_TEXT={asc:"ascending",desc:"descending"},StyledThead=styled("thead",{target:"emk25r90",label:"StyledThead"})(({maxHeight})=>({...maxHeight&&{position:"sticky",top:0,zIndex:2}})),StyledTh=styled(TableCell,{target:"emk25r91",label:"StyledTh"})(({theme,hasDivider})=>({padding:`${theme.variables.size.spacing.s} ${theme.variables.size.spacing.m}`,whiteSpace:"nowrap",backgroundColor:theme.values.color.background.primary.default,...hasDivider&&{borderRight:`1px solid ${theme.values.color.divider.primary}`}}));export default React.memo(function({className,columns,isFirstColumnSticky,isLastColumnSticky,currentlySortedByColumn,isTableScrolledToLeft,isTableScrolledToRight,maxHeight,allRowsSelected,selectedRowIds,selectAllRowsCheckboxAriaLabel,onAllRowsSelectionChange,onSort}){let headerContext={onSort,currentlySortedByColumn,allRowsSelected,selectedRowIds,selectAllRowsCheckboxAriaLabel,onAllRowsSelectionChange},renderColumnCell=({column,columnIndex},rowSpan)=>{let headerElm,isLastColumn=columnIndex===columns.length-1,sticky=getColumnSticky({column,columnIndex,columns,isFirstColumnSticky,isLastColumnSticky});if(isControlColumn(column))return React.createElement(StyledTh,{as:"th",alignColumn:"left",columnWidth:column.width,key:column.name,rowSpan:rowSpan,sticky:sticky,isTableScrolledToLeft:isTableScrolledToLeft,isTableScrolledToRight:isTableScrolledToRight,hasDivider:!1,scope:"col"},column.renderHeader(headerContext));let{isSortable,label,align="left",width,name,sortDirection}=column;if(isSortable){let toggletipProps=column.toggletipContent?{toggletipContent:column.toggletipContent,toggletipAriaLabel:column.toggletipAriaLabel}:{toggletipContent:void 0,toggletipAriaLabel:void 0};headerElm=React.createElement(SortableCellContent,{onSort:onSort,name:name,label:label,sortDirection:sortDirection,align:align,currentlySortedByColumn:currentlySortedByColumn,...toggletipProps})}else headerElm=React.createElement(DataTableHeaderLabel,{label:label,align:align,slotProps:toToggletipSlotProps(column)});let ariaSortAttr=currentlySortedByColumn===name&&sortDirection&&{"aria-sort":SORT_DIRECTION_TEXT[sortDirection]};return React.createElement(StyledTh,{as:"th",alignColumn:align,columnWidth:width,key:name,rowSpan:rowSpan,sticky:sticky,isTableScrolledToLeft:isTableScrolledToLeft,isTableScrolledToRight:isTableScrolledToRight,hasDivider:!isLastColumn,scope:"col",...ariaSortAttr},headerElm)},renderGroupCell=(group,groupColumns)=>{let{name,label,align="center"}=group,isLastColumn=groupColumns[groupColumns.length-1].columnIndex===columns.length-1;return React.createElement(StyledTh,{as:"th",alignColumn:align,key:name,colSpan:groupColumns.length,sticky:!1,isTableScrolledToLeft:isTableScrolledToLeft,isTableScrolledToRight:isTableScrolledToRight,hasDivider:!isLastColumn,scope:"colgroup"},React.createElement(DataTableHeaderLabel,{label:label,align:align,slotProps:toToggletipSlotProps(group)}))},segments=buildColumnSegments(columns),hasColumnGroups=segments.some(({group})=>group),ungroupedRowSpan=hasColumnGroups?2:void 0;return React.createElement(StyledThead,{className:className,maxHeight:maxHeight},React.createElement("tr",null,segments.map(segment=>segment.group?renderGroupCell(segment.group,segment.columns):renderColumnCell(segment.columns[0],ungroupedRowSpan))),hasColumnGroups&&React.createElement("tr",null,segments.flatMap(segment=>segment.group?segment.columns.map(indexed=>renderColumnCell(indexed)):[])))});
|
|
@@ -12,8 +12,8 @@ type UseDataTableSelectRowsArgs = {
|
|
|
12
12
|
type UseDataTableSelectRowsReturn = {
|
|
13
13
|
handleAllRowsSelectionChange: DataTableProps["onAllRowsSelectionChange"];
|
|
14
14
|
handleRowSelectionChange: DataTableProps["onRowSelectionChange"];
|
|
15
|
-
setAllRowsSelected: Dispatch<React.SetStateAction<DataTableProps["allRowsSelected"]
|
|
16
|
-
setSelectedRowIds: Dispatch<React.SetStateAction<DataTableProps["selectedRowIds"]
|
|
15
|
+
setAllRowsSelected: Dispatch<React.SetStateAction<NonNullable<DataTableProps["allRowsSelected"]>>>;
|
|
16
|
+
setSelectedRowIds: Dispatch<React.SetStateAction<NonNullable<DataTableProps["selectedRowIds"]>>>;
|
|
17
17
|
} & Required<Pick<DataTableProps, "selectedRowIds" | "allRowsSelected">>;
|
|
18
18
|
export declare function useDataTableSelectRows({ rows, getRowProps, initialAllRowsSelected, initialSelectedRowIds, }: UseDataTableSelectRowsArgs): UseDataTableSelectRowsReturn;
|
|
19
19
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useState}from"react";let defaultGetRowProps=()=>({isSelectable:!0});export function useDataTableSelectRows({rows,getRowProps=defaultGetRowProps,initialAllRowsSelected=!1,initialSelectedRowIds=[]}){let[allRowsSelected,setAllRowsSelected]=useState(initialAllRowsSelected),[selectedRowIds,setSelectedRowIds]=useState(initialSelectedRowIds);return{handleAllRowsSelectionChange:currentValue=>{currentValue?setSelectedRowIds(rows.filter(row=>!1!==getRowProps(row).isSelectable).map(({id})=>id)):setSelectedRowIds([]),setAllRowsSelected(currentValue)},handleRowSelectionChange:ids=>{let numOfSelectableRows=rows.filter(row=>!1!==getRowProps(row).isSelectable).length;ids.length===numOfSelectableRows?setAllRowsSelected(!0):setAllRowsSelected(!1),setSelectedRowIds(ids)},allRowsSelected,selectedRowIds,setAllRowsSelected,setSelectedRowIds}}
|
|
1
|
+
import{useState}from"react";let defaultGetRowProps=()=>({isSelectable:!0});export function useDataTableSelectRows({rows=[],getRowProps=defaultGetRowProps,initialAllRowsSelected=!1,initialSelectedRowIds=[]}){let[allRowsSelected,setAllRowsSelected]=useState(initialAllRowsSelected),[selectedRowIds,setSelectedRowIds]=useState(initialSelectedRowIds);return{handleAllRowsSelectionChange:currentValue=>{currentValue?setSelectedRowIds(rows.filter(row=>!1!==getRowProps(row).isSelectable).map(({id})=>id)):setSelectedRowIds([]),setAllRowsSelected(currentValue)},handleRowSelectionChange:ids=>{let numOfSelectableRows=rows.filter(row=>!1!==getRowProps(row).isSelectable).length;ids.length===numOfSelectableRows?setAllRowsSelected(!0):setAllRowsSelected(!1),setSelectedRowIds(ids)},allRowsSelected,selectedRowIds,setAllRowsSelected,setSelectedRowIds}}
|
|
@@ -6,11 +6,11 @@ export declare const defaultSortCompareFn: (a: DataTableRow, b: DataTableRow, co
|
|
|
6
6
|
export declare function useDataTableSort(initialColumns: DataTableColumnOrGroup[], initialRows: DataTableRow[], initialSortedByColumn?: DataTableColumn["name"], sortCompareFn?: SortCompareFn): {
|
|
7
7
|
columns: DataTableColumnOrGroup[];
|
|
8
8
|
rows: DataTableRow[];
|
|
9
|
-
currentlySortedByColumn: DataTableColumn["name"];
|
|
10
|
-
handleSort: DataTableProps["onSort"]
|
|
9
|
+
currentlySortedByColumn: DataTableColumn["name"] | undefined;
|
|
10
|
+
handleSort: NonNullable<DataTableProps["onSort"]>;
|
|
11
11
|
resetColumns: VoidFunction;
|
|
12
12
|
setColumns: Dispatch<SetStateAction<DataTableColumnOrGroup[]>>;
|
|
13
13
|
setRows: Dispatch<SetStateAction<DataTableRow[]>>;
|
|
14
|
-
setCurrentlySortedByColumn: Dispatch<SetStateAction<DataTableColumn["name"]>>;
|
|
14
|
+
setCurrentlySortedByColumn: Dispatch<SetStateAction<DataTableColumn["name"] | undefined>>;
|
|
15
15
|
};
|
|
16
16
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React from"react";import styled from"@emotion/styled";import{Text}from"../Typography/Text/Text";import{Box}from"../Box/Box";let StyledContainer=styled("div",{target:"
|
|
1
|
+
import React from"react";import styled from"@emotion/styled";import{Text}from"../Typography/Text/Text";import{Box}from"../Box/Box";let StyledContainer=styled("div",{target:"e1jrix1f0",label:"StyledContainer"})(()=>({display:"flex",justifyContent:"center",alignItems:"center"})),HorizontalStyledDivider=styled("hr",{target:"e1jrix1f1",label:"HorizontalStyledDivider"})(({theme})=>({border:0,margin:0,padding:0,height:0,borderTopColor:theme.values.color.divider.primary,borderTopWidth:"1px",borderTopStyle:"solid",flex:"1"})),VerticalStyledDivider=styled("span",{target:"e1jrix1f2",label:"VerticalStyledDivider"})(({theme,size})=>({display:"flex",margin:0,padding:0,width:"1px",backgroundColor:theme.values.color.divider.secondary,alignSelf:"stretch",minHeight:theme.variables.size.dimension.divider[size]})),StyledContent=styled("div",{target:"e1jrix1f3",label:"StyledContent"})(()=>({maxWidth:"50%"}));export function Divider({text,"data-e2e-test-id":dataE2eTestId,orientation="horizontal",size="m",...ariaAttributes}){return"vertical"===orientation?React.createElement(VerticalStyledDivider,{size:size,"data-e2e-test-id":dataE2eTestId,"data-ds-id":"Divider",...ariaAttributes,role:"separator","aria-orientation":"vertical"}):text?React.createElement(StyledContainer,{"data-e2e-test-id":dataE2eTestId,"data-ds-id":"Divider",...ariaAttributes,role:"separator","aria-orientation":"horizontal"},React.createElement(HorizontalStyledDivider,{"aria-hidden":"true"}),React.createElement(StyledContent,null,React.createElement(Box,{space:"xxl",vSpace:"zero"},React.createElement(Text,{color:"tertiary"},text))),React.createElement(HorizontalStyledDivider,{"aria-hidden":"true"})):React.createElement(HorizontalStyledDivider,{"data-e2e-test-id":dataE2eTestId,"data-ds-id":"Divider",...ariaAttributes})}
|
|
@@ -15,6 +15,10 @@ export type DropdownMenuProps = {
|
|
|
15
15
|
disabled?: boolean;
|
|
16
16
|
/** Horizontal alignment of the menu relative to the trigger. `"auto"` detects based on available viewport space. */
|
|
17
17
|
placement?: "auto" | "left" | "right";
|
|
18
|
+
/**
|
|
19
|
+
* aria-label for trigger (especially if it only has icon).
|
|
20
|
+
* TODO(DS): make required for the icon-only trigger. See follow-up.
|
|
21
|
+
*/
|
|
18
22
|
triggerAriaLabel?: string;
|
|
19
23
|
/** Dropdown menu open state callback */
|
|
20
24
|
onMenuOpen?: (e: MouseEvent | KeyboardEvent) => void;
|
|
@@ -36,5 +40,5 @@ type ConditionalProps = {
|
|
|
36
40
|
size?: DropdownMenuSize;
|
|
37
41
|
label?: never;
|
|
38
42
|
};
|
|
39
|
-
export declare function DropdownMenu(
|
|
43
|
+
export declare function DropdownMenu(props: DropdownMenuProps): React.ReactElement;
|
|
40
44
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React,{useCallback,useRef,useState}from"react";import{useKeyboard}from"../../shared/useKeyboard";import{Button}from"../Button/Button";import{PictogramButton}from"../PictogramButton/PictogramButton";import{Menu}from"./Menu";let isSeperator=item=>"separator"===item;export function DropdownMenu({menuItems,label,placement="auto",iconName="more-horizontal",size="m",variant="tertiary",disabled=!1,portalContainer,triggerAriaLabel,onMenuOpen=()=>void 0,onMenuClose=()=>void 0,privateProps:{dropdownSquareCorners}={dropdownSquareCorners:!1},"data-e2e-test-id":dataE2eTestId,...ariaAttributes}
|
|
1
|
+
import React,{useCallback,useRef,useState}from"react";import{useIntl}from"../../shared/intl/useIntl";import{useKeyboard}from"../../shared/useKeyboard";import{Button}from"../Button/Button";import{PictogramButton}from"../PictogramButton/PictogramButton";import{Menu}from"./Menu";let isSeperator=item=>"separator"===item;export function DropdownMenu(props){let{menuItems,label,placement="auto",iconName="more-horizontal",size="m",variant="tertiary",disabled=!1,portalContainer,triggerAriaLabel,onMenuOpen=()=>void 0,onMenuClose=()=>void 0,privateProps:{dropdownSquareCorners}={dropdownSquareCorners:!1},"data-e2e-test-id":dataE2eTestId,...ariaAttributes}=props,[isOpen,setIsOpen]=useState(!1),{formatMessage}=useIntl(),buttonRef=useRef(null),openMenu=useCallback(e=>{setIsOpen(!0),onMenuOpen(e)},[setIsOpen,onMenuOpen]),closeMenu=useCallback(e=>{setIsOpen(!1),buttonRef.current?.focus({preventScroll:!0}),onMenuClose(e)},[setIsOpen,onMenuClose]),toggleMenu=useCallback(e=>{isOpen?closeMenu(e.nativeEvent):openMenu(e.nativeEvent)},[isOpen,openMenu,closeMenu]),items=menuItems.map(item=>isSeperator(item)?item:{...item,onSelect:e=>{item.onSelect(e),closeMenu(e.nativeEvent)}});return useKeyboard({"ArrowUp ArrowDown":openMenu},buttonRef,!isOpen),React.createElement(React.Fragment,null,"secondary"===props.variant||"xs"===props.size?React.createElement(PictogramButton,{tabIndex:0,ref:buttonRef,size:size,icon:iconName,variant:variant,onClick:toggleMenu,disabled:disabled,"data-e2e-test-id":dataE2eTestId,"data-ds-id":"DropdownMenu","aria-label":triggerAriaLabel??formatMessage("DropdownMenu.Trigger.AriaLabel"),...ariaAttributes,"aria-haspopup":"true","aria-expanded":isOpen}):React.createElement(Button,{tabIndex:0,ref:buttonRef,size:"xs"===size?"s":size,leftIcon:iconName,variant:variant,onClick:toggleMenu,disabled:disabled,"data-e2e-test-id":dataE2eTestId,"data-ds-id":"DropdownMenu",privateProps:{squareCorners:dropdownSquareCorners},"aria-label":triggerAriaLabel,...ariaAttributes,"aria-haspopup":"true","aria-expanded":isOpen},label),React.createElement(Menu,{items:items,isOpen:isOpen,onCloseMenu:closeMenu,triggerRef:buttonRef,placement:placement,portalContainer:portalContainer}))}
|
|
@@ -7,5 +7,5 @@ type MenuProps = {
|
|
|
7
7
|
triggerRef: RefObject<HTMLButtonElement>;
|
|
8
8
|
onCloseMenu: (e: any) => void;
|
|
9
9
|
} & Pick<DropdownMenuProps, "portalContainer" | "placement">;
|
|
10
|
-
export declare function Menu({ isOpen, items, portalContainer, triggerRef, placement, onCloseMenu, }: MenuProps): React.ReactElement;
|
|
10
|
+
export declare function Menu({ isOpen, items, portalContainer, triggerRef, placement, onCloseMenu, }: MenuProps): React.ReactElement | null;
|
|
11
11
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React,{useEffect,useRef,useState}from"react";import styled from"@emotion/styled";import{useKeyboard}from"../../shared/useKeyboard";import{Divider}from"../Divider/Divider";import{MenuItem}from"./MenuItem";import{usePopupMenu}from"../../shared/popupMenu/usePopupMenu";import{useOutsideInteract}from"../../shared/useOutsideInteract";import{Portal,usePortalChildZIndex}from"../Portal/Portal";let isSeperator=item=>"separator"===item,StyledMenu=styled("div",{target:"
|
|
1
|
+
import React,{useEffect,useRef,useState}from"react";import styled from"@emotion/styled";import{useKeyboard}from"../../shared/useKeyboard";import{Divider}from"../Divider/Divider";import{MenuItem}from"./MenuItem";import{usePopupMenu}from"../../shared/popupMenu/usePopupMenu";import{useOutsideInteract}from"../../shared/useOutsideInteract";import{Portal,usePortalChildZIndex}from"../Portal/Portal";let isSeperator=item=>"separator"===item,StyledMenu=styled("div",{target:"e1gy87fm0",label:"StyledMenu"})(({theme})=>{let zIndex=usePortalChildZIndex(theme.variables.zIndex.dropdown);return{position:"absolute",display:"inline-block",width:"fit-content",minWidth:theme.variables.size.dimension.dropdownMenu.width,zIndex,borderRadius:theme.variables.size.borderRadius.s,backgroundColor:theme.values.color.background.primary.default,paddingTop:theme.variables.size.spacing.xs,paddingBottom:theme.variables.size.spacing.xs,":after":{content:'" "',position:"absolute",top:0,left:0,width:"100%",height:"100%",pointerEvents:"none",borderRadius:"inherit",boxShadow:theme.values.elevation[3]}}}),StyledUl=styled("ul",{target:"e1gy87fm1",label:"StyledUl"})(()=>({margin:0,padding:0,overflow:"hidden"})),StyledLi=styled("li",{target:"e1gy87fm2",label:"StyledLi"})(()=>({margin:0,padding:0,width:"100%",listStyleType:"none",whiteSpace:"nowrap"})),StyledLiSeparator=styled(StyledLi,{target:"e1gy87fm3",label:"StyledLiSeparator"})(({theme})=>({marginTop:theme.variables.size.spacing.xs,marginBottom:theme.variables.size.spacing.xs}));export function Menu({isOpen,items,portalContainer,triggerRef,placement,onCloseMenu}){let menuRef=useRef(null),[focusIndex,setFocusIndex]=useState(0),{menuStyle}=usePopupMenu({triggerRef,menuRef,isOpen,placement});useOutsideInteract({ref:menuRef,excludeRefs:[triggerRef],onInteractOutside:onCloseMenu,isActive:isOpen}),useKeyboard({Escape:onCloseMenu,ArrowUp:()=>{setFocusIndex(index=>index-1)},ArrowDown:()=>{setFocusIndex(index=>index+1)}},menuRef,isOpen),useEffect(()=>{if(menuRef&&menuRef.current){let buttons=menuRef.current.querySelectorAll("button");buttons[Math.abs(focusIndex)%buttons.length].focus({preventScroll:!0})}isOpen||setFocusIndex(0)},[menuRef,focusIndex,isOpen]);let menuElm=React.createElement(StyledMenu,{ref:menuRef,style:menuStyle},React.createElement(StyledUl,{role:"menu"},items.map((item,index)=>{if(isSeperator(item))return React.createElement(StyledLiSeparator,{role:"separator",key:`menuitem-separator-${index}`},React.createElement(Divider,{"aria-hidden":"true"}));let{label,destructive,disabled,emphasized,icon,onSelect}=item;return React.createElement(StyledLi,{role:"menuitem",key:`menuitem-${label}`},React.createElement(MenuItem,{onSelect:onSelect,icon:icon,label:label,disabled:disabled,destructive:destructive,emphasized:emphasized}))})));return isOpen?React.createElement(Portal,{portalContainer:portalContainer},menuElm):null}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React,{useEffect,useRef,useMemo,useCallback}from"react";import{StyledList}from"./styled-components";import{useKeyboard}from"../../shared/useKeyboard";import{Icon}from"../Icon/Icon";import{EntityListItem}from"./EntityListItem";import{VirtualizedEntityList}from"./VirtualizedEntityList";import{useFocusByIndex}from"./useFocusByIndex";import{ROLE_TO_ITEM_ROLE}from"./roles";export function BaseEntityList({data,size="m",onClick,focusOnMount,isSelectable,selectedIds,onSelectionChange,onSelectionToggle,renderRightContent,renderItemWrapper,getLeftIconProps,hideBorder,filterFn,isVirtualized,maxHeight,ariaAttributes:deprecatedAriaAttributes,slotProps,role:roleProp,truncateLabels=!1,"data-e2e-test-id":dataE2eTestId,...ariaAttributes}){let rootRole,{itemRole,...rootAriaProps}=(rootRole=roleProp??"list",isSelectable&&(rootRole="listbox"),{role:rootRole,itemRole:ROLE_TO_ITEM_ROLE[rootRole],"aria-multiselectable":"listbox"===rootRole&&!!isSelectable||void 0}),ariaLabelExpand=slotProps?.toggle?.["aria-label-expand"]??deprecatedAriaAttributes?.ariaLabelExpand,ariaLabelCollapse=slotProps?.toggle?.["aria-label-collapse"]??deprecatedAriaAttributes?.ariaLabelCollapse,dataShown=useMemo(()=>data.length&&filterFn?data.filter(filterFn):data,[data,filterFn]),selectedIdsSet=useMemo(()=>new Set(selectedIds),[selectedIds]),listRef=useRef(null),{moveFocus,focusItemAtIndex,focusedIndex:selectedIndex}=useFocusByIndex({containerRef:listRef,nodeSelector:"data-list-item",data:useMemo(()=>dataShown.map(item=>({id:item.id,isDisabled:!!item.isDisabled})),[dataShown]),preventScroll:isVirtualized,initialIndex:useMemo(()=>{let index=dataShown.findIndex(item=>item.isActive);return -1!==index?index:0},[dataShown])});useEffect(()=>{focusOnMount&&focusItemAtIndex(selectedIndex)},[]),useKeyboard({ArrowDown:()=>{moveFocus(1)},ArrowUp:()=>{moveFocus(-1)}},listRef,isSelectable||!!onClick);let handleOnClick=useCallback(item=>{let{id}=item;if(isSelectable){let willBeSelected=!selectedIdsSet.has(id),newSelectedIdsSet=new Set(selectedIdsSet);willBeSelected?newSelectedIdsSet.add(id):newSelectedIdsSet.delete(id),onSelectionToggle?.(id,willBeSelected),onSelectionChange?.(Array.from(newSelectedIdsSet))}onClick?.(item)},[selectedIdsSet,onSelectionChange,onSelectionToggle,onClick,isSelectable]),renderEntityItem=index=>{let tabIndex,item=dataShown[index];if(!item)return null;let isLastItem=index===dataShown.length-1,isSelected=selectedIdsSet.has(item.id);if(isSelectable||onClick){let defaultTabIndex=0===index&&!selectedIndex;tabIndex=!item.isDisabled&&(index===selectedIndex||defaultTabIndex)?0:-1}let itemElm=React.createElement(EntityListItem,{"data-list-item":index,"aria-label":item["aria-label"]||item.label,size:size,hideBorder:hideBorder||isLastItem,isActive:item.isActive,isDisabled:item.isDisabled,isClickable:!!(onClick||selectedIds),isSelected:isSelectable?isSelected:void 0,role:itemRole,description:item.description,truncateLabel:truncateLabels,onSpaceEnterPress:()=>handleOnClick(item),tabIndex:tabIndex,ariaLabelExpand:ariaLabelExpand,ariaLabelCollapse:ariaLabelCollapse,onClick:e=>{e.target instanceof Element&&e.target.closest("label")||handleOnClick(item)},checkboxProps:isSelectable
|
|
1
|
+
import React,{useEffect,useRef,useMemo,useCallback}from"react";import{StyledList}from"./styled-components";import{useKeyboard}from"../../shared/useKeyboard";import{Icon}from"../Icon/Icon";import{EntityListItem}from"./EntityListItem";import{VirtualizedEntityList}from"./VirtualizedEntityList";import{useFocusByIndex}from"./useFocusByIndex";import{ROLE_TO_ITEM_ROLE}from"./roles";export function BaseEntityList({data,size="m",onClick,focusOnMount,isSelectable,selectedIds,onSelectionChange,onSelectionToggle,renderRightContent,renderItemWrapper,getLeftIconProps,hideBorder,filterFn,isVirtualized,maxHeight,ariaAttributes:deprecatedAriaAttributes,slotProps,role:roleProp,truncateLabels=!1,"data-e2e-test-id":dataE2eTestId,...ariaAttributes}){let rootRole,{itemRole,...rootAriaProps}=(rootRole=roleProp??"list",isSelectable&&(rootRole="listbox"),{role:rootRole,itemRole:ROLE_TO_ITEM_ROLE[rootRole],"aria-multiselectable":"listbox"===rootRole&&!!isSelectable||void 0}),ariaLabelExpand=slotProps?.toggle?.["aria-label-expand"]??deprecatedAriaAttributes?.ariaLabelExpand,ariaLabelCollapse=slotProps?.toggle?.["aria-label-collapse"]??deprecatedAriaAttributes?.ariaLabelCollapse,dataShown=useMemo(()=>data.length&&filterFn?data.filter(filterFn):data,[data,filterFn]),selectedIdsSet=useMemo(()=>new Set(selectedIds),[selectedIds]),listRef=useRef(null),{moveFocus,focusItemAtIndex,focusedIndex:selectedIndex}=useFocusByIndex({containerRef:listRef,nodeSelector:"data-list-item",data:useMemo(()=>dataShown.map(item=>({id:item.id,isDisabled:!!item.isDisabled})),[dataShown]),preventScroll:isVirtualized,initialIndex:useMemo(()=>{let index=dataShown.findIndex(item=>item.isActive);return -1!==index?index:0},[dataShown])});useEffect(()=>{focusOnMount&&focusItemAtIndex(selectedIndex)},[]),useKeyboard({ArrowDown:()=>{moveFocus(1)},ArrowUp:()=>{moveFocus(-1)}},listRef,isSelectable||!!onClick);let handleOnClick=useCallback(item=>{let{id}=item;if(isSelectable){let willBeSelected=!selectedIdsSet.has(id),newSelectedIdsSet=new Set(selectedIdsSet);willBeSelected?newSelectedIdsSet.add(id):newSelectedIdsSet.delete(id),onSelectionToggle?.(id,willBeSelected),onSelectionChange?.(Array.from(newSelectedIdsSet))}onClick?.(item)},[selectedIdsSet,onSelectionChange,onSelectionToggle,onClick,isSelectable]),renderEntityItem=index=>{let tabIndex,item=dataShown[index];if(!item)return null;let isLastItem=index===dataShown.length-1,isSelected=selectedIdsSet.has(item.id);if(isSelectable||onClick){let defaultTabIndex=0===index&&!selectedIndex;tabIndex=!item.isDisabled&&(index===selectedIndex||defaultTabIndex)?0:-1}let itemElm=React.createElement(EntityListItem,{"data-list-item":index,"aria-label":item["aria-label"]||item.label,size:size,hideBorder:hideBorder||isLastItem,isActive:item.isActive,isDisabled:item.isDisabled,isClickable:!!(onClick||selectedIds),isSelected:isSelectable?isSelected:void 0,role:itemRole,description:item.description,truncateLabel:truncateLabels,onSpaceEnterPress:()=>handleOnClick(item),tabIndex:tabIndex,ariaLabelExpand:ariaLabelExpand,ariaLabelCollapse:ariaLabelCollapse,onClick:e=>{e.target instanceof Element&&e.target.closest("label")||handleOnClick(item)},checkboxProps:isSelectable?{name:"list-checkbox",size:"s",checked:isSelected,onChange:()=>handleOnClick(item)}:void 0,renderLabel:()=>item.label,renderLeft:getLeftIconProps?({textSize})=>React.createElement(Icon,{...getLeftIconProps(item),size:textSize}):void 0,renderRight:renderRightProps=>renderRightContent?renderRightContent({...renderRightProps,...item}):void 0});return React.createElement(React.Fragment,{key:item.id},renderItemWrapper?renderItemWrapper({item,children:itemElm}):itemElm)};return React.createElement("div",{ref:listRef},isVirtualized&&maxHeight?React.createElement(VirtualizedEntityList,{id:dataE2eTestId,maxHeight:maxHeight,size:size,dataShown:dataShown,selectedIndex:selectedIndex,itemTemplate:renderEntityItem,"data-e2e-test-id":dataE2eTestId,...rootAriaProps,...ariaAttributes}):React.createElement(StyledList,{size:size,"data-e2e-test-id":dataE2eTestId,"data-ds-id":"EntityList",...rootAriaProps,...ariaAttributes},dataShown.map((_item,i)=>renderEntityItem(i))))}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import type { EntityListItemProps } from "./types";
|
|
3
|
-
|
|
3
|
+
type EntityItemBodyProps = Partial<EntityListItemProps> & Pick<EntityListItemProps, "renderLabel">;
|
|
4
|
+
export declare function EntityItemBody({ checkboxProps, description, renderLabel, renderLeft, renderRight, tabIndex, size, truncateLabel, }: EntityItemBodyProps): React.ReactElement;
|
|
5
|
+
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React,{cloneElement,isValidElement}from"react";import styled from"@emotion/styled";import{CheckboxRaw}from"../Form/Checkbox/Checkbox";import{EntityListItemText}from"./EntityListItemText";import{Inline}from"../Inline/Inline";import{StyledWrapperOffset}from"./styled-components";let StyledLabel=styled(StyledWrapperOffset,{target:"
|
|
1
|
+
import React,{cloneElement,isValidElement}from"react";import styled from"@emotion/styled";import{CheckboxRaw}from"../Form/Checkbox/Checkbox";import{EntityListItemText}from"./EntityListItemText";import{Inline}from"../Inline/Inline";import{StyledWrapperOffset}from"./styled-components";let StyledLabel=styled(StyledWrapperOffset,{target:"e1acsa3u0",label:"StyledLabel"})(({theme,size})=>({cursor:"pointer",display:"block",margin:`-${theme.variables.size.spacing["xs"===size?"xxs":size]} 0`})),StyledMinHeightCell=styled("div",{target:"e1acsa3u1",label:"StyledMinHeightCell"})(({theme,textSize})=>({minHeight:"s"===textSize?`calc(${theme.variables.size.spacing.m} + ${theme.variables.size.spacing.xxs})`:theme.variables.size.spacing.l,display:"flex",alignItems:"center"})),hasInteractiveProps=element=>["onClick","onMouseDown","onPointerDown"].some(p=>"function"==typeof element.props?.[p]),isInteractiveElement=element=>isValidElement(element)&&(hasInteractiveProps(element)||"href"in(element.props??{}));export function EntityItemBody({checkboxProps,description,renderLabel,renderLeft,renderRight,tabIndex,size="m",truncateLabel}){let textSize="xs"===size?"s":"m",rightElement=renderRight?.({textSize,actionSize:"l"===size?"m":"s",tabIndex});return React.createElement(Inline,{noWrap:!0,alignItems:"spaceBetween",space:["xs","m"]},checkboxProps?React.createElement(StyledLabel,{as:"label",size:size,"aria-hidden":"true"},React.createElement(Inline,{noWrap:!0,space:["xs","m"]},React.createElement(CheckboxRaw,{...checkboxProps,inert:""}),React.createElement(EntityListItemText,{size:textSize,description:description,truncateLabel:truncateLabel},renderLabel({textSize})))):React.createElement(Inline,{noWrap:!0,space:["xs","m"]},renderLeft&&renderLeft({textSize}),React.createElement(EntityListItemText,{size:textSize,description:description,truncateLabel:truncateLabel},renderLabel({textSize}))),rightElement&&React.createElement(StyledMinHeightCell,{textSize:textSize},isInteractiveElement(rightElement)?cloneElement(rightElement,{tabIndex,onClick:event=>{event.stopPropagation(),rightElement.props.onClick?.(event)},...rightElement.props.onMouseDown&&{onMouseDown:event=>{event.stopPropagation(),rightElement.props.onMouseDown?.(event)}},...rightElement.props.onPointerDown&&{onPointerDown:event=>{event.stopPropagation(),rightElement.props.onPointerDown?.(event)}}}):rightElement))}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React,{useCallback,useImperativeHandle,useRef}from"react";import{EntityItemBody}from"./EntityItemBody";import{useKeyboard}from"../../shared/useKeyboard";import{StyledEntityListItemWrapper,StyledEntityListItemButton}from"./styled-components";let isSelfEvent=e=>e.target===e.currentTarget,useButtonKeyboard=({ref:globalRef,isActive,onSpaceEnterPress})=>{let localRef=useRef(null);return useKeyboard({"Space Enter":onSpaceEnterPress},localRef,isActive,!0),useImperativeHandle(globalRef,()=>localRef.current),localRef};export const EntityListItem=React.forwardRef(({checkboxProps,description,hideBorder,isActive,isClickable,isDisabled,onClick,renderLabel,renderLeft,renderRight,role,tabIndex,onSpaceEnterPress,size="m","aria-label":ariaLabel,"data-list-item":dataListItem,isSelected,truncateLabel,onPointerEnter,onPointerLeave,onFocus,onBlur,onKeyDown,"aria-describedby":ariaDescribedBy},ref)=>{let handleOnClick=useCallback(e=>{isClickable&&onClick&&onClick(e)},[onClick,isClickable]),buttonRef=useButtonKeyboard({ref,isActive
|
|
1
|
+
import React,{useCallback,useImperativeHandle,useRef}from"react";import{EntityItemBody}from"./EntityItemBody";import{useKeyboard}from"../../shared/useKeyboard";import{StyledEntityListItemWrapper,StyledEntityListItemButton}from"./styled-components";let isSelfEvent=e=>e.target===e.currentTarget,useButtonKeyboard=({ref:globalRef,isActive,onSpaceEnterPress})=>{let localRef=useRef(null);return useKeyboard({"Space Enter":e=>onSpaceEnterPress?.(e)},localRef,isActive,!0),useImperativeHandle(globalRef,()=>localRef.current),localRef};export const EntityListItem=React.forwardRef(({checkboxProps,description,hideBorder,isActive,isClickable,isDisabled,onClick,renderLabel,renderLeft,renderRight,role,tabIndex,onSpaceEnterPress,size="m","aria-label":ariaLabel,"data-list-item":dataListItem,isSelected,truncateLabel,onPointerEnter,onPointerLeave,onFocus,onBlur,onKeyDown,"aria-describedby":ariaDescribedBy},ref)=>{let handleOnClick=useCallback(e=>{isClickable&&onClick&&onClick(e)},[onClick,isClickable]),buttonRef=useButtonKeyboard({ref,isActive:!!isClickable&&!isDisabled&&void 0!==tabIndex,onSpaceEnterPress}),supportsAriaSelected="menuitem"!==role,supportsAriaCurrent="option"!==role;return React.createElement(StyledEntityListItemButton,{role:role,"aria-label":ariaLabel,"aria-describedby":ariaDescribedBy,"aria-selected":supportsAriaSelected?isSelected:void 0,"aria-current":supportsAriaCurrent&&isActive?isActive:void 0,"aria-disabled":isDisabled,size:size,tabIndex:tabIndex,ref:buttonRef,"data-list-item":dataListItem,"data-id":"list-item",onClick:handleOnClick,onPointerEnter:onPointerEnter,onPointerLeave:onPointerLeave,onFocus:e=>{isSelfEvent(e)&&onFocus?.(e)},onBlur:e=>{isSelfEvent(e)&&onBlur?.(e)},onKeyDown:onKeyDown,isClickable:isClickable,isActive:isActive,isDisabled:isDisabled},React.createElement(StyledEntityListItemWrapper,{size:size,hideBorder:hideBorder||"xs"===size},React.createElement(EntityItemBody,{size:size,tabIndex:tabIndex,checkboxProps:checkboxProps,description:description,renderLabel:renderLabel,renderLeft:renderLeft,renderRight:renderRight,truncateLabel:truncateLabel})))});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { AriaAttributes } from "react";
|
|
2
2
|
import React from "react";
|
|
3
|
-
import type { EntityListAriaAttributes, EntityListItemProps } from "../EntityList/types";
|
|
4
3
|
import type { SlotProps } from "../../shared/slotProps";
|
|
4
|
+
import type { EntityListAriaAttributes, EntityListItemProps } from "../EntityList/types";
|
|
5
5
|
import type { NodeID, TreeNode, CheckboxState } from "./types";
|
|
6
6
|
export type TreeNodeWithUIState = TreeNode & {
|
|
7
7
|
isExpanded: boolean;
|
|
@@ -17,6 +17,7 @@ export type RenderTreeItemWrapperProps = {
|
|
|
17
17
|
};
|
|
18
18
|
export type EntityTreeSlotProps = SlotProps<{
|
|
19
19
|
toggle: {
|
|
20
|
+
/** TODO(DS): make required — the toggle is icon-only. See follow-up. */
|
|
20
21
|
"aria-label-expand"?: string;
|
|
21
22
|
"aria-label-collapse"?: string;
|
|
22
23
|
};
|
|
@@ -69,7 +70,7 @@ export type EntityTreeProps = {
|
|
|
69
70
|
/** How many expanded nodes we render at once. The tree slows down a page if the size 1000+ */
|
|
70
71
|
chunkSize?: number;
|
|
71
72
|
/** If provided, the function is used to render an element in the trail of a node. */
|
|
72
|
-
renderRightContent?: (props: TreeNode & Parameters<EntityListItemProps["renderRight"]
|
|
73
|
+
renderRightContent?: (props: TreeNode & Parameters<NonNullable<EntityListItemProps["renderRight"]>>[0]) => React.ReactNode;
|
|
73
74
|
/**
|
|
74
75
|
* Wraps each rendered row, so an overlay (e.g. `Tooltip`) can be composed around
|
|
75
76
|
* it from the outside. The wrapper is applied inside the `treeitem` element, so it
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React,{useMemo,useState,useEffect,useCallback}from"react";import{Button}from"../Button/Button";import{Box}from"../Box/Box";import{StyledList,StyledShowMore}from"../EntityList/styled-components";import{EntityTreeItem}from"./EntityTreeItem";import{useKeyboard}from"../../shared/useKeyboard";import{useFocusByIndex}from"../EntityList/useFocusByIndex";import{Text}from"../Typography/Text/Text";import{getNodeChildrenMap,getTreeCheckboxState,getVisibleActiveNodeId,getLeafNodeIds,filterTree,mapTree,trimDataByMaxSize}from"./tree";let flattenTree=(data,expandedIds,expadedAll)=>{let flattened=[];return data.forEach(node=>{flattened.push(node),(node.children.length>0&&expandedIds[node.id]||expadedAll)&&flattened.push(...flattenTree(node.children,expandedIds,expadedAll))}),flattened},getLastNodeOfList=({node,data,level,isParentsLastOfLvl})=>{let currentLastNodeOfLvl=node.id===data[data.length-1].id;return 0===level?currentLastNodeOfLvl:isParentsLastOfLvl&¤tLastNodeOfLvl},useTreeTruncation=({chunkSize,data,expandAll,nodeExpandedState})=>{let[maxNodesCount,setMaxNodesCount]=useState(chunkSize),{result,hasMoreNodes}=useMemo(()=>trimDataByMaxSize(data,nodeExpandedState,expandAll,maxNodesCount),[data,nodeExpandedState,expandAll,maxNodesCount]);return{handleIncreaseMaxNodeCount:useCallback(()=>{setMaxNodesCount(prev=>prev+chunkSize)},[chunkSize]),result,hasMoreNodes}},Node=({isFirstNode,nodeChildrenMap,nodeCheckboxState,nodeExpandedState,handleSelectionChange,handleToggle,expandAll,onNodeClick,hideBorder,size,showItemsCount,renderRightContent,renderItemWrapper,activeId,focusedNodeId,node,level,renderFn,isLastNodeOfList,ariaLabelExpand,ariaLabelCollapse,visibleNodeIndexMap})=>{let readOnly=null===nodeCheckboxState,hasChildren=node.children.length>0,expandedState=!!expandAll||!!nodeExpandedState[node.id],leafItems=getLeafNodeIds(nodeChildrenMap,node.id),totalItemsCount=leafItems.length,selectedItemsCount=nodeCheckboxState?leafItems.filter(leafId=>"checked"===nodeCheckboxState[leafId]).length:null,countLabel=nodeCheckboxState?`(${selectedItemsCount}/${totalItemsCount})`:`(${totalItemsCount})`,lastLeaf=!hasChildren&&!node.isFiltered,isExpanded=lastLeaf?void 0:expandedState,{children,...nodeDataWithoutChildren}=node,isFocused=focusedNodeId===node.id,treeItemElm=React.createElement(EntityTreeItem,{"data-list-item":visibleNodeIndexMap[node.id],hideBorder:hideBorder||isLastNodeOfList&&(!isExpanded||node.isFiltered),tabIndex:isFocused||null===focusedNodeId&&isFirstNode?0:-1,size:size,lSpaceStep:level,onSpaceEnterPress:()=>{if(readOnly){handleToggle(node.id),onNodeClick?.(nodeDataWithoutChildren);return}handleSelectionChange(node.id)},description:node.description,renderLabel:({textSize})=>React.createElement(React.Fragment,null,node.label,showItemsCount&&!lastLeaf&&React.createElement(Text,{as:"span",size:textSize,color:"tertiary"}," ",countLabel)),isActive:activeId===node.id,isExpanded:isExpanded,isDisabledExpand:expandAll,checkboxProps
|
|
1
|
+
import React,{useMemo,useState,useEffect,useCallback}from"react";import{Button}from"../Button/Button";import{Box}from"../Box/Box";import{StyledList,StyledShowMore}from"../EntityList/styled-components";import{EntityTreeItem}from"./EntityTreeItem";import{useKeyboard}from"../../shared/useKeyboard";import{useFocusByIndex}from"../EntityList/useFocusByIndex";import{Text}from"../Typography/Text/Text";import{getNodeChildrenMap,getTreeCheckboxState,getVisibleActiveNodeId,getLeafNodeIds,filterTree,mapTree,trimDataByMaxSize}from"./tree";let flattenTree=(data,expandedIds,expadedAll)=>{let flattened=[];return data.forEach(node=>{flattened.push(node),(node.children.length>0&&expandedIds[node.id]||expadedAll)&&flattened.push(...flattenTree(node.children,expandedIds,expadedAll))}),flattened},getLastNodeOfList=({node,data,level,isParentsLastOfLvl})=>{let currentLastNodeOfLvl=node.id===data[data.length-1].id;return 0===level?currentLastNodeOfLvl:isParentsLastOfLvl&¤tLastNodeOfLvl},useTreeTruncation=({chunkSize,data,expandAll,nodeExpandedState})=>{let[maxNodesCount,setMaxNodesCount]=useState(chunkSize),{result,hasMoreNodes}=useMemo(()=>trimDataByMaxSize(data,nodeExpandedState,expandAll,maxNodesCount),[data,nodeExpandedState,expandAll,maxNodesCount]);return{handleIncreaseMaxNodeCount:useCallback(()=>{setMaxNodesCount(prev=>prev+chunkSize)},[chunkSize]),result,hasMoreNodes}},Node=({isFirstNode,nodeChildrenMap,nodeCheckboxState,nodeExpandedState,handleSelectionChange,handleToggle,expandAll,onNodeClick,hideBorder,size,showItemsCount,renderRightContent,renderItemWrapper,activeId,focusedNodeId,node,level,renderFn,isLastNodeOfList,ariaLabelExpand,ariaLabelCollapse,visibleNodeIndexMap})=>{let readOnly=null===nodeCheckboxState,hasChildren=node.children.length>0,expandedState=!!expandAll||!!nodeExpandedState[node.id],leafItems=getLeafNodeIds(nodeChildrenMap,node.id),totalItemsCount=leafItems.length,selectedItemsCount=nodeCheckboxState?leafItems.filter(leafId=>"checked"===nodeCheckboxState[leafId]).length:null,countLabel=nodeCheckboxState?`(${selectedItemsCount}/${totalItemsCount})`:`(${totalItemsCount})`,lastLeaf=!hasChildren&&!node.isFiltered,isExpanded=lastLeaf?void 0:expandedState,{children,...nodeDataWithoutChildren}=node,isFocused=focusedNodeId===node.id,treeItemElm=React.createElement(EntityTreeItem,{"data-list-item":visibleNodeIndexMap[node.id],hideBorder:hideBorder||isLastNodeOfList&&(!isExpanded||node.isFiltered),tabIndex:isFocused||null===focusedNodeId&&isFirstNode?0:-1,size:size,lSpaceStep:level,onSpaceEnterPress:()=>{if(readOnly){handleToggle(node.id),onNodeClick?.(nodeDataWithoutChildren);return}handleSelectionChange(node.id)},description:node.description,renderLabel:({textSize})=>React.createElement(React.Fragment,null,node.label,showItemsCount&&!lastLeaf&&React.createElement(Text,{as:"span",size:textSize,color:"tertiary"}," ",countLabel)),isActive:activeId===node.id,isExpanded:isExpanded,isDisabledExpand:expandAll,checkboxProps:readOnly?void 0:{size:"s",name:node.label,checked:nodeCheckboxState?.[node.id]==="checked",indeterminate:nodeCheckboxState?.[node.id]==="indeterminate",onChange:()=>handleSelectionChange(node.id)},onExpandClick:e=>{e.stopPropagation(),handleToggle(node.id)},isClickable:readOnly,onClick:()=>{handleToggle(node.id),onNodeClick?.(nodeDataWithoutChildren)},renderRight:renderRightContent?renderRightProps=>renderRightContent({...renderRightProps,...node}):void 0,ariaLabelExpand:ariaLabelExpand,ariaLabelCollapse:ariaLabelCollapse,"aria-label":node.label,"aria-level":level+1},hasChildren&&React.createElement("div",{role:"group"},renderFn({data:children,level:level+1,renderFn,isParentsLastOfLvl:isLastNodeOfList})));return renderItemWrapper?renderItemWrapper({item:node,children:treeItemElm}):treeItemElm},makeRenderTreeBranches=renderTreeArgs=>({data,level,renderFn,isParentsLastOfLvl=!1})=>data.map((node,i)=>{let isFirstNode=0===level&&0===i,isLastNodeOfList=getLastNodeOfList({node,data,level,isParentsLastOfLvl});return React.createElement(Node,{key:node.id,level:level,node:node,isFirstNode:isFirstNode,renderFn:renderFn,isLastNodeOfList:isLastNodeOfList,...renderTreeArgs})}),isMatchingTreeNode=tree=>null!==tree;export const BaseEntityTree=({ariaAttributes:deprecatedAriaAttributes,slotProps,data,selectedIds,onSelectionChange,onSelectionToggle,onNodeClick,expandedIds=[],onToggle,activeId,chunkSize=10,filterFn,onTreeChange,hideBorder=!1,size="m",showItemsCount=!0,showMoreButtonLabel,renderRightContent,renderItemWrapper,"data-e2e-test-id":dataE2eTestId,...ariaAttributes})=>{let nodeChildrenMap=Object.assign({},...data.map(tree=>getNodeChildrenMap(tree))),nodeCheckboxState=selectedIds?Object.assign({},...data.map(tree=>getTreeCheckboxState(nodeChildrenMap,tree.id,selectedIds))):null,nodeExpandedState=expandedIds.reduce((acc,id)=>(acc[id]=!0,acc),{}),visibleActiveNodeId=getVisibleActiveNodeId(nodeChildrenMap,nodeExpandedState,activeId),handleExpand=useCallback(targetId=>{onToggle&&!expandedIds.includes(targetId)&&onToggle(expandedIds.concat([targetId]))},[expandedIds,onToggle]),handleCollapse=useCallback(targetId=>{onToggle&&expandedIds.includes(targetId)&&onToggle(expandedIds.filter(id=>id!==targetId))},[expandedIds,onToggle]),handleToggle=useCallback(targetId=>{expandedIds.includes(targetId)?handleCollapse(targetId):handleExpand(targetId)},[expandedIds,handleCollapse,handleExpand]),dataShown=filterFn?data.map(tree=>filterTree(tree,filterFn)).filter(isMatchingTreeNode):data;useEffect(()=>{onTreeChange&&onTreeChange(dataShown.map(tree=>mapTree(tree,node=>({...node,checkedState:!!nodeCheckboxState&&nodeCheckboxState[node.id],isExpanded:!!nodeExpandedState[node.id]}))))},[dataShown,nodeCheckboxState,nodeExpandedState,onTreeChange]);let expandAll=!!filterFn,{hasMoreNodes,handleIncreaseMaxNodeCount,result}=useTreeTruncation({chunkSize,data:dataShown,nodeExpandedState,expandAll}),listRef=React.useRef(null),visibleNodes=useMemo(()=>flattenTree(result,nodeExpandedState,expandAll),[result,nodeExpandedState,expandAll]),visibleNodeIndexMap=useMemo(()=>visibleNodes.reduce((acc,node,index)=>(acc[node.id]=index,acc),{}),[visibleNodes]),{moveFocus,focusedIndex}=useFocusByIndex({containerRef:listRef,nodeSelector:"data-list-item",data:useMemo(()=>visibleNodes.map(node=>({id:node.id,isDisabled:!!node.isDisabled})),[visibleNodes])}),focusedNodeId=focusedIndex>=0?visibleNodes[focusedIndex]?.id??null:null;useKeyboard({ArrowDown:()=>{moveFocus(1)},ArrowUp:()=>{moveFocus(-1)},ArrowRight:()=>{!expandAll&&focusedNodeId&&nodeChildrenMap[focusedNodeId]?.length&&!nodeExpandedState[focusedNodeId]&&handleExpand(focusedNodeId)},ArrowLeft:()=>{!expandAll&&focusedNodeId&&nodeChildrenMap[focusedNodeId]?.length&&nodeExpandedState[focusedNodeId]&&handleCollapse(focusedNodeId)}},listRef,!!visibleNodes.length);let renderTreeBranches=makeRenderTreeBranches({nodeChildrenMap,nodeCheckboxState,nodeExpandedState,handleSelectionChange:targetId=>{if(onSelectionChange&&selectedIds){let isSelected,updatedSelectedIds=[];if(0===nodeChildrenMap[targetId].length)isSelected=!selectedIds.includes(targetId),updatedSelectedIds=selectedIds.includes(targetId)?selectedIds.filter(id=>id!==targetId):selectedIds.concat([targetId]);else{let affectedLeafNodeIds=getLeafNodeIds(nodeChildrenMap,targetId),hasUncheckedChildren=affectedLeafNodeIds.some(leafId=>!selectedIds.includes(leafId));updatedSelectedIds=hasUncheckedChildren?selectedIds.concat(affectedLeafNodeIds.filter(id=>!selectedIds.includes(id))):selectedIds.filter(id=>!affectedLeafNodeIds.includes(id)),isSelected=hasUncheckedChildren}onSelectionToggle?.(targetId,isSelected),onSelectionChange(updatedSelectedIds)}},handleToggle,onNodeClick:node=>{onNodeClick?.(node)},expandAll,hideBorder,size,showItemsCount,renderRightContent,renderItemWrapper,activeId:visibleActiveNodeId,focusedNodeId,visibleNodeIndexMap,ariaLabelExpand:slotProps?.toggle?.["aria-label-expand"]??deprecatedAriaAttributes?.ariaLabelExpand,ariaLabelCollapse:slotProps?.toggle?.["aria-label-collapse"]??deprecatedAriaAttributes?.ariaLabelCollapse});return React.createElement("div",null,React.createElement(StyledList,{ref:listRef,"data-e2e-test-id":dataE2eTestId,"data-ds-id":"EntityTree",size:size,...ariaAttributes,role:"tree","aria-multiselectable":!!nodeCheckboxState||void 0},renderTreeBranches({data:result,level:0,renderFn:renderTreeBranches})),hasMoreNodes&&React.createElement(StyledShowMore,null,React.createElement(Box,{alignText:"center",space:"xs"},React.createElement(Button,{fullWidth:!0,size:"s",variant:"tertiary",onClick:handleIncreaseMaxNodeCount},showMoreButtonLabel))))};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React,{useCallback,useImperativeHandle,useRef}from"react";import styled from"@emotion/styled";import{useResponsiveValue}from"../../shared/mediaQueries";import{EntityTreeItemExpandButton}from"./EntityTreeItemExpandButton";import{useKeyboard}from"../../shared/useKeyboard";import{getFocusStyles}from"../../shared/mixins";import{EntityItemBody}from"../EntityList/EntityItemBody";import{StyledEntityItem,StyledEntityListItemWrapper,StyledEntityListItemButton}from"../EntityList/styled-components";let isSelfEvent=e=>e.target===e.currentTarget,StyledEntityTreeItemWrapper=styled(StyledEntityListItemWrapper,{target:"
|
|
1
|
+
import React,{useCallback,useImperativeHandle,useRef}from"react";import styled from"@emotion/styled";import{useResponsiveValue}from"../../shared/mediaQueries";import{EntityTreeItemExpandButton}from"./EntityTreeItemExpandButton";import{useKeyboard}from"../../shared/useKeyboard";import{getFocusStyles}from"../../shared/mixins";import{EntityItemBody}from"../EntityList/EntityItemBody";import{StyledEntityItem,StyledEntityListItemWrapper,StyledEntityListItemButton}from"../EntityList/styled-components";let isSelfEvent=e=>e.target===e.currentTarget,StyledEntityTreeItemWrapper=styled(StyledEntityListItemWrapper,{target:"ek85a5p0",label:"StyledEntityTreeItemWrapper"})({paddingLeft:"0 !important"}),StyledEntityTreeItemContainer=styled(StyledEntityListItemButton,{target:"ek85a5p1",label:"StyledEntityTreeItemContainer"})(({theme,hasExpandableIcon,lSpaceStep})=>{let getSize=(baseOffset,deepestNodeOffset)=>`calc(${baseOffset} * ${lSpaceStep} + ${hasExpandableIcon?"0px":deepestNodeOffset} + ${theme.variables.size.spacing.xxs})`;return{...getFocusStyles({offset:-2}),...useResponsiveValue({paddingLeft:[getSize(theme.variables.size.spacing.m,"42px"),getSize(theme.variables.size.spacing.xl,"56px")]})}});export const EntityTreeItem=React.forwardRef(({checkboxProps,children,description,hideBorder,isActive,isClickable,isDisabled,isDisabledExpand,isExpanded,lSpaceStep,onClick,onExpandClick,onSpaceEnterPress,renderLabel,renderLeft,renderRight,size="m",tabIndex,ariaLabelExpand,ariaLabelCollapse,"aria-level":ariaLevel,"aria-label":ariaLabel,"data-list-item":dataListItem,onPointerEnter,onPointerLeave,onFocus,onBlur,onKeyDown,"aria-describedby":ariaDescribedBy},ref)=>{let hasExpandableIcon=void 0!==isExpanded,handleOnClick=useCallback(e=>{onClick&&onClick(e)},[onClick]),buttonRef=useRef(null);return useKeyboard({"Space Enter":e=>onSpaceEnterPress?.(e)},buttonRef,0===tabIndex&&(isClickable||!!checkboxProps),!0),useImperativeHandle(ref,()=>buttonRef.current),React.createElement(StyledEntityItem,{role:"treeitem","aria-expanded":hasExpandableIcon?isExpanded:void 0,"aria-checked":checkboxProps?.checked,"aria-label":ariaLabel,"aria-level":ariaLevel},React.createElement(StyledEntityTreeItemContainer,{"data-list-item":dataListItem,size:size,ref:buttonRef,"data-id":"list-item",tabIndex:tabIndex,role:"presentation",isActive:isActive,hasExpandableIcon:hasExpandableIcon,lSpaceStep:lSpaceStep,isDisabled:isDisabled,onClick:handleOnClick,isClickable:isClickable,"aria-describedby":ariaDescribedBy,onPointerEnter:onPointerEnter,onPointerLeave:onPointerLeave,onFocus:e=>{isSelfEvent(e)&&onFocus?.(e)},onBlur:e=>{isSelfEvent(e)&&onBlur?.(e)},onKeyDown:onKeyDown},hasExpandableIcon&&React.createElement(EntityTreeItemExpandButton,{size:size,tabIndex:-1,isDisabled:isDisabledExpand||isDisabled,isExpanded:isExpanded,onClick:onExpandClick,ariaLabelExpand:ariaLabelExpand,ariaLabelCollapse:ariaLabelCollapse}),React.createElement(StyledEntityTreeItemWrapper,{size:size,hideBorder:hideBorder||"xs"===size},React.createElement(EntityItemBody,{size:size,tabIndex:tabIndex,description:description,renderLabel:renderLabel,renderLeft:renderLeft,renderRight:renderRight,checkboxProps:checkboxProps}))),isExpanded&&children)});
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import type { EntityListItemProps } from "../EntityList/types";
|
|
3
|
-
|
|
3
|
+
type EntityTreeItemExpandButtonProps = Pick<EntityListItemProps, "onClick" | "isExpanded" | "isDisabled" | "ariaLabelExpand" | "ariaLabelCollapse" | "tabIndex"> & Required<Pick<EntityListItemProps, "size">>;
|
|
4
|
+
export declare function EntityTreeItemExpandButton({ size, onClick, isExpanded, isDisabled, ariaLabelExpand, ariaLabelCollapse, tabIndex, }: EntityTreeItemExpandButtonProps): React.ReactElement;
|
|
5
|
+
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React from"react";import{PictogramButton}from"../PictogramButton/PictogramButton";import{Box}from"../Box/Box";import{StyledWrapperOffset}from"../EntityList/styled-components";export function EntityTreeItemExpandButton({size,onClick,isExpanded,isDisabled,ariaLabelExpand,ariaLabelCollapse,tabIndex}){return React.createElement(Box,{vSpace:"zero",space:["xs","m"]},React.createElement(StyledWrapperOffset,{size:size},React.createElement(PictogramButton,{tabIndex:tabIndex,disabled:isDisabled,onClick:onClick,icon:isExpanded?"chevron-down":"chevron-right","aria-label":isExpanded?ariaLabelExpand
|
|
1
|
+
import React from"react";import{useIntl}from"../../shared/intl/useIntl";import{PictogramButton}from"../PictogramButton/PictogramButton";import{Box}from"../Box/Box";import{StyledWrapperOffset}from"../EntityList/styled-components";export function EntityTreeItemExpandButton({size,onClick,isExpanded,isDisabled,ariaLabelExpand,ariaLabelCollapse,tabIndex}){let{formatMessage}=useIntl();return React.createElement(Box,{vSpace:"zero",space:["xs","m"]},React.createElement(StyledWrapperOffset,{size:size},React.createElement(PictogramButton,{tabIndex:tabIndex,disabled:isDisabled,onClick:onClick,icon:isExpanded?"chevron-down":"chevron-right","aria-label":isExpanded?ariaLabelCollapse??formatMessage("EntityTree.ExpandButton.CollapseAriaLabel"):ariaLabelExpand??formatMessage("EntityTree.ExpandButton.ExpandAriaLabel"),"aria-expanded":isExpanded})))}
|
|
@@ -6,7 +6,7 @@ export declare function trimDataByMaxSize(data: TreeNode[], expandedIds: NodeExp
|
|
|
6
6
|
hasMoreNodes: boolean;
|
|
7
7
|
};
|
|
8
8
|
export declare function getTreeCheckboxState(nodeChildrenMap: NodeChildrenMap, rootID: NodeID, selectedLeafNodeIds: NodeID[]): NodeCheckboxState;
|
|
9
|
-
export declare function getVisibleActiveNodeId(nodeChildrenMap: NodeChildrenMap, nodeExpandState: NodeExpandedState, activeId: NodeID): NodeID;
|
|
9
|
+
export declare function getVisibleActiveNodeId(nodeChildrenMap: NodeChildrenMap, nodeExpandState: NodeExpandedState, activeId: NodeID | undefined): NodeID | undefined;
|
|
10
10
|
export declare function getLeafNodeIds(nodeChildrenMap: NodeChildrenMap, rootID: NodeID): NodeID[];
|
|
11
11
|
export declare function filterTree(tree: TreeNode, filterFn: (node: TreeNode) => boolean): TreeNode | null;
|
|
12
12
|
export declare function mapTree(tree: TreeNode, mapFn: (node: TreeNode) => TreeNode): TreeNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{CheckboxState}from"./types";function foldTree(f,nodeChildrenMap,rootID){let go=nodeID=>f(nodeID,nodeChildrenMap[nodeID].map(go));return go(rootID)}export function getNodeChildrenMap(tree){let nodeChildrenMap={};return!function traverse(node){let{children}=node;nodeChildrenMap[
|
|
1
|
+
import{CheckboxState}from"./types";function foldTree(f,nodeChildrenMap,rootID){let go=nodeID=>f(nodeID,nodeChildrenMap[nodeID].map(go));return go(rootID)}export function getNodeChildrenMap(tree){let nodeChildrenMap={};return!function traverse(node){let{id,children}=node;void 0!==id&&void 0!==children&&(nodeChildrenMap[id]=children.map(child=>(traverse(child),child.id)))}(tree),nodeChildrenMap}export function findPathToNode(nodeChildrenMap,targetNodeID){let findParent=nodeId=>Object.keys(nodeChildrenMap).find(parentId=>nodeChildrenMap[parentId].includes(nodeId))||null,path=[],currNodeId=targetNodeID;for(;currNodeId;)path.push(currNodeId),currNodeId=findParent(currNodeId);return path.reverse()}export function trimDataByMaxSize(data,expandedIds,expandAll,maxNodesSize){let visibleNodesCount=0,hasMoreNodes=!1;return{result:function getVisibleNodes(nodes){return nodes.reduce((filteredNodes,node)=>{if(visibleNodesCount>=maxNodesSize)return hasMoreNodes=!0,filteredNodes;visibleNodesCount+=1;let newNode={...node};return(expandedIds[node.id]||expandAll)&&node.children.length>0&&(newNode.children=getVisibleNodes(node.children)),[...filteredNodes,newNode]},[])}(data),hasMoreNodes}}export function getTreeCheckboxState(nodeChildrenMap,rootID,selectedLeafNodeIds){return foldTree((currId,childrenResults)=>{if(0===nodeChildrenMap[currId].length)return{[currId]:selectedLeafNodeIds.includes(currId)?CheckboxState.Checked:CheckboxState.Unchecked};let mergedChildrenResult=childrenResults.reduce((acc,result)=>Object.assign(acc,result)),childrenStates=new Set(nodeChildrenMap[currId].map(childId=>mergedChildrenResult[childId])),[firstChildState]=childrenStates;return{[currId]:1===childrenStates.size?firstChildState:CheckboxState.Indeterminate,...mergedChildrenResult}},nodeChildrenMap,rootID)}export function getVisibleActiveNodeId(nodeChildrenMap,nodeExpandState,activeId){if(activeId)return findPathToNode(nodeChildrenMap,activeId).find(nodeId=>!nodeExpandState[nodeId])}export function getLeafNodeIds(nodeChildrenMap,rootID){return foldTree((currId,childrenResults)=>0===nodeChildrenMap[currId].length?[currId]:childrenResults.flat(),nodeChildrenMap,rootID)}export function filterTree(tree,filterFn){let filteredChildren=tree.children.map(child=>filterTree(child,filterFn)).filter(child=>child);return 0!==filteredChildren.length||filterFn(tree)?{...tree,isFiltered:tree.children.length!==filteredChildren.length,children:filteredChildren}:null}export function mapTree(tree,mapFn){return{...mapFn(tree),children:tree.children.map(child=>mapTree(child,mapFn))}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React,{useRef,useLayoutEffect}from"react";import styled from"@emotion/styled";import{FormField}from"../FormField/FormField";import{Inline}from"../../Inline/Inline";import{Text,getTextLineHeight}from"../../Typography/Text/Text";import{Icon}from"../../Icon/Icon";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";export const StyledInputContainer=styled("div",{target:"
|
|
1
|
+
import React,{useRef,useLayoutEffect}from"react";import styled from"@emotion/styled";import{FormField}from"../FormField/FormField";import{Inline}from"../../Inline/Inline";import{Text,getTextLineHeight}from"../../Typography/Text/Text";import{Icon}from"../../Icon/Icon";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";export const StyledInputContainer=styled("div",{target:"e13evtie0",label:"StyledInputContainer"})(({theme,vSize,hSize})=>({userSelect:"none",display:"flex",position:"relative",width:theme.variables.size.dimension.checkbox[hSize],height:`calc(${theme.variables.size.font[vSize]} * ${getTextLineHeight({size:vSize,theme})})`,boxSizing:"border-box",alignItems:"center"}));export const StyledRealInput=styled("input",{target:"e13evtie1",label:"StyledRealInput"})(({theme})=>({opacity:theme.variables.opacity.hidden,cursor:"pointer",height:0,width:0,position:"absolute"}));export const StyledFakeInput=styled("span",{target:"e13evtie2",label:"StyledFakeInput"})(({theme,size="m"})=>({boxSizing:"border-box",width:theme.variables.size.dimension.checkbox[size],height:theme.variables.size.dimension.checkbox[size],borderRadius:theme.variables.size.borderRadius.xs,border:"2px solid",display:"flex",alignItems:"center",justifyContent:"center",background:theme.values.color.background.primary.default,color:theme.values.color.text.onAccent.default,borderColor:theme.values.color.border.primary.default,lineHeight:0,"& svg":{opacity:theme.variables.opacity.hidden},"input: focus-visible + &":{outlineWidth:"2px",outlineStyle:"solid",outlineColor:"Highlight"},"@media (-webkit-min-device-pixel-ratio:0)":{"input: focus-visible + &":{outlineColor:"-webkit-focus-ring-color",outlineStyle:"auto"}},"input:checked + &, input:indeterminate + &":{border:0,background:theme.values.color.background.accent.default,svg:{opacity:theme.variables.opacity.visible}},"input:disabled + &":{pointerEvents:"none"}}));export const StyledCheckboxContainer=styled("div",{target:"e13evtie3",label:"StyledCheckboxContainer"})(({theme,isInteractable})=>({"&:hover":{...isInteractable&&{cursor:"pointer",[`input:checked + ${StyledFakeInput}, input:indeterminate + ${StyledFakeInput}`]:{background:theme.values.color.background.accent.hover},[`${StyledFakeInput}`]:{borderColor:theme.values.color.border.primary.hover}},...!isInteractable&&{cursor:"not-allowed"}}}));export const CheckboxRaw=React.forwardRef(({indeterminate,size="m",disabled,checked,label,labelHint,labelSize="m",...rest},ref)=>{let internalRef=useRef(null),inputRef=ref??internalRef;return useLayoutEffect(()=>{"object"==typeof inputRef&&inputRef.current&&(inputRef.current.indeterminate=!!indeterminate)},[indeterminate,inputRef]),React.createElement(StyledCheckboxContainer,{isInteractable:!disabled},React.createElement(Inline,{space:"xs",vAlignItems:"top",noWrap:!0},React.createElement(StyledInputContainer,{hSize:size,vSize:labelSize},React.createElement(StyledRealInput,{...rest,ref:inputRef,"aria-checked":indeterminate?"mixed":checked,type:"checkbox",disabled:disabled,checked:checked}),React.createElement(StyledFakeInput,{size:size},indeterminate?React.createElement(Icon,{size:"s",name:"minus"}):React.createElement(Icon,{size:"s",name:"m"===size?"check":"check-small"}))),label&&React.createElement("div",null,"string"==typeof label?React.createElement(Text,{size:labelSize},label):label,labelHint&&React.createElement(Text,{color:"tertiary",size:"s"},labelHint))))});export const Checkbox=React.forwardRef(({label,labelHint,hint,errorMessages,size="m",disabled,"data-e2e-test-id":dataE2eTestId,"aria-describedby":ariaDescribedBy,...rest},ref)=>{let{id,ariaDescribedByProp}=useFormFieldMessageId({ariaDescribedBy,errorMessages,hint});return React.createElement(FormField,{"data-e2e-test-id":dataE2eTestId,"data-ds-id":"Checkbox",disabled:disabled,errorMessages:errorMessages,hint:hint,messageId:id},React.createElement(CheckboxRaw,{...rest,ref:ref,size:size,label:label,labelHint:labelHint,disabled:disabled,...ariaDescribedByProp}))});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React from"react";import{FormField}from"../FormField/FormField";import{SingleSelect}from"./SingleSelect";import{MultiSelect}from"./MultiSelect";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";let defaultFilterMethod=(option,value)=>option.label.toLowerCase().indexOf(value.toLowerCase())>-1;export function Combobox({options=[],name,value,placeholder,emptyStateMessage,hasError,filterMethod=defaultFilterMethod,formatSelectedOptionsLabel,onChange=()=>{},onBlur=()=>null,onFocus=()=>null,maxHeight=230,autoComplete="on",multiple
|
|
1
|
+
import React from"react";import{FormField}from"../FormField/FormField";import{SingleSelect}from"./SingleSelect";import{MultiSelect}from"./MultiSelect";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";let defaultFilterMethod=(option,value)=>option.label.toLowerCase().indexOf(value.toLowerCase())>-1;export function Combobox({options=[],name,value,placeholder,emptyStateMessage,hasError,filterMethod=defaultFilterMethod,formatSelectedOptionsLabel,onChange=()=>{},onBlur=()=>null,onFocus=()=>null,maxHeight=230,autoComplete="on",multiple,privateProps,portalContainer,optionsListWidth,readOnly,errorMessages,hint,slotProps,"aria-describedby":ariaDescribedBy,"data-e2e-test-id":dataE2eTestId,...rest}){let{disabled,label}=rest,{id,ariaDescribedByProp}=useFormFieldMessageId({ariaDescribedBy,errorMessages,hint});return React.createElement(FormField,{"data-ds-id":"Combobox",disabled:disabled,errorMessages:errorMessages,hint:hint,messageId:id,"data-e2e-test-id":dataE2eTestId,...rest},multiple?React.createElement(MultiSelect,{name:name,options:options,value:value,placeholder:placeholder,emptyStateMessage:emptyStateMessage,hasError:hasError,disabled:disabled,filterMethod:filterMethod,onChange:onChange,onFocus:onFocus,onBlur:onBlur,maxHeight:maxHeight,autoComplete:autoComplete,label:label,formatSelectedOptionsLabel:formatSelectedOptionsLabel,portalContainer:portalContainer,optionsListWidth:optionsListWidth,slotProps:{tag:slotProps.tag},...ariaDescribedByProp,...rest}):React.createElement(SingleSelect,{name:name,options:options,value:value,placeholder:placeholder,emptyStateMessage:emptyStateMessage,hasError:hasError,disabled:disabled,filterMethod:filterMethod,onChange:onChange,onFocus:onFocus,onBlur:onBlur,maxHeight:maxHeight,autoComplete:autoComplete,label:label,privateProps:privateProps,portalContainer:portalContainer,optionsListWidth:optionsListWidth,readOnly:readOnly,...ariaDescribedByProp,...rest}))}
|
|
@@ -13,7 +13,7 @@ export type UniqueMultiSelectProps = {
|
|
|
13
13
|
onChange?: (value: string[], actionData: ActionData, event: React.ChangeEvent<HTMLSelectElement>) => void;
|
|
14
14
|
formatSelectedOptionsLabel?: (count?: number) => string;
|
|
15
15
|
};
|
|
16
|
-
type MultiSelectProps = CommonSelectProps & Pick<FormFieldProps, "label"> & UniqueMultiSelectProps & AriaAttributes & {
|
|
16
|
+
type MultiSelectProps = Omit<CommonSelectProps, "value" | "onChange" | "formatSelectedOptionsLabel" | "options" | "filterMethod" | "maxHeight"> & Required<Pick<CommonSelectProps, "options" | "filterMethod" | "maxHeight">> & Pick<FormFieldProps, "label"> & UniqueMultiSelectProps & AriaAttributes & {
|
|
17
17
|
slotProps: {
|
|
18
18
|
tag: NonNullable<ComboboxSlotProps["tag"]>;
|
|
19
19
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React,{useRef,useMemo,useEffect,useCallback,useReducer}from"react";import styled from"@emotion/styled";import{useKeyboard}from"../../../shared/useKeyboard";import{InputRaw}from"../Input/Input";import{Tag}from"../../Tag/Tag";import{StyledContainer,StyledFakeInputWrap}from"./StyledSelectComponents";import{MultiSelectReducer}from"./MultiSelectReducer";import{getOptionId,getOptionsListId,OptionsList}from"./OptionsList";let StyledInputWrap=styled("div",{target:"
|
|
1
|
+
import React,{useRef,useMemo,useEffect,useCallback,useReducer}from"react";import styled from"@emotion/styled";import{useKeyboard}from"../../../shared/useKeyboard";import{InputRaw}from"../Input/Input";import{Tag}from"../../Tag/Tag";import{StyledContainer,StyledFakeInputWrap}from"./StyledSelectComponents";import{MultiSelectReducer}from"./MultiSelectReducer";import{getOptionId,getOptionsListId,OptionsList}from"./OptionsList";let StyledInputWrap=styled("div",{target:"e1p1zl000",label:"StyledInputWrap"})(({theme,hasValue})=>({zIndex:1,display:"flex",alignItems:"center",position:"relative","& input":{...hasValue&&{paddingLeft:theme.variables.size.spacing.xxs}}})),StyledTagWrap=styled("div",{target:"e1p1zl001",label:"StyledTagWrap"})(({theme})=>({marginLeft:theme.variables.size.spacing.xs,order:-1})),getSelectedOptions=(options,value)=>{let mapFromValue=new Set(value);return options.filter(opt=>mapFromValue.has(opt.value))};export function MultiSelect({options,name,value,placeholder,emptyStateMessage,hasError,filterMethod,onChange,onBlur,onFocus,maxHeight,formatSelectedOptionsLabel=count=>`${count} selected`,autoComplete,disabled,label,portalContainer,optionsListWidth,slotProps,"aria-describedby":ariaDescribedBy,privateProps,...ariaAttributes}){let selectRef=useRef(null),initialSelectedOptions=useMemo(()=>getSelectedOptions(options,value),[options,value]),{clearButtonAriaLabel}=slotProps.tag,[{selectedOptions,actionName,changedOptions,isOpen,preselectedIndex,innerValue},dispatch]=useReducer(MultiSelectReducer,{selectedOptions:initialSelectedOptions,isOpen:!1,preselectedIndex:-1,innerValue:""}),innerInputRef=useRef(null),inputWrapperRef=useRef(null),handleOnChange=useCallback(event=>{actionName&&changedOptions&&onChange?.(selectedOptions.map(opt=>opt.value),{name,action:actionName,data:changedOptions},event)},[selectedOptions,actionName,changedOptions,name,onChange]),forceChangeFakeSelect=useCallback(option=>{dispatch({type:"onChange",option})},[dispatch]);useEffect(()=>{dispatch({type:"updateSelectedOptions",selectedOptions:initialSelectedOptions})},[initialSelectedOptions]);let closeDropdown=useCallback(()=>{dispatch({type:"close"}),dispatch({type:"setInnerValue",value:""}),dispatch({type:"setPreselectedIndex",index:-1}),onBlur?.()},[onBlur,dispatch]);useEffect(()=>{selectRef.current&&selectRef.current.dispatchEvent(new Event("change",{bubbles:!0}))},[changedOptions,selectRef.current]);let filteredOptions=useMemo(()=>innerValue?options.filter(option=>filterMethod(option,innerValue)):options,[options,filterMethod,innerValue]);useEffect(()=>{dispatch({type:"setPreselectedIndex",index:-1})},[filteredOptions]),useKeyboard({"ArrowUp ArrowDown":()=>{dispatch({type:"open"})}},innerInputRef,!isOpen&&!disabled);let optionsListId=getOptionsListId(name),preselectedOption=filteredOptions[preselectedIndex]??null,ariaActiveDescendant=-1!==preselectedIndex&&preselectedOption?getOptionId(name,preselectedOption.value):"";return React.createElement(StyledContainer,{onBlur:()=>{closeDropdown()}},React.createElement(StyledInputWrap,{hasValue:value.length>0,ref:inputWrapperRef},React.createElement(InputRaw,{name:`${name}-innerInput`,value:innerValue,hasError:hasError,privateProps:{isTransparent:!0,hideOutline:!0},icon:isOpen?"chevron-up":"chevron-down",disabled:disabled,placeholder:0===value.length?placeholder:void 0,onFocus:onFocus,onClick:()=>{dispatch({type:"open"})},onChange:e=>{e.currentTarget.value&&dispatch({type:"open"}),dispatch({type:"setInnerValue",value:e.currentTarget.value})},ref:innerInputRef,autoComplete:autoComplete,...ariaAttributes,"aria-label":label,role:"combobox","aria-activedescendant":isOpen?ariaActiveDescendant:"","aria-controls":isOpen?optionsListId:"","aria-expanded":isOpen,"aria-describedby":ariaDescribedBy}),initialSelectedOptions.length>0&&React.createElement(StyledTagWrap,{role:"status"},React.createElement(Tag,{label:formatSelectedOptionsLabel(initialSelectedOptions.length),isRemovable:!0,onClear:()=>{dispatch({type:"clear"})},clearBtnAriaLabel:clearButtonAriaLabel}))),React.createElement(StyledFakeInputWrap,null,React.createElement(InputRaw,{"aria-hidden":!0,name:`${name}-fakeInput`,value:void 0,type:"text",onChange:()=>null,icon:isOpen?"chevron-up":"chevron-down",tabIndex:-1,autoComplete:"off",hasError:hasError})),React.createElement(OptionsList,{isMultiSelect:!0,name:name,isOpen:isOpen,options:filteredOptions,triggerRef:innerInputRef,triggerWrapperRef:inputWrapperRef,onCloseDropdown:closeDropdown,portalContainer:portalContainer,selectedIndex:preselectedIndex,onSelectedIndexChange:index=>{dispatch({type:"setPreselectedIndex",index})},forceChangeFakeSelect:forceChangeFakeSelect,value:value,emptyStateMessage:emptyStateMessage,disabled:disabled,maxHeight:maxHeight,optionsListWidth:optionsListWidth}),React.createElement("select",{ref:selectRef,name:name,onChange:handleOnChange,"data-e2e-test-id":"multiSelect",tabIndex:-1,"aria-hidden":!0,hidden:!0,value:value,multiple:!0},selectedOptions.map(o=>React.createElement("option",{key:o.value,value:o.value},o.label))))}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { SelectOption } from "./Combobox";
|
|
2
2
|
type ChangeAction = "select-option" | "deselect-option" | "clear";
|
|
3
3
|
type State = {
|
|
4
|
-
selectedOptions
|
|
4
|
+
selectedOptions: SelectOption[];
|
|
5
5
|
changedOptions?: SelectOption[];
|
|
6
6
|
isOpen: boolean;
|
|
7
7
|
preselectedIndex: number;
|
|
@@ -11,15 +11,18 @@ export declare const OPTIONS_LIST_SELECTOR = "[role=\"listbox\"], [role=\"option
|
|
|
11
11
|
type OptionsListProps = {
|
|
12
12
|
isOpen: boolean;
|
|
13
13
|
isMultiSelect?: boolean;
|
|
14
|
-
triggerRef: RefObject<
|
|
14
|
+
triggerRef: RefObject<HTMLElement>;
|
|
15
15
|
triggerWrapperRef?: RefObject<HTMLDivElement>;
|
|
16
16
|
onCloseDropdown: (noSelect?: boolean) => void;
|
|
17
17
|
selectedIndex: number;
|
|
18
18
|
onSelectedIndexChange: (index: number) => void;
|
|
19
19
|
forceChangeFakeSelect: (selectedOption: SelectOption) => void;
|
|
20
20
|
isVirtualized?: boolean;
|
|
21
|
-
|
|
21
|
+
name: string;
|
|
22
|
+
value: string | string[];
|
|
23
|
+
maxHeight: number;
|
|
24
|
+
} & Omit<Partial<CommonSelectProps>, "name" | "value" | "maxHeight">;
|
|
22
25
|
export declare function getOptionId(selectName: string, optionValue: string): string;
|
|
23
26
|
export declare function getOptionsListId(selectName: string): string;
|
|
24
|
-
export declare function OptionsList({ isOpen, isMultiSelect, value, disabled, options, portalContainer, triggerRef, triggerWrapperRef, maxHeight, emptyStateMessage, selectedIndex, optionsListWidth, isVirtualized, name, onCloseDropdown, onSelectedIndexChange, forceChangeFakeSelect, }: OptionsListProps): React.ReactElement;
|
|
27
|
+
export declare function OptionsList({ isOpen, isMultiSelect, value, disabled, options, portalContainer, triggerRef, triggerWrapperRef, maxHeight, emptyStateMessage, selectedIndex, optionsListWidth, isVirtualized, name, onCloseDropdown, onSelectedIndexChange, forceChangeFakeSelect, }: OptionsListProps): React.ReactElement | null;
|
|
25
28
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React,{useRef,useEffect,useLayoutEffect,useMemo}from"react";import{useTheme}from"@emotion/react";import styled from"@emotion/styled";import{useKeyboard}from"../../../shared/useKeyboard";import{useWindow}from"../../../shared/useWindow";import{usePopupMenu}from"../../../shared/popupMenu/usePopupMenu";import{VirtualScrollList}from"../../VirtualScrollList/VirtualScrollList";import{Text}from"../../Typography/Text/Text";import{Box}from"../../Box/Box";import{Inline}from"../../Inline/Inline";import{Icon}from"../../Icon/Icon";import{StyledDropdown,StyledOption}from"./StyledSelectComponents";import{dropdownContainerStyle}from"./constants";import{Stack}from"../../Stack/Stack";import{CheckboxRaw}from"../Checkbox/Checkbox";import{Portal}from"../../Portal/Portal";import{ScreenReaderText}from"../../Utilities/ScreenReaderText/ScreenReaderText";export const OPTIONS_LIST_SELECTOR='[role="listbox"], [role="option"]';export function getOptionId(selectName,optionValue){return`${selectName}Option${optionValue}`}export function getOptionsListId(selectName){return`${selectName}OptionsList`}let scrollToItem=({list,itemIndex,behavior})=>{list[itemIndex]?.scrollIntoView?.({behavior,block:"nearest"})},CustomOption=styled(StyledOption,{target:"
|
|
1
|
+
import React,{useRef,useEffect,useLayoutEffect,useMemo}from"react";import{useTheme}from"@emotion/react";import styled from"@emotion/styled";import{useKeyboard}from"../../../shared/useKeyboard";import{useWindow}from"../../../shared/useWindow";import{usePopupMenu}from"../../../shared/popupMenu/usePopupMenu";import{VirtualScrollList}from"../../VirtualScrollList/VirtualScrollList";import{Text}from"../../Typography/Text/Text";import{Box}from"../../Box/Box";import{Inline}from"../../Inline/Inline";import{Icon}from"../../Icon/Icon";import{StyledDropdown,StyledOption}from"./StyledSelectComponents";import{dropdownContainerStyle}from"./constants";import{Stack}from"../../Stack/Stack";import{CheckboxRaw}from"../Checkbox/Checkbox";import{Portal}from"../../Portal/Portal";import{ScreenReaderText}from"../../Utilities/ScreenReaderText/ScreenReaderText";export const OPTIONS_LIST_SELECTOR='[role="listbox"], [role="option"]';export function getOptionId(selectName,optionValue){return`${selectName}Option${optionValue}`}export function getOptionsListId(selectName){return`${selectName}OptionsList`}let scrollToItem=({list,itemIndex,behavior})=>{list[itemIndex]?.scrollIntoView?.({behavior,block:"nearest"})},CustomOption=styled(StyledOption,{target:"e1bzrm20",label:"CustomOption"})(({theme})=>({paddingTop:0,paddingBottom:0,"& > div":{paddingTop:theme.variables.size.spacing.xs,paddingBottom:theme.variables.size.spacing.xs},"& > div *":{marginTop:0}})),StyledListContainer=styled("div",{target:"e1bzrm21",label:"StyledListContainer"})(({theme,maxHeight})=>({maxHeight,boxSizing:"border-box",overflow:"auto",padding:`${theme.variables.size.spacing.xxs} 0`}));export function OptionsList({isOpen,isMultiSelect=!1,value,disabled,options=[],portalContainer,triggerRef,triggerWrapperRef,maxHeight,emptyStateMessage="No options available",selectedIndex,optionsListWidth,isVirtualized=!0,name,onCloseDropdown,onSelectedIndexChange,forceChangeFakeSelect}){let optionsListRef=useRef(null),listContainerRef=useRef(null),listItemsRef=useRef(null),refForPositioning=triggerWrapperRef||triggerRef,activeItemIndex=useMemo(()=>options.findIndex(option=>isMultiSelect?value.includes(option.value):option.value===value),[options,isMultiSelect,value]),{menuStyle:optionsListStyle,calculateStyle}=usePopupMenu({triggerRef:refForPositioning,menuRef:optionsListRef,isOpen}),win=useWindow(),{variables}=useTheme(),effectiveMaxHeight=useMemo(()=>{if(!win||!optionsListStyle.top)return maxHeight;let menuViewportMargin=parseInt(variables.size.spacing.xs,10),menuTopInViewport=optionsListStyle.top-(win.scrollY??0),spaceBelow=win.innerHeight-menuTopInViewport-menuViewportMargin;return!Number.isFinite(spaceBelow)||spaceBelow<=0?maxHeight:maxHeight?Math.min(maxHeight,spaceBelow):spaceBelow},[maxHeight,optionsListStyle,win,variables]);useLayoutEffect(()=>{if(isOpen&&listContainerRef.current&&!isVirtualized&&optionsListStyle.top){let listElm=listContainerRef.current;listElm.clientHeight<listElm.scrollHeight&&(listItemsRef.current=listElm.querySelectorAll("[data-list-item]"),scrollToItem({list:listItemsRef.current,itemIndex:activeItemIndex,behavior:"instant"}))}else listItemsRef.current=null},[isOpen,isVirtualized,listContainerRef,options,maxHeight,optionsListStyle,activeItemIndex]),useEffect(()=>{listItemsRef.current&&scrollToItem({list:listItemsRef.current,itemIndex:selectedIndex,behavior:"smooth"})},[listItemsRef,selectedIndex]),useKeyboard({Escape:()=>onCloseDropdown(!0),Enter:()=>{let preselectedOption=options[selectedIndex];if(!preselectedOption?.disabled){if(preselectedOption){forceChangeFakeSelect(preselectedOption),isMultiSelect||onCloseDropdown(!0);return}isMultiSelect||onCloseDropdown()}},ArrowUp:()=>{let newIndex=-1===selectedIndex?activeItemIndex:selectedIndex;for(;newIndex>0&&(newIndex-=1,options[newIndex]?.disabled););options[newIndex]?.disabled||onSelectedIndexChange(newIndex)},ArrowDown:()=>{let newIndex=-1===selectedIndex?activeItemIndex:selectedIndex;for(;newIndex<options.length-1&&(newIndex+=1,options[newIndex]?.disabled););options[newIndex]?.disabled||onSelectedIndexChange(newIndex)}},triggerRef,isOpen&&!disabled);let renderItem=index=>{let option=options[index],id=getOptionId(name,option.value);if(isMultiSelect){let isActive=value.includes(option.value);return React.createElement(CustomOption,{role:"option","aria-selected":isActive,"aria-disabled":option.disabled,id:id,key:option.value,active:isActive,disabled:option.disabled??!1,preSelected:selectedIndex===index,"data-list-item":!0,onMouseDown:()=>{option.disabled||forceChangeFakeSelect(option)},onClick:evt=>evt.stopPropagation()},React.createElement(CheckboxRaw,{name:"",disabled:option.disabled,checked:isActive,size:"s",label:option.label,onChange:()=>null,labelHint:option?.description}))}let isActive=value===option.value,optionText=React.createElement(Stack,{space:"zero"},React.createElement(Text,{color:"primary",size:"m"},option.label),option.description&&React.createElement(Text,{color:"tertiary",size:"s"},option.description));return React.createElement(StyledOption,{role:"option","aria-selected":isActive,"aria-disabled":option.disabled,id:id,key:option.value,active:isActive,disabled:option.disabled??!1,preSelected:selectedIndex===index,"data-list-item":!0,onMouseDown:()=>{option.disabled||(forceChangeFakeSelect(option),onCloseDropdown(!0))}},isActive?React.createElement(Inline,{noWrap:!0,alignItems:"spaceBetween"},optionText,React.createElement(Box,{space:"zero",tSpace:"xxxs"},React.createElement(Icon,{name:"check",size:"s",color:"accent"}))):optionText)},listStyle={...optionsListStyle,width:optionsListWidth||refForPositioning.current?.getBoundingClientRect().width},listElm=React.createElement(StyledDropdown,{style:listStyle,ref:optionsListRef,onMouseDown:e=>e.preventDefault(),"data-e2e-test-id":"optionsList"},isVirtualized?React.createElement(VirtualScrollList,{id:getOptionsListId(name),maxHeight:effectiveMaxHeight,itemHeight:36,itemAmount:options.length,emptyState:()=>null,containerStyle:dropdownContainerStyle,itemInView:selectedIndex,itemTemplate:renderItem,onContentHeightChange:calculateStyle,role:"listbox"}):React.createElement(StyledListContainer,{maxHeight:effectiveMaxHeight,role:"listbox",id:getOptionsListId(name),ref:listContainerRef},options.map((_option,index)=>renderItem(index))));if(!isOpen)return null;let listPortal=options.length?React.createElement(Portal,{portalContainer:portalContainer},listElm):null;return React.createElement(React.Fragment,null,React.createElement(ScreenReaderText,{role:"status","aria-live":"polite"},options.length?"":emptyStateMessage),listPortal)}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import type { CommonSelectProps } from "./Combobox";
|
|
3
3
|
import type { FormFieldProps } from "../FormField/FormField";
|
|
4
|
-
type SingleSelectProps = CommonSelectProps & Pick<FormFieldProps, "label"> & {
|
|
4
|
+
type SingleSelectProps = Omit<CommonSelectProps, "value" | "onChange" | "options" | "filterMethod" | "maxHeight"> & Required<Pick<CommonSelectProps, "options" | "filterMethod" | "maxHeight">> & Pick<FormFieldProps, "label"> & {
|
|
5
5
|
value: string;
|
|
6
6
|
onChange: (e: React.ChangeEvent<HTMLSelectElement>) => void;
|
|
7
7
|
};
|