@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
|
@@ -3,9 +3,9 @@ import semVerSatisfies from 'semver/functions/satisfies'
|
|
|
3
3
|
import pkg from '../../../package.json'
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* @typedef {import('../../utils/
|
|
7
|
-
* @typedef {import('../../utils/
|
|
8
|
-
* @typedef {import('../../utils/
|
|
6
|
+
* @typedef {import('../../utils/props/variantProp.js').AppearanceSet} AppearanceSet
|
|
7
|
+
* @typedef {import('../../utils/props/tokens.js').TokensProp} TokensProp
|
|
8
|
+
* @typedef {import('../../utils/props/tokens.js').TokensSet} TokensSet
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
/**
|
|
@@ -1,18 +1,25 @@
|
|
|
1
1
|
import React, { forwardRef } from 'react'
|
|
2
2
|
import PropTypes from 'prop-types'
|
|
3
|
-
import { Platform,
|
|
3
|
+
import { Platform, StyleSheet, View } from 'react-native'
|
|
4
4
|
|
|
5
|
+
import InputLabel from '../InputLabel'
|
|
5
6
|
import ButtonBase from '../Button/ButtonBase'
|
|
7
|
+
import StackView from '../StackView'
|
|
6
8
|
import { useThemeTokensCallback, applyShadowToken } from '../ThemeProvider'
|
|
7
9
|
import {
|
|
8
10
|
a11yProps,
|
|
11
|
+
getTokensPropType,
|
|
12
|
+
selectTokens,
|
|
9
13
|
pressProps,
|
|
14
|
+
selectSystemProps,
|
|
15
|
+
useUniqueId,
|
|
10
16
|
variantProp,
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
} from '../utils/propTypes'
|
|
17
|
+
viewProps
|
|
18
|
+
} from '../utils'
|
|
14
19
|
import { useInputValue } from '../utils/input'
|
|
15
20
|
|
|
21
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, pressProps, viewProps])
|
|
22
|
+
|
|
16
23
|
const selectButtonTokens = (tokens) =>
|
|
17
24
|
selectTokens('Button', {
|
|
18
25
|
...tokens,
|
|
@@ -54,12 +61,41 @@ const selectSwitchStyles = ({
|
|
|
54
61
|
})
|
|
55
62
|
})
|
|
56
63
|
|
|
64
|
+
const selectLabelStyles = ({ labelMarginLeft }) => ({ marginLeft: labelMarginLeft })
|
|
65
|
+
const selectLabelTokens = ({
|
|
66
|
+
labelColor,
|
|
67
|
+
labelFontName,
|
|
68
|
+
labelFontSize,
|
|
69
|
+
labelFontWeight,
|
|
70
|
+
labelLineHeight
|
|
71
|
+
}) => ({
|
|
72
|
+
color: labelColor,
|
|
73
|
+
fontName: labelFontName,
|
|
74
|
+
fontWeight: labelFontWeight,
|
|
75
|
+
fontSize: labelFontSize,
|
|
76
|
+
lineHeight: labelLineHeight
|
|
77
|
+
})
|
|
78
|
+
|
|
57
79
|
const ToggleSwitch = forwardRef(
|
|
58
80
|
(
|
|
59
|
-
{
|
|
81
|
+
{
|
|
82
|
+
value,
|
|
83
|
+
initialValue,
|
|
84
|
+
onChange,
|
|
85
|
+
id,
|
|
86
|
+
label,
|
|
87
|
+
inactive,
|
|
88
|
+
tokens,
|
|
89
|
+
tooltip,
|
|
90
|
+
variant,
|
|
91
|
+
accessibilityRole = 'switch',
|
|
92
|
+
accessibilityLabel = label,
|
|
93
|
+
...rest
|
|
94
|
+
},
|
|
60
95
|
ref
|
|
61
96
|
) => {
|
|
62
97
|
const getTokens = useThemeTokensCallback('ToggleSwitch', tokens, variant)
|
|
98
|
+
const themeTokens = getTokens()
|
|
63
99
|
|
|
64
100
|
const { currentValue, setValue } = useInputValue({
|
|
65
101
|
value,
|
|
@@ -68,51 +104,66 @@ const ToggleSwitch = forwardRef(
|
|
|
68
104
|
})
|
|
69
105
|
|
|
70
106
|
const handlePress = (event) => setValue(!currentValue, event)
|
|
71
|
-
|
|
72
107
|
const getButtonTokens = (buttonState) => selectButtonTokens(getTokens(buttonState))
|
|
108
|
+
const uniqueId = useUniqueId('toggleSwitch')
|
|
109
|
+
const inputId = id ?? uniqueId
|
|
73
110
|
|
|
74
111
|
return (
|
|
75
|
-
<
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
112
|
+
<StackView space={2} direction="row">
|
|
113
|
+
{Boolean(label) && (
|
|
114
|
+
<View style={selectLabelStyles(themeTokens)}>
|
|
115
|
+
<InputLabel
|
|
116
|
+
forId={inputId}
|
|
117
|
+
label={label}
|
|
118
|
+
tokens={selectLabelTokens(themeTokens)}
|
|
119
|
+
tooltip={tooltip}
|
|
120
|
+
/>
|
|
121
|
+
</View>
|
|
122
|
+
)}
|
|
123
|
+
<ButtonBase
|
|
124
|
+
id={id}
|
|
125
|
+
ref={ref}
|
|
126
|
+
selected={currentValue}
|
|
127
|
+
inactive={inactive}
|
|
128
|
+
tokens={getButtonTokens}
|
|
129
|
+
accessibilityLabel={accessibilityLabel}
|
|
130
|
+
accessibilityRole={accessibilityRole}
|
|
131
|
+
accessibilityState={{ checked: currentValue }}
|
|
132
|
+
onPress={handlePress}
|
|
133
|
+
{...selectProps(rest)}
|
|
134
|
+
>
|
|
135
|
+
{(buttonState) => {
|
|
136
|
+
const stateTokens = getTokens(buttonState)
|
|
137
|
+
const IconComponent = stateTokens.icon
|
|
138
|
+
const switchStyles = selectSwitchStyles(stateTokens)
|
|
139
|
+
const trackStyles = selectTrackStyles(stateTokens)
|
|
140
|
+
const iconTokens = selectIconTokens(stateTokens)
|
|
141
|
+
|
|
142
|
+
// If drag-slide support is needed, use a PanResponder and apply these to an Animated value.
|
|
143
|
+
// Use translate transforms for smoothest non-thread-blocking animations and to allow drag.
|
|
144
|
+
const slideStart = 0
|
|
145
|
+
const slideEnd =
|
|
146
|
+
stateTokens.width - stateTokens.switchSize - stateTokens.trackBorderWidth * 2
|
|
147
|
+
const switchOffset = buttonState.selected ? slideEnd : slideStart
|
|
148
|
+
const switchPositionStyle = { transform: [{ translateX: switchOffset }] }
|
|
149
|
+
|
|
150
|
+
return (
|
|
151
|
+
<View style={[staticStyles.track, trackStyles]}>
|
|
152
|
+
<View style={[staticStyles.switch, switchStyles, switchPositionStyle]}>
|
|
153
|
+
{IconComponent && <IconComponent {...iconTokens} />}
|
|
154
|
+
</View>
|
|
103
155
|
</View>
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
</
|
|
156
|
+
)
|
|
157
|
+
}}
|
|
158
|
+
</ButtonBase>
|
|
159
|
+
</StackView>
|
|
108
160
|
)
|
|
109
161
|
}
|
|
110
162
|
)
|
|
111
163
|
ToggleSwitch.displayName = 'ToggleSwitch'
|
|
112
164
|
|
|
113
165
|
ToggleSwitch.propTypes = {
|
|
114
|
-
...
|
|
115
|
-
...pressProps.propTypes,
|
|
166
|
+
...selectedSystemPropTypes,
|
|
116
167
|
tokens: getTokensPropType('ToggleSwitch'),
|
|
117
168
|
variant: variantProp.propType,
|
|
118
169
|
/**
|
|
@@ -131,11 +182,23 @@ ToggleSwitch.propTypes = {
|
|
|
131
182
|
* this should always be passed and used to control the state of the switch.
|
|
132
183
|
*/
|
|
133
184
|
onChange: PropTypes.func,
|
|
185
|
+
/**
|
|
186
|
+
* Input ID.
|
|
187
|
+
*/
|
|
188
|
+
id: PropTypes.string,
|
|
189
|
+
/**
|
|
190
|
+
* An optional label.
|
|
191
|
+
*/
|
|
192
|
+
label: PropTypes.string,
|
|
134
193
|
/**
|
|
135
194
|
* If passed, the switch does not respond to user input and may recieve different
|
|
136
195
|
* theme tokens if the theme supports inactive appearance.
|
|
137
196
|
*/
|
|
138
|
-
inactive: PropTypes.bool
|
|
197
|
+
inactive: PropTypes.bool,
|
|
198
|
+
/**
|
|
199
|
+
* Content of an optional Tooltip. If set, a tooltip button will be shown next to the label.
|
|
200
|
+
*/
|
|
201
|
+
tooltip: PropTypes.string
|
|
139
202
|
}
|
|
140
203
|
|
|
141
204
|
const staticStyles = StyleSheet.create({
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react'
|
|
2
|
+
import PropTypes from 'prop-types'
|
|
3
|
+
import ABBPropTypes from 'airbnb-prop-types'
|
|
4
|
+
import { Platform } from 'react-native'
|
|
5
|
+
|
|
6
|
+
import ToggleSwitch from './ToggleSwitch'
|
|
7
|
+
import Fieldset from '../Fieldset'
|
|
8
|
+
import { getStackedContent } from '../StackView'
|
|
9
|
+
import { useViewport } from '../ViewportProvider'
|
|
10
|
+
import { useThemeTokens } from '../ThemeProvider'
|
|
11
|
+
import {
|
|
12
|
+
a11yProps,
|
|
13
|
+
getTokensPropType,
|
|
14
|
+
pressProps,
|
|
15
|
+
selectSystemProps,
|
|
16
|
+
variantProp,
|
|
17
|
+
viewProps
|
|
18
|
+
} from '../utils/props'
|
|
19
|
+
import { useMultipleInputValues } from '../utils/input'
|
|
20
|
+
|
|
21
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, pressProps, viewProps])
|
|
22
|
+
|
|
23
|
+
const ToggleSwitchGroup = forwardRef(
|
|
24
|
+
(
|
|
25
|
+
{
|
|
26
|
+
variant,
|
|
27
|
+
tokens,
|
|
28
|
+
items = [],
|
|
29
|
+
values,
|
|
30
|
+
initialValues,
|
|
31
|
+
maxValues = 1,
|
|
32
|
+
onChange,
|
|
33
|
+
readOnly = false,
|
|
34
|
+
inactive = false,
|
|
35
|
+
feedback,
|
|
36
|
+
hint,
|
|
37
|
+
tooltip,
|
|
38
|
+
legend,
|
|
39
|
+
name: inputGroupName,
|
|
40
|
+
accessibilityRole = maxValues === 1
|
|
41
|
+
? 'radiogroup' // radiogroup is cross-platform; only web aria has generic groups
|
|
42
|
+
: Platform.select({ web: 'group', default: 'none' }),
|
|
43
|
+
toggleSwitchTokens,
|
|
44
|
+
validation,
|
|
45
|
+
...rest
|
|
46
|
+
},
|
|
47
|
+
ref
|
|
48
|
+
) => {
|
|
49
|
+
const viewport = useViewport()
|
|
50
|
+
|
|
51
|
+
const { space, fieldSpace } = useThemeTokens('ToggleSwitchGroup', tokens, variant, {
|
|
52
|
+
viewport
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
const { currentValues, toggleOneValue } = useMultipleInputValues({
|
|
56
|
+
initialValues,
|
|
57
|
+
values,
|
|
58
|
+
maxValues,
|
|
59
|
+
onChange,
|
|
60
|
+
readOnly
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
const selectedProps = selectProps({
|
|
64
|
+
accessibilityRole,
|
|
65
|
+
...rest
|
|
66
|
+
})
|
|
67
|
+
const itemA11yRole = selectedProps.accessibilityRole === 'radiogroup' ? 'radio' : 'switch'
|
|
68
|
+
|
|
69
|
+
const toggleSwitches = items.map(
|
|
70
|
+
(
|
|
71
|
+
{
|
|
72
|
+
label,
|
|
73
|
+
id = label,
|
|
74
|
+
accessibilityLabel = label,
|
|
75
|
+
onChange: itemOnChange,
|
|
76
|
+
ref: itemRef,
|
|
77
|
+
tooltip: itemTooltip
|
|
78
|
+
},
|
|
79
|
+
index
|
|
80
|
+
) => {
|
|
81
|
+
const isSelected = currentValues.includes(id)
|
|
82
|
+
|
|
83
|
+
const handleChange = (newCheckedState, event) => {
|
|
84
|
+
if (typeof itemOnChange === 'function') itemOnChange(newCheckedState, event)
|
|
85
|
+
toggleOneValue(id, event)
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const itemA11y = {
|
|
89
|
+
accessibilityState: { checked: isSelected },
|
|
90
|
+
accessibilityRole: itemA11yRole,
|
|
91
|
+
accessibilityLabel,
|
|
92
|
+
...a11yProps.getPositionInSet(items.length, index)
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return (
|
|
96
|
+
<ToggleSwitch
|
|
97
|
+
id={id}
|
|
98
|
+
ref={itemRef}
|
|
99
|
+
key={id}
|
|
100
|
+
onChange={handleChange}
|
|
101
|
+
tokens={toggleSwitchTokens}
|
|
102
|
+
value={isSelected}
|
|
103
|
+
inactive={inactive}
|
|
104
|
+
label={label}
|
|
105
|
+
tooltip={itemTooltip}
|
|
106
|
+
{...itemA11y}
|
|
107
|
+
/>
|
|
108
|
+
)
|
|
109
|
+
}
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
return (
|
|
113
|
+
<Fieldset
|
|
114
|
+
ref={ref}
|
|
115
|
+
name={inputGroupName}
|
|
116
|
+
legend={legend}
|
|
117
|
+
tooltip={tooltip}
|
|
118
|
+
hint={hint}
|
|
119
|
+
space={fieldSpace}
|
|
120
|
+
feedback={feedback}
|
|
121
|
+
inactive={inactive}
|
|
122
|
+
validation={validation}
|
|
123
|
+
{...selectedProps}
|
|
124
|
+
>
|
|
125
|
+
{getStackedContent(toggleSwitches, { space, direction: 'column' })}
|
|
126
|
+
</Fieldset>
|
|
127
|
+
)
|
|
128
|
+
}
|
|
129
|
+
)
|
|
130
|
+
ToggleSwitchGroup.displayName = 'ToggleSwitchGroup'
|
|
131
|
+
|
|
132
|
+
ToggleSwitchGroup.propTypes = {
|
|
133
|
+
...selectedSystemPropTypes,
|
|
134
|
+
tokens: getTokensPropType('ToggleSwitchGroup'),
|
|
135
|
+
variant: variantProp.propType,
|
|
136
|
+
/**
|
|
137
|
+
* The maximum number of items a user may select at once. Defaults to 1 and behaves
|
|
138
|
+
* like radio buttons. To have no limit and allow any number of selections, pass `null`.
|
|
139
|
+
*/
|
|
140
|
+
maxValues: PropTypes.number,
|
|
141
|
+
/**
|
|
142
|
+
* The options a user may select
|
|
143
|
+
*/
|
|
144
|
+
items: PropTypes.arrayOf(
|
|
145
|
+
PropTypes.shape({
|
|
146
|
+
/**
|
|
147
|
+
* The text displayed to the user on the label.
|
|
148
|
+
*/
|
|
149
|
+
label: PropTypes.string.isRequired,
|
|
150
|
+
/**
|
|
151
|
+
* An optional accessibility label may be passed to each ToggleSwitch
|
|
152
|
+
* and will be applied as normal for a React Native accessibilityLabel prop.
|
|
153
|
+
*/
|
|
154
|
+
accessibilityLabel: PropTypes.string,
|
|
155
|
+
/**
|
|
156
|
+
* An optional unique string may be provided to identify this option,
|
|
157
|
+
* which will be used in code and passed to any onChange function.
|
|
158
|
+
* If not provided, the label is used.
|
|
159
|
+
*/
|
|
160
|
+
id: PropTypes.string,
|
|
161
|
+
/**
|
|
162
|
+
* An optional ref for one individual ToggleSwitch in the ToggleSwitchGroup
|
|
163
|
+
*/
|
|
164
|
+
ref: ABBPropTypes.ref()
|
|
165
|
+
})
|
|
166
|
+
),
|
|
167
|
+
/**
|
|
168
|
+
* If provided, this function is called when the current selection is changed
|
|
169
|
+
* and is passed an array of the `id`s of all currently selected `items`.
|
|
170
|
+
*/
|
|
171
|
+
onChange: PropTypes.func,
|
|
172
|
+
/**
|
|
173
|
+
* If the selected item(s) in the toggle switch group are to be controlled externally by
|
|
174
|
+
* a parent component, pass an array of strings as well as an `onChange` handler.
|
|
175
|
+
* Passing an array for "values" makes the ToggleSwitchGroup a "controlled" component that
|
|
176
|
+
* expects its state to be handled via `onChange` and so doesn't handle it itself.
|
|
177
|
+
*/
|
|
178
|
+
values: PropTypes.arrayOf(PropTypes.string),
|
|
179
|
+
/**
|
|
180
|
+
* If `values` is not passed, making the ToggleSwitchGroup an "uncontrolled" component
|
|
181
|
+
* managing its own selected state, a default set of selections may be provided.
|
|
182
|
+
* Changing the `initialValues` does not change the user's selections.
|
|
183
|
+
*/
|
|
184
|
+
initialValues: PropTypes.arrayOf(PropTypes.string),
|
|
185
|
+
/**
|
|
186
|
+
* Optional additional text giving more detail to help a user make a choice.
|
|
187
|
+
*/
|
|
188
|
+
hint: PropTypes.string,
|
|
189
|
+
/**
|
|
190
|
+
* Optional tooltip text content to include alongside the legend and hint.
|
|
191
|
+
*/
|
|
192
|
+
tooltip: PropTypes.string,
|
|
193
|
+
/**
|
|
194
|
+
* If provided, a Feedback element is rendered containing this text.
|
|
195
|
+
*/
|
|
196
|
+
feedback: PropTypes.string,
|
|
197
|
+
/**
|
|
198
|
+
* Main text used to describe this group, used in Fieldset's Legend element.
|
|
199
|
+
*/
|
|
200
|
+
legend: PropTypes.string,
|
|
201
|
+
/**
|
|
202
|
+
* Toggle switch token overrides.
|
|
203
|
+
*/
|
|
204
|
+
toggleSwitchTokens: getTokensPropType('ToggleSwitch'),
|
|
205
|
+
/**
|
|
206
|
+
* Current validation status of the group, passed to the feedback element if there is one.
|
|
207
|
+
*/
|
|
208
|
+
validation: PropTypes.oneOf(['error', 'success'])
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
export default ToggleSwitchGroup
|
package/src/Tooltip/Tooltip.jsx
CHANGED
|
@@ -3,13 +3,22 @@ import { Dimensions, Platform, Pressable, StyleSheet, Text, View } from 'react-n
|
|
|
3
3
|
|
|
4
4
|
import PropTypes from 'prop-types'
|
|
5
5
|
import { applyShadowToken, 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 Backdrop from './Backdrop'
|
|
8
15
|
import getTooltipPosition from './getTooltipPosition'
|
|
9
16
|
import TooltipButton from '../TooltipButton'
|
|
10
17
|
import useCopy from '../utils/useCopy'
|
|
11
18
|
import dictionary from './dictionary'
|
|
12
19
|
|
|
20
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
21
|
+
|
|
13
22
|
const selectTooltipStyles = ({
|
|
14
23
|
backgroundColor,
|
|
15
24
|
paddingTop,
|
|
@@ -100,7 +109,7 @@ const defaultControl = (pressableState, variant) => (
|
|
|
100
109
|
* - Tooltips may also be useful when vertical space is an issue.
|
|
101
110
|
*/
|
|
102
111
|
const Tooltip = forwardRef(
|
|
103
|
-
({ children, content, position = 'auto', copy = 'en', tokens, variant }, ref) => {
|
|
112
|
+
({ children, content, position = 'auto', copy = 'en', tokens, variant, ...rest }, ref) => {
|
|
104
113
|
const [isOpen, setIsOpen] = useState(false)
|
|
105
114
|
|
|
106
115
|
const controlRef = useRef()
|
|
@@ -209,7 +218,7 @@ const Tooltip = forwardRef(
|
|
|
209
218
|
control === defaultControl ? { top: 10, bottom: 10, left: 10, right: 10 } : undefined
|
|
210
219
|
|
|
211
220
|
return (
|
|
212
|
-
<View style={staticStyles.container}>
|
|
221
|
+
<View style={staticStyles.container} {...selectProps(rest)}>
|
|
213
222
|
<Pressable
|
|
214
223
|
onPress={toggleIsOpen}
|
|
215
224
|
ref={controlRef}
|
|
@@ -256,6 +265,7 @@ const Tooltip = forwardRef(
|
|
|
256
265
|
Tooltip.displayName = 'Tooltip'
|
|
257
266
|
|
|
258
267
|
Tooltip.propTypes = {
|
|
268
|
+
...selectedSystemPropTypes,
|
|
259
269
|
/**
|
|
260
270
|
* Used to render the control (i.e. tooltip trigger). If a render function is used it will receive the
|
|
261
271
|
* pressable state and tooltip variant as an argument.
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
2
|
import { View } from 'react-native'
|
|
3
|
-
|
|
4
3
|
import PropTypes from 'prop-types'
|
|
5
4
|
import { useThemeTokens, applyOuterBorder } from '../ThemeProvider'
|
|
6
|
-
import { getTokensPropType, variantProp } from '../utils'
|
|
5
|
+
import { a11yProps, getTokensPropType, selectSystemProps, variantProp, viewProps } from '../utils'
|
|
7
6
|
import Icon from '../Icon'
|
|
8
7
|
|
|
8
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
9
|
+
|
|
9
10
|
const selectInnerContainerStyles = ({ borderRadius, width }) => ({ borderRadius, width })
|
|
10
11
|
|
|
11
12
|
const selectIconTokens = ({ iconSize, iconColor /* iconScale = 1 */ }) => ({
|
|
@@ -19,13 +20,13 @@ const selectIconTokens = ({ iconSize, iconColor /* iconScale = 1 */ }) => ({
|
|
|
19
20
|
* In fact though, it isn't actually a pressable - it's meant to be used as pressable's content.
|
|
20
21
|
* Due to this any interaction states (e.g. pressed, hover, etc.) has to be passed down to it as a prop.
|
|
21
22
|
*/
|
|
22
|
-
const TooltipButton = ({ pressableState, tokens, variant }) => {
|
|
23
|
+
const TooltipButton = ({ pressableState, tokens, variant, ...rest }) => {
|
|
23
24
|
const themeTokens = useThemeTokens('TooltipButton', tokens, variant, pressableState)
|
|
24
25
|
|
|
25
26
|
const { icon: IconComponent } = themeTokens
|
|
26
27
|
|
|
27
28
|
return (
|
|
28
|
-
<View style={applyOuterBorder(themeTokens)}>
|
|
29
|
+
<View style={applyOuterBorder(themeTokens)} {...selectProps(rest)}>
|
|
29
30
|
<View style={selectInnerContainerStyles(themeTokens)}>
|
|
30
31
|
{IconComponent && <Icon icon={IconComponent} tokens={selectIconTokens(themeTokens)} />}
|
|
31
32
|
</View>
|
|
@@ -34,6 +35,7 @@ const TooltipButton = ({ pressableState, tokens, variant }) => {
|
|
|
34
35
|
}
|
|
35
36
|
|
|
36
37
|
TooltipButton.propTypes = {
|
|
38
|
+
...selectedSystemPropTypes,
|
|
37
39
|
/**
|
|
38
40
|
* Used as appearances when resolving theme tokens.
|
|
39
41
|
*/
|
|
@@ -11,13 +11,17 @@ import {
|
|
|
11
11
|
getTokensPropType,
|
|
12
12
|
getMaxFontMultiplier,
|
|
13
13
|
headingTags,
|
|
14
|
+
selectSystemProps,
|
|
14
15
|
textTags,
|
|
16
|
+
viewProps,
|
|
15
17
|
getA11yPropsFromHtmlTag
|
|
16
18
|
} from '../utils'
|
|
17
19
|
/**
|
|
18
20
|
* @typedef {import('../utils/a11y/semantics').TextTag} TextTag
|
|
19
21
|
*/
|
|
20
22
|
|
|
23
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
24
|
+
|
|
21
25
|
const selectTextStyles = ({
|
|
22
26
|
fontWeight,
|
|
23
27
|
fontSize,
|
|
@@ -64,17 +68,17 @@ const Typography = forwardRef(
|
|
|
64
68
|
maxFontSizeMultiplier: getMaxFontMultiplier(themeTokens)
|
|
65
69
|
}
|
|
66
70
|
|
|
67
|
-
const
|
|
71
|
+
const selectedProps = selectProps({
|
|
68
72
|
...getA11yPropsFromHtmlTag(tag, accessibilityRole),
|
|
69
|
-
...
|
|
70
|
-
}
|
|
73
|
+
...rest
|
|
74
|
+
})
|
|
71
75
|
|
|
72
76
|
return block ? (
|
|
73
|
-
<View ref={ref} {...
|
|
77
|
+
<View ref={ref} {...selectedProps}>
|
|
74
78
|
<Text {...textProps}>{children}</Text>
|
|
75
79
|
</View>
|
|
76
80
|
) : (
|
|
77
|
-
<Text ref={ref} {...textProps} {...
|
|
81
|
+
<Text ref={ref} {...textProps} {...selectedProps}>
|
|
78
82
|
{children}
|
|
79
83
|
</Text>
|
|
80
84
|
)
|
|
@@ -83,7 +87,7 @@ const Typography = forwardRef(
|
|
|
83
87
|
Typography.displayName = 'Typography'
|
|
84
88
|
|
|
85
89
|
Typography.propTypes = {
|
|
86
|
-
...
|
|
90
|
+
...selectedSystemPropTypes,
|
|
87
91
|
tokens: getTokensPropType('Typography'),
|
|
88
92
|
variant: variantProp.propType,
|
|
89
93
|
/**
|
package/src/index.js
CHANGED
|
@@ -37,14 +37,14 @@ export { default as StepTracker } from './StepTracker'
|
|
|
37
37
|
export { default as Tabs } from './Tabs'
|
|
38
38
|
export { default as Tags } from './Tags'
|
|
39
39
|
export * from './TextInput'
|
|
40
|
-
export
|
|
40
|
+
export * from './ToggleSwitch'
|
|
41
41
|
export { default as Tooltip } from './Tooltip'
|
|
42
42
|
export { default as TooltipButton } from './TooltipButton'
|
|
43
43
|
export { default as Typography } from './Typography'
|
|
44
44
|
|
|
45
45
|
export { default as A11yInfoProvider, useA11yInfo } from './A11yInfoProvider'
|
|
46
46
|
export { default as BaseProvider } from './BaseProvider'
|
|
47
|
-
export { default as ViewportProvider, useViewport } from './ViewportProvider'
|
|
47
|
+
export { default as ViewportProvider, useViewport, ViewportContext } from './ViewportProvider'
|
|
48
48
|
export {
|
|
49
49
|
default as ThemeProvider,
|
|
50
50
|
useTheme,
|
|
@@ -150,8 +150,9 @@ export const getA11yPropsFromHtmlTag = (tag, nativeRole) => {
|
|
|
150
150
|
if (nativeRole !== undefined && Platform.OS !== 'web') return { accessibilityRole: nativeRole }
|
|
151
151
|
|
|
152
152
|
if (tag) {
|
|
153
|
-
|
|
154
|
-
|
|
153
|
+
// aria roles don't have native counterparts and RN may throw an error if an unrecognised role is passed
|
|
154
|
+
const ariaRole = Platform.OS === 'web' && tagsToRoles[tag]
|
|
155
|
+
if (ariaRole) return { accessibilityRole: ariaRole }
|
|
155
156
|
|
|
156
157
|
const accessibilityLevel = getHeadingLevel(tag)
|
|
157
158
|
if (accessibilityLevel) return { accessibilityRole: 'header', accessibilityLevel }
|
package/src/utils/children.jsx
CHANGED
|
@@ -47,7 +47,8 @@ export const unpackFragment = (child) => {
|
|
|
47
47
|
|
|
48
48
|
const isStringOrNumber = (child) => typeof child === 'string' || typeof child === 'number'
|
|
49
49
|
// Wrap an A11yText with neighouring text strings so it doesn't split them into multiple <Text>s
|
|
50
|
-
const isWrapable = (child) =>
|
|
50
|
+
const isWrapable = (child) =>
|
|
51
|
+
isStringOrNumber(child) || child.type === A11yText || child.type?.name === 'FootnoteLink'
|
|
51
52
|
const combineKeys = (childrenArray) =>
|
|
52
53
|
childrenArray.reduce((newKey, child) => `${newKey}${child.key || ''}`, '')
|
|
53
54
|
|
package/src/utils/index.js
CHANGED
|
@@ -3,7 +3,7 @@ export * from './animation'
|
|
|
3
3
|
export * from './children'
|
|
4
4
|
export * from './input'
|
|
5
5
|
export * from './pressability'
|
|
6
|
-
export * from './
|
|
6
|
+
export * from './props'
|
|
7
7
|
|
|
8
8
|
export { default as info } from './info'
|
|
9
9
|
export { default as useCopy } from './useCopy'
|
|
@@ -12,3 +12,5 @@ export { default as useSpacingScale } from './useSpacingScale'
|
|
|
12
12
|
export { default as useResponsiveProp } from './useResponsiveProp'
|
|
13
13
|
export * from './useResponsiveProp'
|
|
14
14
|
export { default as useUniqueId } from './useUniqueId'
|
|
15
|
+
export { default as withLinkRouter } from './withLinkRouter'
|
|
16
|
+
export * from './ssr'
|