@amboss/design-system 4.8.2-canary.1 → 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/Sandwich/useSandwichContext.d.ts +1 -1
- package/build/cjs/components/Layout/Layout.js +1 -1
- package/build/cjs/components/Layout/LayoutCssVars.d.ts +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/registry.d.ts +4 -4
- 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/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/Sandwich/useSandwichContext.d.ts +1 -1
- package/build/esm/components/Layout/Layout.js +1 -1
- package/build/esm/components/Layout/LayoutCssVars.d.ts +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/registry.d.ts +4 -4
- 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/package.json +9 -5
|
@@ -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
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React,{useState,useRef,useMemo,useEffect,useCallback}from"react";import styled from"@emotion/styled";import{useKeyboard}from"../../../shared/useKeyboard";import{InputRaw}from"../Input/Input";import{StyledContainer}from"./StyledSelectComponents";import{getOptionId,getOptionsListId,OptionsList}from"./OptionsList";let StyledInnerInputContainer=styled("div",{target:"
|
|
1
|
+
import React,{useState,useRef,useMemo,useEffect,useCallback}from"react";import styled from"@emotion/styled";import{useKeyboard}from"../../../shared/useKeyboard";import{InputRaw}from"../Input/Input";import{StyledContainer}from"./StyledSelectComponents";import{getOptionId,getOptionsListId,OptionsList}from"./OptionsList";let StyledInnerInputContainer=styled("div",{target:"eqabiiq0",label:"StyledInnerInputContainer"})({position:"relative",zIndex:1}),StyledInputWrap=styled("div",{target:"eqabiiq1",label:"StyledInputWrap"})(()=>({position:"absolute",pointerEvents:"none",width:"100%",bottom:0,left:0})),HiddenSelectInput=styled("select",{target:"eqabiiq2",label:"HiddenSelectInput"})(()=>({display:"none"}));export const SingleSelect=({options,name,value,placeholder,emptyStateMessage,hasError,filterMethod,onChange=()=>{},onBlur,onFocus,maxHeight,autoComplete,disabled,label,optionsListWidth,portalContainer,readOnly,"aria-describedby":ariaDescribedBy,privateProps,...ariaAttributes})=>{let[isOpen,setIsOpen]=useState(!1),[innerValue,setInnerValue]=useState(""),[preselectedIndex,setPreselectedIndex]=useState(-1),initialValueOption=useMemo(()=>options.find(option=>option.value===value)||{value:"",label:""},[options,value]),[fakeSelectedOption,setFakeSelectedOption]=useState(initialValueOption),fakeSelectRef=useRef(null),innerInputRef=useRef(null),currentValueRef=useRef(value);currentValueRef.current=value;let forceChangeFakeSelect=useCallback(selectedOption=>{fakeSelectedOption.value!==selectedOption.value&&setFakeSelectedOption(selectedOption)},[fakeSelectedOption]),handleOpenDropdown=useCallback(()=>{readOnly||setIsOpen(!0)},[readOnly,setIsOpen]),closeDropdown=useCallback((noSelect=!1)=>{if(setIsOpen(!1),!noSelect){let selectedOption=options.find(option=>option.label.toLowerCase().trim()===innerValue.toLowerCase().trim());selectedOption&&forceChangeFakeSelect(selectedOption)}setInnerValue(""),setPreselectedIndex(-1),onBlur?.()},[onBlur,forceChangeFakeSelect,innerValue,options]);useEffect(()=>{fakeSelectRef.current&¤tValueRef.current!==fakeSelectedOption.value&&fakeSelectRef.current.dispatchEvent(new Event("change",{bubbles:!0}))},[fakeSelectedOption,fakeSelectRef,currentValueRef]),useEffect(()=>{forceChangeFakeSelect(initialValueOption)},[initialValueOption]);let filteredOptions=useMemo(()=>innerValue?options.filter(option=>filterMethod(option,innerValue)):options,[options,filterMethod,innerValue]),displayValue=useMemo(()=>options.find(option=>option.value===value)?.label??"",[value,options]);useEffect(()=>{setPreselectedIndex(-1)},[filteredOptions]),useKeyboard({"ArrowUp ArrowDown":()=>{handleOpenDropdown()}},innerInputRef,!isOpen&&!disabled&&!readOnly);let optionsListId=getOptionsListId(name),pendingOption=filteredOptions[preselectedIndex]??null,ariaActiveDescendant=isOpen&&pendingOption?getOptionId(name,pendingOption.value):"";return React.createElement(StyledContainer,{onBlur:()=>{isOpen&&pendingOption&&!pendingOption.disabled&&forceChangeFakeSelect(pendingOption),closeDropdown(!0)}},React.createElement(StyledInnerInputContainer,null,React.createElement(InputRaw,{name:`${name}-innerInput`,value:innerValue,hasError:hasError,privateProps:{isTransparent:!(isOpen&&innerValue)||readOnly},icon:isOpen?"chevron-up":"chevron-down",disabled:disabled,readOnly:readOnly,onFocus:onFocus,onClick:handleOpenDropdown,onChange:e=>{e.currentTarget.value&&handleOpenDropdown(),setInnerValue(e.currentTarget.value)},ref:innerInputRef,autoComplete:autoComplete,...ariaAttributes,"aria-label":label,role:"combobox","aria-haspopup":"listbox","aria-activedescendant":ariaActiveDescendant,"aria-controls":isOpen?optionsListId:"","aria-expanded":isOpen,"aria-describedby":ariaDescribedBy})),React.createElement(StyledInputWrap,null,React.createElement(InputRaw,{"aria-hidden":!0,name:name,value:displayValue,onChange:()=>null,icon:isOpen?"chevron-up":"chevron-down",placeholder:placeholder,tabIndex:-1,hasError:hasError,autoComplete:"off",readOnly:readOnly})),React.createElement(OptionsList,{name:name,isOpen:isOpen,options:filteredOptions,triggerRef:innerInputRef,onCloseDropdown:closeDropdown,portalContainer:portalContainer,selectedIndex:preselectedIndex,onSelectedIndexChange:index=>{setPreselectedIndex(index)},forceChangeFakeSelect:forceChangeFakeSelect,value:value,emptyStateMessage:emptyStateMessage,disabled:disabled,maxHeight:maxHeight,optionsListWidth:optionsListWidth}),React.createElement(HiddenSelectInput,{onChange:onChange,value:fakeSelectedOption.value,ref:fakeSelectRef,autoComplete:"off"},React.createElement("option",{value:fakeSelectedOption.value},fakeSelectedOption.label)))};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import sizes from"../../../web-tokens/_sizes.json";let xxs=sizes.find(({subitemName})=>"xxs"===subitemName)
|
|
1
|
+
import sizes from"../../../web-tokens/_sizes.json";let xxs=sizes.find(({subitemName})=>"xxs"===subitemName)?.original;export const dropdownContainerStyle={paddingTop:xxs,paddingBottom:xxs};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React,{useEffect,useRef,useState,useId}from"react";import styled from"@emotion/styled";import isPropValid from"@emotion/is-prop-valid";import{Stack}from"../../Stack/Stack";import{Text}from"../../Typography/Text/Text";import{FormErrorMessages}from"../FormErrorMessages/FormErrorMessages";import{FormLabelText}from"../FormLabelText/FormLabelText";import{flattenChildren}from"../../../shared/flattenChildren";import{ScreenReaderText}from"../../Utilities/ScreenReaderText/ScreenReaderText";import{useResponsiveStyles}from"../../../shared/mediaQueries";let StyledFieldset=styled("fieldset",{shouldForwardProp:prop=>isPropValid(prop)&&"color"!==prop,target:"
|
|
1
|
+
import React,{useEffect,useRef,useState,useId}from"react";import styled from"@emotion/styled";import isPropValid from"@emotion/is-prop-valid";import{Stack}from"../../Stack/Stack";import{Text}from"../../Typography/Text/Text";import{FormErrorMessages}from"../FormErrorMessages/FormErrorMessages";import{FormLabelText}from"../FormLabelText/FormLabelText";import{flattenChildren}from"../../../shared/flattenChildren";import{ScreenReaderText}from"../../Utilities/ScreenReaderText/ScreenReaderText";import{useResponsiveStyles}from"../../../shared/mediaQueries";let StyledFieldset=styled("fieldset",{shouldForwardProp:prop=>isPropValid(prop)&&"color"!==prop,target:"ec2mc9r0",label:"StyledFieldset"})(({isObserverDone,disabled})=>({border:0,margin:0,padding:0,visibility:isObserverDone?"visible":"hidden",...disabled&&{cursor:"not-allowed"}})),InlineChildren=styled("div",{target:"ec2mc9r1",label:"InlineChildren"})({display:"flex",flexDirection:"row",flexWrap:"nowrap"}),FormChildren=styled("div",{target:"ec2mc9r2",label:"FormChildren"})(({theme,shouldLabelWrap,space})=>({...useResponsiveStyles({marginRight:[space,theme.variables.size.spacing]}),whiteSpace:shouldLabelWrap?"normal":"nowrap"})),StyledTextContainer=styled("div",{target:"ec2mc9r3",label:"StyledTextContainer"})(({theme,disabled})=>({...disabled&&{opacity:theme.variables.opacity.disabled,pointerEvents:"none"}})),StyledLabelContainer=styled("div",{target:"ec2mc9r4",label:"StyledLabelContainer"})(({theme,disabled})=>({...disabled&&{opacity:theme.variables.opacity.disabled,pointerEvents:"none"}}));export function FormFieldGroup({children,label="",labelAs="div",isLabelHidden=!1,labelHint="",errorMessages=[],hint="",disabled=!1,inline=!1,space="xl","data-e2e-test-id":dataE2eTestId,...ariaAttributes}){let messageId=useId(),radioGroupRef=useRef(null),[isOverflowing,setIsOverflowing]=useState(!1),[isObserverDone,setIsObserverDone]=useState(!inline),[shouldLabelWrap,setShouldLabelWrap]=useState(!1);useEffect(()=>{let observer;return inline&&"undefined"!=typeof IntersectionObserver&&radioGroupRef&&radioGroupRef.current&&(observer=new IntersectionObserver(entries=>entries.forEach(entry=>{entry.isIntersecting||(setIsOverflowing(!0),setShouldLabelWrap(!0)),setIsObserverDone(!0)}),{root:radioGroupRef.current,threshold:1}),Object.entries(radioGroupRef.current.children).forEach(radio=>{let radioElement=radio[1];observer.observe(radioElement)})),()=>{observer&&observer.disconnect()}},[inline]);let validErrorMessages=errorMessages.filter(message=>message),messagesElm=(!!validErrorMessages.length||hint)&&React.createElement(Stack,{space:"xxs",id:messageId},!!validErrorMessages.length&&React.createElement(StyledTextContainer,{disabled:disabled},React.createElement(FormErrorMessages,{messages:validErrorMessages})),hint&&React.createElement(StyledTextContainer,{disabled:disabled},React.createElement(Text,{size:"s",color:"tertiary"},hint))),ariaDescribedBy=messagesElm?{"aria-describedby":messageId}:{},renderChild=child=>React.isValidElement(child)?React.cloneElement(child,{disabled:disabled||child.props.disabled}):null;return React.createElement(StyledFieldset,{disabled:disabled,"data-e2e-test-id":dataE2eTestId,"data-ds-id":"FormFieldGroup",isObserverDone:isObserverDone,...ariaAttributes,...ariaDescribedBy},React.createElement(ScreenReaderText,{as:"legend"},label),React.createElement(Stack,{space:"xs"},label&&!isLabelHidden&&React.createElement(StyledLabelContainer,{disabled:disabled},React.createElement(FormLabelText,{labelHint:labelHint,labelAs:labelAs},label)),inline&&!isOverflowing?React.createElement(InlineChildren,{ref:radioGroupRef},React.Children.map(flattenChildren(children),child=>child?React.createElement(FormChildren,{shouldLabelWrap:shouldLabelWrap,space:space},renderChild(child)):null)):React.Children.map(flattenChildren(children),renderChild),messagesElm))}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React from"react";import styled from"@emotion/styled";import{Icon}from"../../Icon/Icon";import{FormField}from"../FormField/FormField";import{Text}from"../../Typography/Text/Text";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";import{getInputTextStyles,getInputTextPlaceholder}from"../../../shared/mixins";let StyledContainer=styled("div",{target:"
|
|
1
|
+
import React from"react";import styled from"@emotion/styled";import{Icon}from"../../Icon/Icon";import{FormField}from"../FormField/FormField";import{Text}from"../../Typography/Text/Text";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";import{getInputTextStyles,getInputTextPlaceholder}from"../../../shared/mixins";let StyledContainer=styled("div",{target:"e16jtuij0",label:"StyledContainer"})(()=>({width:"100%",display:"flex",alignItems:"center",flexDirection:"row",position:"relative"})),StyledIconContainer=styled("div",{target:"e16jtuij1",label:"StyledIconContainer"})(({theme})=>({position:"absolute",right:theme.variables.size.spacing.xs})),StyledInput=styled("input",{target:"e16jtuij2",label:"StyledInput"})(({theme,privateProps,hasError,icon,readOnly,inputSize})=>({...getInputTextStyles({theme,size:inputSize,hasError,readOnly}),...getInputTextPlaceholder({theme}),...privateProps?.isTransparent?{backgroundColor:theme.values.color.background.transparent.default,borderColor:"transparent"}:{backgroundColor:theme.values.color.background.primary.default},...privateProps?.hideOutline&&{outline:"none"},"&.error":{borderColor:theme.values.color.border.error.default},"& svg":{pointerEvents:"none"},...icon&&{paddingRight:`calc(${theme.variables.size.spacing.s} + ${theme.variables.size.dimension.icon.m})`}}));export const InputRaw=React.forwardRef(({size="m",hasError=!1,type="text",icon,autoComplete="on",privateProps={},readOnly,...rest},ref)=>React.createElement(StyledContainer,null,React.createElement(StyledInput,{...rest,type:type,inputSize:size,ref:ref,autoComplete:autoComplete,hasError:hasError,privateProps:privateProps,icon:icon,readOnly:readOnly,"aria-invalid":hasError}),icon&&React.createElement(StyledIconContainer,null,React.createElement(Text,{as:"span",color:"tertiary"},React.createElement(Icon,{name:icon,size:"m",color:readOnly?"quaternary":void 0})))));export const Input=React.forwardRef(({size="m",placeholder,hasError=!1,type="text",icon,autoComplete="on",privateProps={},readOnly,disabled,label,labelHint,hideLabel,hint,errorMessages,"aria-describedby":ariaDescribedBy,"data-e2e-test-id":dataE2eTestId,...rest},ref)=>{let{id,ariaDescribedByProp}=useFormFieldMessageId({ariaDescribedBy,errorMessages,hint});return React.createElement(FormField,{"data-ds-id":"Input",disabled:disabled,"data-e2e-test-id":dataE2eTestId,hideLabel:hideLabel,label:label,labelHint:labelHint,hint:hint,errorMessages:errorMessages,messageId:id},React.createElement(InputRaw,{...rest,ref:ref,size:size,type:type,icon:icon,placeholder:readOnly?void 0:placeholder,hasError:hasError,disabled:disabled,autoComplete:autoComplete,privateProps:privateProps,readOnly:readOnly,...ariaDescribedByProp}))});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React,{useState,forwardRef}from"react";import styled from"@emotion/styled";import{FormField}from"../FormField/FormField";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";import{PasswordInputButton}from"./PasswordInputButton";let handleBorderColor=({theme,hasError,readOnly})=>hasError?theme.values.color.border.error.default:readOnly?theme.values.color.border.primary.disabled:theme.values.color.border.primary.default,StyledContainer=styled("div",{target:"
|
|
1
|
+
import React,{useState,forwardRef}from"react";import styled from"@emotion/styled";import{FormField}from"../FormField/FormField";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";import{PasswordInputButton}from"./PasswordInputButton";let handleBorderColor=({theme,hasError,readOnly})=>hasError?theme.values.color.border.error.default:readOnly?theme.values.color.border.primary.disabled:theme.values.color.border.primary.default,StyledContainer=styled("div",{target:"e1talrlh0",label:"StyledContainer"})(()=>({width:"100%",display:"flex",alignItems:"center",flexDirection:"row",position:"relative"})),StyledPasswordInput=styled("input",{target:"e1talrlh1",label:"StyledPasswordInput"})(({theme,hasError=!1,readOnly=!1})=>({fontFamily:theme.variables.fontFamily.lato,fontSize:theme.variables.size.font.m,lineHeight:theme.variables.size.lineHeight.xl,borderRadius:theme.variables.size.borderRadius.xs,borderWidth:"1px",borderStyle:"solid",width:"100%",padding:`calc(${theme.variables.size.spacing.xs} - 1px) ${theme.variables.size.spacing.s}`,paddingRight:theme.variables.size.spacing.xxl,boxSizing:"border-box",color:theme.values.color.text.secondary.default,borderColor:handleBorderColor({theme,hasError,readOnly}),backgroundColor:theme.values.color.background.primary.default,"&.error":{borderColor:theme.values.color.border.error.default},"&.has-icon":{paddingRight:theme.variables.size.spacing.xs+theme.variables.size.dimension.icon.m},"&::placeholder":{fontStyle:"italic",color:theme.values.color.text.tertiary.default,opacity:theme.variables.opacity.visible},"&:-ms-input-placeholder":{fontStyle:"italic",color:theme.values.color.text.tertiary.default},"&::-ms-input-placeholder":{fontStyle:"italic",color:theme.values.color.text.tertiary.default},...hasError&&{boxShadow:`0 0 0 1px inset ${theme.values.color.border.error.default}`}}));export const PasswordInputRaw=forwardRef(({placeholder,hasError=!1,onIconClick,readOnly,disabled,slotProps:{toggleVisibility:{ariaLabelShow,ariaLabelHide}},...rest},ref)=>{let[isPasswordVisible,setIsPasswordVisible]=useState(!1);return React.createElement(StyledContainer,null,React.createElement(StyledPasswordInput,{...rest,type:isPasswordVisible?"text":"password",placeholder:readOnly?void 0:placeholder,ref:ref,hasError:hasError,readOnly:readOnly,disabled:disabled,"aria-invalid":hasError}),React.createElement(PasswordInputButton,{hasError:hasError,disabled:disabled,onIconClick:onIconClick,isPasswordVisible:isPasswordVisible,readOnly:readOnly,ariaLabel:isPasswordVisible?ariaLabelHide:ariaLabelShow,onToggle:()=>setIsPasswordVisible(prev=>!prev)}))});export const PasswordInput=React.forwardRef(({placeholder="••••••••",hasError=!1,onIconClick,autoComplete="on",slotProps,disabled,label,labelHint,hideLabel,hint,errorMessages,"aria-describedby":ariaDescribedBy,"data-e2e-test-id":dataE2eTestId,...rest},ref)=>{let{id,ariaDescribedByProp}=useFormFieldMessageId({ariaDescribedBy,errorMessages,hint});return React.createElement(FormField,{"data-e2e-test-id":dataE2eTestId,"data-ds-id":"PasswordInput",disabled:disabled,label:label,labelHint:labelHint,hideLabel:hideLabel,hint:hint,errorMessages:errorMessages,messageId:id},React.createElement(PasswordInputRaw,{...rest,ref:ref,placeholder:placeholder,hasError:hasError,disabled:disabled,onIconClick:onIconClick,autoComplete:autoComplete,slotProps:slotProps,...ariaDescribedByProp}))});
|
|
@@ -3,8 +3,8 @@ import React from "react";
|
|
|
3
3
|
type PasswordInputButtonProps = {
|
|
4
4
|
onIconClick?: (e: React.MouseEvent) => void;
|
|
5
5
|
hasError: boolean;
|
|
6
|
-
disabled
|
|
7
|
-
readOnly
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
readOnly?: boolean;
|
|
8
8
|
ariaLabel: string;
|
|
9
9
|
isPasswordVisible: boolean;
|
|
10
10
|
onToggle: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React,{useId,useState}from"react";import styled from"@emotion/styled";import{Icon}from"../../Icon/Icon";import{ScreenReaderText}from"../../Utilities/ScreenReaderText/ScreenReaderText";let handleIconBorderColor=(theme,hasError)=>hasError?theme.values.color.icon.error.default:"transparent",handleIconLeftBorderColor=(theme,hasError)=>hasError?theme.values.color.border.error.default:theme.values.color.border.primary.default,handleClick=({e,disabled,onIconClick,onToggle})=>{disabled&&e.preventDefault(),onIconClick?.(e),onToggle()},StyledIconBtn=styled("button",{target:"
|
|
1
|
+
import React,{useId,useState}from"react";import styled from"@emotion/styled";import{Icon}from"../../Icon/Icon";import{ScreenReaderText}from"../../Utilities/ScreenReaderText/ScreenReaderText";let handleIconBorderColor=(theme,hasError)=>hasError?theme.values.color.icon.error.default:"transparent",handleIconLeftBorderColor=(theme,hasError)=>hasError?theme.values.color.border.error.default:theme.values.color.border.primary.default,handleClick=({e,disabled,onIconClick,onToggle})=>{disabled&&e.preventDefault(),onIconClick?.(e),onToggle()},StyledIconBtn=styled("button",{target:"eyjrml0",label:"StyledIconBtn"})(({theme,hasError=!1})=>({"&[type='button']":{appearance:"none",MozAppearance:"none",WebkitAppearance:"none"},position:"absolute",top:0,right:0,border:"1px solid",borderColor:handleIconBorderColor(theme,hasError),borderLeftColor:handleIconLeftBorderColor(theme,hasError),padding:`calc(${theme.variables.size.spacing.s} - 1px) ${theme.variables.size.spacing.s}`,borderRadius:theme.variables.size.borderRadius.xs,borderBottomLeftRadius:"0",borderTopLeftRadius:"0",color:theme.values.color.text.secondary.default,backgroundColor:"inherit",cursor:"pointer","&:hover":{backgroundColor:theme.values.color.background.transparent.hover,borderColor:theme.values.color.border.primary.hover},"&:active":{color:theme.values.color.text.primary.default,backgroundColor:theme.values.color.background.transparent.active,borderColor:theme.values.color.border.primary.active},"&:disabled":{backgroundColor:theme.values.color.background.transparent.default,borderLeftColor:theme.values.color.border.primary.disabled,pointerEvents:"none"},...hasError&&{boxShadow:`0 0 0 1px inset ${theme.values.color.border.error.default}`,"&:hover":{backgroundColor:theme.values.color.background.transparent.hover,borderColor:theme.values.color.border.error.default}},"& svg":{pointerEvents:"none"}}));export const PasswordInputButton=({hasError,disabled,onIconClick,readOnly,ariaLabel,isPasswordVisible,onToggle})=>{let[isButtonFocused,setIsButtonFocused]=useState(!1),screenReaderTextId=useId();return React.createElement(React.Fragment,null,React.createElement(ScreenReaderText,{id:screenReaderTextId},isButtonFocused?ariaLabel:""),React.createElement(StyledIconBtn,{onClick:e=>handleClick({e,disabled,onIconClick,onToggle}),hasError:hasError,onFocus:()=>setIsButtonFocused(!0),onBlur:()=>setIsButtonFocused(!1),disabled:readOnly||disabled,type:"button","aria-labelledby":screenReaderTextId},React.createElement(Icon,{name:isPasswordVisible?"eye":"eye-off",size:"s",color:readOnly?"quaternary":"tertiary"})))};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React 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{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";let StyledInputContainer=styled("div",{target:"
|
|
1
|
+
import React 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{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";let StyledInputContainer=styled("div",{target:"eb3g3qo0",label:"StyledInputContainer"})(({theme,vSize,hSize})=>({userSelect:"none",display:"flex",position:"relative",width:theme.variables.size.dimension.radio[hSize],height:`calc(${theme.variables.size.font[vSize]} * ${getTextLineHeight({size:vSize,theme})})`,boxSizing:"border-box",alignItems:"center"})),StyledRealInput=styled("input",{target:"eb3g3qo1",label:"StyledRealInput"})(({theme})=>({opacity:theme.variables.opacity.hidden,cursor:"pointer",position:"absolute",width:0,height:0})),StyledFakeInput=styled("span",{target:"eb3g3qo2",label:"StyledFakeInput"})(({theme,size})=>({boxSizing:"border-box",width:theme.variables.size.dimension.radio[size],height:theme.variables.size.dimension.radio[size],borderRadius:theme.variables.size.borderRadius.m,border:"2px solid",top:"50%",left:0,transform:"translate(0, -50%)",display:"flex",alignItems:"center",justifyContent:"center",position:"absolute",background:theme.values.color.background.primary.default,borderColor:theme.values.color.border.primary.default,"& div":{opacity:theme.variables.opacity.hidden,borderRadius:theme.variables.size.borderRadius.full,width:theme.variables.size.dimension.radioPoint[size],height:theme.variables.size.dimension.radioPoint[size],background:theme.values.color.border.accent.default},"input:checked + &":{borderColor:theme.values.color.border.accent.default,background:theme.values.color.background.primary.default,"& div":{opacity:theme.variables.opacity.visible}},"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:disabled + &":{pointerEvents:"none"}}));export const StyledRadioContainer=styled("div",{target:"eb3g3qo3",label:"StyledRadioContainer"})(({theme,isInteractable})=>({"&:hover":{...isInteractable&&{cursor:"pointer",[`input:not(:checked) + ${StyledFakeInput}`]:{borderColor:theme.values.color.border.primary.hover}},...!isInteractable&&{cursor:"not-allowed"}}}));export const RadioRaw=React.forwardRef(({label="",labelHint,size="m",labelSize="m",disabled,...rest},ref)=>React.createElement(StyledRadioContainer,{isInteractable:!disabled},React.createElement(Inline,{space:"xs",vAlignItems:"top",noWrap:!0},React.createElement(StyledInputContainer,{vSize:labelSize,hSize:size},React.createElement(StyledRealInput,{...rest,disabled:disabled,ref:ref,type:"radio"}),React.createElement(StyledFakeInput,{size:size},React.createElement("div",null))),label&&React.createElement("div",null,"string"==typeof label?React.createElement(Text,{size:labelSize},label):label,labelHint&&React.createElement(Text,{size:"s",color:"tertiary"},labelHint)))));export const Radio=React.forwardRef(({label="",labelHint,disabled=!1,size="m",hint,errorMessages,"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":"Radio",disabled:disabled,hint:hint,errorMessages:errorMessages,messageId:id},React.createElement(RadioRaw,{...rest,ref:ref,size:size,label:label,labelHint:labelHint,disabled:disabled,...ariaDescribedByProp}))});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React,{useMemo,useCallback}from"react";import styled from"@emotion/styled";import{useTheme}from"@emotion/react";import{FormField}from"../FormField/FormField";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";let StyledInput=styled("input",{target:"
|
|
1
|
+
import React,{useMemo,useCallback}from"react";import styled from"@emotion/styled";import{useTheme}from"@emotion/react";import{FormField}from"../FormField/FormField";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";let StyledInput=styled("input",{target:"e1vc6tql0",label:"StyledInput"})(({theme})=>{let resetStyles={WebkitAppearance:"none",appearance:"none"},thumbStyles={...resetStyles,backgroundColor:theme.values.color.rangeInput.background.thumb.default,boxShadow:theme.values.elevation[3],height:"20px",width:"20px",borderRadius:theme.variables.size.borderRadius.full,border:0};return{...resetStyles,height:"4px",borderRadius:theme.variables.size.borderRadius.xs,cursor:"pointer",width:"100%",margin:`${theme.variables.size.spacing.s} 0 ${theme.variables.size.spacing.m} 0`,"&:disabled":{cursor:"default"},"::-webkit-slider-thumb":thumbStyles,"::-moz-range-thumb":thumbStyles,"::-ms-thumb":thumbStyles}});export const RangeInput=React.forwardRef(({step=1,min=0,max=100,value=min,hasError=!1,onSlideStart,disabled,label,labelHint,hideLabel,errorMessages,hint,"data-e2e-test-id":dataE2eTestId,"aria-describedby":ariaDescribedBy,...rest},ref)=>{let theme=useTheme(),{id,ariaDescribedByProp}=useFormFieldMessageId({ariaDescribedBy,errorMessages,hint}),background=useMemo(()=>{let progress=(Number(value)-Number(min))/(Number(max)-Number(min))*100,accentBg=theme.values.color.background.accent.default,placeholderBg=theme.values.color.background.placeholder.default;return`linear-gradient(to right, ${accentBg} 0%, ${accentBg} ${progress}%, ${placeholderBg} ${progress}%, ${placeholderBg} 100%)`},[value,min,max,theme.name]),handleSlideStart=useCallback(e=>{onSlideStart&&onSlideStart(e)},[onSlideStart]);return React.createElement(FormField,{"data-e2e-test-id":dataE2eTestId,"data-ds-id":"RangeInput",disabled:disabled,label:label,hideLabel:hideLabel,labelHint:labelHint,hint:hint,errorMessages:errorMessages,messageId:id},React.createElement(StyledInput,{...rest,type:"range",style:{background},ref:ref,value:value,min:min,max:max,step:step,disabled:disabled,onMouseDown:handleSlideStart,onTouchStart:handleSlideStart,"aria-invalid":hasError,...ariaDescribedByProp}))});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React,{useRef}from"react";import styled from"@emotion/styled";import iconSizesMap from"../../../web-tokens/_icon_sizes_map.json";import{Icon}from"../../Icon/Icon";import{PictogramButton}from"../../PictogramButton/PictogramButton";import{InputRaw}from"../Input/Input";import{FormField}from"../FormField/FormField";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";let iconSizes=iconSizesMap.icons,StyledSearchInputContainer=styled("div",{target:"
|
|
1
|
+
import React,{useRef}from"react";import styled from"@emotion/styled";import{useIntl}from"../../../shared/intl/useIntl";import iconSizesMap from"../../../web-tokens/_icon_sizes_map.json";import{Icon}from"../../Icon/Icon";import{PictogramButton}from"../../PictogramButton/PictogramButton";import{InputRaw}from"../Input/Input";import{FormField}from"../FormField/FormField";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";let iconSizes=iconSizesMap.icons,StyledSearchInputContainer=styled("div",{target:"e1b1l7xz0",label:"StyledSearchInputContainer"})(({theme})=>({position:"relative",backgroundColor:theme.values.color.searchInput.background.default,borderRadius:theme.variables.size.borderRadius.xs,height:theme.variables.size.spacing.xl,width:"100%","& input":{backgroundColor:theme.values.color.background.transparent.default,paddingTop:theme.variables.size.spacing.xxs,paddingBottom:theme.variables.size.spacing.xxs,paddingLeft:`calc(${theme.variables.size.spacing.s} + ${iconSizes.s})`,paddingRight:theme.variables.size.spacing.xl,borderWidth:0,textOverflow:"ellipsis","&::placeholder":{color:theme.values.color.text.tertiary.default,fontStyle:"italic"}}})),IconsContainer=styled("div",{target:"e1b1l7xz1",label:"IconsContainer"})(({theme})=>({display:"flex",alignItems:"center",justifyContent:"space-between",position:"absolute",inset:`0 ${theme.variables.size.spacing.xs}`,"& > div":{lineHeight:0}}));export const SearchInput=({value,placeholder,autoComplete="on",readOnly,label,labelHint,hideLabel=!0,hint,errorMessages,"aria-describedby":ariaDescribedBy,"data-e2e-test-id":dataE2eTestId,onClear=()=>null,slotProps,...rest})=>{let inputRef=useRef(null),{formatMessage}=useIntl(),{id,ariaDescribedByProp}=useFormFieldMessageId({ariaDescribedBy,errorMessages,hint});return React.createElement(FormField,{"data-ds-id":"SearchInput","data-e2e-test-id":dataE2eTestId,label:label,labelHint:labelHint,hideLabel:hideLabel,hint:hint,errorMessages:errorMessages,messageId:id},React.createElement(StyledSearchInputContainer,null,React.createElement(InputRaw,{...rest,ref:inputRef,type:"text",size:"s",value:value,placeholder:readOnly?void 0:placeholder,autoComplete:autoComplete,readOnly:readOnly,...ariaDescribedByProp}),React.createElement(IconsContainer,null,React.createElement(Icon,{name:"search",size:"s",color:readOnly?"quaternary":"tertiary"}),!!value&&!readOnly&&React.createElement(PictogramButton,{icon:"x",size:"xs",color:"tertiary","aria-label":slotProps?.clearButton?.ariaLabel??formatMessage("SearchInput.ClearButton.AriaLabel"),onClick:e=>{e.preventDefault(),onClear(e),inputRef.current?.focus()}}))))};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { FormEvent, ChangeEvent, ReactNode, ReactElement } from "react";
|
|
2
|
-
import type { IconName } from "
|
|
2
|
+
import type { IconName } from "../../../index.js";
|
|
3
3
|
import type { FormFieldGroupProps } from "../../../components/Form/FormFieldGroup/FormFieldGroup";
|
|
4
4
|
import type { TooltipProps } from "../../../components/Tooltip/Tooltip";
|
|
5
5
|
import type { SlotProps } from "../../../shared/slotProps";
|
|
6
6
|
export type RenderOptionWrapperProps = {
|
|
7
7
|
option: ReactNode;
|
|
8
8
|
checked: boolean;
|
|
9
|
-
disabled
|
|
9
|
+
disabled?: boolean;
|
|
10
10
|
value: string;
|
|
11
11
|
};
|
|
12
12
|
export type SegmentedControlOption = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React,{Fragment}from"react";import styled from"@emotion/styled";import breakpoints from"../../../web-tokens/_breakpoints.json";import{FormFieldGroup}from"../FormFieldGroup/FormFieldGroup";import{SegmentedControlOption}from"./SegmentedControlOption";let StyledDivider=styled("div",{target:"
|
|
1
|
+
import React,{Fragment}from"react";import styled from"@emotion/styled";import breakpoints from"../../../web-tokens/_breakpoints.json";import{FormFieldGroup}from"../FormFieldGroup/FormFieldGroup";import{SegmentedControlOption}from"./SegmentedControlOption";let StyledDivider=styled("div",{target:"e1qdakvf0",label:"StyledDivider"})(({theme,isChecked,isDisabled,isPrevOptionChecked,isPrevOptionDisabled,justified})=>{let border=`1px solid ${theme.values.color.border.secondary.default}`,otherStyles={backgroundColor:theme.values.color.background.primary.default,...(isChecked||isPrevOptionChecked)&&{borderColor:theme.values.color.border.accent.default},...isDisabled&&isPrevOptionDisabled&&{opacity:theme.variables.opacity.disabled}},borderRightStyle={borderRight:border,...otherStyles};return justified?{[`@media (min-width: ${breakpoints.m.value}px)`]:{...borderRightStyle},[`@media (max-width: ${breakpoints.m.value}px)`]:{borderBottom:border,...otherStyles}}:borderRightStyle}),StyledContainer=styled("div",{target:"e1qdakvf1",label:"StyledContainer"})(({justified,options})=>{let baseStyle={display:"flex"};return justified?{...baseStyle,flexDirection:"column","& > *":{flex:`1 1 ${100/options.length}%`},[`& > ${StyledDivider}`]:{flex:"0 0 auto"},[`@media (min-width: ${breakpoints.m.value}px)`]:{flexDirection:"row"}}:baseStyle});export function SegmentedControl({options,value,justified,size="m",onChange,isLabelHidden=!0,renderOptionWrapper,...rest}){let isSingleOption=1===options.length,handleChange=evt=>{let target=evt.target;isSingleOption?onChange(target.checked?target.value:""):onChange(target.value)},optionElms=options.map(({value:optionValue,disabled,...otherProps},index)=>{let isChecked=value===optionValue,isPrevOptionChecked=options[index-1]?.value===value,isPrevOptionDisabled=options[index-1]?.disabled,dividerElm=React.createElement(StyledDivider,{isPrevOptionChecked:isPrevOptionChecked,isPrevOptionDisabled:isPrevOptionDisabled,isChecked:isChecked,isDisabled:disabled,justified:justified}),isRightDivider=index!==options.length-1&&isChecked,optionElm=React.createElement(React.Fragment,null,0!==index&&!isPrevOptionChecked&÷rElm,React.createElement(SegmentedControlOption,{value:optionValue,size:size,checked:isChecked,isResponsive:justified,disabled:disabled,inputType:isSingleOption?"checkbox":"radio",onChange:handleChange,...otherProps}),isRightDivider&÷rElm),wrappedOptionElm=renderOptionWrapper?renderOptionWrapper({option:optionElm,checked:isChecked,disabled,value:optionValue}):optionElm;return React.createElement(Fragment,{key:optionValue},wrappedOptionElm)});return React.createElement(FormFieldGroup,{"data-ds-id":"SegmentedControl",isLabelHidden:isLabelHidden,...rest},React.createElement(StyledContainer,{justified:justified,options:options},optionElms))}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React,{useRef}from"react";import styled from"@emotion/styled";import breakpoints from"../../../web-tokens/_breakpoints.json";import{Text}from"../../Typography/Text/Text";import{Icon}from"../../Icon/Icon";import{ScreenReaderText}from"../../Utilities/ScreenReaderText/ScreenReaderText";import{Tooltip}from"../../Tooltip/Tooltip";import{Inline}from"../../Inline/Inline";import{getPressedStyles}from"../../../shared/mixins";let StyledInput=styled("input",{target:"
|
|
1
|
+
import React,{useRef}from"react";import styled from"@emotion/styled";import breakpoints from"../../../web-tokens/_breakpoints.json";import{Text}from"../../Typography/Text/Text";import{Icon}from"../../Icon/Icon";import{ScreenReaderText}from"../../Utilities/ScreenReaderText/ScreenReaderText";import{Tooltip}from"../../Tooltip/Tooltip";import{Inline}from"../../Inline/Inline";import{getPressedStyles}from"../../../shared/mixins";let StyledInput=styled("input",{target:"eve0hq10",label:"StyledInput"})(({theme})=>({position:"absolute",height:1,width:1,margin:-1,overflow:"hidden",padding:0,opacity:theme.variables.opacity.hidden})),StyledLabel=styled(Text,{target:"eve0hq11",label:"StyledLabel"})(({theme,size})=>({..."s"===size&&{lineHeight:theme.variables.size.lineHeight.xs}})),StyledSublabel=styled(Text,{target:"eve0hq12",label:"StyledSublabel"})(({theme,isResponsive})=>{let baseStyle={textAlign:"center"};return isResponsive?{...baseStyle,[`@media (max-width: ${breakpoints.m.value}px)`]:{lineHeight:theme.variables.size.lineHeight.xs,textAlign:"right",marginLeft:theme.variables.size.spacing.m}}:baseStyle}),StyledIconContainer=styled("div",{target:"eve0hq13",label:"StyledIconContainer"})(),StyledContainer=styled("label",{target:"eve0hq14",label:"StyledContainer"})(({theme,size,checked,isResponsive,sublabel,iconOnly,displayAsOptionWithSublabel,disabled})=>{let borderStyle={"&:first-of-type":{borderTopLeftRadius:theme.variables.size.borderRadius.xs,borderBottomLeftRadius:theme.variables.size.borderRadius.xs,borderLeftStyle:"solid"},"&:last-of-type":{borderTopRightRadius:theme.variables.size.borderRadius.xs,borderBottomRightRadius:theme.variables.size.borderRadius.xs,borderRightStyle:"solid"}},basePaddingSize="s"===size?theme.variables.size.spacing.xs:theme.variables.size.spacing.s,basePadding=`calc(${basePaddingSize} - 1px)`,baseStyle={position:"relative",cursor:"pointer",backgroundColor:theme.values.color.background.primary.default,display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",border:`1px solid ${theme.values.color.border.secondary.default}`,borderLeftStyle:"none",borderRightStyle:"none",padding:(()=>{if(iconOnly)return"l"===size?`calc(${theme.variables.size.spacing.m} - 1px)`:basePadding;let horizontalPadding="s"===size?theme.variables.size.spacing.m:theme.variables.size.spacing.l;return`${basePadding} ${horizontalPadding}`})(),...!checked&&!disabled&&{"&:hover":{backgroundColor:theme.values.color.background.secondary.default}},...disabled&&{cursor:"not-allowed",opacity:theme.variables.opacity.disabled},...checked&&getPressedStyles({theme}),[`${StyledSublabel}, ${StyledLabel}, ${StyledIconContainer}`]:{color:theme.values.color.text.secondary.default,...checked&&{color:theme.values.color.text.accent.default}},[`&:has(${StyledInput}:focus-visible)`]:{outlineWidth:2,outlineStyle:"solid",outlineColor:"Highlight",outlineOffset:-1,"@media (-webkit-min-device-pixel-ratio:0)":{outlineColor:"-webkit-focus-ring-color",outlineStyle:"solid"}}};return isResponsive?{...baseStyle,[`@media (min-width: ${breakpoints.m.value}px)`]:{...borderStyle},[`@media (max-width: ${breakpoints.m.value}px)`]:{flexDirection:"row",justifyContent:sublabel||displayAsOptionWithSublabel?"space-between":"center",padding:theme.variables.size.spacing.m,borderTopStyle:"none",borderBottomStyle:"none",borderLeftStyle:"solid",borderRightStyle:"solid","&:first-of-type":{borderTopLeftRadius:theme.variables.size.borderRadius.xs,borderTopRightRadius:theme.variables.size.borderRadius.xs,borderTopStyle:"solid"},"&:last-of-type":{borderBottomLeftRadius:theme.variables.size.borderRadius.xs,borderBottomRightRadius:theme.variables.size.borderRadius.xs,borderBottomStyle:"solid"}}}:{...baseStyle,...borderStyle}});export function SegmentedControlOption({name,value="",checked,label="",sublabel,iconName,iconOnly,slotProps,tooltipContent,tooltipPlacement,tooltipPortalContainer,size,disabled=!1,isResponsive=!1,inputType="radio",displayAsOptionWithSublabel=!1,onChange,onClick,onBlur,onFocus,onTooltipVisibilityChange}){let containerRef=useRef(null),iconAriaLabel=iconOnly?label:void 0,iconAccessibleName=slotProps?.icon?.ariaLabel??iconAriaLabel,iconElm=iconName?React.createElement(StyledIconContainer,null,iconAccessibleName?React.createElement(Icon,{name:iconName,size:"s","aria-label":iconAccessibleName,role:"img"}):React.createElement(Icon,{name:iconName,size:"s"})):null,showIcon=!sublabel&&iconElm,labelElm=React.createElement(StyledLabel,{size:"l"===size?"m":"s",weight:"bold"},label),labelContainerElm=labelElm;showIcon&&(labelContainerElm=iconOnly?React.createElement(React.Fragment,null,iconElm,React.createElement(ScreenReaderText,null,label)):React.createElement(Inline,{space:"xs",noWrap:!0,vAlignItems:"center"},iconElm,labelElm));let sublabelElm=sublabel?React.createElement(StyledSublabel,{size:"s",isResponsive:isResponsive},sublabel):null;return React.createElement(React.Fragment,null,React.createElement(StyledContainer,{size:size,checked:checked,sublabel:sublabel,iconOnly:iconOnly,isResponsive:isResponsive,displayAsOptionWithSublabel:displayAsOptionWithSublabel,ref:containerRef,disabled:disabled,tabIndex:-1},React.createElement(StyledInput,{type:inputType,name:name,value:value,checked:checked,disabled:disabled,onChange:onChange,onClick:onClick,onBlur:onBlur,onFocus:onFocus,"aria-expanded":slotProps?.input?.ariaExpanded,"aria-controls":slotProps?.input?.ariaControls}),labelContainerElm,sublabelElm),tooltipContent&&React.createElement(Tooltip,{content:tooltipContent,externalTriggerRef:containerRef,onVisibilityChange:onTooltipVisibilityChange,placement:tooltipPlacement??"auto",portalContainer:tooltipPortalContainer}))}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import React from"react";import styled from"@emotion/styled";import{FormField}from"../FormField/FormField";import{SelectWithCustomTrigger}from"./SelectWithCustomTrigger";import{Icon}from"../../Icon/Icon";import{Inline}from"../../Inline/Inline";import{TextClamped}from"../../Typography/TextClamped/TextClamped";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";let StyledButton=styled("button",{target:"
|
|
1
|
+
import React from"react";import styled from"@emotion/styled";import{FormField}from"../FormField/FormField";import{SelectWithCustomTrigger}from"./SelectWithCustomTrigger";import{Icon}from"../../Icon/Icon";import{Inline}from"../../Inline/Inline";import{TextClamped}from"../../Typography/TextClamped/TextClamped";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";let StyledButton=styled("button",{target:"emffu2u0",label:"StyledButton"})(({theme,hasError,isPlaceholderVisible,readOnly,size})=>({'&[type="button"]':{appearance:"none",MozAppearance:"none",WebkitAppearance:"none"},display:"inline-block",margin:0,borderRadius:theme.variables.size.borderRadius.xs,backgroundColor:theme.values.color.background.primary.default,borderWidth:"1px",borderStyle:"solid",width:"100%",padding:`${"s"===size?`calc(${theme.variables.size.spacing.xxs} + 1px)`:`calc(${theme.variables.size.spacing.xs} - 1px)`} ${theme.variables.size.spacing.s}`,paddingRight:theme.variables.size.spacing.xs,boxSizing:"border-box",borderColor:theme.values.color.border.primary.default,...readOnly&&{borderColor:theme.values.color.border.primary.disabled},...isPlaceholderVisible&&{fontStyle:"italic"},...hasError&&{boxShadow:`0 0 0 1px inset ${theme.values.color.border.error.default}`,borderColor:theme.values.color.border.error.default}})),StyledTriggerIcon=styled(Icon,{target:"emffu2u1",label:"StyledTriggerIcon"})(()=>({pointerEvents:"none"}));function TriggerButton({triggerRef,disabled,isOpen,hasError,isPlaceholderVisible,role,"aria-expanded":ariaExpanded,"aria-controls":ariaControls,"aria-activedescendant":ariaActiveDescendant,"aria-describedby":ariaDescribedBy,"aria-label":ariaLabel,readOnly,size,onFocus,onBlur,children,...ariaAttributes}){return React.createElement(StyledButton,{type:"button",ref:triggerRef,disabled:disabled,hasError:hasError,isPlaceholderVisible:isPlaceholderVisible,...ariaAttributes,role:role,"aria-expanded":ariaExpanded,"aria-controls":ariaControls,"aria-activedescendant":ariaActiveDescendant,"aria-label":ariaLabel,"aria-invalid":hasError,"aria-describedby":ariaDescribedBy,readOnly:readOnly,size:size,onFocus:onFocus,onBlur:onBlur},React.createElement(Inline,{vAlignItems:"center",alignItems:"spaceBetween",space:"xxs",noWrap:!0},React.createElement(TextClamped,{color:isPlaceholderVisible?"tertiary":"primary",size:size},readOnly&&isPlaceholderVisible?null:children),React.createElement(StyledTriggerIcon,{size:size,name:isOpen?"chevron-up":"chevron-down",color:readOnly?"quaternary":"tertiary"})))}export function Select({options,name,value,placeholder,hasError,optionsListWidth,maxHeight,disabled=!1,portalContainer,readOnly=!1,excludeFromFormData,label,labelHint,hideLabel,hint,errorMessages,size="m","data-e2e-test-id":dataE2eTestId,"aria-describedby":ariaDescribedBy,onChange,onFocus,onBlur,...ariaAttributes}){let selectedOption=options?.find(option=>option.value===value),isPlaceholderVisible=!!placeholder&&!value,{id,ariaDescribedByProp}=useFormFieldMessageId({ariaDescribedBy,errorMessages,hint});return React.createElement(SelectWithCustomTrigger,{options:options,value:value,name:name,optionsListWidth:optionsListWidth,maxHeight:maxHeight,portalContainer:portalContainer,disabled:disabled,readOnly:readOnly,excludeFromFormData:excludeFromFormData,onChange:onChange,renderTrigger:({triggerRef,isOpen,role,"aria-expanded":ariaExpanded,"aria-controls":ariaControls,"aria-activedescendant":ariaActiveDescendant})=>React.createElement(FormField,{disabled:disabled,hideLabel:hideLabel,label:label,labelHint:labelHint,hint:hint,errorMessages:errorMessages,messageId:id,"data-e2e-test-id":dataE2eTestId,"data-ds-id":"Select"},React.createElement(TriggerButton,{hasError:hasError,isPlaceholderVisible:isPlaceholderVisible,size:size,triggerRef:triggerRef,isOpen:isOpen,disabled:disabled,role:role,"aria-expanded":ariaExpanded,"aria-controls":ariaControls,"aria-activedescendant":ariaActiveDescendant,"aria-label":label,...ariaAttributes,...ariaDescribedByProp,readOnly:readOnly,onFocus:onFocus,onBlur:onBlur},selectedOption?selectedOption.label:placeholder??""))})}
|