@telus-uds/components-base 0.0.2-prerelease.6 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +9 -0
- package/.ultra.cache.json +1 -1
- package/CHANGELOG.md +85 -0
- package/README.md +4 -2
- package/__fixtures__/Accessible.js +33 -0
- package/__fixtures__/Accessible.native.js +32 -0
- package/__fixtures__/test-utils.js +25 -0
- package/__fixtures__/testTheme.js +851 -57
- package/__tests__/ActivityIndicator/ActivityIndicator.test.jsx +1 -1
- package/__tests__/Button/ButtonBase.test.jsx +2 -31
- package/__tests__/Button/ButtonGroup.test.jsx +6 -7
- package/__tests__/Checkbox/Checkbox.test.jsx +94 -0
- package/__tests__/Checkbox/CheckboxGroup.test.jsx +246 -0
- package/__tests__/ExpandCollapse/ExpandCollapse.test.jsx +2 -2
- package/__tests__/HorizontalScroll/HorizontalScroll.test.jsx +164 -0
- package/__tests__/Icon/Icon.test.jsx +3 -3
- package/__tests__/IconButton/IconButton.test.jsx +52 -0
- package/__tests__/InputSupports/InputSupports.test.jsx +50 -0
- package/__tests__/Link/LinkBase.test.jsx +0 -14
- 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 +220 -0
- package/__tests__/RadioCard/RadioCard.test.jsx +87 -0
- package/__tests__/RadioCard/RadioCardGroup.test.jsx +246 -0
- package/__tests__/Search/Search.test.jsx +73 -0
- package/__tests__/Select/Select.test.jsx +94 -0
- package/__tests__/Skeleton/Skeleton.test.jsx +61 -0
- package/__tests__/StepTracker/StepTracker.test.jsx +94 -0
- package/__tests__/Tabs/Tabs.test.jsx +40 -0
- package/__tests__/Tags/Tags.test.jsx +327 -0
- package/__tests__/TextInput/TextArea.test.jsx +35 -0
- package/__tests__/TextInput/{TextInput.test.jsx → TextInputBase.test.jsx} +29 -50
- package/__tests__/ThemeProvider/ThemeProvider.test.jsx +77 -0
- package/__tests__/ThemeProvider/useThemeTokens.test.jsx +9 -5
- package/__tests__/ThemeProvider/utils/theme-tokens.test.js +41 -0
- package/__tests__/ToggleSwitch/ToggleSwitch.test.jsx +3 -2
- package/__tests__/utils/children.test.jsx +128 -0
- package/__tests__/utils/input.test.js +59 -1
- package/__tests__/utils/semantics.test.jsx +43 -0
- package/__tests__/utils/useCopy.test.js +14 -3
- package/babel.config.js +20 -0
- package/jest.config.js +8 -3
- package/lib/A11yInfoProvider/index.js +54 -26
- package/lib/A11yText/index.js +45 -17
- package/lib/ActivityIndicator/Spinner.js +81 -0
- package/lib/ActivityIndicator/Spinner.native.js +129 -91
- 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 +152 -35
- package/lib/Box/index.js +13 -2
- package/lib/Button/Button.js +41 -12
- package/lib/Button/ButtonBase.js +125 -97
- package/lib/Button/ButtonGroup.js +112 -89
- package/lib/Button/ButtonLink.js +48 -17
- package/lib/Button/index.js +31 -4
- package/lib/Button/propTypes.js +32 -9
- package/lib/Card/Card.js +38 -41
- package/lib/Card/CardBase.js +85 -0
- package/lib/Card/PressableCardBase.js +141 -0
- package/lib/Card/index.js +40 -2
- package/lib/Checkbox/Checkbox.js +355 -0
- package/lib/Checkbox/CheckboxGroup.js +241 -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 +59 -28
- package/lib/Divider/index.js +13 -2
- package/lib/ExpandCollapse/Accordion.js +26 -7
- package/lib/ExpandCollapse/Control.js +60 -31
- package/lib/ExpandCollapse/ExpandCollapse.js +50 -28
- package/lib/ExpandCollapse/Panel.js +83 -44
- package/lib/ExpandCollapse/index.js +25 -7
- package/lib/Feedback/Feedback.js +90 -39
- package/lib/Feedback/index.js +13 -2
- package/lib/Fieldset/Fieldset.js +165 -0
- package/lib/Fieldset/FieldsetContainer.js +46 -0
- package/lib/Fieldset/FieldsetContainer.native.js +38 -0
- package/lib/Fieldset/Legend.js +38 -0
- package/lib/Fieldset/Legend.native.js +48 -0
- package/lib/Fieldset/cssReset.js +21 -0
- package/lib/Fieldset/index.js +13 -0
- package/lib/FlexGrid/Col/Col.js +73 -41
- package/lib/FlexGrid/Col/index.js +13 -2
- package/lib/FlexGrid/FlexGrid.js +99 -49
- package/lib/FlexGrid/Row/Row.js +58 -30
- 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/HorizontalScroll/HorizontalScroll.js +200 -0
- package/lib/HorizontalScroll/HorizontalScrollButton.js +127 -0
- package/lib/HorizontalScroll/ScrollViewEnd.js +66 -0
- package/lib/HorizontalScroll/ScrollViewEnd.native.js +41 -0
- package/lib/HorizontalScroll/dictionary.js +18 -0
- package/lib/HorizontalScroll/index.js +35 -0
- package/lib/HorizontalScroll/itemPositions.js +128 -0
- package/lib/Icon/Icon.js +62 -50
- package/lib/Icon/IconText.js +101 -0
- package/lib/Icon/index.js +31 -3
- package/lib/IconButton/IconButton.js +140 -0
- package/lib/IconButton/index.js +13 -0
- package/lib/InputLabel/InputLabel.js +102 -40
- package/lib/InputLabel/LabelContent.js +41 -0
- package/lib/InputLabel/LabelContent.native.js +32 -6
- package/lib/InputLabel/index.js +13 -2
- package/lib/InputSupports/InputSupports.js +109 -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 +58 -31
- package/lib/Link/InlinePressable.js +56 -0
- package/lib/Link/InlinePressable.native.js +102 -0
- package/lib/Link/Link.js +39 -15
- package/lib/Link/LinkBase.js +126 -150
- package/lib/Link/TextButton.js +53 -18
- package/lib/Link/index.js +39 -4
- package/lib/List/List.js +81 -0
- package/lib/List/ListItem.js +245 -0
- package/lib/List/index.js +13 -0
- package/lib/Modal/Modal.js +231 -0
- package/lib/Modal/dictionary.js +16 -0
- package/lib/Modal/index.js +13 -0
- package/lib/Notification/Notification.js +216 -0
- package/lib/Notification/dictionary.js +15 -0
- package/lib/Notification/index.js +13 -0
- package/lib/Pagination/PageButton.js +58 -48
- package/lib/Pagination/Pagination.js +78 -43
- package/lib/Pagination/SideButton.js +79 -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 +104 -0
- package/lib/Progress/ProgressBar.js +157 -0
- package/lib/Progress/ProgressBarBackground.js +61 -0
- package/lib/Progress/index.js +16 -0
- package/lib/Radio/Radio.js +293 -0
- package/lib/Radio/RadioButton.js +152 -0
- package/lib/Radio/RadioGroup.js +244 -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 +244 -0
- package/lib/RadioCard/RadioCardGroup.js +252 -0
- package/lib/RadioCard/index.js +21 -0
- package/lib/Search/Search.js +254 -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 +84 -0
- package/lib/Select/Picker.native.js +130 -0
- package/lib/Select/Select.js +342 -0
- package/lib/Select/index.js +19 -0
- package/lib/SideNav/Item.js +63 -37
- package/lib/SideNav/ItemContent.js +41 -15
- package/lib/SideNav/ItemsGroup.js +55 -31
- package/lib/SideNav/SideNav.js +100 -73
- 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 +49 -18
- package/lib/Spacer/index.js +13 -2
- package/lib/StackView/StackView.js +71 -31
- package/lib/StackView/StackWrap.js +43 -13
- package/lib/StackView/StackWrap.native.js +13 -2
- package/lib/StackView/StackWrapBox.js +76 -29
- package/lib/StackView/StackWrapGap.js +56 -26
- package/lib/StackView/common.js +23 -6
- package/lib/StackView/getStackedContent.js +47 -17
- package/lib/StackView/index.js +29 -5
- package/lib/StepTracker/Step.js +245 -0
- package/lib/StepTracker/StepTracker.js +202 -0
- package/lib/StepTracker/dictionary.js +17 -0
- package/lib/StepTracker/index.js +13 -0
- package/lib/Tabs/Tabs.js +124 -0
- package/lib/Tabs/TabsItem.js +238 -0
- package/lib/Tabs/index.js +13 -0
- package/lib/Tags/Tags.js +266 -0
- package/lib/Tags/index.js +13 -0
- package/lib/TextInput/TextArea.js +111 -0
- package/lib/TextInput/TextInput.js +50 -304
- package/lib/TextInput/TextInputBase.js +256 -0
- package/lib/TextInput/index.js +23 -2
- package/lib/TextInput/propTypes.js +42 -0
- package/lib/ThemeProvider/ThemeProvider.js +46 -18
- package/lib/ThemeProvider/index.js +61 -6
- package/lib/ThemeProvider/useSetTheme.js +19 -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 +50 -14
- package/lib/ThemeProvider/utils/theme-tokens.js +121 -12
- package/lib/ToggleSwitch/ToggleSwitch.js +86 -57
- package/lib/ToggleSwitch/index.js +13 -2
- package/lib/Tooltip/{Backdrop.web.js → Backdrop.js} +20 -8
- package/lib/Tooltip/Backdrop.native.js +39 -15
- package/lib/Tooltip/Tooltip.js +117 -74
- package/lib/Tooltip/dictionary.js +9 -2
- package/lib/Tooltip/getTooltipPosition.js +9 -1
- package/lib/Tooltip/index.js +13 -2
- package/lib/TooltipButton/TooltipButton.js +57 -38
- package/lib/TooltipButton/index.js +13 -2
- package/lib/Typography/Typography.js +86 -55
- package/lib/Typography/index.js +13 -2
- package/lib/ViewportProvider/ViewportProvider.js +34 -13
- package/lib/ViewportProvider/index.js +28 -3
- package/lib/ViewportProvider/useViewport.js +15 -3
- package/lib/ViewportProvider/useViewportListener.js +24 -10
- package/lib/index.js +539 -26
- package/lib/utils/a11y/index.js +31 -0
- package/lib/utils/a11y/semantics.js +173 -0
- package/lib/utils/a11y/textSize.js +49 -0
- package/lib/utils/animation/index.js +15 -2
- package/lib/utils/animation/useVerticalExpandAnimation.js +27 -10
- package/lib/utils/children.js +134 -0
- package/lib/utils/index.js +163 -7
- 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 +53 -25
- package/lib/utils/pressability.js +120 -0
- package/lib/utils/propTypes.js +338 -132
- package/lib/utils/useCopy.js +40 -5
- package/lib/utils/useHash.js +52 -0
- package/lib/utils/useHash.native.js +15 -0
- package/lib/utils/useResponsiveProp.js +21 -9
- package/lib/utils/useSpacingScale.js +19 -9
- package/lib/utils/useUniqueId.js +12 -3
- package/package.json +16 -10
- package/release-context.json +4 -4
- package/src/A11yText/index.jsx +6 -4
- package/src/ActivityIndicator/{Spinner.web.jsx → Spinner.jsx} +5 -3
- package/src/ActivityIndicator/Spinner.native.jsx +5 -3
- package/src/Box/Box.jsx +131 -39
- package/src/Button/Button.jsx +13 -6
- package/src/Button/ButtonBase.jsx +134 -125
- package/src/Button/ButtonGroup.jsx +85 -86
- package/src/Button/ButtonLink.jsx +22 -7
- package/src/Button/propTypes.js +12 -2
- package/src/Card/Card.jsx +5 -31
- package/src/Card/CardBase.jsx +58 -0
- package/src/Card/PressableCardBase.jsx +119 -0
- package/src/Card/index.js +3 -0
- package/src/Checkbox/Checkbox.jsx +284 -0
- package/src/Checkbox/CheckboxGroup.jsx +206 -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 +7 -4
- package/src/ExpandCollapse/Accordion.jsx +3 -2
- package/src/ExpandCollapse/Control.jsx +40 -43
- package/src/ExpandCollapse/ExpandCollapse.jsx +26 -23
- package/src/ExpandCollapse/Panel.jsx +69 -63
- package/src/Feedback/Feedback.jsx +42 -30
- package/src/Fieldset/Fieldset.jsx +136 -0
- package/src/Fieldset/FieldsetContainer.jsx +31 -0
- package/src/Fieldset/FieldsetContainer.native.jsx +19 -0
- package/src/Fieldset/Legend.jsx +21 -0
- package/src/Fieldset/Legend.native.jsx +27 -0
- package/src/Fieldset/cssReset.js +14 -0
- package/src/Fieldset/index.js +3 -0
- package/src/FlexGrid/Col/Col.jsx +139 -132
- package/src/FlexGrid/FlexGrid.jsx +79 -51
- package/src/FlexGrid/Row/Row.jsx +55 -48
- package/src/HorizontalScroll/HorizontalScroll.jsx +168 -0
- package/src/HorizontalScroll/HorizontalScrollButton.jsx +105 -0
- package/src/HorizontalScroll/ScrollViewEnd.jsx +53 -0
- package/src/HorizontalScroll/ScrollViewEnd.native.jsx +24 -0
- package/src/HorizontalScroll/dictionary.js +11 -0
- package/src/HorizontalScroll/index.js +17 -0
- package/src/HorizontalScroll/itemPositions.js +101 -0
- package/src/Icon/Icon.jsx +46 -49
- package/src/Icon/IconText.jsx +68 -0
- package/src/Icon/index.js +3 -2
- package/src/IconButton/IconButton.jsx +114 -0
- package/src/IconButton/index.js +3 -0
- package/src/InputLabel/InputLabel.jsx +57 -35
- package/src/InputLabel/LabelContent.jsx +21 -0
- package/src/InputLabel/LabelContent.native.jsx +11 -2
- package/src/InputSupports/InputSupports.jsx +70 -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 +34 -21
- package/src/Link/InlinePressable.jsx +39 -0
- package/src/Link/InlinePressable.native.jsx +75 -0
- package/src/Link/Link.jsx +23 -13
- package/src/Link/LinkBase.jsx +98 -170
- package/src/Link/TextButton.jsx +37 -16
- package/src/Link/index.js +2 -1
- package/src/List/List.jsx +48 -0
- package/src/List/ListItem.jsx +182 -0
- package/src/List/index.js +3 -0
- package/src/Modal/Modal.jsx +190 -0
- package/src/Modal/dictionary.js +9 -0
- package/src/Modal/index.js +3 -0
- package/src/Notification/Notification.jsx +164 -0
- package/src/Notification/dictionary.js +8 -0
- package/src/Notification/index.js +3 -0
- package/src/Pagination/PageButton.jsx +42 -49
- package/src/Pagination/Pagination.jsx +88 -92
- package/src/Pagination/SideButton.jsx +58 -66
- package/src/Progress/Progress.jsx +78 -0
- package/src/Progress/ProgressBar.jsx +123 -0
- package/src/Progress/ProgressBarBackground.jsx +36 -0
- package/src/Progress/index.js +6 -0
- package/src/Radio/Radio.jsx +240 -0
- package/src/Radio/RadioButton.jsx +142 -0
- package/src/Radio/RadioGroup.jsx +209 -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 +198 -0
- package/src/RadioCard/RadioCardGroup.jsx +218 -0
- package/src/RadioCard/index.js +5 -0
- package/src/Search/Search.jsx +225 -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 +74 -0
- package/src/Select/Picker.native.jsx +102 -0
- package/src/Select/Select.jsx +298 -0
- package/src/Select/index.js +8 -0
- package/src/SideNav/Item.jsx +54 -47
- package/src/SideNav/ItemsGroup.jsx +50 -43
- package/src/SideNav/SideNav.jsx +68 -60
- package/src/Skeleton/Skeleton.jsx +94 -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 +11 -4
- package/src/StackView/StackView.jsx +53 -23
- package/src/StackView/StackWrap.jsx +16 -7
- package/src/StackView/StackWrapBox.jsx +62 -28
- package/src/StackView/StackWrapGap.jsx +46 -24
- package/src/StackView/common.jsx +3 -2
- package/src/StackView/getStackedContent.jsx +8 -2
- package/src/StepTracker/Step.jsx +202 -0
- package/src/StepTracker/StepTracker.jsx +174 -0
- package/src/StepTracker/dictionary.js +10 -0
- package/src/StepTracker/index.js +3 -0
- package/src/Tabs/Tabs.jsx +97 -0
- package/src/Tabs/TabsItem.jsx +212 -0
- package/src/Tabs/index.js +3 -0
- package/src/Tags/Tags.jsx +219 -0
- package/src/Tags/index.js +3 -0
- package/src/TextInput/TextArea.jsx +79 -0
- package/src/TextInput/TextInput.jsx +18 -284
- package/src/TextInput/TextInputBase.jsx +217 -0
- package/src/TextInput/index.js +2 -1
- package/src/TextInput/propTypes.js +29 -0
- package/src/ThemeProvider/ThemeProvider.jsx +11 -7
- package/src/ThemeProvider/useSetTheme.js +4 -0
- package/src/ThemeProvider/useThemeTokens.js +56 -5
- package/src/ThemeProvider/utils/styles.js +18 -5
- package/src/ThemeProvider/utils/theme-tokens.js +74 -5
- package/src/ToggleSwitch/ToggleSwitch.jsx +51 -53
- package/src/Tooltip/{Backdrop.web.jsx → Backdrop.jsx} +0 -0
- package/src/Tooltip/Tooltip.jsx +135 -131
- package/src/TooltipButton/TooltipButton.jsx +23 -27
- package/src/Typography/Typography.jsx +72 -59
- package/src/index.js +31 -3
- package/src/utils/a11y/index.js +2 -0
- package/src/utils/a11y/semantics.js +162 -0
- package/src/utils/a11y/textSize.js +30 -0
- package/src/utils/children.jsx +119 -0
- package/src/utils/index.js +6 -0
- 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 +36 -25
- package/src/utils/pressability.js +96 -0
- package/src/utils/propTypes.js +291 -90
- package/src/utils/useCopy.js +30 -4
- package/src/utils/useHash.js +39 -0
- package/src/utils/useHash.native.js +6 -0
- package/stories/A11yText/A11yText.stories.jsx +6 -10
- package/stories/ActivityIndicator/ActivityIndicator.stories.jsx +1 -1
- package/stories/Box/Box.stories.jsx +1 -1
- package/stories/Button/Button.stories.jsx +7 -2
- package/stories/Button/ButtonGroup.stories.jsx +1 -1
- package/stories/Button/ButtonLink.stories.jsx +1 -1
- package/stories/Card/Card.stories.jsx +1 -1
- package/stories/Checkbox/Checkbox.stories.jsx +94 -0
- package/stories/Divider/Divider.stories.jsx +1 -1
- package/stories/ExpandCollapse/ExpandCollapse.stories.jsx +2 -2
- package/stories/Feedback/Feedback.stories.jsx +5 -6
- package/stories/FlexGrid/01 FlexGrid.stories.jsx +1 -1
- package/stories/FlexGrid/02 Row.stories.jsx +1 -1
- package/stories/FlexGrid/03 Col.stories.jsx +1 -1
- package/stories/Icon/Icon.stories.jsx +27 -7
- package/stories/IconButton/IconButton.stories.jsx +50 -0
- package/stories/InputLabel/InputLabel.stories.jsx +1 -1
- package/stories/Link/ChevronLink.stories.jsx +1 -1
- package/stories/Link/Link.stories.jsx +28 -18
- package/stories/Link/TextButton.stories.jsx +1 -1
- 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 +1 -1
- 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 +1 -1
- package/stories/SideNav/SideNavItem.stories.jsx +1 -1
- package/stories/SideNav/SideNavItemsGroup.stories.jsx +1 -1
- package/stories/Skeleton/Skeleton.stories.jsx +36 -0
- package/stories/Spacer/Spacer.stories.jsx +1 -1
- package/stories/StackView/StackView.stories.jsx +1 -1
- package/stories/StackView/StackWrap.stories.jsx +1 -1
- 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 +1 -1
- package/stories/ToggleSwitch/ToggleSwitch.stories.jsx +1 -1
- package/stories/Tooltip/Tooltip.stories.jsx +1 -1
- package/stories/TooltipButton/TooltipButton.stories.jsx +1 -1
- package/stories/Typography/Typography.stories.jsx +1 -1
- package/stories/{platform-supports.web.jsx → platform-supports.jsx} +1 -1
- package/stories/supports.jsx +38 -4
- package/__fixtures__/accessible.icon.svg +0 -6
- package/babel.config.json +0 -8
- package/docs/Contributing.stories.mdx +0 -9
- package/docs/Fonts.stories.mdx +0 -104
- package/docs/Icons.stories.mdx +0 -144
- package/docs/Introduction.stories.mdx +0 -9
- package/lib/ActivityIndicator/Spinner.web.js +0 -55
- package/lib/InputLabel/LabelContent.web.js +0 -17
- package/lib/config/svgr-icons-web.js +0 -9
- package/lib/config/svgr-icons.js +0 -52
- package/src/InputLabel/LabelContent.web.jsx +0 -13
- package/src/config/svgr-icons-web.js +0 -11
- package/src/config/svgr-icons.js +0 -46
|
@@ -1,18 +1,16 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import { Pressable,
|
|
1
|
+
import React, { forwardRef } from 'react'
|
|
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
|
|
@@ -22,26 +20,26 @@ const selectOuterContainerStyles = ({
|
|
|
22
20
|
opacity,
|
|
23
21
|
outerBorderColor,
|
|
24
22
|
outerBorderWidth,
|
|
25
|
-
outerBorderGap
|
|
26
|
-
|
|
23
|
+
outerBorderGap,
|
|
24
|
+
borderRadius,
|
|
27
25
|
outerBackgroundColor
|
|
28
26
|
}) => ({
|
|
29
27
|
alignSelf,
|
|
30
|
-
padding: outerBorderGap,
|
|
31
|
-
borderWidth: outerBorderWidth,
|
|
32
|
-
borderColor: outerBorderColor,
|
|
33
|
-
borderRadius: outerBorderRadius + outerBorderGap,
|
|
34
28
|
backgroundColor: outerBackgroundColor,
|
|
35
|
-
opacity
|
|
29
|
+
opacity,
|
|
30
|
+
...applyOuterBorder({
|
|
31
|
+
outerBorderGap,
|
|
32
|
+
outerBorderWidth,
|
|
33
|
+
outerBorderColor,
|
|
34
|
+
borderRadius
|
|
35
|
+
})
|
|
36
36
|
})
|
|
37
37
|
|
|
38
38
|
const selectOuterWidthStyles = ({ outerBorderGap, outerBorderWidth, width }) => {
|
|
39
39
|
// The inner container's bounding box is the bounding box of the button overall
|
|
40
40
|
// so this many device pixels will sit outside of the overall bounding box
|
|
41
41
|
const outerBorderOffset = getOuterBorderOffset({ outerBorderGap, outerBorderWidth })
|
|
42
|
-
const widthStyles = {
|
|
43
|
-
margin: 0 - outerBorderOffset
|
|
44
|
-
}
|
|
42
|
+
const widthStyles = {}
|
|
45
43
|
|
|
46
44
|
if (!width) {
|
|
47
45
|
return {
|
|
@@ -83,7 +81,8 @@ const selectInnerContainerStyles = ({
|
|
|
83
81
|
paddingTop,
|
|
84
82
|
paddingBottom,
|
|
85
83
|
shadow,
|
|
86
|
-
borderWidth
|
|
84
|
+
borderWidth,
|
|
85
|
+
minWidth
|
|
87
86
|
}) => {
|
|
88
87
|
// Subtract border width from padding so overall button width/height doesn't
|
|
89
88
|
// jump around if the border width changes (avoiding NaN and negative padding)
|
|
@@ -98,6 +97,7 @@ const selectInnerContainerStyles = ({
|
|
|
98
97
|
paddingTop: offsetBorder(paddingTop),
|
|
99
98
|
paddingBottom: offsetBorder(paddingBottom),
|
|
100
99
|
backgroundColor,
|
|
100
|
+
minWidth,
|
|
101
101
|
...applyShadowToken(shadow)
|
|
102
102
|
}
|
|
103
103
|
}
|
|
@@ -118,107 +118,105 @@ const selectTextStyles = ({ fontSize, color, lineHeight, fontName, fontWeight, t
|
|
|
118
118
|
textAlign
|
|
119
119
|
})
|
|
120
120
|
|
|
121
|
-
const selectWebOnlyStyles = (inactive, themeTokens, { accessibilityRole }) =>
|
|
122
|
-
Platform.
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
: {}
|
|
130
|
-
|
|
131
|
-
const ButtonBase = ({
|
|
132
|
-
href,
|
|
133
|
-
hrefAttrs,
|
|
134
|
-
children,
|
|
135
|
-
variant,
|
|
136
|
-
onPress,
|
|
137
|
-
tokens,
|
|
138
|
-
disabled = false, // alias for inactive
|
|
139
|
-
inactive = disabled,
|
|
140
|
-
selected = false,
|
|
141
|
-
...rest
|
|
142
|
-
}) => {
|
|
143
|
-
const getTokens = useThemeTokensCallback('Button', tokens, variant)
|
|
144
|
-
const getButtonState = ({ pressed, focused, hovered }) => ({
|
|
145
|
-
pressed,
|
|
146
|
-
focus: focused,
|
|
147
|
-
hover: hovered,
|
|
148
|
-
inactive,
|
|
149
|
-
selected
|
|
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: {}
|
|
150
130
|
})
|
|
151
|
-
const getTokensByPressableState = (pressableState) => getTokens(getButtonState(pressableState))
|
|
152
|
-
|
|
153
|
-
const a11y = a11yProps.select(rest)
|
|
154
|
-
|
|
155
|
-
const getPressableStyle = (pressableState) => {
|
|
156
|
-
const themeTokens = getTokensByPressableState(pressableState)
|
|
157
|
-
return [
|
|
158
|
-
staticStyles.wrapper,
|
|
159
|
-
selectWebOnlyStyles(inactive, themeTokens, a11y),
|
|
160
|
-
selectOuterContainerStyles(themeTokens),
|
|
161
|
-
selectOuterWidthStyles(themeTokens)
|
|
162
|
-
]
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
const handlePress = linkProps.handleHref({ href, onPress })
|
|
166
|
-
|
|
167
|
-
return (
|
|
168
|
-
<Pressable
|
|
169
|
-
onPress={handlePress}
|
|
170
|
-
style={getPressableStyle}
|
|
171
|
-
disabled={inactive}
|
|
172
|
-
href={href}
|
|
173
|
-
{...hrefAttrsProp.spread(hrefAttrs)}
|
|
174
|
-
{...a11y}
|
|
175
|
-
>
|
|
176
|
-
{(pressableState) => {
|
|
177
|
-
const themeTokens = getTokensByPressableState(pressableState)
|
|
178
|
-
const containerStyles = selectInnerContainerStyles(themeTokens)
|
|
179
|
-
const borderStyles = selectBorderStyles(themeTokens)
|
|
180
|
-
const textStyles = {
|
|
181
|
-
...selectTextStyles(themeTokens),
|
|
182
|
-
...Platform.select({
|
|
183
|
-
// TODO: https://github.com/telus/universal-design-system/issues/487
|
|
184
|
-
web: { transition: 'color 200ms' }
|
|
185
|
-
})
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
// If the container has a width set, fill it instead of sizing from content.
|
|
189
|
-
// If in future we support text alignments other than center, add here.
|
|
190
|
-
const stretchStyles = !!themeTokens.width && staticStyles.center
|
|
191
|
-
|
|
192
|
-
return (
|
|
193
|
-
<View
|
|
194
|
-
style={[
|
|
195
|
-
containerStyles,
|
|
196
|
-
borderStyles,
|
|
197
|
-
stretchStyles,
|
|
198
|
-
Platform.select({
|
|
199
|
-
web: {
|
|
200
|
-
maxWidth: '100%', // ensure overflowing content wraps
|
|
201
|
-
// TODO: https://github.com/telus/universal-design-system/issues/487
|
|
202
|
-
transition: 'background-color 200ms, border-color 200ms'
|
|
203
|
-
}
|
|
204
|
-
})
|
|
205
|
-
]}
|
|
206
|
-
>
|
|
207
|
-
{typeof children === 'function' ? (
|
|
208
|
-
children({
|
|
209
|
-
...getButtonState(pressableState),
|
|
210
|
-
textStyles
|
|
211
|
-
})
|
|
212
|
-
) : (
|
|
213
|
-
<Text style={textStyles}>{children}</Text>
|
|
214
|
-
)}
|
|
215
|
-
</View>
|
|
216
|
-
)
|
|
217
|
-
}}
|
|
218
|
-
</Pressable>
|
|
219
|
-
)
|
|
220
131
|
}
|
|
221
132
|
|
|
133
|
+
const ButtonBase = forwardRef(
|
|
134
|
+
(
|
|
135
|
+
{
|
|
136
|
+
href,
|
|
137
|
+
hrefAttrs,
|
|
138
|
+
children,
|
|
139
|
+
onPress,
|
|
140
|
+
tokens = {},
|
|
141
|
+
disabled = false, // alias for inactive
|
|
142
|
+
inactive = disabled,
|
|
143
|
+
selected = false,
|
|
144
|
+
dataSet,
|
|
145
|
+
...rest
|
|
146
|
+
},
|
|
147
|
+
ref
|
|
148
|
+
) => {
|
|
149
|
+
const extraButtonState = { inactive, selected }
|
|
150
|
+
const resolveButtonTokens = (pressableState) =>
|
|
151
|
+
resolvePressableTokens(tokens, pressableState, extraButtonState)
|
|
152
|
+
|
|
153
|
+
const a11y = a11yProps.select(rest)
|
|
154
|
+
|
|
155
|
+
const getPressableStyle = (pressableState) => {
|
|
156
|
+
const themeTokens = resolveButtonTokens(pressableState)
|
|
157
|
+
return [
|
|
158
|
+
staticStyles.row,
|
|
159
|
+
selectWebOnlyStyles(inactive, themeTokens, a11y),
|
|
160
|
+
selectOuterContainerStyles(themeTokens),
|
|
161
|
+
selectOuterWidthStyles(themeTokens)
|
|
162
|
+
]
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
return (
|
|
166
|
+
<Pressable
|
|
167
|
+
ref={ref}
|
|
168
|
+
href={href}
|
|
169
|
+
onPress={linkProps.handleHref({ href, onPress })}
|
|
170
|
+
style={getPressableStyle}
|
|
171
|
+
disabled={inactive}
|
|
172
|
+
dataSet={dataSet}
|
|
173
|
+
hrefAttrs={hrefAttrs}
|
|
174
|
+
{...a11y}
|
|
175
|
+
>
|
|
176
|
+
{(pressableState) => {
|
|
177
|
+
const themeTokens = resolveButtonTokens(pressableState)
|
|
178
|
+
const containerStyles = selectInnerContainerStyles(themeTokens)
|
|
179
|
+
const borderStyles = selectBorderStyles(themeTokens)
|
|
180
|
+
const textStyles = [selectTextStyles(themeTokens), staticStyles.text]
|
|
181
|
+
|
|
182
|
+
// If the container has a width set, fill it instead of sizing from content.
|
|
183
|
+
// If in future we support text alignments other than center, add here.
|
|
184
|
+
const stretchStyles = themeTokens.width ? staticStyles.stretch : staticStyles.align
|
|
185
|
+
|
|
186
|
+
return (
|
|
187
|
+
<View
|
|
188
|
+
style={[
|
|
189
|
+
containerStyles,
|
|
190
|
+
borderStyles,
|
|
191
|
+
stretchStyles,
|
|
192
|
+
staticStyles.row,
|
|
193
|
+
Platform.select({
|
|
194
|
+
web: {
|
|
195
|
+
maxWidth: '100%', // ensure overflowing content wraps
|
|
196
|
+
// TODO: https://github.com/telus/universal-design-system/issues/487
|
|
197
|
+
transition: 'background-color 200ms, border-color 200ms'
|
|
198
|
+
}
|
|
199
|
+
})
|
|
200
|
+
]}
|
|
201
|
+
>
|
|
202
|
+
{wrapStringsInText(
|
|
203
|
+
typeof children === 'function'
|
|
204
|
+
? children({
|
|
205
|
+
...resolvePressableState(pressableState, extraButtonState),
|
|
206
|
+
textStyles
|
|
207
|
+
})
|
|
208
|
+
: children,
|
|
209
|
+
{ style: textStyles }
|
|
210
|
+
)}
|
|
211
|
+
</View>
|
|
212
|
+
)
|
|
213
|
+
}}
|
|
214
|
+
</Pressable>
|
|
215
|
+
)
|
|
216
|
+
}
|
|
217
|
+
)
|
|
218
|
+
ButtonBase.displayName = 'ButtonBase'
|
|
219
|
+
|
|
222
220
|
ButtonBase.propTypes = {
|
|
223
221
|
...a11yProps.types,
|
|
224
222
|
...buttonPropTypes,
|
|
@@ -226,10 +224,21 @@ ButtonBase.propTypes = {
|
|
|
226
224
|
}
|
|
227
225
|
|
|
228
226
|
const staticStyles = StyleSheet.create({
|
|
229
|
-
|
|
230
|
-
|
|
227
|
+
row: {
|
|
228
|
+
// Apply all button alignment horizontally; no vertical stacking within a button
|
|
229
|
+
flexDirection: 'row'
|
|
230
|
+
},
|
|
231
|
+
text: {
|
|
232
|
+
flexGrow: 1, // On native but not web, flexShrink here wraps text prematurely
|
|
233
|
+
...Platform.select({
|
|
234
|
+
// TODO: https://github.com/telus/universal-design-system/issues/487
|
|
235
|
+
web: { transition: 'color 200ms' }
|
|
236
|
+
})
|
|
237
|
+
},
|
|
238
|
+
align: {
|
|
239
|
+
alignItems: 'center'
|
|
231
240
|
},
|
|
232
|
-
|
|
241
|
+
stretch: {
|
|
233
242
|
flex: 1,
|
|
234
243
|
alignItems: 'center',
|
|
235
244
|
justifyContent: 'center'
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import React from 'react'
|
|
1
|
+
import React, { forwardRef } from 'react'
|
|
2
2
|
import PropTypes from 'prop-types'
|
|
3
|
+
import ABBPropTypes from 'airbnb-prop-types'
|
|
3
4
|
import { Platform } from 'react-native'
|
|
4
5
|
|
|
5
6
|
import ButtonBase from './ButtonBase'
|
|
6
7
|
import { StackWrap } from '../StackView'
|
|
7
8
|
import { useViewport } from '../ViewportProvider'
|
|
8
|
-
import { useThemeTokens } from '../ThemeProvider'
|
|
9
|
+
import { useThemeTokens, useThemeTokensCallback } from '../ThemeProvider'
|
|
9
10
|
import {
|
|
10
11
|
a11yProps,
|
|
11
12
|
pressProps,
|
|
@@ -14,102 +15,96 @@ import {
|
|
|
14
15
|
selectTokens
|
|
15
16
|
} from '../utils/propTypes'
|
|
16
17
|
import { useMultipleInputValues } from '../utils/input'
|
|
18
|
+
import { getPressHandlersWithArgs } from '../utils/pressability'
|
|
17
19
|
|
|
18
|
-
const ButtonGroup = (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
20
|
+
const ButtonGroup = forwardRef(
|
|
21
|
+
(
|
|
22
|
+
{
|
|
23
|
+
variant,
|
|
24
|
+
tokens,
|
|
25
|
+
items = [],
|
|
26
|
+
values,
|
|
27
|
+
initialValues,
|
|
28
|
+
maxValues = 1,
|
|
29
|
+
onChange,
|
|
30
|
+
readOnly = false,
|
|
31
|
+
inactive = false,
|
|
32
|
+
accessibilityRole = maxValues === 1
|
|
33
|
+
? 'radiogroup' // radiogroup is cross-platform; only web aria has generic groups
|
|
34
|
+
: Platform.select({ web: 'group', default: 'none' }),
|
|
35
|
+
...rest
|
|
36
|
+
},
|
|
37
|
+
ref
|
|
38
|
+
) => {
|
|
39
|
+
const viewport = useViewport()
|
|
40
|
+
const themeTokens = useThemeTokens('ButtonGroup', tokens, variant, { viewport })
|
|
41
|
+
const stackTokens = selectTokens('StackView', themeTokens)
|
|
42
|
+
const { direction, space } = themeTokens
|
|
38
43
|
|
|
39
|
-
|
|
40
|
-
initialValues,
|
|
41
|
-
values,
|
|
42
|
-
maxValues,
|
|
43
|
-
onChange,
|
|
44
|
-
readOnly
|
|
45
|
-
})
|
|
44
|
+
const getButtonTokens = useThemeTokensCallback('ButtonGroupItem', tokens, variant)
|
|
46
45
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
46
|
+
const { currentValues, toggleOneValue } = useMultipleInputValues({
|
|
47
|
+
initialValues,
|
|
48
|
+
values,
|
|
49
|
+
maxValues,
|
|
50
|
+
onChange,
|
|
51
|
+
readOnly
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
const a11y = a11yProps.select({
|
|
55
|
+
accessibilityRole,
|
|
56
|
+
...rest
|
|
57
|
+
})
|
|
58
|
+
const itemA11yRole = a11y.accessibilityRole === 'radiogroup' ? 'radio' : 'checkbox'
|
|
52
59
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
60
|
+
return (
|
|
61
|
+
<StackWrap {...a11y} space={space} direction={direction} tokens={stackTokens} ref={ref}>
|
|
62
|
+
{items.map(({ label, id = label, accessibilityLabel, ref: itemRef }, index) => {
|
|
63
|
+
const isSelected = currentValues.includes(id)
|
|
57
64
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
Object.entries(pressProps.select(rest)).map(([key, handler]) => ({
|
|
61
|
-
[key]: (args) => {
|
|
62
|
-
// Pass each handler data on this button and current selection
|
|
63
|
-
handler({ id, label, currentValues }, ...args)
|
|
64
|
-
}
|
|
65
|
-
}))
|
|
66
|
-
)
|
|
67
|
-
const handlePress = () => {
|
|
68
|
-
if (pressHandlers.onPress) pressHandlers.onPress()
|
|
69
|
-
toggleOneValue(id)
|
|
70
|
-
}
|
|
65
|
+
// Pass an object of relevant component state as first argument for any passed-in press handlers
|
|
66
|
+
const pressHandlers = getPressHandlersWithArgs(rest, [{ id, label, currentValues }])
|
|
71
67
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
...Platform.select({
|
|
77
|
-
web: {
|
|
78
|
-
// accessibilityPosInSet etc exists in React Native Web main branch
|
|
79
|
-
// but not in a release compatible with Expo etc; just use `aria-*`
|
|
80
|
-
'aria-setsize': items.length,
|
|
81
|
-
'aria-posinset': index + 1
|
|
82
|
-
},
|
|
83
|
-
default: {}
|
|
84
|
-
})
|
|
85
|
-
}
|
|
68
|
+
const handlePress = (event) => {
|
|
69
|
+
if (pressHandlers.onPress) pressHandlers.onPress()
|
|
70
|
+
toggleOneValue(id, event)
|
|
71
|
+
}
|
|
86
72
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
73
|
+
const itemA11y = {
|
|
74
|
+
accessibilityState: { checked: isSelected },
|
|
75
|
+
accessibilityRole: itemA11yRole,
|
|
76
|
+
accessibilityLabel,
|
|
77
|
+
...a11yProps.getPositionInSet(items.length, index)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Ensure button is direct child of group as MacOS voiceover only applies "X of Y" to
|
|
81
|
+
// "radio" if it's a direct child of "radiogroup", even if aria-posinset etc exists
|
|
82
|
+
return (
|
|
83
|
+
<ButtonBase
|
|
84
|
+
ref={itemRef}
|
|
85
|
+
key={id}
|
|
86
|
+
{...pressHandlers}
|
|
87
|
+
onPress={handlePress}
|
|
88
|
+
tokens={getButtonTokens}
|
|
89
|
+
selected={isSelected}
|
|
90
|
+
inactive={inactive}
|
|
91
|
+
{...itemA11y}
|
|
92
|
+
>
|
|
93
|
+
{label}
|
|
94
|
+
</ButtonBase>
|
|
95
|
+
)
|
|
96
|
+
})}
|
|
97
|
+
</StackWrap>
|
|
98
|
+
)
|
|
99
|
+
}
|
|
100
|
+
)
|
|
101
|
+
ButtonGroup.displayName = 'ButtonGroup'
|
|
106
102
|
|
|
107
103
|
ButtonGroup.propTypes = {
|
|
108
104
|
...a11yProps.propTypes,
|
|
109
105
|
...pressProps.propTypes,
|
|
110
106
|
tokens: getTokensPropType('ButtonGroup'),
|
|
111
107
|
variant: variantProp.propType,
|
|
112
|
-
buttonVariant: variantProp.propType,
|
|
113
108
|
/**
|
|
114
109
|
* The maximum number of items a user may select at once. Defaults to 1 and behaves
|
|
115
110
|
* like radio buttons. To have no limit and allow any number of selections, pass `null`.
|
|
@@ -135,7 +130,11 @@ ButtonGroup.propTypes = {
|
|
|
135
130
|
* which will be used in code and passed to any onChange function.
|
|
136
131
|
* If not provided, the label is used.
|
|
137
132
|
*/
|
|
138
|
-
id: PropTypes.string
|
|
133
|
+
id: PropTypes.string,
|
|
134
|
+
/**
|
|
135
|
+
* An optional ref for one individual button in the ButtonGroup
|
|
136
|
+
*/
|
|
137
|
+
ref: ABBPropTypes.ref()
|
|
139
138
|
})
|
|
140
139
|
),
|
|
141
140
|
/**
|
|
@@ -1,21 +1,36 @@
|
|
|
1
|
-
import React from 'react'
|
|
1
|
+
import React, { forwardRef } from 'react'
|
|
2
2
|
import ButtonBase from './ButtonBase'
|
|
3
|
-
import buttonPropTypes from './propTypes'
|
|
3
|
+
import buttonPropTypes, { textAndA11yText } from './propTypes'
|
|
4
4
|
import { a11yProps, hrefAttrsProp, linkProps } from '../utils/propTypes'
|
|
5
|
+
import { useThemeTokensCallback } from '../ThemeProvider'
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* `ButtonLink` is a component with the semantics and behaviour of a link, but with the visual appearance of a button.
|
|
8
9
|
* ButtonLink is a block-level component and should not be used inline.
|
|
9
10
|
*/
|
|
10
|
-
const ButtonLink = (
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
const ButtonLink = forwardRef(
|
|
12
|
+
({ accessibilityRole = 'link', tokens, variant, dataSet, ...props }, ref) => {
|
|
13
|
+
const { hrefAttrs, rest } = hrefAttrsProp.bundle(props)
|
|
14
|
+
const getTokens = useThemeTokensCallback('Button', tokens, variant)
|
|
15
|
+
return (
|
|
16
|
+
<ButtonBase
|
|
17
|
+
ref={ref}
|
|
18
|
+
accessibilityRole={accessibilityRole}
|
|
19
|
+
tokens={getTokens}
|
|
20
|
+
hrefAttrs={hrefAttrs}
|
|
21
|
+
dataSet={dataSet}
|
|
22
|
+
{...rest}
|
|
23
|
+
/>
|
|
24
|
+
)
|
|
25
|
+
}
|
|
26
|
+
)
|
|
27
|
+
ButtonLink.displayName = 'ButtonLink'
|
|
14
28
|
|
|
15
29
|
ButtonLink.propTypes = {
|
|
16
30
|
...a11yProps.types,
|
|
17
31
|
...buttonPropTypes,
|
|
18
|
-
...linkProps.types
|
|
32
|
+
...linkProps.types,
|
|
33
|
+
children: textAndA11yText
|
|
19
34
|
}
|
|
20
35
|
|
|
21
36
|
export default ButtonLink
|
package/src/Button/propTypes.js
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import PropTypes from 'prop-types'
|
|
2
|
+
import ABBPropTypes from 'airbnb-prop-types'
|
|
2
3
|
import { variantProp } from '../utils/propTypes'
|
|
4
|
+
import A11yText from '../A11yText'
|
|
5
|
+
|
|
6
|
+
export const textAndA11yText = ABBPropTypes.childrenOf(
|
|
7
|
+
PropTypes.oneOfType([ABBPropTypes.elementType(A11yText), PropTypes.string])
|
|
8
|
+
)
|
|
3
9
|
|
|
4
10
|
const buttonPropTypes = {
|
|
5
11
|
/**
|
|
@@ -12,10 +18,14 @@ const buttonPropTypes = {
|
|
|
12
18
|
*/
|
|
13
19
|
disabled: PropTypes.bool,
|
|
14
20
|
/**
|
|
15
|
-
* Button's children must be either
|
|
21
|
+
* Button's children must be either:
|
|
22
|
+
* - One or more text strings and / or A11yText components
|
|
23
|
+
* - A render function with contents that responds to current button state by being passed an object of:
|
|
24
|
+
* ```
|
|
16
25
|
* { hovered<bool>, focused<bool>, pressed<bool>, inactive<bool>, selected<bool>, textStyles<RNStyle> }
|
|
26
|
+
* ```
|
|
17
27
|
*/
|
|
18
|
-
children: PropTypes.oneOfType([PropTypes.
|
|
28
|
+
children: PropTypes.oneOfType([PropTypes.func, textAndA11yText]).isRequired,
|
|
19
29
|
/**
|
|
20
30
|
* Function called when the button is pressed. Required unless the button has a href.
|
|
21
31
|
*/
|
package/src/Card/Card.jsx
CHANGED
|
@@ -1,34 +1,11 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
2
|
import PropTypes from 'prop-types'
|
|
3
|
-
import { View } from 'react-native'
|
|
4
3
|
|
|
5
|
-
import {
|
|
4
|
+
import { useThemeTokens } from '../ThemeProvider'
|
|
6
5
|
import { getTokensPropType, variantProp } from '../utils'
|
|
7
6
|
import { useViewport } from '../ViewportProvider'
|
|
8
7
|
import { a11yProps } from '../utils/propTypes'
|
|
9
|
-
|
|
10
|
-
// Ensure explicit selection of tokens
|
|
11
|
-
const selectStyles = ({
|
|
12
|
-
backgroundColor,
|
|
13
|
-
borderColor,
|
|
14
|
-
borderRadius,
|
|
15
|
-
borderWidth,
|
|
16
|
-
paddingBottom,
|
|
17
|
-
paddingLeft,
|
|
18
|
-
paddingRight,
|
|
19
|
-
paddingTop,
|
|
20
|
-
shadow
|
|
21
|
-
}) => ({
|
|
22
|
-
backgroundColor,
|
|
23
|
-
borderColor,
|
|
24
|
-
borderRadius,
|
|
25
|
-
borderWidth,
|
|
26
|
-
paddingBottom,
|
|
27
|
-
paddingLeft,
|
|
28
|
-
paddingRight,
|
|
29
|
-
paddingTop,
|
|
30
|
-
...applyShadowToken(shadow)
|
|
31
|
-
})
|
|
8
|
+
import CardBase from './CardBase'
|
|
32
9
|
|
|
33
10
|
/**
|
|
34
11
|
* A basic card component, unstyled by default.
|
|
@@ -78,16 +55,13 @@ const selectStyles = ({
|
|
|
78
55
|
* you automatically make inaccessible its children, which may or may not be appropriate
|
|
79
56
|
* depending on what you are trying to achieve.
|
|
80
57
|
*/
|
|
81
|
-
const Card = ({ children, tokens, variant, ...rest }) => {
|
|
58
|
+
const Card = ({ children, tokens, variant, dataSet, ...rest }) => {
|
|
82
59
|
const viewport = useViewport()
|
|
83
60
|
const themeTokens = useThemeTokens('Card', tokens, variant, { viewport })
|
|
84
|
-
const cardStyle = selectStyles(themeTokens)
|
|
85
|
-
const a11y = a11yProps.select(rest)
|
|
86
|
-
|
|
87
61
|
return (
|
|
88
|
-
<
|
|
62
|
+
<CardBase tokens={themeTokens} dataSet={dataSet} {...rest}>
|
|
89
63
|
{children}
|
|
90
|
-
</
|
|
64
|
+
</CardBase>
|
|
91
65
|
)
|
|
92
66
|
}
|
|
93
67
|
|