@telus-uds/components-base 0.0.2-prerelease.4 → 0.0.2-prerelease.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.ultra.cache.json +1 -0
- package/CHANGELOG.md +76 -0
- package/__fixtures__/Accessible.js +33 -0
- package/__fixtures__/Accessible.native.js +32 -0
- package/__fixtures__/testTheme.js +940 -54
- package/__tests__/ActivityIndicator/ActivityIndicator.test.jsx +1 -1
- package/__tests__/Button/ButtonBase.test.jsx +3 -32
- package/__tests__/Button/ButtonGroup.test.jsx +2 -2
- package/__tests__/Checkbox/Checkbox.test.jsx +94 -0
- package/__tests__/Checkbox/CheckboxGroup.test.jsx +247 -0
- package/__tests__/Divider/Divider.test.jsx +26 -5
- package/__tests__/Feedback/Feedback.test.jsx +42 -0
- package/__tests__/Icon/Icon.test.jsx +3 -3
- package/__tests__/InputSupports/InputSupports.test.jsx +50 -0
- package/__tests__/List/List.test.jsx +60 -0
- package/__tests__/Modal/Modal.test.jsx +47 -0
- package/__tests__/Notification/Notification.test.jsx +20 -0
- package/__tests__/Pagination/Pagination.test.jsx +2 -2
- package/__tests__/Progress/Progress.test.jsx +79 -0
- package/__tests__/Radio/Radio.test.jsx +87 -0
- package/__tests__/Radio/RadioGroup.test.jsx +221 -0
- package/__tests__/RadioCard/RadioCard.test.jsx +87 -0
- package/__tests__/RadioCard/RadioCardGroup.test.jsx +247 -0
- package/__tests__/Search/Search.test.jsx +72 -0
- package/__tests__/Select/Select.test.jsx +93 -0
- package/__tests__/Skeleton/Skeleton.test.jsx +61 -0
- package/__tests__/Spacer/Spacer.test.jsx +63 -0
- package/__tests__/StackView/StackView.test.jsx +216 -0
- package/__tests__/StackView/StackWrap.test.jsx +47 -0
- package/__tests__/StackView/getStackedContent.test.jsx +295 -0
- package/__tests__/StepTracker/StepTracker.test.jsx +94 -0
- package/__tests__/Tabs/Tabs.test.jsx +200 -0
- package/__tests__/Tags/Tags.test.jsx +328 -0
- package/__tests__/TextInput/TextArea.test.jsx +34 -0
- package/__tests__/TextInput/TextInputBase.test.jsx +120 -0
- package/__tests__/Tooltip/Tooltip.test.jsx +65 -0
- package/__tests__/Tooltip/getTooltipPosition.test.js +79 -0
- package/__tests__/utils/input.test.js +58 -0
- package/__tests__/utils/useCopy.test.js +42 -0
- package/__tests__/utils/useResponsiveProp.test.jsx +202 -0
- package/__tests__/utils/{spacing.test.jsx → useSpacingScale.test.jsx} +1 -1
- package/__tests__/utils/useUniqueId.test.js +31 -0
- package/babel.config.js +20 -0
- package/jest.config.js +8 -2
- package/lib/A11yInfoProvider/index.js +54 -26
- package/lib/A11yText/index.js +37 -14
- package/lib/ActivityIndicator/Spinner.js +78 -0
- package/lib/ActivityIndicator/Spinner.native.js +121 -87
- package/lib/ActivityIndicator/index.js +28 -12
- package/lib/ActivityIndicator/shared.js +27 -12
- package/lib/BaseProvider/index.js +34 -11
- package/lib/Box/Box.js +56 -28
- package/lib/Box/index.js +13 -2
- package/lib/Button/Button.js +38 -10
- package/lib/Button/ButtonBase.js +120 -109
- package/lib/Button/ButtonGroup.js +98 -99
- package/lib/Button/ButtonLink.js +41 -13
- package/lib/Button/index.js +31 -4
- package/lib/Button/propTypes.js +32 -9
- package/lib/Card/Card.js +36 -41
- package/lib/Card/CardBase.js +78 -0
- package/lib/Card/PressableCardBase.js +137 -0
- package/lib/Card/index.js +40 -2
- package/lib/Checkbox/Checkbox.js +344 -0
- package/lib/Checkbox/CheckboxGroup.js +231 -0
- package/lib/Checkbox/CheckboxInput.js +74 -0
- package/lib/Checkbox/CheckboxInput.native.js +14 -0
- package/lib/Checkbox/index.js +21 -0
- package/lib/Divider/Divider.js +81 -17
- package/lib/Divider/index.js +13 -2
- package/lib/ExpandCollapse/Accordion.js +20 -7
- package/lib/ExpandCollapse/Control.js +50 -27
- package/lib/ExpandCollapse/ExpandCollapse.js +41 -24
- package/lib/ExpandCollapse/Panel.js +75 -37
- package/lib/ExpandCollapse/index.js +25 -7
- package/lib/Feedback/Feedback.js +161 -0
- package/lib/Feedback/index.js +13 -0
- package/lib/Fieldset/Fieldset.js +160 -0
- package/lib/Fieldset/FieldsetContainer.js +41 -0
- package/lib/Fieldset/FieldsetContainer.native.js +33 -0
- package/lib/Fieldset/Legend.js +33 -0
- package/lib/Fieldset/Legend.native.js +43 -0
- package/lib/Fieldset/cssReset.js +21 -0
- package/lib/Fieldset/index.js +13 -0
- package/lib/FlexGrid/Col/Col.js +67 -38
- package/lib/FlexGrid/Col/index.js +13 -2
- package/lib/FlexGrid/FlexGrid.js +70 -45
- package/lib/FlexGrid/Row/Row.js +48 -27
- package/lib/FlexGrid/Row/index.js +13 -2
- package/lib/FlexGrid/helpers/index.js +9 -1
- package/lib/FlexGrid/index.js +13 -2
- package/lib/FlexGrid/providers/GutterContext.js +15 -3
- package/lib/Icon/Icon.js +52 -47
- package/lib/Icon/IconText.js +100 -0
- package/lib/Icon/index.js +31 -3
- package/lib/InputLabel/InputLabel.js +122 -0
- package/lib/InputLabel/LabelContent.js +31 -0
- package/lib/InputLabel/LabelContent.native.js +16 -0
- package/lib/InputLabel/index.js +13 -0
- package/lib/InputSupports/InputSupports.js +104 -0
- package/lib/InputSupports/index.js +13 -0
- package/lib/InputSupports/propTypes.js +66 -0
- package/lib/InputSupports/useInputSupports.js +41 -0
- package/lib/Link/ChevronLink.js +57 -15
- package/lib/Link/InlinePressable.js +50 -0
- package/lib/Link/InlinePressable.native.js +101 -0
- package/lib/Link/Link.js +30 -13
- package/lib/Link/LinkBase.js +121 -146
- package/lib/Link/TextButton.js +47 -17
- package/lib/Link/index.js +39 -4
- package/lib/List/List.js +80 -0
- package/lib/List/ListItem.js +237 -0
- package/lib/List/index.js +13 -0
- package/lib/Modal/Modal.js +226 -0
- package/lib/Modal/dictionary.js +16 -0
- package/lib/Modal/index.js +13 -0
- package/lib/Notification/Notification.js +200 -0
- package/lib/Notification/dictionary.js +15 -0
- package/lib/Notification/index.js +13 -0
- package/lib/Pagination/PageButton.js +45 -46
- package/lib/Pagination/Pagination.js +70 -40
- package/lib/Pagination/SideButton.js +74 -58
- package/lib/Pagination/dictionary.js +9 -2
- package/lib/Pagination/index.js +13 -2
- package/lib/Pagination/usePagination.js +12 -2
- package/lib/Progress/Progress.js +99 -0
- package/lib/Progress/ProgressBar.js +146 -0
- package/lib/Progress/ProgressBarBackground.js +57 -0
- package/lib/Progress/index.js +16 -0
- package/lib/Radio/Radio.js +292 -0
- package/lib/Radio/RadioButton.js +141 -0
- package/lib/Radio/RadioGroup.js +233 -0
- package/lib/Radio/RadioInput.js +76 -0
- package/lib/Radio/RadioInput.native.js +14 -0
- package/lib/Radio/index.js +21 -0
- package/lib/RadioCard/RadioCard.js +240 -0
- package/lib/RadioCard/RadioCardGroup.js +251 -0
- package/lib/RadioCard/index.js +21 -0
- package/lib/Search/Search.js +243 -0
- package/lib/Search/dictionary.js +19 -0
- package/lib/Search/index.js +13 -0
- package/lib/Select/Group.js +33 -0
- package/lib/Select/Group.native.js +25 -0
- package/lib/Select/Item.js +29 -0
- package/lib/Select/Item.native.js +19 -0
- package/lib/Select/Picker.js +79 -0
- package/lib/Select/Picker.native.js +115 -0
- package/lib/Select/Select.js +300 -0
- package/lib/Select/index.js +19 -0
- package/lib/SideNav/Item.js +54 -33
- package/lib/SideNav/ItemContent.js +41 -15
- package/lib/SideNav/ItemsGroup.js +46 -27
- package/lib/SideNav/SideNav.js +92 -69
- package/lib/SideNav/index.js +15 -1
- package/lib/Skeleton/Skeleton.js +137 -0
- package/lib/Skeleton/index.js +13 -0
- package/lib/Skeleton/skeleton.constant.js +12 -0
- package/lib/Skeleton/skeletonWebAnimation.js +27 -0
- package/lib/Skeleton/useSkeletonNativeAnimation.js +37 -0
- package/lib/Spacer/Spacer.js +117 -0
- package/lib/Spacer/index.js +13 -0
- package/lib/StackView/StackView.js +129 -0
- package/lib/StackView/StackWrap.js +55 -0
- package/lib/StackView/StackWrap.native.js +14 -0
- package/lib/StackView/StackWrapBox.js +112 -0
- package/lib/StackView/StackWrapGap.js +71 -0
- package/lib/StackView/common.js +45 -0
- package/lib/StackView/getStackedContent.js +141 -0
- package/lib/StackView/index.js +29 -0
- package/lib/StepTracker/Step.js +245 -0
- package/lib/StepTracker/StepTracker.js +197 -0
- package/lib/StepTracker/dictionary.js +17 -0
- package/lib/StepTracker/index.js +13 -0
- package/lib/Tabs/HorizontalScroll.js +199 -0
- package/lib/Tabs/ScrollViewEnd.js +66 -0
- package/lib/Tabs/ScrollViewEnd.native.js +41 -0
- package/lib/Tabs/Tabs.js +117 -0
- package/lib/Tabs/TabsItem.js +234 -0
- package/lib/Tabs/TabsScrollButton.js +121 -0
- package/lib/Tabs/dictionary.js +18 -0
- package/lib/Tabs/index.js +13 -0
- package/lib/Tabs/itemPositions.js +128 -0
- package/lib/Tags/Tags.js +250 -0
- package/lib/Tags/index.js +13 -0
- package/lib/TextInput/TextArea.js +109 -0
- package/lib/TextInput/TextInput.js +75 -0
- package/lib/TextInput/TextInputBase.js +252 -0
- package/lib/TextInput/index.js +23 -0
- package/lib/TextInput/propTypes.js +42 -0
- package/lib/ThemeProvider/ThemeProvider.js +38 -14
- package/lib/ThemeProvider/index.js +61 -6
- package/lib/ThemeProvider/useSetTheme.js +14 -5
- package/lib/ThemeProvider/useTheme.js +13 -4
- package/lib/ThemeProvider/useThemeTokens.js +86 -19
- package/lib/ThemeProvider/utils/index.js +31 -2
- package/lib/ThemeProvider/utils/styles.js +52 -16
- package/lib/ThemeProvider/utils/theme-tokens.js +94 -16
- package/lib/ToggleSwitch/ToggleSwitch.js +76 -52
- package/lib/ToggleSwitch/index.js +13 -2
- package/lib/Tooltip/Backdrop.js +56 -0
- package/lib/Tooltip/Backdrop.native.js +59 -0
- package/lib/Tooltip/Tooltip.js +357 -0
- package/lib/Tooltip/dictionary.js +15 -0
- package/lib/Tooltip/getTooltipPosition.js +172 -0
- package/lib/Tooltip/index.js +13 -0
- package/lib/TooltipButton/TooltipButton.js +83 -0
- package/lib/TooltipButton/index.js +13 -0
- package/lib/Typography/Typography.js +58 -47
- package/lib/Typography/index.js +13 -2
- package/lib/ViewportProvider/ViewportProvider.js +46 -0
- package/lib/ViewportProvider/index.js +22 -38
- package/lib/ViewportProvider/useViewport.js +15 -0
- package/lib/ViewportProvider/useViewportListener.js +57 -0
- package/lib/index.js +509 -19
- package/lib/utils/a11y/index.js +18 -0
- package/lib/utils/a11y/textSize.js +49 -0
- package/lib/utils/animation/index.js +15 -2
- package/lib/utils/animation/useVerticalExpandAnimation.js +28 -11
- package/lib/utils/children.js +87 -0
- package/lib/utils/index.js +163 -4
- package/lib/utils/info/index.js +19 -0
- package/lib/utils/info/platform/index.js +23 -0
- package/lib/utils/info/platform/platform.android.js +8 -0
- package/lib/utils/info/platform/platform.ios.js +8 -0
- package/lib/utils/info/platform/platform.js +8 -0
- package/lib/utils/info/platform/platform.native.js +11 -0
- package/lib/utils/info/versions.js +16 -0
- package/lib/utils/input.js +54 -34
- package/lib/utils/pressability.js +120 -0
- package/lib/utils/propTypes.js +269 -108
- package/lib/utils/useCopy.js +51 -0
- package/lib/utils/useHash.js +48 -0
- package/lib/utils/useHash.native.js +15 -0
- package/lib/utils/useResponsiveProp.js +59 -0
- package/lib/utils/{spacing/useSpacingScale.js → useSpacingScale.js} +45 -12
- package/lib/utils/useUniqueId.js +21 -0
- package/package.json +11 -8
- package/release-context.json +4 -4
- package/src/ActivityIndicator/{Spinner.web.jsx → Spinner.jsx} +0 -0
- package/src/Box/Box.jsx +13 -4
- package/src/Button/Button.jsx +9 -5
- package/src/Button/ButtonBase.jsx +74 -86
- package/src/Button/ButtonGroup.jsx +24 -41
- package/src/Button/ButtonLink.jsx +14 -4
- package/src/Button/propTypes.js +12 -2
- package/src/Card/Card.jsx +4 -30
- package/src/Card/CardBase.jsx +57 -0
- package/src/Card/PressableCardBase.jsx +112 -0
- package/src/Card/index.js +3 -0
- package/src/Checkbox/Checkbox.jsx +274 -0
- package/src/Checkbox/CheckboxGroup.jsx +196 -0
- package/src/Checkbox/CheckboxInput.jsx +55 -0
- package/src/Checkbox/CheckboxInput.native.jsx +6 -0
- package/src/Checkbox/index.js +5 -0
- package/src/Divider/Divider.jsx +38 -3
- package/src/ExpandCollapse/Control.jsx +1 -1
- package/src/Feedback/Feedback.jsx +108 -0
- package/src/Feedback/index.js +3 -0
- package/src/Fieldset/Fieldset.jsx +129 -0
- package/src/Fieldset/FieldsetContainer.jsx +22 -0
- package/src/Fieldset/FieldsetContainer.native.jsx +16 -0
- package/src/Fieldset/Legend.jsx +16 -0
- package/src/Fieldset/Legend.native.jsx +22 -0
- package/src/Fieldset/cssReset.js +14 -0
- package/src/Fieldset/index.js +3 -0
- package/src/Icon/Icon.jsx +23 -27
- package/src/Icon/IconText.jsx +63 -0
- package/src/Icon/index.js +3 -2
- package/src/InputLabel/InputLabel.jsx +106 -0
- package/src/InputLabel/LabelContent.jsx +13 -0
- package/src/InputLabel/LabelContent.native.jsx +6 -0
- package/src/InputLabel/index.js +3 -0
- package/src/InputSupports/InputSupports.jsx +75 -0
- package/src/InputSupports/index.js +3 -0
- package/src/InputSupports/propTypes.js +44 -0
- package/src/InputSupports/useInputSupports.js +30 -0
- package/src/Link/ChevronLink.jsx +28 -7
- package/src/Link/InlinePressable.jsx +37 -0
- package/src/Link/InlinePressable.native.jsx +73 -0
- package/src/Link/Link.jsx +17 -13
- package/src/Link/LinkBase.jsx +71 -146
- package/src/Link/TextButton.jsx +25 -11
- package/src/Link/index.js +2 -1
- package/src/List/List.jsx +47 -0
- package/src/List/ListItem.jsx +187 -0
- package/src/List/index.js +3 -0
- package/src/Modal/Modal.jsx +185 -0
- package/src/Modal/dictionary.js +9 -0
- package/src/Modal/index.js +3 -0
- package/src/Notification/Notification.jsx +149 -0
- package/src/Notification/dictionary.js +8 -0
- package/src/Notification/index.js +3 -0
- package/src/Pagination/PageButton.jsx +3 -17
- package/src/Pagination/SideButton.jsx +27 -38
- package/src/Progress/Progress.jsx +77 -0
- package/src/Progress/ProgressBar.jsx +110 -0
- package/src/Progress/ProgressBarBackground.jsx +34 -0
- package/src/Progress/index.js +6 -0
- package/src/Radio/Radio.jsx +233 -0
- package/src/Radio/RadioButton.jsx +131 -0
- package/src/Radio/RadioGroup.jsx +198 -0
- package/src/Radio/RadioInput.jsx +57 -0
- package/src/Radio/RadioInput.native.jsx +6 -0
- package/src/Radio/index.js +5 -0
- package/src/RadioCard/RadioCard.jsx +191 -0
- package/src/RadioCard/RadioCardGroup.jsx +211 -0
- package/src/RadioCard/index.js +5 -0
- package/src/Search/Search.jsx +204 -0
- package/src/Search/dictionary.js +12 -0
- package/src/Search/index.js +3 -0
- package/src/Select/Group.jsx +15 -0
- package/src/Select/Group.native.jsx +14 -0
- package/src/Select/Item.jsx +11 -0
- package/src/Select/Item.native.jsx +10 -0
- package/src/Select/Picker.jsx +67 -0
- package/src/Select/Picker.native.jsx +95 -0
- package/src/Select/Select.jsx +255 -0
- package/src/Select/index.js +8 -0
- package/src/SideNav/Item.jsx +2 -2
- package/src/Skeleton/Skeleton.jsx +98 -0
- package/src/Skeleton/index.js +3 -0
- package/src/Skeleton/skeleton.constant.js +3 -0
- package/src/Skeleton/skeletonWebAnimation.js +13 -0
- package/src/Skeleton/useSkeletonNativeAnimation.js +27 -0
- package/src/Spacer/Spacer.jsx +91 -0
- package/src/Spacer/index.js +3 -0
- package/src/StackView/StackView.jsx +111 -0
- package/src/StackView/StackWrap.jsx +41 -0
- package/src/StackView/StackWrap.native.jsx +4 -0
- package/src/StackView/StackWrapBox.jsx +94 -0
- package/src/StackView/StackWrapGap.jsx +49 -0
- package/src/StackView/common.jsx +28 -0
- package/src/StackView/getStackedContent.jsx +112 -0
- package/src/StackView/index.js +6 -0
- package/src/StepTracker/Step.jsx +202 -0
- package/src/StepTracker/StepTracker.jsx +163 -0
- package/src/StepTracker/dictionary.js +10 -0
- package/src/StepTracker/index.js +3 -0
- package/src/Tabs/HorizontalScroll.jsx +165 -0
- package/src/Tabs/ScrollViewEnd.jsx +53 -0
- package/src/Tabs/ScrollViewEnd.native.jsx +24 -0
- package/src/Tabs/Tabs.jsx +89 -0
- package/src/Tabs/TabsItem.jsx +204 -0
- package/src/Tabs/TabsScrollButton.jsx +100 -0
- package/src/Tabs/dictionary.js +11 -0
- package/src/Tabs/index.js +3 -0
- package/src/Tabs/itemPositions.js +101 -0
- package/src/Tags/Tags.jsx +207 -0
- package/src/Tags/index.js +3 -0
- package/src/TextInput/TextArea.jsx +78 -0
- package/src/TextInput/TextInput.jsx +52 -0
- package/src/TextInput/TextInputBase.jsx +210 -0
- package/src/TextInput/index.js +4 -0
- package/src/TextInput/propTypes.js +29 -0
- package/src/ThemeProvider/useThemeTokens.js +56 -5
- package/src/ThemeProvider/utils/styles.js +18 -5
- package/src/ThemeProvider/utils/theme-tokens.js +46 -5
- package/src/ToggleSwitch/ToggleSwitch.jsx +3 -4
- package/src/Tooltip/Backdrop.jsx +60 -0
- package/src/Tooltip/Backdrop.native.jsx +33 -0
- package/src/Tooltip/Tooltip.jsx +294 -0
- package/src/Tooltip/dictionary.js +8 -0
- package/src/Tooltip/getTooltipPosition.js +161 -0
- package/src/Tooltip/index.js +3 -0
- package/src/TooltipButton/TooltipButton.jsx +49 -0
- package/src/TooltipButton/index.js +3 -0
- package/src/Typography/Typography.jsx +10 -24
- package/src/ViewportProvider/ViewportProvider.jsx +21 -0
- package/src/ViewportProvider/index.jsx +2 -41
- package/src/ViewportProvider/useViewport.js +5 -0
- package/src/ViewportProvider/useViewportListener.js +43 -0
- package/src/index.js +34 -2
- package/src/utils/a11y/index.js +1 -0
- package/src/utils/a11y/textSize.js +30 -0
- package/src/utils/children.jsx +66 -0
- package/src/utils/index.js +11 -1
- package/src/utils/info/index.js +8 -0
- package/src/utils/info/platform/index.js +11 -0
- package/src/utils/info/platform/platform.android.js +1 -0
- package/src/utils/info/platform/platform.ios.js +1 -0
- package/src/utils/info/platform/platform.js +1 -0
- package/src/utils/info/platform/platform.native.js +4 -0
- package/src/utils/info/versions.js +6 -0
- package/src/utils/input.js +22 -13
- package/src/utils/pressability.js +96 -0
- package/src/utils/propTypes.js +195 -47
- package/src/utils/useCopy.js +39 -0
- package/src/utils/useHash.js +34 -0
- package/src/utils/useHash.native.js +6 -0
- package/src/utils/useResponsiveProp.js +50 -0
- package/src/utils/{spacing/useSpacingScale.js → useSpacingScale.js} +25 -10
- package/src/utils/useUniqueId.js +14 -0
- package/stories/A11yText/A11yText.stories.jsx +15 -13
- package/stories/ActivityIndicator/ActivityIndicator.stories.jsx +11 -2
- package/stories/Box/Box.stories.jsx +29 -2
- package/stories/Button/Button.stories.jsx +21 -20
- package/stories/Button/ButtonGroup.stories.jsx +2 -1
- package/stories/Button/ButtonLink.stories.jsx +6 -4
- package/stories/Card/Card.stories.jsx +13 -1
- package/stories/Checkbox/Checkbox.stories.jsx +94 -0
- package/stories/Divider/Divider.stories.jsx +26 -2
- package/stories/ExpandCollapse/ExpandCollapse.stories.jsx +74 -79
- package/stories/Feedback/Feedback.stories.jsx +96 -0
- package/stories/FlexGrid/01 FlexGrid.stories.jsx +20 -7
- package/stories/Icon/Icon.stories.jsx +15 -6
- package/stories/InputLabel/InputLabel.stories.jsx +42 -0
- package/stories/Link/ChevronLink.stories.jsx +20 -4
- package/stories/Link/Link.stories.jsx +39 -3
- package/stories/Link/TextButton.stories.jsx +24 -2
- package/stories/List/List.stories.jsx +117 -0
- package/stories/Modal/Modal.stories.jsx +29 -0
- package/stories/Notification/Notification.stories.jsx +82 -0
- package/stories/Pagination/Pagination.stories.jsx +28 -14
- package/stories/Progress/Progress.stories.jsx +93 -0
- package/stories/Radio/Radio.stories.jsx +100 -0
- package/stories/RadioCard/RadioCard.stories.jsx +98 -0
- package/stories/Search/Search.stories.jsx +16 -0
- package/stories/Select/Select.stories.jsx +55 -0
- package/stories/SideNav/SideNav.stories.jsx +17 -2
- package/stories/Skeleton/Skeleton.stories.jsx +36 -0
- package/stories/Spacer/Spacer.stories.jsx +38 -0
- package/stories/StackView/StackView.stories.jsx +75 -0
- package/stories/StackView/StackWrap.stories.jsx +64 -0
- package/stories/StepTracker/StepTracker.stories.jsx +71 -0
- package/stories/Tabs/Tabs.stories.jsx +97 -0
- package/stories/Tags/Tags.stories.jsx +69 -0
- package/stories/TextInput/TextArea.stories.jsx +100 -0
- package/stories/TextInput/TextInput.stories.jsx +103 -0
- package/stories/ToggleSwitch/ToggleSwitch.stories.jsx +16 -3
- package/stories/Tooltip/Tooltip.stories.jsx +81 -0
- package/stories/TooltipButton/TooltipButton.stories.jsx +11 -0
- package/stories/Typography/Typography.stories.jsx +12 -3
- package/stories/{platform-supports.web.jsx → platform-supports.jsx} +1 -1
- package/stories/supports.jsx +110 -14
- package/__fixtures__/accessible.icon.svg +0 -6
- package/babel.config.json +0 -8
- package/lib/ActivityIndicator/Spinner.web.js +0 -55
- package/lib/Pagination/useCopy.js +0 -10
- package/lib/config/svgr-icons-web.js +0 -9
- package/lib/config/svgr-icons.js +0 -52
- package/lib/utils/spacing/index.js +0 -2
- package/lib/utils/spacing/utils.js +0 -32
- package/src/Pagination/useCopy.js +0 -7
- package/src/config/svgr-icons-web.js +0 -11
- package/src/config/svgr-icons.js +0 -46
- package/src/utils/spacing/index.js +0 -3
- package/src/utils/spacing/utils.js +0 -28
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
|
|
10
|
+
var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/View"));
|
|
11
|
+
|
|
12
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
13
|
+
|
|
14
|
+
var _ThemeProvider = require("../ThemeProvider");
|
|
15
|
+
|
|
16
|
+
var _utils = require("../utils");
|
|
17
|
+
|
|
18
|
+
var _Icon = _interopRequireDefault(require("../Icon"));
|
|
19
|
+
|
|
20
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
21
|
+
|
|
22
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
|
+
|
|
24
|
+
const selectInnerContainerStyles = ({
|
|
25
|
+
borderRadius,
|
|
26
|
+
width
|
|
27
|
+
}) => ({
|
|
28
|
+
borderRadius,
|
|
29
|
+
width
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
const selectIconTokens = ({
|
|
33
|
+
iconSize,
|
|
34
|
+
iconColor
|
|
35
|
+
/* iconScale = 1 */
|
|
36
|
+
|
|
37
|
+
}) => ({
|
|
38
|
+
size: iconSize,
|
|
39
|
+
color: iconColor // scale: iconScale TODO re-enable with icon component
|
|
40
|
+
|
|
41
|
+
});
|
|
42
|
+
/**
|
|
43
|
+
* `TooltipButton` is a helper component used as a default control for the `Tooltip` component.
|
|
44
|
+
* In fact though, it isn't actually a pressable - it's meant to be used as pressable's content.
|
|
45
|
+
* Due to this any interaction states (e.g. pressed, hover, etc.) has to be passed down to it as a prop.
|
|
46
|
+
*/
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
const TooltipButton = ({
|
|
50
|
+
pressableState,
|
|
51
|
+
tokens,
|
|
52
|
+
variant
|
|
53
|
+
}) => {
|
|
54
|
+
const themeTokens = (0, _ThemeProvider.useThemeTokens)('TooltipButton', tokens, variant, pressableState);
|
|
55
|
+
const {
|
|
56
|
+
icon: IconComponent
|
|
57
|
+
} = themeTokens;
|
|
58
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
|
|
59
|
+
style: (0, _ThemeProvider.applyOuterBorder)(themeTokens),
|
|
60
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
|
|
61
|
+
style: selectInnerContainerStyles(themeTokens),
|
|
62
|
+
children: IconComponent && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Icon.default, {
|
|
63
|
+
icon: IconComponent,
|
|
64
|
+
tokens: selectIconTokens(themeTokens)
|
|
65
|
+
})
|
|
66
|
+
})
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
TooltipButton.propTypes = {
|
|
71
|
+
/**
|
|
72
|
+
* Used as appearances when resolving theme tokens.
|
|
73
|
+
*/
|
|
74
|
+
pressableState: _propTypes.default.shape({
|
|
75
|
+
pressed: _propTypes.default.bool,
|
|
76
|
+
hover: _propTypes.default.bool,
|
|
77
|
+
focus: _propTypes.default.bool
|
|
78
|
+
}),
|
|
79
|
+
tokens: (0, _utils.getTokensPropType)('TooltipButton'),
|
|
80
|
+
variant: _utils.variantProp.propType
|
|
81
|
+
};
|
|
82
|
+
var _default = TooltipButton;
|
|
83
|
+
exports.default = _default;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _TooltipButton = _interopRequireDefault(require("./TooltipButton"));
|
|
9
|
+
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
+
|
|
12
|
+
var _default = _TooltipButton.default;
|
|
13
|
+
exports.default = _default;
|
|
@@ -1,34 +1,38 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
|
|
10
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
|
+
|
|
12
|
+
var _Text = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Text"));
|
|
13
|
+
|
|
14
|
+
var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/View"));
|
|
15
|
+
|
|
16
|
+
var _ThemeProvider = require("../ThemeProvider");
|
|
17
|
+
|
|
18
|
+
var _ViewportProvider = require("../ViewportProvider");
|
|
19
|
+
|
|
20
|
+
var _utils = require("../ThemeProvider/utils");
|
|
21
|
+
|
|
22
|
+
var _utils2 = require("../utils");
|
|
23
|
+
|
|
24
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
25
|
+
|
|
26
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
27
|
+
|
|
8
28
|
/**
|
|
9
29
|
* If passed a string like 'h1', 'h2' etc, returns the heading number as a string,
|
|
10
30
|
* else returns false
|
|
11
31
|
*/
|
|
12
|
-
|
|
13
32
|
function getHeadingLevel(heading) {
|
|
14
33
|
const match = typeof heading === 'string' && heading.match(/^h(\d)$/);
|
|
15
34
|
return match && match[1];
|
|
16
35
|
}
|
|
17
|
-
/**
|
|
18
|
-
* Enforces `fontScaleCap` theme tokens as the maximum font size text can become
|
|
19
|
-
* after iOS or Android font scaling, to give consistent accessible maximum sizes
|
|
20
|
-
* that don't make the content unusable
|
|
21
|
-
*/
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
function getMaxFontMultiplier({
|
|
25
|
-
fontSize,
|
|
26
|
-
fontScaleCap
|
|
27
|
-
}) {
|
|
28
|
-
if (!fontScaleCap || !fontSize) return undefined;
|
|
29
|
-
if (fontScaleCap <= fontSize) return 1;
|
|
30
|
-
return fontScaleCap / fontSize;
|
|
31
|
-
}
|
|
32
36
|
|
|
33
37
|
const selectTextStyles = ({
|
|
34
38
|
fontWeight,
|
|
@@ -36,20 +40,18 @@ const selectTextStyles = ({
|
|
|
36
40
|
color,
|
|
37
41
|
lineHeight,
|
|
38
42
|
fontName,
|
|
39
|
-
marginTop,
|
|
40
|
-
marginBottom,
|
|
41
43
|
textAlign,
|
|
42
|
-
textTransform
|
|
43
|
-
|
|
44
|
+
textTransform,
|
|
45
|
+
letterSpacing
|
|
46
|
+
}) => (0, _utils.applyTextStyles)({
|
|
44
47
|
fontWeight,
|
|
45
48
|
fontSize,
|
|
46
49
|
color,
|
|
47
50
|
lineHeight,
|
|
48
51
|
fontName,
|
|
49
|
-
marginTop,
|
|
50
|
-
marginBottom,
|
|
51
52
|
textAlign,
|
|
52
|
-
textTransform
|
|
53
|
+
textTransform,
|
|
54
|
+
letterSpacing
|
|
53
55
|
}); // General-purpose flexible theme-neutral base component for text
|
|
54
56
|
|
|
55
57
|
|
|
@@ -63,49 +65,58 @@ const Typography = ({
|
|
|
63
65
|
tokens,
|
|
64
66
|
...rest
|
|
65
67
|
}) => {
|
|
66
|
-
const viewport = useViewport();
|
|
67
|
-
const themeTokens = useThemeTokens('Typography', tokens, variant, {
|
|
68
|
+
const viewport = (0, _ViewportProvider.useViewport)();
|
|
69
|
+
const themeTokens = (0, _ThemeProvider.useThemeTokens)('Typography', tokens, variant, {
|
|
68
70
|
viewport
|
|
69
71
|
});
|
|
70
72
|
const textProps = {
|
|
71
73
|
style: selectTextStyles(align ? { ...themeTokens,
|
|
72
74
|
textAlign: align
|
|
73
|
-
} : themeTokens)
|
|
75
|
+
} : themeTokens),
|
|
76
|
+
maxFontSizeMultiplier: (0, _utils2.getMaxFontMultiplier)(themeTokens)
|
|
74
77
|
};
|
|
75
|
-
if (Platform.OS !== 'web') textProps.maxFontSizeMultiplier = getMaxFontMultiplier(themeTokens);
|
|
76
78
|
const headingLevel = getHeadingLevel(heading);
|
|
77
|
-
const a11y = { ...a11yProps.select(rest),
|
|
79
|
+
const a11y = { ..._utils2.a11yProps.select(rest),
|
|
78
80
|
accessibilityRole,
|
|
79
|
-
// On React Native Web, `
|
|
80
|
-
|
|
81
|
-
|
|
81
|
+
// On React Native Web, `accessibilityLevel` controls which heading tag (h1, h2 etc) is used.
|
|
82
|
+
...(headingLevel && {
|
|
83
|
+
accessibilityLevel: headingLevel
|
|
84
|
+
})
|
|
82
85
|
};
|
|
83
|
-
return block ? /*#__PURE__*/
|
|
86
|
+
return block ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, { ...a11y,
|
|
87
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Text.default, { ...textProps,
|
|
88
|
+
children: children
|
|
89
|
+
})
|
|
90
|
+
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_Text.default, { ...textProps,
|
|
91
|
+
...a11y,
|
|
92
|
+
children: children
|
|
93
|
+
});
|
|
84
94
|
};
|
|
85
95
|
|
|
86
|
-
Typography.propTypes = { ...a11yProps.types,
|
|
87
|
-
tokens: getTokensPropType('Typography'),
|
|
88
|
-
variant: variantProp.propType,
|
|
96
|
+
Typography.propTypes = { ..._utils2.a11yProps.types,
|
|
97
|
+
tokens: (0, _utils2.getTokensPropType)('Typography'),
|
|
98
|
+
variant: _utils2.variantProp.propType,
|
|
89
99
|
|
|
90
100
|
/**
|
|
91
101
|
* If truthy, will render a heading; if a html heading tag is provided, uses that tag on Web
|
|
92
102
|
*/
|
|
93
|
-
heading:
|
|
103
|
+
heading: _propTypes.default.oneOf([true, 'h1', 'h2', 'h3', 'h4', 'h5', 'h6']),
|
|
94
104
|
|
|
95
105
|
/**
|
|
96
106
|
* If true, forces the element to behave as a View block even if nested in other text
|
|
97
107
|
*/
|
|
98
|
-
block:
|
|
108
|
+
block: _propTypes.default.bool,
|
|
99
109
|
|
|
100
110
|
/**
|
|
101
111
|
* Works the same as css text-align, note that RN doesn't support "start" or "end" (see https://reactnative.dev/docs/text-style-props#textalign)
|
|
102
112
|
* Justify is known to make text harder to read, especially for people with dyslexia (see https://developer.mozilla.org/en-US/docs/Web/CSS/text-align#accessibility_concerns)
|
|
103
113
|
*/
|
|
104
|
-
align:
|
|
114
|
+
align: _propTypes.default.oneOf(['auto', 'left', 'right', 'center', 'justify']),
|
|
105
115
|
|
|
106
116
|
/**
|
|
107
117
|
* Same children allowed as a React Native <Text> node
|
|
108
118
|
*/
|
|
109
|
-
children:
|
|
119
|
+
children: _propTypes.default.node
|
|
110
120
|
};
|
|
111
|
-
|
|
121
|
+
var _default = Typography;
|
|
122
|
+
exports.default = _default;
|
package/lib/Typography/index.js
CHANGED
|
@@ -1,2 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _Typography = _interopRequireDefault(require("./Typography"));
|
|
9
|
+
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
+
|
|
12
|
+
var _default = _Typography.default;
|
|
13
|
+
exports.default = _default;
|
|
@@ -0,0 +1,46 @@
|
|
|
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 _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
|
+
|
|
12
|
+
var _systemConstants = require("@telus-uds/system-constants");
|
|
13
|
+
|
|
14
|
+
var _useViewport = require("./useViewport");
|
|
15
|
+
|
|
16
|
+
var _useViewportListener = _interopRequireDefault(require("./useViewportListener"));
|
|
17
|
+
|
|
18
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
19
|
+
|
|
20
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
|
+
|
|
22
|
+
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); }
|
|
23
|
+
|
|
24
|
+
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; }
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Provides an up-to-date viewport value from system-constants, available via the `useViewport` hook
|
|
28
|
+
*/
|
|
29
|
+
const ViewportProvider = ({
|
|
30
|
+
children
|
|
31
|
+
}) => {
|
|
32
|
+
// Default to the smallest viewport for mobile-first SSR. On client side, this is updated
|
|
33
|
+
// by useViewportListener in a layout effect before anything is shown to the user.
|
|
34
|
+
const [viewport, setViewport] = (0, _react.useState)(_systemConstants.viewports.keys[0]);
|
|
35
|
+
(0, _useViewportListener.default)(setViewport);
|
|
36
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_useViewport.ViewportContext.Provider, {
|
|
37
|
+
value: viewport,
|
|
38
|
+
children: children
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
ViewportProvider.propTypes = {
|
|
43
|
+
children: _propTypes.default.node.isRequired
|
|
44
|
+
};
|
|
45
|
+
var _default = ViewportProvider;
|
|
46
|
+
exports.default = _default;
|
|
@@ -1,44 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
import PropTypes from 'prop-types';
|
|
3
|
-
import { Dimensions } from 'react-native';
|
|
4
|
-
import { viewports } from '@telus-uds/system-constants'; // we are using Dimensions instead of useWindowDimensions
|
|
5
|
-
// that's because useWindowDimensions forces context to update on
|
|
6
|
-
// every pixel change on the browser, therefore we used Dimension to only enforce
|
|
7
|
-
// context update on viewport changes
|
|
1
|
+
"use strict";
|
|
8
2
|
|
|
9
|
-
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _exportNames = {};
|
|
7
|
+
exports.default = void 0;
|
|
10
8
|
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Provides an up-to-date viewport value from system-constants, available via the `useViewport` hook
|
|
14
|
-
*/
|
|
9
|
+
var _ViewportProvider = _interopRequireDefault(require("./ViewportProvider"));
|
|
15
10
|
|
|
16
|
-
|
|
17
|
-
children
|
|
18
|
-
}) => {
|
|
19
|
-
// initialize with a function so we don't re-execute on each render
|
|
20
|
-
const [viewport, setViewport] = useState(lookupViewport);
|
|
21
|
-
useEffect(() => {
|
|
22
|
-
const onChange = ({
|
|
23
|
-
window
|
|
24
|
-
}) => setViewport(viewports.select(window.width));
|
|
11
|
+
var _useViewport = require("./useViewport");
|
|
25
12
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
13
|
+
Object.keys(_useViewport).forEach(function (key) {
|
|
14
|
+
if (key === "default" || key === "__esModule") return;
|
|
15
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
16
|
+
if (key in exports && exports[key] === _useViewport[key]) return;
|
|
17
|
+
Object.defineProperty(exports, key, {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
get: function () {
|
|
20
|
+
return _useViewport[key];
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
});
|
|
29
24
|
|
|
30
|
-
|
|
31
|
-
return () => {
|
|
32
|
-
Dimensions.removeEventListener('change', onChange);
|
|
33
|
-
};
|
|
34
|
-
}, []);
|
|
35
|
-
return /*#__PURE__*/React.createElement(ViewportContext.Provider, {
|
|
36
|
-
value: viewport
|
|
37
|
-
}, children);
|
|
38
|
-
};
|
|
25
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
39
26
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
};
|
|
43
|
-
export default ViewportProvider;
|
|
44
|
-
export const useViewport = () => useContext(ViewportContext);
|
|
27
|
+
var _default = _ViewportProvider.default;
|
|
28
|
+
exports.default = _default;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useViewport = exports.ViewportContext = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
const ViewportContext = /*#__PURE__*/(0, _react.createContext)({});
|
|
11
|
+
exports.ViewportContext = ViewportContext;
|
|
12
|
+
|
|
13
|
+
const useViewport = () => (0, _react.useContext)(ViewportContext);
|
|
14
|
+
|
|
15
|
+
exports.useViewport = useViewport;
|
|
@@ -0,0 +1,57 @@
|
|
|
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
|
+
var _Dimensions = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Dimensions"));
|
|
11
|
+
|
|
12
|
+
var _systemConstants = require("@telus-uds/system-constants");
|
|
13
|
+
|
|
14
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
+
|
|
16
|
+
// Use Dimensions instead of useWindowDimensions because useWindowDimensions forces context
|
|
17
|
+
// to update on every pixel change during window resize; but we only want rerenders to occur
|
|
18
|
+
// when a viewport threshold has been crossed.
|
|
19
|
+
const lookupViewport = () => _systemConstants.viewports.select(_Dimensions.default.get('window').width);
|
|
20
|
+
/**
|
|
21
|
+
* In SSR, React gets spooked if it sees `useLayoutEffect` and fires warnings assuming the
|
|
22
|
+
* developer doesn't realise the effect won't run: https://reactjs.org/link/uselayouteffect-ssr
|
|
23
|
+
*
|
|
24
|
+
* To avoid these warnings while still conforming to the rules of hooks, always use this
|
|
25
|
+
* explicitly no-op hook, instead of the useLayoutEffect that is implicitly no-op on SSR.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
const useViewportListenerSSR = () => {};
|
|
30
|
+
/**
|
|
31
|
+
* When client-side rendering, immediately set the viewport to the correct value as a layout effect so
|
|
32
|
+
* if the viewport isn't the smallest, any SSR-rendered components rerender correctly before anything
|
|
33
|
+
* is shown to the user. Then bind events to update the viewport if it changes.
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
const useViewportListenerCSR = setViewport => {
|
|
38
|
+
(0, _react.useLayoutEffect)(() => {
|
|
39
|
+
setViewport(lookupViewport());
|
|
40
|
+
|
|
41
|
+
const onChange = ({
|
|
42
|
+
window
|
|
43
|
+
}) => setViewport(_systemConstants.viewports.select(window.width));
|
|
44
|
+
|
|
45
|
+
const listener = _Dimensions.default.addEventListener('change', onChange); // From RN 0.65.0, Dimensions.removeEventListener is deprecated for `remove` on addEventListener return value;
|
|
46
|
+
// however, that is not available in RN <=0.64.X, therefore not in any Expo release as of 2021 (Expo SDK 43).
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
return (listener === null || listener === void 0 ? void 0 : listener.remove) || (() => _Dimensions.default.removeEventListener('change', onChange)); // setViewport is a function from `useState` so it is stable and won't make the effect re-run
|
|
50
|
+
}, [setViewport]);
|
|
51
|
+
}; // Window is a defined global object in both Web and Native client-side, and undefined in SSR
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
const isSSR = typeof window === 'undefined';
|
|
55
|
+
const useViewportListener = isSSR ? useViewportListenerSSR : useViewportListenerCSR;
|
|
56
|
+
var _default = useViewportListener;
|
|
57
|
+
exports.default = _default;
|