@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,5 +1,4 @@
|
|
|
1
1
|
import PropTypes from 'prop-types';
|
|
2
|
-
|
|
3
2
|
const getByViewport = propType => ({
|
|
4
3
|
xs: propType,
|
|
5
4
|
sm: propType,
|
|
@@ -7,6 +6,7 @@ const getByViewport = propType => ({
|
|
|
7
6
|
lg: propType,
|
|
8
7
|
xl: propType
|
|
9
8
|
});
|
|
9
|
+
|
|
10
10
|
/**
|
|
11
11
|
* Utilities for props that allow different values to be applied at different viewports.
|
|
12
12
|
*
|
|
@@ -21,8 +21,6 @@ const getByViewport = propType => ({
|
|
|
21
21
|
* @property {Function} getTypeOptionallyByViewport - returns a PropTypes validator that accepts
|
|
22
22
|
* either the provided proptype on its own, or the output of getTypeByViewport
|
|
23
23
|
*/
|
|
24
|
-
|
|
25
|
-
|
|
26
24
|
export default {
|
|
27
25
|
getByViewport,
|
|
28
26
|
getTypeByViewport: propType => PropTypes.shape(getByViewport(propType)),
|
|
@@ -5,18 +5,17 @@ export default function selectSystemProps(systemPropHelpers) {
|
|
|
5
5
|
if (typeof (propHelper === null || propHelper === void 0 ? void 0 : propHelper.select) !== 'function') {
|
|
6
6
|
throw new Error(`An invalid system prop helper has been passed to 'selectSystemProps': prop selector ('.select') is missing in ${propHelper}`);
|
|
7
7
|
}
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
return {
|
|
9
|
+
...acc,
|
|
10
10
|
...propHelper.select(props)
|
|
11
11
|
};
|
|
12
12
|
}, {});
|
|
13
|
-
|
|
14
13
|
const selectedPropTypes = systemPropHelpers.reduce((acc, propHelper) => {
|
|
15
14
|
if (!(propHelper !== null && propHelper !== void 0 && propHelper.types)) {
|
|
16
15
|
throw new Error(`An invalid system prop helper has been passed to 'selectSystemProps': types selector ('.types') is missing in ${propHelper}`);
|
|
17
16
|
}
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
return {
|
|
18
|
+
...acc,
|
|
20
19
|
...propHelper.types
|
|
21
20
|
};
|
|
22
21
|
}, {});
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import PropTypes from 'prop-types';
|
|
2
2
|
import responsiveProps from './responsiveProps';
|
|
3
3
|
import variantProp from './variantProp';
|
|
4
|
+
|
|
4
5
|
/**
|
|
5
6
|
* @typedef {0|1|2|3|4|5|6|7|8|9|10|11} SpacingIndex - value used to select a size on the spacing scale
|
|
6
7
|
*
|
|
@@ -20,16 +21,17 @@ import variantProp from './variantProp';
|
|
|
20
21
|
*
|
|
21
22
|
* @typedef {SpacingIndex|SpacingObject} SpacingValue
|
|
22
23
|
*/
|
|
23
|
-
|
|
24
24
|
const spacingScale = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
|
|
25
25
|
const spacingIndexPropType = PropTypes.oneOf(spacingScale);
|
|
26
|
-
const spacingObjectPropType = PropTypes.shape({
|
|
26
|
+
const spacingObjectPropType = PropTypes.shape({
|
|
27
|
+
...responsiveProps.getByViewport(spacingIndexPropType),
|
|
27
28
|
space: spacingIndexPropType,
|
|
28
29
|
options: PropTypes.shape({
|
|
29
30
|
variant: variantProp.propType,
|
|
30
31
|
size: PropTypes.number
|
|
31
32
|
})
|
|
32
33
|
});
|
|
34
|
+
|
|
33
35
|
/**
|
|
34
36
|
* Components and utilities that assign fixed space between components use a theme-defined spacing scale.
|
|
35
37
|
*
|
|
@@ -44,7 +46,6 @@ const spacingObjectPropType = PropTypes.shape({ ...responsiveProps.getByViewport
|
|
|
44
46
|
* scale, or an object with an optional `options` key and one or more spacing indexes keyed either by
|
|
45
47
|
* viewports or `space` to apply at all viewports.
|
|
46
48
|
*/
|
|
47
|
-
|
|
48
49
|
export default {
|
|
49
50
|
scale: spacingScale,
|
|
50
51
|
types: {
|
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
import PropTypes from 'prop-types';
|
|
2
2
|
import Platform from "react-native-web/dist/exports/Platform";
|
|
3
|
-
import getPropSelector from './getPropSelector';
|
|
3
|
+
import getPropSelector from './getPropSelector';
|
|
4
|
+
|
|
5
|
+
// This file contains common props for components that render a React Native TextInput
|
|
4
6
|
// It excludes interaction handler functions which are in `./handlerProps.js`
|
|
5
7
|
|
|
6
8
|
/**
|
|
7
9
|
* TextInput (web and native) supports some common React Native props
|
|
8
10
|
* shared with React Native's Text component.
|
|
9
11
|
*/
|
|
10
|
-
|
|
11
12
|
const textProps = {
|
|
12
13
|
maxFontSizeMultiplier: PropTypes.number,
|
|
13
14
|
nativeId: PropTypes.string,
|
|
14
15
|
onLayout: PropTypes.func
|
|
15
16
|
};
|
|
17
|
+
|
|
16
18
|
/**
|
|
17
19
|
* UDS text inputs accept props related to UDS's useInputValue hook
|
|
18
20
|
*/
|
|
19
|
-
|
|
20
21
|
const inputValueProps = {
|
|
21
22
|
value: PropTypes.string,
|
|
22
23
|
type: PropTypes.string,
|
|
@@ -24,60 +25,52 @@ const inputValueProps = {
|
|
|
24
25
|
readOnly: PropTypes.bool,
|
|
25
26
|
inactive: PropTypes.bool
|
|
26
27
|
};
|
|
28
|
+
|
|
27
29
|
/**
|
|
28
30
|
* This collection adds props that can be passed through to both React Native's
|
|
29
31
|
* and React Native Web's implementations of the React Native TextInput component.
|
|
30
32
|
*/
|
|
31
|
-
|
|
32
|
-
|
|
33
|
+
const crossPlatform = {
|
|
34
|
+
...textProps,
|
|
33
35
|
...inputValueProps,
|
|
34
|
-
|
|
35
36
|
/**
|
|
36
37
|
* Web and Android; 'off' disables device autocomplete, other strings are platform-specific.
|
|
37
38
|
* Valid values on Native: https://reactnative.dev/docs/textinput#autocomplete-android
|
|
38
39
|
* Valid values on Web: https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete
|
|
39
40
|
*/
|
|
40
41
|
autoComplete: PropTypes.string,
|
|
41
|
-
|
|
42
42
|
/**
|
|
43
43
|
* On Native, default is `true`, passing `false` disables autoCorrect.
|
|
44
44
|
* On web, only supported by Safari and expects "on" or "off" strings.
|
|
45
45
|
*/
|
|
46
46
|
autoCorrect: PropTypes.oneOf([true, false, 'on', 'off']),
|
|
47
|
-
|
|
48
47
|
/**
|
|
49
48
|
* Focuses the element on mount. On Web, only the first form element with autoFocus is focussed.
|
|
50
49
|
*/
|
|
51
50
|
autoFocus: PropTypes.bool,
|
|
52
|
-
|
|
53
51
|
/**
|
|
54
52
|
* Default is `true` for single line, `false` for multi-line
|
|
55
53
|
*/
|
|
56
54
|
blurOnSubmit: PropTypes.bool,
|
|
57
|
-
|
|
58
55
|
/**
|
|
59
56
|
* iOS and Web only, no effect on Android
|
|
60
57
|
*/
|
|
61
58
|
clearTextOnFocus: PropTypes.bool,
|
|
62
|
-
|
|
63
59
|
/**
|
|
64
60
|
* Default is `true`. On web, this works by mapping to input's `readonly` attribute
|
|
65
61
|
*/
|
|
66
62
|
editable: PropTypes.bool,
|
|
67
|
-
|
|
68
63
|
/**
|
|
69
64
|
* See documentation for allowed values (varies between Web, Android and iOS) and important notes:
|
|
70
65
|
* - Native: https://reactnative.dev/docs/textinput#keyboardtype
|
|
71
66
|
* - Web: equivalent to `inputmode` but see https://necolas.github.io/react-native-web/docs/text-input/
|
|
72
67
|
*/
|
|
73
68
|
keyboardType: PropTypes.string,
|
|
74
|
-
|
|
75
69
|
/**
|
|
76
70
|
* Uses native tools (no flicker) to cap the maximum number of characters.
|
|
77
71
|
* On Web, works via `maxlength` attr.
|
|
78
72
|
*/
|
|
79
73
|
maxLength: PropTypes.number,
|
|
80
|
-
|
|
81
74
|
/**
|
|
82
75
|
* If passed as true, the text input can be multiple lines.
|
|
83
76
|
*
|
|
@@ -85,24 +78,20 @@ const crossPlatform = { ...textProps,
|
|
|
85
78
|
* > Use with textAlignVertical set to top for the same behavior in both platforms.
|
|
86
79
|
*/
|
|
87
80
|
multiline: PropTypes.bool,
|
|
88
|
-
|
|
89
81
|
/**
|
|
90
82
|
* Web and Android only, requires `multiline` to be `true`.
|
|
91
83
|
*/
|
|
92
84
|
numberOfLines: PropTypes.number,
|
|
93
|
-
|
|
94
85
|
/**
|
|
95
86
|
* Text to display when no value set.
|
|
96
87
|
* Accesibility guidelines recommend using labels to describe the input and using
|
|
97
88
|
* placeholders rarely and sparingly to prompt a particular format.
|
|
98
89
|
*/
|
|
99
90
|
placeholder: PropTypes.string,
|
|
100
|
-
|
|
101
91
|
/**
|
|
102
92
|
* Sets placeholder colour. On Web, uses `::placeholder { color: ... }` selector.
|
|
103
93
|
*/
|
|
104
94
|
placeholderTextColor: PropTypes.string,
|
|
105
|
-
|
|
106
95
|
/**
|
|
107
96
|
* One of a subset of platform-specific options that controls labelling and presentation
|
|
108
97
|
* in on-screen keyboards and accessibility tools. Uses `enterkeyhint` attr on Web.
|
|
@@ -110,34 +99,30 @@ const crossPlatform = { ...textProps,
|
|
|
110
99
|
* 'done', 'go', 'next', 'search', and 'send' are available for Web, Android and iOS.
|
|
111
100
|
*/
|
|
112
101
|
returnKeyType: PropTypes.string,
|
|
113
|
-
|
|
114
102
|
/**
|
|
115
103
|
* Obscures passwords and similar. Equivalent to type="password" on Web.
|
|
116
104
|
* Does not work if multiline is true.
|
|
117
105
|
*/
|
|
118
106
|
secureTextEntry: PropTypes.bool,
|
|
119
|
-
|
|
120
107
|
/**
|
|
121
108
|
* If true, all text will automatically be selected on focus.
|
|
122
109
|
*/
|
|
123
110
|
selectTextOnFocus: PropTypes.bool,
|
|
124
|
-
|
|
125
111
|
/**
|
|
126
112
|
* Web and iOS. On iOS, default inherits from `autoCorrect`.
|
|
127
113
|
* On Web, equivalent to `spellcheck` attr.
|
|
128
114
|
*/
|
|
129
115
|
spellCheck: PropTypes.bool
|
|
130
116
|
};
|
|
117
|
+
|
|
131
118
|
/**
|
|
132
119
|
* These web-only props all control HTML `input` attributes of the same name.
|
|
133
120
|
* Refer to general HTML documentation for more details.
|
|
134
121
|
*/
|
|
135
|
-
|
|
136
122
|
const webOnly = {
|
|
137
123
|
disabled: PropTypes.bool,
|
|
138
124
|
dir: PropTypes.oneOf(['auto', 'ltr', 'rtl']),
|
|
139
125
|
lang: PropTypes.string,
|
|
140
|
-
|
|
141
126
|
/**
|
|
142
127
|
* Sets the HTML input `pattern` attr. Not supported by React Native Web, but is supported by UDS.
|
|
143
128
|
* Must also pass in a ref and check validity by calling the HTML element's checkValidity method:
|
|
@@ -145,6 +130,7 @@ const webOnly = {
|
|
|
145
130
|
*/
|
|
146
131
|
pattern: PropTypes.string
|
|
147
132
|
};
|
|
133
|
+
|
|
148
134
|
/**
|
|
149
135
|
* These props are supported in React Native but not React Native Web.
|
|
150
136
|
*
|
|
@@ -156,7 +142,6 @@ const webOnly = {
|
|
|
156
142
|
* native component based on the values of multiple boolean flags, and may sometimes appear to pick an
|
|
157
143
|
* option that is inappropriate for one flag based on the values of one or more other other flags.
|
|
158
144
|
*/
|
|
159
|
-
|
|
160
145
|
const nativeOnly = {
|
|
161
146
|
caretHidden: PropTypes.bool,
|
|
162
147
|
clearButtonMode: PropTypes.string,
|
|
@@ -184,16 +169,17 @@ export default {
|
|
|
184
169
|
* Subset of proptypes that can be passed down to a React Native or React Native Web
|
|
185
170
|
* `TextInput` component. Allow regardless of platform, so cross-platform apps don't warn.
|
|
186
171
|
*/
|
|
187
|
-
types: {
|
|
172
|
+
types: {
|
|
173
|
+
...crossPlatform,
|
|
188
174
|
...webOnly,
|
|
189
175
|
...nativeOnly
|
|
190
176
|
},
|
|
191
|
-
|
|
192
177
|
/**
|
|
193
178
|
* Filters a props object. Return only platform-appropriate TextInput props, native inputs
|
|
194
179
|
* may throw errors on receiving unknown props.
|
|
195
180
|
*/
|
|
196
|
-
select: getPropSelector({
|
|
181
|
+
select: getPropSelector({
|
|
182
|
+
...crossPlatform,
|
|
197
183
|
...Platform.select({
|
|
198
184
|
web: webOnly,
|
|
199
185
|
default: nativeOnly
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import PropTypes from 'prop-types';
|
|
2
2
|
import Platform from "react-native-web/dist/exports/Platform";
|
|
3
|
-
import getPropSelector from './getPropSelector';
|
|
3
|
+
import getPropSelector from './getPropSelector';
|
|
4
|
+
|
|
5
|
+
// These are the props accepted specifically on React Native (Web) `Text` elements.
|
|
4
6
|
// They are generally concerned with the behaviour of multiline text.
|
|
5
7
|
|
|
6
8
|
const crossPlatform = {
|
|
@@ -9,17 +11,16 @@ const crossPlatform = {
|
|
|
9
11
|
* On native, ellipsis behaviour may be changed with `ellipsizeMode` prop.
|
|
10
12
|
*/
|
|
11
13
|
numberOfLines: PropTypes.number,
|
|
12
|
-
|
|
13
14
|
/**
|
|
14
15
|
* Default is true on web and false on native
|
|
15
16
|
*/
|
|
16
17
|
selectable: PropTypes.bool
|
|
17
18
|
};
|
|
19
|
+
|
|
18
20
|
/**
|
|
19
21
|
* See React Native docs for latest details on these.
|
|
20
22
|
* https://reactnative.dev/docs/text
|
|
21
23
|
*/
|
|
22
|
-
|
|
23
24
|
const nativeOnly = {
|
|
24
25
|
ellipsizeMode: PropTypes.string,
|
|
25
26
|
maxFontSizeMultiplier: PropTypes.number,
|
|
@@ -28,10 +29,10 @@ const nativeOnly = {
|
|
|
28
29
|
suppressHighlighting: PropTypes.bool,
|
|
29
30
|
textBreakStrategy: PropTypes.string
|
|
30
31
|
};
|
|
32
|
+
|
|
31
33
|
/**
|
|
32
34
|
* These set HTML attributes of the same name.
|
|
33
35
|
*/
|
|
34
|
-
|
|
35
36
|
const webOnly = {
|
|
36
37
|
dir: PropTypes.oneOf(['auto', 'ltr', 'rtl']),
|
|
37
38
|
lang: PropTypes.string
|
|
@@ -41,16 +42,17 @@ export default {
|
|
|
41
42
|
* Set of prop types specific to React Native and React Native Web `Text`,
|
|
42
43
|
* which largely revolve around the behaviour of multiline non-pressable text.
|
|
43
44
|
*/
|
|
44
|
-
types: {
|
|
45
|
+
types: {
|
|
46
|
+
...crossPlatform,
|
|
45
47
|
...webOnly,
|
|
46
48
|
...nativeOnly
|
|
47
49
|
},
|
|
48
|
-
|
|
49
50
|
/**
|
|
50
51
|
* Filters a props object, returning only props specific to `Text` elements
|
|
51
52
|
* on the current platform. Does not include props applicable to `Text` and `View`.
|
|
52
53
|
*/
|
|
53
|
-
select: getPropSelector({
|
|
54
|
+
select: getPropSelector({
|
|
55
|
+
...crossPlatform,
|
|
54
56
|
...Platform.select({
|
|
55
57
|
web: webOnly,
|
|
56
58
|
default: nativeOnly
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import PropTypes from 'prop-types';
|
|
2
|
-
import { components as tokenKeys } from '@telus-uds/system-theme-tokens';
|
|
2
|
+
import { components as tokenKeys } from '@telus-uds/system-theme-tokens';
|
|
3
|
+
|
|
4
|
+
// Tokens can be primitive values (e.g. `'rgba(0,0,0,0'`, `12`), or objects of such values,
|
|
3
5
|
// such as tokens that describe shadow (e.g. shadow: { inset: true, color: 'rgba(...)' ... }),
|
|
4
6
|
// or components (e.g. Icon tokens)
|
|
5
|
-
|
|
6
7
|
const tokenValue = PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.bool, PropTypes.elementType]);
|
|
7
8
|
const tokenValueType = PropTypes.oneOfType([tokenValue, PropTypes.objectOf(tokenValue)]);
|
|
8
9
|
export const getTokenNames = componentName => {
|
|
9
10
|
const componentTokenSchema = tokenKeys[componentName];
|
|
10
|
-
|
|
11
11
|
if (!componentTokenSchema) {
|
|
12
12
|
throw new Error(`No "${componentName}" tokenKeys in @telus-uds/system-theme-tokens`);
|
|
13
13
|
}
|
|
14
|
-
|
|
15
14
|
return Object.keys(componentTokenSchema);
|
|
16
15
|
};
|
|
16
|
+
|
|
17
17
|
/**
|
|
18
18
|
* Returns the subset of a set of tokens that may be accepted by the `tokens` prop of a named component
|
|
19
19
|
* or by a provided array of tokens. A prefix may be provided, for example:
|
|
@@ -43,25 +43,25 @@ export const getTokenNames = componentName => {
|
|
|
43
43
|
* @param {string} [prefix] - if provided, matches keys in the source object with this as the first camelCase item
|
|
44
44
|
* @returns {object} - subset of theme tokens
|
|
45
45
|
*/
|
|
46
|
-
|
|
47
46
|
export const selectTokens = (specifier, tokens, prefix) => {
|
|
48
47
|
const tokenNames = typeof specifier === 'string' ? getTokenNames(specifier) : specifier;
|
|
49
48
|
const filteredTokens = tokenNames.reduce((validTokens, key) => {
|
|
50
49
|
const prefixedKey = prefix ? `${prefix}${key[0].toUpperCase()}${key.slice(1)}` : key;
|
|
51
50
|
const token = tokens[prefixedKey];
|
|
52
|
-
return token !== undefined ? {
|
|
51
|
+
return token !== undefined ? {
|
|
52
|
+
...validTokens,
|
|
53
53
|
[key]: token
|
|
54
54
|
} : validTokens;
|
|
55
55
|
}, {});
|
|
56
56
|
return filteredTokens;
|
|
57
57
|
};
|
|
58
|
+
|
|
58
59
|
/**
|
|
59
60
|
* @typedef {string|number|boolean|{[key: string]:string|number|boolean}} TokenValue
|
|
60
61
|
* @typedef {{[key: string]: TokenValue}} TokensSet
|
|
61
62
|
* @typedef {(AppearanceSet) => TokensSet} TokensGetter
|
|
62
63
|
* @typedef {TokensSet|TokensGetter} TokensProp
|
|
63
64
|
*/
|
|
64
|
-
|
|
65
65
|
/**
|
|
66
66
|
* 'tokens' is an optional object prop on all themable components. Its keys must match the
|
|
67
67
|
* token keys in the component's theme schema.
|
|
@@ -83,17 +83,14 @@ export const selectTokens = (specifier, tokens, prefix) => {
|
|
|
83
83
|
* tokens: getTokensPropType('Component1', 'Component2')
|
|
84
84
|
* }
|
|
85
85
|
*/
|
|
86
|
-
|
|
87
86
|
export const getTokensPropType = function () {
|
|
88
87
|
for (var _len = arguments.length, componentsNames = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
89
88
|
componentsNames[_key] = arguments[_key];
|
|
90
89
|
}
|
|
91
|
-
|
|
92
90
|
return (props, propName, componentName) => {
|
|
93
91
|
PropTypes.checkPropTypes({
|
|
94
92
|
[propName]: PropTypes.oneOfType([PropTypes.object, PropTypes.func])
|
|
95
93
|
}, props, propName, componentName);
|
|
96
|
-
|
|
97
94
|
if (typeof props[propName] !== 'function') {
|
|
98
95
|
PropTypes.checkPropTypes({
|
|
99
96
|
[propName]: PropTypes.exact(Object.fromEntries(componentsNames.flatMap(component => getTokenNames(component).map(key => [key, tokenValueType]))))
|
|
@@ -101,6 +98,7 @@ export const getTokensPropType = function () {
|
|
|
101
98
|
}
|
|
102
99
|
};
|
|
103
100
|
};
|
|
101
|
+
|
|
104
102
|
/**
|
|
105
103
|
* Get a proptypes validator for a set of tokens that is not based on a component in the theme schema.
|
|
106
104
|
*
|
|
@@ -115,18 +113,17 @@ export const getTokensPropType = function () {
|
|
|
115
113
|
* @param {boolean} [options.allowFunction] - if true, allows functions as well as tokens objects
|
|
116
114
|
* @returns
|
|
117
115
|
*/
|
|
118
|
-
|
|
119
116
|
export const getTokensSetPropType = function (componentTokenKeys) {
|
|
120
117
|
let {
|
|
121
118
|
partial = false,
|
|
122
119
|
allowFunction = false
|
|
123
120
|
} = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
124
|
-
const tokensObjectValidator = PropTypes.exact(Object.fromEntries(componentTokenKeys.map(key => [key, partial ? tokenValueType :
|
|
121
|
+
const tokensObjectValidator = PropTypes.exact(Object.fromEntries(componentTokenKeys.map(key => [key, partial ? tokenValueType :
|
|
122
|
+
// Some theme tokens can validly resolve to `null`, but .isRequired treats null as undefined
|
|
125
123
|
function (props, propName) {
|
|
126
124
|
for (var _len2 = arguments.length, args = new Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {
|
|
127
125
|
args[_key2 - 2] = arguments[_key2];
|
|
128
126
|
}
|
|
129
|
-
|
|
130
127
|
return props[propName] !== null && tokenValueType.isRequired(props, propName, ...args);
|
|
131
128
|
}])));
|
|
132
129
|
return allowFunction ? PropTypes.oneOfType([tokensObjectValidator, PropTypes.func]) : tokensObjectValidator;
|
package/lib-module/utils/ssr.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import AppRegistry from "react-native-web/dist/exports/AppRegistry";
|
|
3
3
|
/** @typedef {import('react').ComponentType} ReactComponent */
|
|
4
|
-
|
|
5
4
|
/** @typedef {import('react').ReactElement} ReactElement */
|
|
6
|
-
|
|
7
5
|
/**
|
|
8
6
|
* Returns object with `renderApp` and `getStyles` functions.
|
|
9
7
|
* Weave these into your app's server-side render process:
|
|
@@ -19,7 +17,6 @@ import AppRegistry from "react-native-web/dist/exports/AppRegistry";
|
|
|
19
17
|
* @param {boolean} [options.styleGetters]
|
|
20
18
|
* @param {(ReactElement) => ReactElement} [options.collectStyles]
|
|
21
19
|
*/
|
|
22
|
-
|
|
23
20
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
24
21
|
export const ssrStyles = function () {
|
|
25
22
|
let appName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'UDS app';
|
|
@@ -48,8 +45,8 @@ export const ssrStyles = function () {
|
|
|
48
45
|
renderedByRNW = false,
|
|
49
46
|
WrapperComponent
|
|
50
47
|
} = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
51
|
-
AppRegistry.registerComponent(appName, () => App);
|
|
52
|
-
|
|
48
|
+
AppRegistry.registerComponent(appName, () => App);
|
|
49
|
+
// AppRegistry.getApplication renders the app in a container, and collects styles.
|
|
53
50
|
const {
|
|
54
51
|
element,
|
|
55
52
|
getStyleElement
|
|
@@ -57,33 +54,32 @@ export const ssrStyles = function () {
|
|
|
57
54
|
WrapperComponent,
|
|
58
55
|
initialProps: props
|
|
59
56
|
});
|
|
60
|
-
let renderedApp =
|
|
57
|
+
let renderedApp =
|
|
58
|
+
// React Native Web's AppRegistry.getApplication assumes the app is rendered using
|
|
61
59
|
// AppRegistry.runApplication and wraps it in <AppContainer>, which wraps the entire app
|
|
62
60
|
// in two outer containers resembling <View style={{ flex: 1 }} pointerEvents="box-none">.
|
|
63
61
|
// So, use that IF user says AppRegistry.runApplication will do the client-side render.
|
|
64
|
-
renderedByRNW && element ||
|
|
62
|
+
renderedByRNW && element ||
|
|
63
|
+
// If the live app is not rendered using AppRegistry.runApplication, we need to
|
|
65
64
|
// re-render it without the <AppContainer> wrapper, to avoid SSR mismatch errors.
|
|
66
65
|
// Default to this as many platforms (e.g. NextJS) will use their own renderers.
|
|
67
66
|
WrapperComponent ? /*#__PURE__*/_jsx(WrapperComponent, {
|
|
68
|
-
children: /*#__PURE__*/_jsx(App, {
|
|
67
|
+
children: /*#__PURE__*/_jsx(App, {
|
|
68
|
+
...props
|
|
69
69
|
})
|
|
70
|
-
}) : /*#__PURE__*/_jsx(App, {
|
|
70
|
+
}) : /*#__PURE__*/_jsx(App, {
|
|
71
|
+
...props
|
|
71
72
|
});
|
|
72
|
-
|
|
73
73
|
const getRNWStyle = () => getStyleElement({
|
|
74
74
|
key: 'react-native-stylesheet'
|
|
75
75
|
});
|
|
76
|
-
|
|
77
76
|
styleGetters.push(getRNWStyle);
|
|
78
|
-
|
|
79
77
|
if (typeof collectStyles === 'function') {
|
|
80
78
|
renderedApp = collectStyles(renderedApp);
|
|
81
79
|
}
|
|
82
|
-
|
|
83
80
|
hasAppRendered = true;
|
|
84
81
|
return renderedApp;
|
|
85
82
|
},
|
|
86
|
-
|
|
87
83
|
/**
|
|
88
84
|
* Turns styles collected during renderApp into an array of React elements of
|
|
89
85
|
* HTML <style> tags ready for insertion into the SSR HTML's <head>.
|
|
@@ -95,16 +91,15 @@ export const ssrStyles = function () {
|
|
|
95
91
|
*/
|
|
96
92
|
getStyles: function () {
|
|
97
93
|
if (!hasAppRendered) throw new Error('Called getStyles before renderApp in ssrStyles');
|
|
98
|
-
|
|
99
94
|
for (var _len = arguments.length, existingStyles = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
100
95
|
existingStyles[_key] = arguments[_key];
|
|
101
96
|
}
|
|
102
|
-
|
|
103
97
|
return [...existingStyles, ...styleGetters.flatMap(getter => getter())];
|
|
104
98
|
}
|
|
105
99
|
};
|
|
106
100
|
};
|
|
107
101
|
export default ssrStyles;
|
|
102
|
+
|
|
108
103
|
/**
|
|
109
104
|
* @deprecated - use ssrStyles instead
|
|
110
105
|
*
|
|
@@ -124,6 +119,7 @@ export const getReactNativeWebSSRStyles = function (AppRoot) {
|
|
|
124
119
|
} = AppRegistry.getApplication(appName);
|
|
125
120
|
return [getStyleElement()];
|
|
126
121
|
};
|
|
122
|
+
|
|
127
123
|
/**
|
|
128
124
|
* @deprecated - use ssrStyles instead
|
|
129
125
|
*
|
|
@@ -135,10 +131,10 @@ export const getReactNativeWebSSRStyles = function (AppRoot) {
|
|
|
135
131
|
* @param {ReactElement[]} [existingStyles]
|
|
136
132
|
* @returns {ReactElement[]}
|
|
137
133
|
*/
|
|
138
|
-
|
|
139
134
|
export const getSSRStyles = function (AppRoot) {
|
|
140
135
|
let appName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'app';
|
|
141
136
|
let existingStyles = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
142
|
-
return [...existingStyles, ...getReactNativeWebSSRStyles(AppRoot, appName)
|
|
137
|
+
return [...existingStyles, ...getReactNativeWebSSRStyles(AppRoot, appName)
|
|
138
|
+
// if any other CSS-in-JS is added e.g. styled-components generate and add its styles here
|
|
143
139
|
];
|
|
144
140
|
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export const DEFAULT_COPY = 'en';
|
|
2
|
+
|
|
2
3
|
/**
|
|
3
4
|
* Extract translations from a keyed dictionary for a given language.
|
|
4
5
|
* Returns a getter.
|
|
@@ -26,19 +27,16 @@ export const DEFAULT_COPY = 'en';
|
|
|
26
27
|
* @param {'en'|'fr'|object} copy - language
|
|
27
28
|
* @return {function(string): string}
|
|
28
29
|
*/
|
|
29
|
-
|
|
30
30
|
function useCopy(_ref) {
|
|
31
31
|
let {
|
|
32
32
|
dictionary,
|
|
33
33
|
copy = DEFAULT_COPY
|
|
34
34
|
} = _ref;
|
|
35
|
-
|
|
36
35
|
if (typeof copy === 'string') {
|
|
37
36
|
return key => key ? dictionary[copy][key] : dictionary[copy];
|
|
38
|
-
}
|
|
39
|
-
|
|
37
|
+
}
|
|
40
38
|
|
|
39
|
+
// support overriding the entire copy dictionary with an object for a single language
|
|
41
40
|
return key => copy[key];
|
|
42
41
|
}
|
|
43
|
-
|
|
44
42
|
export default useCopy;
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { useEffect, useState } from 'react';
|
|
2
|
-
|
|
3
2
|
const doAction = (action, event) => {
|
|
4
3
|
var _window, _window$location;
|
|
5
|
-
|
|
6
4
|
return typeof action === 'function' && action((_window = window) === null || _window === void 0 ? void 0 : (_window$location = _window.location) === null || _window$location === void 0 ? void 0 : _window$location.hash, event);
|
|
7
5
|
};
|
|
6
|
+
|
|
8
7
|
/**
|
|
9
8
|
* @typedef {import('react').SyntheticEvent} SyntheticEvent
|
|
10
9
|
*/
|
|
@@ -20,26 +19,23 @@ const doAction = (action, event) => {
|
|
|
20
19
|
* @param {(hash: string, event?: SyntheticEvent) => void} action - a function to act on the current hash on load and when it changes
|
|
21
20
|
* @returns
|
|
22
21
|
*/
|
|
23
|
-
|
|
24
|
-
|
|
25
22
|
const useHash = function (action) {
|
|
26
23
|
let isReady = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
27
|
-
const [isDone, setIsDone] = useState(false);
|
|
28
|
-
|
|
24
|
+
const [isDone, setIsDone] = useState(false);
|
|
25
|
+
// Do the action just once when ready after component mount, from hash on page load
|
|
29
26
|
const isToDo = isReady && !isDone;
|
|
30
27
|
useEffect(() => {
|
|
31
28
|
if (isToDo) {
|
|
32
29
|
setIsDone(true);
|
|
33
30
|
doAction(action);
|
|
34
31
|
}
|
|
35
|
-
}, [isToDo, action]);
|
|
32
|
+
}, [isToDo, action]);
|
|
36
33
|
|
|
34
|
+
// Bind the action for each hash change; do re-bind if the function changes.
|
|
37
35
|
useEffect(() => {
|
|
38
36
|
const handleChange = event => doAction(action, event);
|
|
39
|
-
|
|
40
37
|
window.addEventListener('hashchange', handleChange);
|
|
41
38
|
return () => window.removeEventListener('hashchange', handleChange);
|
|
42
39
|
}, [action]);
|
|
43
40
|
};
|
|
44
|
-
|
|
45
41
|
export default useHash;
|