@telus-uds/components-base 1.65.0 → 1.67.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/CHANGELOG.md +22 -2
- package/lib/A11yInfoProvider/index.js +5 -20
- package/lib/A11yText/index.js +3 -17
- package/lib/ActivityIndicator/Spinner.js +2 -9
- package/lib/ActivityIndicator/Spinner.native.js +4 -27
- package/lib/ActivityIndicator/index.js +1 -13
- package/lib/ActivityIndicator/shared.js +0 -3
- package/lib/Autocomplete/Autocomplete.js +34 -85
- package/lib/Autocomplete/Loading.js +0 -10
- package/lib/Autocomplete/Suggestions.js +0 -11
- package/lib/Autocomplete/index.js +0 -3
- package/lib/BaseProvider/HydrationContext.js +4 -18
- package/lib/BaseProvider/index.js +0 -12
- package/lib/Box/Box.js +10 -35
- package/lib/Box/index.js +0 -3
- package/lib/Button/Button.js +4 -13
- package/lib/Button/ButtonBase.js +23 -55
- package/lib/Button/ButtonDropdown.js +7 -32
- package/lib/Button/ButtonGroup.js +15 -48
- package/lib/Button/ButtonLink.js +3 -17
- package/lib/Button/index.js +0 -5
- package/lib/Button/propTypes.js +0 -15
- package/lib/Card/Card.js +3 -14
- package/lib/Card/CardBase.js +5 -16
- package/lib/Card/PressableCardBase.js +7 -30
- package/lib/Card/index.js +0 -7
- package/lib/Carousel/Carousel.js +22 -115
- package/lib/Carousel/CarouselContext.js +0 -14
- package/lib/Carousel/CarouselFirstFocus/CarouselFirstFocus.js +6 -18
- package/lib/Carousel/CarouselItem/CarouselItem.js +5 -20
- package/lib/Carousel/CarouselItem/index.js +0 -3
- package/lib/Carousel/CarouselStepTracker/CarouselStepTracker.js +0 -9
- package/lib/Carousel/CarouselStepTracker/index.js +0 -3
- package/lib/Carousel/CarouselTabs/CarouselTabs.js +5 -15
- package/lib/Carousel/CarouselTabs/CarouselTabsPanel.js +7 -16
- package/lib/Carousel/CarouselTabs/CarouselTabsPanelItem.js +2 -22
- package/lib/Carousel/CarouselTabs/index.js +0 -3
- package/lib/Carousel/CarouselThumbnail.js +1 -16
- package/lib/Carousel/CarouselThumbnailNavigation.js +0 -15
- package/lib/Carousel/index.js +0 -5
- package/lib/Checkbox/Checkbox.js +5 -44
- package/lib/Checkbox/CheckboxButton.js +7 -33
- package/lib/Checkbox/CheckboxGroup.js +5 -37
- package/lib/Checkbox/CheckboxInput.js +1 -11
- package/lib/Checkbox/CheckboxInput.native.js +0 -2
- package/lib/Checkbox/index.js +0 -4
- package/lib/CheckboxCard/CheckboxCard.js +4 -37
- package/lib/CheckboxCard/index.js +0 -3
- package/lib/CheckboxCardGroup/CheckboxCardGroup.js +215 -0
- package/lib/CheckboxCardGroup/index.js +10 -0
- package/lib/Divider/Divider.js +13 -24
- package/lib/Divider/index.js +0 -3
- package/lib/ExpandCollapse/Accordion.js +1 -9
- package/lib/ExpandCollapse/Control.js +10 -32
- package/lib/ExpandCollapse/ExpandCollapse.js +3 -19
- package/lib/ExpandCollapse/Panel.js +13 -38
- package/lib/ExpandCollapse/index.js +0 -5
- package/lib/Feedback/Feedback.js +13 -30
- package/lib/Feedback/index.js +0 -3
- package/lib/Fieldset/Fieldset.js +6 -37
- package/lib/Fieldset/FieldsetContainer.js +1 -10
- package/lib/Fieldset/FieldsetContainer.native.js +0 -8
- package/lib/Fieldset/Legend.js +1 -10
- package/lib/Fieldset/Legend.native.js +1 -13
- package/lib/Fieldset/index.js +0 -3
- package/lib/FlexGrid/Col/Col.js +10 -53
- package/lib/FlexGrid/Col/index.js +0 -3
- package/lib/FlexGrid/FlexGrid.js +3 -34
- package/lib/FlexGrid/Row/Row.js +0 -38
- package/lib/FlexGrid/Row/index.js +0 -3
- package/lib/FlexGrid/helpers/index.js +0 -4
- package/lib/FlexGrid/index.js +0 -3
- package/lib/FlexGrid/providers/GutterContext.js +0 -4
- package/lib/HorizontalScroll/HorizontalScroll.js +17 -45
- package/lib/HorizontalScroll/HorizontalScrollButton.js +1 -17
- package/lib/HorizontalScroll/ScrollViewEnd.js +5 -13
- package/lib/HorizontalScroll/ScrollViewEnd.native.js +1 -10
- package/lib/HorizontalScroll/index.js +0 -7
- package/lib/HorizontalScroll/itemPositions.js +8 -19
- package/lib/Icon/Icon.js +4 -17
- package/lib/Icon/IconText.js +5 -25
- package/lib/Icon/index.js +0 -6
- package/lib/IconButton/IconButton.js +5 -37
- package/lib/IconButton/index.js +0 -3
- package/lib/InputLabel/InputLabel.js +4 -28
- package/lib/InputLabel/LabelContent.js +2 -8
- package/lib/InputLabel/LabelContent.native.js +0 -8
- package/lib/InputLabel/index.js +0 -3
- package/lib/InputSupports/InputSupports.js +0 -21
- package/lib/InputSupports/index.js +0 -3
- package/lib/InputSupports/useInputSupports.js +2 -6
- package/lib/Link/ChevronLink.js +7 -18
- package/lib/Link/InlinePressable.js +0 -10
- package/lib/Link/InlinePressable.native.js +5 -18
- package/lib/Link/Link.js +0 -8
- package/lib/Link/LinkBase.js +17 -47
- package/lib/Link/TextButton.js +3 -16
- package/lib/Link/index.js +0 -5
- package/lib/List/List.js +5 -21
- package/lib/List/ListItem.js +1 -11
- package/lib/List/ListItemBase.js +5 -34
- package/lib/List/ListItemContent.js +1 -14
- package/lib/List/ListItemMark.js +3 -23
- package/lib/List/PressableListItemBase.js +2 -28
- package/lib/List/index.js +0 -4
- package/lib/Listbox/GroupControl.js +0 -14
- package/lib/Listbox/Listbox.js +15 -40
- package/lib/Listbox/ListboxContext.js +0 -7
- package/lib/Listbox/ListboxGroup.js +7 -19
- package/lib/Listbox/ListboxItem.js +3 -17
- package/lib/Listbox/ListboxOverlay.js +4 -20
- package/lib/Listbox/PressableItem.js +3 -18
- package/lib/Listbox/index.js +0 -3
- package/lib/Modal/Modal.js +94 -45
- package/lib/Modal/ModalContent.js +184 -0
- package/lib/Modal/index.js +0 -3
- package/lib/MultiSelectFilter/ModalOverlay.js +1 -20
- package/lib/MultiSelectFilter/MultiSelectFilter.js +20 -69
- package/lib/MultiSelectFilter/index.js +0 -3
- package/lib/Notification/Notification.js +11 -38
- package/lib/Notification/index.js +0 -3
- package/lib/Pagination/PageButton.js +2 -22
- package/lib/Pagination/Pagination.js +21 -42
- package/lib/Pagination/SideButton.js +0 -24
- package/lib/Pagination/index.js +0 -3
- package/lib/Pagination/usePagination.js +4 -9
- package/lib/Progress/Progress.js +3 -17
- package/lib/Progress/ProgressBar.js +3 -25
- package/lib/Progress/ProgressBarBackground.js +0 -12
- package/lib/Progress/index.js +0 -4
- package/lib/QuickLinks/QuickLinks.js +1 -18
- package/lib/QuickLinks/QuickLinksCard.js +1 -11
- package/lib/QuickLinks/QuickLinksItem.js +3 -17
- package/lib/QuickLinks/index.js +0 -4
- package/lib/QuickLinksFeature/QuickLinksFeature.js +3 -20
- package/lib/QuickLinksFeature/QuickLinksFeatureItem.js +7 -30
- package/lib/QuickLinksFeature/index.js +0 -4
- package/lib/Radio/Radio.js +5 -39
- package/lib/Radio/RadioButton.js +7 -26
- package/lib/Radio/RadioGroup.js +6 -39
- package/lib/Radio/RadioInput.js +1 -11
- package/lib/Radio/RadioInput.native.js +0 -2
- package/lib/Radio/index.js +0 -4
- package/lib/RadioCard/RadioCard.js +5 -38
- package/lib/RadioCard/RadioCardGroup.js +7 -38
- package/lib/RadioCard/index.js +0 -4
- package/lib/Responsive/Responsive.js +1 -14
- package/lib/Responsive/index.js +0 -3
- package/lib/Search/Search.js +22 -45
- package/lib/Search/index.js +0 -3
- package/lib/Select/Group.js +0 -8
- package/lib/Select/Group.native.js +0 -6
- package/lib/Select/Item.js +0 -7
- package/lib/Select/Item.native.js +0 -2
- package/lib/Select/Picker.js +0 -8
- package/lib/Select/Picker.native.js +6 -22
- package/lib/Select/Select.js +9 -52
- package/lib/Select/index.js +0 -5
- package/lib/SideNav/Item.js +5 -29
- package/lib/SideNav/ItemContent.js +1 -14
- package/lib/SideNav/ItemsGroup.js +9 -31
- package/lib/SideNav/SideNav.js +9 -33
- package/lib/SideNav/index.js +0 -2
- package/lib/Skeleton/Skeleton.js +10 -42
- package/lib/Skeleton/index.js +0 -3
- package/lib/Skeleton/skeletonWebAnimation.js +0 -2
- package/lib/Skeleton/useSkeletonNativeAnimation.js +1 -9
- package/lib/SkipLink/SkipLink.js +7 -27
- package/lib/SkipLink/index.js +0 -3
- package/lib/Spacer/Spacer.js +4 -20
- package/lib/Spacer/index.js +0 -3
- package/lib/StackView/StackView.js +3 -21
- package/lib/StackView/StackWrap.js +11 -21
- package/lib/StackView/StackWrap.native.js +0 -3
- package/lib/StackView/StackWrapBox.js +5 -21
- package/lib/StackView/StackWrapGap.js +1 -14
- package/lib/StackView/common.js +0 -6
- package/lib/StackView/getStackedContent.js +10 -21
- package/lib/StackView/index.js +0 -5
- package/lib/StepTracker/Step.js +3 -27
- package/lib/StepTracker/StepTracker.js +5 -32
- package/lib/StepTracker/index.js +0 -3
- package/lib/Tabs/Tabs.js +7 -30
- package/lib/Tabs/TabsItem.js +13 -38
- package/lib/Tabs/index.js +0 -3
- package/lib/Tags/Tags.js +9 -42
- package/lib/Tags/index.js +0 -3
- package/lib/TextInput/TextArea.js +11 -20
- package/lib/TextInput/TextInput.js +7 -16
- package/lib/TextInput/TextInputBase.js +106 -69
- package/lib/TextInput/index.js +0 -3
- package/lib/TextInput/propTypes.js +4 -7
- package/lib/ThemeProvider/ThemeProvider.js +10 -18
- package/lib/ThemeProvider/index.js +0 -9
- package/lib/ThemeProvider/useSetTheme.js +6 -9
- package/lib/ThemeProvider/useTheme.js +2 -7
- package/lib/ThemeProvider/useThemeTokens.js +1 -9
- package/lib/ThemeProvider/utils/index.js +0 -4
- package/lib/ThemeProvider/utils/styles.js +14 -35
- package/lib/ThemeProvider/utils/theme-tokens.js +15 -43
- package/lib/Timeline/Timeline.js +11 -27
- package/lib/Timeline/index.js +0 -3
- package/lib/ToggleSwitch/ToggleSwitch.js +12 -43
- package/lib/ToggleSwitch/ToggleSwitchGroup.js +4 -38
- package/lib/ToggleSwitch/index.js +0 -3
- package/lib/Tooltip/Backdrop.js +4 -11
- package/lib/Tooltip/Backdrop.native.js +1 -14
- package/lib/Tooltip/Tooltip.js +9 -37
- package/lib/Tooltip/Tooltip.native.js +14 -45
- package/lib/Tooltip/getTooltipPosition.js +26 -31
- package/lib/Tooltip/index.js +0 -5
- package/lib/Tooltip/shared.js +0 -10
- package/lib/TooltipButton/TooltipButton.js +5 -20
- package/lib/TooltipButton/index.js +0 -3
- package/lib/Typography/Typography.js +15 -38
- package/lib/Typography/index.js +0 -3
- package/lib/Validator/Validator.js +10 -58
- package/lib/Validator/index.js +0 -3
- package/lib/ViewportProvider/ViewportProvider.js +1 -13
- package/lib/ViewportProvider/index.js +0 -5
- package/lib/ViewportProvider/useViewport.js +0 -4
- package/lib/ViewportProvider/useViewportListener.js +3 -12
- package/lib/index.js +8 -71
- package/lib/utils/BaseView/BaseView.js +3 -17
- package/lib/utils/BaseView/BaseView.native.js +0 -3
- package/lib/utils/BaseView/index.js +0 -3
- package/lib/utils/a11y/index.js +0 -4
- package/lib/utils/a11y/semantics.js +14 -32
- package/lib/utils/a11y/textSize.js +1 -8
- package/lib/utils/animation/index.js +0 -2
- package/lib/utils/animation/useVerticalExpandAnimation.js +5 -18
- package/lib/utils/children.js +16 -28
- package/lib/utils/containUniqueFields.js +2 -5
- package/lib/utils/floating-ui/index.js +0 -1
- package/lib/utils/floating-ui/index.native.js +0 -1
- package/lib/utils/hasOwnProperty.js +0 -1
- package/lib/utils/htmlAttrs.js +2 -4
- package/lib/utils/index.js +0 -31
- package/lib/utils/info/index.js +0 -4
- package/lib/utils/info/platform/index.js +0 -4
- package/lib/utils/info/versions.js +0 -3
- package/lib/utils/input.js +12 -24
- package/lib/utils/pressability.js +7 -21
- package/lib/utils/props/a11yProps.js +19 -25
- package/lib/utils/props/clickProps.js +0 -4
- package/lib/utils/props/componentPropType.js +0 -14
- package/lib/utils/props/copyPropTypes.js +0 -4
- package/lib/utils/props/getPropSelector.js +11 -12
- package/lib/utils/props/handlerProps.js +2 -23
- package/lib/utils/props/hrefAttrsProp.js +0 -4
- package/lib/utils/props/index.js +0 -22
- package/lib/utils/props/inputSupportsProps.js +0 -9
- package/lib/utils/props/linkProps.js +2 -12
- package/lib/utils/props/paddingProp.js +0 -3
- package/lib/utils/props/pressProps.js +2 -8
- package/lib/utils/props/rectProp.js +0 -3
- package/lib/utils/props/responsiveProps.js +1 -5
- package/lib/utils/props/selectSystemProps.js +4 -6
- package/lib/utils/props/spacingProps.js +3 -10
- package/lib/utils/props/textInputProps.js +11 -31
- package/lib/utils/props/textProps.js +6 -11
- package/lib/utils/props/tokens.js +7 -26
- package/lib/utils/props/variantProp.js +0 -3
- package/lib/utils/props/viewProps.js +0 -5
- package/lib/utils/ssr.js +13 -33
- package/lib/utils/useCopy.js +3 -6
- package/lib/utils/useHash.js +5 -10
- package/lib/utils/useHash.native.js +0 -2
- package/lib/utils/useOverlaidPosition.js +6 -29
- package/lib/utils/useResponsiveProp.js +6 -13
- package/lib/utils/useSafeLayoutEffect.js +5 -10
- package/lib/utils/useScrollBlocking.js +3 -11
- package/lib/utils/useScrollBlocking.native.js +0 -2
- package/lib/utils/useSpacingScale.js +5 -8
- package/lib/utils/useUniqueId.js +0 -4
- package/lib/utils/withLinkRouter.js +13 -18
- package/lib-module/A11yInfoProvider/index.js +5 -9
- package/lib-module/A11yText/index.js +3 -4
- package/lib-module/ActivityIndicator/Spinner.js +2 -2
- package/lib-module/ActivityIndicator/Spinner.native.js +4 -6
- package/lib-module/ActivityIndicator/index.js +1 -5
- package/lib-module/ActivityIndicator/shared.js +2 -1
- package/lib-module/Autocomplete/Autocomplete.js +34 -59
- package/lib-module/Autocomplete/Loading.js +0 -2
- package/lib-module/BaseProvider/HydrationContext.js +4 -7
- package/lib-module/BaseProvider/index.js +0 -3
- package/lib-module/Box/Box.js +10 -24
- package/lib-module/Button/Button.js +4 -2
- package/lib-module/Button/ButtonBase.js +23 -35
- package/lib-module/Button/ButtonDropdown.js +7 -16
- package/lib-module/Button/ButtonGroup.js +15 -32
- package/lib-module/Button/ButtonLink.js +3 -2
- package/lib-module/Button/propTypes.js +0 -7
- package/lib-module/Card/Card.js +3 -2
- package/lib-module/Card/CardBase.js +5 -4
- package/lib-module/Card/PressableCardBase.js +7 -11
- package/lib-module/Carousel/Carousel.js +22 -60
- package/lib-module/Carousel/CarouselContext.js +0 -5
- package/lib-module/Carousel/CarouselFirstFocus/CarouselFirstFocus.js +7 -5
- package/lib-module/Carousel/CarouselItem/CarouselItem.js +5 -11
- package/lib-module/Carousel/CarouselStepTracker/CarouselStepTracker.js +0 -2
- package/lib-module/Carousel/CarouselTabs/CarouselTabs.js +3 -4
- package/lib-module/Carousel/CarouselTabs/CarouselTabsPanel.js +7 -6
- package/lib-module/Carousel/CarouselTabs/CarouselTabsPanelItem.js +2 -10
- package/lib-module/Carousel/CarouselThumbnail.js +1 -7
- package/lib-module/Carousel/CarouselThumbnailNavigation.js +0 -2
- package/lib-module/Checkbox/Checkbox.js +5 -23
- package/lib-module/Checkbox/CheckboxButton.js +7 -17
- package/lib-module/Checkbox/CheckboxGroup.js +5 -23
- package/lib-module/Checkbox/CheckboxInput.js +1 -3
- package/lib-module/Checkbox/CheckboxInput.native.js +0 -1
- package/lib-module/CheckboxCard/CheckboxCard.js +4 -21
- package/lib-module/CheckboxCardGroup/CheckboxCardGroup.js +205 -0
- package/lib-module/CheckboxCardGroup/index.js +2 -0
- package/lib-module/Divider/Divider.js +13 -11
- package/lib-module/ExpandCollapse/Accordion.js +1 -1
- package/lib-module/ExpandCollapse/Control.js +10 -17
- package/lib-module/ExpandCollapse/ExpandCollapse.js +3 -9
- package/lib-module/ExpandCollapse/Panel.js +13 -23
- package/lib-module/Feedback/Feedback.js +13 -16
- package/lib-module/Fieldset/Fieldset.js +6 -25
- package/lib-module/Fieldset/FieldsetContainer.js +1 -1
- package/lib-module/Fieldset/FieldsetContainer.native.js +0 -1
- package/lib-module/Fieldset/Legend.js +1 -1
- package/lib-module/Fieldset/Legend.native.js +1 -1
- package/lib-module/FlexGrid/Col/Col.js +10 -37
- package/lib-module/FlexGrid/FlexGrid.js +3 -17
- package/lib-module/FlexGrid/Row/Row.js +0 -25
- package/lib-module/FlexGrid/helpers/index.js +0 -3
- package/lib-module/HorizontalScroll/HorizontalScroll.js +17 -27
- package/lib-module/HorizontalScroll/HorizontalScrollButton.js +1 -3
- package/lib-module/HorizontalScroll/ScrollViewEnd.js +5 -4
- package/lib-module/HorizontalScroll/ScrollViewEnd.native.js +0 -1
- package/lib-module/HorizontalScroll/itemPositions.js +11 -10
- package/lib-module/Icon/Icon.js +4 -8
- package/lib-module/Icon/IconText.js +6 -17
- package/lib-module/IconButton/IconButton.js +7 -20
- package/lib-module/InputLabel/InputLabel.js +4 -13
- package/lib-module/InputLabel/LabelContent.js +2 -1
- package/lib-module/InputLabel/LabelContent.native.js +0 -1
- package/lib-module/InputSupports/InputSupports.js +0 -9
- package/lib-module/InputSupports/useInputSupports.js +2 -4
- package/lib-module/Link/ChevronLink.js +7 -7
- package/lib-module/Link/InlinePressable.js +0 -2
- package/lib-module/Link/InlinePressable.native.js +4 -12
- package/lib-module/Link/LinkBase.js +17 -25
- package/lib-module/Link/TextButton.js +3 -5
- package/lib-module/List/List.js +5 -9
- package/lib-module/List/ListItem.js +1 -1
- package/lib-module/List/ListItemBase.js +5 -17
- package/lib-module/List/ListItemContent.js +1 -4
- package/lib-module/List/ListItemMark.js +3 -16
- package/lib-module/List/PressableListItemBase.js +2 -6
- package/lib-module/Listbox/GroupControl.js +0 -2
- package/lib-module/Listbox/Listbox.js +15 -23
- package/lib-module/Listbox/ListboxContext.js +0 -2
- package/lib-module/Listbox/ListboxGroup.js +6 -4
- package/lib-module/Listbox/ListboxItem.js +2 -1
- package/lib-module/Listbox/ListboxOverlay.js +3 -4
- package/lib-module/Listbox/PressableItem.js +2 -7
- package/lib-module/Modal/Modal.js +94 -25
- package/lib-module/Modal/ModalContent.js +175 -0
- package/lib-module/MultiSelectFilter/ModalOverlay.js +1 -4
- package/lib-module/MultiSelectFilter/MultiSelectFilter.js +20 -42
- package/lib-module/Notification/Notification.js +11 -22
- package/lib-module/Pagination/PageButton.js +2 -6
- package/lib-module/Pagination/Pagination.js +21 -21
- package/lib-module/Pagination/SideButton.js +3 -8
- package/lib-module/Pagination/usePagination.js +4 -8
- package/lib-module/Progress/Progress.js +3 -7
- package/lib-module/Progress/ProgressBar.js +3 -11
- package/lib-module/Progress/ProgressBarBackground.js +0 -2
- package/lib-module/QuickLinks/QuickLinks.js +1 -6
- package/lib-module/QuickLinks/QuickLinksCard.js +1 -3
- package/lib-module/QuickLinks/QuickLinksItem.js +3 -2
- package/lib-module/QuickLinksFeature/QuickLinksFeature.js +5 -9
- package/lib-module/QuickLinksFeature/QuickLinksFeatureItem.js +9 -13
- package/lib-module/Radio/Radio.js +5 -22
- package/lib-module/Radio/RadioButton.js +8 -10
- package/lib-module/Radio/RadioGroup.js +6 -25
- package/lib-module/Radio/RadioInput.js +1 -3
- package/lib-module/Radio/RadioInput.native.js +0 -1
- package/lib-module/RadioCard/RadioCard.js +5 -21
- package/lib-module/RadioCard/RadioCardGroup.js +7 -25
- package/lib-module/Responsive/Responsive.js +1 -6
- package/lib-module/Search/Search.js +22 -31
- package/lib-module/Select/Group.js +0 -3
- package/lib-module/Select/Group.native.js +0 -3
- package/lib-module/Select/Item.js +0 -3
- package/lib-module/Select/Item.native.js +0 -1
- package/lib-module/Select/Picker.native.js +8 -10
- package/lib-module/Select/Select.js +10 -35
- package/lib-module/SideNav/Item.js +5 -16
- package/lib-module/SideNav/ItemContent.js +1 -2
- package/lib-module/SideNav/ItemsGroup.js +9 -19
- package/lib-module/SideNav/SideNav.js +9 -22
- package/lib-module/Skeleton/Skeleton.js +10 -25
- package/lib-module/Skeleton/skeletonWebAnimation.js +0 -1
- package/lib-module/Skeleton/useSkeletonNativeAnimation.js +1 -3
- package/lib-module/SkipLink/SkipLink.js +7 -9
- package/lib-module/Spacer/Spacer.js +4 -7
- package/lib-module/StackView/StackView.js +3 -7
- package/lib-module/StackView/StackWrap.js +13 -13
- package/lib-module/StackView/StackWrap.native.js +2 -1
- package/lib-module/StackView/StackWrapBox.js +5 -8
- package/lib-module/StackView/StackWrapGap.js +1 -1
- package/lib-module/StackView/getStackedContent.js +10 -10
- package/lib-module/StepTracker/Step.js +3 -14
- package/lib-module/StepTracker/StepTracker.js +5 -13
- package/lib-module/Tabs/Tabs.js +7 -16
- package/lib-module/Tabs/TabsItem.js +13 -16
- package/lib-module/Tags/Tags.js +9 -26
- package/lib-module/TextInput/TextArea.js +11 -8
- package/lib-module/TextInput/TextInput.js +7 -5
- package/lib-module/TextInput/TextInputBase.js +107 -51
- package/lib-module/TextInput/propTypes.js +7 -6
- package/lib-module/ThemeProvider/ThemeProvider.js +10 -9
- package/lib-module/ThemeProvider/useSetTheme.js +6 -7
- package/lib-module/ThemeProvider/useTheme.js +2 -5
- package/lib-module/ThemeProvider/useThemeTokens.js +1 -2
- package/lib-module/ThemeProvider/utils/styles.js +15 -27
- package/lib-module/ThemeProvider/utils/theme-tokens.js +15 -20
- package/lib-module/Timeline/Timeline.js +11 -17
- package/lib-module/ToggleSwitch/ToggleSwitch.js +13 -26
- package/lib-module/ToggleSwitch/ToggleSwitchGroup.js +4 -23
- package/lib-module/Tooltip/Backdrop.js +4 -7
- package/lib-module/Tooltip/Backdrop.native.js +1 -4
- package/lib-module/Tooltip/Tooltip.js +9 -18
- package/lib-module/Tooltip/Tooltip.native.js +14 -23
- package/lib-module/Tooltip/getTooltipPosition.js +26 -30
- package/lib-module/Tooltip/shared.js +0 -6
- package/lib-module/TooltipButton/TooltipButton.js +5 -8
- package/lib-module/Typography/Typography.js +14 -22
- package/lib-module/Validator/Validator.js +10 -42
- package/lib-module/ViewportProvider/ViewportProvider.js +1 -3
- package/lib-module/ViewportProvider/useViewportListener.js +6 -8
- package/lib-module/index.js +1 -0
- package/lib-module/utils/BaseView/BaseView.js +3 -4
- package/lib-module/utils/BaseView/BaseView.native.js +0 -1
- package/lib-module/utils/a11y/semantics.js +14 -27
- package/lib-module/utils/a11y/textSize.js +1 -2
- package/lib-module/utils/animation/useVerticalExpandAnimation.js +8 -11
- package/lib-module/utils/children.js +17 -19
- package/lib-module/utils/containUniqueFields.js +2 -4
- package/lib-module/utils/htmlAttrs.js +2 -1
- package/lib-module/utils/info/index.js +2 -1
- package/lib-module/utils/info/platform/index.js +4 -1
- package/lib-module/utils/info/versions.js +2 -1
- package/lib-module/utils/input.js +11 -19
- package/lib-module/utils/pressability.js +8 -7
- package/lib-module/utils/props/a11yProps.js +22 -20
- package/lib-module/utils/props/clickProps.js +0 -1
- package/lib-module/utils/props/componentPropType.js +0 -13
- package/lib-module/utils/props/getPropSelector.js +12 -8
- package/lib-module/utils/props/handlerProps.js +2 -19
- package/lib-module/utils/props/hrefAttrsProp.js +2 -2
- package/lib-module/utils/props/inputSupportsProps.js +0 -6
- package/lib-module/utils/props/linkProps.js +2 -3
- package/lib-module/utils/props/pressProps.js +2 -2
- package/lib-module/utils/props/responsiveProps.js +1 -3
- package/lib-module/utils/props/selectSystemProps.js +4 -5
- package/lib-module/utils/props/spacingProps.js +4 -3
- package/lib-module/utils/props/textInputProps.js +14 -27
- package/lib-module/utils/props/textProps.js +9 -7
- package/lib-module/utils/props/tokens.js +10 -13
- package/lib-module/utils/props/variantProp.js +1 -1
- package/lib-module/utils/props/viewProps.js +0 -1
- package/lib-module/utils/ssr.js +14 -18
- package/lib-module/utils/useCopy.js +3 -5
- package/lib-module/utils/useHash.js +5 -9
- package/lib-module/utils/useHash.native.js +0 -1
- package/lib-module/utils/useOverlaidPosition.js +6 -25
- package/lib-module/utils/useResponsiveProp.js +6 -7
- package/lib-module/utils/useSafeLayoutEffect.js +5 -7
- package/lib-module/utils/useScrollBlocking.js +3 -10
- package/lib-module/utils/useSpacingScale.js +4 -4
- package/lib-module/utils/useUniqueId.js +0 -2
- package/lib-module/utils/withLinkRouter.js +13 -10
- package/package.json +2 -2
- package/src/CheckboxCardGroup/CheckboxCardGroup.jsx +230 -0
- package/src/CheckboxCardGroup/index.js +3 -0
- package/src/Modal/Modal.jsx +98 -5
- package/src/Modal/ModalContent.jsx +171 -0
- package/src/TextInput/TextInputBase.jsx +67 -12
- package/src/TextInput/propTypes.js +4 -0
- package/src/index.js +1 -0
- package/src/utils/props/textInputProps.js +1 -0
|
@@ -61,11 +61,9 @@ const ToggleSwitchGroup = /*#__PURE__*/forwardRef((_ref, ref) => {
|
|
|
61
61
|
});
|
|
62
62
|
const itemA11yRole = selectedProps.accessibilityRole === 'radiogroup' ? 'radio' : 'switch';
|
|
63
63
|
const uniqueFields = ['id', 'label'];
|
|
64
|
-
|
|
65
64
|
if (!containUniqueFields(items, uniqueFields)) {
|
|
66
65
|
throw new Error(`ToggleSwitchGroup items must have unique ${uniqueFields.join(', ')}`);
|
|
67
66
|
}
|
|
68
|
-
|
|
69
67
|
const toggleSwitches = items.map((_ref2, index) => {
|
|
70
68
|
let {
|
|
71
69
|
label,
|
|
@@ -77,12 +75,10 @@ const ToggleSwitchGroup = /*#__PURE__*/forwardRef((_ref, ref) => {
|
|
|
77
75
|
...itemRest
|
|
78
76
|
} = _ref2;
|
|
79
77
|
const isSelected = currentValues.includes(id);
|
|
80
|
-
|
|
81
78
|
const handleChange = (newCheckedState, event) => {
|
|
82
79
|
if (typeof itemOnChange === 'function') itemOnChange(newCheckedState, event);
|
|
83
80
|
toggleOneValue(id, event);
|
|
84
81
|
};
|
|
85
|
-
|
|
86
82
|
const itemA11y = {
|
|
87
83
|
accessibilityState: {
|
|
88
84
|
checked: isSelected
|
|
@@ -124,56 +120,49 @@ const ToggleSwitchGroup = /*#__PURE__*/forwardRef((_ref, ref) => {
|
|
|
124
120
|
});
|
|
125
121
|
});
|
|
126
122
|
ToggleSwitchGroup.displayName = 'ToggleSwitchGroup';
|
|
127
|
-
ToggleSwitchGroup.propTypes = {
|
|
128
|
-
|
|
123
|
+
ToggleSwitchGroup.propTypes = {
|
|
124
|
+
...selectedSystemPropTypes,
|
|
129
125
|
/**
|
|
130
126
|
* Whether the English or French copy will be used (e.g. for accessibility labels).
|
|
131
127
|
*/
|
|
132
128
|
copy: PropTypes.oneOf(['en', 'fr']),
|
|
133
129
|
tokens: getTokensPropType('ToggleSwitchGroup'),
|
|
134
130
|
variant: variantProp.propType,
|
|
135
|
-
|
|
136
131
|
/**
|
|
137
132
|
* The maximum number of items a user may select at once. Defaults to 1 and behaves
|
|
138
133
|
* like radio buttons. To have no limit and allow any number of selections, pass `null`.
|
|
139
134
|
*/
|
|
140
135
|
maxValues: PropTypes.number,
|
|
141
|
-
|
|
142
136
|
/**
|
|
143
137
|
* The options a user may select
|
|
144
138
|
*/
|
|
145
|
-
items: PropTypes.arrayOf(PropTypes.shape({
|
|
146
|
-
|
|
139
|
+
items: PropTypes.arrayOf(PropTypes.shape({
|
|
140
|
+
...selectedItemPropTypes,
|
|
147
141
|
/**
|
|
148
142
|
* The text displayed to the user on the label.
|
|
149
143
|
*/
|
|
150
144
|
label: PropTypes.string.isRequired,
|
|
151
|
-
|
|
152
145
|
/**
|
|
153
146
|
* An optional accessibility label may be passed to each ToggleSwitch
|
|
154
147
|
* and will be applied as normal for a React Native accessibilityLabel prop.
|
|
155
148
|
*/
|
|
156
149
|
accessibilityLabel: PropTypes.string,
|
|
157
|
-
|
|
158
150
|
/**
|
|
159
151
|
* An optional unique string may be provided to identify this option,
|
|
160
152
|
* which will be used in code and passed to any onChange function.
|
|
161
153
|
* If not provided, the label is used.
|
|
162
154
|
*/
|
|
163
155
|
id: PropTypes.string,
|
|
164
|
-
|
|
165
156
|
/**
|
|
166
157
|
* An optional ref for one individual ToggleSwitch in the ToggleSwitchGroup
|
|
167
158
|
*/
|
|
168
159
|
ref: ABBPropTypes.ref()
|
|
169
160
|
})),
|
|
170
|
-
|
|
171
161
|
/**
|
|
172
162
|
* If provided, this function is called when the current selection is changed
|
|
173
163
|
* and is passed an array of the `id`s of all currently selected `items`.
|
|
174
164
|
*/
|
|
175
165
|
onChange: PropTypes.func,
|
|
176
|
-
|
|
177
166
|
/**
|
|
178
167
|
* If the selected item(s) in the toggle switch group are to be controlled externally by
|
|
179
168
|
* a parent component, pass an array of strings as well as an `onChange` handler.
|
|
@@ -181,44 +170,36 @@ ToggleSwitchGroup.propTypes = { ...selectedSystemPropTypes,
|
|
|
181
170
|
* expects its state to be handled via `onChange` and so doesn't handle it itself.
|
|
182
171
|
*/
|
|
183
172
|
values: PropTypes.arrayOf(PropTypes.string),
|
|
184
|
-
|
|
185
173
|
/**
|
|
186
174
|
* If `values` is not passed, making the ToggleSwitchGroup an "uncontrolled" component
|
|
187
175
|
* managing its own selected state, a default set of selections may be provided.
|
|
188
176
|
* Changing the `initialValues` does not change the user's selections.
|
|
189
177
|
*/
|
|
190
178
|
initialValues: PropTypes.arrayOf(PropTypes.string),
|
|
191
|
-
|
|
192
179
|
/**
|
|
193
180
|
* Optional additional text giving more detail to help a user make a choice.
|
|
194
181
|
*/
|
|
195
182
|
hint: PropTypes.string,
|
|
196
|
-
|
|
197
183
|
/**
|
|
198
184
|
* Position of the hint relative to label. Use `below` to display a larger hint below the label.
|
|
199
185
|
*/
|
|
200
186
|
hintPosition: PropTypes.oneOf(['inline', 'below']),
|
|
201
|
-
|
|
202
187
|
/**
|
|
203
188
|
* Optional tooltip text content to include alongside the legend and hint.
|
|
204
189
|
*/
|
|
205
190
|
tooltip: PropTypes.string,
|
|
206
|
-
|
|
207
191
|
/**
|
|
208
192
|
* If provided, a Feedback element is rendered containing this text.
|
|
209
193
|
*/
|
|
210
194
|
feedback: PropTypes.string,
|
|
211
|
-
|
|
212
195
|
/**
|
|
213
196
|
* Main text used to describe this group, used in Fieldset's Legend element.
|
|
214
197
|
*/
|
|
215
198
|
legend: PropTypes.string,
|
|
216
|
-
|
|
217
199
|
/**
|
|
218
200
|
* Toggle switch token overrides.
|
|
219
201
|
*/
|
|
220
202
|
toggleSwitchTokens: getTokensPropType('ToggleSwitch'),
|
|
221
|
-
|
|
222
203
|
/**
|
|
223
204
|
* Current validation status of the group, passed to the feedback element if there is one.
|
|
224
205
|
*/
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { useEffect, useState } from 'react';
|
|
2
2
|
import ReactDOM from 'react-dom';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
|
-
|
|
5
4
|
function createPortalNode(nodeId) {
|
|
6
5
|
const node = document.createElement('div');
|
|
7
|
-
node.id = nodeId;
|
|
6
|
+
node.id = nodeId;
|
|
7
|
+
|
|
8
|
+
// we're mimicking React Native's Modal component, except for using an `absolute` position
|
|
8
9
|
// this way the backdrop stays in place when scrolling the window - that's why we need to
|
|
9
10
|
// position it at the scroll position when rendering
|
|
10
|
-
|
|
11
11
|
node.style.cssText = `
|
|
12
12
|
position: absolute;
|
|
13
13
|
top: ${window.scrollY}px;
|
|
@@ -20,17 +20,15 @@ function createPortalNode(nodeId) {
|
|
|
20
20
|
document.body.appendChild(node);
|
|
21
21
|
return node;
|
|
22
22
|
}
|
|
23
|
-
|
|
24
23
|
function removePortalNode(nodeId) {
|
|
25
24
|
const node = document.getElementById(nodeId);
|
|
26
25
|
node.parentElement.removeChild(node);
|
|
27
26
|
}
|
|
27
|
+
|
|
28
28
|
/**
|
|
29
29
|
* The Web version of Backdrop utilizes React Portal for overlaying page content, so it is
|
|
30
30
|
* dependent on ReactDOM. Tooltip's closing is handled by the onBlur callback of the control.
|
|
31
31
|
*/
|
|
32
|
-
|
|
33
|
-
|
|
34
32
|
function Backdrop(_ref) {
|
|
35
33
|
let {
|
|
36
34
|
children
|
|
@@ -46,7 +44,6 @@ function Backdrop(_ref) {
|
|
|
46
44
|
}, []);
|
|
47
45
|
return portalNode ? /*#__PURE__*/ReactDOM.createPortal(children, portalNode) : null;
|
|
48
46
|
}
|
|
49
|
-
|
|
50
47
|
Backdrop.propTypes = {
|
|
51
48
|
children: PropTypes.node
|
|
52
49
|
};
|
|
@@ -4,15 +4,14 @@ import Modal from "react-native-web/dist/exports/Modal";
|
|
|
4
4
|
import StyleSheet from "react-native-web/dist/exports/StyleSheet";
|
|
5
5
|
import View from "react-native-web/dist/exports/View";
|
|
6
6
|
import PropTypes from 'prop-types';
|
|
7
|
+
|
|
7
8
|
/**
|
|
8
9
|
* The Native version of Backdrop utilizes React Native's Modal component for overlaying
|
|
9
10
|
* the app's content, since this is the only reliable to do it. The only drawback of this
|
|
10
11
|
* approach is that a press on the Backdrop will actually stop the press event from propagating,
|
|
11
12
|
* i.e. anything rendered beneath the Backdrop can't be pressed until the Backdrop is closed.
|
|
12
13
|
*/
|
|
13
|
-
|
|
14
14
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
15
|
-
|
|
16
15
|
function Backdrop(_ref) {
|
|
17
16
|
let {
|
|
18
17
|
onPress,
|
|
@@ -29,7 +28,6 @@ function Backdrop(_ref) {
|
|
|
29
28
|
})
|
|
30
29
|
});
|
|
31
30
|
}
|
|
32
|
-
|
|
33
31
|
export default Backdrop;
|
|
34
32
|
Backdrop.propTypes = {
|
|
35
33
|
onPress: PropTypes.func,
|
|
@@ -39,6 +37,5 @@ const staticStyles = StyleSheet.create({
|
|
|
39
37
|
backdrop: {
|
|
40
38
|
flexBasis: '100%',
|
|
41
39
|
backgroundColor: 'rgba(255, 255, 255, 0.5)' // to visually mark that the content beneath is not pressable
|
|
42
|
-
|
|
43
40
|
}
|
|
44
41
|
});
|
|
@@ -14,7 +14,6 @@ import dictionary from './dictionary';
|
|
|
14
14
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
15
15
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
16
16
|
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps]);
|
|
17
|
-
|
|
18
17
|
const selectTooltipStyles = _ref => {
|
|
19
18
|
let {
|
|
20
19
|
backgroundColor,
|
|
@@ -33,7 +32,6 @@ const selectTooltipStyles = _ref => {
|
|
|
33
32
|
borderRadius
|
|
34
33
|
};
|
|
35
34
|
};
|
|
36
|
-
|
|
37
35
|
const selectTooltipShadowStyles = _ref2 => {
|
|
38
36
|
let {
|
|
39
37
|
shadow,
|
|
@@ -44,7 +42,6 @@ const selectTooltipShadowStyles = _ref2 => {
|
|
|
44
42
|
...applyShadowToken(shadow)
|
|
45
43
|
};
|
|
46
44
|
};
|
|
47
|
-
|
|
48
45
|
const selectMobileTooltipPositionStyles = _ref3 => {
|
|
49
46
|
let {
|
|
50
47
|
top,
|
|
@@ -57,7 +54,6 @@ const selectMobileTooltipPositionStyles = _ref3 => {
|
|
|
57
54
|
position
|
|
58
55
|
};
|
|
59
56
|
};
|
|
60
|
-
|
|
61
57
|
const selectMobileArrowStyles = (_ref4, _ref5) => {
|
|
62
58
|
let {
|
|
63
59
|
backgroundColor,
|
|
@@ -93,13 +89,12 @@ const selectMobileArrowStyles = (_ref4, _ref5) => {
|
|
|
93
89
|
[staticSide]: '-4px'
|
|
94
90
|
};
|
|
95
91
|
};
|
|
96
|
-
|
|
97
92
|
const selectTextStyles = tokens => applyTextStyles(selectTokens('Typography', tokens));
|
|
98
|
-
|
|
99
93
|
const defaultControl = (pressableState, variant) => /*#__PURE__*/_jsx(TooltipButton, {
|
|
100
94
|
pressableState: pressableState,
|
|
101
95
|
variant: variant
|
|
102
96
|
});
|
|
97
|
+
|
|
103
98
|
/**
|
|
104
99
|
* Tooltip provides a descriptive and detailed explanation or instructions. It can be used next to an input label
|
|
105
100
|
* to help a user fill it in, or as a standalone component.
|
|
@@ -115,8 +110,6 @@ const defaultControl = (pressableState, variant) => /*#__PURE__*/_jsx(TooltipBut
|
|
|
115
110
|
* - You may use one when the information is useful only to a small percentage of users (ie. tech savvy people wouldn't need this info).
|
|
116
111
|
* - Tooltips may also be useful when vertical space is an issue.
|
|
117
112
|
*/
|
|
118
|
-
|
|
119
|
-
|
|
120
113
|
const Tooltip = /*#__PURE__*/forwardRef((_ref6, ref) => {
|
|
121
114
|
let {
|
|
122
115
|
children,
|
|
@@ -140,8 +133,9 @@ const Tooltip = /*#__PURE__*/forwardRef((_ref6, ref) => {
|
|
|
140
133
|
right: 'right',
|
|
141
134
|
below: 'bottom',
|
|
142
135
|
left: 'left'
|
|
143
|
-
};
|
|
136
|
+
};
|
|
144
137
|
|
|
138
|
+
// "AutoPlacement" can't be used with "flip"
|
|
145
139
|
const additionalMiddleware = position !== 'auto' ? autoPlacement : flip;
|
|
146
140
|
const {
|
|
147
141
|
x,
|
|
@@ -164,14 +158,11 @@ const Tooltip = /*#__PURE__*/forwardRef((_ref6, ref) => {
|
|
|
164
158
|
copy
|
|
165
159
|
});
|
|
166
160
|
const themeTokens = useThemeTokens('Tooltip', tokens, variant);
|
|
167
|
-
|
|
168
161
|
const toggleIsOpen = () => {
|
|
169
162
|
onPress();
|
|
170
163
|
setIsOpen(!isOpen);
|
|
171
164
|
};
|
|
172
|
-
|
|
173
165
|
const close = () => setIsOpen(false);
|
|
174
|
-
|
|
175
166
|
const getPressableState = _ref7 => {
|
|
176
167
|
let {
|
|
177
168
|
pressed,
|
|
@@ -184,7 +175,6 @@ const Tooltip = /*#__PURE__*/forwardRef((_ref6, ref) => {
|
|
|
184
175
|
focus: focused
|
|
185
176
|
};
|
|
186
177
|
};
|
|
187
|
-
|
|
188
178
|
const onTooltipLayout = _ref8 => {
|
|
189
179
|
let {
|
|
190
180
|
nativeEvent: {
|
|
@@ -194,7 +184,6 @@ const Tooltip = /*#__PURE__*/forwardRef((_ref6, ref) => {
|
|
|
194
184
|
}
|
|
195
185
|
}
|
|
196
186
|
} = _ref8;
|
|
197
|
-
|
|
198
187
|
if (tooltipDimensions === null || tooltipDimensions.width !== width || tooltipDimensions.height !== height) {
|
|
199
188
|
setTooltipDimensions({
|
|
200
189
|
width: Platform.select({
|
|
@@ -206,7 +195,6 @@ const Tooltip = /*#__PURE__*/forwardRef((_ref6, ref) => {
|
|
|
206
195
|
});
|
|
207
196
|
}
|
|
208
197
|
};
|
|
209
|
-
|
|
210
198
|
useEffect(() => {
|
|
211
199
|
if (!isOpen) {
|
|
212
200
|
setTooltipDimensions(null);
|
|
@@ -244,7 +232,8 @@ const Tooltip = /*#__PURE__*/forwardRef((_ref6, ref) => {
|
|
|
244
232
|
children: typeof control === 'function' ? pressableState => control(getPressableState(pressableState), variant) : control
|
|
245
233
|
}), isOpen && /*#__PURE__*/_jsxs(View, {
|
|
246
234
|
ref: floating,
|
|
247
|
-
style: [selectTooltipShadowStyles(themeTokens), staticStyles.tooltip,
|
|
235
|
+
style: [selectTooltipShadowStyles(themeTokens), staticStyles.tooltip,
|
|
236
|
+
// applied separately so that it doesn't cover the arrow
|
|
248
237
|
selectMobileTooltipPositionStyles({
|
|
249
238
|
position: strategy,
|
|
250
239
|
top: y ?? 0,
|
|
@@ -253,7 +242,8 @@ const Tooltip = /*#__PURE__*/forwardRef((_ref6, ref) => {
|
|
|
253
242
|
onLayout: onTooltipLayout,
|
|
254
243
|
accessibilityRole: "alert",
|
|
255
244
|
children: [/*#__PURE__*/_jsx(View, {
|
|
256
|
-
style: [staticStyles.arrow, selectMobileArrowStyles(themeTokens, {
|
|
245
|
+
style: [staticStyles.arrow, selectMobileArrowStyles(themeTokens, {
|
|
246
|
+
...arrowData,
|
|
257
247
|
placement
|
|
258
248
|
})],
|
|
259
249
|
ref: arrowRef
|
|
@@ -268,7 +258,8 @@ const Tooltip = /*#__PURE__*/forwardRef((_ref6, ref) => {
|
|
|
268
258
|
});
|
|
269
259
|
});
|
|
270
260
|
Tooltip.displayName = 'Tooltip';
|
|
271
|
-
Tooltip.propTypes = {
|
|
261
|
+
Tooltip.propTypes = {
|
|
262
|
+
...selectedSystemPropTypes,
|
|
272
263
|
...propTypes
|
|
273
264
|
};
|
|
274
265
|
export default Tooltip;
|
|
@@ -16,7 +16,6 @@ import dictionary from './dictionary';
|
|
|
16
16
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
17
17
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
18
18
|
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps]);
|
|
19
|
-
|
|
20
19
|
const selectTooltipStyles = _ref => {
|
|
21
20
|
let {
|
|
22
21
|
backgroundColor,
|
|
@@ -35,7 +34,6 @@ const selectTooltipStyles = _ref => {
|
|
|
35
34
|
borderRadius
|
|
36
35
|
};
|
|
37
36
|
};
|
|
38
|
-
|
|
39
37
|
const selectTooltipShadowStyles = _ref2 => {
|
|
40
38
|
let {
|
|
41
39
|
shadow,
|
|
@@ -46,7 +44,6 @@ const selectTooltipShadowStyles = _ref2 => {
|
|
|
46
44
|
...applyShadowToken(shadow)
|
|
47
45
|
};
|
|
48
46
|
};
|
|
49
|
-
|
|
50
47
|
const selectTooltipPositionStyles = _ref3 => {
|
|
51
48
|
let {
|
|
52
49
|
top,
|
|
@@ -59,7 +56,6 @@ const selectTooltipPositionStyles = _ref3 => {
|
|
|
59
56
|
width
|
|
60
57
|
};
|
|
61
58
|
};
|
|
62
|
-
|
|
63
59
|
const selectArrowStyles = (_ref4, _ref5) => {
|
|
64
60
|
let {
|
|
65
61
|
backgroundColor,
|
|
@@ -73,13 +69,15 @@ const selectArrowStyles = (_ref4, _ref5) => {
|
|
|
73
69
|
height: tooltipHeight
|
|
74
70
|
} = _ref5;
|
|
75
71
|
// the arrow width is actually a diagonal of the rectangle that we'll use as a tip
|
|
76
|
-
const rectangleSide = Math.sqrt(arrowWidth * arrowWidth / 2);
|
|
77
|
-
// so we use the rectangle size as basis
|
|
72
|
+
const rectangleSide = Math.sqrt(arrowWidth * arrowWidth / 2);
|
|
78
73
|
|
|
74
|
+
// position the arrow at the side and center of the tooltip - this happens before rotation
|
|
75
|
+
// so we use the rectangle size as basis
|
|
79
76
|
const verticalOffset = -1 * rectangleSide / 2;
|
|
80
|
-
const horizontalOffset = rectangleSide / 2;
|
|
81
|
-
// calculate the pixel values
|
|
77
|
+
const horizontalOffset = rectangleSide / 2;
|
|
82
78
|
|
|
79
|
+
// percentage-based absolute positioning doesn't act well on native, so we have to
|
|
80
|
+
// calculate the pixel values
|
|
83
81
|
const directionalStyles = {
|
|
84
82
|
above: {
|
|
85
83
|
bottom: verticalOffset,
|
|
@@ -120,13 +118,12 @@ const selectArrowStyles = (_ref4, _ref5) => {
|
|
|
120
118
|
...directionalStyles[position]
|
|
121
119
|
};
|
|
122
120
|
};
|
|
123
|
-
|
|
124
121
|
const selectTextStyles = tokens => applyTextStyles(selectTokens('Typography', tokens));
|
|
125
|
-
|
|
126
122
|
const defaultControl = (pressableState, variant) => /*#__PURE__*/_jsx(TooltipButton, {
|
|
127
123
|
pressableState: pressableState,
|
|
128
124
|
variant: variant
|
|
129
125
|
});
|
|
126
|
+
|
|
130
127
|
/**
|
|
131
128
|
* Tooltip provides a descriptive and detailed explanation or instructions. It can be used next to an input label
|
|
132
129
|
* to help a user fill it in, or as a standalone component.
|
|
@@ -142,8 +139,6 @@ const defaultControl = (pressableState, variant) => /*#__PURE__*/_jsx(TooltipBut
|
|
|
142
139
|
* - You may use one when the information is useful only to a small percentage of users (ie. tech savvy people wouldn't need this info).
|
|
143
140
|
* - Tooltips may also be useful when vertical space is an issue.
|
|
144
141
|
*/
|
|
145
|
-
|
|
146
|
-
|
|
147
142
|
const Tooltip = /*#__PURE__*/forwardRef((_ref6, ref) => {
|
|
148
143
|
let {
|
|
149
144
|
children,
|
|
@@ -181,14 +176,11 @@ const Tooltip = /*#__PURE__*/forwardRef((_ref6, ref) => {
|
|
|
181
176
|
});
|
|
182
177
|
return () => subscription === null || subscription === void 0 ? void 0 : subscription.remove();
|
|
183
178
|
});
|
|
184
|
-
|
|
185
179
|
const toggleIsOpen = () => {
|
|
186
180
|
onPress();
|
|
187
181
|
setIsOpen(!isOpen);
|
|
188
182
|
};
|
|
189
|
-
|
|
190
183
|
const close = () => setIsOpen(false);
|
|
191
|
-
|
|
192
184
|
const getPressableState = _ref8 => {
|
|
193
185
|
let {
|
|
194
186
|
pressed,
|
|
@@ -201,7 +193,6 @@ const Tooltip = /*#__PURE__*/forwardRef((_ref6, ref) => {
|
|
|
201
193
|
focus: focused
|
|
202
194
|
};
|
|
203
195
|
};
|
|
204
|
-
|
|
205
196
|
const onTooltipLayout = _ref9 => {
|
|
206
197
|
let {
|
|
207
198
|
nativeEvent: {
|
|
@@ -211,7 +202,6 @@ const Tooltip = /*#__PURE__*/forwardRef((_ref6, ref) => {
|
|
|
211
202
|
}
|
|
212
203
|
}
|
|
213
204
|
} = _ref9;
|
|
214
|
-
|
|
215
205
|
if (tooltipDimensions === null || tooltipDimensions.width !== width || tooltipDimensions.height !== height) {
|
|
216
206
|
setTooltipDimensions({
|
|
217
207
|
width: Platform.select({
|
|
@@ -223,7 +213,6 @@ const Tooltip = /*#__PURE__*/forwardRef((_ref6, ref) => {
|
|
|
223
213
|
});
|
|
224
214
|
}
|
|
225
215
|
};
|
|
226
|
-
|
|
227
216
|
useEffect(() => {
|
|
228
217
|
if (isOpen) {
|
|
229
218
|
controlRef.current.measureInWindow((x, y, width, height) => {
|
|
@@ -247,19 +236,18 @@ const Tooltip = /*#__PURE__*/forwardRef((_ref6, ref) => {
|
|
|
247
236
|
if (tooltipPosition !== null && !(tooltipPosition !== null && tooltipPosition !== void 0 && tooltipPosition.isNormalized) || !isOpen || controlLayout === null || tooltipDimensions == null) {
|
|
248
237
|
return;
|
|
249
238
|
}
|
|
250
|
-
|
|
251
239
|
const updatedPosition = getTooltipPosition(position, {
|
|
252
240
|
controlLayout,
|
|
253
241
|
tooltipDimensions,
|
|
254
242
|
windowDimensions,
|
|
255
243
|
arrowWidth,
|
|
256
244
|
arrowOffset
|
|
257
|
-
});
|
|
245
|
+
});
|
|
258
246
|
|
|
247
|
+
// avoid ending up in an infinite normalization loop
|
|
259
248
|
if (tooltipPosition !== null && tooltipPosition !== void 0 && tooltipPosition.isNormalized && updatedPosition.isNormalized) {
|
|
260
249
|
return;
|
|
261
250
|
}
|
|
262
|
-
|
|
263
251
|
setTooltipPosition(updatedPosition);
|
|
264
252
|
}, [isOpen, position, tooltipDimensions, controlLayout, windowDimensions, arrowWidth, arrowOffset, tooltipPosition]);
|
|
265
253
|
const control = children !== undefined ? children : defaultControl;
|
|
@@ -295,9 +283,11 @@ const Tooltip = /*#__PURE__*/forwardRef((_ref6, ref) => {
|
|
|
295
283
|
onPress: close,
|
|
296
284
|
children: /*#__PURE__*/_jsxs(View, {
|
|
297
285
|
ref: ref,
|
|
298
|
-
style: [staticStyles.tooltip, selectTooltipShadowStyles(themeTokens),
|
|
286
|
+
style: [staticStyles.tooltip, selectTooltipShadowStyles(themeTokens),
|
|
287
|
+
// applied separately so that it doesn't cover the arrow
|
|
299
288
|
tooltipPosition && selectTooltipPositionStyles(tooltipPosition), (tooltipPosition === null || (tooltipPosition === null || tooltipPosition === void 0 ? void 0 : tooltipPosition.isNormalized)) && staticStyles.tooltipHidden // visually hide the tooltip until we have a final measurement
|
|
300
289
|
],
|
|
290
|
+
|
|
301
291
|
onLayout: onTooltipLayout,
|
|
302
292
|
accessibilityRole: "alert",
|
|
303
293
|
children: [/*#__PURE__*/_jsx(View, {
|
|
@@ -314,7 +304,8 @@ const Tooltip = /*#__PURE__*/forwardRef((_ref6, ref) => {
|
|
|
314
304
|
});
|
|
315
305
|
});
|
|
316
306
|
Tooltip.displayName = 'NativeTooltip';
|
|
317
|
-
Tooltip.propTypes = {
|
|
307
|
+
Tooltip.propTypes = {
|
|
308
|
+
...selectedSystemPropTypes,
|
|
318
309
|
...propTypes
|
|
319
310
|
};
|
|
320
311
|
export default Tooltip;
|
|
@@ -6,48 +6,42 @@ function normalizePosition(position) {
|
|
|
6
6
|
top,
|
|
7
7
|
width,
|
|
8
8
|
...rest
|
|
9
|
-
} = position;
|
|
9
|
+
} = position;
|
|
10
10
|
|
|
11
|
+
// adjust the coordinates so that it fits within the window
|
|
11
12
|
const normalized = {
|
|
12
13
|
left: Math.max(0, left),
|
|
13
14
|
right: Math.max(0, right),
|
|
14
15
|
top: Math.max(0, top),
|
|
15
16
|
bottom // since it's ok the make the document grow downwards - no need to normalize here
|
|
16
|
-
|
|
17
17
|
};
|
|
18
18
|
|
|
19
|
-
const getAbsoluteDiff = (value1, value2) => Math.abs(Math.abs(value1) - Math.abs(value2));
|
|
20
|
-
|
|
19
|
+
const getAbsoluteDiff = (value1, value2) => Math.abs(Math.abs(value1) - Math.abs(value2));
|
|
21
20
|
|
|
21
|
+
// adjust the width by whatever has been subtracted from left or right
|
|
22
22
|
normalized.width = width - Math.abs(getAbsoluteDiff(left, normalized.left) - getAbsoluteDiff(right, normalized.right));
|
|
23
|
-
|
|
24
23
|
if (normalized.top !== top) {
|
|
25
24
|
normalized.bottom += normalized.top - top;
|
|
26
25
|
}
|
|
27
|
-
|
|
28
26
|
const isNormalized = normalized.right !== right || normalized.left !== left || normalized.top !== top;
|
|
29
|
-
return {
|
|
27
|
+
return {
|
|
28
|
+
...normalized,
|
|
30
29
|
...rest,
|
|
31
30
|
isNormalized
|
|
32
31
|
};
|
|
33
32
|
}
|
|
34
|
-
|
|
35
33
|
function invertPosition(position) {
|
|
36
34
|
switch (position) {
|
|
37
35
|
case 'above':
|
|
38
36
|
return 'below';
|
|
39
|
-
|
|
40
37
|
case 'below':
|
|
41
38
|
return 'above';
|
|
42
|
-
|
|
43
39
|
case 'left':
|
|
44
40
|
return 'right';
|
|
45
|
-
|
|
46
41
|
default:
|
|
47
42
|
return 'left';
|
|
48
43
|
}
|
|
49
44
|
}
|
|
50
|
-
|
|
51
45
|
function findRectByPosition(position, rectsArray) {
|
|
52
46
|
return rectsArray.find(_ref => {
|
|
53
47
|
let {
|
|
@@ -56,6 +50,7 @@ function findRectByPosition(position, rectsArray) {
|
|
|
56
50
|
return rectPosition === position;
|
|
57
51
|
});
|
|
58
52
|
}
|
|
53
|
+
|
|
59
54
|
/**
|
|
60
55
|
* Used for absolute positioning of the tooltip. Since the tooltip is always centered relatively
|
|
61
56
|
* to the control (button) and we have a limited set of positions, an easy and consistent way
|
|
@@ -64,8 +59,6 @@ function findRectByPosition(position, rectsArray) {
|
|
|
64
59
|
* before it is shown, which makes it account for the width being limiting in styles, custom font
|
|
65
60
|
* rendering, etc.
|
|
66
61
|
*/
|
|
67
|
-
|
|
68
|
-
|
|
69
62
|
function getTooltipPosition(position, _ref2) {
|
|
70
63
|
let {
|
|
71
64
|
controlLayout,
|
|
@@ -96,8 +89,9 @@ function getTooltipPosition(position, _ref2) {
|
|
|
96
89
|
const verticalBounds = {
|
|
97
90
|
top: controlY,
|
|
98
91
|
bottom: windowHeight - (controlY + controlHeight / 2 + tooltipHeight / 2)
|
|
99
|
-
};
|
|
92
|
+
};
|
|
100
93
|
|
|
94
|
+
// calculate absolute coordinates for each of the potential positions (relative to window)
|
|
101
95
|
const boundingRects = [{
|
|
102
96
|
position: 'above',
|
|
103
97
|
...horizontalBounds,
|
|
@@ -121,42 +115,44 @@ function getTooltipPosition(position, _ref2) {
|
|
|
121
115
|
}].map(rect => {
|
|
122
116
|
// an absolute value representing how much of the tooltip is overflowing the window on each side
|
|
123
117
|
const windowOverflow = Math.abs(Math.min(rect.top, 0) - Math.min(rect.left, 0) - Math.min(rect.right, 0) - Math.min(rect.bottom, 0));
|
|
124
|
-
return {
|
|
118
|
+
return {
|
|
119
|
+
...rect,
|
|
125
120
|
...tooltipDimensions,
|
|
126
121
|
overflow: windowOverflow,
|
|
127
122
|
isNormalized: false
|
|
128
123
|
};
|
|
129
|
-
});
|
|
124
|
+
});
|
|
130
125
|
|
|
126
|
+
// the 'position' prop overrides the automatic positioning
|
|
131
127
|
if (position !== 'auto') {
|
|
132
|
-
let rect = findRectByPosition(position, boundingRects);
|
|
128
|
+
let rect = findRectByPosition(position, boundingRects);
|
|
133
129
|
|
|
130
|
+
// check if the suggested 'position' fits in window
|
|
134
131
|
if (rect.overflow === 0) {
|
|
135
132
|
return rect;
|
|
136
|
-
}
|
|
137
|
-
|
|
133
|
+
}
|
|
138
134
|
|
|
135
|
+
// otherwise try the inverted position (e.g. left -> right)
|
|
139
136
|
rect = findRectByPosition(invertPosition(position), boundingRects);
|
|
140
|
-
|
|
141
137
|
if (rect.overflow === 0) {
|
|
142
138
|
return rect;
|
|
143
139
|
}
|
|
144
140
|
}
|
|
145
|
-
|
|
146
141
|
const inWindow = boundingRects.filter(_ref3 => {
|
|
147
142
|
let {
|
|
148
143
|
overflow
|
|
149
144
|
} = _ref3;
|
|
150
145
|
return overflow === 0;
|
|
151
|
-
});
|
|
152
|
-
// (these are sorted clockwise which makes them show where one would expect them to be)
|
|
146
|
+
});
|
|
153
147
|
|
|
148
|
+
// pick the first position that fits in window
|
|
149
|
+
// (these are sorted clockwise which makes them show where one would expect them to be)
|
|
154
150
|
if (inWindow.length > 0) {
|
|
155
151
|
return inWindow[0];
|
|
156
|
-
}
|
|
157
|
-
// the least overflowing and normalize its position to fit within window bounds
|
|
158
|
-
|
|
152
|
+
}
|
|
159
153
|
|
|
154
|
+
// if all positions would end up being out of window bounds, let's pick the one that is
|
|
155
|
+
// the least overflowing and normalize its position to fit within window bounds
|
|
160
156
|
boundingRects.sort((_ref4, _ref5) => {
|
|
161
157
|
let {
|
|
162
158
|
overflow: overflowA
|
|
@@ -166,10 +162,10 @@ function getTooltipPosition(position, _ref2) {
|
|
|
166
162
|
} = _ref5;
|
|
167
163
|
return overflowA - overflowB;
|
|
168
164
|
});
|
|
169
|
-
const leastOverflowing = boundingRects[0];
|
|
170
|
-
// and 'above' might cause issues on small viewports with large tooltips
|
|
165
|
+
const leastOverflowing = boundingRects[0];
|
|
171
166
|
|
|
167
|
+
// prefer 'below' over 'above', since we can always expand the document downwards,
|
|
168
|
+
// and 'above' might cause issues on small viewports with large tooltips
|
|
172
169
|
return normalizePosition(leastOverflowing.position === 'above' ? findRectByPosition('below', boundingRects) : leastOverflowing);
|
|
173
170
|
}
|
|
174
|
-
|
|
175
171
|
export default getTooltipPosition;
|
|
@@ -6,32 +6,26 @@ const propTypes = {
|
|
|
6
6
|
* pressable state and tooltip variant as an argument.
|
|
7
7
|
*/
|
|
8
8
|
children: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),
|
|
9
|
-
|
|
10
9
|
/**
|
|
11
10
|
* The message. Can be raw text or text components.
|
|
12
11
|
*/
|
|
13
12
|
content: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
|
|
14
|
-
|
|
15
13
|
/**
|
|
16
14
|
* Select English or French copy for the accessible label.
|
|
17
15
|
*/
|
|
18
16
|
copy: PropTypes.oneOf(['en', 'fr']),
|
|
19
|
-
|
|
20
17
|
/**
|
|
21
18
|
* Use to place the tooltip in a specific location (only if it fits within viewport).
|
|
22
19
|
*/
|
|
23
20
|
position: PropTypes.oneOf(['auto', 'above', 'right', 'below', 'left']),
|
|
24
|
-
|
|
25
21
|
/**
|
|
26
22
|
* Display tooltip icon button as an inline element.
|
|
27
23
|
*/
|
|
28
24
|
inline: PropTypes.bool,
|
|
29
|
-
|
|
30
25
|
/**
|
|
31
26
|
* Callback function triggered when the tooltip is pressed.
|
|
32
27
|
*/
|
|
33
28
|
onPress: PropTypes.func,
|
|
34
|
-
|
|
35
29
|
/**
|
|
36
30
|
* The `id` of the tooltip button.
|
|
37
31
|
*/
|