@telus-uds/components-base 1.2.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +8 -0
- package/CHANGELOG.json +61 -0
- package/CHANGELOG.md +45 -2
- 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__/utils/props.test.js +36 -0
- package/__tests__/utils/semantics.test.jsx +1 -10
- package/babel.config.js +27 -5
- package/component-docs.json +170 -494
- 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 +7 -8
- 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 +6 -11
- package/lib/Checkbox/Checkbox.js +4 -6
- 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 +6 -6
- package/lib/InputLabel/InputLabel.js +7 -2
- package/lib/InputSupports/InputSupports.js +2 -2
- package/lib/Link/LinkBase.js +12 -13
- 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 +12 -8
- package/lib/Pagination/Pagination.js +8 -3
- package/lib/Progress/Progress.js +5 -4
- package/lib/Progress/ProgressBar.js +8 -7
- package/lib/Radio/Radio.js +4 -6
- 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 +6 -2
- package/lib/Tabs/TabsItem.js +6 -5
- 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 +10 -9
- package/lib/ToggleSwitch/ToggleSwitchGroup.js +10 -12
- 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 +7 -0
- package/lib/utils/a11y/semantics.js +4 -3
- package/lib/utils/children.js +5 -1
- package/lib/utils/index.js +18 -4
- 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-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 +9 -8
- 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 +12 -12
- package/src/Checkbox/Checkbox.jsx +12 -5
- 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 +12 -8
- package/src/InputLabel/InputLabel.jsx +16 -2
- package/src/InputSupports/InputSupports.jsx +1 -1
- package/src/Link/LinkBase.jsx +11 -10
- 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 +23 -6
- package/src/Pagination/Pagination.jsx +10 -3
- package/src/Progress/Progress.jsx +5 -3
- package/src/Progress/ProgressBar.jsx +8 -6
- package/src/Radio/Radio.jsx +13 -5
- 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 +16 -3
- package/src/Tabs/TabsItem.jsx +13 -9
- 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 +12 -7
- package/src/ToggleSwitch/ToggleSwitchGroup.jsx +14 -6
- 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 +1 -1
- package/src/utils/a11y/semantics.js +3 -2
- package/src/utils/children.jsx +2 -1
- package/src/utils/index.js +2 -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/.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 -566
- 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 -561
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import PropTypes from 'prop-types'; // Prototype-safe alternative to (linter-forbidden) someObject.hasOwnProperty()
|
|
3
|
+
|
|
4
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
|
+
|
|
6
|
+
const hasOwnProperty = (object, prop) => Object.prototype.hasOwnProperty.call(object, prop);
|
|
7
|
+
/**
|
|
8
|
+
* Higher-order component that has no effect unless an additional prop `LinkRouter` is passed.
|
|
9
|
+
* This may be used to provide custom wrappers for integrations with third party libraries.
|
|
10
|
+
*
|
|
11
|
+
* If LinkRouter is passed, LinkRouter is rendered in place of the main component and is passed:
|
|
12
|
+
*
|
|
13
|
+
* - `linkRouterProps`: an optional object passed alongside LinkRouter, for props needed by the wrapper
|
|
14
|
+
* that are not valid props for the wrapped component.
|
|
15
|
+
* - `Component`: automatically provided, the original component to render inside the wrapper.
|
|
16
|
+
* - `ref`: forwarded `ref` passed down to `Component`
|
|
17
|
+
* - All other props passed to the outer component
|
|
18
|
+
*
|
|
19
|
+
* @example A LinkRouter component to be used with link-like components might look like:
|
|
20
|
+
*
|
|
21
|
+
* ```jsx
|
|
22
|
+
* const LinkLinkRouter = forwardRef(({ Component, linkRouterProps: { to, options }, href, ...rest }, ref) => {
|
|
23
|
+
* const { href: resolvedHref, onClick } = useSomeRouterHook({ to, href, options })
|
|
24
|
+
* return <Component href={resolvedHref} onPress={onClick} {...rest} />
|
|
25
|
+
* })
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* Any component that takes href and onPress props may then use this wrapper:
|
|
29
|
+
*
|
|
30
|
+
* ```jsx
|
|
31
|
+
* <Link href={href} LinkRouter={LinkLinkRouter} linkRouterProps={{ to, options }}>Some link</Link>
|
|
32
|
+
* <IconButton icon={SomeIcon} LinkRouter={LinkLinkRouter} linkRouterProps={{ to, options }} ref={iconRef} />
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
const withLinkRouter = Component => {
|
|
38
|
+
const wrappedComponent = /*#__PURE__*/forwardRef(({
|
|
39
|
+
LinkRouter,
|
|
40
|
+
linkRouterProps,
|
|
41
|
+
...props
|
|
42
|
+
}, ref) => {
|
|
43
|
+
if (!LinkRouter) return /*#__PURE__*/_jsx(Component, { ...props,
|
|
44
|
+
ref: ref
|
|
45
|
+
});
|
|
46
|
+
return /*#__PURE__*/_jsx(LinkRouter, {
|
|
47
|
+
linkRouterProps: linkRouterProps,
|
|
48
|
+
Component: Component,
|
|
49
|
+
ref: ref,
|
|
50
|
+
...props
|
|
51
|
+
});
|
|
52
|
+
}); // Ensure the returned component has appropriate outer properties set:
|
|
53
|
+
|
|
54
|
+
/* eslint-disable-next-line react/forbid-foreign-prop-types */
|
|
55
|
+
|
|
56
|
+
const {
|
|
57
|
+
displayName,
|
|
58
|
+
name,
|
|
59
|
+
propTypes,
|
|
60
|
+
...otherProperties
|
|
61
|
+
} = Component; // Apply unique component name as a displayName
|
|
62
|
+
|
|
63
|
+
wrappedComponent.displayName = Component.displayName || Component.name; // Apply proptypes including wrapper props - is safely { ...undefined, ...undefined } in prod
|
|
64
|
+
|
|
65
|
+
wrappedComponent.propTypes = { ...Component.propTypes,
|
|
66
|
+
...withLinkRouter.propTypes
|
|
67
|
+
}; // Forward any other properties explicitly set e.g. Component.SubComponent
|
|
68
|
+
|
|
69
|
+
Object.keys(otherProperties).forEach(key => {
|
|
70
|
+
// Skip internal React properties from wrappedComponent's forwardRef (render, $$typeof, etc)
|
|
71
|
+
if (hasOwnProperty(Component, key) && !hasOwnProperty(wrappedComponent, key)) {
|
|
72
|
+
wrappedComponent[key] = Component[key];
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
return wrappedComponent;
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
withLinkRouter.propTypes = {
|
|
79
|
+
LinkRouter: PropTypes.elementType,
|
|
80
|
+
linkRouterProps: PropTypes.object
|
|
81
|
+
};
|
|
82
|
+
export default withLinkRouter;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@telus-uds/components-base",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "Base components",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"base"
|
|
@@ -9,7 +9,9 @@
|
|
|
9
9
|
"homepage": "https://github.com/telus/universal-design-system#readme",
|
|
10
10
|
"license": "UNLICENSED",
|
|
11
11
|
"main": "lib/index.js",
|
|
12
|
+
"module": "lib-module/index.js",
|
|
12
13
|
"react-native": "src/index.js",
|
|
14
|
+
"sideEffects": false,
|
|
13
15
|
"directories": {
|
|
14
16
|
"lib": "lib",
|
|
15
17
|
"test": "__tests__"
|
|
@@ -24,7 +26,9 @@
|
|
|
24
26
|
"lint:fix": "telus-standard --fix",
|
|
25
27
|
"format": "prettier --write .",
|
|
26
28
|
"build": "yarn build:code && yarn build:docs",
|
|
27
|
-
"build:
|
|
29
|
+
"build:main": "babel src -d lib",
|
|
30
|
+
"build:module": "babel src -d lib-module --env-name module",
|
|
31
|
+
"build:code": "yarn build:main && yarn build:module",
|
|
28
32
|
"build:docs": "babel-node --plugins=react-docgen-alpha generate-component-docs.js",
|
|
29
33
|
"storybook": "start-storybook",
|
|
30
34
|
"dev": "yarn build:code --watch",
|
|
@@ -46,7 +50,7 @@
|
|
|
46
50
|
"react-native-web": "^0.17.0"
|
|
47
51
|
},
|
|
48
52
|
"devDependencies": {
|
|
49
|
-
"@telus-uds/browserslist-config": "^1.0.
|
|
53
|
+
"@telus-uds/browserslist-config": "^1.0.1",
|
|
50
54
|
"@testing-library/jest-native": "^4.0.1",
|
|
51
55
|
"@testing-library/react-hooks": "^7.0.1",
|
|
52
56
|
"@testing-library/react-native": "^7.2.0",
|
|
@@ -54,8 +58,8 @@
|
|
|
54
58
|
},
|
|
55
59
|
"dependencies": {
|
|
56
60
|
"airbnb-prop-types": "^2.16.0",
|
|
57
|
-
"@telus-uds/system-constants": "^1.0.
|
|
58
|
-
"@telus-uds/system-theme-tokens": "^1.
|
|
61
|
+
"@telus-uds/system-constants": "^1.0.2",
|
|
62
|
+
"@telus-uds/system-theme-tokens": "^1.3.0",
|
|
59
63
|
"lodash.debounce": "^4.0.8",
|
|
60
64
|
"lodash.merge": "^4.6.2",
|
|
61
65
|
"prop-types": "^15.7.2",
|
package/src/A11yText/index.jsx
CHANGED
|
@@ -2,7 +2,9 @@ import React, { forwardRef } from 'react'
|
|
|
2
2
|
import { Platform, StyleSheet, View } from 'react-native'
|
|
3
3
|
import PropTypes from 'prop-types'
|
|
4
4
|
|
|
5
|
-
import { a11yProps } from '../utils/
|
|
5
|
+
import { a11yProps, selectSystemProps, viewProps } from '../utils/props'
|
|
6
|
+
|
|
7
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
6
8
|
|
|
7
9
|
/**
|
|
8
10
|
* A11yText is a zero-size invisible element that adds text to be read by screen readers.
|
|
@@ -11,7 +13,7 @@ import { a11yProps } from '../utils/propTypes'
|
|
|
11
13
|
* as a sibling to blocks of text like paragraphs and interactive elements like buttons.
|
|
12
14
|
*/
|
|
13
15
|
const A11yText = forwardRef(({ text, heading, ...rest }, ref) => {
|
|
14
|
-
const
|
|
16
|
+
const selectedProps = selectProps({
|
|
15
17
|
// On iOS, needs `accessible` to be true to be focusable without non-a11y content.
|
|
16
18
|
// On Web, `accessible` causes RNW to set attributes that may make the element be treated as a group.
|
|
17
19
|
// On Android, may cause this to be skipped when with `<Text>` siblings in an `accessible` View,
|
|
@@ -21,12 +23,14 @@ const A11yText = forwardRef(({ text, heading, ...rest }, ref) => {
|
|
|
21
23
|
accessibilityRole: heading ? 'header' : 'text',
|
|
22
24
|
...rest
|
|
23
25
|
})
|
|
24
|
-
|
|
26
|
+
|
|
27
|
+
return <View style={styles.invisible} ref={ref} {...selectedProps} />
|
|
25
28
|
})
|
|
26
29
|
|
|
27
30
|
A11yText.displayName = 'A11yText'
|
|
28
31
|
|
|
29
32
|
A11yText.propTypes = {
|
|
33
|
+
...selectedSystemPropTypes,
|
|
30
34
|
text: PropTypes.string.isRequired,
|
|
31
35
|
heading: PropTypes.bool
|
|
32
36
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React, { forwardRef } from 'react'
|
|
2
2
|
import { DURATION, MIN_EMPTY_ANGLE, MIN_STROKE_ANGLE, BEZIER, propTypes } from './shared'
|
|
3
|
+
import { useA11yInfo } from '../A11yInfoProvider'
|
|
3
4
|
|
|
4
5
|
const SVG_RADIUS = 20
|
|
5
6
|
const SVG_CIRCUMFERENCE = SVG_RADIUS * 2 * Math.PI
|
|
@@ -20,50 +21,61 @@ const bezierProps = {
|
|
|
20
21
|
}
|
|
21
22
|
// We're using svg rather than css here to define the animation to avoid needing to introduce css injection mechanism
|
|
22
23
|
// It's possible to replicate this functionality with RNW animations, but it snags on chrome at least, see https://github.com/telus/universal-design-system/pull/477 for details.
|
|
23
|
-
const Spinner = forwardRef(({ size, color, thickness, label }, ref) =>
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
{
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
24
|
+
const Spinner = forwardRef(({ size, color, thickness, label }, ref) => {
|
|
25
|
+
const { reduceMotionEnabled } = useA11yInfo()
|
|
26
|
+
return (
|
|
27
|
+
<svg
|
|
28
|
+
ref={ref}
|
|
29
|
+
width={`${size}px`}
|
|
30
|
+
height={`${size}px`}
|
|
31
|
+
viewBox="0 0 48 48"
|
|
32
|
+
aria-valuetext={label}
|
|
33
|
+
role="progressbar"
|
|
34
|
+
aria-busy={true}
|
|
35
|
+
>
|
|
36
|
+
<g>
|
|
37
|
+
{reduceMotionEnabled ? null : (
|
|
38
|
+
<animateTransform
|
|
39
|
+
attributeName="transform"
|
|
40
|
+
type="rotate"
|
|
41
|
+
values={`-180 24 24;${360 + MIN_STROKE_ANGLE - 180} 24 24`}
|
|
42
|
+
{...animationProps}
|
|
43
|
+
/>
|
|
44
|
+
)}
|
|
45
|
+
<circle
|
|
46
|
+
fill="none"
|
|
47
|
+
stroke={color}
|
|
48
|
+
strokeWidth={(thickness * 48) / size}
|
|
49
|
+
strokeLinecap="round"
|
|
50
|
+
cx="24"
|
|
51
|
+
cy="24"
|
|
52
|
+
r="20"
|
|
53
|
+
strokeDasharray={
|
|
54
|
+
reduceMotionEnabled ? MAX_SVG_LENGTH : [MIN_SVG_LENGTH, SVG_CIRCUMFERENCE]
|
|
55
|
+
}
|
|
56
|
+
strokeDashoffset={0}
|
|
57
|
+
>
|
|
58
|
+
{reduceMotionEnabled ? null : (
|
|
59
|
+
<>
|
|
60
|
+
<animate
|
|
61
|
+
attributeName="stroke-dashoffset"
|
|
62
|
+
values={`0;-10;${MIN_SVG_LENGTH - SVG_CIRCUMFERENCE}`}
|
|
63
|
+
{...animationProps}
|
|
64
|
+
{...bezierProps}
|
|
65
|
+
/>
|
|
66
|
+
<animate
|
|
67
|
+
attributeName="stroke-dasharray"
|
|
68
|
+
values={`${MIN_SVG_LENGTH}, 200;${MAX_SVG_LENGTH}, 200;${MIN_SVG_LENGTH}, 200`}
|
|
69
|
+
{...animationProps}
|
|
70
|
+
{...bezierProps}
|
|
71
|
+
/>
|
|
72
|
+
</>
|
|
73
|
+
)}
|
|
74
|
+
</circle>
|
|
75
|
+
</g>
|
|
76
|
+
</svg>
|
|
77
|
+
)
|
|
78
|
+
})
|
|
67
79
|
Spinner.displayName = 'Spinner'
|
|
68
80
|
|
|
69
81
|
Spinner.propTypes = propTypes
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import React, { forwardRef } from 'react'
|
|
2
2
|
import { Animated, Easing, StyleSheet, View } from 'react-native'
|
|
3
3
|
import { DURATION, MIN_EMPTY_ANGLE, MIN_STROKE_ANGLE, BEZIER, propTypes } from './shared'
|
|
4
|
+
import { useA11yInfo } from '../A11yInfoProvider'
|
|
4
5
|
|
|
5
6
|
const ea = MIN_EMPTY_ANGLE / 2
|
|
6
7
|
const sa = MIN_STROKE_ANGLE / 2
|
|
7
8
|
|
|
8
9
|
const Spinner = forwardRef(({ size, color, thickness, label }, ref) => {
|
|
9
10
|
const { current: timer } = React.useRef(new Animated.Value(0))
|
|
11
|
+
const { reduceMotionEnabled } = useA11yInfo()
|
|
10
12
|
|
|
11
13
|
React.useLayoutEffect(() => {
|
|
12
14
|
const loop = Animated.timing(timer, {
|
|
@@ -17,16 +19,19 @@ const Spinner = forwardRef(({ size, color, thickness, label }, ref) => {
|
|
|
17
19
|
toValue: 1,
|
|
18
20
|
isInteraction: false
|
|
19
21
|
})
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
|
|
23
|
+
if (!reduceMotionEnabled) Animated.loop(loop).start()
|
|
24
|
+
else loop.stop()
|
|
25
|
+
}, [timer, reduceMotionEnabled])
|
|
22
26
|
|
|
23
27
|
const frames = (60 * DURATION) / 1000
|
|
24
28
|
const easing = Easing.bezier(...BEZIER)
|
|
25
29
|
const containerStyle = {
|
|
26
30
|
width: size,
|
|
27
|
-
height: size / 2,
|
|
31
|
+
height: size / (reduceMotionEnabled ? 1.5 : 2),
|
|
28
32
|
overflow: 'hidden'
|
|
29
33
|
}
|
|
34
|
+
const animationFrequency = reduceMotionEnabled ? [0] : [0, 1]
|
|
30
35
|
|
|
31
36
|
// Credit to https://github.com/n4kz/react-native-indicators and https://github.com/callstack/react-native-paper for this
|
|
32
37
|
return (
|
|
@@ -39,7 +44,7 @@ const Spinner = forwardRef(({ size, color, thickness, label }, ref) => {
|
|
|
39
44
|
accessibilityState={{ busy: true }}
|
|
40
45
|
>
|
|
41
46
|
<Animated.View style={[{ width: size, height: size }]} collapsable={false}>
|
|
42
|
-
{
|
|
47
|
+
{animationFrequency.map((index) => {
|
|
43
48
|
const inputRange = Array.from(
|
|
44
49
|
new Array(frames),
|
|
45
50
|
(_, frameIndex) => frameIndex / (frames - 1)
|
|
@@ -59,8 +64,16 @@ const Spinner = forwardRef(({ size, color, thickness, label }, ref) => {
|
|
|
59
64
|
|
|
60
65
|
const layerStyle = {
|
|
61
66
|
width: size,
|
|
62
|
-
height: size
|
|
63
|
-
|
|
67
|
+
height: size
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const viewportStyle = {
|
|
71
|
+
width: size,
|
|
72
|
+
height: size
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (!reduceMotionEnabled) {
|
|
76
|
+
layerStyle.transform = [
|
|
64
77
|
{
|
|
65
78
|
rotate: timer.interpolate({
|
|
66
79
|
inputRange: [0, 1],
|
|
@@ -68,12 +81,7 @@ const Spinner = forwardRef(({ size, color, thickness, label }, ref) => {
|
|
|
68
81
|
})
|
|
69
82
|
}
|
|
70
83
|
]
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const viewportStyle = {
|
|
74
|
-
width: size,
|
|
75
|
-
height: size,
|
|
76
|
-
transform: [
|
|
84
|
+
viewportStyle.transform = [
|
|
77
85
|
{
|
|
78
86
|
translateY: index ? -size / 2 : 0
|
|
79
87
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
2
|
import PropTypes from 'prop-types'
|
|
3
3
|
import { useThemeTokens } from '../ThemeProvider'
|
|
4
|
-
import { getTokensPropType, variantProp } from '../utils/
|
|
4
|
+
import { getTokensPropType, variantProp } from '../utils/props'
|
|
5
5
|
|
|
6
6
|
import Spinner from './Spinner'
|
|
7
7
|
|
package/src/Box/Box.jsx
CHANGED
|
@@ -4,19 +4,23 @@ import { View, ScrollView } from 'react-native'
|
|
|
4
4
|
import { useThemeTokens } from '../ThemeProvider'
|
|
5
5
|
import {
|
|
6
6
|
a11yProps,
|
|
7
|
-
|
|
8
|
-
variantProp,
|
|
7
|
+
getA11yPropsFromHtmlTag,
|
|
9
8
|
getTokensPropType,
|
|
9
|
+
layoutTags,
|
|
10
|
+
selectSystemProps,
|
|
11
|
+
spacingProps,
|
|
10
12
|
useSpacingScale,
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
layoutTags
|
|
13
|
+
variantProp,
|
|
14
|
+
viewProps
|
|
14
15
|
} from '../utils'
|
|
16
|
+
|
|
17
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
18
|
+
|
|
15
19
|
/**
|
|
16
|
-
* @typedef {import('../utils/
|
|
17
|
-
* @typedef {import('../utils/
|
|
18
|
-
* @typedef {import('../utils/
|
|
19
|
-
* @typedef {import('../utils/
|
|
20
|
+
* @typedef {import('../utils/props/spacingProps.js').SpacingValue} SpacingValue
|
|
21
|
+
* @typedef {import('../utils/props/spacingProps.js').SpacingIndex} SpacingIndex
|
|
22
|
+
* @typedef {import('../utils/props/spacingProps.js').SpacingObject} SpacingObject
|
|
23
|
+
* @typedef {import('../utils/props/spacingProps.js').SpacingOptions} SpacingOptions
|
|
20
24
|
*/
|
|
21
25
|
|
|
22
26
|
const selectBoxStyles = (tokens) => {
|
|
@@ -121,8 +125,7 @@ const Box = forwardRef(
|
|
|
121
125
|
) => {
|
|
122
126
|
const props = {
|
|
123
127
|
...getA11yPropsFromHtmlTag(tag, accessibilityRole),
|
|
124
|
-
...
|
|
125
|
-
...viewProps.select(rest)
|
|
128
|
+
...selectProps(rest)
|
|
126
129
|
}
|
|
127
130
|
|
|
128
131
|
const themeTokens = useThemeTokens('Box', tokens, variant)
|
|
@@ -154,8 +157,7 @@ const Box = forwardRef(
|
|
|
154
157
|
Box.displayName = 'Box'
|
|
155
158
|
|
|
156
159
|
Box.propTypes = {
|
|
157
|
-
...
|
|
158
|
-
...viewProps.types,
|
|
160
|
+
...selectedSystemPropTypes,
|
|
159
161
|
variant: variantProp.propType,
|
|
160
162
|
tokens: getTokensPropType('Box'),
|
|
161
163
|
/**
|
package/src/Button/Button.jsx
CHANGED
|
@@ -3,7 +3,7 @@ import React, { forwardRef } from 'react'
|
|
|
3
3
|
import ButtonBase from './ButtonBase'
|
|
4
4
|
import buttonPropTypes, { textAndA11yText } from './propTypes'
|
|
5
5
|
import { useThemeTokensCallback } from '../ThemeProvider'
|
|
6
|
-
import { a11yProps } from '../utils/
|
|
6
|
+
import { a11yProps } from '../utils/props'
|
|
7
7
|
|
|
8
8
|
const Button = forwardRef(({ accessibilityRole = 'button', tokens, variant, ...props }, ref) => {
|
|
9
9
|
const getTokens = useThemeTokensCallback('Button', tokens, variant)
|
|
@@ -11,10 +11,14 @@ import {
|
|
|
11
11
|
linkProps,
|
|
12
12
|
resolvePressableState,
|
|
13
13
|
resolvePressableTokens,
|
|
14
|
+
selectSystemProps,
|
|
15
|
+
viewProps,
|
|
14
16
|
wrapStringsInText,
|
|
15
17
|
withLinkRouter
|
|
16
18
|
} from '../utils'
|
|
17
19
|
|
|
20
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, linkProps, viewProps])
|
|
21
|
+
|
|
18
22
|
const getOuterBorderOffset = ({ outerBorderGap = 0, outerBorderWidth = 0 }) =>
|
|
19
23
|
outerBorderGap + outerBorderWidth
|
|
20
24
|
|
|
@@ -144,7 +148,6 @@ const ButtonBase = forwardRef(
|
|
|
144
148
|
disabled = false, // alias for inactive
|
|
145
149
|
inactive = disabled,
|
|
146
150
|
selected = false,
|
|
147
|
-
dataSet,
|
|
148
151
|
...rawRest
|
|
149
152
|
},
|
|
150
153
|
ref
|
|
@@ -154,13 +157,13 @@ const ButtonBase = forwardRef(
|
|
|
154
157
|
const resolveButtonTokens = (pressableState) =>
|
|
155
158
|
resolvePressableTokens(tokens, pressableState, extraButtonState)
|
|
156
159
|
|
|
157
|
-
const
|
|
160
|
+
const systemProps = selectProps(rest)
|
|
158
161
|
|
|
159
162
|
const getPressableStyle = (pressableState) => {
|
|
160
163
|
const themeTokens = resolveButtonTokens(pressableState)
|
|
161
164
|
return [
|
|
162
165
|
staticStyles.row,
|
|
163
|
-
selectWebOnlyStyles(inactive, themeTokens,
|
|
166
|
+
selectWebOnlyStyles(inactive, themeTokens, systemProps),
|
|
164
167
|
selectOuterContainerStyles(themeTokens),
|
|
165
168
|
selectOuterWidthStyles(themeTokens)
|
|
166
169
|
]
|
|
@@ -173,9 +176,8 @@ const ButtonBase = forwardRef(
|
|
|
173
176
|
onPress={linkProps.handleHref({ href, onPress })}
|
|
174
177
|
style={getPressableStyle}
|
|
175
178
|
disabled={inactive}
|
|
176
|
-
dataSet={dataSet}
|
|
177
179
|
hrefAttrs={hrefAttrs}
|
|
178
|
-
{...
|
|
180
|
+
{...systemProps}
|
|
179
181
|
>
|
|
180
182
|
{(pressableState) => {
|
|
181
183
|
const themeTokens = resolveButtonTokens(pressableState)
|
|
@@ -224,9 +226,8 @@ ButtonBase.displayName = 'ButtonBase'
|
|
|
224
226
|
|
|
225
227
|
ButtonBase.propTypes = {
|
|
226
228
|
id: PropTypes.string,
|
|
227
|
-
...
|
|
228
|
-
...buttonPropTypes
|
|
229
|
-
...linkProps.types
|
|
229
|
+
...selectedSystemPropTypes,
|
|
230
|
+
...buttonPropTypes
|
|
230
231
|
}
|
|
231
232
|
ButtonBase.defaultProps = { id: undefined }
|
|
232
233
|
|
|
@@ -10,13 +10,17 @@ import { useThemeTokens, useThemeTokensCallback } from '../ThemeProvider'
|
|
|
10
10
|
import {
|
|
11
11
|
a11yProps,
|
|
12
12
|
pressProps,
|
|
13
|
-
variantProp,
|
|
14
13
|
getTokensPropType,
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
selectSystemProps,
|
|
15
|
+
selectTokens,
|
|
16
|
+
variantProp,
|
|
17
|
+
viewProps
|
|
18
|
+
} from '../utils/props'
|
|
17
19
|
import { useMultipleInputValues } from '../utils/input'
|
|
18
20
|
import { getPressHandlersWithArgs } from '../utils/pressability'
|
|
19
21
|
|
|
22
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, pressProps, viewProps])
|
|
23
|
+
|
|
20
24
|
const ButtonGroup = forwardRef(
|
|
21
25
|
(
|
|
22
26
|
{
|
|
@@ -51,14 +55,20 @@ const ButtonGroup = forwardRef(
|
|
|
51
55
|
readOnly
|
|
52
56
|
})
|
|
53
57
|
|
|
54
|
-
const
|
|
58
|
+
const systemProps = selectProps({
|
|
55
59
|
accessibilityRole,
|
|
56
60
|
...rest
|
|
57
61
|
})
|
|
58
|
-
const itemA11yRole =
|
|
62
|
+
const itemA11yRole = systemProps.accessibilityRole === 'radiogroup' ? 'radio' : 'checkbox'
|
|
59
63
|
|
|
60
64
|
return (
|
|
61
|
-
<StackWrap
|
|
65
|
+
<StackWrap
|
|
66
|
+
{...systemProps}
|
|
67
|
+
space={space}
|
|
68
|
+
direction={direction}
|
|
69
|
+
tokens={stackTokens}
|
|
70
|
+
ref={ref}
|
|
71
|
+
>
|
|
62
72
|
{items.map(({ label, id = label, accessibilityLabel, ref: itemRef }, index) => {
|
|
63
73
|
const isSelected = currentValues.includes(id)
|
|
64
74
|
|
|
@@ -101,8 +111,7 @@ const ButtonGroup = forwardRef(
|
|
|
101
111
|
ButtonGroup.displayName = 'ButtonGroup'
|
|
102
112
|
|
|
103
113
|
ButtonGroup.propTypes = {
|
|
104
|
-
...
|
|
105
|
-
...pressProps.propTypes,
|
|
114
|
+
...selectedSystemPropTypes,
|
|
106
115
|
tokens: getTokensPropType('ButtonGroup'),
|
|
107
116
|
variant: variantProp.propType,
|
|
108
117
|
/**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { forwardRef } from 'react'
|
|
2
2
|
import ButtonBase from './ButtonBase'
|
|
3
3
|
import buttonPropTypes, { textAndA11yText } from './propTypes'
|
|
4
|
-
import { a11yProps, hrefAttrsProp, linkProps } from '../utils/
|
|
4
|
+
import { a11yProps, hrefAttrsProp, linkProps } from '../utils/props'
|
|
5
5
|
import { useThemeTokensCallback } from '../ThemeProvider'
|
|
6
6
|
|
|
7
7
|
/**
|
package/src/Button/propTypes.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import PropTypes from 'prop-types'
|
|
2
2
|
import ABBPropTypes from 'airbnb-prop-types'
|
|
3
|
-
import { variantProp } from '../utils/
|
|
3
|
+
import { variantProp, getTokensPropType } from '../utils/props'
|
|
4
4
|
import A11yText from '../A11yText'
|
|
5
5
|
|
|
6
6
|
export const textAndA11yText = ABBPropTypes.childrenOf(
|
|
@@ -8,6 +8,7 @@ export const textAndA11yText = ABBPropTypes.childrenOf(
|
|
|
8
8
|
)
|
|
9
9
|
|
|
10
10
|
const buttonPropTypes = {
|
|
11
|
+
tokens: getTokensPropType('Button'),
|
|
11
12
|
/**
|
|
12
13
|
* If true, prevents the button from being pressed, changes the cursor (on web) and accessibility
|
|
13
14
|
* attributes to communicate this to the user, and applies `inactive: true` appearances from the theme
|
package/src/Card/Card.jsx
CHANGED
|
@@ -4,9 +4,11 @@ import PropTypes from 'prop-types'
|
|
|
4
4
|
import { useThemeTokens } from '../ThemeProvider'
|
|
5
5
|
import { getTokensPropType, variantProp } from '../utils'
|
|
6
6
|
import { useViewport } from '../ViewportProvider'
|
|
7
|
-
import { a11yProps } from '../utils/
|
|
7
|
+
import { a11yProps, selectSystemProps, viewProps } from '../utils/props'
|
|
8
8
|
import CardBase from './CardBase'
|
|
9
9
|
|
|
10
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
11
|
+
|
|
10
12
|
/**
|
|
11
13
|
* A basic card component, unstyled by default.
|
|
12
14
|
*
|
|
@@ -58,18 +60,19 @@ import CardBase from './CardBase'
|
|
|
58
60
|
const Card = ({ children, tokens, variant, dataSet, ...rest }) => {
|
|
59
61
|
const viewport = useViewport()
|
|
60
62
|
const themeTokens = useThemeTokens('Card', tokens, variant, { viewport })
|
|
63
|
+
|
|
61
64
|
return (
|
|
62
|
-
<CardBase tokens={themeTokens} dataSet={dataSet} {...rest}>
|
|
65
|
+
<CardBase tokens={themeTokens} dataSet={dataSet} {...selectProps(rest)}>
|
|
63
66
|
{children}
|
|
64
67
|
</CardBase>
|
|
65
68
|
)
|
|
66
69
|
}
|
|
67
70
|
|
|
68
71
|
Card.propTypes = {
|
|
72
|
+
...selectedSystemPropTypes,
|
|
69
73
|
children: PropTypes.node,
|
|
70
74
|
tokens: getTokensPropType('Card'),
|
|
71
|
-
variant: variantProp.propType
|
|
72
|
-
...a11yProps.types
|
|
75
|
+
variant: variantProp.propType
|
|
73
76
|
}
|
|
74
77
|
|
|
75
78
|
export default Card
|
package/src/Card/CardBase.jsx
CHANGED
|
@@ -4,7 +4,9 @@ import { View } from 'react-native'
|
|
|
4
4
|
|
|
5
5
|
import { applyShadowToken } from '../ThemeProvider'
|
|
6
6
|
import { getTokensPropType } from '../utils'
|
|
7
|
-
import { a11yProps, viewProps } from '../utils/
|
|
7
|
+
import { a11yProps, viewProps, selectSystemProps } from '../utils/props'
|
|
8
|
+
|
|
9
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
8
10
|
|
|
9
11
|
// Ensure explicit selection of tokens
|
|
10
12
|
const selectStyles = ({
|
|
@@ -39,7 +41,7 @@ const selectStyles = ({
|
|
|
39
41
|
*/
|
|
40
42
|
const CardBase = forwardRef(({ children, tokens, dataSet, ...rest }, ref) => {
|
|
41
43
|
const cardStyle = selectStyles(typeof tokens === 'function' ? tokens() : tokens)
|
|
42
|
-
const props =
|
|
44
|
+
const props = selectProps(rest)
|
|
43
45
|
|
|
44
46
|
return (
|
|
45
47
|
<View style={cardStyle} dataSet={dataSet} ref={ref} {...props}>
|
|
@@ -50,10 +52,9 @@ const CardBase = forwardRef(({ children, tokens, dataSet, ...rest }, ref) => {
|
|
|
50
52
|
CardBase.displayName = 'CardBase'
|
|
51
53
|
|
|
52
54
|
CardBase.propTypes = {
|
|
55
|
+
...selectedSystemPropTypes,
|
|
53
56
|
children: PropTypes.node,
|
|
54
|
-
tokens: getTokensPropType('Card')
|
|
55
|
-
...viewProps.types,
|
|
56
|
-
...a11yProps.types
|
|
57
|
+
tokens: getTokensPropType('Card')
|
|
57
58
|
}
|
|
58
59
|
|
|
59
60
|
export default CardBase
|