@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/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
|
|
@@ -5,17 +5,23 @@ import { Pressable, Platform } from 'react-native'
|
|
|
5
5
|
import { useViewport } from '../ViewportProvider'
|
|
6
6
|
import { applyOuterBorder, validateThemeTokens } from '../ThemeProvider'
|
|
7
7
|
import {
|
|
8
|
+
a11yProps,
|
|
9
|
+
clickProps,
|
|
10
|
+
getTokenNames,
|
|
11
|
+
getTokensSetPropType,
|
|
12
|
+
linkProps,
|
|
8
13
|
resolvePressableState,
|
|
9
14
|
resolvePressableTokens,
|
|
15
|
+
selectSystemProps,
|
|
10
16
|
selectTokens,
|
|
11
|
-
getTokenNames,
|
|
12
|
-
getTokensSetPropType,
|
|
13
17
|
variantProp,
|
|
14
|
-
|
|
18
|
+
viewProps,
|
|
19
|
+
withLinkRouter
|
|
15
20
|
} from '../utils'
|
|
16
|
-
import { a11yProps } from '../utils/propTypes'
|
|
17
21
|
import CardBase from './CardBase'
|
|
18
22
|
|
|
23
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
24
|
+
|
|
19
25
|
const tokenKeys = [
|
|
20
26
|
...getTokenNames('Card'),
|
|
21
27
|
|
|
@@ -43,17 +49,13 @@ const PressableCardBase = forwardRef(
|
|
|
43
49
|
inactive,
|
|
44
50
|
href,
|
|
45
51
|
hrefAttrs,
|
|
46
|
-
onPress,
|
|
47
52
|
accessibilityRole = href ? 'link' : undefined,
|
|
48
|
-
...
|
|
53
|
+
...rawRest
|
|
49
54
|
},
|
|
50
55
|
ref
|
|
51
56
|
) => {
|
|
57
|
+
const { onPress, ...rest } = clickProps.toPressProps(rawRest)
|
|
52
58
|
const viewport = useViewport()
|
|
53
|
-
const a11y = a11yProps.select({
|
|
54
|
-
...rest,
|
|
55
|
-
accessibilityRole
|
|
56
|
-
})
|
|
57
59
|
const additionalState = { checked, validation, inactive, viewport }
|
|
58
60
|
|
|
59
61
|
const getCardState = (pressableState) => resolvePressableState(pressableState, additionalState)
|
|
@@ -96,7 +98,7 @@ const PressableCardBase = forwardRef(
|
|
|
96
98
|
onKeyDown={handleKeyDown}
|
|
97
99
|
hrefAttrs={hrefAttrs}
|
|
98
100
|
style={getOuterBorderStyle}
|
|
99
|
-
{...
|
|
101
|
+
{...selectProps({ ...rest, accessibilityRole })}
|
|
100
102
|
>
|
|
101
103
|
{(pressableState) => (
|
|
102
104
|
<CardBase tokens={getCardTokens(pressableState)}>
|
|
@@ -110,10 +112,10 @@ const PressableCardBase = forwardRef(
|
|
|
110
112
|
PressableCardBase.displayName = 'PressableCardBase'
|
|
111
113
|
|
|
112
114
|
PressableCardBase.propTypes = {
|
|
115
|
+
...selectedSystemPropTypes,
|
|
113
116
|
children: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),
|
|
114
117
|
tokens: getTokensSetPropType(tokenKeys, { requireAll: true, allowFunction: true }),
|
|
115
|
-
variant: variantProp.propType
|
|
116
|
-
...a11yProps.types
|
|
118
|
+
variant: variantProp.propType
|
|
117
119
|
}
|
|
118
120
|
|
|
119
|
-
export default PressableCardBase
|
|
121
|
+
export default withLinkRouter(PressableCardBase)
|
|
@@ -3,16 +3,22 @@ import PropTypes from 'prop-types'
|
|
|
3
3
|
import { Platform, Pressable, StyleSheet, Text, View } from 'react-native'
|
|
4
4
|
|
|
5
5
|
import CheckboxInput from './CheckboxInput'
|
|
6
|
-
// @todo move `LabelContent` outside of the `InputLabel` and fix
|
|
7
|
-
// the issue with the cursor not being pointer on Web
|
|
8
6
|
import CheckboxLabel from '../InputLabel/LabelContent'
|
|
9
7
|
import Feedback from '../Feedback'
|
|
10
8
|
import StackView from '../StackView'
|
|
11
9
|
import { applyShadowToken, applyTextStyles, useThemeTokensCallback } from '../ThemeProvider'
|
|
12
|
-
import {
|
|
13
|
-
|
|
10
|
+
import {
|
|
11
|
+
a11yProps,
|
|
12
|
+
getTokensPropType,
|
|
13
|
+
selectSystemProps,
|
|
14
|
+
useInputValue,
|
|
15
|
+
variantProp,
|
|
16
|
+
viewProps
|
|
17
|
+
} from '../utils'
|
|
14
18
|
import useUniqueId from '../utils/useUniqueId'
|
|
15
19
|
|
|
20
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
21
|
+
|
|
16
22
|
const selectInputStyles = (
|
|
17
23
|
{
|
|
18
24
|
iconBackgroundColor,
|
|
@@ -156,7 +162,6 @@ const Checkbox = forwardRef(
|
|
|
156
162
|
// The expected keyboard shortcut for activating a checkbox is the Space key
|
|
157
163
|
if (event?.key === ' ') handleChange(event)
|
|
158
164
|
}
|
|
159
|
-
const accessibilityProps = a11yProps.select(rest)
|
|
160
165
|
const uniqueId = useUniqueId('checkbox')
|
|
161
166
|
const inputId = id ?? uniqueId
|
|
162
167
|
|
|
@@ -169,7 +174,7 @@ const Checkbox = forwardRef(
|
|
|
169
174
|
onPress={handleChange}
|
|
170
175
|
accessibilityRole="checkbox"
|
|
171
176
|
accessibilityState={{ checked: isChecked, disabled: inactive }}
|
|
172
|
-
{...
|
|
177
|
+
{...selectProps(rest)}
|
|
173
178
|
>
|
|
174
179
|
{({ focused: focus, hovered: hover, pressed }) => {
|
|
175
180
|
const { icon: IconComponent, ...stateTokens } = getTokens({ focus, hover, pressed })
|
|
@@ -224,7 +229,7 @@ const Checkbox = forwardRef(
|
|
|
224
229
|
Checkbox.displayName = 'Checkbox'
|
|
225
230
|
|
|
226
231
|
Checkbox.propTypes = {
|
|
227
|
-
...
|
|
232
|
+
...selectedSystemPropTypes,
|
|
228
233
|
/**
|
|
229
234
|
* Use `checked` for controlled Checkbox. For uncontrolled Checkbox, use the `defaultChecked` prop.
|
|
230
235
|
*/
|
package/src/Divider/Divider.jsx
CHANGED
|
@@ -3,10 +3,20 @@ import PropTypes from 'prop-types'
|
|
|
3
3
|
import { View, StyleSheet, Platform } from 'react-native'
|
|
4
4
|
import { useThemeTokens } from '../ThemeProvider'
|
|
5
5
|
import Spacer from '../Spacer'
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
a11yProps,
|
|
8
|
+
getTokensPropType,
|
|
9
|
+
selectSystemProps,
|
|
10
|
+
spacingProps,
|
|
11
|
+
variantProp,
|
|
12
|
+
viewProps
|
|
13
|
+
} from '../utils'
|
|
14
|
+
|
|
15
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
16
|
+
|
|
7
17
|
/**
|
|
8
|
-
* @typedef {import('../utils/
|
|
9
|
-
* @typedef {import('../utils/
|
|
18
|
+
* @typedef {import('../utils/props/spacingProps.js').SpacingIndex} SpacingIndex
|
|
19
|
+
* @typedef {import('../utils/props/spacingProps.js').SpacingObject} SpacingObject
|
|
10
20
|
*/
|
|
11
21
|
|
|
12
22
|
/**
|
|
@@ -45,7 +55,7 @@ import { getTokensPropType, variantProp, spacingProps } from '../utils'
|
|
|
45
55
|
*
|
|
46
56
|
* For accessibility purposes a divider component will be described with ARIA attributes, i.e. `role="separator"` and `aria-orientation="vertical/horizontal"`.
|
|
47
57
|
*/
|
|
48
|
-
const Divider = forwardRef(({ variant, vertical = false, space, tokens,
|
|
58
|
+
const Divider = forwardRef(({ variant, vertical = false, space, tokens, ...rest }, ref) => {
|
|
49
59
|
const { color, width } = useThemeTokens('Divider', tokens, variant)
|
|
50
60
|
|
|
51
61
|
const borderStyles = vertical
|
|
@@ -68,8 +78,10 @@ const Divider = forwardRef(({ variant, vertical = false, space, tokens, testID }
|
|
|
68
78
|
: // There are no such equivalent attributes for native
|
|
69
79
|
{}
|
|
70
80
|
|
|
81
|
+
const { testID, ...selectedProps } = selectProps({ ...a11y, ...rest })
|
|
82
|
+
|
|
71
83
|
const divider = (
|
|
72
|
-
<View ref={ref} style={[styles.divider, borderStyles]} testID={testID} {...
|
|
84
|
+
<View ref={ref} style={[styles.divider, borderStyles]} testID={testID} {...selectedProps} />
|
|
73
85
|
)
|
|
74
86
|
if (!space) return divider
|
|
75
87
|
const spacerProps = { space, direction: vertical ? 'row' : 'column' }
|
|
@@ -84,6 +96,7 @@ const Divider = forwardRef(({ variant, vertical = false, space, tokens, testID }
|
|
|
84
96
|
Divider.displayName = 'Divider'
|
|
85
97
|
|
|
86
98
|
Divider.propTypes = {
|
|
99
|
+
...selectedSystemPropTypes,
|
|
87
100
|
tokens: getTokensPropType('Divider'),
|
|
88
101
|
space: spacingProps.types.spacingValue,
|
|
89
102
|
variant: variantProp.propType,
|
|
@@ -91,13 +104,7 @@ Divider.propTypes = {
|
|
|
91
104
|
* By default, the divider is a horizontal line the full width of its parent.
|
|
92
105
|
* With `vertical` prop and when inside a container with { flexDirection: row }, draws a full height vertical line.
|
|
93
106
|
*/
|
|
94
|
-
vertical: PropTypes.bool
|
|
95
|
-
/**
|
|
96
|
-
* @ignore
|
|
97
|
-
* In tests, the only way to select dividers is with testID prop and getByTestId, since they have no content,
|
|
98
|
-
* no accessibility role on native, and there is no equivalent of nextSibling in React Native Testing Library.
|
|
99
|
-
*/
|
|
100
|
-
testID: PropTypes.string
|
|
107
|
+
vertical: PropTypes.bool
|
|
101
108
|
}
|
|
102
109
|
|
|
103
110
|
const styles = StyleSheet.create({
|
|
@@ -3,7 +3,9 @@ import { Pressable, View } from 'react-native'
|
|
|
3
3
|
import PropTypes from 'prop-types'
|
|
4
4
|
|
|
5
5
|
import { useThemeTokensCallback, verticalAlignRow } from '../ThemeProvider'
|
|
6
|
-
import { getTokensPropType, variantProp,
|
|
6
|
+
import { a11yProps, getTokensPropType, selectSystemProps, variantProp, viewProps } from '../utils'
|
|
7
|
+
|
|
8
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
7
9
|
|
|
8
10
|
function selectContainerStyles({
|
|
9
11
|
backgroundColor,
|
|
@@ -48,12 +50,15 @@ function selectIconTokens(tokens) {
|
|
|
48
50
|
}
|
|
49
51
|
|
|
50
52
|
const ExpandCollapseControl = forwardRef(
|
|
51
|
-
(
|
|
53
|
+
(
|
|
54
|
+
{ onPress, isExpanded, children, tokens, accessibilityRole = 'button', variant, ...rest },
|
|
55
|
+
ref
|
|
56
|
+
) => {
|
|
52
57
|
const getTokens = useThemeTokensCallback('ExpandCollapseControl', tokens, variant)
|
|
53
58
|
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
...(
|
|
59
|
+
const selectedProps = selectProps({ ...rest, accessibilityRole })
|
|
60
|
+
selectedProps.accessibilityState = {
|
|
61
|
+
...(selectedProps.accessibilityState || {}),
|
|
57
62
|
expanded: isExpanded
|
|
58
63
|
}
|
|
59
64
|
|
|
@@ -68,7 +73,7 @@ const ExpandCollapseControl = forwardRef(
|
|
|
68
73
|
selectContainerStyles(getControlTokens(pressableState))
|
|
69
74
|
|
|
70
75
|
return (
|
|
71
|
-
<Pressable ref={ref} {...
|
|
76
|
+
<Pressable ref={ref} {...selectedProps} onPress={onPress} style={getPressableStyle}>
|
|
72
77
|
{(pressableState) => {
|
|
73
78
|
const { icon: IconComponent, ...themeTokens } = getControlTokens(pressableState)
|
|
74
79
|
return (
|
|
@@ -91,7 +96,7 @@ const ExpandCollapseControl = forwardRef(
|
|
|
91
96
|
ExpandCollapseControl.displayName = 'ExpandCollapseControl'
|
|
92
97
|
|
|
93
98
|
ExpandCollapseControl.propTypes = {
|
|
94
|
-
...
|
|
99
|
+
...selectedSystemPropTypes,
|
|
95
100
|
tokens: getTokensPropType('ExpandCollapseControl'),
|
|
96
101
|
variant: variantProp.propType,
|
|
97
102
|
/**
|
|
@@ -3,7 +3,16 @@ import { View } from 'react-native'
|
|
|
3
3
|
import PropTypes from 'prop-types'
|
|
4
4
|
|
|
5
5
|
import { useThemeTokens } from '../ThemeProvider'
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
a11yProps,
|
|
8
|
+
getTokensPropType,
|
|
9
|
+
selectSystemProps,
|
|
10
|
+
useMultipleInputValues,
|
|
11
|
+
variantProp,
|
|
12
|
+
viewProps
|
|
13
|
+
} from '../utils'
|
|
14
|
+
|
|
15
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
7
16
|
|
|
8
17
|
function selectBorderStyles(tokens) {
|
|
9
18
|
return {
|
|
@@ -21,7 +30,7 @@ function selectBorderStyles(tokens) {
|
|
|
21
30
|
* nested (they do not need to be direct children), and non-interactive items may be included too.
|
|
22
31
|
*/
|
|
23
32
|
const ExpandCollapse = forwardRef(
|
|
24
|
-
({ children, tokens, variant, maxOpen, open, initialOpen, onChange }, ref) => {
|
|
33
|
+
({ children, tokens, variant, maxOpen, open, initialOpen, onChange, ...rest }, ref) => {
|
|
25
34
|
const {
|
|
26
35
|
currentValues: openIds,
|
|
27
36
|
toggleOneValue: onToggle,
|
|
@@ -37,7 +46,7 @@ const ExpandCollapse = forwardRef(
|
|
|
37
46
|
const themeTokens = useThemeTokens('ExpandCollapse', tokens, variant)
|
|
38
47
|
|
|
39
48
|
return (
|
|
40
|
-
<View ref={ref} style={selectBorderStyles(themeTokens)}>
|
|
49
|
+
<View ref={ref} style={selectBorderStyles(themeTokens)} {...selectProps(rest)}>
|
|
41
50
|
{typeof children === 'function'
|
|
42
51
|
? children({ openIds, onToggle, resetValues, setValues, unsetValues })
|
|
43
52
|
: children}
|
|
@@ -48,6 +57,7 @@ const ExpandCollapse = forwardRef(
|
|
|
48
57
|
ExpandCollapse.displayName = 'ExpandCollapse'
|
|
49
58
|
|
|
50
59
|
ExpandCollapse.propTypes = {
|
|
60
|
+
...selectedSystemPropTypes,
|
|
51
61
|
variant: variantProp.propType,
|
|
52
62
|
tokens: getTokensPropType('ExpandCollapse'),
|
|
53
63
|
/**
|
|
@@ -4,7 +4,16 @@ import PropTypes from 'prop-types'
|
|
|
4
4
|
|
|
5
5
|
import ExpandCollapseControl from './Control'
|
|
6
6
|
import { useThemeTokens } from '../ThemeProvider'
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
a11yProps,
|
|
9
|
+
getTokensPropType,
|
|
10
|
+
selectSystemProps,
|
|
11
|
+
useVerticalExpandAnimation,
|
|
12
|
+
variantProp,
|
|
13
|
+
viewProps
|
|
14
|
+
} from '../utils'
|
|
15
|
+
|
|
16
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
8
17
|
|
|
9
18
|
// just void functions for now, since there are no style tokens for a panel or control at this point
|
|
10
19
|
const selectGroupStyles = () => {}
|
|
@@ -49,9 +58,9 @@ const ExpandCollapsePanel = forwardRef(
|
|
|
49
58
|
const [containerHeight, setContainerHeight] = useState(null)
|
|
50
59
|
const isExpanded = openIds.includes(panelId)
|
|
51
60
|
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
...(
|
|
61
|
+
const selectedProps = selectProps(rest)
|
|
62
|
+
selectedProps.accessibilityState = {
|
|
63
|
+
...(selectedProps.accessibilityState || {}),
|
|
55
64
|
expanded: isExpanded
|
|
56
65
|
}
|
|
57
66
|
|
|
@@ -88,7 +97,7 @@ const ExpandCollapsePanel = forwardRef(
|
|
|
88
97
|
return (
|
|
89
98
|
<View ref={ref} style={selectGroupStyles(themeTokens)}>
|
|
90
99
|
<ExpandCollapseControl
|
|
91
|
-
{...
|
|
100
|
+
{...selectedProps}
|
|
92
101
|
isExpanded={isExpanded}
|
|
93
102
|
tokens={controlTokens}
|
|
94
103
|
onPress={handleControlPress}
|
|
@@ -110,6 +119,7 @@ const ExpandCollapsePanel = forwardRef(
|
|
|
110
119
|
ExpandCollapsePanel.displayName = 'ExpandCollapsePanel'
|
|
111
120
|
|
|
112
121
|
ExpandCollapsePanel.propTypes = {
|
|
122
|
+
...selectedSystemPropTypes,
|
|
113
123
|
variant: variantProp.propType,
|
|
114
124
|
tokens: getTokensPropType('ExpandCollapsePanel'),
|
|
115
125
|
/**
|
|
@@ -3,9 +3,18 @@ import { StyleSheet, Text, View } from 'react-native'
|
|
|
3
3
|
import PropTypes from 'prop-types'
|
|
4
4
|
|
|
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 StackView from '../StackView'
|
|
8
15
|
|
|
16
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
17
|
+
|
|
9
18
|
const selectStyles = (tokens) => selectTokens('Feedback', tokens)
|
|
10
19
|
|
|
11
20
|
const selectTitleTextStyles = ({ titleFontSize, ...tokens }) =>
|
|
@@ -53,13 +62,13 @@ const Feedback = forwardRef(
|
|
|
53
62
|
const content =
|
|
54
63
|
typeof children === 'string' ? <Text style={contentTextStyles}>{children}</Text> : children
|
|
55
64
|
|
|
56
|
-
const
|
|
65
|
+
const selectedProps = selectProps({
|
|
57
66
|
accessibilityRole: validation === 'error' ? 'alert' : undefined,
|
|
58
67
|
...rest
|
|
59
68
|
})
|
|
60
69
|
|
|
61
70
|
return (
|
|
62
|
-
<View ref={ref} style={selectStyles(themeTokens)}
|
|
71
|
+
<View ref={ref} style={selectStyles(themeTokens)} nativeID={id} {...selectedProps}>
|
|
63
72
|
<StackView space={space}>
|
|
64
73
|
{title !== undefined && (
|
|
65
74
|
<View style={staticStyles.title}>
|
|
@@ -82,6 +91,7 @@ const Feedback = forwardRef(
|
|
|
82
91
|
Feedback.displayName = 'Feedback'
|
|
83
92
|
|
|
84
93
|
Feedback.propTypes = {
|
|
94
|
+
...selectedSystemPropTypes,
|
|
85
95
|
/**
|
|
86
96
|
* Emphasized summary of the feedback. If an icon is set, it is rendered next to the title.
|
|
87
97
|
*/
|
|
@@ -60,7 +60,7 @@ const Fieldset = forwardRef(
|
|
|
60
60
|
// and on MacOS voiceover, radiogroup -> radio. To allow elements to be direct children of the
|
|
61
61
|
// fieldset as much as possible, but also allow different spacing within content and between
|
|
62
62
|
// fieldset / feedback / etc, wrap resolved children in a fragment, and stack with `preserveFragments`.
|
|
63
|
-
const childContent = <>{typeof children === 'function' ? children(
|
|
63
|
+
const childContent = <>{typeof children === 'function' ? children(a11yProps) : children}</>
|
|
64
64
|
const orderedContent =
|
|
65
65
|
feedbackPosition === 'bottom'
|
|
66
66
|
? [legendContent, feedbackContent, childContent]
|
|
@@ -8,7 +8,15 @@ import Col from './Col'
|
|
|
8
8
|
import { useViewport } from '../ViewportProvider'
|
|
9
9
|
import GutterContext from './providers/GutterContext'
|
|
10
10
|
import applyInheritance from './helpers'
|
|
11
|
-
import {
|
|
11
|
+
import {
|
|
12
|
+
a11yProps,
|
|
13
|
+
viewProps,
|
|
14
|
+
getA11yPropsFromHtmlTag,
|
|
15
|
+
layoutTags,
|
|
16
|
+
selectSystemProps
|
|
17
|
+
} from '../utils'
|
|
18
|
+
|
|
19
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
12
20
|
|
|
13
21
|
/**
|
|
14
22
|
* A mobile-first flexbox grid.
|
|
@@ -62,8 +70,7 @@ const FlexGrid = forwardRef(
|
|
|
62
70
|
|
|
63
71
|
const props = {
|
|
64
72
|
...getA11yPropsFromHtmlTag(tag, accessibilityRole),
|
|
65
|
-
...
|
|
66
|
-
...viewProps.select(rest)
|
|
73
|
+
...selectProps(rest)
|
|
67
74
|
}
|
|
68
75
|
|
|
69
76
|
return (
|
|
@@ -91,8 +98,7 @@ const styles = StyleSheet.create({
|
|
|
91
98
|
})
|
|
92
99
|
|
|
93
100
|
FlexGrid.propTypes = {
|
|
94
|
-
...
|
|
95
|
-
...viewProps.types,
|
|
101
|
+
...selectedSystemPropTypes,
|
|
96
102
|
/**
|
|
97
103
|
* Whether or not to give the grid a fixed width. This also centres the grid horizontally.
|
|
98
104
|
*/
|
|
@@ -3,10 +3,18 @@ import PropTypes from 'prop-types'
|
|
|
3
3
|
import { Platform, StyleSheet, View } from 'react-native'
|
|
4
4
|
|
|
5
5
|
import { validateThemeTokens, resolveThemeTokens } from '../ThemeProvider'
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
a11yProps,
|
|
8
|
+
getTokensSetPropType,
|
|
9
|
+
selectSystemProps,
|
|
10
|
+
selectTokens,
|
|
11
|
+
viewProps
|
|
12
|
+
} from '../utils'
|
|
7
13
|
import ScrollViewEnd from './ScrollViewEnd'
|
|
8
14
|
import { getItemPositionScrollTarget, itemPositionsPropType } from './itemPositions'
|
|
9
15
|
|
|
16
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
17
|
+
|
|
10
18
|
const tokenKeys = [
|
|
11
19
|
'nextIcon',
|
|
12
20
|
'previousIcon',
|
|
@@ -22,7 +30,7 @@ export const selectHorizontalScrollTokens = (themeTokens, prefix) =>
|
|
|
22
30
|
* Base component that scrolls horizontally and displays left and right buttons if
|
|
23
31
|
* there is content to the left and the right which can be scrolled to.
|
|
24
32
|
*
|
|
25
|
-
* @TODO
|
|
33
|
+
* @TODO revisit `ScrollButton` after IconButton is stable.
|
|
26
34
|
*/
|
|
27
35
|
const HorizontalScroll = forwardRef(
|
|
28
36
|
({ ScrollButton, tokens, itemPositions, children, ...rest }, ref) => {
|
|
@@ -108,8 +116,6 @@ const HorizontalScroll = forwardRef(
|
|
|
108
116
|
const scrollNext = () => scrollTo(scrollOffset + scrollDistance)
|
|
109
117
|
const scrollPrevious = () => scrollTo(scrollOffset - scrollDistance)
|
|
110
118
|
|
|
111
|
-
const a11y = a11yProps.select(rest)
|
|
112
|
-
|
|
113
119
|
// On Web, being scrollable in one direction prevents overflow: visible in the other direction.
|
|
114
120
|
// Apply a fixed margin gutter that tab highlight effects can overhang without getting trimmed.
|
|
115
121
|
return (
|
|
@@ -125,7 +131,7 @@ const HorizontalScroll = forwardRef(
|
|
|
125
131
|
staticStyles.scrollContainer,
|
|
126
132
|
{ marginBottom: gutter, borderBottomWidth, borderBottomColor }
|
|
127
133
|
]}
|
|
128
|
-
{...
|
|
134
|
+
{...selectProps(rest)}
|
|
129
135
|
>
|
|
130
136
|
{children}
|
|
131
137
|
</ScrollViewEnd>
|
|
@@ -159,6 +165,7 @@ const staticStyles = StyleSheet.create({
|
|
|
159
165
|
})
|
|
160
166
|
|
|
161
167
|
HorizontalScroll.propTypes = {
|
|
168
|
+
...selectedSystemPropTypes,
|
|
162
169
|
itemPositions: itemPositionsPropType,
|
|
163
170
|
ScrollButton: PropTypes.elementType,
|
|
164
171
|
tokens: getTokensSetPropType(tokenKeys, { allowFunction: true }),
|
|
@@ -4,16 +4,22 @@ import { Pressable, Platform, StyleSheet, View } from 'react-native'
|
|
|
4
4
|
|
|
5
5
|
import { applyOuterBorder, useThemeTokensCallback, applyShadowToken } from '../ThemeProvider'
|
|
6
6
|
import {
|
|
7
|
-
|
|
7
|
+
a11yProps,
|
|
8
|
+
clickProps,
|
|
9
|
+
getTokensPropType,
|
|
10
|
+
hrefAttrsProp,
|
|
8
11
|
linkProps,
|
|
9
12
|
resolvePressableState,
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
+
selectSystemProps,
|
|
14
|
+
selectTokens,
|
|
15
|
+
variantProp,
|
|
16
|
+
viewProps,
|
|
17
|
+
withLinkRouter
|
|
13
18
|
} from '../utils'
|
|
14
|
-
import { a11yProps } from '../utils/propTypes'
|
|
15
19
|
import Icon from '../Icon'
|
|
16
20
|
|
|
21
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
22
|
+
|
|
17
23
|
const selectOuterStyle = ({
|
|
18
24
|
backgroundColor,
|
|
19
25
|
borderRadius,
|
|
@@ -52,13 +58,13 @@ const IconButton = forwardRef(
|
|
|
52
58
|
icon: IconComponent,
|
|
53
59
|
href,
|
|
54
60
|
hrefAttrs,
|
|
55
|
-
onPress,
|
|
56
61
|
accessibilityRole = href ? 'link' : 'button',
|
|
57
|
-
...
|
|
62
|
+
...rawRest
|
|
58
63
|
},
|
|
59
64
|
ref
|
|
60
65
|
) => {
|
|
61
|
-
const
|
|
66
|
+
const { onPress, ...rest } = clickProps.toPressProps(rawRest)
|
|
67
|
+
const selectedProps = selectProps({
|
|
62
68
|
...rest,
|
|
63
69
|
accessibilityRole
|
|
64
70
|
})
|
|
@@ -75,7 +81,7 @@ const IconButton = forwardRef(
|
|
|
75
81
|
onPress={handlePress}
|
|
76
82
|
hrefAttrs={hrefAttrs}
|
|
77
83
|
style={getOuterStyle}
|
|
78
|
-
{...
|
|
84
|
+
{...selectedProps}
|
|
79
85
|
>
|
|
80
86
|
{(pressableState) => {
|
|
81
87
|
const themeTokens = getTokens(resolvePressableState(pressableState))
|
|
@@ -83,7 +89,7 @@ const IconButton = forwardRef(
|
|
|
83
89
|
<View style={selectInnerStyle(themeTokens)}>
|
|
84
90
|
<Icon
|
|
85
91
|
icon={IconComponent}
|
|
86
|
-
title={
|
|
92
|
+
title={selectedProps.accessibilityLabel}
|
|
87
93
|
tokens={selectTokens('Icon', themeTokens, 'icon')}
|
|
88
94
|
/>
|
|
89
95
|
</View>
|
|
@@ -96,7 +102,7 @@ const IconButton = forwardRef(
|
|
|
96
102
|
IconButton.displayName = 'IconButton'
|
|
97
103
|
|
|
98
104
|
IconButton.propTypes = {
|
|
99
|
-
...
|
|
105
|
+
...selectedSystemPropTypes,
|
|
100
106
|
variant: variantProp.propType,
|
|
101
107
|
tokens: getTokensPropType('IconButton'),
|
|
102
108
|
icon: PropTypes.elementType.isRequired,
|
|
@@ -111,4 +117,4 @@ const staticStyles = StyleSheet.create({
|
|
|
111
117
|
}
|
|
112
118
|
})
|
|
113
119
|
|
|
114
|
-
export default IconButton
|
|
120
|
+
export default withLinkRouter(IconButton)
|
|
@@ -3,11 +3,20 @@ import { StyleSheet, Text, View } from 'react-native'
|
|
|
3
3
|
import PropTypes from 'prop-types'
|
|
4
4
|
|
|
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
|
|
|
8
15
|
import LabelContent from './LabelContent'
|
|
9
16
|
import Tooltip from '../Tooltip'
|
|
10
17
|
|
|
18
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
19
|
+
|
|
11
20
|
const selectLabelStyles = (tokens) => applyTextStyles(selectTokens('Typography', tokens))
|
|
12
21
|
|
|
13
22
|
const selectHintStyles = ({
|
|
@@ -28,7 +37,10 @@ const selectHintStyles = ({
|
|
|
28
37
|
const selectGapStyles = ({ gap }) => ({ marginRight: gap })
|
|
29
38
|
|
|
30
39
|
const InputLabel = forwardRef(
|
|
31
|
-
(
|
|
40
|
+
(
|
|
41
|
+
{ label, forId, hint, hintPosition = 'inline', hintId, tooltip, tokens, variant, ...rest },
|
|
42
|
+
ref
|
|
43
|
+
) => {
|
|
32
44
|
const themeTokens = useThemeTokens('InputLabel', tokens, variant)
|
|
33
45
|
|
|
34
46
|
const hasTooltip = tooltip !== undefined
|
|
@@ -38,6 +50,7 @@ const InputLabel = forwardRef(
|
|
|
38
50
|
<View
|
|
39
51
|
ref={ref}
|
|
40
52
|
style={[staticStyles.container, !isHintInline && staticStyles.containerWithHintBelow]}
|
|
53
|
+
{...selectProps(rest)}
|
|
41
54
|
>
|
|
42
55
|
<Text
|
|
43
56
|
style={[selectLabelStyles(themeTokens), selectGapStyles(themeTokens), staticStyles.label]}
|
|
@@ -69,6 +82,7 @@ const InputLabel = forwardRef(
|
|
|
69
82
|
InputLabel.displayName = 'InputLabel'
|
|
70
83
|
|
|
71
84
|
InputLabel.propTypes = {
|
|
85
|
+
...selectedSystemPropTypes,
|
|
72
86
|
/**
|
|
73
87
|
* The input label.
|
|
74
88
|
*/
|
|
@@ -30,7 +30,7 @@ const InputSupports = forwardRef(
|
|
|
30
30
|
forId={inputId}
|
|
31
31
|
/>
|
|
32
32
|
)}
|
|
33
|
-
{typeof children === 'function' ? children({
|
|
33
|
+
{typeof children === 'function' ? children({ inputId, ...a11yProps }) : children}
|
|
34
34
|
{feedback && <Feedback id={feedbackId} title={feedback} validation={validation} />}
|
|
35
35
|
</StackView>
|
|
36
36
|
)
|