@telus-uds/components-base 0.0.2-prerelease.7 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +9 -0
- package/.ultra.cache.json +1 -1
- package/CHANGELOG.md +71 -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 +438 -31
- package/__tests__/ActivityIndicator/ActivityIndicator.test.jsx +1 -1
- package/__tests__/Button/ButtonGroup.test.jsx +6 -7
- package/__tests__/Checkbox/Checkbox.test.jsx +2 -2
- 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__/Link/LinkBase.test.jsx +0 -14
- 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 +2 -2
- 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 +3 -2
- package/__tests__/Skeleton/Skeleton.test.jsx +1 -1
- package/__tests__/StepTracker/StepTracker.test.jsx +94 -0
- package/__tests__/Tabs/Tabs.test.jsx +40 -0
- package/__tests__/Tags/Tags.test.jsx +5 -6
- package/__tests__/TextInput/TextArea.test.jsx +3 -2
- package/__tests__/TextInput/TextInputBase.test.jsx +10 -5
- 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 +6 -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 +153 -35
- package/lib/Box/index.js +13 -2
- package/lib/Button/Button.js +38 -16
- package/lib/Button/ButtonBase.js +93 -79
- package/lib/Button/ButtonGroup.js +112 -73
- package/lib/Button/ButtonLink.js +45 -19
- 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 +86 -0
- package/lib/Card/PressableCardBase.js +141 -0
- package/lib/Card/index.js +40 -2
- package/lib/Checkbox/Checkbox.js +158 -111
- package/lib/Checkbox/CheckboxGroup.js +241 -0
- package/lib/Checkbox/CheckboxInput.js +74 -0
- package/lib/Checkbox/CheckboxInput.native.js +9 -1
- package/lib/Checkbox/index.js +21 -2
- 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 +77 -43
- 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 +57 -48
- package/lib/Icon/IconText.js +54 -25
- package/lib/Icon/index.js +31 -4
- 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 +71 -52
- package/lib/InputSupports/index.js +13 -2
- package/lib/InputSupports/propTypes.js +19 -8
- package/lib/InputSupports/useInputSupports.js +41 -0
- package/lib/Link/ChevronLink.js +44 -20
- package/lib/Link/InlinePressable.js +56 -0
- package/lib/Link/InlinePressable.native.js +39 -15
- package/lib/Link/Link.js +36 -13
- package/lib/Link/LinkBase.js +98 -61
- package/lib/Link/TextButton.js +41 -17
- package/lib/Link/index.js +39 -5
- package/lib/List/List.js +55 -26
- package/lib/List/ListItem.js +79 -41
- package/lib/List/index.js +13 -2
- 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 +61 -28
- package/lib/Pagination/Pagination.js +78 -43
- package/lib/Pagination/SideButton.js +73 -42
- 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 +116 -114
- 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 +9 -1
- package/lib/Radio/index.js +21 -2
- 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 +16 -5
- package/lib/Select/Item.js +29 -0
- package/lib/Select/Item.native.js +14 -4
- package/lib/Select/Picker.js +84 -0
- package/lib/Select/Picker.native.js +73 -30
- package/lib/Select/Select.js +155 -85
- package/lib/Select/index.js +19 -6
- 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 +64 -46
- package/lib/Skeleton/index.js +13 -2
- 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 +72 -31
- package/lib/StackView/StackWrap.js +43 -13
- package/lib/StackView/StackWrap.native.js +13 -2
- package/lib/StackView/StackWrapBox.js +77 -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 +148 -99
- package/lib/Tags/index.js +13 -2
- package/lib/TextInput/TextArea.js +57 -28
- package/lib/TextInput/TextInput.js +50 -23
- package/lib/TextInput/TextInputBase.js +90 -63
- package/lib/TextInput/index.js +23 -3
- package/lib/TextInput/propTypes.js +18 -7
- 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 +32 -16
- 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 +85 -56
- 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 +87 -41
- 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 -33
- package/lib/utils/a11y/index.js +31 -1
- package/lib/utils/a11y/semantics.js +173 -0
- package/lib/utils/a11y/textSize.js +23 -7
- 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 -10
- package/lib/utils/info/index.js +18 -6
- package/lib/utils/info/platform/index.js +19 -7
- package/lib/utils/info/platform/platform.android.js +8 -1
- package/lib/utils/info/platform/platform.ios.js +8 -1
- package/lib/utils/info/platform/platform.js +8 -0
- package/lib/utils/info/platform/platform.native.js +8 -1
- package/lib/utils/info/versions.js +15 -4
- package/lib/utils/input.js +53 -25
- package/lib/utils/pressability.js +38 -10
- package/lib/utils/propTypes.js +287 -141
- 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 +14 -9
- 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 +132 -39
- package/src/Button/Button.jsx +10 -6
- package/src/Button/ButtonBase.jsx +99 -99
- package/src/Button/ButtonGroup.jsx +81 -69
- package/src/Button/ButtonLink.jsx +21 -15
- package/src/Button/propTypes.js +12 -2
- package/src/Card/Card.jsx +5 -31
- package/src/Card/CardBase.jsx +59 -0
- package/src/Card/PressableCardBase.jsx +119 -0
- package/src/Card/index.js +3 -0
- package/src/Checkbox/Checkbox.jsx +121 -112
- package/src/Checkbox/CheckboxGroup.jsx +206 -0
- package/src/Checkbox/{CheckboxInput.web.jsx → CheckboxInput.jsx} +0 -0
- package/src/Checkbox/index.js +2 -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 +36 -33
- 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 +43 -50
- package/src/Icon/IconText.jsx +23 -18
- package/src/Icon/index.js +2 -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 +29 -45
- package/src/InputSupports/useInputSupports.js +30 -0
- package/src/Link/ChevronLink.jsx +26 -16
- package/src/Link/{InlinePressable.web.jsx → InlinePressable.jsx} +5 -3
- package/src/Link/InlinePressable.native.jsx +5 -3
- package/src/Link/Link.jsx +22 -16
- package/src/Link/LinkBase.jsx +76 -65
- package/src/Link/TextButton.jsx +30 -23
- package/src/List/List.jsx +5 -4
- package/src/List/ListItem.jsx +77 -82
- 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 -35
- package/src/Pagination/Pagination.jsx +88 -92
- package/src/Pagination/SideButton.jsx +44 -41
- 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 +82 -112
- package/src/Radio/RadioButton.jsx +142 -0
- package/src/Radio/RadioGroup.jsx +209 -0
- package/src/Radio/{RadioInput.web.jsx → RadioInput.jsx} +0 -0
- package/src/Radio/index.js +2 -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.web.jsx → Group.jsx} +0 -0
- package/src/Select/{Item.web.jsx → Item.jsx} +0 -0
- package/src/Select/Picker.jsx +74 -0
- package/src/Select/Picker.native.jsx +56 -49
- package/src/Select/Select.jsx +125 -92
- 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 +25 -32
- 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 +54 -23
- package/src/StackView/StackWrap.jsx +16 -7
- package/src/StackView/StackWrapBox.jsx +63 -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 +115 -102
- package/src/TextInput/TextArea.jsx +5 -4
- package/src/TextInput/TextInput.jsx +5 -4
- package/src/TextInput/TextInputBase.jsx +95 -98
- package/src/ThemeProvider/ThemeProvider.jsx +11 -7
- package/src/ThemeProvider/useSetTheme.js +4 -0
- package/src/ThemeProvider/useThemeTokens.js +2 -2
- package/src/ThemeProvider/utils/styles.js +18 -5
- package/src/ThemeProvider/utils/theme-tokens.js +74 -5
- package/src/ToggleSwitch/ToggleSwitch.jsx +50 -52
- 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 +71 -47
- package/src/index.js +23 -2
- package/src/utils/a11y/index.js +1 -0
- package/src/utils/a11y/semantics.js +162 -0
- package/src/utils/children.jsx +119 -0
- package/src/utils/index.js +3 -0
- package/src/utils/info/platform/platform.js +1 -0
- package/src/utils/info/versions.js +2 -2
- package/src/utils/input.js +36 -25
- package/src/utils/pressability.js +4 -0
- package/src/utils/propTypes.js +199 -72
- 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 +2 -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 +24 -1
- package/stories/Divider/Divider.stories.jsx +1 -1
- package/stories/ExpandCollapse/ExpandCollapse.stories.jsx +2 -2
- package/stories/Feedback/Feedback.stories.jsx +1 -1
- 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 +17 -21
- package/stories/Link/TextButton.stories.jsx +1 -1
- package/stories/List/List.stories.jsx +1 -1
- 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 +23 -36
- package/stories/RadioCard/RadioCard.stories.jsx +98 -0
- package/stories/Search/Search.stories.jsx +16 -0
- package/stories/Select/Select.stories.jsx +1 -1
- 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 +2 -2
- 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 +1 -1
- package/stories/TextInput/TextArea.stories.jsx +1 -1
- 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 +37 -3
- 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/Checkbox/CheckboxInput.web.js +0 -57
- package/lib/InputLabel/LabelContent.web.js +0 -17
- package/lib/Link/InlinePressable.web.js +0 -32
- package/lib/Radio/RadioInput.web.js +0 -59
- package/lib/Select/Group.web.js +0 -18
- package/lib/Select/Item.web.js +0 -15
- package/lib/Select/Picker.web.js +0 -63
- package/lib/config/svgr-icons-web.js +0 -9
- package/lib/config/svgr-icons.js +0 -52
- package/lib/utils/info/platform/platform.web.js +0 -1
- package/src/InputLabel/LabelContent.web.jsx +0 -13
- package/src/Select/Picker.web.jsx +0 -67
- package/src/config/svgr-icons-web.js +0 -11
- package/src/config/svgr-icons.js +0 -46
- package/src/utils/info/platform/platform.web.js +0 -1
|
@@ -14,18 +14,29 @@ describe('useCopy hook', () => {
|
|
|
14
14
|
it('returns a correct english translation', () => {
|
|
15
15
|
const { result } = renderHook(() => useCopy({ dictionary, copy: 'en' }))
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
const getCopy = result.current
|
|
18
|
+
expect(getCopy('translation key')).toBe('english version')
|
|
18
19
|
})
|
|
19
20
|
|
|
20
21
|
it('returns a correct french translation', () => {
|
|
21
22
|
const { result } = renderHook(() => useCopy({ dictionary, copy: 'fr' }))
|
|
22
23
|
|
|
23
|
-
|
|
24
|
+
const getCopy = result.current
|
|
25
|
+
expect(getCopy('translation key')).toBe('french version')
|
|
24
26
|
})
|
|
25
27
|
|
|
26
28
|
it('returns undefined when no translation is found', () => {
|
|
27
29
|
const { result } = renderHook(() => useCopy({ dictionary, copy: 'en' }))
|
|
28
30
|
|
|
29
|
-
|
|
31
|
+
const getCopy = result.current
|
|
32
|
+
expect(getCopy('non-existing key')).toBe(undefined)
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
it('allows for overriding the entire dictionary with a copy object (ignoring the dictionary argument)', () => {
|
|
36
|
+
const { result } = renderHook(() => useCopy({ dictionary, copy: dictionary.en }))
|
|
37
|
+
|
|
38
|
+
const getCopy = result.current
|
|
39
|
+
expect(getCopy('non-existing key')).toBe(undefined)
|
|
40
|
+
expect(getCopy('translation key')).toBe('english version')
|
|
30
41
|
})
|
|
31
42
|
})
|
package/babel.config.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
env: {
|
|
3
|
+
/*
|
|
4
|
+
* we actually want this setup to be used whenever we're not in `test` but
|
|
5
|
+
* babel merges plugins array rather than replacing so we can't set it as a
|
|
6
|
+
* default. However the default BABEL_ENV value is development (jest sets it
|
|
7
|
+
* to test)
|
|
8
|
+
*/
|
|
9
|
+
development: {
|
|
10
|
+
presets: ['@babel/preset-env', ['@babel/preset-react', { runtime: 'automatic' }]],
|
|
11
|
+
plugins: [['react-native-web', { commonjs: true }]]
|
|
12
|
+
},
|
|
13
|
+
/*
|
|
14
|
+
* jest is testing for just ios at the moment, use a preset which best matches that env
|
|
15
|
+
*/
|
|
16
|
+
test: {
|
|
17
|
+
presets: ['module:metro-react-native-babel-preset']
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
package/jest.config.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
const preset = require('react-native/jest-preset')
|
|
2
|
-
const
|
|
2
|
+
const name = require('./package.json').name.split('@telus-uds/').pop()
|
|
3
3
|
|
|
4
4
|
// cherry-pick the bits of the preset we want to avoid it overriding the fix we have on L14
|
|
5
5
|
module.exports = {
|
|
6
6
|
haste: preset.haste,
|
|
7
|
-
displayName
|
|
7
|
+
displayName: {
|
|
8
|
+
name,
|
|
9
|
+
color: 'blue'
|
|
10
|
+
},
|
|
8
11
|
setupFiles: preset.setupFiles,
|
|
9
12
|
transform: {
|
|
10
13
|
// Use babel-jest instead of react-native/jest/preprocessor.js so that the coverage report is correct as per:
|
|
@@ -22,7 +25,7 @@ module.exports = {
|
|
|
22
25
|
'.+\\.(otf|svg|png|jpg)$': 'identity-obj-proxy'
|
|
23
26
|
},
|
|
24
27
|
transformIgnorePatterns: [
|
|
25
|
-
'node_modules/(?!(jest-)?react-native|@react-native-community|@react-native-picker)'
|
|
28
|
+
'node_modules/(?!(jest-)?react-native|@react-native|@react-native-community|@react-native-picker)'
|
|
26
29
|
],
|
|
27
30
|
// Count everything in src when calculating coverage
|
|
28
31
|
collectCoverageFrom: ['src/**/*.{js,jsx}']
|
|
@@ -1,58 +1,86 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useA11yInfo = exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
|
|
10
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
|
+
|
|
12
|
+
var _AccessibilityInfo = _interopRequireDefault(require("react-native-web/dist/cjs/exports/AccessibilityInfo"));
|
|
13
|
+
|
|
14
|
+
var _Platform = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Platform"));
|
|
15
|
+
|
|
16
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
17
|
+
|
|
18
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
|
+
|
|
20
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
21
|
+
|
|
22
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
23
|
+
|
|
24
|
+
const ScreenReaderContext = /*#__PURE__*/(0, _react.createContext)(false);
|
|
25
|
+
const ReducedMotionContext = /*#__PURE__*/(0, _react.createContext)(false);
|
|
6
26
|
|
|
7
27
|
const A11yInfoProvider = ({
|
|
8
28
|
children
|
|
9
29
|
}) => {
|
|
10
|
-
const [reduceMotionEnabled, setReduceMotionEnabled] = useState(false);
|
|
11
|
-
const [screenReaderEnabled, setScreenReaderEnabled] = useState(false);
|
|
12
|
-
useEffect(() => {
|
|
30
|
+
const [reduceMotionEnabled, setReduceMotionEnabled] = (0, _react.useState)(false);
|
|
31
|
+
const [screenReaderEnabled, setScreenReaderEnabled] = (0, _react.useState)(false);
|
|
32
|
+
(0, _react.useEffect)(() => {
|
|
13
33
|
if (process.env.NODE_ENV === 'test') {
|
|
14
34
|
// On Jest these effects do nothing but can cause `act` state change warnings
|
|
15
35
|
// and "...after the Jest environment has been torn down" errors, so skip them.
|
|
16
36
|
return () => {};
|
|
17
37
|
}
|
|
18
38
|
|
|
19
|
-
|
|
20
|
-
|
|
39
|
+
_AccessibilityInfo.default.addEventListener('reduceMotionChanged', setReduceMotionEnabled);
|
|
40
|
+
|
|
41
|
+
_AccessibilityInfo.default.addEventListener('screenReaderChanged', setScreenReaderEnabled);
|
|
21
42
|
|
|
22
43
|
const setInitialA11yInfo = async () => {
|
|
23
|
-
const [initialReduceMotionEnabled, initialScreenReaderEnabled] = await Promise.all([
|
|
44
|
+
const [initialReduceMotionEnabled, initialScreenReaderEnabled] = await Promise.all([_AccessibilityInfo.default.isReduceMotionEnabled(), _AccessibilityInfo.default.isScreenReaderEnabled()]); // Browsers can't detect screen readers; in RNW isScreenReaderEnabled() is always `true`
|
|
24
45
|
// https://github.com/necolas/react-native-web/blob/master/packages/react-native-web/src/exports/AccessibilityInfo/index.js#L14
|
|
25
46
|
|
|
26
|
-
setScreenReaderEnabled(
|
|
47
|
+
setScreenReaderEnabled(_Platform.default.OS !== 'web' && !!initialScreenReaderEnabled); // RNW does support isReduceMotionEnabled looking for 'prefers-reduced-motion' state
|
|
27
48
|
|
|
28
49
|
setReduceMotionEnabled(!!initialReduceMotionEnabled);
|
|
29
50
|
};
|
|
30
51
|
|
|
31
|
-
if (
|
|
52
|
+
if (_AccessibilityInfo.default.isReduceMotionEnabled && _AccessibilityInfo.default.isScreenReaderEnabled) {
|
|
32
53
|
setInitialA11yInfo();
|
|
33
54
|
}
|
|
34
55
|
|
|
35
56
|
return () => {
|
|
36
|
-
|
|
37
|
-
|
|
57
|
+
_AccessibilityInfo.default.removeEventListener('reduceMotionChanged', setReduceMotionEnabled);
|
|
58
|
+
|
|
59
|
+
_AccessibilityInfo.default.removeEventListener('screenReaderChanged', setScreenReaderEnabled);
|
|
38
60
|
};
|
|
39
61
|
}, []);
|
|
40
|
-
return /*#__PURE__*/
|
|
41
|
-
value: reduceMotionEnabled
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
62
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(ReducedMotionContext.Provider, {
|
|
63
|
+
value: reduceMotionEnabled,
|
|
64
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ScreenReaderContext.Provider, {
|
|
65
|
+
value: screenReaderEnabled,
|
|
66
|
+
children: children
|
|
67
|
+
})
|
|
68
|
+
});
|
|
45
69
|
};
|
|
46
70
|
|
|
47
71
|
A11yInfoProvider.propTypes = {
|
|
48
|
-
children:
|
|
72
|
+
children: _propTypes.default.node.isRequired
|
|
49
73
|
};
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
74
|
+
var _default = A11yInfoProvider;
|
|
75
|
+
exports.default = _default;
|
|
76
|
+
|
|
77
|
+
const useA11yInfo = () => {
|
|
78
|
+
const screenReaderEnabled = (0, _react.useContext)(ScreenReaderContext);
|
|
79
|
+
const reduceMotionEnabled = (0, _react.useContext)(ReducedMotionContext);
|
|
54
80
|
return {
|
|
55
81
|
reduceMotionEnabled,
|
|
56
82
|
screenReaderEnabled
|
|
57
83
|
};
|
|
58
|
-
};
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
exports.useA11yInfo = useA11yInfo;
|
package/lib/A11yText/index.js
CHANGED
|
@@ -1,39 +1,65 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
|
|
10
|
+
var _Platform = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Platform"));
|
|
11
|
+
|
|
12
|
+
var _StyleSheet = _interopRequireDefault(require("react-native-web/dist/cjs/exports/StyleSheet"));
|
|
13
|
+
|
|
14
|
+
var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/View"));
|
|
15
|
+
|
|
16
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
17
|
+
|
|
18
|
+
var _propTypes2 = require("../utils/propTypes");
|
|
19
|
+
|
|
20
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
21
|
+
|
|
22
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
|
+
|
|
24
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
25
|
+
|
|
26
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
27
|
+
|
|
5
28
|
/**
|
|
6
29
|
* A11yText is a zero-size invisible element that adds text to be read by screen readers.
|
|
7
30
|
*
|
|
8
31
|
* It should be used to add selectable screen-reader-only text to the main document flow,
|
|
9
32
|
* as a sibling to blocks of text like paragraphs and interactive elements like buttons.
|
|
10
33
|
*/
|
|
11
|
-
|
|
12
|
-
const A11yText = ({
|
|
34
|
+
const A11yText = /*#__PURE__*/(0, _react.forwardRef)(({
|
|
13
35
|
text,
|
|
14
36
|
heading,
|
|
15
37
|
...rest
|
|
16
|
-
}) => {
|
|
17
|
-
const a11y = a11yProps.select({
|
|
38
|
+
}, ref) => {
|
|
39
|
+
const a11y = _propTypes2.a11yProps.select({
|
|
18
40
|
// On iOS, needs `accessible` to be true to be focusable without non-a11y content.
|
|
19
41
|
// On Web, `accessible` causes RNW to set attributes that may make the element be treated as a group.
|
|
20
42
|
// On Android, may cause this to be skipped when with `<Text>` siblings in an `accessible` View,
|
|
21
43
|
// see https://github.com/facebook/react-native/issues/30851#issuecomment-790165489
|
|
22
|
-
accessible:
|
|
44
|
+
accessible: _Platform.default.OS === 'ios',
|
|
23
45
|
accessibilityLabel: text,
|
|
24
46
|
accessibilityRole: heading ? 'header' : 'text',
|
|
25
47
|
...rest
|
|
26
48
|
});
|
|
27
|
-
return /*#__PURE__*/React.createElement(View, Object.assign({
|
|
28
|
-
style: styles.invisible
|
|
29
|
-
}, a11y));
|
|
30
|
-
};
|
|
31
49
|
|
|
50
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
|
|
51
|
+
style: styles.invisible,
|
|
52
|
+
ref: ref,
|
|
53
|
+
...a11y
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
A11yText.displayName = 'A11yText';
|
|
32
57
|
A11yText.propTypes = {
|
|
33
|
-
text:
|
|
34
|
-
heading:
|
|
58
|
+
text: _propTypes.default.string.isRequired,
|
|
59
|
+
heading: _propTypes.default.bool
|
|
35
60
|
};
|
|
36
|
-
|
|
61
|
+
|
|
62
|
+
const styles = _StyleSheet.default.create({
|
|
37
63
|
invisible: {
|
|
38
64
|
// Without width or height it is not shown
|
|
39
65
|
minHeight: 1,
|
|
@@ -46,4 +72,6 @@ const styles = StyleSheet.create({
|
|
|
46
72
|
top: -1
|
|
47
73
|
}
|
|
48
74
|
});
|
|
49
|
-
|
|
75
|
+
|
|
76
|
+
var _default = A11yText;
|
|
77
|
+
exports.default = _default;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
|
|
10
|
+
var _shared = require("./shared");
|
|
11
|
+
|
|
12
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
13
|
+
|
|
14
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
15
|
+
|
|
16
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
17
|
+
|
|
18
|
+
const SVG_RADIUS = 20;
|
|
19
|
+
const SVG_CIRCUMFERENCE = SVG_RADIUS * 2 * Math.PI;
|
|
20
|
+
const MIN_SVG_LENGTH = _shared.MIN_STROKE_ANGLE / 360 * SVG_CIRCUMFERENCE;
|
|
21
|
+
const MAX_SVG_LENGTH = (1 - _shared.MIN_EMPTY_ANGLE / 360) * SVG_CIRCUMFERENCE;
|
|
22
|
+
const animationProps = {
|
|
23
|
+
begin: '0s',
|
|
24
|
+
dur: `${_shared.DURATION}ms`,
|
|
25
|
+
fill: 'freeze',
|
|
26
|
+
repeatCount: 'indefinite'
|
|
27
|
+
};
|
|
28
|
+
const bezierProps = {
|
|
29
|
+
calcMode: 'spline',
|
|
30
|
+
keyTimes: '0; 0.5; 1',
|
|
31
|
+
keySplines: `${_shared.BEZIER.join(', ')} ; ${_shared.BEZIER.join(', ')}`
|
|
32
|
+
}; // We're using svg rather than css here to define the animation to avoid needing to introduce css injection mechanism
|
|
33
|
+
// 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.
|
|
34
|
+
|
|
35
|
+
const Spinner = /*#__PURE__*/(0, _react.forwardRef)(({
|
|
36
|
+
size,
|
|
37
|
+
color,
|
|
38
|
+
thickness,
|
|
39
|
+
label
|
|
40
|
+
}, ref) => /*#__PURE__*/(0, _jsxRuntime.jsx)("svg", {
|
|
41
|
+
ref: ref,
|
|
42
|
+
width: `${size}px`,
|
|
43
|
+
height: `${size}px`,
|
|
44
|
+
viewBox: "0 0 48 48",
|
|
45
|
+
"aria-valuetext": label,
|
|
46
|
+
role: "progressbar",
|
|
47
|
+
"aria-busy": true,
|
|
48
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("g", {
|
|
49
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("animateTransform", {
|
|
50
|
+
attributeName: "transform",
|
|
51
|
+
type: "rotate",
|
|
52
|
+
values: `-180 24 24;${360 + _shared.MIN_STROKE_ANGLE - 180} 24 24`,
|
|
53
|
+
...animationProps
|
|
54
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("circle", {
|
|
55
|
+
fill: "none",
|
|
56
|
+
stroke: color,
|
|
57
|
+
strokeWidth: thickness * 48 / size,
|
|
58
|
+
strokeLinecap: "round",
|
|
59
|
+
cx: "24",
|
|
60
|
+
cy: "24",
|
|
61
|
+
r: "20",
|
|
62
|
+
strokeDasharray: [MIN_SVG_LENGTH, SVG_CIRCUMFERENCE],
|
|
63
|
+
strokeDashoffset: 0,
|
|
64
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("animate", {
|
|
65
|
+
attributeName: "stroke-dashoffset",
|
|
66
|
+
values: `0;-10;${MIN_SVG_LENGTH - SVG_CIRCUMFERENCE}`,
|
|
67
|
+
...animationProps,
|
|
68
|
+
...bezierProps
|
|
69
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("animate", {
|
|
70
|
+
attributeName: "stroke-dasharray",
|
|
71
|
+
values: `${MIN_SVG_LENGTH}, 200;${MAX_SVG_LENGTH}, 200;${MIN_SVG_LENGTH}, 200`,
|
|
72
|
+
...animationProps,
|
|
73
|
+
...bezierProps
|
|
74
|
+
})]
|
|
75
|
+
})]
|
|
76
|
+
})
|
|
77
|
+
}));
|
|
78
|
+
Spinner.displayName = 'Spinner';
|
|
79
|
+
Spinner.propTypes = _shared.propTypes;
|
|
80
|
+
var _default = Spinner;
|
|
81
|
+
exports.default = _default;
|
|
@@ -1,124 +1,162 @@
|
|
|
1
|
-
|
|
2
|
-
import { Animated, Easing, StyleSheet, View } from 'react-native';
|
|
3
|
-
import { DURATION, MIN_EMPTY_ANGLE, MIN_STROKE_ANGLE, BEZIER, propTypes } from './shared';
|
|
4
|
-
const ea = MIN_EMPTY_ANGLE / 2;
|
|
5
|
-
const sa = MIN_STROKE_ANGLE / 2;
|
|
1
|
+
"use strict";
|
|
6
2
|
|
|
7
|
-
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
|
|
10
|
+
var _Animated = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Animated"));
|
|
11
|
+
|
|
12
|
+
var _Easing = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Easing"));
|
|
13
|
+
|
|
14
|
+
var _StyleSheet = _interopRequireDefault(require("react-native-web/dist/cjs/exports/StyleSheet"));
|
|
15
|
+
|
|
16
|
+
var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/View"));
|
|
17
|
+
|
|
18
|
+
var _shared = require("./shared");
|
|
19
|
+
|
|
20
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
21
|
+
|
|
22
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
|
+
|
|
24
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
25
|
+
|
|
26
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
27
|
+
|
|
28
|
+
const ea = _shared.MIN_EMPTY_ANGLE / 2;
|
|
29
|
+
const sa = _shared.MIN_STROKE_ANGLE / 2;
|
|
30
|
+
const Spinner = /*#__PURE__*/(0, _react.forwardRef)(({
|
|
8
31
|
size,
|
|
9
32
|
color,
|
|
10
33
|
thickness,
|
|
11
34
|
label
|
|
12
|
-
}) => {
|
|
35
|
+
}, ref) => {
|
|
13
36
|
const {
|
|
14
37
|
current: timer
|
|
15
|
-
} =
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
38
|
+
} = _react.default.useRef(new _Animated.default.Value(0));
|
|
39
|
+
|
|
40
|
+
_react.default.useLayoutEffect(() => {
|
|
41
|
+
const loop = _Animated.default.timing(timer, {
|
|
42
|
+
duration: _shared.DURATION,
|
|
43
|
+
easing: _Easing.default.linear,
|
|
20
44
|
// Animated.loop does not work if useNativeDriver is true on web
|
|
21
45
|
useNativeDriver: true,
|
|
22
46
|
toValue: 1,
|
|
23
47
|
isInteraction: false
|
|
24
48
|
});
|
|
25
|
-
|
|
49
|
+
|
|
50
|
+
_Animated.default.loop(loop).start();
|
|
26
51
|
}, [timer]);
|
|
27
|
-
|
|
28
|
-
const
|
|
52
|
+
|
|
53
|
+
const frames = 60 * _shared.DURATION / 1000;
|
|
54
|
+
|
|
55
|
+
const easing = _Easing.default.bezier(..._shared.BEZIER);
|
|
56
|
+
|
|
29
57
|
const containerStyle = {
|
|
30
58
|
width: size,
|
|
31
59
|
height: size / 2,
|
|
32
60
|
overflow: 'hidden'
|
|
33
61
|
}; // Credit to https://github.com/n4kz/react-native-indicators and https://github.com/callstack/react-native-paper for this
|
|
34
62
|
|
|
35
|
-
return /*#__PURE__*/
|
|
63
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
|
|
64
|
+
ref: ref,
|
|
36
65
|
style: [styles.container],
|
|
37
66
|
accessible: true,
|
|
38
67
|
accessibilityLabel: label,
|
|
39
68
|
accessibilityRole: "progressbar",
|
|
40
69
|
accessibilityState: {
|
|
41
70
|
busy: true
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
71
|
+
},
|
|
72
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Animated.default.View, {
|
|
73
|
+
style: [{
|
|
74
|
+
width: size,
|
|
75
|
+
height: size
|
|
76
|
+
}],
|
|
77
|
+
collapsable: false,
|
|
78
|
+
children: [0, 1].map(index => {
|
|
79
|
+
const inputRange = Array.from(new Array(frames), (_, frameIndex) => frameIndex / (frames - 1));
|
|
80
|
+
const outputRange = Array.from(new Array(frames), (_, frameIndex) => {
|
|
81
|
+
let progress = 2 * frameIndex / (frames - 1);
|
|
82
|
+
const rotation = index ? +(360 - sa) : -(180 - sa);
|
|
83
|
+
|
|
84
|
+
if (progress > 1.0) {
|
|
85
|
+
progress = 2.0 - progress;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const direction = index ? -1 : +1;
|
|
89
|
+
return `${direction * (180 - (sa + ea)) * easing(progress) + rotation}deg`;
|
|
90
|
+
});
|
|
91
|
+
const layerStyle = {
|
|
92
|
+
width: size,
|
|
93
|
+
height: size,
|
|
94
|
+
transform: [{
|
|
95
|
+
rotate: timer.interpolate({
|
|
96
|
+
inputRange: [0, 1],
|
|
97
|
+
outputRange: [`${0 + ea + sa}deg`, `${2 * 360 + ea + sa}deg`]
|
|
98
|
+
})
|
|
99
|
+
}]
|
|
100
|
+
};
|
|
101
|
+
const viewportStyle = {
|
|
102
|
+
width: size,
|
|
103
|
+
height: size,
|
|
104
|
+
transform: [{
|
|
105
|
+
translateY: index ? -size / 2 : 0
|
|
106
|
+
}, {
|
|
107
|
+
rotate: timer.interpolate({
|
|
108
|
+
inputRange,
|
|
109
|
+
outputRange
|
|
110
|
+
})
|
|
111
|
+
}]
|
|
112
|
+
};
|
|
113
|
+
const offsetStyle = index ? {
|
|
114
|
+
top: size / 2
|
|
115
|
+
} : null;
|
|
116
|
+
const lineStyle = {
|
|
117
|
+
width: size,
|
|
118
|
+
height: size,
|
|
119
|
+
borderColor: color,
|
|
120
|
+
borderWidth: thickness,
|
|
121
|
+
borderRadius: size / 2
|
|
122
|
+
};
|
|
123
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Animated.default.View, {
|
|
124
|
+
style: [styles.layer],
|
|
125
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Animated.default.View, {
|
|
126
|
+
style: layerStyle,
|
|
127
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Animated.default.View, {
|
|
128
|
+
style: [containerStyle, offsetStyle],
|
|
129
|
+
collapsable: false,
|
|
130
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Animated.default.View, {
|
|
131
|
+
style: viewportStyle,
|
|
132
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Animated.default.View, {
|
|
133
|
+
style: containerStyle,
|
|
134
|
+
collapsable: false,
|
|
135
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Animated.default.View, {
|
|
136
|
+
style: lineStyle
|
|
137
|
+
})
|
|
138
|
+
})
|
|
139
|
+
})
|
|
140
|
+
})
|
|
141
|
+
})
|
|
142
|
+
}, index);
|
|
143
|
+
})
|
|
144
|
+
})
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
Spinner.displayName = 'Spinner';
|
|
148
|
+
Spinner.propTypes = _shared.propTypes;
|
|
149
|
+
|
|
150
|
+
const styles = _StyleSheet.default.create({
|
|
115
151
|
container: {
|
|
116
152
|
flexGrow: 0,
|
|
117
153
|
flexShrink: 0
|
|
118
154
|
},
|
|
119
|
-
layer: { ...
|
|
155
|
+
layer: { ..._StyleSheet.default.absoluteFillObject,
|
|
120
156
|
justifyContent: 'center',
|
|
121
157
|
alignItems: 'center'
|
|
122
158
|
}
|
|
123
159
|
});
|
|
124
|
-
|
|
160
|
+
|
|
161
|
+
var _default = Spinner;
|
|
162
|
+
exports.default = _default;
|