@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/Radio/RadioGroup.jsx
CHANGED
|
@@ -4,11 +4,20 @@ import ABBPropTypes from 'airbnb-prop-types'
|
|
|
4
4
|
|
|
5
5
|
import { useViewport } from '../ViewportProvider'
|
|
6
6
|
import { useThemeTokens } from '../ThemeProvider'
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
a11yProps,
|
|
9
|
+
getTokensPropType,
|
|
10
|
+
selectSystemProps,
|
|
11
|
+
useInputValue,
|
|
12
|
+
variantProp,
|
|
13
|
+
viewProps
|
|
14
|
+
} from '../utils'
|
|
8
15
|
import { getStackedContent } from '../StackView'
|
|
9
16
|
import Radio from './Radio'
|
|
10
17
|
import Fieldset from '../Fieldset'
|
|
11
18
|
|
|
19
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
20
|
+
|
|
12
21
|
/**
|
|
13
22
|
* A group of Radios that behave as a radio group. Use when users select a single choice from mutually
|
|
14
23
|
* exclusive options.
|
|
@@ -74,7 +83,8 @@ const RadioGroup = forwardRef(
|
|
|
74
83
|
onChange,
|
|
75
84
|
readOnly,
|
|
76
85
|
name: inputGroupName,
|
|
77
|
-
inactive
|
|
86
|
+
inactive,
|
|
87
|
+
...rest
|
|
78
88
|
},
|
|
79
89
|
ref
|
|
80
90
|
) => {
|
|
@@ -125,6 +135,7 @@ const RadioGroup = forwardRef(
|
|
|
125
135
|
inactive={inactive}
|
|
126
136
|
validation={validation}
|
|
127
137
|
accessibilityRole="radiogroup"
|
|
138
|
+
{...selectProps(rest)}
|
|
128
139
|
>
|
|
129
140
|
{getStackedContent(radios, { space, direction: 'column' })}
|
|
130
141
|
</Fieldset>
|
|
@@ -134,6 +145,7 @@ const RadioGroup = forwardRef(
|
|
|
134
145
|
RadioGroup.displayName = 'RadioGroup'
|
|
135
146
|
|
|
136
147
|
RadioGroup.propTypes = {
|
|
148
|
+
...selectedSystemPropTypes,
|
|
137
149
|
/**
|
|
138
150
|
* Optional theme token overrides for the outer RadioGroup component
|
|
139
151
|
*/
|
|
@@ -4,17 +4,21 @@ import { StyleSheet, Text, View } from 'react-native'
|
|
|
4
4
|
|
|
5
5
|
import { useThemeTokensCallback, applyTextStyles } from '../ThemeProvider'
|
|
6
6
|
import {
|
|
7
|
+
a11yProps,
|
|
7
8
|
getTokensPropType,
|
|
8
|
-
|
|
9
|
+
selectSystemProps,
|
|
9
10
|
selectTokens,
|
|
10
11
|
useInputValue,
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
useUniqueId,
|
|
13
|
+
variantProp,
|
|
14
|
+
viewProps
|
|
13
15
|
} from '../utils'
|
|
14
16
|
import { PressableCardBase, selectPressableCardTokens } from '../Card'
|
|
15
17
|
import StackView from '../StackView'
|
|
16
18
|
import RadioButton, { selectRadioButtonTokens } from '../Radio/RadioButton'
|
|
17
19
|
|
|
20
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
21
|
+
|
|
18
22
|
/**
|
|
19
23
|
* A Card that behaves like a radio button. Use when users select a single choice from mutually exclusive options
|
|
20
24
|
* with need to show additional information for each option. The whole card is interactive as one item.
|
|
@@ -78,7 +82,6 @@ const RadioCard = forwardRef(
|
|
|
78
82
|
setIsChecked(true, event)
|
|
79
83
|
}
|
|
80
84
|
}
|
|
81
|
-
const a11y = a11yProps.select(rest)
|
|
82
85
|
const uniqueId = useUniqueId('RadioCard')
|
|
83
86
|
const inputId = id ?? uniqueId
|
|
84
87
|
|
|
@@ -94,7 +97,7 @@ const RadioCard = forwardRef(
|
|
|
94
97
|
onPress={handleChange}
|
|
95
98
|
accessibilityRole="radio"
|
|
96
99
|
accessibilityState={{ checked: isChecked, disabled: inactive }}
|
|
97
|
-
{...
|
|
100
|
+
{...selectProps(rest)}
|
|
98
101
|
>
|
|
99
102
|
{(cardState) => {
|
|
100
103
|
const { radioSpace, contentSpace, ...themeTokens } = getTokens(cardState)
|
|
@@ -130,7 +133,7 @@ const RadioCard = forwardRef(
|
|
|
130
133
|
RadioCard.displayName = 'RadioCard'
|
|
131
134
|
|
|
132
135
|
RadioCard.propTypes = {
|
|
133
|
-
...
|
|
136
|
+
...selectedSystemPropTypes,
|
|
134
137
|
/**
|
|
135
138
|
* Content to be displayed at the top of the card alongside the radio button
|
|
136
139
|
*/
|
|
@@ -3,11 +3,20 @@ import PropTypes from 'prop-types'
|
|
|
3
3
|
|
|
4
4
|
import { useViewport } from '../ViewportProvider'
|
|
5
5
|
import { useThemeTokens } from '../ThemeProvider'
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
a11yProps,
|
|
8
|
+
getTokensPropType,
|
|
9
|
+
selectSystemProps,
|
|
10
|
+
useInputValue,
|
|
11
|
+
variantProp,
|
|
12
|
+
viewProps
|
|
13
|
+
} from '../utils'
|
|
7
14
|
import StackView, { StackWrap } from '../StackView'
|
|
8
15
|
import RadioCard from './RadioCard'
|
|
9
16
|
import Fieldset from '../Fieldset'
|
|
10
17
|
|
|
18
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
19
|
+
|
|
11
20
|
/**
|
|
12
21
|
* A group of Cards that behave as a radio button group. Use when users select a single choice from mutually
|
|
13
22
|
* exclusive options with need to show additional information for each option. The whole cards are each
|
|
@@ -75,7 +84,8 @@ const RadioCardGroup = forwardRef(
|
|
|
75
84
|
onChange,
|
|
76
85
|
readOnly,
|
|
77
86
|
name: inputGroupName,
|
|
78
|
-
inactive
|
|
87
|
+
inactive,
|
|
88
|
+
...rest
|
|
79
89
|
},
|
|
80
90
|
ref
|
|
81
91
|
) => {
|
|
@@ -107,8 +117,9 @@ const RadioCardGroup = forwardRef(
|
|
|
107
117
|
inactive={inactive || readOnly}
|
|
108
118
|
validation={validation}
|
|
109
119
|
accessibilityRole="radiogroup"
|
|
120
|
+
{...selectProps(rest)}
|
|
110
121
|
>
|
|
111
|
-
{(
|
|
122
|
+
{(props) => (
|
|
112
123
|
<StackContainer space={space} accessibilityRole="radiogroup">
|
|
113
124
|
{items.map(({ title, content, id, onChange: itemOnChange }, index) => {
|
|
114
125
|
const cardId = id || `RadioCard[${index}]`
|
|
@@ -128,7 +139,7 @@ const RadioCardGroup = forwardRef(
|
|
|
128
139
|
tokens={radioCardTokens}
|
|
129
140
|
variant={variant}
|
|
130
141
|
readOnly={readOnly}
|
|
131
|
-
{...
|
|
142
|
+
{...props}
|
|
132
143
|
>
|
|
133
144
|
{content}
|
|
134
145
|
</RadioCard>
|
|
@@ -143,6 +154,7 @@ const RadioCardGroup = forwardRef(
|
|
|
143
154
|
RadioCardGroup.displayName = 'RadioCardGroup'
|
|
144
155
|
|
|
145
156
|
RadioCardGroup.propTypes = {
|
|
157
|
+
...selectedSystemPropTypes,
|
|
146
158
|
/**
|
|
147
159
|
* Optional theme token overrides for the outer RadioCardGroup component
|
|
148
160
|
*/
|
package/src/Search/Search.jsx
CHANGED
|
@@ -3,13 +3,23 @@ import { View, StyleSheet } from 'react-native'
|
|
|
3
3
|
|
|
4
4
|
import PropTypes from 'prop-types'
|
|
5
5
|
import { useThemeTokens, useThemeTokensCallback } from '../ThemeProvider'
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
a11yProps,
|
|
8
|
+
getTokensPropType,
|
|
9
|
+
selectSystemProps,
|
|
10
|
+
selectTokens,
|
|
11
|
+
useSpacingScale,
|
|
12
|
+
variantProp,
|
|
13
|
+
viewProps
|
|
14
|
+
} from '../utils'
|
|
7
15
|
import TextInputBase from '../TextInput/TextInputBase'
|
|
8
16
|
import ButtonBase from '../Button/ButtonBase'
|
|
9
17
|
import StackView from '../StackView'
|
|
10
18
|
import useCopy from '../utils/useCopy'
|
|
11
19
|
import dictionary from './dictionary'
|
|
12
20
|
|
|
21
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
22
|
+
|
|
13
23
|
const selectInputTokens = ({ searchTokens, buttonTokens, buttonsGapSize }) => {
|
|
14
24
|
const { paddingRight: inputPaddingRight, clearButtonIcon, submitButtonIcon } = searchTokens
|
|
15
25
|
const { paddingLeft = 0, paddingRight = 0, iconSize = 0 } = buttonTokens
|
|
@@ -53,7 +63,8 @@ const Search = forwardRef(
|
|
|
53
63
|
accessibilityLabel,
|
|
54
64
|
copy = 'en',
|
|
55
65
|
tokens,
|
|
56
|
-
variant
|
|
66
|
+
variant,
|
|
67
|
+
...rest
|
|
57
68
|
},
|
|
58
69
|
ref
|
|
59
70
|
) => {
|
|
@@ -99,7 +110,7 @@ const Search = forwardRef(
|
|
|
99
110
|
const isEmpty = value === ''
|
|
100
111
|
|
|
101
112
|
return (
|
|
102
|
-
<View style={staticStyles.container}>
|
|
113
|
+
<View style={staticStyles.container} {...selectProps(rest)}>
|
|
103
114
|
<TextInputBase
|
|
104
115
|
ref={ref}
|
|
105
116
|
tokens={(appearances) =>
|
|
@@ -161,6 +172,7 @@ const Search = forwardRef(
|
|
|
161
172
|
Search.displayName = 'Search'
|
|
162
173
|
|
|
163
174
|
Search.propTypes = {
|
|
175
|
+
...selectedSystemPropTypes,
|
|
164
176
|
/**
|
|
165
177
|
* Use this to set the initial value of the search input.
|
|
166
178
|
* Updating `initialValue` will **not** update the actual value.
|
package/src/Select/Select.jsx
CHANGED
|
@@ -3,10 +3,24 @@ import React, { forwardRef, useState } from 'react'
|
|
|
3
3
|
import { View, Platform, StyleSheet } from 'react-native'
|
|
4
4
|
import PropTypes from 'prop-types'
|
|
5
5
|
import { applyTextStyles, useThemeTokens, applyOuterBorder } from '../ThemeProvider'
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
a11yProps,
|
|
8
|
+
componentPropType,
|
|
9
|
+
getTokensPropType,
|
|
10
|
+
inputSupportsProps,
|
|
11
|
+
selectSystemProps,
|
|
12
|
+
useInputValue,
|
|
13
|
+
variantProp,
|
|
14
|
+
viewProps
|
|
15
|
+
} from '../utils'
|
|
7
16
|
import Picker from './Picker'
|
|
8
17
|
import InputSupports from '../InputSupports'
|
|
9
|
-
|
|
18
|
+
|
|
19
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([
|
|
20
|
+
a11yProps,
|
|
21
|
+
inputSupportsProps,
|
|
22
|
+
viewProps
|
|
23
|
+
])
|
|
10
24
|
|
|
11
25
|
const selectInputStyles = (
|
|
12
26
|
{
|
|
@@ -180,7 +194,7 @@ const Select = forwardRef(
|
|
|
180
194
|
const handleMouseOver = () => setIsHovered(true)
|
|
181
195
|
const handleMouseOut = () => setIsHovered(false)
|
|
182
196
|
|
|
183
|
-
const { props: supportsProps } =
|
|
197
|
+
const { props: supportsProps, ...selectedProps } = selectProps(rest)
|
|
184
198
|
|
|
185
199
|
const themeTokens = useThemeTokens('Select', tokens, variant, {
|
|
186
200
|
focus: isFocused,
|
|
@@ -192,8 +206,8 @@ const Select = forwardRef(
|
|
|
192
206
|
const { icon: IconComponent, validationIcon: ValidationIconComponent } = themeTokens
|
|
193
207
|
|
|
194
208
|
return (
|
|
195
|
-
<InputSupports {...supportsProps}>
|
|
196
|
-
{({
|
|
209
|
+
<InputSupports {...supportsProps} {...selectedProps}>
|
|
210
|
+
{({ inputId, ...props }) => (
|
|
197
211
|
<View style={selectOuterBorderStyles(themeTokens)}>
|
|
198
212
|
<Picker
|
|
199
213
|
ref={ref}
|
|
@@ -208,7 +222,7 @@ const Select = forwardRef(
|
|
|
208
222
|
placeholder={
|
|
209
223
|
placeholder !== undefined ? { label: placeholder, value: '' } : undefined
|
|
210
224
|
}
|
|
211
|
-
{...
|
|
225
|
+
{...props}
|
|
212
226
|
nativeID={inputId}
|
|
213
227
|
testID={testID}
|
|
214
228
|
>
|
|
@@ -243,7 +257,7 @@ const Select = forwardRef(
|
|
|
243
257
|
Select.displayName = 'Select'
|
|
244
258
|
|
|
245
259
|
Select.propTypes = {
|
|
246
|
-
...
|
|
260
|
+
...selectedSystemPropTypes,
|
|
247
261
|
/**
|
|
248
262
|
* Initial value for the uncontrolled version.
|
|
249
263
|
*/
|
package/src/SideNav/Item.jsx
CHANGED
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
import React, { forwardRef } from 'react'
|
|
2
2
|
import { Pressable } from 'react-native'
|
|
3
3
|
import PropTypes from 'prop-types'
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
import {
|
|
5
|
+
a11yProps,
|
|
6
|
+
getTokensPropType,
|
|
7
|
+
hrefAttrsProp,
|
|
8
|
+
linkProps,
|
|
9
|
+
selectSystemProps,
|
|
10
|
+
variantProp,
|
|
11
|
+
viewProps
|
|
12
|
+
} from '../utils'
|
|
6
13
|
import { useThemeTokensCallback, verticalAlignRow } from '../ThemeProvider'
|
|
7
14
|
import ItemContent from './ItemContent'
|
|
8
15
|
|
|
16
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, linkProps, viewProps])
|
|
17
|
+
|
|
9
18
|
function selectItemStyles({
|
|
10
19
|
backgroundColor,
|
|
11
20
|
borderColor,
|
|
@@ -58,7 +67,7 @@ const Item = forwardRef(
|
|
|
58
67
|
const handlePress = () => onPress(itemId, groupId)
|
|
59
68
|
|
|
60
69
|
const { hrefAttrs, rest } = hrefAttrsProp.bundle(props)
|
|
61
|
-
const
|
|
70
|
+
const selectedProps = selectProps({
|
|
62
71
|
accessibilityRole,
|
|
63
72
|
href,
|
|
64
73
|
onPress: handlePress,
|
|
@@ -79,9 +88,8 @@ const Item = forwardRef(
|
|
|
79
88
|
<Pressable
|
|
80
89
|
ref={ref}
|
|
81
90
|
style={getPressableStyle}
|
|
82
|
-
{...linkPropSet}
|
|
83
91
|
accessibilityState={{ selected: isActive }}
|
|
84
|
-
|
|
92
|
+
{...selectedProps}
|
|
85
93
|
>
|
|
86
94
|
{(pressableState) => {
|
|
87
95
|
const themeTokens = getTokens(getAppearanceState(pressableState))
|
|
@@ -94,6 +102,7 @@ const Item = forwardRef(
|
|
|
94
102
|
Item.displayName = 'Item'
|
|
95
103
|
|
|
96
104
|
Item.propTypes = {
|
|
105
|
+
...selectedSystemPropTypes,
|
|
97
106
|
/**
|
|
98
107
|
* Text content of the `Item`.
|
|
99
108
|
*/
|
|
@@ -126,8 +135,7 @@ Item.propTypes = {
|
|
|
126
135
|
*/
|
|
127
136
|
isExpanded: PropTypes.bool,
|
|
128
137
|
tokens: getTokensPropType('SideNavItem'),
|
|
129
|
-
variant: variantProp.propType
|
|
130
|
-
...a11yProps.types
|
|
138
|
+
variant: variantProp.propType
|
|
131
139
|
}
|
|
132
140
|
|
|
133
141
|
export default Item
|
package/src/SideNav/SideNav.jsx
CHANGED
|
@@ -5,7 +5,14 @@ import ExpandCollapse from '../ExpandCollapse'
|
|
|
5
5
|
import Item from './Item'
|
|
6
6
|
import ItemsGroup from './ItemsGroup'
|
|
7
7
|
import { useThemeTokens } from '../ThemeProvider'
|
|
8
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
a11yProps,
|
|
10
|
+
componentPropType,
|
|
11
|
+
getTokensPropType,
|
|
12
|
+
selectSystemProps,
|
|
13
|
+
variantProp,
|
|
14
|
+
viewProps
|
|
15
|
+
} from '../utils'
|
|
9
16
|
|
|
10
17
|
function selectBorderStyles(tokens) {
|
|
11
18
|
return {
|
|
@@ -15,13 +22,15 @@ function selectBorderStyles(tokens) {
|
|
|
15
22
|
}
|
|
16
23
|
}
|
|
17
24
|
|
|
25
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
26
|
+
|
|
18
27
|
/**
|
|
19
28
|
## Usage Criteria
|
|
20
29
|
- Use in conjunction with a large amount of educational / informational content
|
|
21
30
|
- Allow the user to navigate between options frequently and efficiently
|
|
22
31
|
*/
|
|
23
32
|
const SideNav = forwardRef(
|
|
24
|
-
({ children, variant = {}, tokens, accordion = true, itemTokens, groupTokens }, ref) => {
|
|
33
|
+
({ children, variant = {}, tokens, accordion = true, itemTokens, groupTokens, ...rest }, ref) => {
|
|
25
34
|
const themeTokens = useThemeTokens('SideNav', tokens, variant)
|
|
26
35
|
const [active, setActive] = useState({ groupId: undefined, itemId: undefined })
|
|
27
36
|
|
|
@@ -38,6 +47,7 @@ const SideNav = forwardRef(
|
|
|
38
47
|
ref={ref}
|
|
39
48
|
maxOpen={accordion ? 1 : null}
|
|
40
49
|
style={selectBorderStyles(themeTokens)}
|
|
50
|
+
{...selectProps(rest)}
|
|
41
51
|
>
|
|
42
52
|
{({ openIds, onToggle }) => {
|
|
43
53
|
const renderItem = (item, index, groupId) => {
|
|
@@ -97,6 +107,7 @@ const SideNav = forwardRef(
|
|
|
97
107
|
SideNav.displayName = 'SideNav'
|
|
98
108
|
|
|
99
109
|
SideNav.propTypes = {
|
|
110
|
+
...selectedSystemPropTypes,
|
|
100
111
|
/**
|
|
101
112
|
* Specifies the structure and links of the `SideNav`. It may only consist of `SideNav.Item` and `SideNav.ItemsGroup`.
|
|
102
113
|
*/
|
|
@@ -3,10 +3,19 @@ import { Animated, Platform } from 'react-native'
|
|
|
3
3
|
import propTypes from 'prop-types'
|
|
4
4
|
import StackView from '../StackView'
|
|
5
5
|
import { useThemeTokens } from '../ThemeProvider'
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
a11yProps,
|
|
8
|
+
getTokensPropType,
|
|
9
|
+
selectSystemProps,
|
|
10
|
+
useSpacingScale,
|
|
11
|
+
variantProp,
|
|
12
|
+
viewProps
|
|
13
|
+
} from '../utils'
|
|
7
14
|
import useSkeletonNativeAnimation from './useSkeletonNativeAnimation'
|
|
8
15
|
import skeletonWebAnimation from './skeletonWebAnimation'
|
|
9
16
|
|
|
17
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
18
|
+
|
|
10
19
|
const selectSkeletonStyles = ({ color, radius, fadeAnimation }) => ({
|
|
11
20
|
backgroundColor: color,
|
|
12
21
|
borderRadius: radius,
|
|
@@ -27,62 +36,65 @@ const selectSquareStyles = ({ radius }) => ({
|
|
|
27
36
|
borderRadius: radius
|
|
28
37
|
})
|
|
29
38
|
|
|
30
|
-
const Skeleton = forwardRef(
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
39
|
+
const Skeleton = forwardRef(
|
|
40
|
+
({ tokens, variant, size, characters, lines, shape = 'line', ...rest }, ref) => {
|
|
41
|
+
const themeTokens = useThemeTokens('Skeleton', tokens, variant)
|
|
42
|
+
const skeletonHeight = useSpacingScale(size || themeTokens.size)
|
|
43
|
+
const nativeAnimation = useSkeletonNativeAnimation()
|
|
44
|
+
|
|
45
|
+
const getAnimationBaseOnPlatform = () => {
|
|
46
|
+
if (Platform.OS !== 'web') {
|
|
47
|
+
return nativeAnimation
|
|
48
|
+
}
|
|
34
49
|
|
|
35
|
-
|
|
36
|
-
if (Platform.OS !== 'web') {
|
|
37
|
-
return nativeAnimation
|
|
50
|
+
return skeletonWebAnimation
|
|
38
51
|
}
|
|
39
52
|
|
|
40
|
-
|
|
41
|
-
|
|
53
|
+
const getLineWidth = () => {
|
|
54
|
+
if (characters) {
|
|
55
|
+
return characters * themeTokens.baseWidth
|
|
56
|
+
}
|
|
42
57
|
|
|
43
|
-
|
|
44
|
-
if (characters) {
|
|
45
|
-
return characters * themeTokens.baseWidth
|
|
58
|
+
return themeTokens.characters * themeTokens.baseWidth
|
|
46
59
|
}
|
|
47
60
|
|
|
48
|
-
|
|
49
|
-
|
|
61
|
+
const getStyledBasedOnShape = () => {
|
|
62
|
+
if (shape === 'circle') {
|
|
63
|
+
return selectShapeStyles({ skeletonHeight })
|
|
64
|
+
}
|
|
50
65
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
66
|
+
if (shape === 'box') {
|
|
67
|
+
return [
|
|
68
|
+
selectShapeStyles({ skeletonHeight }),
|
|
69
|
+
selectSquareStyles({ radius: themeTokens.squareRadius })
|
|
70
|
+
]
|
|
71
|
+
}
|
|
55
72
|
|
|
56
|
-
|
|
57
|
-
return [
|
|
58
|
-
selectShapeStyles({ skeletonHeight }),
|
|
59
|
-
selectSquareStyles({ radius: themeTokens.squareRadius })
|
|
60
|
-
]
|
|
73
|
+
return selectLineStyles({ skeletonHeight, lineWidth: getLineWidth() })
|
|
61
74
|
}
|
|
62
75
|
|
|
63
|
-
|
|
76
|
+
const renderSkeleton = (index = 0) => (
|
|
77
|
+
<Animated.View
|
|
78
|
+
testID="skeleton"
|
|
79
|
+
key={`skeleton-${index + 1}`}
|
|
80
|
+
style={[
|
|
81
|
+
selectSkeletonStyles({ ...themeTokens, fadeAnimation: getAnimationBaseOnPlatform() }),
|
|
82
|
+
getStyledBasedOnShape()
|
|
83
|
+
]}
|
|
84
|
+
/>
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
return (
|
|
88
|
+
<StackView space={themeTokens.spaceBetweenLines} ref={ref} {...selectProps(rest)}>
|
|
89
|
+
{lines > 1 ? [...Array(lines)].map((_, index) => renderSkeleton(index)) : renderSkeleton()}
|
|
90
|
+
</StackView>
|
|
91
|
+
)
|
|
64
92
|
}
|
|
65
|
-
|
|
66
|
-
const renderSkeleton = (index = 0) => (
|
|
67
|
-
<Animated.View
|
|
68
|
-
testID="skeleton"
|
|
69
|
-
key={`skeleton-${index + 1}`}
|
|
70
|
-
style={[
|
|
71
|
-
selectSkeletonStyles({ ...themeTokens, fadeAnimation: getAnimationBaseOnPlatform() }),
|
|
72
|
-
getStyledBasedOnShape()
|
|
73
|
-
]}
|
|
74
|
-
/>
|
|
75
|
-
)
|
|
76
|
-
|
|
77
|
-
return (
|
|
78
|
-
<StackView space={themeTokens.spaceBetweenLines} ref={ref}>
|
|
79
|
-
{lines > 1 ? [...Array(lines)].map((_, index) => renderSkeleton(index)) : renderSkeleton()}
|
|
80
|
-
</StackView>
|
|
81
|
-
)
|
|
82
|
-
})
|
|
93
|
+
)
|
|
83
94
|
Skeleton.displayName = 'Skeleton'
|
|
84
95
|
|
|
85
96
|
Skeleton.propTypes = {
|
|
97
|
+
...selectedSystemPropTypes,
|
|
86
98
|
tokens: getTokensPropType('Skeleton'),
|
|
87
99
|
variant: variantProp.propType,
|
|
88
100
|
size: propTypes.number,
|
package/src/Spacer/Spacer.jsx
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import React, { forwardRef } from 'react'
|
|
2
2
|
import PropTypes from 'prop-types'
|
|
3
3
|
import { StyleSheet, View } from 'react-native'
|
|
4
|
+
import { a11yProps, selectSystemProps, spacingProps, useSpacingScale, viewProps } from '../utils'
|
|
4
5
|
|
|
5
|
-
import { useSpacingScale, spacingProps } from '../utils'
|
|
6
6
|
/**
|
|
7
|
-
* @typedef {import('../utils/
|
|
8
|
-
* @typedef {import('../utils/
|
|
7
|
+
* @typedef {import('../utils/props/spacingProps.js').SpacingValue} SpacingValue
|
|
8
|
+
* @typedef {import('../utils/props/spacingProps.js').SpacingObject} SpacingObject
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
12
|
+
|
|
11
13
|
const selectSizeStyle = (size, direction) => ({
|
|
12
14
|
// Only apply space in one direction at a time, else large spacers will increase the
|
|
13
15
|
// 'across' size of the parent and mess up siblings with styles like `alignItems: stretch`.
|
|
@@ -54,16 +56,16 @@ const selectSizeStyle = (size, direction) => ({
|
|
|
54
56
|
* Spacer has no content and is ignored by tools such as screen readers. Use `Divider` for
|
|
55
57
|
* separations between elements that may be treated as semantically meaningful on web.
|
|
56
58
|
*/
|
|
57
|
-
const Spacer = forwardRef(({ space = 1, direction = 'column',
|
|
59
|
+
const Spacer = forwardRef(({ space = 1, direction = 'column', ...rest }, ref) => {
|
|
58
60
|
const size = useSpacingScale(space)
|
|
59
61
|
const sizeStyle = selectSizeStyle(size, direction)
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
)
|
|
62
|
+
|
|
63
|
+
return <View ref={ref} style={[staticStyles.stretch, sizeStyle]} {...selectProps(rest)} />
|
|
63
64
|
})
|
|
64
65
|
Spacer.displayName = 'Spacer'
|
|
65
66
|
|
|
66
67
|
Spacer.propTypes = {
|
|
68
|
+
...selectedSystemPropTypes,
|
|
67
69
|
/**
|
|
68
70
|
* The size of the spacer according to the theme's spacing scale.
|
|
69
71
|
* Either a number corresponding to a position on the theme's spacing scale (1 is smallest, 2 is second smallest, etc),
|
|
@@ -76,17 +78,7 @@ Spacer.propTypes = {
|
|
|
76
78
|
* - `'column'` (default) applies space vertically; has a fixed height and not width.
|
|
77
79
|
* - `'row'` applies space horizontally; has a fixed width and not height.
|
|
78
80
|
*/
|
|
79
|
-
direction: PropTypes.oneOf(['column', 'row'])
|
|
80
|
-
/**
|
|
81
|
-
* @ignore
|
|
82
|
-
*/
|
|
83
|
-
dataSet: PropTypes.object,
|
|
84
|
-
/**
|
|
85
|
-
* @ignore
|
|
86
|
-
* In tests, the only way to select Spacers is with testID prop and getByTestId, since they have no content,
|
|
87
|
-
* no accessibility role, and there is no equivalent of nextSibling in React Native Testing Library.
|
|
88
|
-
*/
|
|
89
|
-
testID: PropTypes.string
|
|
81
|
+
direction: PropTypes.oneOf(['column', 'row'])
|
|
90
82
|
}
|
|
91
83
|
|
|
92
84
|
const staticStyles = StyleSheet.create({
|
|
@@ -4,21 +4,24 @@ import { View } from 'react-native'
|
|
|
4
4
|
|
|
5
5
|
import Divider from '../Divider'
|
|
6
6
|
import {
|
|
7
|
-
spacingProps,
|
|
8
7
|
a11yProps,
|
|
8
|
+
getA11yPropsFromHtmlTag,
|
|
9
9
|
getTokensPropType,
|
|
10
|
+
layoutTags,
|
|
10
11
|
responsiveProps,
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
selectSystemProps,
|
|
13
|
+
spacingProps,
|
|
13
14
|
useResponsiveProp,
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
variantProp,
|
|
16
|
+
viewProps
|
|
16
17
|
} from '../utils'
|
|
17
18
|
import { useThemeTokens } from '../ThemeProvider'
|
|
18
19
|
import { useViewport } from '../ViewportProvider'
|
|
19
20
|
import getStackedContent from './getStackedContent'
|
|
20
21
|
import { staticStyles, selectFlexStyles } from './common'
|
|
21
22
|
|
|
23
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
24
|
+
|
|
22
25
|
/**
|
|
23
26
|
* StackView evenly spaces its children, by default placing `Spacer` components between them.
|
|
24
27
|
*
|
|
@@ -78,17 +81,16 @@ const StackView = forwardRef(
|
|
|
78
81
|
) => {
|
|
79
82
|
const viewport = useViewport()
|
|
80
83
|
const direction = useResponsiveProp(directionProp, 'column')
|
|
81
|
-
const
|
|
84
|
+
const selectedProps = selectProps({
|
|
82
85
|
...getA11yPropsFromHtmlTag(tag, accessibilityRole),
|
|
83
|
-
...
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
+
...rest
|
|
87
|
+
})
|
|
86
88
|
const content = getStackedContent(children, { direction, divider, space })
|
|
87
89
|
const themeTokens = useThemeTokens('StackView', tokens, variant, { viewport })
|
|
88
90
|
const flexStyles = selectFlexStyles(themeTokens)
|
|
89
91
|
|
|
90
92
|
return (
|
|
91
|
-
<View ref={ref} {...
|
|
93
|
+
<View ref={ref} {...selectedProps} style={[flexStyles, staticStyles[direction]]}>
|
|
92
94
|
{content}
|
|
93
95
|
</View>
|
|
94
96
|
)
|
|
@@ -97,8 +99,7 @@ const StackView = forwardRef(
|
|
|
97
99
|
StackView.displayName = 'StackView'
|
|
98
100
|
|
|
99
101
|
StackView.propTypes = {
|
|
100
|
-
...
|
|
101
|
-
...viewProps.types,
|
|
102
|
+
...selectedSystemPropTypes,
|
|
102
103
|
tokens: getTokensPropType('StackView'),
|
|
103
104
|
variant: variantProp.propType,
|
|
104
105
|
/**
|