@telus-uds/components-base 0.0.2-prerelease.4 → 0.0.2-prerelease.8
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/.ultra.cache.json +1 -0
- package/CHANGELOG.md +76 -0
- package/__fixtures__/Accessible.js +33 -0
- package/__fixtures__/Accessible.native.js +32 -0
- package/__fixtures__/testTheme.js +940 -54
- package/__tests__/ActivityIndicator/ActivityIndicator.test.jsx +1 -1
- package/__tests__/Button/ButtonBase.test.jsx +3 -32
- package/__tests__/Button/ButtonGroup.test.jsx +2 -2
- package/__tests__/Checkbox/Checkbox.test.jsx +94 -0
- package/__tests__/Checkbox/CheckboxGroup.test.jsx +247 -0
- package/__tests__/Divider/Divider.test.jsx +26 -5
- package/__tests__/Feedback/Feedback.test.jsx +42 -0
- package/__tests__/Icon/Icon.test.jsx +3 -3
- package/__tests__/InputSupports/InputSupports.test.jsx +50 -0
- package/__tests__/List/List.test.jsx +60 -0
- package/__tests__/Modal/Modal.test.jsx +47 -0
- package/__tests__/Notification/Notification.test.jsx +20 -0
- package/__tests__/Pagination/Pagination.test.jsx +2 -2
- package/__tests__/Progress/Progress.test.jsx +79 -0
- package/__tests__/Radio/Radio.test.jsx +87 -0
- package/__tests__/Radio/RadioGroup.test.jsx +221 -0
- package/__tests__/RadioCard/RadioCard.test.jsx +87 -0
- package/__tests__/RadioCard/RadioCardGroup.test.jsx +247 -0
- package/__tests__/Search/Search.test.jsx +72 -0
- package/__tests__/Select/Select.test.jsx +93 -0
- package/__tests__/Skeleton/Skeleton.test.jsx +61 -0
- package/__tests__/Spacer/Spacer.test.jsx +63 -0
- package/__tests__/StackView/StackView.test.jsx +216 -0
- package/__tests__/StackView/StackWrap.test.jsx +47 -0
- package/__tests__/StackView/getStackedContent.test.jsx +295 -0
- package/__tests__/StepTracker/StepTracker.test.jsx +94 -0
- package/__tests__/Tabs/Tabs.test.jsx +200 -0
- package/__tests__/Tags/Tags.test.jsx +328 -0
- package/__tests__/TextInput/TextArea.test.jsx +34 -0
- package/__tests__/TextInput/TextInputBase.test.jsx +120 -0
- package/__tests__/Tooltip/Tooltip.test.jsx +65 -0
- package/__tests__/Tooltip/getTooltipPosition.test.js +79 -0
- package/__tests__/utils/input.test.js +58 -0
- package/__tests__/utils/useCopy.test.js +42 -0
- package/__tests__/utils/useResponsiveProp.test.jsx +202 -0
- package/__tests__/utils/{spacing.test.jsx → useSpacingScale.test.jsx} +1 -1
- package/__tests__/utils/useUniqueId.test.js +31 -0
- package/babel.config.js +20 -0
- package/jest.config.js +8 -2
- package/lib/A11yInfoProvider/index.js +54 -26
- package/lib/A11yText/index.js +37 -14
- package/lib/ActivityIndicator/Spinner.js +78 -0
- package/lib/ActivityIndicator/Spinner.native.js +121 -87
- package/lib/ActivityIndicator/index.js +28 -12
- package/lib/ActivityIndicator/shared.js +27 -12
- package/lib/BaseProvider/index.js +34 -11
- package/lib/Box/Box.js +56 -28
- package/lib/Box/index.js +13 -2
- package/lib/Button/Button.js +38 -10
- package/lib/Button/ButtonBase.js +120 -109
- package/lib/Button/ButtonGroup.js +98 -99
- package/lib/Button/ButtonLink.js +41 -13
- package/lib/Button/index.js +31 -4
- package/lib/Button/propTypes.js +32 -9
- package/lib/Card/Card.js +36 -41
- package/lib/Card/CardBase.js +78 -0
- package/lib/Card/PressableCardBase.js +137 -0
- package/lib/Card/index.js +40 -2
- package/lib/Checkbox/Checkbox.js +344 -0
- package/lib/Checkbox/CheckboxGroup.js +231 -0
- package/lib/Checkbox/CheckboxInput.js +74 -0
- package/lib/Checkbox/CheckboxInput.native.js +14 -0
- package/lib/Checkbox/index.js +21 -0
- package/lib/Divider/Divider.js +81 -17
- package/lib/Divider/index.js +13 -2
- package/lib/ExpandCollapse/Accordion.js +20 -7
- package/lib/ExpandCollapse/Control.js +50 -27
- package/lib/ExpandCollapse/ExpandCollapse.js +41 -24
- package/lib/ExpandCollapse/Panel.js +75 -37
- package/lib/ExpandCollapse/index.js +25 -7
- package/lib/Feedback/Feedback.js +161 -0
- package/lib/Feedback/index.js +13 -0
- package/lib/Fieldset/Fieldset.js +160 -0
- package/lib/Fieldset/FieldsetContainer.js +41 -0
- package/lib/Fieldset/FieldsetContainer.native.js +33 -0
- package/lib/Fieldset/Legend.js +33 -0
- package/lib/Fieldset/Legend.native.js +43 -0
- package/lib/Fieldset/cssReset.js +21 -0
- package/lib/Fieldset/index.js +13 -0
- package/lib/FlexGrid/Col/Col.js +67 -38
- package/lib/FlexGrid/Col/index.js +13 -2
- package/lib/FlexGrid/FlexGrid.js +70 -45
- package/lib/FlexGrid/Row/Row.js +48 -27
- package/lib/FlexGrid/Row/index.js +13 -2
- package/lib/FlexGrid/helpers/index.js +9 -1
- package/lib/FlexGrid/index.js +13 -2
- package/lib/FlexGrid/providers/GutterContext.js +15 -3
- package/lib/Icon/Icon.js +52 -47
- package/lib/Icon/IconText.js +100 -0
- package/lib/Icon/index.js +31 -3
- package/lib/InputLabel/InputLabel.js +122 -0
- package/lib/InputLabel/LabelContent.js +31 -0
- package/lib/InputLabel/LabelContent.native.js +16 -0
- package/lib/InputLabel/index.js +13 -0
- package/lib/InputSupports/InputSupports.js +104 -0
- package/lib/InputSupports/index.js +13 -0
- package/lib/InputSupports/propTypes.js +66 -0
- package/lib/InputSupports/useInputSupports.js +41 -0
- package/lib/Link/ChevronLink.js +57 -15
- package/lib/Link/InlinePressable.js +50 -0
- package/lib/Link/InlinePressable.native.js +101 -0
- package/lib/Link/Link.js +30 -13
- package/lib/Link/LinkBase.js +121 -146
- package/lib/Link/TextButton.js +47 -17
- package/lib/Link/index.js +39 -4
- package/lib/List/List.js +80 -0
- package/lib/List/ListItem.js +237 -0
- package/lib/List/index.js +13 -0
- package/lib/Modal/Modal.js +226 -0
- package/lib/Modal/dictionary.js +16 -0
- package/lib/Modal/index.js +13 -0
- package/lib/Notification/Notification.js +200 -0
- package/lib/Notification/dictionary.js +15 -0
- package/lib/Notification/index.js +13 -0
- package/lib/Pagination/PageButton.js +45 -46
- package/lib/Pagination/Pagination.js +70 -40
- package/lib/Pagination/SideButton.js +74 -58
- package/lib/Pagination/dictionary.js +9 -2
- package/lib/Pagination/index.js +13 -2
- package/lib/Pagination/usePagination.js +12 -2
- package/lib/Progress/Progress.js +99 -0
- package/lib/Progress/ProgressBar.js +146 -0
- package/lib/Progress/ProgressBarBackground.js +57 -0
- package/lib/Progress/index.js +16 -0
- package/lib/Radio/Radio.js +292 -0
- package/lib/Radio/RadioButton.js +141 -0
- package/lib/Radio/RadioGroup.js +233 -0
- package/lib/Radio/RadioInput.js +76 -0
- package/lib/Radio/RadioInput.native.js +14 -0
- package/lib/Radio/index.js +21 -0
- package/lib/RadioCard/RadioCard.js +240 -0
- package/lib/RadioCard/RadioCardGroup.js +251 -0
- package/lib/RadioCard/index.js +21 -0
- package/lib/Search/Search.js +243 -0
- package/lib/Search/dictionary.js +19 -0
- package/lib/Search/index.js +13 -0
- package/lib/Select/Group.js +33 -0
- package/lib/Select/Group.native.js +25 -0
- package/lib/Select/Item.js +29 -0
- package/lib/Select/Item.native.js +19 -0
- package/lib/Select/Picker.js +79 -0
- package/lib/Select/Picker.native.js +115 -0
- package/lib/Select/Select.js +300 -0
- package/lib/Select/index.js +19 -0
- package/lib/SideNav/Item.js +54 -33
- package/lib/SideNav/ItemContent.js +41 -15
- package/lib/SideNav/ItemsGroup.js +46 -27
- package/lib/SideNav/SideNav.js +92 -69
- package/lib/SideNav/index.js +15 -1
- package/lib/Skeleton/Skeleton.js +137 -0
- package/lib/Skeleton/index.js +13 -0
- package/lib/Skeleton/skeleton.constant.js +12 -0
- package/lib/Skeleton/skeletonWebAnimation.js +27 -0
- package/lib/Skeleton/useSkeletonNativeAnimation.js +37 -0
- package/lib/Spacer/Spacer.js +117 -0
- package/lib/Spacer/index.js +13 -0
- package/lib/StackView/StackView.js +129 -0
- package/lib/StackView/StackWrap.js +55 -0
- package/lib/StackView/StackWrap.native.js +14 -0
- package/lib/StackView/StackWrapBox.js +112 -0
- package/lib/StackView/StackWrapGap.js +71 -0
- package/lib/StackView/common.js +45 -0
- package/lib/StackView/getStackedContent.js +141 -0
- package/lib/StackView/index.js +29 -0
- package/lib/StepTracker/Step.js +245 -0
- package/lib/StepTracker/StepTracker.js +197 -0
- package/lib/StepTracker/dictionary.js +17 -0
- package/lib/StepTracker/index.js +13 -0
- package/lib/Tabs/HorizontalScroll.js +199 -0
- package/lib/Tabs/ScrollViewEnd.js +66 -0
- package/lib/Tabs/ScrollViewEnd.native.js +41 -0
- package/lib/Tabs/Tabs.js +117 -0
- package/lib/Tabs/TabsItem.js +234 -0
- package/lib/Tabs/TabsScrollButton.js +121 -0
- package/lib/Tabs/dictionary.js +18 -0
- package/lib/Tabs/index.js +13 -0
- package/lib/Tabs/itemPositions.js +128 -0
- package/lib/Tags/Tags.js +250 -0
- package/lib/Tags/index.js +13 -0
- package/lib/TextInput/TextArea.js +109 -0
- package/lib/TextInput/TextInput.js +75 -0
- package/lib/TextInput/TextInputBase.js +252 -0
- package/lib/TextInput/index.js +23 -0
- package/lib/TextInput/propTypes.js +42 -0
- package/lib/ThemeProvider/ThemeProvider.js +38 -14
- package/lib/ThemeProvider/index.js +61 -6
- package/lib/ThemeProvider/useSetTheme.js +14 -5
- package/lib/ThemeProvider/useTheme.js +13 -4
- package/lib/ThemeProvider/useThemeTokens.js +86 -19
- package/lib/ThemeProvider/utils/index.js +31 -2
- package/lib/ThemeProvider/utils/styles.js +52 -16
- package/lib/ThemeProvider/utils/theme-tokens.js +94 -16
- package/lib/ToggleSwitch/ToggleSwitch.js +76 -52
- package/lib/ToggleSwitch/index.js +13 -2
- package/lib/Tooltip/Backdrop.js +56 -0
- package/lib/Tooltip/Backdrop.native.js +59 -0
- package/lib/Tooltip/Tooltip.js +357 -0
- package/lib/Tooltip/dictionary.js +15 -0
- package/lib/Tooltip/getTooltipPosition.js +172 -0
- package/lib/Tooltip/index.js +13 -0
- package/lib/TooltipButton/TooltipButton.js +83 -0
- package/lib/TooltipButton/index.js +13 -0
- package/lib/Typography/Typography.js +58 -47
- package/lib/Typography/index.js +13 -2
- package/lib/ViewportProvider/ViewportProvider.js +46 -0
- package/lib/ViewportProvider/index.js +22 -38
- package/lib/ViewportProvider/useViewport.js +15 -0
- package/lib/ViewportProvider/useViewportListener.js +57 -0
- package/lib/index.js +509 -19
- package/lib/utils/a11y/index.js +18 -0
- package/lib/utils/a11y/textSize.js +49 -0
- package/lib/utils/animation/index.js +15 -2
- package/lib/utils/animation/useVerticalExpandAnimation.js +28 -11
- package/lib/utils/children.js +87 -0
- package/lib/utils/index.js +163 -4
- package/lib/utils/info/index.js +19 -0
- package/lib/utils/info/platform/index.js +23 -0
- package/lib/utils/info/platform/platform.android.js +8 -0
- package/lib/utils/info/platform/platform.ios.js +8 -0
- package/lib/utils/info/platform/platform.js +8 -0
- package/lib/utils/info/platform/platform.native.js +11 -0
- package/lib/utils/info/versions.js +16 -0
- package/lib/utils/input.js +54 -34
- package/lib/utils/pressability.js +120 -0
- package/lib/utils/propTypes.js +269 -108
- package/lib/utils/useCopy.js +51 -0
- package/lib/utils/useHash.js +48 -0
- package/lib/utils/useHash.native.js +15 -0
- package/lib/utils/useResponsiveProp.js +59 -0
- package/lib/utils/{spacing/useSpacingScale.js → useSpacingScale.js} +45 -12
- package/lib/utils/useUniqueId.js +21 -0
- package/package.json +11 -8
- package/release-context.json +4 -4
- package/src/ActivityIndicator/{Spinner.web.jsx → Spinner.jsx} +0 -0
- package/src/Box/Box.jsx +13 -4
- package/src/Button/Button.jsx +9 -5
- package/src/Button/ButtonBase.jsx +74 -86
- package/src/Button/ButtonGroup.jsx +24 -41
- package/src/Button/ButtonLink.jsx +14 -4
- package/src/Button/propTypes.js +12 -2
- package/src/Card/Card.jsx +4 -30
- package/src/Card/CardBase.jsx +57 -0
- package/src/Card/PressableCardBase.jsx +112 -0
- package/src/Card/index.js +3 -0
- package/src/Checkbox/Checkbox.jsx +274 -0
- package/src/Checkbox/CheckboxGroup.jsx +196 -0
- package/src/Checkbox/CheckboxInput.jsx +55 -0
- package/src/Checkbox/CheckboxInput.native.jsx +6 -0
- package/src/Checkbox/index.js +5 -0
- package/src/Divider/Divider.jsx +38 -3
- package/src/ExpandCollapse/Control.jsx +1 -1
- package/src/Feedback/Feedback.jsx +108 -0
- package/src/Feedback/index.js +3 -0
- package/src/Fieldset/Fieldset.jsx +129 -0
- package/src/Fieldset/FieldsetContainer.jsx +22 -0
- package/src/Fieldset/FieldsetContainer.native.jsx +16 -0
- package/src/Fieldset/Legend.jsx +16 -0
- package/src/Fieldset/Legend.native.jsx +22 -0
- package/src/Fieldset/cssReset.js +14 -0
- package/src/Fieldset/index.js +3 -0
- package/src/Icon/Icon.jsx +23 -27
- package/src/Icon/IconText.jsx +63 -0
- package/src/Icon/index.js +3 -2
- package/src/InputLabel/InputLabel.jsx +106 -0
- package/src/InputLabel/LabelContent.jsx +13 -0
- package/src/InputLabel/LabelContent.native.jsx +6 -0
- package/src/InputLabel/index.js +3 -0
- package/src/InputSupports/InputSupports.jsx +75 -0
- package/src/InputSupports/index.js +3 -0
- package/src/InputSupports/propTypes.js +44 -0
- package/src/InputSupports/useInputSupports.js +30 -0
- package/src/Link/ChevronLink.jsx +28 -7
- package/src/Link/InlinePressable.jsx +37 -0
- package/src/Link/InlinePressable.native.jsx +73 -0
- package/src/Link/Link.jsx +17 -13
- package/src/Link/LinkBase.jsx +71 -146
- package/src/Link/TextButton.jsx +25 -11
- package/src/Link/index.js +2 -1
- package/src/List/List.jsx +47 -0
- package/src/List/ListItem.jsx +187 -0
- package/src/List/index.js +3 -0
- package/src/Modal/Modal.jsx +185 -0
- package/src/Modal/dictionary.js +9 -0
- package/src/Modal/index.js +3 -0
- package/src/Notification/Notification.jsx +149 -0
- package/src/Notification/dictionary.js +8 -0
- package/src/Notification/index.js +3 -0
- package/src/Pagination/PageButton.jsx +3 -17
- package/src/Pagination/SideButton.jsx +27 -38
- package/src/Progress/Progress.jsx +77 -0
- package/src/Progress/ProgressBar.jsx +110 -0
- package/src/Progress/ProgressBarBackground.jsx +34 -0
- package/src/Progress/index.js +6 -0
- package/src/Radio/Radio.jsx +233 -0
- package/src/Radio/RadioButton.jsx +131 -0
- package/src/Radio/RadioGroup.jsx +198 -0
- package/src/Radio/RadioInput.jsx +57 -0
- package/src/Radio/RadioInput.native.jsx +6 -0
- package/src/Radio/index.js +5 -0
- package/src/RadioCard/RadioCard.jsx +191 -0
- package/src/RadioCard/RadioCardGroup.jsx +211 -0
- package/src/RadioCard/index.js +5 -0
- package/src/Search/Search.jsx +204 -0
- package/src/Search/dictionary.js +12 -0
- package/src/Search/index.js +3 -0
- package/src/Select/Group.jsx +15 -0
- package/src/Select/Group.native.jsx +14 -0
- package/src/Select/Item.jsx +11 -0
- package/src/Select/Item.native.jsx +10 -0
- package/src/Select/Picker.jsx +67 -0
- package/src/Select/Picker.native.jsx +95 -0
- package/src/Select/Select.jsx +255 -0
- package/src/Select/index.js +8 -0
- package/src/SideNav/Item.jsx +2 -2
- package/src/Skeleton/Skeleton.jsx +98 -0
- package/src/Skeleton/index.js +3 -0
- package/src/Skeleton/skeleton.constant.js +3 -0
- package/src/Skeleton/skeletonWebAnimation.js +13 -0
- package/src/Skeleton/useSkeletonNativeAnimation.js +27 -0
- package/src/Spacer/Spacer.jsx +91 -0
- package/src/Spacer/index.js +3 -0
- package/src/StackView/StackView.jsx +111 -0
- package/src/StackView/StackWrap.jsx +41 -0
- package/src/StackView/StackWrap.native.jsx +4 -0
- package/src/StackView/StackWrapBox.jsx +94 -0
- package/src/StackView/StackWrapGap.jsx +49 -0
- package/src/StackView/common.jsx +28 -0
- package/src/StackView/getStackedContent.jsx +112 -0
- package/src/StackView/index.js +6 -0
- package/src/StepTracker/Step.jsx +202 -0
- package/src/StepTracker/StepTracker.jsx +163 -0
- package/src/StepTracker/dictionary.js +10 -0
- package/src/StepTracker/index.js +3 -0
- package/src/Tabs/HorizontalScroll.jsx +165 -0
- package/src/Tabs/ScrollViewEnd.jsx +53 -0
- package/src/Tabs/ScrollViewEnd.native.jsx +24 -0
- package/src/Tabs/Tabs.jsx +89 -0
- package/src/Tabs/TabsItem.jsx +204 -0
- package/src/Tabs/TabsScrollButton.jsx +100 -0
- package/src/Tabs/dictionary.js +11 -0
- package/src/Tabs/index.js +3 -0
- package/src/Tabs/itemPositions.js +101 -0
- package/src/Tags/Tags.jsx +207 -0
- package/src/Tags/index.js +3 -0
- package/src/TextInput/TextArea.jsx +78 -0
- package/src/TextInput/TextInput.jsx +52 -0
- package/src/TextInput/TextInputBase.jsx +210 -0
- package/src/TextInput/index.js +4 -0
- package/src/TextInput/propTypes.js +29 -0
- package/src/ThemeProvider/useThemeTokens.js +56 -5
- package/src/ThemeProvider/utils/styles.js +18 -5
- package/src/ThemeProvider/utils/theme-tokens.js +46 -5
- package/src/ToggleSwitch/ToggleSwitch.jsx +3 -4
- package/src/Tooltip/Backdrop.jsx +60 -0
- package/src/Tooltip/Backdrop.native.jsx +33 -0
- package/src/Tooltip/Tooltip.jsx +294 -0
- package/src/Tooltip/dictionary.js +8 -0
- package/src/Tooltip/getTooltipPosition.js +161 -0
- package/src/Tooltip/index.js +3 -0
- package/src/TooltipButton/TooltipButton.jsx +49 -0
- package/src/TooltipButton/index.js +3 -0
- package/src/Typography/Typography.jsx +10 -24
- package/src/ViewportProvider/ViewportProvider.jsx +21 -0
- package/src/ViewportProvider/index.jsx +2 -41
- package/src/ViewportProvider/useViewport.js +5 -0
- package/src/ViewportProvider/useViewportListener.js +43 -0
- package/src/index.js +34 -2
- package/src/utils/a11y/index.js +1 -0
- package/src/utils/a11y/textSize.js +30 -0
- package/src/utils/children.jsx +66 -0
- package/src/utils/index.js +11 -1
- package/src/utils/info/index.js +8 -0
- package/src/utils/info/platform/index.js +11 -0
- package/src/utils/info/platform/platform.android.js +1 -0
- package/src/utils/info/platform/platform.ios.js +1 -0
- package/src/utils/info/platform/platform.js +1 -0
- package/src/utils/info/platform/platform.native.js +4 -0
- package/src/utils/info/versions.js +6 -0
- package/src/utils/input.js +22 -13
- package/src/utils/pressability.js +96 -0
- package/src/utils/propTypes.js +195 -47
- package/src/utils/useCopy.js +39 -0
- package/src/utils/useHash.js +34 -0
- package/src/utils/useHash.native.js +6 -0
- package/src/utils/useResponsiveProp.js +50 -0
- package/src/utils/{spacing/useSpacingScale.js → useSpacingScale.js} +25 -10
- package/src/utils/useUniqueId.js +14 -0
- package/stories/A11yText/A11yText.stories.jsx +15 -13
- package/stories/ActivityIndicator/ActivityIndicator.stories.jsx +11 -2
- package/stories/Box/Box.stories.jsx +29 -2
- package/stories/Button/Button.stories.jsx +21 -20
- package/stories/Button/ButtonGroup.stories.jsx +2 -1
- package/stories/Button/ButtonLink.stories.jsx +6 -4
- package/stories/Card/Card.stories.jsx +13 -1
- package/stories/Checkbox/Checkbox.stories.jsx +94 -0
- package/stories/Divider/Divider.stories.jsx +26 -2
- package/stories/ExpandCollapse/ExpandCollapse.stories.jsx +74 -79
- package/stories/Feedback/Feedback.stories.jsx +96 -0
- package/stories/FlexGrid/01 FlexGrid.stories.jsx +20 -7
- package/stories/Icon/Icon.stories.jsx +15 -6
- package/stories/InputLabel/InputLabel.stories.jsx +42 -0
- package/stories/Link/ChevronLink.stories.jsx +20 -4
- package/stories/Link/Link.stories.jsx +39 -3
- package/stories/Link/TextButton.stories.jsx +24 -2
- package/stories/List/List.stories.jsx +117 -0
- package/stories/Modal/Modal.stories.jsx +29 -0
- package/stories/Notification/Notification.stories.jsx +82 -0
- package/stories/Pagination/Pagination.stories.jsx +28 -14
- package/stories/Progress/Progress.stories.jsx +93 -0
- package/stories/Radio/Radio.stories.jsx +100 -0
- package/stories/RadioCard/RadioCard.stories.jsx +98 -0
- package/stories/Search/Search.stories.jsx +16 -0
- package/stories/Select/Select.stories.jsx +55 -0
- package/stories/SideNav/SideNav.stories.jsx +17 -2
- package/stories/Skeleton/Skeleton.stories.jsx +36 -0
- package/stories/Spacer/Spacer.stories.jsx +38 -0
- package/stories/StackView/StackView.stories.jsx +75 -0
- package/stories/StackView/StackWrap.stories.jsx +64 -0
- package/stories/StepTracker/StepTracker.stories.jsx +71 -0
- package/stories/Tabs/Tabs.stories.jsx +97 -0
- package/stories/Tags/Tags.stories.jsx +69 -0
- package/stories/TextInput/TextArea.stories.jsx +100 -0
- package/stories/TextInput/TextInput.stories.jsx +103 -0
- package/stories/ToggleSwitch/ToggleSwitch.stories.jsx +16 -3
- package/stories/Tooltip/Tooltip.stories.jsx +81 -0
- package/stories/TooltipButton/TooltipButton.stories.jsx +11 -0
- package/stories/Typography/Typography.stories.jsx +12 -3
- package/stories/{platform-supports.web.jsx → platform-supports.jsx} +1 -1
- package/stories/supports.jsx +110 -14
- package/__fixtures__/accessible.icon.svg +0 -6
- package/babel.config.json +0 -8
- package/lib/ActivityIndicator/Spinner.web.js +0 -55
- package/lib/Pagination/useCopy.js +0 -10
- package/lib/config/svgr-icons-web.js +0 -9
- package/lib/config/svgr-icons.js +0 -52
- package/lib/utils/spacing/index.js +0 -2
- package/lib/utils/spacing/utils.js +0 -32
- package/src/Pagination/useCopy.js +0 -7
- package/src/config/svgr-icons-web.js +0 -11
- package/src/config/svgr-icons.js +0 -46
- package/src/utils/spacing/index.js +0 -3
- package/src/utils/spacing/utils.js +0 -28
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exports.resolveResponsiveProp = void 0;
|
|
7
|
+
|
|
8
|
+
var _systemConstants = require("@telus-uds/system-constants");
|
|
9
|
+
|
|
10
|
+
var _ViewportProvider = require("../ViewportProvider");
|
|
11
|
+
|
|
12
|
+
const hasOwn = (objectProp, key) => Object.prototype.hasOwnProperty.call(objectProp, key);
|
|
13
|
+
|
|
14
|
+
const hasResponsiveProperties = objectProp => _systemConstants.viewports.keys.some(key => hasOwn(objectProp, key));
|
|
15
|
+
/**
|
|
16
|
+
* Resolves a prop which may be a responsive object with keys for viewports.
|
|
17
|
+
*
|
|
18
|
+
* Used internally in useResponsiveProp - see that for more details.
|
|
19
|
+
*
|
|
20
|
+
* @param {*} prop
|
|
21
|
+
* @param {"xs"|"sm"|"md"|"lg"|"xl"} viewport
|
|
22
|
+
* @param {*} [defaultValue]
|
|
23
|
+
* @returns {*}
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
const resolveResponsiveProp = (prop, viewport, defaultValue) => {
|
|
28
|
+
if (prop === undefined) return defaultValue;
|
|
29
|
+
if (!prop || typeof prop !== 'object' || !hasResponsiveProperties(prop)) return prop;
|
|
30
|
+
const value = _systemConstants.viewports.keys.includes(viewport) ? // If there's a current viewport, return the closest match at or below it
|
|
31
|
+
_systemConstants.viewports.inherit(prop)[viewport] : // If no current viewport is available, default to smallest viewport
|
|
32
|
+
prop[_systemConstants.viewports.keys.find(key => hasOwn(prop, key))];
|
|
33
|
+
return value === undefined ? defaultValue : value;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Takes any value and, if that value is a responsive prop (an object with one or more
|
|
37
|
+
* keys matching system viewport names), returns the value corresponding to the largest
|
|
38
|
+
* viewport key smaller than the current screen's viewport.
|
|
39
|
+
*
|
|
40
|
+
* For example, if passed `{ sm: 4, lg: 8 }`, it will return 8 on `xl` and `lg` viewports,
|
|
41
|
+
* 4 on `md` and `sm` viewports, and `undefined` (or a provided `defaultValue`) on `xs` viewports.
|
|
42
|
+
*
|
|
43
|
+
* To generate propTypes for responsive props, see `responsiveProps` in `./utils/propTypes.js`.
|
|
44
|
+
*
|
|
45
|
+
* @param {*} prop - any value which may be an object with viewport keys
|
|
46
|
+
* @param {*} [defaultValue] - default value to provide if no matches found for the current viewport
|
|
47
|
+
* @returns {*}
|
|
48
|
+
*/
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
exports.resolveResponsiveProp = resolveResponsiveProp;
|
|
52
|
+
|
|
53
|
+
const useResponsiveProp = (prop, defaultValue) => {
|
|
54
|
+
const viewport = (0, _ViewportProvider.useViewport)();
|
|
55
|
+
return resolveResponsiveProp(prop, viewport, defaultValue);
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
var _default = useResponsiveProp;
|
|
59
|
+
exports.default = _default;
|
|
@@ -1,14 +1,43 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _ViewportProvider = require("../ViewportProvider");
|
|
9
|
+
|
|
10
|
+
var _ThemeProvider = require("../ThemeProvider");
|
|
11
|
+
|
|
12
|
+
var _useResponsiveProp = require("./useResponsiveProp");
|
|
13
|
+
|
|
4
14
|
/**
|
|
5
15
|
* @typedef {import('@telus-uds/system-constants/viewports').Viewport} Viewport
|
|
6
|
-
* @typedef {import('
|
|
7
|
-
* @typedef {import('
|
|
8
|
-
* @typedef {import('
|
|
9
|
-
* @typedef {import('
|
|
16
|
+
* @typedef {import('./propTypes.js').SpacingValue} SpacingValue
|
|
17
|
+
* @typedef {import('./propTypes.js').SpacingIndex} SpacingIndex
|
|
18
|
+
* @typedef {import('./propTypes.js').SpacingObject} SpacingObject
|
|
19
|
+
* @typedef {import('./propTypes.js').SpacingOptions} SpacingOptions
|
|
10
20
|
*/
|
|
21
|
+
const resolveSpacingOptions = space => {
|
|
22
|
+
if (!(space !== null && space !== void 0 && space.options)) return {};
|
|
23
|
+
const {
|
|
24
|
+
size,
|
|
25
|
+
variant,
|
|
26
|
+
subtract = 0
|
|
27
|
+
} = space.options;
|
|
28
|
+
const overridden = typeof size === 'number'; // Might need an option that adapts the size value by current user's system font scale, so that
|
|
29
|
+
// meaningful spacing between items doesn't disappear on the highest a11y font scale settings.
|
|
30
|
+
// https://github.com/telus/universal-design-system/issues/583
|
|
11
31
|
|
|
32
|
+
return {
|
|
33
|
+
tokens: {
|
|
34
|
+
size
|
|
35
|
+
},
|
|
36
|
+
variant,
|
|
37
|
+
overridden,
|
|
38
|
+
subtract
|
|
39
|
+
};
|
|
40
|
+
};
|
|
12
41
|
/**
|
|
13
42
|
* Pass a {@link SpacingValue}, which is one of:
|
|
14
43
|
*
|
|
@@ -79,24 +108,28 @@ import { resolveSpacingValue, resolveSpacingOptions } from './utils';
|
|
|
79
108
|
* @returns {number}
|
|
80
109
|
*/
|
|
81
110
|
|
|
111
|
+
|
|
82
112
|
const useSpacingScale = spaceValue => {
|
|
113
|
+
var _spaceValue$space;
|
|
114
|
+
|
|
83
115
|
// In future, may need to consider window height as well as width, particularly for native apps,
|
|
84
116
|
// e.g. to ensure designs don't look lost on large, tall, not-so-wide portrait screens.
|
|
85
|
-
const viewport = useViewport();
|
|
117
|
+
const viewport = (0, _ViewportProvider.useViewport)();
|
|
86
118
|
const {
|
|
87
119
|
tokens,
|
|
88
120
|
variant,
|
|
89
121
|
overridden,
|
|
90
122
|
subtract = 0
|
|
91
123
|
} = resolveSpacingOptions(spaceValue);
|
|
92
|
-
const space = overridden ? null :
|
|
124
|
+
const space = !overridden && ((_spaceValue$space = spaceValue === null || spaceValue === void 0 ? void 0 : spaceValue.space) !== null && _spaceValue$space !== void 0 ? _spaceValue$space : (0, _useResponsiveProp.resolveResponsiveProp)(spaceValue, viewport, 0));
|
|
93
125
|
const {
|
|
94
126
|
size
|
|
95
|
-
} = useThemeTokens('spacingScale', tokens, variant, {
|
|
96
|
-
space,
|
|
127
|
+
} = (0, _ThemeProvider.useThemeTokens)('spacingScale', tokens, variant, {
|
|
128
|
+
space: typeof space === 'number' ? space : 0,
|
|
97
129
|
viewport
|
|
98
130
|
});
|
|
99
131
|
return Math.max(size - subtract, 0);
|
|
100
132
|
};
|
|
101
133
|
|
|
102
|
-
|
|
134
|
+
var _default = useSpacingScale;
|
|
135
|
+
exports.default = _default;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
let id = 0;
|
|
11
|
+
|
|
12
|
+
function useUniqueId(prefix = '') {
|
|
13
|
+
const [uniqueId] = (0, _react.useState)(() => {
|
|
14
|
+
id += 1;
|
|
15
|
+
return "".concat(prefix, "-").concat(id);
|
|
16
|
+
});
|
|
17
|
+
return uniqueId;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
var _default = useUniqueId;
|
|
21
|
+
exports.default = _default;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@telus-uds/components-base",
|
|
3
|
-
"version": "0.0.2-prerelease.
|
|
3
|
+
"version": "0.0.2-prerelease.8",
|
|
4
4
|
"description": "Base components",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"base"
|
|
@@ -9,8 +9,7 @@
|
|
|
9
9
|
"homepage": "https://github.com/telus/universal-design-system#readme",
|
|
10
10
|
"license": "ISC",
|
|
11
11
|
"main": "lib/index.js",
|
|
12
|
-
"
|
|
13
|
-
"react-native": "lib/index.js",
|
|
12
|
+
"react-native": "src/index.js",
|
|
14
13
|
"directories": {
|
|
15
14
|
"lib": "lib",
|
|
16
15
|
"test": "__tests__"
|
|
@@ -35,9 +34,10 @@
|
|
|
35
34
|
"skip": true
|
|
36
35
|
},
|
|
37
36
|
"peerDependencies": {
|
|
38
|
-
"react": "
|
|
37
|
+
"react": "^17.0.2",
|
|
38
|
+
"react-dom": "*",
|
|
39
39
|
"react-native": "*",
|
|
40
|
-
"react-native-web": "
|
|
40
|
+
"react-native-web": "^0.17.0"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@testing-library/jest-native": "^4.0.1",
|
|
@@ -46,9 +46,12 @@
|
|
|
46
46
|
"react-test-renderer": "^16.3.2"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"
|
|
50
|
-
"@telus-uds/
|
|
49
|
+
"airbnb-prop-types": "^2.16.0",
|
|
50
|
+
"@telus-uds/system-constants": "^0.0.2-prerelease.2",
|
|
51
|
+
"@telus-uds/system-themes": "^0.0.2-prerelease.1",
|
|
52
|
+
"lodash.debounce": "^4.0.8",
|
|
51
53
|
"lodash.merge": "^4.6.2",
|
|
52
|
-
"prop-types": "^15.7.2"
|
|
54
|
+
"prop-types": "^15.7.2",
|
|
55
|
+
"react-native-picker-select": "^8.0.4"
|
|
53
56
|
}
|
|
54
57
|
}
|
package/release-context.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"previousReleaseTag": "@telus-uds/components-base/v0.0.2-prerelease.
|
|
3
|
-
"changelog": "### [0.0.2-prerelease.
|
|
4
|
-
"releaseTag": "@telus-uds/components-base/v0.0.2-prerelease.
|
|
5
|
-
"newVersion": "0.0.2-prerelease.
|
|
2
|
+
"previousReleaseTag": "@telus-uds/components-base/v0.0.2-prerelease.7",
|
|
3
|
+
"changelog": "### [0.0.2-prerelease.8](https://github.com/telus/universal-design-system/compare/@telus-uds/components-base/v0.0.2-prerelease.7...@telus-uds/components-base/v0.0.2-prerelease.8) (2021-12-15)\n\n\n### Features\n\n* **base:** add `ProgressBar` component ([#890](https://github.com/telus/universal-design-system/issues/890)) ([b98315c](https://github.com/telus/universal-design-system/commit/b98315cc7dabb2c7130c62c9c3bbf6fdfb7419a0))\n* **base:** add `Tabs` component ([#908](https://github.com/telus/universal-design-system/issues/908)) ([073bbd2](https://github.com/telus/universal-design-system/commit/073bbd2a0b4282112aa434f8e97e505fa8b4b92f))\n* **base:** add base `StepTracker` component ([#800](https://github.com/telus/universal-design-system/issues/800)) ([aa7d472](https://github.com/telus/universal-design-system/commit/aa7d47297c1d9ba13daef60b5184ead07b95cd52))\n* **base:** add Group fieldsets for RadioCard, Radio, Checkbox ([#875](https://github.com/telus/universal-design-system/issues/875)) ([4b99987](https://github.com/telus/universal-design-system/commit/4b999872714144b643f676d3d473369d605b3eea))\n* **base:** add Notification ([#848](https://github.com/telus/universal-design-system/issues/848)) ([ee6a83e](https://github.com/telus/universal-design-system/commit/ee6a83e05dc991acef3b9449f78c17d43d63b248))\n* **base:** add RadioCard and PressableCardBase ([#865](https://github.com/telus/universal-design-system/issues/865)) ([55c6fa2](https://github.com/telus/universal-design-system/commit/55c6fa293f2fa09499aed763910d3791eefbc4a1))\n* **base:** add the Modal component ([#878](https://github.com/telus/universal-design-system/issues/878)) ([431d4cd](https://github.com/telus/universal-design-system/commit/431d4cd2c1a7f4ce30b453d437b9f5d7b69fd251))\n* **base:** add the Search component ([#798](https://github.com/telus/universal-design-system/issues/798)) ([7b974df](https://github.com/telus/universal-design-system/commit/7b974df12d2bf0cb94b6360091bac8ac57dd7245))\n* **base:** handle `Tabs` hashes, with `useHash` ([#910](https://github.com/telus/universal-design-system/issues/910)) ([8ad6507](https://github.com/telus/universal-design-system/commit/8ad65072c249e8439e7d1c7e55fee535a5f30b4e))\n* **ds-allium:** `PriceLockup` implmementation ([#858](https://github.com/telus/universal-design-system/issues/858)) ([8669b9e](https://github.com/telus/universal-design-system/commit/8669b9e3f80261bd18962dfba5d774c90a5f4ebb))\n* **ds-allium:** add `StoryCard` component ([#880](https://github.com/telus/universal-design-system/issues/880)) ([6f0616d](https://github.com/telus/universal-design-system/commit/6f0616dc761cbdcf470bc2505d773eb362bf800e))\n* **ds-allium:** add Modal content types ([#896](https://github.com/telus/universal-design-system/issues/896)) ([f070447](https://github.com/telus/universal-design-system/commit/f070447fc796139046a96892aab34b74bc1974a4))\n* **ds-allium:** add SubNavigation ([#931](https://github.com/telus/universal-design-system/issues/931)) ([834ee7b](https://github.com/telus/universal-design-system/commit/834ee7bbe811ea8477ac4870466ae573d73e3a8f))\n* use built icons ([#809](https://github.com/telus/universal-design-system/issues/809)) ([120802e](https://github.com/telus/universal-design-system/commit/120802e11bcb4352b9d2e171525f6dc5b687c023))\n\n\n### Bug Fixes\n\n* **base:** add outer border to Radio, extract RadioButton ([#847](https://github.com/telus/universal-design-system/issues/847)) ([b563335](https://github.com/telus/universal-design-system/commit/b563335087fbfffe6739ad185fe4fc7886ef4e4d))\n* **base:** fix Tags icon, update Allium Tags/ButtonGroup ([#888](https://github.com/telus/universal-design-system/issues/888)) ([6d6ff35](https://github.com/telus/universal-design-system/commit/6d6ff35caba4c9c6c99eacf015be56e8862ad170))\n* **components-base:** Remove named import of json file ([#930](https://github.com/telus/universal-design-system/issues/930)) ([9db1cbe](https://github.com/telus/universal-design-system/commit/9db1cbe501d3c049f1f6476720a3ee9bd8b4d736))\n* fix storybook error from proptypes ([#857](https://github.com/telus/universal-design-system/issues/857)) ([175537a](https://github.com/telus/universal-design-system/commit/175537a6ac4b48699f66b1a59eb35910cbf9930b))\n* update test theme icons + cleanup ds-allium icon usage ([#860](https://github.com/telus/universal-design-system/issues/860)) ([c2c0a84](https://github.com/telus/universal-design-system/commit/c2c0a84914eed9dafaf47acca30e1f5119f19e57))\n",
|
|
4
|
+
"releaseTag": "@telus-uds/components-base/v0.0.2-prerelease.8",
|
|
5
|
+
"newVersion": "0.0.2-prerelease.8",
|
|
6
6
|
"packageName": "@telus-uds/components-base"
|
|
7
7
|
}
|
|
File without changes
|
package/src/Box/Box.jsx
CHANGED
|
@@ -2,7 +2,14 @@ import React from 'react'
|
|
|
2
2
|
import PropTypes from 'prop-types'
|
|
3
3
|
import { View, ScrollView } from 'react-native'
|
|
4
4
|
import { useThemeTokens } from '../ThemeProvider'
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
a11yProps,
|
|
7
|
+
spacingProps,
|
|
8
|
+
variantProp,
|
|
9
|
+
getTokensPropType,
|
|
10
|
+
useSpacingScale,
|
|
11
|
+
viewProps
|
|
12
|
+
} from '../utils'
|
|
6
13
|
/**
|
|
7
14
|
* @typedef {import('../utils/propTypes.js').SpacingValue} SpacingValue
|
|
8
15
|
* @typedef {import('../utils/propTypes.js').SpacingIndex} SpacingIndex
|
|
@@ -99,9 +106,10 @@ const Box = ({
|
|
|
99
106
|
variant,
|
|
100
107
|
tokens,
|
|
101
108
|
scroll,
|
|
109
|
+
testID,
|
|
102
110
|
...rest
|
|
103
111
|
}) => {
|
|
104
|
-
const
|
|
112
|
+
const props = { ...a11yProps.select(rest), ...viewProps.select(rest) }
|
|
105
113
|
|
|
106
114
|
const themeTokens = useThemeTokens('Box', tokens, variant)
|
|
107
115
|
const styles = {
|
|
@@ -116,13 +124,13 @@ const Box = ({
|
|
|
116
124
|
const scrollProps = typeof scroll === 'object' ? scroll : {}
|
|
117
125
|
scrollProps.contentContainerStyle = [styles, scrollProps.contentContainerStyle]
|
|
118
126
|
return (
|
|
119
|
-
<ScrollView {...scrollProps} {...
|
|
127
|
+
<ScrollView {...scrollProps} {...props} testID={testID}>
|
|
120
128
|
{children}
|
|
121
129
|
</ScrollView>
|
|
122
130
|
)
|
|
123
131
|
}
|
|
124
132
|
return (
|
|
125
|
-
<View {...
|
|
133
|
+
<View {...props} style={styles} testID={testID}>
|
|
126
134
|
{children}
|
|
127
135
|
</View>
|
|
128
136
|
)
|
|
@@ -142,6 +150,7 @@ Box.propTypes = {
|
|
|
142
150
|
]),
|
|
143
151
|
variant: variantProp.propType,
|
|
144
152
|
tokens: getTokensPropType('Box'),
|
|
153
|
+
testID: PropTypes.string,
|
|
145
154
|
children: PropTypes.node.isRequired
|
|
146
155
|
}
|
|
147
156
|
|
package/src/Button/Button.jsx
CHANGED
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
|
+
|
|
2
3
|
import ButtonBase from './ButtonBase'
|
|
3
|
-
import buttonPropTypes from './propTypes'
|
|
4
|
+
import buttonPropTypes, { textAndA11yText } from './propTypes'
|
|
5
|
+
import { useThemeTokensCallback } from '../ThemeProvider'
|
|
4
6
|
import { a11yProps } from '../utils/propTypes'
|
|
5
7
|
|
|
6
|
-
const Button = ({ accessibilityRole = 'button', ...props }) =>
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
const Button = ({ accessibilityRole = 'button', tokens, variant, ...props }) => {
|
|
9
|
+
const getTokens = useThemeTokensCallback('Button', tokens, variant)
|
|
10
|
+
return <ButtonBase {...props} tokens={getTokens} accessibilityRole={accessibilityRole} />
|
|
11
|
+
}
|
|
9
12
|
|
|
10
13
|
Button.propTypes = {
|
|
11
14
|
...a11yProps.types,
|
|
12
|
-
...buttonPropTypes
|
|
15
|
+
...buttonPropTypes,
|
|
16
|
+
children: textAndA11yText
|
|
13
17
|
}
|
|
14
18
|
|
|
15
19
|
export default Button
|
|
@@ -1,67 +1,53 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
|
-
import { Pressable,
|
|
2
|
+
import { Pressable, View, StyleSheet, Platform } from 'react-native'
|
|
3
3
|
|
|
4
|
-
import {
|
|
5
|
-
import { applyTextStyles, applyShadowToken } from '../ThemeProvider/utils'
|
|
4
|
+
import { applyTextStyles, applyShadowToken, applyOuterBorder } from '../ThemeProvider/utils'
|
|
6
5
|
import buttonPropTypes from './propTypes'
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
6
|
+
import {
|
|
7
|
+
a11yProps,
|
|
8
|
+
getCursorStyle,
|
|
9
|
+
linkProps,
|
|
10
|
+
resolvePressableState,
|
|
11
|
+
resolvePressableTokens,
|
|
12
|
+
wrapStringsInText
|
|
13
|
+
} from '../utils'
|
|
16
14
|
|
|
17
15
|
const getOuterBorderOffset = ({ outerBorderGap = 0, outerBorderWidth = 0 }) =>
|
|
18
16
|
outerBorderGap + outerBorderWidth
|
|
19
17
|
|
|
20
18
|
const selectOuterContainerStyles = ({
|
|
19
|
+
alignSelf,
|
|
21
20
|
opacity,
|
|
22
21
|
outerBorderColor,
|
|
23
22
|
outerBorderWidth,
|
|
24
|
-
outerBorderGap
|
|
25
|
-
|
|
23
|
+
outerBorderGap,
|
|
24
|
+
borderRadius,
|
|
26
25
|
outerBackgroundColor
|
|
27
26
|
}) => ({
|
|
28
|
-
|
|
29
|
-
borderWidth: outerBorderWidth,
|
|
30
|
-
borderColor: outerBorderColor,
|
|
31
|
-
borderRadius: outerBorderRadius + outerBorderGap,
|
|
27
|
+
alignSelf,
|
|
32
28
|
backgroundColor: outerBackgroundColor,
|
|
33
|
-
opacity
|
|
29
|
+
opacity,
|
|
30
|
+
...applyOuterBorder({
|
|
31
|
+
outerBorderGap,
|
|
32
|
+
outerBorderWidth,
|
|
33
|
+
outerBorderColor,
|
|
34
|
+
borderRadius
|
|
35
|
+
})
|
|
34
36
|
})
|
|
35
37
|
|
|
36
|
-
const selectOuterWidthStyles = ({
|
|
37
|
-
outerBorderGap,
|
|
38
|
-
outerBorderWidth,
|
|
39
|
-
width,
|
|
40
|
-
// TODO: make margin the responsibility of a parent
|
|
41
|
-
// https://github.com/telus/universal-design-system/issues/525
|
|
42
|
-
marginTop = 0,
|
|
43
|
-
marginBottom = 0,
|
|
44
|
-
marginLeft = 0,
|
|
45
|
-
marginRight = 0
|
|
46
|
-
}) => {
|
|
38
|
+
const selectOuterWidthStyles = ({ outerBorderGap, outerBorderWidth, width }) => {
|
|
47
39
|
// The inner container's bounding box is the bounding box of the button overall
|
|
48
40
|
// so this many device pixels will sit outside of the overall bounding box
|
|
49
41
|
const outerBorderOffset = getOuterBorderOffset({ outerBorderGap, outerBorderWidth })
|
|
50
|
-
const widthStyles = {
|
|
51
|
-
marginTop: marginTop - outerBorderOffset,
|
|
52
|
-
marginBottom: marginBottom - outerBorderOffset,
|
|
53
|
-
marginLeft: marginLeft - outerBorderOffset,
|
|
54
|
-
marginRight: marginRight - outerBorderOffset
|
|
55
|
-
}
|
|
42
|
+
const widthStyles = {}
|
|
56
43
|
|
|
57
44
|
if (!width) {
|
|
58
45
|
return {
|
|
59
46
|
...widthStyles,
|
|
60
47
|
// Wrap content, stopping a flex parent's default align-items: stretch stretching focus ring beyond content
|
|
61
48
|
...Platform.select({
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
native: { alignSelf: 'flex-start' }
|
|
49
|
+
// width: fit-content isn't supported on Firefox; can't cascade props like CSS `width: fit-content; width: --moz-fit-content;`
|
|
50
|
+
web: { display: 'inline-flex' }
|
|
65
51
|
})
|
|
66
52
|
}
|
|
67
53
|
}
|
|
@@ -95,7 +81,8 @@ const selectInnerContainerStyles = ({
|
|
|
95
81
|
paddingTop,
|
|
96
82
|
paddingBottom,
|
|
97
83
|
shadow,
|
|
98
|
-
borderWidth
|
|
84
|
+
borderWidth,
|
|
85
|
+
minWidth
|
|
99
86
|
}) => {
|
|
100
87
|
// Subtract border width from padding so overall button width/height doesn't
|
|
101
88
|
// jump around if the border width changes (avoiding NaN and negative padding)
|
|
@@ -110,6 +97,7 @@ const selectInnerContainerStyles = ({
|
|
|
110
97
|
paddingTop: offsetBorder(paddingTop),
|
|
111
98
|
paddingBottom: offsetBorder(paddingBottom),
|
|
112
99
|
backgroundColor,
|
|
100
|
+
minWidth,
|
|
113
101
|
...applyShadowToken(shadow)
|
|
114
102
|
}
|
|
115
103
|
}
|
|
@@ -130,76 +118,63 @@ const selectTextStyles = ({ fontSize, color, lineHeight, fontName, fontWeight, t
|
|
|
130
118
|
textAlign
|
|
131
119
|
})
|
|
132
120
|
|
|
133
|
-
const selectWebOnlyStyles = (inactive, themeTokens, { accessibilityRole }) =>
|
|
134
|
-
Platform.
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
: {}
|
|
121
|
+
const selectWebOnlyStyles = (inactive, themeTokens, { accessibilityRole }) => {
|
|
122
|
+
return Platform.select({
|
|
123
|
+
web: {
|
|
124
|
+
// if it would overflow the container, wraps instead
|
|
125
|
+
maxWidth: `calc(100% + ${getOuterBorderOffset(themeTokens) * 2}px)`,
|
|
126
|
+
outline: 'none', // removes the default browser :focus outline
|
|
127
|
+
...getCursorStyle(inactive, accessibilityRole)
|
|
128
|
+
},
|
|
129
|
+
default: {}
|
|
130
|
+
})
|
|
131
|
+
}
|
|
142
132
|
|
|
143
133
|
const ButtonBase = ({
|
|
144
134
|
href,
|
|
145
135
|
hrefAttrs,
|
|
146
136
|
children,
|
|
147
|
-
variant,
|
|
148
137
|
onPress,
|
|
149
|
-
tokens,
|
|
138
|
+
tokens = {},
|
|
150
139
|
disabled = false, // alias for inactive
|
|
151
140
|
inactive = disabled,
|
|
152
141
|
selected = false,
|
|
153
142
|
...rest
|
|
154
143
|
}) => {
|
|
155
|
-
const
|
|
156
|
-
const
|
|
157
|
-
|
|
158
|
-
focus: focused,
|
|
159
|
-
hover: hovered,
|
|
160
|
-
inactive,
|
|
161
|
-
selected
|
|
162
|
-
})
|
|
163
|
-
const getTokensByPressableState = (pressableState) => getTokens(getButtonState(pressableState))
|
|
144
|
+
const extraButtonState = { inactive, selected }
|
|
145
|
+
const resolveButtonTokens = (pressableState) =>
|
|
146
|
+
resolvePressableTokens(tokens, pressableState, extraButtonState)
|
|
164
147
|
|
|
165
148
|
const a11y = a11yProps.select(rest)
|
|
166
149
|
|
|
167
150
|
const getPressableStyle = (pressableState) => {
|
|
168
|
-
const themeTokens =
|
|
151
|
+
const themeTokens = resolveButtonTokens(pressableState)
|
|
169
152
|
return [
|
|
170
|
-
staticStyles.
|
|
153
|
+
staticStyles.row,
|
|
171
154
|
selectWebOnlyStyles(inactive, themeTokens, a11y),
|
|
172
155
|
selectOuterContainerStyles(themeTokens),
|
|
173
156
|
selectOuterWidthStyles(themeTokens)
|
|
174
157
|
]
|
|
175
158
|
}
|
|
176
159
|
|
|
177
|
-
const handlePress = linkProps.handleHref({ href, onPress })
|
|
178
|
-
|
|
179
160
|
return (
|
|
180
161
|
<Pressable
|
|
181
|
-
|
|
162
|
+
href={href}
|
|
163
|
+
onPress={linkProps.handleHref({ href, onPress })}
|
|
182
164
|
style={getPressableStyle}
|
|
183
165
|
disabled={inactive}
|
|
184
|
-
|
|
185
|
-
{...hrefAttrsProp.spread(hrefAttrs)}
|
|
166
|
+
hrefAttrs={hrefAttrs}
|
|
186
167
|
{...a11y}
|
|
187
168
|
>
|
|
188
169
|
{(pressableState) => {
|
|
189
|
-
const themeTokens =
|
|
170
|
+
const themeTokens = resolveButtonTokens(pressableState)
|
|
190
171
|
const containerStyles = selectInnerContainerStyles(themeTokens)
|
|
191
172
|
const borderStyles = selectBorderStyles(themeTokens)
|
|
192
|
-
const textStyles =
|
|
193
|
-
...selectTextStyles(themeTokens),
|
|
194
|
-
...Platform.select({
|
|
195
|
-
// TODO: https://github.com/telus/universal-design-system/issues/487
|
|
196
|
-
web: { transition: 'color 200ms' }
|
|
197
|
-
})
|
|
198
|
-
}
|
|
173
|
+
const textStyles = [selectTextStyles(themeTokens), staticStyles.text]
|
|
199
174
|
|
|
200
175
|
// If the container has a width set, fill it instead of sizing from content.
|
|
201
176
|
// If in future we support text alignments other than center, add here.
|
|
202
|
-
const stretchStyles =
|
|
177
|
+
const stretchStyles = themeTokens.width ? staticStyles.stretch : staticStyles.align
|
|
203
178
|
|
|
204
179
|
return (
|
|
205
180
|
<View
|
|
@@ -207,6 +182,7 @@ const ButtonBase = ({
|
|
|
207
182
|
containerStyles,
|
|
208
183
|
borderStyles,
|
|
209
184
|
stretchStyles,
|
|
185
|
+
staticStyles.row,
|
|
210
186
|
Platform.select({
|
|
211
187
|
web: {
|
|
212
188
|
maxWidth: '100%', // ensure overflowing content wraps
|
|
@@ -216,13 +192,14 @@ const ButtonBase = ({
|
|
|
216
192
|
})
|
|
217
193
|
]}
|
|
218
194
|
>
|
|
219
|
-
{
|
|
220
|
-
children
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
195
|
+
{wrapStringsInText(
|
|
196
|
+
typeof children === 'function'
|
|
197
|
+
? children({
|
|
198
|
+
...resolvePressableState(pressableState, extraButtonState),
|
|
199
|
+
textStyles
|
|
200
|
+
})
|
|
201
|
+
: children,
|
|
202
|
+
{ style: textStyles }
|
|
226
203
|
)}
|
|
227
204
|
</View>
|
|
228
205
|
)
|
|
@@ -238,10 +215,21 @@ ButtonBase.propTypes = {
|
|
|
238
215
|
}
|
|
239
216
|
|
|
240
217
|
const staticStyles = StyleSheet.create({
|
|
241
|
-
|
|
242
|
-
|
|
218
|
+
row: {
|
|
219
|
+
// Apply all button alignment horizontally; no vertical stacking within a button
|
|
220
|
+
flexDirection: 'row'
|
|
221
|
+
},
|
|
222
|
+
text: {
|
|
223
|
+
flexGrow: 1, // On native but not web, flexShrink here wraps text prematurely
|
|
224
|
+
...Platform.select({
|
|
225
|
+
// TODO: https://github.com/telus/universal-design-system/issues/487
|
|
226
|
+
web: { transition: 'color 200ms' }
|
|
227
|
+
})
|
|
228
|
+
},
|
|
229
|
+
align: {
|
|
230
|
+
alignItems: 'center'
|
|
243
231
|
},
|
|
244
|
-
|
|
232
|
+
stretch: {
|
|
245
233
|
flex: 1,
|
|
246
234
|
alignItems: 'center',
|
|
247
235
|
justifyContent: 'center'
|