@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
|
@@ -10,7 +10,6 @@ import InputSupports from '../InputSupports';
|
|
|
10
10
|
import { useThemeTokens } from '../ThemeProvider';
|
|
11
11
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
12
|
const [selectProps, selectedSystemPropTypes] = selectSystemProps([inputSupportsProps]);
|
|
13
|
-
|
|
14
13
|
const selectCodeTextInputTokens = _ref => {
|
|
15
14
|
let {
|
|
16
15
|
outerBorderColor,
|
|
@@ -22,7 +21,6 @@ const selectCodeTextInputTokens = _ref => {
|
|
|
22
21
|
icon: null
|
|
23
22
|
};
|
|
24
23
|
};
|
|
25
|
-
|
|
26
24
|
const Validator = /*#__PURE__*/forwardRef((_ref2, ref) => {
|
|
27
25
|
let {
|
|
28
26
|
value = '',
|
|
@@ -44,93 +42,72 @@ const Validator = /*#__PURE__*/forwardRef((_ref2, ref) => {
|
|
|
44
42
|
const prefix = 'code';
|
|
45
43
|
const sufixValidation = 'Validation';
|
|
46
44
|
const [isHover, setIsHover] = useState(false);
|
|
47
|
-
|
|
48
45
|
const handleMouseOver = () => {
|
|
49
46
|
setIsHover(true);
|
|
50
47
|
};
|
|
51
|
-
|
|
52
48
|
const handleMouseOut = () => {
|
|
53
49
|
setIsHover(false);
|
|
54
50
|
};
|
|
55
|
-
|
|
56
51
|
const themeTokens = useThemeTokens('TextInput', tokens, variant, {
|
|
57
52
|
hover: isHover
|
|
58
53
|
});
|
|
59
54
|
const [codeReferences, singleCodes] = useMemo(() => {
|
|
60
55
|
const codes = [];
|
|
61
56
|
const valueCodes = {};
|
|
62
|
-
|
|
63
57
|
for (let i = 0; validatorsLength && i < validatorsLength; i += 1) {
|
|
64
58
|
codes[prefix + i] = /*#__PURE__*/createRef();
|
|
65
59
|
valueCodes[prefix + i] = '';
|
|
66
60
|
valueCodes[prefix + i + sufixValidation] = '';
|
|
67
61
|
}
|
|
68
|
-
|
|
69
62
|
return [codes, valueCodes];
|
|
70
63
|
}, []);
|
|
71
|
-
|
|
72
64
|
const handleSingleCodes = (codeId, val, validation) => {
|
|
73
65
|
singleCodes[codeId] = val;
|
|
74
66
|
singleCodes[codeId + sufixValidation] = validation;
|
|
75
67
|
/* eslint-disable no-unused-expressions */
|
|
76
|
-
|
|
77
|
-
|
|
68
|
+
setIndividualCodes({
|
|
69
|
+
...individualCodes,
|
|
78
70
|
[codeId]: val
|
|
79
71
|
});
|
|
80
72
|
};
|
|
81
|
-
|
|
82
73
|
const handleChangeCode = () => {
|
|
83
74
|
let code = '';
|
|
84
|
-
|
|
85
75
|
for (let i = 0; i < validatorsLength; i += 1) code += singleCodes[prefix + i];
|
|
86
|
-
|
|
87
76
|
if (typeof onChange === 'function') onChange(code, singleCodes);
|
|
88
77
|
};
|
|
89
|
-
|
|
90
78
|
const handleChangeCodeValues = (event, codeId, nextIndex) => {
|
|
91
79
|
var _codeReferences$codeI, _event$nativeEvent, _event$target, _codeElement$value, _codeElement$value2;
|
|
92
|
-
|
|
93
80
|
const codeElement = (_codeReferences$codeI = codeReferences[codeId]) === null || _codeReferences$codeI === void 0 ? void 0 : _codeReferences$codeI.current;
|
|
94
81
|
const val = ((_event$nativeEvent = event.nativeEvent) === null || _event$nativeEvent === void 0 ? void 0 : _event$nativeEvent.value) || ((_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.value);
|
|
95
|
-
|
|
96
82
|
if (Number(val).toString() === 'NaN') {
|
|
97
83
|
codeElement.value = singleCodes[codeId] ?? '';
|
|
98
84
|
return;
|
|
99
85
|
}
|
|
100
|
-
|
|
101
86
|
if ((codeElement === null || codeElement === void 0 ? void 0 : (_codeElement$value = codeElement.value) === null || _codeElement$value === void 0 ? void 0 : _codeElement$value.length) > 1) {
|
|
102
87
|
const oldValue = singleCodes[codeId];
|
|
103
88
|
const newValue = codeElement.value.replace(oldValue, '');
|
|
104
89
|
codeElement.value = newValue;
|
|
105
90
|
handleSingleCodes(codeId, codeElement.value, 'success');
|
|
106
91
|
}
|
|
107
|
-
|
|
108
92
|
handleSingleCodes(codeId, (codeElement === null || codeElement === void 0 ? void 0 : codeElement.value) ?? singleCodes[codeId], 'success');
|
|
109
93
|
handleChangeCode();
|
|
110
|
-
|
|
111
94
|
if (nextIndex === validatorsLength) {
|
|
112
95
|
codeElement.blur();
|
|
113
96
|
return;
|
|
114
97
|
}
|
|
115
|
-
|
|
116
98
|
if ((codeElement === null || codeElement === void 0 ? void 0 : (_codeElement$value2 = codeElement.value) === null || _codeElement$value2 === void 0 ? void 0 : _codeElement$value2.length) > 0) codeReferences[prefix + nextIndex].current.focus();
|
|
117
99
|
};
|
|
118
|
-
|
|
119
100
|
const handleKeyPress = (event, currentIndex, previousIndex) => {
|
|
120
101
|
if (!(event.keyCode === 8 || event.code === 'Backspace')) return;
|
|
121
|
-
|
|
122
102
|
if (currentIndex > 0) {
|
|
123
103
|
codeReferences[prefix + currentIndex].current.value = '';
|
|
124
104
|
codeReferences[prefix + previousIndex].current.focus();
|
|
125
105
|
}
|
|
126
|
-
|
|
127
106
|
handleSingleCodes(prefix + currentIndex, '', '');
|
|
128
107
|
handleChangeCode();
|
|
129
108
|
};
|
|
130
|
-
|
|
131
109
|
const getCodeComponents = () => {
|
|
132
110
|
const components = [];
|
|
133
|
-
|
|
134
111
|
for (let i = 0; validatorsLength && i < validatorsLength; i += 1) {
|
|
135
112
|
const codeId = prefix + i;
|
|
136
113
|
const codeInputProps = {
|
|
@@ -141,7 +118,6 @@ const Validator = /*#__PURE__*/forwardRef((_ref2, ref) => {
|
|
|
141
118
|
tokens: selectCodeTextInputTokens(themeTokens),
|
|
142
119
|
onFocus: () => {
|
|
143
120
|
var _codeReferences$codeI2, _codeReferences$codeI3;
|
|
144
|
-
|
|
145
121
|
return ((_codeReferences$codeI2 = codeReferences[codeId]) === null || _codeReferences$codeI2 === void 0 ? void 0 : (_codeReferences$codeI3 = _codeReferences$codeI2.current) === null || _codeReferences$codeI3 === void 0 ? void 0 : _codeReferences$codeI3.select()) ?? null;
|
|
146
122
|
},
|
|
147
123
|
onKeyPress: event => handleKeyPress(event, i, i - 1),
|
|
@@ -152,44 +128,39 @@ const Validator = /*#__PURE__*/forwardRef((_ref2, ref) => {
|
|
|
152
128
|
codeInputProps.validation || delete codeInputProps.validation;
|
|
153
129
|
components.push( /*#__PURE__*/_jsx(View, {
|
|
154
130
|
style: staticStyles.codeInputWidth,
|
|
155
|
-
children: /*#__PURE__*/_jsx(TextInput, {
|
|
131
|
+
children: /*#__PURE__*/_jsx(TextInput, {
|
|
132
|
+
...codeInputProps
|
|
156
133
|
})
|
|
157
134
|
}, codeId));
|
|
158
135
|
}
|
|
159
|
-
|
|
160
136
|
return components;
|
|
161
137
|
};
|
|
162
|
-
|
|
163
138
|
useEffect(() => {
|
|
164
139
|
/* eslint-disable no-unused-expressions */
|
|
165
140
|
if (Number(value).toString() !== 'NaN') setText(value);
|
|
166
141
|
}, [value]);
|
|
167
|
-
/* eslint-disable react-hooks/exhaustive-deps */
|
|
168
142
|
|
|
143
|
+
/* eslint-disable react-hooks/exhaustive-deps */
|
|
169
144
|
useEffect(() => {
|
|
170
145
|
for (let i = 0; i < validatorsLength; i += 1) {
|
|
171
146
|
codeReferences[prefix + i].current.value = text[i] ?? '';
|
|
172
147
|
handleSingleCodes(prefix + i, text[i] ?? '', text[i] ? 'success' : '');
|
|
173
148
|
}
|
|
174
149
|
}, [text]);
|
|
175
|
-
/* eslint-disable react-hooks/exhaustive-deps */
|
|
176
150
|
|
|
151
|
+
/* eslint-disable react-hooks/exhaustive-deps */
|
|
177
152
|
useEffect(() => {
|
|
178
153
|
const handlePasteCode = event => {
|
|
179
154
|
setText('');
|
|
180
155
|
const clipBoardText = event.clipboardData.getData('text');
|
|
181
156
|
if (Number(clipBoardText).toString() !== 'NaN') setText(clipBoardText);
|
|
182
157
|
};
|
|
183
|
-
|
|
184
158
|
const handleCopy = event => {
|
|
185
159
|
let clipBoardText = '';
|
|
186
|
-
|
|
187
160
|
for (let i = 0; i < validatorsLength; i += 1) singleCodes[prefix + i] && (clipBoardText += singleCodes[prefix + i]);
|
|
188
|
-
|
|
189
161
|
event.clipboardData.setData('text/plain', clipBoardText);
|
|
190
162
|
event.preventDefault();
|
|
191
163
|
};
|
|
192
|
-
|
|
193
164
|
if (Platform.OS === 'web') {
|
|
194
165
|
for (let i = 0; i < validatorsLength; i += 1) {
|
|
195
166
|
codeReferences[prefix + i].current.addEventListener('paste', handlePasteCode);
|
|
@@ -197,12 +168,10 @@ const Validator = /*#__PURE__*/forwardRef((_ref2, ref) => {
|
|
|
197
168
|
codeReferences[prefix + i].current.addEventListener('input', event => handleChangeCodeValues(event, prefix + i, i + 1));
|
|
198
169
|
}
|
|
199
170
|
}
|
|
200
|
-
|
|
201
171
|
return () => {
|
|
202
172
|
if (Platform.oldValue === 'web') {
|
|
203
173
|
for (let i = 0; i < validatorsLength; i += 1) {
|
|
204
174
|
var _codeReferences, _codeReferences$curre, _codeReferences2, _codeReferences2$curr, _codeReferences3, _codeReferences3$curr;
|
|
205
|
-
|
|
206
175
|
(_codeReferences = codeReferences[prefix + i]) === null || _codeReferences === void 0 ? void 0 : (_codeReferences$curre = _codeReferences.current) === null || _codeReferences$curre === void 0 ? void 0 : _codeReferences$curre.removeEventListener('paste', handlePasteCode);
|
|
207
176
|
(_codeReferences2 = codeReferences[prefix + i]) === null || _codeReferences2 === void 0 ? void 0 : (_codeReferences2$curr = _codeReferences2.current) === null || _codeReferences2$curr === void 0 ? void 0 : _codeReferences2$curr.removeEventListener('copy', handleCopy);
|
|
208
177
|
(_codeReferences3 = codeReferences[prefix + i]) === null || _codeReferences3 === void 0 ? void 0 : (_codeReferences3$curr = _codeReferences3.current) === null || _codeReferences3$curr === void 0 ? void 0 : _codeReferences3$curr.removeEventListener('input', event => handleChangeCodeValues(event, prefix + i, i + 1));
|
|
@@ -210,7 +179,8 @@ const Validator = /*#__PURE__*/forwardRef((_ref2, ref) => {
|
|
|
210
179
|
}
|
|
211
180
|
};
|
|
212
181
|
}, []);
|
|
213
|
-
return /*#__PURE__*/_jsx(InputSupports, {
|
|
182
|
+
return /*#__PURE__*/_jsx(InputSupports, {
|
|
183
|
+
...supportsProps,
|
|
214
184
|
children: /*#__PURE__*/_jsx(StackView, {
|
|
215
185
|
space: 2,
|
|
216
186
|
direction: "row",
|
|
@@ -220,18 +190,16 @@ const Validator = /*#__PURE__*/forwardRef((_ref2, ref) => {
|
|
|
220
190
|
});
|
|
221
191
|
});
|
|
222
192
|
Validator.displayName = 'Validator';
|
|
223
|
-
Validator.propTypes = {
|
|
224
|
-
|
|
193
|
+
Validator.propTypes = {
|
|
194
|
+
...selectedSystemPropTypes,
|
|
225
195
|
/**
|
|
226
196
|
* The value is a 6-digit code, may be only numeric characters, non numeric character aren't renderize
|
|
227
197
|
*/
|
|
228
198
|
value: PropTypes.string,
|
|
229
|
-
|
|
230
199
|
/**
|
|
231
200
|
* If true, the component is inactive and non editable.
|
|
232
201
|
*/
|
|
233
202
|
inactive: PropTypes.bool,
|
|
234
|
-
|
|
235
203
|
/**
|
|
236
204
|
* Use to react upon input's value changes. Required when the `value` prop is set. Will receive the input's value as an argument.
|
|
237
205
|
*/
|
|
@@ -3,12 +3,11 @@ import PropTypes from 'prop-types';
|
|
|
3
3
|
import { viewports } from '@telus-uds/system-constants';
|
|
4
4
|
import { ViewportContext } from './useViewport';
|
|
5
5
|
import useViewportListener from './useViewportListener';
|
|
6
|
+
|
|
6
7
|
/**
|
|
7
8
|
* Provides an up-to-date viewport value from system-constants, available via the `useViewport` hook
|
|
8
9
|
*/
|
|
9
|
-
|
|
10
10
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
11
|
-
|
|
12
11
|
const ViewportProvider = _ref => {
|
|
13
12
|
let {
|
|
14
13
|
children
|
|
@@ -22,7 +21,6 @@ const ViewportProvider = _ref => {
|
|
|
22
21
|
children: children
|
|
23
22
|
});
|
|
24
23
|
};
|
|
25
|
-
|
|
26
24
|
ViewportProvider.propTypes = {
|
|
27
25
|
children: PropTypes.node.isRequired
|
|
28
26
|
};
|
|
@@ -1,39 +1,37 @@
|
|
|
1
1
|
import Dimensions from "react-native-web/dist/exports/Dimensions";
|
|
2
2
|
import { viewports } from '@telus-uds/system-constants';
|
|
3
|
-
import useSafeLayoutEffect from '../utils/useSafeLayoutEffect';
|
|
3
|
+
import useSafeLayoutEffect from '../utils/useSafeLayoutEffect';
|
|
4
|
+
|
|
5
|
+
// Use Dimensions instead of useWindowDimensions because useWindowDimensions forces context
|
|
4
6
|
// to update on every pixel change during window resize; but we only want rerenders to occur
|
|
5
7
|
// when a viewport threshold has been crossed.
|
|
6
|
-
|
|
7
8
|
const lookupViewport = () => viewports.select(Dimensions.get('window').width);
|
|
9
|
+
|
|
8
10
|
/**
|
|
9
11
|
* When client-side rendering, immediately set the viewport to the correct value as a layout effect so
|
|
10
12
|
* if the viewport isn't the smallest, any SSR-rendered components rerender correctly before anything
|
|
11
13
|
* is shown to the user. Then bind events to update the viewport if it changes.
|
|
12
14
|
*/
|
|
13
|
-
|
|
14
|
-
|
|
15
15
|
const useViewportListener = setViewport => {
|
|
16
16
|
useSafeLayoutEffect(() => {
|
|
17
17
|
setViewport(lookupViewport());
|
|
18
|
-
|
|
19
18
|
const onChange = _ref => {
|
|
20
19
|
let {
|
|
21
20
|
window
|
|
22
21
|
} = _ref;
|
|
23
22
|
return setViewport(viewports.select(window.width));
|
|
24
23
|
};
|
|
25
|
-
|
|
26
24
|
const listener = Dimensions.addEventListener('change', onChange);
|
|
27
25
|
return () => {
|
|
28
26
|
if (typeof (listener === null || listener === void 0 ? void 0 : listener.remove) === 'function') {
|
|
29
27
|
// Can't just return listener.remove because listener.emitter disappears, causing an internal error.
|
|
30
28
|
// See https://github.com/facebook/react-native/issues/34508
|
|
31
|
-
listener.remove();
|
|
29
|
+
listener.remove();
|
|
30
|
+
// From RN 0.65.0, Dimensions.removeEventListener is deprecated for `remove` on addEventListener return value
|
|
32
31
|
} else if (typeof Dimensions.removeEventListener === 'function') {
|
|
33
32
|
Dimensions.removeEventListener('change', onChange);
|
|
34
33
|
}
|
|
35
34
|
};
|
|
36
35
|
}, [setViewport]);
|
|
37
36
|
};
|
|
38
|
-
|
|
39
37
|
export default useViewportListener;
|
package/lib-module/index.js
CHANGED
|
@@ -9,6 +9,7 @@ export { default as Listbox } from './Listbox';
|
|
|
9
9
|
export { default as Checkbox } from './Checkbox';
|
|
10
10
|
export * from './Checkbox';
|
|
11
11
|
export { default as CheckboxCard } from './CheckboxCard';
|
|
12
|
+
export { default as CheckboxCardGroup } from './CheckboxCardGroup';
|
|
12
13
|
export { default as Divider } from './Divider';
|
|
13
14
|
export { default as ExpandCollapse, Accordion } from './ExpandCollapse';
|
|
14
15
|
export { default as Feedback } from './Feedback';
|
|
@@ -3,11 +3,11 @@ import NativeView from "react-native-web/dist/exports/View";
|
|
|
3
3
|
import StyleSheet from "react-native-web/dist/exports/StyleSheet";
|
|
4
4
|
import PropTypes from 'prop-types';
|
|
5
5
|
import { useTheme } from '../../ThemeProvider';
|
|
6
|
+
|
|
6
7
|
/**
|
|
7
8
|
* Identical to React Native's View and supporting all the same props, but with:
|
|
8
9
|
* - a zIndex: 'auto' style added to prevent unexpectedly causing children to overlap other elements from other stacking contexts
|
|
9
10
|
*/
|
|
10
|
-
|
|
11
11
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
12
|
const BaseView = /*#__PURE__*/forwardRef((_ref, ref) => {
|
|
13
13
|
let {
|
|
@@ -19,12 +19,11 @@ const BaseView = /*#__PURE__*/forwardRef((_ref, ref) => {
|
|
|
19
19
|
themeOptions
|
|
20
20
|
} = useTheme();
|
|
21
21
|
const styleProp = Array.isArray(style) ? [...style] : [style];
|
|
22
|
-
|
|
23
22
|
if (!themeOptions.forceZIndex) {
|
|
24
23
|
styleProp.unshift(styles.resetZIndex);
|
|
25
24
|
}
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
return /*#__PURE__*/_jsx(NativeView, {
|
|
26
|
+
...rest,
|
|
28
27
|
style: styleProp,
|
|
29
28
|
ref: ref,
|
|
30
29
|
children: children
|
|
@@ -2,7 +2,6 @@ import Platform from "react-native-web/dist/exports/Platform";
|
|
|
2
2
|
/**
|
|
3
3
|
* @typedef {import('react-native').AccessibilityRole} AccessibilityRole
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
5
|
/**
|
|
7
6
|
* This is based on the role-to-tag mapping that React Native Web uses to set HTML tags.
|
|
8
7
|
* It's not exported in any way from RNW, so we need to keep this up-to-date manually.
|
|
@@ -23,10 +22,7 @@ import Platform from "react-native-web/dist/exports/Platform";
|
|
|
23
22
|
*/
|
|
24
23
|
// Adding `/** @type {const} */ ({...})` denotes object content as `readonly` in many IDEs
|
|
25
24
|
// eslint-disable-next-line prettier/prettier
|
|
26
|
-
|
|
27
|
-
const rolesToTags =
|
|
28
|
-
/** @type {const} */
|
|
29
|
-
{
|
|
25
|
+
const rolesToTags = /** @type {const} */{
|
|
30
26
|
article: 'article',
|
|
31
27
|
banner: 'header',
|
|
32
28
|
blockquote: 'blockquote',
|
|
@@ -45,23 +41,22 @@ const rolesToTags =
|
|
|
45
41
|
region: 'section',
|
|
46
42
|
strong: 'strong',
|
|
47
43
|
// Add special cases that are in RNW's function logic but not in its mapping object
|
|
48
|
-
label: 'label'
|
|
49
|
-
|
|
50
|
-
};
|
|
44
|
+
label: 'label'
|
|
45
|
+
// eslint-disable-next-line prettier/prettier
|
|
46
|
+
};
|
|
51
47
|
|
|
48
|
+
// Invert React Native Web's mapping, so a tag gets the role that gets that tag
|
|
52
49
|
export const tagsToRoles = Object.fromEntries(Object.entries(rolesToTags).map(_ref => {
|
|
53
50
|
let [key, value] = _ref;
|
|
54
51
|
return [value, key];
|
|
55
52
|
}));
|
|
53
|
+
|
|
56
54
|
/**
|
|
57
55
|
* Heading HTML tags map to the "heading" accessibilityRole in native apps, which is similar
|
|
58
56
|
* to headings on web but without the expectation of a hierarchy of headings within one screen.
|
|
59
57
|
*/
|
|
60
58
|
// eslint-disable-next-line prettier/prettier
|
|
61
|
-
|
|
62
|
-
export const headingTags =
|
|
63
|
-
/** @type {const} */
|
|
64
|
-
['h1', 'h2', 'h3', 'h4', 'h5', 'h6'];
|
|
59
|
+
export const headingTags = /** @type {const} */['h1', 'h2', 'h3', 'h4', 'h5', 'h6'];
|
|
65
60
|
/**
|
|
66
61
|
* @typedef {typeof headingTags[number]} HeadingTag
|
|
67
62
|
*/
|
|
@@ -72,7 +67,6 @@ export const headingTags =
|
|
|
72
67
|
*
|
|
73
68
|
* Of these, only headers (h1, h2, ...h5, h6) set a corresponding accessibilityRole in native apps ("heading").
|
|
74
69
|
*/
|
|
75
|
-
|
|
76
70
|
export const supportedTags = [...Object.keys(tagsToRoles), ...headingTags];
|
|
77
71
|
/**
|
|
78
72
|
* Uses readonly mapping keys/values to generate static types for IDEs that support TS in JSDoc.
|
|
@@ -86,10 +80,8 @@ export const supportedTags = [...Object.keys(tagsToRoles), ...headingTags];
|
|
|
86
80
|
* Of these, only headers (h1, h2, ...h5, h6) set a corresponding accessibilityRole in native apps ("heading").
|
|
87
81
|
*/
|
|
88
82
|
// eslint-disable-next-line prettier/prettier
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
/** @type {const} */
|
|
92
|
-
[...headingTags, 'article', 'aside', 'blockquote', 'footer', 'figure', 'form', 'header', 'ul', 'li', 'main', 'nav', 'section', 'label' // eslint-disable-next-line prettier/prettier
|
|
83
|
+
export const layoutTags = /** @type {const} */[...headingTags, 'article', 'aside', 'blockquote', 'footer', 'figure', 'form', 'header', 'ul', 'li', 'main', 'nav', 'section', 'label'
|
|
84
|
+
// eslint-disable-next-line prettier/prettier
|
|
93
85
|
];
|
|
94
86
|
/**
|
|
95
87
|
* @typedef {typeof layoutTags[number]} LayoutTag
|
|
@@ -101,10 +93,8 @@ export const layoutTags =
|
|
|
101
93
|
* Of these, only headers (h1, h2, ...h5, h6) set a corresponding accessibilityRole in native apps ("heading").
|
|
102
94
|
*/
|
|
103
95
|
// eslint-disable-next-line prettier/prettier
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
/** @type {const} */
|
|
107
|
-
[...headingTags, 'blockquote', 'code', 'del', 'em', 'ins', 'li', 'strong', 'label' // eslint-disable-next-line prettier/prettier
|
|
96
|
+
export const textTags = /** @type {const} */[...headingTags, 'blockquote', 'code', 'del', 'em', 'ins', 'li', 'strong', 'label'
|
|
97
|
+
// eslint-disable-next-line prettier/prettier
|
|
108
98
|
];
|
|
109
99
|
/**
|
|
110
100
|
* @typedef {typeof layoutTags[number]} TextTag
|
|
@@ -117,8 +107,8 @@ export const textTags =
|
|
|
117
107
|
* @param {string} [tag] - HTML tag string; returns undefined if not a {@link HeadingTag}
|
|
118
108
|
* @returns {'1' | '2' | '3' | '4' | '5' | '6' | undefined}
|
|
119
109
|
*/
|
|
120
|
-
|
|
121
110
|
export const getHeadingLevel = tag => headingTags.includes(tag) ? Number(tag[1]) : undefined;
|
|
111
|
+
|
|
122
112
|
/**
|
|
123
113
|
* Takes a supported HTML tag, and returns the accessibility props that, on web, make React Native Web
|
|
124
114
|
* render that tag.
|
|
@@ -131,13 +121,11 @@ export const getHeadingLevel = tag => headingTags.includes(tag) ? Number(tag[1])
|
|
|
131
121
|
* @param {AccessibilityRole | null} [nativeRole] - optional accessibilityRole for native apps
|
|
132
122
|
* @returns {{ accessibilityRole: string, accessibilityLevel?: string } | undefined}
|
|
133
123
|
*/
|
|
134
|
-
|
|
135
124
|
export const getA11yPropsFromHtmlTag = (tag, nativeRole) => {
|
|
136
125
|
// Allow cross-platform apps to set accessibilityRoles alongside a web tag without conflict
|
|
137
126
|
if (nativeRole !== undefined && Platform.OS !== 'web') return {
|
|
138
127
|
accessibilityRole: nativeRole
|
|
139
128
|
};
|
|
140
|
-
|
|
141
129
|
if (tag) {
|
|
142
130
|
// aria roles don't have native counterparts and RN may throw an error if an unrecognised role is passed
|
|
143
131
|
const ariaRole = Platform.OS === 'web' && tagsToRoles[tag];
|
|
@@ -149,9 +137,8 @@ export const getA11yPropsFromHtmlTag = (tag, nativeRole) => {
|
|
|
149
137
|
accessibilityRole: 'header',
|
|
150
138
|
accessibilityLevel
|
|
151
139
|
};
|
|
152
|
-
}
|
|
140
|
+
}
|
|
141
|
+
// If nothing matches or no tag supplied, return undefined and let component decide how to fall back.
|
|
153
142
|
// Note that return value may always be spread in objects (it is safe to spread undefined like { ...undefined })
|
|
154
|
-
|
|
155
|
-
|
|
156
143
|
return undefined;
|
|
157
144
|
};
|
|
@@ -7,13 +7,13 @@ import Platform from "react-native-web/dist/exports/Platform";
|
|
|
7
7
|
* @param {number} [value] - the value to multiply; defaults to system default font size
|
|
8
8
|
* @param {number} [maxScale] - the maximum multiplier to apply; defaults to no maximum
|
|
9
9
|
*/
|
|
10
|
-
|
|
11
10
|
export const scaleWithText = function (value) {
|
|
12
11
|
let maxScale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Infinity;
|
|
13
12
|
if (!value) return value;
|
|
14
13
|
const scale = Math.min(PixelRatio.getFontScale(), maxScale) || 1;
|
|
15
14
|
return value * scale;
|
|
16
15
|
};
|
|
16
|
+
|
|
17
17
|
/**
|
|
18
18
|
* Native only, returns `undefined` on Web.
|
|
19
19
|
*
|
|
@@ -24,7 +24,6 @@ export const scaleWithText = function (value) {
|
|
|
24
24
|
* The return value of this function can be used as a React Native `Text` element's
|
|
25
25
|
* `maxFontSizeMultiplier` prop value.
|
|
26
26
|
*/
|
|
27
|
-
|
|
28
27
|
export const getMaxFontMultiplier = _ref => {
|
|
29
28
|
let {
|
|
30
29
|
fontSize,
|
|
@@ -2,9 +2,10 @@ import { useEffect, useRef, useState } from 'react';
|
|
|
2
2
|
import Animated from "react-native-web/dist/exports/Animated";
|
|
3
3
|
import Easing from "react-native-web/dist/exports/Easing";
|
|
4
4
|
import Platform from "react-native-web/dist/exports/Platform";
|
|
5
|
-
import useSafeLayoutEffect from '../useSafeLayoutEffect';
|
|
6
|
-
// https://github.com/telus/universal-design-system/issues/487
|
|
5
|
+
import useSafeLayoutEffect from '../useSafeLayoutEffect';
|
|
7
6
|
|
|
7
|
+
// TODO: systematise animations
|
|
8
|
+
// https://github.com/telus/universal-design-system/issues/487
|
|
8
9
|
function useVerticalExpandAnimation(_ref) {
|
|
9
10
|
let {
|
|
10
11
|
containerHeight,
|
|
@@ -28,16 +29,15 @@ function useVerticalExpandAnimation(_ref) {
|
|
|
28
29
|
}, [expandStateChanged, isExpanded]);
|
|
29
30
|
useEffect(() => {
|
|
30
31
|
const onComplete = () => setIsAnimating(false);
|
|
31
|
-
|
|
32
32
|
if (Platform.OS === 'web') {
|
|
33
|
-
if (!elementRef.current) return () => {};
|
|
34
|
-
// https://github.com/necolas/react-native-web/pull/1713
|
|
33
|
+
if (!elementRef.current) return () => {};
|
|
35
34
|
|
|
35
|
+
// React Native Web does not pass `onTransitionEnd` through, must attach manually.
|
|
36
|
+
// https://github.com/necolas/react-native-web/pull/1713
|
|
36
37
|
const element = elementRef.current;
|
|
37
38
|
element.addEventListener('transitionend', onComplete);
|
|
38
39
|
return () => element.removeEventListener('transitionend', onComplete);
|
|
39
40
|
}
|
|
40
|
-
|
|
41
41
|
const animationConfig = {
|
|
42
42
|
duration: isExpanded ? expandDuration : collapseDuration,
|
|
43
43
|
easing: Easing.inOut(Easing.ease),
|
|
@@ -50,7 +50,6 @@ function useVerticalExpandAnimation(_ref) {
|
|
|
50
50
|
}, [isExpanded, expandAnimatedValue, containerHeight, expandDuration, collapseDuration]);
|
|
51
51
|
const containerStyles = {};
|
|
52
52
|
if (isAnimating || expandStateChanged) containerStyles.overflow = 'hidden';
|
|
53
|
-
|
|
54
53
|
if (!isExpanded && !isAnimating && !expandStateChanged) {
|
|
55
54
|
if (Platform.OS === 'web') {
|
|
56
55
|
// Without `visibility: 'hidden', descendents are focusable on web even when collapsed.
|
|
@@ -60,9 +59,9 @@ function useVerticalExpandAnimation(_ref) {
|
|
|
60
59
|
// Without some form of hiding, some children leak through even when closed e.g. `List.Item` bullets.
|
|
61
60
|
containerStyles.opacity = 0;
|
|
62
61
|
}
|
|
63
|
-
}
|
|
64
|
-
|
|
62
|
+
}
|
|
65
63
|
|
|
64
|
+
// don't visually collapse the container until we have it measured
|
|
66
65
|
if (containerHeight === null) {
|
|
67
66
|
if (Platform.OS === 'web') {
|
|
68
67
|
// on web we can hide the contents until we have the container measured and avoid occasional jitter
|
|
@@ -82,8 +81,6 @@ function useVerticalExpandAnimation(_ref) {
|
|
|
82
81
|
} else {
|
|
83
82
|
containerStyles.height = expandAnimatedValue;
|
|
84
83
|
}
|
|
85
|
-
|
|
86
84
|
return [containerStyles, elementRef];
|
|
87
85
|
}
|
|
88
|
-
|
|
89
86
|
export default useVerticalExpandAnimation;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React, { Children, Fragment } from 'react';
|
|
2
2
|
import Text from "react-native-web/dist/exports/Text";
|
|
3
3
|
import A11yText from '../A11yText';
|
|
4
|
+
|
|
4
5
|
/**
|
|
5
6
|
* Unpacks top-level fragments, so that common compositional patterns such as the following examples
|
|
6
7
|
* can be iterated as flat siblings (as if they were `<Child1 /><Child2 /><Child3 />`):
|
|
@@ -33,35 +34,31 @@ import A11yText from '../A11yText';
|
|
|
33
34
|
* @param {ReactChildren} child
|
|
34
35
|
* @returns {ReactChildren}
|
|
35
36
|
*/
|
|
36
|
-
|
|
37
37
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
38
38
|
export const unpackFragment = child => {
|
|
39
39
|
var _child$props;
|
|
40
|
-
|
|
41
40
|
// If this level is a set of top-level siblings rather than one child, check each in turn
|
|
42
|
-
if (Children.count(child) > 1) return Children.map(child, unpackFragment);
|
|
41
|
+
if (Children.count(child) > 1) return Children.map(child, unpackFragment);
|
|
43
42
|
|
|
44
|
-
|
|
43
|
+
// When a fragment is found, unpack its children to the top level and check them
|
|
44
|
+
if ((child === null || child === void 0 ? void 0 : child.type) === Fragment) return unpackFragment((_child$props = child.props) === null || _child$props === void 0 ? void 0 : _child$props.children);
|
|
45
45
|
|
|
46
|
+
// Stop unpacking as soon as any non-fragment child is found
|
|
46
47
|
return child;
|
|
47
48
|
};
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
const isStringOrNumber = child => typeof child === 'string' || typeof child === 'number';
|
|
50
|
+
// Wrap an A11yText with neighouring text strings so it doesn't split them into multiple <Text>s
|
|
52
51
|
const isWrapable = child => {
|
|
53
52
|
var _child$type;
|
|
54
|
-
|
|
55
53
|
return isStringOrNumber(child) || child.type === A11yText || ((_child$type = child.type) === null || _child$type === void 0 ? void 0 : _child$type.name) === 'FootnoteLink';
|
|
56
54
|
};
|
|
55
|
+
const combineKeys = childrenArray => childrenArray.reduce((newKey, child) => `${newKey}${child.key || ''}`, '');
|
|
57
56
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
57
|
+
// Group wrappable children for one `<Text>` parent, merging adjacent text nodes
|
|
61
58
|
const wrapChild = (child, wrappedText) => {
|
|
62
|
-
const lastIndex = wrappedText.length - 1;
|
|
59
|
+
const lastIndex = wrappedText.length - 1;
|
|
60
|
+
// If possible, simplify content by combining text nodes into one string.
|
|
63
61
|
// jest-native's `.toHaveTextContent` is buggy about array of text nodes in <Text> elements.
|
|
64
|
-
|
|
65
62
|
if (lastIndex >= 0 && isStringOrNumber(child) && isStringOrNumber(wrappedText[lastIndex])) {
|
|
66
63
|
/* eslint-disable-next-line no-param-reassign */
|
|
67
64
|
wrappedText[lastIndex] = `${wrappedText[lastIndex]}${child}`;
|
|
@@ -69,6 +66,7 @@ const wrapChild = (child, wrappedText) => {
|
|
|
69
66
|
wrappedText.push(child);
|
|
70
67
|
}
|
|
71
68
|
};
|
|
69
|
+
|
|
72
70
|
/**
|
|
73
71
|
* React Native on Native crashes if text content is rendered outside `<Text>`, and on web,
|
|
74
72
|
* text style inheritance behaves differently with text compared to regular HTML.
|
|
@@ -84,13 +82,12 @@ const wrapChild = (child, wrappedText) => {
|
|
|
84
82
|
* @param {TextProps} props
|
|
85
83
|
* @returns {ReactChildren}
|
|
86
84
|
*/
|
|
87
|
-
|
|
88
|
-
|
|
89
85
|
export const wrapStringsInText = function (children) {
|
|
90
86
|
let textProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
91
|
-
const childrenArray = unpackFragment(Children.toArray(children));
|
|
92
|
-
// as possible, e.g. give <X>Text {someString}</X> one Text, same as <X>{`Text ${someString}`}</X>
|
|
87
|
+
const childrenArray = unpackFragment(Children.toArray(children));
|
|
93
88
|
|
|
89
|
+
// Group adjacent wrapable children together in one Text element to create as few Text elements
|
|
90
|
+
// as possible, e.g. give <X>Text {someString}</X> one Text, same as <X>{`Text ${someString}`}</X>
|
|
94
91
|
const wrapables = [[]];
|
|
95
92
|
let wrapablesIndex = 0;
|
|
96
93
|
childrenArray.forEach(child => {
|
|
@@ -111,7 +108,8 @@ export const wrapStringsInText = function (children) {
|
|
|
111
108
|
// Wrap text nodes and their wrappable neighbours in Text with as stable a key as possible.
|
|
112
109
|
// Avoid one-item arrays because jest-native's `.toHaveTextContent` is buggy
|
|
113
110
|
// and sometimes fails to match text content in arrays.
|
|
114
|
-
_jsx(Text, {
|
|
111
|
+
_jsx(Text, {
|
|
112
|
+
...textProps,
|
|
115
113
|
children: group.length === 1 ? group[0] : group
|
|
116
114
|
}, combineKeys(group) || index) : group];
|
|
117
115
|
}, []);
|
|
@@ -9,18 +9,16 @@ const containUniqueFields = (items, fields) => {
|
|
|
9
9
|
if (!map[field]) {
|
|
10
10
|
map[field] = [];
|
|
11
11
|
}
|
|
12
|
-
|
|
13
12
|
if (!item[field]) {
|
|
14
13
|
// We exclude empty values from comparison
|
|
15
14
|
return false;
|
|
16
|
-
}
|
|
17
|
-
|
|
15
|
+
}
|
|
18
16
|
|
|
17
|
+
// Duplicate found!
|
|
19
18
|
if (map[field][item[field]]) return true;
|
|
20
19
|
map[field][item[field]] = true;
|
|
21
20
|
return false;
|
|
22
21
|
}));
|
|
23
22
|
return !itemsHaveDuplicateFields;
|
|
24
23
|
};
|
|
25
|
-
|
|
26
24
|
export default containUniqueFields;
|
|
@@ -15,7 +15,8 @@ export default {
|
|
|
15
15
|
types: htmlAttrTypes,
|
|
16
16
|
select: props => Object.entries(props).reduce((items, _ref) => {
|
|
17
17
|
let [key, value] = _ref;
|
|
18
|
-
return Object.keys(htmlAttrTypes).includes(key) || /^(data|aria)-/.test(key) ? {
|
|
18
|
+
return Object.keys(htmlAttrTypes).includes(key) || /^(data|aria)-/.test(key) ? {
|
|
19
|
+
...items,
|
|
19
20
|
[key]: value
|
|
20
21
|
} : items;
|
|
21
22
|
}, {})
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import platform from './platform';
|
|
2
|
-
import versions from './versions';
|
|
2
|
+
import versions from './versions';
|
|
3
3
|
|
|
4
|
+
// export an object accessed like info.platform.OS, info.version.uds, etc
|
|
4
5
|
export default {
|
|
5
6
|
platform,
|
|
6
7
|
versions
|