@telus-uds/components-base 1.1.0 → 1.3.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/.turbo/turbo-build.log +8 -0
- package/CHANGELOG.json +38 -0
- package/CHANGELOG.md +35 -2
- package/__fixtures__/Accessible.js +4 -2
- package/__fixtures__/Accessible.native.js +5 -2
- package/__fixtures__/testTheme.js +9 -0
- package/__tests__/ActivityIndicator/ActivityIndicator.test.jsx +35 -0
- package/__tests__/ActivityIndicator/__snapshots__/ActivityIndicator.test.jsx.snap +287 -0
- package/__tests__/FlexGrid/Col.test.jsx +6 -10
- package/__tests__/HorizontalScroll/HorizontalScroll.test.jsx +1 -0
- package/__tests__/ToggleSwitch/ToggleSwitch.test.jsx +10 -0
- package/__tests__/ToggleSwitch/ToggleSwitchGroup.test.jsx +192 -0
- package/__tests__/utils/props.test.js +36 -0
- package/__tests__/utils/semantics.test.jsx +1 -10
- package/babel.config.js +27 -5
- package/component-docs.json +638 -1145
- package/generate-component-docs.js +3 -0
- package/lib/A11yText/index.js +6 -5
- package/lib/ActivityIndicator/Spinner.js +46 -37
- package/lib/ActivityIndicator/Spinner.native.js +26 -15
- package/lib/ActivityIndicator/index.js +3 -3
- package/lib/Box/Box.js +8 -8
- package/lib/Button/Button.js +2 -2
- package/lib/Button/ButtonBase.js +25 -12
- package/lib/Button/ButtonGroup.js +10 -12
- package/lib/Button/ButtonLink.js +4 -4
- package/lib/Button/propTypes.js +4 -2
- package/lib/Card/Card.js +6 -5
- package/lib/Card/CardBase.js +6 -9
- package/lib/Card/PressableCardBase.js +15 -14
- package/lib/Checkbox/Checkbox.js +4 -8
- package/lib/Divider/Divider.js +14 -13
- package/lib/ExpandCollapse/Control.js +7 -7
- package/lib/ExpandCollapse/ExpandCollapse.js +6 -2
- package/lib/ExpandCollapse/Panel.js +6 -7
- package/lib/Feedback/Feedback.js +6 -5
- package/lib/Fieldset/Fieldset.js +1 -3
- package/lib/FlexGrid/FlexGrid.js +4 -4
- package/lib/FlexGrid/helpers/index.js +1 -4
- package/lib/HorizontalScroll/HorizontalScroll.js +5 -6
- package/lib/IconButton/IconButton.js +14 -9
- package/lib/InputLabel/InputLabel.js +7 -2
- package/lib/InputSupports/InputSupports.js +2 -2
- package/lib/Link/LinkBase.js +21 -15
- package/lib/List/List.js +4 -6
- package/lib/List/ListItem.js +6 -2
- package/lib/Modal/Modal.js +6 -2
- package/lib/Notification/Notification.js +7 -2
- package/lib/Pagination/PageButton.js +3 -1
- package/lib/Pagination/Pagination.js +22 -5
- package/lib/Pagination/SideButton.js +3 -1
- package/lib/Progress/Progress.js +5 -4
- package/lib/Progress/ProgressBar.js +8 -7
- package/lib/Radio/Radio.js +4 -8
- package/lib/Radio/RadioButton.js +6 -3
- package/lib/Radio/RadioGroup.js +7 -2
- package/lib/RadioCard/RadioCard.js +4 -4
- package/lib/RadioCard/RadioCardGroup.js +9 -6
- package/lib/Search/Search.js +7 -2
- package/lib/Select/Select.js +10 -9
- package/lib/SideNav/Item.js +7 -7
- package/lib/SideNav/SideNav.js +7 -3
- package/lib/Skeleton/Skeleton.js +6 -2
- package/lib/Spacer/Spacer.js +9 -20
- package/lib/StackView/StackView.js +7 -7
- package/lib/StackView/StackWrapBox.js +6 -7
- package/lib/StackView/StackWrapGap.js +6 -5
- package/lib/StackView/getStackedContent.js +1 -1
- package/lib/StepTracker/Step.js +7 -3
- package/lib/StepTracker/StepTracker.js +7 -7
- package/lib/Tabs/Tabs.js +16 -4
- package/lib/Tabs/TabsItem.js +18 -11
- package/lib/Tags/Tags.js +11 -12
- package/lib/TextInput/TextArea.js +13 -14
- package/lib/TextInput/TextInput.js +13 -14
- package/lib/TextInput/TextInputBase.js +5 -3
- package/lib/ThemeProvider/useThemeTokens.js +3 -3
- package/lib/ThemeProvider/utils/theme-tokens.js +3 -3
- package/lib/ToggleSwitch/ToggleSwitch.js +106 -43
- package/lib/ToggleSwitch/ToggleSwitchGroup.js +228 -0
- package/lib/ToggleSwitch/index.js +14 -4
- package/lib/Tooltip/Tooltip.js +7 -2
- package/lib/TooltipButton/TooltipButton.js +7 -2
- package/lib/Typography/Typography.js +8 -6
- package/lib/index.js +20 -8
- package/lib/utils/a11y/semantics.js +4 -3
- package/lib/utils/children.js +5 -1
- package/lib/utils/index.js +28 -5
- package/lib/utils/pressability.js +2 -2
- package/lib/utils/props/a11yProps.js +153 -0
- package/lib/utils/props/clickProps.js +36 -0
- package/lib/utils/props/componentPropType.js +70 -0
- package/lib/utils/props/copyPropTypes.js +14 -0
- package/lib/utils/props/getPropSelector.js +13 -0
- package/lib/utils/props/hrefAttrsProp.js +41 -0
- package/lib/utils/props/index.js +158 -0
- package/lib/{InputSupports/propTypes.js → utils/props/inputSupportsProps.js} +2 -3
- package/lib/utils/props/linkProps.js +64 -0
- package/lib/utils/props/paddingProp.js +20 -0
- package/lib/utils/props/pressProps.js +57 -0
- package/lib/utils/props/rectProp.js +20 -0
- package/lib/utils/props/responsiveProps.js +40 -0
- package/lib/utils/props/selectSystemProps.js +31 -0
- package/lib/utils/props/spacingProps.js +71 -0
- package/lib/utils/props/tokens.js +145 -0
- package/lib/utils/props/variantProp.js +28 -0
- package/lib/utils/props/viewProps.js +34 -0
- package/lib/utils/ssr.js +51 -0
- package/lib/utils/useResponsiveProp.js +1 -1
- package/lib/utils/useSpacingScale.js +4 -4
- package/lib/utils/withLinkRouter.js +98 -0
- package/lib-module/A11yInfoProvider/index.js +62 -0
- package/lib-module/A11yText/index.js +55 -0
- package/lib-module/ActivityIndicator/Spinner.js +76 -0
- package/lib-module/ActivityIndicator/Spinner.native.js +143 -0
- package/lib-module/ActivityIndicator/index.js +40 -0
- package/lib-module/ActivityIndicator/shared.js +12 -0
- package/lib-module/BaseProvider/index.js +26 -0
- package/lib-module/Box/Box.js +243 -0
- package/lib-module/Box/index.js +2 -0
- package/lib-module/Button/Button.js +25 -0
- package/lib-module/Button/ButtonBase.js +254 -0
- package/lib-module/Button/ButtonGroup.js +164 -0
- package/lib-module/Button/ButtonLink.js +39 -0
- package/lib-module/Button/index.js +4 -0
- package/lib-module/Button/propTypes.js +36 -0
- package/lib-module/Card/Card.js +83 -0
- package/lib-module/Card/CardBase.js +62 -0
- package/lib-module/Card/PressableCardBase.js +113 -0
- package/lib-module/Card/index.js +4 -0
- package/lib-module/Checkbox/Checkbox.js +321 -0
- package/lib-module/Checkbox/CheckboxGroup.js +218 -0
- package/lib-module/Checkbox/CheckboxInput.js +58 -0
- package/lib-module/Checkbox/CheckboxInput.native.js +6 -0
- package/lib-module/Checkbox/index.js +3 -0
- package/lib-module/Divider/Divider.js +123 -0
- package/lib-module/Divider/index.js +2 -0
- package/lib-module/ExpandCollapse/Accordion.js +15 -0
- package/lib-module/ExpandCollapse/Control.js +130 -0
- package/lib-module/ExpandCollapse/ExpandCollapse.js +94 -0
- package/lib-module/ExpandCollapse/Panel.js +158 -0
- package/lib-module/ExpandCollapse/index.js +7 -0
- package/lib-module/Feedback/Feedback.js +144 -0
- package/lib-module/Feedback/index.js +2 -0
- package/lib-module/Fieldset/Fieldset.js +145 -0
- package/lib-module/Fieldset/FieldsetContainer.js +29 -0
- package/lib-module/Fieldset/FieldsetContainer.native.js +20 -0
- package/lib-module/Fieldset/Legend.js +21 -0
- package/lib-module/Fieldset/Legend.native.js +28 -0
- package/lib-module/Fieldset/cssReset.js +14 -0
- package/lib-module/Fieldset/index.js +2 -0
- package/lib-module/FlexGrid/Col/Col.js +265 -0
- package/lib-module/FlexGrid/Col/index.js +2 -0
- package/lib-module/FlexGrid/FlexGrid.js +147 -0
- package/lib-module/FlexGrid/Row/Row.js +177 -0
- package/lib-module/FlexGrid/Row/index.js +2 -0
- package/lib-module/FlexGrid/helpers/index.js +18 -0
- package/lib-module/FlexGrid/index.js +2 -0
- package/lib-module/FlexGrid/providers/GutterContext.js +3 -0
- package/lib-module/HorizontalScroll/HorizontalScroll.js +171 -0
- package/lib-module/HorizontalScroll/HorizontalScrollButton.js +102 -0
- package/lib-module/HorizontalScroll/ScrollViewEnd.js +47 -0
- package/lib-module/HorizontalScroll/ScrollViewEnd.native.js +24 -0
- package/lib-module/HorizontalScroll/dictionary.js +11 -0
- package/lib-module/HorizontalScroll/index.js +11 -0
- package/lib-module/HorizontalScroll/itemPositions.js +106 -0
- package/lib-module/Icon/Icon.js +61 -0
- package/lib-module/Icon/IconText.js +81 -0
- package/lib-module/Icon/index.js +4 -0
- package/lib-module/IconButton/IconButton.js +115 -0
- package/lib-module/IconButton/index.js +2 -0
- package/lib-module/InputLabel/InputLabel.js +131 -0
- package/lib-module/InputLabel/LabelContent.js +24 -0
- package/lib-module/InputLabel/LabelContent.native.js +16 -0
- package/lib-module/InputLabel/index.js +2 -0
- package/lib-module/InputSupports/InputSupports.js +88 -0
- package/lib-module/InputSupports/index.js +2 -0
- package/lib-module/InputSupports/useInputSupports.js +31 -0
- package/lib-module/Link/ChevronLink.js +51 -0
- package/lib-module/Link/InlinePressable.js +37 -0
- package/lib-module/Link/InlinePressable.native.js +85 -0
- package/lib-module/Link/Link.js +27 -0
- package/lib-module/Link/LinkBase.js +210 -0
- package/lib-module/Link/TextButton.js +43 -0
- package/lib-module/Link/index.js +5 -0
- package/lib-module/List/List.js +55 -0
- package/lib-module/List/ListItem.js +213 -0
- package/lib-module/List/index.js +5 -0
- package/lib-module/Modal/Modal.js +208 -0
- package/lib-module/Modal/dictionary.js +9 -0
- package/lib-module/Modal/index.js +2 -0
- package/lib-module/Notification/Notification.js +196 -0
- package/lib-module/Notification/dictionary.js +8 -0
- package/lib-module/Notification/index.js +2 -0
- package/lib-module/Pagination/PageButton.js +65 -0
- package/lib-module/Pagination/Pagination.js +140 -0
- package/lib-module/Pagination/SideButton.js +103 -0
- package/lib-module/Pagination/dictionary.js +18 -0
- package/lib-module/Pagination/index.js +2 -0
- package/lib-module/Pagination/usePagination.js +72 -0
- package/lib-module/Progress/Progress.js +85 -0
- package/lib-module/Progress/ProgressBar.js +134 -0
- package/lib-module/Progress/ProgressBarBackground.js +41 -0
- package/lib-module/Progress/index.js +4 -0
- package/lib-module/Radio/Radio.js +263 -0
- package/lib-module/Radio/RadioButton.js +128 -0
- package/lib-module/Radio/RadioGroup.js +225 -0
- package/lib-module/Radio/RadioInput.js +60 -0
- package/lib-module/Radio/RadioInput.native.js +6 -0
- package/lib-module/Radio/index.js +3 -0
- package/lib-module/RadioCard/RadioCard.js +218 -0
- package/lib-module/RadioCard/RadioCardGroup.js +232 -0
- package/lib-module/RadioCard/index.js +3 -0
- package/lib-module/Search/Search.js +233 -0
- package/lib-module/Search/dictionary.js +12 -0
- package/lib-module/Search/index.js +2 -0
- package/lib-module/Select/Group.js +20 -0
- package/lib-module/Select/Group.native.js +14 -0
- package/lib-module/Select/Item.js +17 -0
- package/lib-module/Select/Item.native.js +9 -0
- package/lib-module/Select/Picker.js +67 -0
- package/lib-module/Select/Picker.native.js +110 -0
- package/lib-module/Select/Select.js +317 -0
- package/lib-module/Select/index.js +6 -0
- package/lib-module/SideNav/Item.js +139 -0
- package/lib-module/SideNav/ItemContent.js +45 -0
- package/lib-module/SideNav/ItemsGroup.js +115 -0
- package/lib-module/SideNav/SideNav.js +133 -0
- package/lib-module/SideNav/index.js +1 -0
- package/lib-module/Skeleton/Skeleton.js +117 -0
- package/lib-module/Skeleton/index.js +2 -0
- package/lib-module/Skeleton/skeleton.constant.js +3 -0
- package/lib-module/Skeleton/skeletonWebAnimation.js +18 -0
- package/lib-module/Skeleton/useSkeletonNativeAnimation.js +24 -0
- package/lib-module/Spacer/Spacer.js +97 -0
- package/lib-module/Spacer/index.js +2 -0
- package/lib-module/StackView/StackView.js +124 -0
- package/lib-module/StackView/StackWrap.js +48 -0
- package/lib-module/StackView/StackWrap.native.js +3 -0
- package/lib-module/StackView/StackWrapBox.js +114 -0
- package/lib-module/StackView/StackWrapGap.js +58 -0
- package/lib-module/StackView/common.js +32 -0
- package/lib-module/StackView/getStackedContent.js +123 -0
- package/lib-module/StackView/index.js +5 -0
- package/lib-module/StepTracker/Step.js +229 -0
- package/lib-module/StepTracker/StepTracker.js +175 -0
- package/lib-module/StepTracker/dictionary.js +10 -0
- package/lib-module/StepTracker/index.js +2 -0
- package/lib-module/Tabs/Tabs.js +113 -0
- package/lib-module/Tabs/TabsItem.js +215 -0
- package/lib-module/Tabs/index.js +2 -0
- package/lib-module/Tags/Tags.js +238 -0
- package/lib-module/Tags/index.js +2 -0
- package/lib-module/TextInput/TextArea.js +88 -0
- package/lib-module/TextInput/TextInput.js +60 -0
- package/lib-module/TextInput/TextInputBase.js +233 -0
- package/lib-module/TextInput/index.js +3 -0
- package/lib-module/TextInput/propTypes.js +31 -0
- package/lib-module/ThemeProvider/ThemeProvider.js +35 -0
- package/lib-module/ThemeProvider/index.js +6 -0
- package/lib-module/ThemeProvider/useSetTheme.js +22 -0
- package/lib-module/ThemeProvider/useTheme.js +14 -0
- package/lib-module/ThemeProvider/useThemeTokens.js +105 -0
- package/lib-module/ThemeProvider/utils/index.js +2 -0
- package/lib-module/ThemeProvider/utils/styles.js +174 -0
- package/lib-module/ThemeProvider/utils/theme-tokens.js +151 -0
- package/lib-module/ToggleSwitch/ToggleSwitch.js +224 -0
- package/lib-module/ToggleSwitch/ToggleSwitchGroup.js +202 -0
- package/lib-module/ToggleSwitch/index.js +3 -0
- package/lib-module/Tooltip/Backdrop.js +52 -0
- package/lib-module/Tooltip/Backdrop.native.js +43 -0
- package/lib-module/Tooltip/Tooltip.js +332 -0
- package/lib-module/Tooltip/dictionary.js +8 -0
- package/lib-module/Tooltip/getTooltipPosition.js +164 -0
- package/lib-module/Tooltip/index.js +2 -0
- package/lib-module/TooltipButton/TooltipButton.js +71 -0
- package/lib-module/TooltipButton/index.js +2 -0
- package/lib-module/Typography/Typography.js +118 -0
- package/lib-module/Typography/index.js +2 -0
- package/lib-module/ViewportProvider/ViewportProvider.js +28 -0
- package/lib-module/ViewportProvider/index.js +3 -0
- package/lib-module/ViewportProvider/useViewport.js +3 -0
- package/lib-module/ViewportProvider/useViewportListener.js +43 -0
- package/lib-module/index.js +48 -0
- package/lib-module/utils/a11y/index.js +2 -0
- package/lib-module/utils/a11y/semantics.js +154 -0
- package/lib-module/utils/a11y/textSize.js +34 -0
- package/lib-module/utils/animation/index.js +2 -0
- package/lib-module/utils/animation/useVerticalExpandAnimation.js +49 -0
- package/lib-module/utils/children.js +118 -0
- package/lib-module/utils/index.js +15 -0
- package/lib-module/utils/info/index.js +7 -0
- package/lib-module/utils/info/platform/index.js +11 -0
- package/lib-module/utils/info/platform/platform.android.js +1 -0
- package/lib-module/utils/info/platform/platform.ios.js +1 -0
- package/lib-module/utils/info/platform/platform.js +1 -0
- package/lib-module/utils/info/platform/platform.native.js +4 -0
- package/lib-module/utils/info/versions.js +5 -0
- package/lib-module/utils/input.js +180 -0
- package/lib-module/utils/pressability.js +97 -0
- package/lib-module/utils/props/a11yProps.js +140 -0
- package/lib-module/utils/props/clickProps.js +25 -0
- package/lib-module/utils/props/componentPropType.js +63 -0
- package/lib-module/utils/props/copyPropTypes.js +2 -0
- package/lib-module/utils/props/getPropSelector.js +6 -0
- package/lib-module/utils/props/hrefAttrsProp.js +30 -0
- package/lib-module/utils/props/index.js +16 -0
- package/lib-module/utils/props/inputSupportsProps.js +54 -0
- package/lib-module/utils/props/linkProps.js +47 -0
- package/lib-module/utils/props/paddingProp.js +9 -0
- package/lib-module/utils/props/pressProps.js +42 -0
- package/lib-module/utils/props/rectProp.js +9 -0
- package/lib-module/utils/props/responsiveProps.js +30 -0
- package/lib-module/utils/props/selectSystemProps.js +24 -0
- package/lib-module/utils/props/spacingProps.js +56 -0
- package/lib-module/utils/props/tokens.js +120 -0
- package/lib-module/utils/props/variantProp.js +18 -0
- package/lib-module/utils/props/viewProps.js +22 -0
- package/lib-module/utils/ssr.js +35 -0
- package/lib-module/utils/useCopy.js +42 -0
- package/lib-module/utils/useHash.js +44 -0
- package/lib-module/utils/useHash.native.js +7 -0
- package/lib-module/utils/useResponsiveProp.js +47 -0
- package/lib-module/utils/useSpacingScale.js +123 -0
- package/lib-module/utils/useUniqueId.js +12 -0
- package/lib-module/utils/withLinkRouter.js +82 -0
- package/package.json +9 -5
- package/src/A11yText/index.jsx +7 -3
- package/src/ActivityIndicator/Spinner.jsx +56 -44
- package/src/ActivityIndicator/Spinner.native.jsx +20 -12
- package/src/ActivityIndicator/index.jsx +1 -1
- package/src/Box/Box.jsx +15 -13
- package/src/Button/Button.jsx +1 -1
- package/src/Button/ButtonBase.jsx +20 -12
- package/src/Button/ButtonGroup.jsx +17 -8
- package/src/Button/ButtonLink.jsx +1 -1
- package/src/Button/propTypes.js +2 -1
- package/src/Card/Card.jsx +7 -4
- package/src/Card/CardBase.jsx +6 -5
- package/src/Card/PressableCardBase.jsx +16 -14
- package/src/Checkbox/Checkbox.jsx +12 -7
- package/src/Divider/Divider.jsx +19 -12
- package/src/ExpandCollapse/Control.jsx +12 -7
- package/src/ExpandCollapse/ExpandCollapse.jsx +13 -3
- package/src/ExpandCollapse/Panel.jsx +15 -5
- package/src/Feedback/Feedback.jsx +13 -3
- package/src/Fieldset/Fieldset.jsx +1 -1
- package/src/FlexGrid/FlexGrid.jsx +11 -5
- package/src/FlexGrid/helpers/index.js +1 -3
- package/src/HorizontalScroll/HorizontalScroll.jsx +12 -5
- package/src/IconButton/IconButton.jsx +18 -12
- package/src/InputLabel/InputLabel.jsx +16 -2
- package/src/InputSupports/InputSupports.jsx +1 -1
- package/src/Link/LinkBase.jsx +15 -12
- package/src/List/List.jsx +12 -5
- package/src/List/ListItem.jsx +16 -2
- package/src/Modal/Modal.jsx +63 -50
- package/src/Notification/Notification.jsx +17 -3
- package/src/Pagination/PageButton.jsx +3 -2
- package/src/Pagination/Pagination.jsx +38 -4
- package/src/Pagination/SideButton.jsx +2 -2
- package/src/Progress/Progress.jsx +5 -3
- package/src/Progress/ProgressBar.jsx +8 -6
- package/src/Radio/Radio.jsx +13 -7
- package/src/Radio/RadioButton.jsx +13 -3
- package/src/Radio/RadioGroup.jsx +14 -2
- package/src/RadioCard/RadioCard.jsx +9 -6
- package/src/RadioCard/RadioCardGroup.jsx +16 -4
- package/src/Search/Search.jsx +15 -3
- package/src/Select/Select.jsx +21 -7
- package/src/SideNav/Item.jsx +15 -7
- package/src/SideNav/SideNav.jsx +13 -2
- package/src/Skeleton/Skeleton.jsx +55 -43
- package/src/Spacer/Spacer.jsx +10 -18
- package/src/StackView/StackView.jsx +13 -12
- package/src/StackView/StackWrapBox.jsx +12 -12
- package/src/StackView/StackWrapGap.jsx +9 -7
- package/src/StackView/getStackedContent.jsx +1 -1
- package/src/StepTracker/Step.jsx +7 -4
- package/src/StepTracker/StepTracker.jsx +8 -8
- package/src/Tabs/Tabs.jsx +63 -23
- package/src/Tabs/TabsItem.jsx +22 -14
- package/src/Tags/Tags.jsx +16 -7
- package/src/TextInput/TextArea.jsx +20 -8
- package/src/TextInput/TextInput.jsx +20 -8
- package/src/TextInput/TextInputBase.jsx +13 -3
- package/src/ThemeProvider/useThemeTokens.js +3 -3
- package/src/ThemeProvider/utils/theme-tokens.js +3 -3
- package/src/ToggleSwitch/ToggleSwitch.jsx +104 -41
- package/src/ToggleSwitch/ToggleSwitchGroup.jsx +211 -0
- package/src/ToggleSwitch/index.js +2 -1
- package/src/Tooltip/Tooltip.jsx +13 -3
- package/src/TooltipButton/TooltipButton.jsx +6 -4
- package/src/Typography/Typography.jsx +10 -6
- package/src/index.js +2 -2
- package/src/utils/a11y/semantics.js +3 -2
- package/src/utils/children.jsx +2 -1
- package/src/utils/index.js +3 -1
- package/src/utils/pressability.js +1 -1
- package/src/utils/props/a11yProps.js +151 -0
- package/src/utils/props/clickProps.js +31 -0
- package/src/utils/props/componentPropType.js +67 -0
- package/src/utils/props/copyPropTypes.js +3 -0
- package/src/utils/props/getPropSelector.js +14 -0
- package/src/utils/props/hrefAttrsProp.js +25 -0
- package/src/utils/props/index.js +16 -0
- package/src/{InputSupports/propTypes.js → utils/props/inputSupportsProps.js} +2 -4
- package/src/utils/props/linkProps.js +43 -0
- package/src/utils/props/paddingProp.js +10 -0
- package/src/utils/props/pressProps.js +45 -0
- package/src/utils/props/rectProp.js +10 -0
- package/src/utils/props/responsiveProps.js +30 -0
- package/src/utils/props/selectSystemProps.js +25 -0
- package/src/utils/props/spacingProps.js +58 -0
- package/src/utils/props/tokens.js +150 -0
- package/src/utils/props/variantProp.js +20 -0
- package/src/utils/props/viewProps.js +23 -0
- package/src/utils/ssr.js +35 -0
- package/src/utils/useResponsiveProp.js +1 -1
- package/src/utils/useSpacingScale.js +4 -4
- package/src/utils/withLinkRouter.jsx +68 -0
- package/stories/TextInput/TextArea.stories.jsx +1 -0
- package/stories/ToggleSwitch/ToggleSwitch.stories.jsx +5 -1
- package/stories/ToggleSwitch/ToggleSwitchGroup.stories.jsx +81 -0
- package/.ultra.cache.json +0 -1
- package/lib/utils/a11y/propTypes.js +0 -61
- package/lib/utils/a11y/propTypes.native.js +0 -47
- package/lib/utils/propTypes.js +0 -541
- package/release-context.json +0 -7
- package/src/utils/a11y/propTypes.js +0 -61
- package/src/utils/a11y/propTypes.native.js +0 -39
- package/src/utils/propTypes.js +0 -531
package/src/Link/LinkBase.jsx
CHANGED
|
@@ -3,17 +3,23 @@ import PropTypes from 'prop-types'
|
|
|
3
3
|
import { Text, Platform, StyleSheet } from 'react-native'
|
|
4
4
|
import {
|
|
5
5
|
a11yProps,
|
|
6
|
+
clickProps,
|
|
7
|
+
getTokensPropType,
|
|
6
8
|
hrefAttrsProp,
|
|
7
|
-
variantProp,
|
|
8
9
|
linkProps,
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
selectSystemProps,
|
|
11
|
+
variantProp,
|
|
12
|
+
viewProps
|
|
13
|
+
} from '../utils/props'
|
|
11
14
|
import { resolvePressableTokens } from '../utils/pressability'
|
|
15
|
+
import { withLinkRouter } from '../utils'
|
|
12
16
|
|
|
13
17
|
import InlinePressable from './InlinePressable'
|
|
14
18
|
import { applyTextStyles, applyOuterBorder } from '../ThemeProvider'
|
|
15
19
|
import { IconText, iconComponentPropTypes } from '../Icon'
|
|
16
20
|
|
|
21
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, linkProps, viewProps])
|
|
22
|
+
|
|
17
23
|
const selectOuterBorderStyles = ({
|
|
18
24
|
outerBorderColor,
|
|
19
25
|
outerBorderWidth,
|
|
@@ -92,7 +98,6 @@ const LinkBase = forwardRef(
|
|
|
92
98
|
(
|
|
93
99
|
{
|
|
94
100
|
href,
|
|
95
|
-
onPress,
|
|
96
101
|
icon,
|
|
97
102
|
iconPosition = icon ? 'left' : undefined,
|
|
98
103
|
iconProps,
|
|
@@ -100,13 +105,13 @@ const LinkBase = forwardRef(
|
|
|
100
105
|
tokens = {},
|
|
101
106
|
children,
|
|
102
107
|
accessibilityRole = 'link',
|
|
103
|
-
|
|
104
|
-
...props
|
|
108
|
+
...rawRest
|
|
105
109
|
},
|
|
106
110
|
ref
|
|
107
111
|
) => {
|
|
112
|
+
const { onPress, ...props } = clickProps.toPressProps(rawRest)
|
|
108
113
|
const { hrefAttrs, rest } = hrefAttrsProp.bundle(props)
|
|
109
|
-
const
|
|
114
|
+
const selectedProps = selectProps({
|
|
110
115
|
accessibilityRole,
|
|
111
116
|
href,
|
|
112
117
|
onPress: linkProps.handleHref({ href, onPress }),
|
|
@@ -122,9 +127,8 @@ const LinkBase = forwardRef(
|
|
|
122
127
|
|
|
123
128
|
return (
|
|
124
129
|
<InlinePressable
|
|
125
|
-
{...
|
|
130
|
+
{...selectedProps}
|
|
126
131
|
ref={ref}
|
|
127
|
-
dataSet={dataSet}
|
|
128
132
|
style={(linkState) => {
|
|
129
133
|
const themeTokens = resolveLinkTokens(linkState)
|
|
130
134
|
const outerBorderStyles = selectOuterBorderStyles(themeTokens)
|
|
@@ -162,8 +166,7 @@ const LinkBase = forwardRef(
|
|
|
162
166
|
LinkBase.displayName = 'LinkBase'
|
|
163
167
|
|
|
164
168
|
LinkBase.propTypes = {
|
|
165
|
-
...
|
|
166
|
-
...linkProps.types,
|
|
169
|
+
...selectedSystemPropTypes,
|
|
167
170
|
tokens: getTokensPropType('Link'),
|
|
168
171
|
variant: variantProp.propType,
|
|
169
172
|
/**
|
|
@@ -200,4 +203,4 @@ const staticStyles = StyleSheet.create({
|
|
|
200
203
|
}
|
|
201
204
|
})
|
|
202
205
|
|
|
203
|
-
export default LinkBase
|
|
206
|
+
export default withLinkRouter(LinkBase)
|
package/src/List/List.jsx
CHANGED
|
@@ -1,17 +1,24 @@
|
|
|
1
1
|
import React, { cloneElement, forwardRef, Children } from 'react'
|
|
2
2
|
import { View, Platform } from 'react-native'
|
|
3
3
|
import PropTypes from 'prop-types'
|
|
4
|
-
import {
|
|
5
|
-
|
|
4
|
+
import {
|
|
5
|
+
a11yProps,
|
|
6
|
+
componentPropType,
|
|
7
|
+
getTokensPropType,
|
|
8
|
+
selectSystemProps,
|
|
9
|
+
variantProp,
|
|
10
|
+
viewProps
|
|
11
|
+
} from '../utils'
|
|
6
12
|
import ListItem from './ListItem'
|
|
7
13
|
|
|
14
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
15
|
+
|
|
8
16
|
/**
|
|
9
17
|
* An unordered List component has a child a ListItem that
|
|
10
18
|
* allows icon, dividers and customized typography
|
|
11
19
|
*/
|
|
12
20
|
const List = forwardRef(({ children, showDivider, tokens, variant, ...rest }, ref) => {
|
|
13
21
|
const accessibilityRole = Platform.select({ web: 'list', default: 'none' })
|
|
14
|
-
const a11y = a11yProps.select(rest)
|
|
15
22
|
const items = Children.map(children, (child, index) => {
|
|
16
23
|
if (child.type.name === ListItem.name) {
|
|
17
24
|
return cloneElement(child, {
|
|
@@ -25,7 +32,7 @@ const List = forwardRef(({ children, showDivider, tokens, variant, ...rest }, re
|
|
|
25
32
|
})
|
|
26
33
|
|
|
27
34
|
return (
|
|
28
|
-
<View ref={ref} accessibilityRole={accessibilityRole} {...
|
|
35
|
+
<View ref={ref} accessibilityRole={accessibilityRole} {...selectProps(rest)}>
|
|
29
36
|
{items}
|
|
30
37
|
</View>
|
|
31
38
|
)
|
|
@@ -33,7 +40,7 @@ const List = forwardRef(({ children, showDivider, tokens, variant, ...rest }, re
|
|
|
33
40
|
List.displayName = 'List'
|
|
34
41
|
|
|
35
42
|
List.propTypes = {
|
|
36
|
-
...
|
|
43
|
+
...selectedSystemPropTypes,
|
|
37
44
|
tokens: getTokensPropType('List'),
|
|
38
45
|
variant: variantProp.propType,
|
|
39
46
|
children: componentPropType('ListItem'),
|
package/src/List/ListItem.jsx
CHANGED
|
@@ -2,7 +2,16 @@ import React, { forwardRef } from 'react'
|
|
|
2
2
|
import { View, Platform, StyleSheet } from 'react-native'
|
|
3
3
|
import PropTypes from 'prop-types'
|
|
4
4
|
import { useThemeTokens, applyTextStyles } from '../ThemeProvider'
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
a11yProps,
|
|
7
|
+
getTokensPropType,
|
|
8
|
+
selectSystemProps,
|
|
9
|
+
variantProp,
|
|
10
|
+
viewProps,
|
|
11
|
+
wrapStringsInText
|
|
12
|
+
} from '../utils'
|
|
13
|
+
|
|
14
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
6
15
|
|
|
7
16
|
const selectBulletStyles = ({ itemBulletWidth, itemBulletHeight, itemBulletColor }) => ({
|
|
8
17
|
width: itemBulletWidth,
|
|
@@ -53,7 +62,10 @@ const selectDividerStyles = ({ dividerColor, dividerSize, interItemMarginWithDiv
|
|
|
53
62
|
* ListItem is responsible for rendering icon or a bullet as side item
|
|
54
63
|
*/
|
|
55
64
|
const ListItem = forwardRef(
|
|
56
|
-
(
|
|
65
|
+
(
|
|
66
|
+
{ tokens, variant, icon, iconColor, iconSize, showDivider, children, isLastItem, ...rest },
|
|
67
|
+
ref
|
|
68
|
+
) => {
|
|
57
69
|
const themeTokens = useThemeTokens('List', tokens, variant)
|
|
58
70
|
|
|
59
71
|
const itemStyles = selectItemStyles(themeTokens)
|
|
@@ -118,6 +130,7 @@ const ListItem = forwardRef(
|
|
|
118
130
|
ref={ref}
|
|
119
131
|
style={[staticStyles.itemContainer, getContainerStyle()]}
|
|
120
132
|
accessibilityRole={accessibilityRole}
|
|
133
|
+
{...selectProps(rest)}
|
|
121
134
|
>
|
|
122
135
|
{renderMarker()}
|
|
123
136
|
{renderItem()}
|
|
@@ -137,6 +150,7 @@ const staticStyles = StyleSheet.create({
|
|
|
137
150
|
})
|
|
138
151
|
|
|
139
152
|
ListItem.propTypes = {
|
|
153
|
+
...selectedSystemPropTypes,
|
|
140
154
|
tokens: getTokensPropType('List'),
|
|
141
155
|
variant: variantProp.propType,
|
|
142
156
|
children: PropTypes.node.isRequired,
|
package/src/Modal/Modal.jsx
CHANGED
|
@@ -9,11 +9,21 @@ import {
|
|
|
9
9
|
|
|
10
10
|
import PropTypes from 'prop-types'
|
|
11
11
|
import { applyShadowToken, useThemeTokens } from '../ThemeProvider'
|
|
12
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
a11yProps,
|
|
14
|
+
copyPropTypes,
|
|
15
|
+
getTokensPropType,
|
|
16
|
+
selectSystemProps,
|
|
17
|
+
useCopy,
|
|
18
|
+
variantProp,
|
|
19
|
+
viewProps
|
|
20
|
+
} from '../utils'
|
|
13
21
|
import { useViewport } from '../ViewportProvider'
|
|
14
22
|
import ButtonBase from '../Button/ButtonBase'
|
|
15
23
|
import dictionary from './dictionary'
|
|
16
24
|
|
|
25
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
26
|
+
|
|
17
27
|
const selectContainerStyles = ({
|
|
18
28
|
containerPaddingLeft,
|
|
19
29
|
containerPaddingRight,
|
|
@@ -79,72 +89,75 @@ const selectCloseIconProps = ({ closeIconSize, closeIconColor }) => ({
|
|
|
79
89
|
* - Don’t use modals to reinforce or repeat information already available in the parent page or view
|
|
80
90
|
* - Don’t use modals consecutively
|
|
81
91
|
*/
|
|
82
|
-
const Modal = forwardRef(
|
|
83
|
-
|
|
84
|
-
|
|
92
|
+
const Modal = forwardRef(
|
|
93
|
+
({ children, isOpen, onClose, maxWidth, tokens, variant, copy, ...rest }, ref) => {
|
|
94
|
+
const viewport = useViewport()
|
|
95
|
+
const themeTokens = useThemeTokens('Modal', tokens, variant, { viewport, maxWidth })
|
|
85
96
|
|
|
86
|
-
|
|
97
|
+
const { closeIcon: CloseIconComponent } = themeTokens
|
|
87
98
|
|
|
88
|
-
|
|
89
|
-
|
|
99
|
+
const getCopy = useCopy({ dictionary, copy })
|
|
100
|
+
const closeLabel = getCopy('closeButton')
|
|
90
101
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
102
|
+
const handleClose = () => {
|
|
103
|
+
if (typeof onClose === 'function') onClose()
|
|
104
|
+
}
|
|
94
105
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
106
|
+
const handleKeyUp = (event) => {
|
|
107
|
+
if (event.key === 'Escape') onClose()
|
|
108
|
+
}
|
|
98
109
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
110
|
+
if (!isOpen) {
|
|
111
|
+
return null
|
|
112
|
+
}
|
|
102
113
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
<View
|
|
108
|
-
style={[staticStyles.sizingContainer, selectContainerStyles(themeTokens)]}
|
|
109
|
-
pointerEvents="box-none" // don't capture backdrop press events
|
|
110
|
-
>
|
|
114
|
+
// TODO: replace the close button with IconButton when implemented (https://github.com/telus/universal-design-system/issues/281)
|
|
115
|
+
return (
|
|
116
|
+
<NativeModal transparent {...selectProps(rest)}>
|
|
117
|
+
<View style={[staticStyles.positioningContainer]}>
|
|
111
118
|
<View
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
onKeyUp={handleKeyUp}
|
|
119
|
+
style={[staticStyles.sizingContainer, selectContainerStyles(themeTokens)]}
|
|
120
|
+
pointerEvents="box-none" // don't capture backdrop press events
|
|
115
121
|
>
|
|
116
122
|
<View
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
]}
|
|
123
|
+
ref={ref}
|
|
124
|
+
style={[staticStyles.modal, selectModalStyles(themeTokens)]}
|
|
125
|
+
onKeyUp={handleKeyUp}
|
|
121
126
|
>
|
|
122
|
-
<
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
127
|
+
<View
|
|
128
|
+
style={[
|
|
129
|
+
staticStyles.closeButtonContainer,
|
|
130
|
+
selectCloseButtonContainerStyles(themeTokens)
|
|
131
|
+
]}
|
|
126
132
|
>
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
133
|
+
<ButtonBase
|
|
134
|
+
onPress={handleClose}
|
|
135
|
+
accessibilityRole="button"
|
|
136
|
+
accessibilityLabel={closeLabel}
|
|
137
|
+
>
|
|
138
|
+
{
|
|
139
|
+
// TODO: add close button interactive states after IconButton is done
|
|
140
|
+
() => <CloseIconComponent {...selectCloseIconProps(themeTokens)} />
|
|
141
|
+
}
|
|
142
|
+
</ButtonBase>
|
|
143
|
+
</View>
|
|
144
|
+
{children}
|
|
132
145
|
</View>
|
|
133
|
-
{children}
|
|
134
146
|
</View>
|
|
147
|
+
{/* when a modal becomes open its first focusable element is being automatically focused */}
|
|
148
|
+
{/* and we prefer the close button over backdrop */}
|
|
149
|
+
<TouchableWithoutFeedback onPress={handleClose}>
|
|
150
|
+
<View style={[staticStyles.backdrop, selectBackdropStyles(themeTokens)]} />
|
|
151
|
+
</TouchableWithoutFeedback>
|
|
135
152
|
</View>
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
</TouchableWithoutFeedback>
|
|
141
|
-
</View>
|
|
142
|
-
</NativeModal>
|
|
143
|
-
)
|
|
144
|
-
})
|
|
153
|
+
</NativeModal>
|
|
154
|
+
)
|
|
155
|
+
}
|
|
156
|
+
)
|
|
145
157
|
Modal.displayName = 'Modal'
|
|
146
158
|
|
|
147
159
|
Modal.propTypes = {
|
|
160
|
+
...selectedSystemPropTypes,
|
|
148
161
|
children: PropTypes.oneOfType([PropTypes.node, PropTypes.arrayOf(PropTypes.node)]),
|
|
149
162
|
copy: copyPropTypes,
|
|
150
163
|
isOpen: PropTypes.bool,
|
|
@@ -3,11 +3,20 @@ import { StyleSheet, Text, View } from 'react-native'
|
|
|
3
3
|
|
|
4
4
|
import PropTypes from 'prop-types'
|
|
5
5
|
import { applyTextStyles, useThemeTokens } from '../ThemeProvider'
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
a11yProps,
|
|
8
|
+
getTokensPropType,
|
|
9
|
+
selectSystemProps,
|
|
10
|
+
selectTokens,
|
|
11
|
+
variantProp,
|
|
12
|
+
viewProps
|
|
13
|
+
} from '../utils'
|
|
7
14
|
import ButtonBase from '../Button/ButtonBase'
|
|
8
15
|
import useCopy from '../utils/useCopy'
|
|
9
16
|
import dictionary from './dictionary'
|
|
10
17
|
|
|
18
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
19
|
+
|
|
11
20
|
const selectContainerStyles = (tokens) => ({ ...tokens })
|
|
12
21
|
|
|
13
22
|
const selectTextStyles = (tokens) => applyTextStyles(selectTokens('Typography', tokens))
|
|
@@ -82,7 +91,7 @@ const selectDismissButtonContainerStyles = ({ dismissButtonGap }) => ({
|
|
|
82
91
|
* Show system notifications at the top of the page, below the navigation, and expands the full-width of the viewport
|
|
83
92
|
*/
|
|
84
93
|
const Notification = forwardRef(
|
|
85
|
-
({ children, system, dismissible, copy = 'en', tokens, variant }, ref) => {
|
|
94
|
+
({ children, system, dismissible, copy = 'en', tokens, variant, ...rest }, ref) => {
|
|
86
95
|
const [isDismissed, setIsDismissed] = useState(false)
|
|
87
96
|
const themeTokens = useThemeTokens('Notification', tokens, variant, { system })
|
|
88
97
|
const getCopy = useCopy({ dictionary, copy })
|
|
@@ -102,7 +111,11 @@ const Notification = forwardRef(
|
|
|
102
111
|
|
|
103
112
|
// TODO: replace the dismiss button with IconButton when implemented (https://github.com/telus/universal-design-system/issues/281)
|
|
104
113
|
return (
|
|
105
|
-
<View
|
|
114
|
+
<View
|
|
115
|
+
ref={ref}
|
|
116
|
+
style={[staticStyles.container, selectContainerStyles(themeTokens)]}
|
|
117
|
+
{...selectProps(rest)}
|
|
118
|
+
>
|
|
106
119
|
{IconComponent && (
|
|
107
120
|
<View style={selectIconContainerStyles(themeTokens)}>
|
|
108
121
|
<IconComponent {...selectIconProps(themeTokens)} />
|
|
@@ -129,6 +142,7 @@ const Notification = forwardRef(
|
|
|
129
142
|
Notification.displayName = 'Notification'
|
|
130
143
|
|
|
131
144
|
Notification.propTypes = {
|
|
145
|
+
...selectedSystemPropTypes,
|
|
132
146
|
/**
|
|
133
147
|
* Content of the `Notification`.
|
|
134
148
|
*/
|
|
@@ -10,7 +10,8 @@ import {
|
|
|
10
10
|
hrefAttrsProp,
|
|
11
11
|
linkProps,
|
|
12
12
|
selectTokens,
|
|
13
|
-
variantProp
|
|
13
|
+
variantProp,
|
|
14
|
+
withLinkRouter
|
|
14
15
|
} from '../utils'
|
|
15
16
|
|
|
16
17
|
import useCopy from '../utils/useCopy'
|
|
@@ -66,4 +67,4 @@ PageButton.propTypes = {
|
|
|
66
67
|
tokens: getTokensPropType('PaginationPageButton')
|
|
67
68
|
}
|
|
68
69
|
|
|
69
|
-
export default PageButton
|
|
70
|
+
export default withLinkRouter(PageButton)
|
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
import React, { forwardRef } from 'react'
|
|
2
2
|
import { View, Text, StyleSheet } from 'react-native'
|
|
3
3
|
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
a11yProps,
|
|
6
|
+
componentPropType,
|
|
7
|
+
copyPropTypes,
|
|
8
|
+
getTokensPropType,
|
|
9
|
+
selectSystemProps,
|
|
10
|
+
variantProp,
|
|
11
|
+
viewProps,
|
|
12
|
+
withLinkRouter
|
|
13
|
+
} from '../utils'
|
|
5
14
|
import { applyTextStyles, useThemeTokens } from '../ThemeProvider'
|
|
6
15
|
import { useViewport } from '../ViewportProvider'
|
|
7
16
|
import Box from '../Box'
|
|
@@ -10,6 +19,8 @@ import usePagination from './usePagination'
|
|
|
10
19
|
import PageButton from './PageButton'
|
|
11
20
|
import SideButton from './SideButton'
|
|
12
21
|
|
|
22
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
23
|
+
|
|
13
24
|
const selectTextStyles = ({ color, fontName, fontSize, fontWeight, lineHeight }) =>
|
|
14
25
|
applyTextStyles({
|
|
15
26
|
color,
|
|
@@ -20,7 +31,20 @@ const selectTextStyles = ({ color, fontName, fontSize, fontWeight, lineHeight })
|
|
|
20
31
|
})
|
|
21
32
|
|
|
22
33
|
const Pagination = forwardRef(
|
|
23
|
-
(
|
|
34
|
+
(
|
|
35
|
+
{
|
|
36
|
+
children,
|
|
37
|
+
copy = 'en',
|
|
38
|
+
variant,
|
|
39
|
+
tokens,
|
|
40
|
+
sideButtonVariant,
|
|
41
|
+
sideButtonTokens,
|
|
42
|
+
LinkRouter,
|
|
43
|
+
linkRouterProps,
|
|
44
|
+
...rest
|
|
45
|
+
},
|
|
46
|
+
ref
|
|
47
|
+
) => {
|
|
24
48
|
const viewport = useViewport()
|
|
25
49
|
const { truncateAbove, gap, ...themeTokens } = useThemeTokens('Pagination', tokens, variant, {
|
|
26
50
|
viewport
|
|
@@ -58,16 +82,22 @@ const Pagination = forwardRef(
|
|
|
58
82
|
copy={copy}
|
|
59
83
|
variant={sideButtonVariant}
|
|
60
84
|
tokens={sideButtonTokens}
|
|
85
|
+
LinkRouter={LinkRouter}
|
|
86
|
+
linkRouterProps={linkRouterProps}
|
|
61
87
|
/>
|
|
62
88
|
),
|
|
63
|
-
...items.map((
|
|
89
|
+
...items.map((_child, itemIndex) => {
|
|
64
90
|
const buttonLabel = `${itemIndex + 1}`
|
|
65
91
|
const itemProps = getItemProps(itemIndex)
|
|
92
|
+
const ItemLinkRouter = itemProps.LinkRouter ?? LinkRouter
|
|
93
|
+
const itemLinkRouterProps = { ...linkRouterProps, ...itemProps.linkRouterProps }
|
|
66
94
|
|
|
67
95
|
if (shouldRenderButton(itemIndex)) {
|
|
68
96
|
return (
|
|
69
97
|
<PageButton
|
|
70
98
|
{...itemProps}
|
|
99
|
+
LinkRouter={ItemLinkRouter}
|
|
100
|
+
linkRouterProps={itemLinkRouterProps}
|
|
71
101
|
label={buttonLabel}
|
|
72
102
|
copy={copy}
|
|
73
103
|
isActive={isItemActive(itemIndex)}
|
|
@@ -88,12 +118,14 @@ const Pagination = forwardRef(
|
|
|
88
118
|
copy={copy}
|
|
89
119
|
variant={sideButtonVariant}
|
|
90
120
|
tokens={sideButtonTokens}
|
|
121
|
+
LinkRouter={LinkRouter}
|
|
122
|
+
linkRouterProps={linkRouterProps}
|
|
91
123
|
/>
|
|
92
124
|
)
|
|
93
125
|
]
|
|
94
126
|
|
|
95
127
|
return (
|
|
96
|
-
<View style={staticStyles.container} ref={ref}>
|
|
128
|
+
<View style={staticStyles.container} ref={ref} {...selectProps(rest)}>
|
|
97
129
|
{buttons
|
|
98
130
|
// keep the keys in-line with the page numbers regardless of which buttons are actually rendered
|
|
99
131
|
.map((element, index) => [element, `page-${index + 1}`])
|
|
@@ -112,6 +144,8 @@ PageButton.displayName = 'PageButton'
|
|
|
112
144
|
Pagination.PageButton = PageButton
|
|
113
145
|
|
|
114
146
|
Pagination.propTypes = {
|
|
147
|
+
...selectedSystemPropTypes,
|
|
148
|
+
...withLinkRouter.propTypes,
|
|
115
149
|
children: componentPropType('PageButton'),
|
|
116
150
|
copy: copyPropTypes,
|
|
117
151
|
variant: variantProp.propType,
|
|
@@ -7,7 +7,7 @@ import ButtonBase from '../Button/ButtonBase'
|
|
|
7
7
|
import { IconText } from '../Icon'
|
|
8
8
|
import { useThemeTokensCallback } from '../ThemeProvider'
|
|
9
9
|
import { useViewport } from '../ViewportProvider'
|
|
10
|
-
import { copyPropTypes, hrefAttrsProp, linkProps, selectTokens } from '../utils'
|
|
10
|
+
import { copyPropTypes, hrefAttrsProp, linkProps, selectTokens, withLinkRouter } from '../utils'
|
|
11
11
|
|
|
12
12
|
import dictionary from './dictionary'
|
|
13
13
|
import useCopy from '../utils/useCopy'
|
|
@@ -82,4 +82,4 @@ SideButton.propTypes = {
|
|
|
82
82
|
...linkProps.types
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
export default SideButton
|
|
85
|
+
export default withLinkRouter(SideButton)
|
|
@@ -2,9 +2,10 @@ import React, { forwardRef } from 'react'
|
|
|
2
2
|
import PropTypes from 'prop-types'
|
|
3
3
|
import { View } from 'react-native'
|
|
4
4
|
|
|
5
|
-
import { a11yProps } from '../utils/propTypes'
|
|
6
5
|
import { useThemeTokens } from '../ThemeProvider'
|
|
7
|
-
import { getTokensPropType, variantProp } from '../utils'
|
|
6
|
+
import { a11yProps, getTokensPropType, selectSystemProps, variantProp, viewProps } from '../utils'
|
|
7
|
+
|
|
8
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
8
9
|
|
|
9
10
|
const selectProgressStyles = ({
|
|
10
11
|
backgroundColor,
|
|
@@ -53,7 +54,7 @@ const Progress = forwardRef(({ children, tokens, variant, ...rest }, ref) => {
|
|
|
53
54
|
const themeTokens = useThemeTokens('Progress', tokens, variant)
|
|
54
55
|
|
|
55
56
|
return (
|
|
56
|
-
<View ref={ref} style={selectProgressStyles(themeTokens)} {...
|
|
57
|
+
<View ref={ref} style={selectProgressStyles(themeTokens)} {...selectProps(rest)}>
|
|
57
58
|
{children}
|
|
58
59
|
</View>
|
|
59
60
|
)
|
|
@@ -61,6 +62,7 @@ const Progress = forwardRef(({ children, tokens, variant, ...rest }, ref) => {
|
|
|
61
62
|
Progress.displayName = 'Progress'
|
|
62
63
|
|
|
63
64
|
Progress.propTypes = {
|
|
65
|
+
...selectedSystemPropTypes,
|
|
64
66
|
/**
|
|
65
67
|
* Use the `children` prop to supply one or several `ProgressBar`s.
|
|
66
68
|
*/
|
|
@@ -3,9 +3,10 @@ import PropTypes from 'prop-types'
|
|
|
3
3
|
import { Platform, StyleSheet, View } from 'react-native'
|
|
4
4
|
|
|
5
5
|
import ProgressBarBackground from './ProgressBarBackground'
|
|
6
|
-
import { a11yProps } from '../utils/propTypes'
|
|
7
6
|
import { useThemeTokens } from '../ThemeProvider'
|
|
8
|
-
import { getTokensPropType, variantProp } from '../utils'
|
|
7
|
+
import { a11yProps, getTokensPropType, selectSystemProps, variantProp, viewProps } from '../utils'
|
|
8
|
+
|
|
9
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
9
10
|
|
|
10
11
|
const selectBarStyles = (
|
|
11
12
|
{ backgroundColor, borderRadius, outlineWidth, outlineColor },
|
|
@@ -60,7 +61,7 @@ const ProgressBar = forwardRef(
|
|
|
60
61
|
} else if (percentage > 100) {
|
|
61
62
|
throw new Error('ProgressBar: `percentage` cannot exceed 100')
|
|
62
63
|
}
|
|
63
|
-
const
|
|
64
|
+
const selectedProps = selectProps({
|
|
64
65
|
accessibilityRole: 'progressbar',
|
|
65
66
|
accessibilityValue: {
|
|
66
67
|
min: 0,
|
|
@@ -68,14 +69,14 @@ const ProgressBar = forwardRef(
|
|
|
68
69
|
now: percentage,
|
|
69
70
|
text: `${percentage}%`
|
|
70
71
|
},
|
|
71
|
-
...
|
|
72
|
-
}
|
|
72
|
+
...rest
|
|
73
|
+
})
|
|
73
74
|
|
|
74
75
|
return percentage > 0 ? (
|
|
75
76
|
<View
|
|
76
77
|
ref={ref}
|
|
77
78
|
style={[staticStyles.bar, selectBarStyles(themeTokens, percentage)]}
|
|
78
|
-
{...
|
|
79
|
+
{...selectedProps}
|
|
79
80
|
>
|
|
80
81
|
{children ?? <ProgressBarBackground variant={variant} />}
|
|
81
82
|
</View>
|
|
@@ -85,6 +86,7 @@ const ProgressBar = forwardRef(
|
|
|
85
86
|
ProgressBar.displayName = 'ProgressBar'
|
|
86
87
|
|
|
87
88
|
ProgressBar.propTypes = {
|
|
89
|
+
...selectedSystemPropTypes,
|
|
88
90
|
/**
|
|
89
91
|
* Optional children that can be used to customize the progress bar filling.
|
|
90
92
|
*/
|
package/src/Radio/Radio.jsx
CHANGED
|
@@ -2,15 +2,22 @@ import React, { forwardRef } from 'react'
|
|
|
2
2
|
import PropTypes from 'prop-types'
|
|
3
3
|
import { Pressable, StyleSheet, Text, View } from 'react-native'
|
|
4
4
|
|
|
5
|
-
// @todo move `LabelContent` outside of the `InputLabel` and fix
|
|
6
|
-
// the issue with the cursor not being pointer on Web
|
|
7
5
|
import RadioLabel from '../InputLabel/LabelContent'
|
|
8
6
|
import RadioButton, { selectRadioButtonTokens } from './RadioButton'
|
|
9
7
|
import { applyShadowToken, applyTextStyles, useThemeTokensCallback } from '../ThemeProvider'
|
|
10
|
-
import {
|
|
11
|
-
|
|
8
|
+
import {
|
|
9
|
+
a11yProps,
|
|
10
|
+
getTokensPropType,
|
|
11
|
+
selectSystemProps,
|
|
12
|
+
useInputValue,
|
|
13
|
+
useUniqueId,
|
|
14
|
+
variantProp,
|
|
15
|
+
viewProps
|
|
16
|
+
} from '../utils'
|
|
12
17
|
import StackView from '../StackView'
|
|
13
18
|
|
|
19
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
20
|
+
|
|
14
21
|
const selectContainerStyles = ({
|
|
15
22
|
containerBackgroundColor,
|
|
16
23
|
containerBorderRadius,
|
|
@@ -132,7 +139,6 @@ const Radio = forwardRef(
|
|
|
132
139
|
// The expected keyboard shortcut for activating a radio is the Space key
|
|
133
140
|
if (event?.key === ' ') handleChange(event)
|
|
134
141
|
}
|
|
135
|
-
const accessibilityProps = a11yProps.select(rest)
|
|
136
142
|
const uniqueId = useUniqueId('radio')
|
|
137
143
|
const inputId = id ?? uniqueId
|
|
138
144
|
|
|
@@ -144,7 +150,7 @@ const Radio = forwardRef(
|
|
|
144
150
|
onPress={handleChange}
|
|
145
151
|
accessibilityRole="radio"
|
|
146
152
|
accessibilityState={{ checked: isChecked, disabled: inactive }}
|
|
147
|
-
{...
|
|
153
|
+
{...selectProps(rest)}
|
|
148
154
|
>
|
|
149
155
|
{({ focused: focus, hovered: hover, pressed }) => {
|
|
150
156
|
const stateTokens = getTokens({ focus, hover, pressed })
|
|
@@ -182,7 +188,7 @@ const Radio = forwardRef(
|
|
|
182
188
|
Radio.displayName = 'Radio'
|
|
183
189
|
|
|
184
190
|
Radio.propTypes = {
|
|
185
|
-
...
|
|
191
|
+
...selectedSystemPropTypes,
|
|
186
192
|
/**
|
|
187
193
|
* Use `checked` for controlled Radio. For uncontrolled Radio, use the `defaultChecked` prop.
|
|
188
194
|
*/
|
|
@@ -4,7 +4,15 @@ import { Platform, StyleSheet, View } from 'react-native'
|
|
|
4
4
|
|
|
5
5
|
import RadioInput from './RadioInput'
|
|
6
6
|
import { applyOuterBorder, resolveThemeTokens, validateThemeTokens } from '../ThemeProvider'
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
a11yProps,
|
|
9
|
+
getTokensSetPropType,
|
|
10
|
+
selectSystemProps,
|
|
11
|
+
selectTokens,
|
|
12
|
+
viewProps
|
|
13
|
+
} from '../utils'
|
|
14
|
+
|
|
15
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
8
16
|
|
|
9
17
|
// TODO: roll out a standard approach to token sets
|
|
10
18
|
// https://github.com/telus/universal-design-system/issues/782
|
|
@@ -87,7 +95,8 @@ const RadioButton = forwardRef(
|
|
|
87
95
|
isControlled,
|
|
88
96
|
handleChange,
|
|
89
97
|
name: inputName,
|
|
90
|
-
value
|
|
98
|
+
value,
|
|
99
|
+
...rest
|
|
91
100
|
},
|
|
92
101
|
ref
|
|
93
102
|
) => {
|
|
@@ -98,7 +107,7 @@ const RadioButton = forwardRef(
|
|
|
98
107
|
)
|
|
99
108
|
|
|
100
109
|
return (
|
|
101
|
-
<View style={selectOuterBorderStyles(themeTokens)}>
|
|
110
|
+
<View style={selectOuterBorderStyles(themeTokens)} {...selectProps(rest)}>
|
|
102
111
|
<View
|
|
103
112
|
style={[staticStyles.defaultInputStyles, selectInputStyles(themeTokens, isChecked)]}
|
|
104
113
|
testID="Radio-Input"
|
|
@@ -124,6 +133,7 @@ const RadioButton = forwardRef(
|
|
|
124
133
|
RadioButton.displayName = 'RadioButton'
|
|
125
134
|
|
|
126
135
|
RadioButton.propTypes = {
|
|
136
|
+
...selectedSystemPropTypes,
|
|
127
137
|
isChecked: PropTypes.bool,
|
|
128
138
|
tokens: getTokensSetPropType(tokenKeys, { allowFunction: true }),
|
|
129
139
|
inactive: PropTypes.bool,
|