@telus-uds/components-base 1.66.0 → 1.67.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -3
- 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 +14 -45
- 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 +216 -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 +25 -40
- 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 +12 -58
- package/lib/TextInput/index.js +0 -3
- package/lib/TextInput/propTypes.js +0 -8
- 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 +10 -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 +14 -31
- 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 +206 -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 +25 -27
- 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 +13 -39
- package/lib-module/TextInput/propTypes.js +3 -7
- 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 +13 -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/Checkbox/CheckboxGroup.jsx +10 -8
- package/src/CheckboxCardGroup/CheckboxCardGroup.jsx +231 -0
- package/src/CheckboxCardGroup/index.js +3 -0
- package/src/Modal/Modal.jsx +98 -5
- package/src/Modal/ModalContent.jsx +171 -0
- package/src/RadioCard/RadioCardGroup.jsx +23 -2
- package/src/index.js +1 -0
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
2
2
|
import Dimensions from "react-native-web/dist/exports/Dimensions";
|
|
3
3
|
import Platform from "react-native-web/dist/exports/Platform";
|
|
4
|
-
|
|
5
4
|
const adjustHorizontalToFit = (initialOffset, windowWidth, sourceWidth) => {
|
|
6
5
|
const offset = Math.max(0, initialOffset);
|
|
7
6
|
const otherEdgeOverflow = Math.max(0, offset + sourceWidth - windowWidth);
|
|
@@ -12,34 +11,29 @@ const adjustHorizontalToFit = (initialOffset, windowWidth, sourceWidth) => {
|
|
|
12
11
|
if (tooWideBy) adjusted.width = Math.max(0, sourceWidth - tooWideBy);
|
|
13
12
|
return adjusted;
|
|
14
13
|
};
|
|
15
|
-
|
|
16
14
|
const getPosition = _ref => {
|
|
17
15
|
let {
|
|
18
16
|
edge,
|
|
19
17
|
fromEdge,
|
|
20
18
|
sourceSize
|
|
21
19
|
} = _ref;
|
|
22
|
-
|
|
23
20
|
switch (edge) {
|
|
24
21
|
case 'near':
|
|
25
22
|
return fromEdge;
|
|
26
|
-
|
|
27
23
|
case 'mid':
|
|
28
24
|
return fromEdge + sourceSize / 2;
|
|
29
|
-
|
|
30
25
|
case 'far':
|
|
31
26
|
return fromEdge + sourceSize;
|
|
32
|
-
|
|
33
27
|
default:
|
|
34
28
|
return 0;
|
|
35
29
|
}
|
|
36
30
|
};
|
|
37
|
-
|
|
38
31
|
const getEdgeType = (align, alignSide) => {
|
|
39
32
|
const alignTo = align[alignSide];
|
|
40
33
|
const edge = ['center', 'middle'].includes(alignTo) && 'mid' || (alignSide === alignTo ? 'near' : 'far');
|
|
41
34
|
return edge;
|
|
42
35
|
};
|
|
36
|
+
|
|
43
37
|
/**
|
|
44
38
|
* Based on UDS's private getTooltipPosition but generalised.
|
|
45
39
|
*
|
|
@@ -50,8 +44,6 @@ const getEdgeType = (align, alignSide) => {
|
|
|
50
44
|
* before it is shown, which makes it account for the width being limiting in styles, custom font
|
|
51
45
|
* rendering, etc.
|
|
52
46
|
*/
|
|
53
|
-
|
|
54
|
-
|
|
55
47
|
function getOverlaidPosition(_ref2) {
|
|
56
48
|
let {
|
|
57
49
|
sourceLayout,
|
|
@@ -66,8 +58,9 @@ function getOverlaidPosition(_ref2) {
|
|
|
66
58
|
const {
|
|
67
59
|
scrollX = 0,
|
|
68
60
|
scrollY = 0
|
|
69
|
-
} = typeof window === 'object' ? window : {};
|
|
61
|
+
} = typeof window === 'object' ? window : {};
|
|
70
62
|
|
|
63
|
+
// Will have top, bottom, left and/or right offsets depending on `align`
|
|
71
64
|
const positioning = {};
|
|
72
65
|
if (align.top) positioning.top = getPosition({
|
|
73
66
|
edge: getEdgeType(align, 'top'),
|
|
@@ -99,20 +92,18 @@ function getOverlaidPosition(_ref2) {
|
|
|
99
92
|
fromEdge: windowDimensions.width - (sourceLayout.x + scrollX + sourceLayout.width - (offsets.horizontal ?? 0)),
|
|
100
93
|
sourceSize: sourceLayout.width
|
|
101
94
|
});
|
|
102
|
-
|
|
103
95
|
if (!(align.left && align.right)) {
|
|
104
96
|
// Check if the position and/or width need adjusting to fit on the screen
|
|
105
97
|
const side = align.right ? 'right' : 'left';
|
|
106
98
|
const adjusted = adjustHorizontalToFit(positioning[side], windowDimensions.width, sourceLayout.width);
|
|
107
99
|
if (typeof adjusted.width === 'number') positioning.width = adjusted.width;
|
|
108
|
-
|
|
109
100
|
if (typeof adjusted.offset === 'number') {
|
|
110
101
|
positioning[side] = adjusted.offset;
|
|
111
102
|
}
|
|
112
103
|
}
|
|
113
|
-
|
|
114
104
|
return positioning;
|
|
115
105
|
}
|
|
106
|
+
|
|
116
107
|
/**
|
|
117
108
|
* Positions an element in a modal or portal so that it appears tooltip-like below the
|
|
118
109
|
* target element.
|
|
@@ -121,8 +112,6 @@ function getOverlaidPosition(_ref2) {
|
|
|
121
112
|
* a small task because UDS's tooltip logic only really works for short text - it might be
|
|
122
113
|
* better to use a third-party library).
|
|
123
114
|
*/
|
|
124
|
-
|
|
125
|
-
|
|
126
115
|
const useOverlaidPosition = _ref3 => {
|
|
127
116
|
let {
|
|
128
117
|
isShown = false,
|
|
@@ -135,8 +124,9 @@ const useOverlaidPosition = _ref3 => {
|
|
|
135
124
|
} = _ref3;
|
|
136
125
|
// Element in main document flow that the targetRef element is positioned around
|
|
137
126
|
const sourceRef = useRef(null);
|
|
138
|
-
const [sourceLayout, setSourceLayout] = useState(null);
|
|
127
|
+
const [sourceLayout, setSourceLayout] = useState(null);
|
|
139
128
|
|
|
129
|
+
// Element in a modal or portal overlay positioned to appear adjacent to sourceRef
|
|
140
130
|
const targetRef = useRef(null);
|
|
141
131
|
const [targetDimensions, setTargetDimensions] = useState(null);
|
|
142
132
|
const [windowDimensions, setWindowDimensions] = useState(null);
|
|
@@ -161,7 +151,6 @@ const useOverlaidPosition = _ref3 => {
|
|
|
161
151
|
height
|
|
162
152
|
};
|
|
163
153
|
}
|
|
164
|
-
|
|
165
154
|
return previousDimensions;
|
|
166
155
|
});
|
|
167
156
|
}, []);
|
|
@@ -169,7 +158,6 @@ const useOverlaidPosition = _ref3 => {
|
|
|
169
158
|
useEffect(() => {
|
|
170
159
|
const handleDimensionsChange = _ref5 => {
|
|
171
160
|
var _sourceRef$current;
|
|
172
|
-
|
|
173
161
|
let {
|
|
174
162
|
window
|
|
175
163
|
} = _ref5;
|
|
@@ -184,12 +172,9 @@ const useOverlaidPosition = _ref3 => {
|
|
|
184
172
|
});
|
|
185
173
|
});
|
|
186
174
|
};
|
|
187
|
-
|
|
188
175
|
let subscription;
|
|
189
|
-
|
|
190
176
|
const unsubscribe = () => {
|
|
191
177
|
var _subscription;
|
|
192
|
-
|
|
193
178
|
if (typeof ((_subscription = subscription) === null || _subscription === void 0 ? void 0 : _subscription.remove) === 'function') {
|
|
194
179
|
// React Native >=0.65.0
|
|
195
180
|
subscription.remove();
|
|
@@ -197,11 +182,9 @@ const useOverlaidPosition = _ref3 => {
|
|
|
197
182
|
// React Native <0.65.0
|
|
198
183
|
Dimensions.remove('change', handleDimensionsChange);
|
|
199
184
|
}
|
|
200
|
-
|
|
201
185
|
setSourceLayout(null);
|
|
202
186
|
setTargetDimensions(null);
|
|
203
187
|
};
|
|
204
|
-
|
|
205
188
|
if (readyToShow) {
|
|
206
189
|
subscription = Dimensions.addEventListener('change', handleDimensionsChange);
|
|
207
190
|
handleDimensionsChange({
|
|
@@ -210,7 +193,6 @@ const useOverlaidPosition = _ref3 => {
|
|
|
210
193
|
} else {
|
|
211
194
|
unsubscribe();
|
|
212
195
|
}
|
|
213
|
-
|
|
214
196
|
return unsubscribe;
|
|
215
197
|
}, [readyToShow]);
|
|
216
198
|
const isReady = Boolean(isShown && sourceLayout && windowDimensions && targetDimensions);
|
|
@@ -229,5 +211,4 @@ const useOverlaidPosition = _ref3 => {
|
|
|
229
211
|
isReady
|
|
230
212
|
};
|
|
231
213
|
};
|
|
232
|
-
|
|
233
214
|
export default useOverlaidPosition;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { viewports } from '@telus-uds/system-constants';
|
|
2
2
|
import { useViewport } from '../ViewportProvider';
|
|
3
3
|
import hasOwnProperty from './hasOwnProperty';
|
|
4
|
-
|
|
5
4
|
const hasResponsiveProperties = objectProp => viewports.keys.some(key => hasOwnProperty(objectProp, key));
|
|
5
|
+
|
|
6
6
|
/**
|
|
7
7
|
* Resolves a prop which may be a responsive object with keys for viewports.
|
|
8
8
|
*
|
|
@@ -13,16 +13,17 @@ const hasResponsiveProperties = objectProp => viewports.keys.some(key => hasOwnP
|
|
|
13
13
|
* @param {*} [defaultValue]
|
|
14
14
|
* @returns {*}
|
|
15
15
|
*/
|
|
16
|
-
|
|
17
|
-
|
|
18
16
|
export const resolveResponsiveProp = (prop, viewport, defaultValue) => {
|
|
19
17
|
if (prop === undefined) return defaultValue;
|
|
20
18
|
if (!prop || typeof prop !== 'object' || !hasResponsiveProperties(prop)) return prop;
|
|
21
|
-
const value = viewports.keys.includes(viewport) ?
|
|
22
|
-
|
|
19
|
+
const value = viewports.keys.includes(viewport) ?
|
|
20
|
+
// If there's a current viewport, return the closest match at or below it
|
|
21
|
+
viewports.inherit(prop)[viewport] :
|
|
22
|
+
// If no current viewport is available, default to smallest viewport
|
|
23
23
|
prop[viewports.keys.find(key => hasOwnProperty(prop, key))];
|
|
24
24
|
return value === undefined ? defaultValue : value;
|
|
25
25
|
};
|
|
26
|
+
|
|
26
27
|
/**
|
|
27
28
|
* Takes any value and, if that value is a responsive prop (an object with one or more
|
|
28
29
|
* keys matching system viewport names), returns the value corresponding to the largest
|
|
@@ -37,10 +38,8 @@ export const resolveResponsiveProp = (prop, viewport, defaultValue) => {
|
|
|
37
38
|
* @param {*} [defaultValue] - default value to provide if no matches found for the current viewport
|
|
38
39
|
* @returns {*}
|
|
39
40
|
*/
|
|
40
|
-
|
|
41
41
|
const useResponsiveProp = (prop, defaultValue) => {
|
|
42
42
|
const viewport = useViewport();
|
|
43
43
|
return resolveResponsiveProp(prop, viewport, defaultValue);
|
|
44
44
|
};
|
|
45
|
-
|
|
46
45
|
export default useResponsiveProp;
|
|
@@ -1,29 +1,27 @@
|
|
|
1
1
|
import { useLayoutEffect, useCallback } from 'react';
|
|
2
2
|
import { useHydrationContext } from '../BaseProvider/HydrationContext';
|
|
3
3
|
const isSSR = typeof window === 'undefined';
|
|
4
|
-
|
|
5
4
|
const noop = () => {};
|
|
5
|
+
|
|
6
6
|
/**
|
|
7
7
|
* useSafeLayoutEffect is a alternative to useLayoutEffect that avoids SSR hydration problems:
|
|
8
8
|
* - In a client-side render, it uses useLayoutEffect to avoid flashing the pre-render UI to the user.
|
|
9
9
|
* - During hydration from SSR, the provided function is skipped to avoid mismatches from server content.
|
|
10
10
|
* - In SSR, it is a no-op function to avoid warnings about using useLayoutEffect in SSR
|
|
11
11
|
*/
|
|
12
|
-
|
|
13
|
-
|
|
14
12
|
const useSafeLayoutEffect = isSSR ? noop // avoid React's fussy warnings by ensuring to never call useLayoutEffect on server
|
|
15
13
|
: function (fn) {
|
|
16
14
|
let deps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
17
|
-
const isHydrating = useHydrationContext();
|
|
15
|
+
const isHydrating = useHydrationContext();
|
|
18
16
|
|
|
17
|
+
// Callback updates and effect re-runs when deps array content changes, like useEffect.
|
|
19
18
|
/* eslint-disable-next-line react-hooks/exhaustive-deps */
|
|
20
|
-
|
|
21
19
|
const callback = useCallback(fn, deps);
|
|
22
20
|
useLayoutEffect(() => {
|
|
23
21
|
// Do nothing before hydrating server-generated content, like useEffect. When hydration completes,
|
|
24
22
|
// useHydrationContext provides false, re-rendering this hook and re-running the effect.
|
|
25
|
-
if (isHydrating) return noop;
|
|
26
|
-
|
|
23
|
+
if (isHydrating) return noop;
|
|
24
|
+
// If there's no hydration in progress, behave like useLayoutEffect.
|
|
27
25
|
return callback();
|
|
28
26
|
}, [isHydrating, callback]);
|
|
29
27
|
};
|
|
@@ -1,22 +1,19 @@
|
|
|
1
1
|
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
2
|
-
|
|
3
2
|
const addScrollBlocking = (preventScrolling, stopPropagation, ref) => {
|
|
4
3
|
var _ref$current;
|
|
5
|
-
|
|
6
4
|
document.body.addEventListener('touchmove', preventScrolling, {
|
|
7
5
|
passive: false
|
|
8
6
|
});
|
|
9
7
|
(_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.addEventListener('touchmove', stopPropagation);
|
|
10
8
|
document.body.style.overflow = 'hidden';
|
|
11
9
|
};
|
|
12
|
-
|
|
13
10
|
const removeScrollBlocking = (preventScrolling, stopPropagation, ref) => {
|
|
14
11
|
var _ref$current2;
|
|
15
|
-
|
|
16
12
|
document.body.removeEventListener('touchmove', preventScrolling);
|
|
17
13
|
(_ref$current2 = ref.current) === null || _ref$current2 === void 0 ? void 0 : _ref$current2.removeEventListener('touchmove', stopPropagation);
|
|
18
14
|
document.body.style.overflow = 'inherit';
|
|
19
15
|
};
|
|
16
|
+
|
|
20
17
|
/**
|
|
21
18
|
* Disables scrolling when passed `true` or an array where all items are `true`.
|
|
22
19
|
*
|
|
@@ -26,8 +23,6 @@ const removeScrollBlocking = (preventScrolling, stopPropagation, ref) => {
|
|
|
26
23
|
* @param {boolean | boolean[]} conditionProps
|
|
27
24
|
* @returns
|
|
28
25
|
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
26
|
const useScrollBlocking = conditionProps => {
|
|
32
27
|
// useRef refs are null on first render and don't trigger a re-render when they get their
|
|
33
28
|
// element. Force re-run when ref mounts to ensure the stopPropagation listener is attached.
|
|
@@ -42,17 +37,15 @@ const useScrollBlocking = conditionProps => {
|
|
|
42
37
|
const stopPropagation = useCallback(event => event.stopPropagation(), []);
|
|
43
38
|
useEffect(() => {
|
|
44
39
|
const cleanup = () => removeScrollBlocking(preventScrolling, stopPropagation, ref);
|
|
45
|
-
|
|
46
40
|
if (conditionsMet) {
|
|
47
41
|
addScrollBlocking(preventScrolling, stopPropagation, ref);
|
|
48
42
|
} else {
|
|
49
43
|
cleanup();
|
|
50
44
|
}
|
|
51
|
-
|
|
52
|
-
|
|
45
|
+
return cleanup;
|
|
46
|
+
// preventScrolling and stopPropagation are stable callbacks with no deps, so this
|
|
53
47
|
// will re-run when conditionsMet or refIsMounted flip between true and false.
|
|
54
48
|
}, [preventScrolling, conditionsMet, stopPropagation, refIsMounted]);
|
|
55
49
|
return callbackRef;
|
|
56
50
|
};
|
|
57
|
-
|
|
58
51
|
export default useScrollBlocking;
|
|
@@ -16,7 +16,9 @@ const resolveSpacingOptions = space => {
|
|
|
16
16
|
variant,
|
|
17
17
|
subtract = 0
|
|
18
18
|
} = space.options;
|
|
19
|
-
const overridden = typeof size === 'number';
|
|
19
|
+
const overridden = typeof size === 'number';
|
|
20
|
+
|
|
21
|
+
// Might need an option that adapts the size value by current user's system font scale, so that
|
|
20
22
|
// meaningful spacing between items doesn't disappear on the highest a11y font scale settings.
|
|
21
23
|
// https://github.com/telus/universal-design-system/issues/583
|
|
22
24
|
|
|
@@ -29,6 +31,7 @@ const resolveSpacingOptions = space => {
|
|
|
29
31
|
subtract
|
|
30
32
|
};
|
|
31
33
|
};
|
|
34
|
+
|
|
32
35
|
/**
|
|
33
36
|
* Pass a {@link SpacingValue}, which is one of:
|
|
34
37
|
*
|
|
@@ -98,8 +101,6 @@ const resolveSpacingOptions = space => {
|
|
|
98
101
|
* @param {SpacingValue} [spaceValue] - a {@link SpacingIndex} number, or a {@link SpacingObject}
|
|
99
102
|
* @returns {number}
|
|
100
103
|
*/
|
|
101
|
-
|
|
102
|
-
|
|
103
104
|
const useSpacingScale = spaceValue => {
|
|
104
105
|
// In future, may need to consider window height as well as width, particularly for native apps,
|
|
105
106
|
// e.g. to ensure designs don't look lost on large, tall, not-so-wide portrait screens.
|
|
@@ -119,5 +120,4 @@ const useSpacingScale = spaceValue => {
|
|
|
119
120
|
});
|
|
120
121
|
return Math.max(size - subtract, 0);
|
|
121
122
|
};
|
|
122
|
-
|
|
123
123
|
export default useSpacingScale;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { useState } from 'react';
|
|
2
2
|
let id = 0;
|
|
3
|
-
|
|
4
3
|
function useUniqueId() {
|
|
5
4
|
let prefix = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
6
5
|
const [uniqueId] = useState(() => {
|
|
@@ -9,5 +8,4 @@ function useUniqueId() {
|
|
|
9
8
|
});
|
|
10
9
|
return uniqueId;
|
|
11
10
|
}
|
|
12
|
-
|
|
13
11
|
export default useUniqueId;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React, { forwardRef } from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import hasOwnProperty from './hasOwnProperty';
|
|
4
|
+
|
|
4
5
|
/**
|
|
5
6
|
* Higher-order component that has no effect unless an additional prop `LinkRouter` is passed.
|
|
6
7
|
* This may be used to provide custom wrappers for integrations with third party libraries.
|
|
@@ -29,9 +30,7 @@ import hasOwnProperty from './hasOwnProperty';
|
|
|
29
30
|
* <IconButton icon={SomeIcon} LinkRouter={LinkLinkRouter} linkRouterProps={{ to, options }} ref={iconRef} />
|
|
30
31
|
* ```
|
|
31
32
|
*/
|
|
32
|
-
|
|
33
33
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
34
|
-
|
|
35
34
|
const withLinkRouter = Component => {
|
|
36
35
|
const wrappedComponent = /*#__PURE__*/forwardRef((_ref, ref) => {
|
|
37
36
|
let {
|
|
@@ -39,7 +38,8 @@ const withLinkRouter = Component => {
|
|
|
39
38
|
linkRouterProps,
|
|
40
39
|
...props
|
|
41
40
|
} = _ref;
|
|
42
|
-
if (!LinkRouter) return /*#__PURE__*/_jsx(Component, {
|
|
41
|
+
if (!LinkRouter) return /*#__PURE__*/_jsx(Component, {
|
|
42
|
+
...props,
|
|
43
43
|
ref: ref
|
|
44
44
|
});
|
|
45
45
|
return /*#__PURE__*/_jsx(LinkRouter, {
|
|
@@ -48,23 +48,27 @@ const withLinkRouter = Component => {
|
|
|
48
48
|
ref: ref,
|
|
49
49
|
...props
|
|
50
50
|
});
|
|
51
|
-
});
|
|
51
|
+
});
|
|
52
52
|
|
|
53
|
+
// Ensure the returned component has appropriate outer properties set:
|
|
53
54
|
/* eslint-disable-next-line react/forbid-foreign-prop-types */
|
|
54
|
-
|
|
55
55
|
const {
|
|
56
56
|
displayName,
|
|
57
57
|
name,
|
|
58
58
|
propTypes,
|
|
59
59
|
...otherProperties
|
|
60
|
-
} = Component;
|
|
60
|
+
} = Component;
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
// Apply unique component name as a displayName
|
|
63
|
+
wrappedComponent.displayName = Component.displayName || Component.name;
|
|
63
64
|
|
|
64
|
-
|
|
65
|
+
// Apply proptypes including wrapper props - is safely { ...undefined, ...undefined } in prod
|
|
66
|
+
wrappedComponent.propTypes = {
|
|
67
|
+
...Component.propTypes,
|
|
65
68
|
...withLinkRouter.propTypes
|
|
66
|
-
};
|
|
69
|
+
};
|
|
67
70
|
|
|
71
|
+
// Forward any other properties explicitly set e.g. Component.SubComponent
|
|
68
72
|
Object.keys(otherProperties).forEach(key => {
|
|
69
73
|
// Skip internal React properties from wrappedComponent's forwardRef (render, $$typeof, etc)
|
|
70
74
|
if (hasOwnProperty(Component, key) && !hasOwnProperty(wrappedComponent, key)) {
|
|
@@ -73,7 +77,6 @@ const withLinkRouter = Component => {
|
|
|
73
77
|
});
|
|
74
78
|
return wrappedComponent;
|
|
75
79
|
};
|
|
76
|
-
|
|
77
80
|
withLinkRouter.propTypes = {
|
|
78
81
|
LinkRouter: PropTypes.elementType,
|
|
79
82
|
linkRouterProps: PropTypes.object
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"@floating-ui/react-native": "^0.8.1",
|
|
12
12
|
"@gorhom/portal": "^1.0.14",
|
|
13
13
|
"@telus-uds/system-constants": "^1.3.0",
|
|
14
|
-
"@telus-uds/system-theme-tokens": "^2.
|
|
14
|
+
"@telus-uds/system-theme-tokens": "^2.44.1",
|
|
15
15
|
"airbnb-prop-types": "^2.16.0",
|
|
16
16
|
"lodash.debounce": "^4.0.8",
|
|
17
17
|
"lodash.merge": "^4.6.2",
|
|
@@ -73,5 +73,5 @@
|
|
|
73
73
|
"standard-engine": {
|
|
74
74
|
"skip": true
|
|
75
75
|
},
|
|
76
|
-
"version": "1.
|
|
76
|
+
"version": "1.67.1"
|
|
77
77
|
}
|
|
@@ -112,6 +112,15 @@ const CheckboxGroup = forwardRef(
|
|
|
112
112
|
viewport
|
|
113
113
|
})
|
|
114
114
|
|
|
115
|
+
const borderTokens = {
|
|
116
|
+
outlineWidth,
|
|
117
|
+
borderTopLeftRadius,
|
|
118
|
+
borderTopRightRadius,
|
|
119
|
+
borderBottomLeftRadius,
|
|
120
|
+
borderBottomRightRadius,
|
|
121
|
+
outlineOffset
|
|
122
|
+
}
|
|
123
|
+
|
|
115
124
|
const { currentValues, toggleOneValue } = useMultipleInputValues({
|
|
116
125
|
values: checkedIds,
|
|
117
126
|
initialValues: initialCheckedIds,
|
|
@@ -163,14 +172,7 @@ const CheckboxGroup = forwardRef(
|
|
|
163
172
|
inactive={inactive}
|
|
164
173
|
validation={validation}
|
|
165
174
|
showErrorBorder
|
|
166
|
-
tokens={
|
|
167
|
-
outlineWidth,
|
|
168
|
-
borderTopLeftRadius,
|
|
169
|
-
borderTopRightRadius,
|
|
170
|
-
borderBottomLeftRadius,
|
|
171
|
-
borderBottomRightRadius,
|
|
172
|
-
outlineOffset
|
|
173
|
-
}}
|
|
175
|
+
tokens={borderTokens}
|
|
174
176
|
showIcon={showIcon}
|
|
175
177
|
{...selectProps(rest)}
|
|
176
178
|
>
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react'
|
|
2
|
+
import PropTypes from 'prop-types'
|
|
3
|
+
|
|
4
|
+
import { useViewport } from '../ViewportProvider'
|
|
5
|
+
import { useThemeTokens } from '../ThemeProvider'
|
|
6
|
+
import {
|
|
7
|
+
a11yProps,
|
|
8
|
+
containUniqueFields,
|
|
9
|
+
focusHandlerProps,
|
|
10
|
+
getTokensPropType,
|
|
11
|
+
selectSystemProps,
|
|
12
|
+
useMultipleInputValues,
|
|
13
|
+
variantProp,
|
|
14
|
+
viewProps
|
|
15
|
+
} from '../utils'
|
|
16
|
+
import StackView, { StackWrap } from '../StackView'
|
|
17
|
+
import CheckboxCard from '../CheckboxCard'
|
|
18
|
+
import Fieldset from '../Fieldset'
|
|
19
|
+
|
|
20
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
21
|
+
const [selectItemProps, selectedItemPropTypes] = selectSystemProps([
|
|
22
|
+
a11yProps,
|
|
23
|
+
focusHandlerProps,
|
|
24
|
+
viewProps
|
|
25
|
+
])
|
|
26
|
+
|
|
27
|
+
const CheckboxCardGroup = forwardRef(
|
|
28
|
+
(
|
|
29
|
+
{
|
|
30
|
+
copy = 'en',
|
|
31
|
+
tokens,
|
|
32
|
+
checkboxCardTokens,
|
|
33
|
+
variant,
|
|
34
|
+
items = [],
|
|
35
|
+
legend,
|
|
36
|
+
tooltip,
|
|
37
|
+
hint,
|
|
38
|
+
hintPosition = 'inline',
|
|
39
|
+
validation,
|
|
40
|
+
feedback,
|
|
41
|
+
initialCheckedIds,
|
|
42
|
+
checkedIds,
|
|
43
|
+
onChange,
|
|
44
|
+
readOnly,
|
|
45
|
+
name: inputGroupName,
|
|
46
|
+
inactive,
|
|
47
|
+
...rest
|
|
48
|
+
},
|
|
49
|
+
ref
|
|
50
|
+
) => {
|
|
51
|
+
const viewport = useViewport()
|
|
52
|
+
const {
|
|
53
|
+
space,
|
|
54
|
+
fieldSpace,
|
|
55
|
+
direction,
|
|
56
|
+
showIcon,
|
|
57
|
+
outlineWidth,
|
|
58
|
+
borderTopLeftRadius,
|
|
59
|
+
borderTopRightRadius,
|
|
60
|
+
borderBottomLeftRadius,
|
|
61
|
+
borderBottomRightRadius,
|
|
62
|
+
outlineOffset
|
|
63
|
+
} = useThemeTokens('CheckboxCardGroup', tokens, variant, {
|
|
64
|
+
viewport
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
const borderTokens = {
|
|
68
|
+
outlineWidth,
|
|
69
|
+
borderTopLeftRadius,
|
|
70
|
+
borderTopRightRadius,
|
|
71
|
+
borderBottomLeftRadius,
|
|
72
|
+
borderBottomRightRadius,
|
|
73
|
+
outlineOffset
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const { currentValues, toggleOneValue } = useMultipleInputValues({
|
|
77
|
+
value: checkedIds,
|
|
78
|
+
initialValues: initialCheckedIds,
|
|
79
|
+
onChange,
|
|
80
|
+
readOnly: readOnly || inactive
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
const StackContainer = direction === 'row' ? StackWrap : StackView
|
|
84
|
+
// Needs 'checkboxgroup' role on direct parent of checkboxes for MacOS Voiceover's numbering to work,
|
|
85
|
+
// and also needs 'checkboxgroup' role on fieldset for correct description on focusing the set.
|
|
86
|
+
// TODO: test this on more web screen readers.
|
|
87
|
+
|
|
88
|
+
const uniqueFields = ['id']
|
|
89
|
+
if (!containUniqueFields(items, uniqueFields)) {
|
|
90
|
+
throw new Error(`CheckboxCardGroup items must have unique ${uniqueFields.join(', ')}`)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return (
|
|
94
|
+
<Fieldset
|
|
95
|
+
copy={copy}
|
|
96
|
+
ref={ref}
|
|
97
|
+
name={inputGroupName}
|
|
98
|
+
legend={legend}
|
|
99
|
+
tooltip={tooltip}
|
|
100
|
+
hint={hint}
|
|
101
|
+
hintPosition={hintPosition}
|
|
102
|
+
space={fieldSpace}
|
|
103
|
+
feedback={feedback}
|
|
104
|
+
inactive={inactive || readOnly}
|
|
105
|
+
validation={validation}
|
|
106
|
+
tokens={borderTokens}
|
|
107
|
+
showErrorBorder
|
|
108
|
+
showIcon={showIcon}
|
|
109
|
+
accessibilityRole="checkbox"
|
|
110
|
+
{...selectProps(rest)}
|
|
111
|
+
>
|
|
112
|
+
{(checkboxCardProperties) => (
|
|
113
|
+
<StackContainer space={space} accessibilityRole="checkbox">
|
|
114
|
+
{items.map(({ title, content, id, onChange: itemOnChange, ...itemRest }, index) => {
|
|
115
|
+
const cardId = id || `CheckboxCard[${index}]`
|
|
116
|
+
const handleChange = (newCheckedState, event) => {
|
|
117
|
+
if (typeof itemOnChange === 'function') itemOnChange(newCheckedState, event)
|
|
118
|
+
toggleOneValue(cardId, event)
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
return (
|
|
122
|
+
<CheckboxCard
|
|
123
|
+
key={cardId}
|
|
124
|
+
id={cardId}
|
|
125
|
+
checked={currentValues.includes(cardId)}
|
|
126
|
+
onChange={handleChange}
|
|
127
|
+
inactive={inactive}
|
|
128
|
+
title={title}
|
|
129
|
+
name={inputGroupName}
|
|
130
|
+
tokens={checkboxCardTokens}
|
|
131
|
+
variant={variant}
|
|
132
|
+
readOnly={readOnly}
|
|
133
|
+
{...selectItemProps(itemRest)}
|
|
134
|
+
{...checkboxCardProperties}
|
|
135
|
+
>
|
|
136
|
+
{content}
|
|
137
|
+
</CheckboxCard>
|
|
138
|
+
)
|
|
139
|
+
})}
|
|
140
|
+
</StackContainer>
|
|
141
|
+
)}
|
|
142
|
+
</Fieldset>
|
|
143
|
+
)
|
|
144
|
+
}
|
|
145
|
+
)
|
|
146
|
+
CheckboxCardGroup.displayName = 'CheckboxCardGroup'
|
|
147
|
+
|
|
148
|
+
CheckboxCardGroup.propTypes = {
|
|
149
|
+
...selectedSystemPropTypes,
|
|
150
|
+
/**
|
|
151
|
+
* Whether the English or French copy will be used (e.g. for accessibility labels).
|
|
152
|
+
*/
|
|
153
|
+
copy: PropTypes.oneOf(['en', 'fr']),
|
|
154
|
+
/**
|
|
155
|
+
* Optional theme token overrides for the outer CheckboxCardGroup component
|
|
156
|
+
*/
|
|
157
|
+
tokens: getTokensPropType('CheckboxCardGroup'),
|
|
158
|
+
/**
|
|
159
|
+
* Optional theme token overrides for each inner CheckboxCard component
|
|
160
|
+
*/
|
|
161
|
+
checkboxCardTokens: getTokensPropType('CheckboxCard'),
|
|
162
|
+
/**
|
|
163
|
+
* Theme variants, shared between both CheckboxCardGroup and CheckboxCard
|
|
164
|
+
*/
|
|
165
|
+
variant: variantProp.propType,
|
|
166
|
+
/**
|
|
167
|
+
* Array of objects containing specifics for each CheckboxCard to be rendered in the group.
|
|
168
|
+
*/
|
|
169
|
+
items: PropTypes.arrayOf(
|
|
170
|
+
PropTypes.exact({
|
|
171
|
+
...selectedItemPropTypes,
|
|
172
|
+
title: PropTypes.string,
|
|
173
|
+
content: PropTypes.node,
|
|
174
|
+
id: PropTypes.string,
|
|
175
|
+
onChange: PropTypes.func
|
|
176
|
+
})
|
|
177
|
+
),
|
|
178
|
+
/**
|
|
179
|
+
* Main text used to describe this group, used in Fieldset's Legend element.
|
|
180
|
+
*/
|
|
181
|
+
legend: PropTypes.string,
|
|
182
|
+
/**
|
|
183
|
+
* Optional additional text giving more detail to help a user make a choice.
|
|
184
|
+
*/
|
|
185
|
+
hint: PropTypes.string,
|
|
186
|
+
/**
|
|
187
|
+
* Position of the hint relative to label. Use `below` to display a larger hint below the label.
|
|
188
|
+
*/
|
|
189
|
+
hintPosition: PropTypes.oneOf(['inline', 'below']),
|
|
190
|
+
/**
|
|
191
|
+
* Optional tooltip text content to include alongside the legend and hint.
|
|
192
|
+
*/
|
|
193
|
+
tooltip: PropTypes.string,
|
|
194
|
+
/**
|
|
195
|
+
* Current validation status of the group, passed to the feedback element if there is one.
|
|
196
|
+
*/
|
|
197
|
+
validation: PropTypes.oneOf(['error', 'success']),
|
|
198
|
+
/**
|
|
199
|
+
* If provided, a Feedback element is rendered containing this text.
|
|
200
|
+
*/
|
|
201
|
+
feedback: PropTypes.string,
|
|
202
|
+
/**
|
|
203
|
+
* If provided, the checkboxed with this ids are selected on first render.
|
|
204
|
+
*/
|
|
205
|
+
initialCheckedIds: PropTypes.arrayOf(PropTypes.string),
|
|
206
|
+
/**
|
|
207
|
+
* If not undefined, the checkboxes with these ids is selected, and the
|
|
208
|
+
* element's selection state will be controlled by its parent using the `onChange` function.
|
|
209
|
+
*/
|
|
210
|
+
checkedIds: PropTypes.arrayOf(PropTypes.string),
|
|
211
|
+
/**
|
|
212
|
+
* Function to call on change in selection state. Is required if the selection state is controlled
|
|
213
|
+
* by a parent using checkedId and the input is not readOnly.
|
|
214
|
+
*/
|
|
215
|
+
onChange: PropTypes.func,
|
|
216
|
+
/**
|
|
217
|
+
* If true, the checkbox cards cannot be selected by the user and simply show their current state.
|
|
218
|
+
*/
|
|
219
|
+
readOnly: PropTypes.bool,
|
|
220
|
+
/**
|
|
221
|
+
* If true, the checkbox card cannot be interacted with, elements are set as `disabled` and if the
|
|
222
|
+
* theme supports `inactive` appearances rules, these are applied.
|
|
223
|
+
*/
|
|
224
|
+
inactive: PropTypes.bool,
|
|
225
|
+
/**
|
|
226
|
+
* On Web, this is passed to the `name` attribute of the fieldset and each checkbox input.
|
|
227
|
+
*/
|
|
228
|
+
name: PropTypes.string
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
export default CheckboxCardGroup
|