@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
package/lib/utils/useCopy.js
CHANGED
|
@@ -1,16 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exports.DEFAULT_COPY = void 0;
|
|
7
|
+
const DEFAULT_COPY = 'en';
|
|
1
8
|
/**
|
|
2
9
|
* Extract translations from a keyed dictionary for a given language.
|
|
3
10
|
* Returns a getter.
|
|
4
11
|
*
|
|
5
|
-
* @
|
|
6
|
-
*
|
|
12
|
+
* @example
|
|
13
|
+
* const getCopy = useCopy({
|
|
14
|
+
* copy: 'en',
|
|
15
|
+
* dictionary: {
|
|
16
|
+
* en: { label: 'english label' },
|
|
17
|
+
* fr: { label: 'french label' }
|
|
18
|
+
* }
|
|
19
|
+
* })
|
|
20
|
+
*
|
|
21
|
+
* getCopy('label') => 'english label'
|
|
22
|
+
*
|
|
23
|
+
* @description The entire dictionary may be overridden by simply passing a single language object as `copy`:
|
|
24
|
+
* @example
|
|
25
|
+
* const getCopy = useCopy({
|
|
26
|
+
* copy: { label: 'custom label' }
|
|
27
|
+
* })
|
|
28
|
+
*
|
|
29
|
+
* getCopy('label') => 'custom label'
|
|
30
|
+
*
|
|
31
|
+
* @param {object} [dictionary]
|
|
32
|
+
* @param {'en'|'fr'|object} copy - language
|
|
7
33
|
* @return {function(string): string}
|
|
8
34
|
*/
|
|
35
|
+
|
|
36
|
+
exports.DEFAULT_COPY = DEFAULT_COPY;
|
|
37
|
+
|
|
9
38
|
function useCopy({
|
|
10
39
|
dictionary,
|
|
11
|
-
copy
|
|
40
|
+
copy = DEFAULT_COPY
|
|
12
41
|
}) {
|
|
13
|
-
|
|
42
|
+
if (typeof copy === 'string') {
|
|
43
|
+
return key => key ? dictionary[copy][key] : dictionary[copy];
|
|
44
|
+
} // support overriding the entire copy dictionary with an object for a single language
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
return key => copy[key];
|
|
14
48
|
}
|
|
15
49
|
|
|
16
|
-
|
|
50
|
+
var _default = useCopy;
|
|
51
|
+
exports.default = _default;
|
|
@@ -0,0 +1,52 @@
|
|
|
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
|
+
const doAction = (action, event) => {
|
|
11
|
+
var _window, _window$location;
|
|
12
|
+
|
|
13
|
+
return typeof action === 'function' && action((_window = window) === null || _window === void 0 ? void 0 : (_window$location = _window.location) === null || _window$location === void 0 ? void 0 : _window$location.hash, event);
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* @typedef {import('react').SyntheticEvent} SyntheticEvent
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Calls a function (passing it the current hash) based on the current hash state on mount,
|
|
21
|
+
* and binds it to call it again any time the hash changes.
|
|
22
|
+
*
|
|
23
|
+
* Consider using `useCallback` on the function to minimise adding and removing of event listeners.
|
|
24
|
+
*
|
|
25
|
+
* On Native, this is replaced with a harmless no-op function as there is no direct equivalent.
|
|
26
|
+
*
|
|
27
|
+
* @param {(hash: string, event?: SyntheticEvent) => void} action - a function to act on the current hash on load and when it changes
|
|
28
|
+
* @returns
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
const useHash = (action, isReady = true) => {
|
|
33
|
+
const [isDone, setIsDone] = (0, _react.useState)(false); // Do the action just once when ready after component mount, from hash on page load
|
|
34
|
+
|
|
35
|
+
const isToDo = isReady && !isDone;
|
|
36
|
+
(0, _react.useEffect)(() => {
|
|
37
|
+
if (isToDo) {
|
|
38
|
+
setIsDone(true);
|
|
39
|
+
doAction(action);
|
|
40
|
+
}
|
|
41
|
+
}, [isToDo, action]); // Bind the action for each hash change; do re-bind if the function changes.
|
|
42
|
+
|
|
43
|
+
(0, _react.useEffect)(() => {
|
|
44
|
+
const handleChange = event => doAction(action, event);
|
|
45
|
+
|
|
46
|
+
window.addEventListener('hashchange', handleChange);
|
|
47
|
+
return () => window.removeEventListener('hashchange', handleChange);
|
|
48
|
+
}, [action]);
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
var _default = useHash;
|
|
52
|
+
exports.default = _default;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* No URL hashes on Native, so do a no-op. Remembering scenes for reloads
|
|
10
|
+
* is handled at OS level and deep links have completely different usage.
|
|
11
|
+
*/
|
|
12
|
+
const useHash = () => {};
|
|
13
|
+
|
|
14
|
+
var _default = useHash;
|
|
15
|
+
exports.default = _default;
|
|
@@ -1,9 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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");
|
|
3
11
|
|
|
4
12
|
const hasOwn = (objectProp, key) => Object.prototype.hasOwnProperty.call(objectProp, key);
|
|
5
13
|
|
|
6
|
-
const hasResponsiveProperties = objectProp => viewports.keys.some(key => hasOwn(objectProp, key));
|
|
14
|
+
const hasResponsiveProperties = objectProp => _systemConstants.viewports.keys.some(key => hasOwn(objectProp, key));
|
|
7
15
|
/**
|
|
8
16
|
* Resolves a prop which may be a responsive object with keys for viewports.
|
|
9
17
|
*
|
|
@@ -16,12 +24,12 @@ const hasResponsiveProperties = objectProp => viewports.keys.some(key => hasOwn(
|
|
|
16
24
|
*/
|
|
17
25
|
|
|
18
26
|
|
|
19
|
-
|
|
27
|
+
const resolveResponsiveProp = (prop, viewport, defaultValue) => {
|
|
20
28
|
if (prop === undefined) return defaultValue;
|
|
21
29
|
if (!prop || typeof prop !== 'object' || !hasResponsiveProperties(prop)) return prop;
|
|
22
|
-
const value = viewports.keys.includes(viewport) ? // If there's a current viewport, return the closest match at or below it
|
|
23
|
-
viewports.inherit(prop)[viewport] : // If no current viewport is available, default to smallest viewport
|
|
24
|
-
prop[viewports.keys.find(key => hasOwn(prop, key))];
|
|
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))];
|
|
25
33
|
return value === undefined ? defaultValue : value;
|
|
26
34
|
};
|
|
27
35
|
/**
|
|
@@ -39,9 +47,13 @@ export const resolveResponsiveProp = (prop, viewport, defaultValue) => {
|
|
|
39
47
|
* @returns {*}
|
|
40
48
|
*/
|
|
41
49
|
|
|
50
|
+
|
|
51
|
+
exports.resolveResponsiveProp = resolveResponsiveProp;
|
|
52
|
+
|
|
42
53
|
const useResponsiveProp = (prop, defaultValue) => {
|
|
43
|
-
const viewport = useViewport();
|
|
54
|
+
const viewport = (0, _ViewportProvider.useViewport)();
|
|
44
55
|
return resolveResponsiveProp(prop, viewport, defaultValue);
|
|
45
56
|
};
|
|
46
57
|
|
|
47
|
-
|
|
58
|
+
var _default = useResponsiveProp;
|
|
59
|
+
exports.default = _default;
|
|
@@ -1,6 +1,16 @@
|
|
|
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
16
|
* @typedef {import('./propTypes.js').SpacingValue} SpacingValue
|
|
@@ -8,9 +18,8 @@ import { resolveResponsiveProp } from './useResponsiveProp';
|
|
|
8
18
|
* @typedef {import('./propTypes.js').SpacingObject} SpacingObject
|
|
9
19
|
* @typedef {import('./propTypes.js').SpacingOptions} SpacingOptions
|
|
10
20
|
*/
|
|
11
|
-
|
|
12
21
|
const resolveSpacingOptions = space => {
|
|
13
|
-
if (!space
|
|
22
|
+
if (!(space !== null && space !== void 0 && space.options)) return {};
|
|
14
23
|
const {
|
|
15
24
|
size,
|
|
16
25
|
variant,
|
|
@@ -103,21 +112,22 @@ const resolveSpacingOptions = space => {
|
|
|
103
112
|
const useSpacingScale = spaceValue => {
|
|
104
113
|
// In future, may need to consider window height as well as width, particularly for native apps,
|
|
105
114
|
// e.g. to ensure designs don't look lost on large, tall, not-so-wide portrait screens.
|
|
106
|
-
const viewport = useViewport();
|
|
115
|
+
const viewport = (0, _ViewportProvider.useViewport)();
|
|
107
116
|
const {
|
|
108
117
|
tokens,
|
|
109
118
|
variant,
|
|
110
119
|
overridden,
|
|
111
120
|
subtract = 0
|
|
112
121
|
} = resolveSpacingOptions(spaceValue);
|
|
113
|
-
const space = !overridden && (spaceValue
|
|
122
|
+
const space = !overridden && ((spaceValue === null || spaceValue === void 0 ? void 0 : spaceValue.space) ?? (0, _useResponsiveProp.resolveResponsiveProp)(spaceValue, viewport, 0));
|
|
114
123
|
const {
|
|
115
124
|
size
|
|
116
|
-
} = useThemeTokens('spacingScale', tokens, variant, {
|
|
125
|
+
} = (0, _ThemeProvider.useThemeTokens)('spacingScale', tokens, variant, {
|
|
117
126
|
space: typeof space === 'number' ? space : 0,
|
|
118
127
|
viewport
|
|
119
128
|
});
|
|
120
129
|
return Math.max(size - subtract, 0);
|
|
121
130
|
};
|
|
122
131
|
|
|
123
|
-
|
|
132
|
+
var _default = useSpacingScale;
|
|
133
|
+
exports.default = _default;
|
package/lib/utils/useUniqueId.js
CHANGED
|
@@ -1,12 +1,21 @@
|
|
|
1
|
-
|
|
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
|
+
|
|
2
10
|
let id = 0;
|
|
3
11
|
|
|
4
12
|
function useUniqueId(prefix = '') {
|
|
5
|
-
const [uniqueId] = useState(() => {
|
|
13
|
+
const [uniqueId] = (0, _react.useState)(() => {
|
|
6
14
|
id += 1;
|
|
7
15
|
return `${prefix}-${id}`;
|
|
8
16
|
});
|
|
9
17
|
return uniqueId;
|
|
10
18
|
}
|
|
11
19
|
|
|
12
|
-
|
|
20
|
+
var _default = useUniqueId;
|
|
21
|
+
exports.default = _default;
|
package/package.json
CHANGED
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@telus-uds/components-base",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "Base components",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"base"
|
|
7
7
|
],
|
|
8
8
|
"author": "TELUS Digital",
|
|
9
9
|
"homepage": "https://github.com/telus/universal-design-system#readme",
|
|
10
|
-
"license": "
|
|
10
|
+
"license": "UNLICENSED",
|
|
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__"
|
|
@@ -26,7 +25,7 @@
|
|
|
26
25
|
"format": "prettier --write .",
|
|
27
26
|
"build": "babel src -d lib",
|
|
28
27
|
"dev": "yarn build --watch",
|
|
29
|
-
"release": "standard-version"
|
|
28
|
+
"release": "standard-version --release-as major"
|
|
30
29
|
},
|
|
31
30
|
"bugs": {
|
|
32
31
|
"url": "https://github.com/telus/universal-design-system/issues"
|
|
@@ -34,11 +33,14 @@
|
|
|
34
33
|
"standard-engine": {
|
|
35
34
|
"skip": true
|
|
36
35
|
},
|
|
36
|
+
"browserslist": [
|
|
37
|
+
"extends @telus-uds/browserslist-config"
|
|
38
|
+
],
|
|
37
39
|
"peerDependencies": {
|
|
38
|
-
"react": "
|
|
40
|
+
"react": "^17.0.2",
|
|
39
41
|
"react-dom": "*",
|
|
40
42
|
"react-native": "*",
|
|
41
|
-
"react-native-web": "
|
|
43
|
+
"react-native-web": "^0.17.0"
|
|
42
44
|
},
|
|
43
45
|
"devDependencies": {
|
|
44
46
|
"@testing-library/jest-native": "^4.0.1",
|
|
@@ -47,9 +49,13 @@
|
|
|
47
49
|
"react-test-renderer": "^16.3.2"
|
|
48
50
|
},
|
|
49
51
|
"dependencies": {
|
|
50
|
-
"
|
|
51
|
-
"@telus-uds/
|
|
52
|
+
"airbnb-prop-types": "^2.16.0",
|
|
53
|
+
"@telus-uds/system-constants": "^1.0.0",
|
|
54
|
+
"@telus-uds/system-theme-tokens": "^1.0.0",
|
|
55
|
+
"lodash.debounce": "^4.0.8",
|
|
52
56
|
"lodash.merge": "^4.6.2",
|
|
53
|
-
"prop-types": "^15.7.2"
|
|
57
|
+
"prop-types": "^15.7.2",
|
|
58
|
+
"react-native-picker-select": "^8.0.4",
|
|
59
|
+
"semver": "^7.3.5"
|
|
54
60
|
}
|
|
55
61
|
}
|
package/release-context.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"previousReleaseTag": "@telus-uds/components-base/v0.0.2-prerelease.
|
|
3
|
-
"changelog": "
|
|
4
|
-
"releaseTag": "@telus-uds/components-base/
|
|
5
|
-
"newVersion": "0.0
|
|
2
|
+
"previousReleaseTag": "@telus-uds/components-base/v0.0.2-prerelease.10",
|
|
3
|
+
"changelog": "## [1.0.0](https://github.com/telus/universal-design-system/compare/@telus-uds/components-base/v0.0.2-prerelease.10...@telus-uds/components-base/v1.0.0) (2022-02-03)\n\n\n### Features\n\n* add dataSet prop ([#1156](https://github.com/telus/universal-design-system/issues/1156)) ([21f49f6](https://github.com/telus/universal-design-system/commit/21f49f6c898118bb94c45f07a52c163b61e4cbaa))\n* **base:** add forwardRef to remaining components ([#1218](https://github.com/telus/universal-design-system/issues/1218)) ([49ccc42](https://github.com/telus/universal-design-system/commit/49ccc4217a68613f23dd7a23dd99e0f61fd6f121))\n* **base:** add tag prop for semantic HTML ([#1222](https://github.com/telus/universal-design-system/issues/1222)) ([581d070](https://github.com/telus/universal-design-system/commit/581d070782dfe569ffcf20c34de6e4409cdd8dfa))\n* **themes:** validate theme token types ([#1221](https://github.com/telus/universal-design-system/issues/1221)) ([dae382d](https://github.com/telus/universal-design-system/commit/dae382d19f86b88cd5de9df8c94f8200aee5b33f))\n\n\n### Bug Fixes\n\n* **base:** avoid errors in apps and update demo app ([#1215](https://github.com/telus/universal-design-system/issues/1215)) ([df6897a](https://github.com/telus/universal-design-system/commit/df6897a4918342e9859e596b9578bcdefc1a5702))\n",
|
|
4
|
+
"releaseTag": "@telus-uds/components-base/v1.0.0",
|
|
5
|
+
"newVersion": "1.0.0",
|
|
6
6
|
"packageName": "@telus-uds/components-base"
|
|
7
7
|
}
|
package/src/A11yText/index.jsx
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React from 'react'
|
|
1
|
+
import React, { forwardRef } from 'react'
|
|
2
2
|
import { Platform, StyleSheet, View } from 'react-native'
|
|
3
3
|
import PropTypes from 'prop-types'
|
|
4
4
|
|
|
@@ -10,7 +10,7 @@ import { a11yProps } from '../utils/propTypes'
|
|
|
10
10
|
* It should be used to add selectable screen-reader-only text to the main document flow,
|
|
11
11
|
* as a sibling to blocks of text like paragraphs and interactive elements like buttons.
|
|
12
12
|
*/
|
|
13
|
-
const A11yText = ({ text, heading, ...rest }) => {
|
|
13
|
+
const A11yText = forwardRef(({ text, heading, ...rest }, ref) => {
|
|
14
14
|
const a11y = a11yProps.select({
|
|
15
15
|
// On iOS, needs `accessible` to be true to be focusable without non-a11y content.
|
|
16
16
|
// On Web, `accessible` causes RNW to set attributes that may make the element be treated as a group.
|
|
@@ -21,8 +21,10 @@ const A11yText = ({ text, heading, ...rest }) => {
|
|
|
21
21
|
accessibilityRole: heading ? 'header' : 'text',
|
|
22
22
|
...rest
|
|
23
23
|
})
|
|
24
|
-
return <View style={styles.invisible} {...a11y} />
|
|
25
|
-
}
|
|
24
|
+
return <View style={styles.invisible} ref={ref} {...a11y} />
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
A11yText.displayName = 'A11yText'
|
|
26
28
|
|
|
27
29
|
A11yText.propTypes = {
|
|
28
30
|
text: PropTypes.string.isRequired,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React from 'react'
|
|
1
|
+
import React, { forwardRef } from 'react'
|
|
2
2
|
import { DURATION, MIN_EMPTY_ANGLE, MIN_STROKE_ANGLE, BEZIER, propTypes } from './shared'
|
|
3
3
|
|
|
4
4
|
const SVG_RADIUS = 20
|
|
@@ -20,8 +20,9 @@ const bezierProps = {
|
|
|
20
20
|
}
|
|
21
21
|
// We're using svg rather than css here to define the animation to avoid needing to introduce css injection mechanism
|
|
22
22
|
// It's possible to replicate this functionality with RNW animations, but it snags on chrome at least, see https://github.com/telus/universal-design-system/pull/477 for details.
|
|
23
|
-
const Spinner = ({ size, color, thickness, label }) => (
|
|
23
|
+
const Spinner = forwardRef(({ size, color, thickness, label }, ref) => (
|
|
24
24
|
<svg
|
|
25
|
+
ref={ref}
|
|
25
26
|
width={`${size}px`}
|
|
26
27
|
height={`${size}px`}
|
|
27
28
|
viewBox="0 0 48 48"
|
|
@@ -62,7 +63,8 @@ const Spinner = ({ size, color, thickness, label }) => (
|
|
|
62
63
|
</circle>
|
|
63
64
|
</g>
|
|
64
65
|
</svg>
|
|
65
|
-
)
|
|
66
|
+
))
|
|
67
|
+
Spinner.displayName = 'Spinner'
|
|
66
68
|
|
|
67
69
|
Spinner.propTypes = propTypes
|
|
68
70
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import React from 'react'
|
|
1
|
+
import React, { forwardRef } from 'react'
|
|
2
2
|
import { Animated, Easing, StyleSheet, View } from 'react-native'
|
|
3
3
|
import { DURATION, MIN_EMPTY_ANGLE, MIN_STROKE_ANGLE, BEZIER, propTypes } from './shared'
|
|
4
4
|
|
|
5
5
|
const ea = MIN_EMPTY_ANGLE / 2
|
|
6
6
|
const sa = MIN_STROKE_ANGLE / 2
|
|
7
7
|
|
|
8
|
-
const Spinner = ({ size, color, thickness, label }) => {
|
|
8
|
+
const Spinner = forwardRef(({ size, color, thickness, label }, ref) => {
|
|
9
9
|
const { current: timer } = React.useRef(new Animated.Value(0))
|
|
10
10
|
|
|
11
11
|
React.useLayoutEffect(() => {
|
|
@@ -31,6 +31,7 @@ const Spinner = ({ size, color, thickness, label }) => {
|
|
|
31
31
|
// Credit to https://github.com/n4kz/react-native-indicators and https://github.com/callstack/react-native-paper for this
|
|
32
32
|
return (
|
|
33
33
|
<View
|
|
34
|
+
ref={ref}
|
|
34
35
|
style={[styles.container]}
|
|
35
36
|
accessible
|
|
36
37
|
accessibilityLabel={label}
|
|
@@ -109,7 +110,8 @@ const Spinner = ({ size, color, thickness, label }) => {
|
|
|
109
110
|
</Animated.View>
|
|
110
111
|
</View>
|
|
111
112
|
)
|
|
112
|
-
}
|
|
113
|
+
})
|
|
114
|
+
Spinner.displayName = 'Spinner'
|
|
113
115
|
|
|
114
116
|
Spinner.propTypes = propTypes
|
|
115
117
|
|
package/src/Box/Box.jsx
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
|
-
import React from 'react'
|
|
1
|
+
import React, { forwardRef } 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
|
+
getA11yPropsFromHtmlTag,
|
|
13
|
+
layoutTags
|
|
14
|
+
} from '../utils'
|
|
6
15
|
/**
|
|
7
16
|
* @typedef {import('../utils/propTypes.js').SpacingValue} SpacingValue
|
|
8
17
|
* @typedef {import('../utils/propTypes.js').SpacingIndex} SpacingIndex
|
|
@@ -87,63 +96,146 @@ const selectBoxStyles = (tokens) => {
|
|
|
87
96
|
* text content is inside a scrollable box, as screens are not scrollable by default and even very
|
|
88
97
|
* short text will require scrolling on small devices at the highest accessibility text scaling settings.
|
|
89
98
|
*/
|
|
90
|
-
const Box = (
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
99
|
+
const Box = forwardRef(
|
|
100
|
+
(
|
|
101
|
+
{
|
|
102
|
+
space,
|
|
103
|
+
horizontal = space,
|
|
104
|
+
vertical = space,
|
|
105
|
+
top = vertical,
|
|
106
|
+
bottom = vertical,
|
|
107
|
+
left = horizontal,
|
|
108
|
+
right = horizontal,
|
|
109
|
+
flex,
|
|
110
|
+
children,
|
|
111
|
+
variant,
|
|
112
|
+
tokens,
|
|
113
|
+
scroll,
|
|
114
|
+
tag,
|
|
115
|
+
accessibilityRole,
|
|
116
|
+
testID,
|
|
117
|
+
dataSet,
|
|
118
|
+
...rest
|
|
119
|
+
},
|
|
120
|
+
ref
|
|
121
|
+
) => {
|
|
122
|
+
const props = {
|
|
123
|
+
...getA11yPropsFromHtmlTag(tag, accessibilityRole),
|
|
124
|
+
...a11yProps.select(rest),
|
|
125
|
+
...viewProps.select(rest)
|
|
126
|
+
}
|
|
106
127
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
128
|
+
const themeTokens = useThemeTokens('Box', tokens, variant)
|
|
129
|
+
const styles = {
|
|
130
|
+
flex,
|
|
131
|
+
paddingLeft: useSpacingScale(left),
|
|
132
|
+
paddingRight: useSpacingScale(right),
|
|
133
|
+
paddingTop: useSpacingScale(top),
|
|
134
|
+
paddingBottom: useSpacingScale(bottom),
|
|
135
|
+
...selectBoxStyles(themeTokens)
|
|
136
|
+
}
|
|
115
137
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
138
|
+
if (scroll) {
|
|
139
|
+
const scrollProps = typeof scroll === 'object' ? scroll : {}
|
|
140
|
+
scrollProps.contentContainerStyle = [styles, scrollProps.contentContainerStyle]
|
|
141
|
+
return (
|
|
142
|
+
<ScrollView {...scrollProps} {...props} testID={testID} dataSet={dataSet} ref={ref}>
|
|
143
|
+
{children}
|
|
144
|
+
</ScrollView>
|
|
145
|
+
)
|
|
146
|
+
}
|
|
119
147
|
return (
|
|
120
|
-
<
|
|
148
|
+
<View {...props} style={styles} testID={testID} dataSet={dataSet} ref={ref}>
|
|
121
149
|
{children}
|
|
122
|
-
</
|
|
150
|
+
</View>
|
|
123
151
|
)
|
|
124
152
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
{children}
|
|
128
|
-
</View>
|
|
129
|
-
)
|
|
130
|
-
}
|
|
153
|
+
)
|
|
154
|
+
Box.displayName = 'Box'
|
|
131
155
|
|
|
132
156
|
Box.propTypes = {
|
|
157
|
+
...a11yProps.propTypes,
|
|
158
|
+
variant: variantProp.propType,
|
|
159
|
+
tokens: getTokensPropType('Box'),
|
|
160
|
+
/**
|
|
161
|
+
* Sets default padding on all sides of the box using the theme's spacing scale.
|
|
162
|
+
*
|
|
163
|
+
* @see {@link SpacingValue}
|
|
164
|
+
*/
|
|
133
165
|
space: spacingProps.types.spacingValue,
|
|
166
|
+
/**
|
|
167
|
+
* Sets top and bottom padding using the theme's spacing scale.
|
|
168
|
+
*
|
|
169
|
+
* @see {@link SpacingValue}
|
|
170
|
+
*/
|
|
134
171
|
vertical: spacingProps.types.spacingValue,
|
|
172
|
+
/**
|
|
173
|
+
* Sets left and right padding using the theme's spacing scale.
|
|
174
|
+
*
|
|
175
|
+
* @see {@link SpacingValue}
|
|
176
|
+
*/
|
|
135
177
|
horizontal: spacingProps.types.spacingValue,
|
|
178
|
+
/**
|
|
179
|
+
* Sets bottom padding using the theme's spacing scale.
|
|
180
|
+
*
|
|
181
|
+
* @see {@link SpacingValue}
|
|
182
|
+
*/
|
|
136
183
|
bottom: spacingProps.types.spacingValue,
|
|
184
|
+
/**
|
|
185
|
+
* Sets left padding using the theme's spacing scale.
|
|
186
|
+
*
|
|
187
|
+
* @see {@link SpacingValue}
|
|
188
|
+
*/
|
|
137
189
|
left: spacingProps.types.spacingValue,
|
|
190
|
+
/**
|
|
191
|
+
* Sets right padding using the theme's spacing scale.
|
|
192
|
+
*
|
|
193
|
+
* @see {@link SpacingValue}
|
|
194
|
+
*/
|
|
138
195
|
right: spacingProps.types.spacingValue,
|
|
196
|
+
/**
|
|
197
|
+
* Sets top padding using the theme's spacing scale.
|
|
198
|
+
*
|
|
199
|
+
* @see {@link SpacingValue}
|
|
200
|
+
*/
|
|
139
201
|
top: spacingProps.types.spacingValue,
|
|
202
|
+
/**
|
|
203
|
+
* Sets the `flex` style, which controls `flexGrow`, `flexShrink` and `flexBasis` styles.
|
|
204
|
+
*
|
|
205
|
+
* Set as 1 for the box to stretch and grow to fit in the available space, or another number to share
|
|
206
|
+
* space disproportionately with siblings. See https://reactnative.dev/docs/flexbox#flex for details.
|
|
207
|
+
*
|
|
208
|
+
* With the default `0`, the box takes its minimum width from its content.
|
|
209
|
+
*/
|
|
210
|
+
flex: PropTypes.number,
|
|
211
|
+
/**
|
|
212
|
+
* Renders a scrollable ScrollView instead of an unscrollable View.
|
|
213
|
+
*
|
|
214
|
+
* May take an object of ScrollView props which are passed to the rendered ScrollView.
|
|
215
|
+
*/
|
|
140
216
|
scroll: PropTypes.oneOfType([
|
|
141
217
|
PropTypes.bool,
|
|
142
218
|
ScrollView.propTypes ? PropTypes.shape(ScrollView.propTypes) : PropTypes.object
|
|
143
219
|
]),
|
|
144
|
-
|
|
145
|
-
|
|
220
|
+
/**
|
|
221
|
+
* Optional semantic HTML tag, to apply to the container on web. Does not change styling.
|
|
222
|
+
*
|
|
223
|
+
* In native apps, if a header tag is provided ("h1", "h2" etc) and accessibilityRole prop
|
|
224
|
+
* is not defined, the accessibilityRole will default to "heading".
|
|
225
|
+
*/
|
|
226
|
+
tag: PropTypes.oneOf(layoutTags),
|
|
227
|
+
/**
|
|
228
|
+
* Use in tests if the box itself needs to be targetted and no other way of selecting the
|
|
229
|
+
* box is available (e.g. it cannot be targetted using an appropriate `accessibilityRole`).
|
|
230
|
+
*/
|
|
146
231
|
testID: PropTypes.string,
|
|
232
|
+
/**
|
|
233
|
+
* @ignore
|
|
234
|
+
*/
|
|
235
|
+
dataSet: PropTypes.object,
|
|
236
|
+
/**
|
|
237
|
+
* Box accepts any content as children.
|
|
238
|
+
*/
|
|
147
239
|
children: PropTypes.node.isRequired
|
|
148
240
|
}
|
|
149
241
|
|
package/src/Button/Button.jsx
CHANGED
|
@@ -1,15 +1,22 @@
|
|
|
1
|
-
import React from 'react'
|
|
1
|
+
import React, { forwardRef } 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 = forwardRef(({ accessibilityRole = 'button', tokens, variant, ...props }, ref) => {
|
|
9
|
+
const getTokens = useThemeTokensCallback('Button', tokens, variant)
|
|
10
|
+
return (
|
|
11
|
+
<ButtonBase {...props} tokens={getTokens} accessibilityRole={accessibilityRole} ref={ref} />
|
|
12
|
+
)
|
|
13
|
+
})
|
|
14
|
+
Button.displayName = 'Button'
|
|
9
15
|
|
|
10
16
|
Button.propTypes = {
|
|
11
17
|
...a11yProps.types,
|
|
12
|
-
...buttonPropTypes
|
|
18
|
+
...buttonPropTypes,
|
|
19
|
+
children: textAndA11yText
|
|
13
20
|
}
|
|
14
21
|
|
|
15
22
|
export default Button
|