@telus-uds/components-base 0.0.2-prerelease.5 → 0.0.2-prerelease.9
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 +65 -0
- package/__fixtures__/Accessible.js +33 -0
- package/__fixtures__/Accessible.native.js +32 -0
- package/__fixtures__/testTheme.js +871 -52
- 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__/Icon/Icon.test.jsx +3 -3
- package/__tests__/IconButton/IconButton.test.jsx +52 -0
- 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__/StackView/StackView.test.jsx +0 -26
- 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/{TextInput.test.jsx → TextInputBase.test.jsx} +20 -46
- 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/babel.config.js +20 -0
- package/jest.config.js +13 -4
- 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 +54 -31
- package/lib/Box/index.js +13 -2
- package/lib/Button/Button.js +38 -10
- package/lib/Button/ButtonBase.js +115 -94
- package/lib/Button/ButtonGroup.js +94 -86
- 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 +50 -24
- 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 +85 -34
- package/lib/Feedback/index.js +13 -2
- 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/IconButton/IconButton.js +135 -0
- package/lib/IconButton/index.js +13 -0
- package/lib/InputLabel/InputLabel.js +70 -34
- package/lib/InputLabel/LabelContent.js +31 -0
- package/lib/InputLabel/LabelContent.native.js +9 -1
- package/lib/InputLabel/index.js +13 -2
- 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 +114 -145
- 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 +31 -12
- package/lib/Spacer/index.js +13 -2
- package/lib/StackView/StackView.js +57 -33
- package/lib/StackView/StackWrap.js +33 -10
- package/lib/StackView/StackWrap.native.js +13 -2
- package/lib/StackView/StackWrapBox.js +50 -23
- package/lib/StackView/StackWrapGap.js +45 -19
- package/lib/StackView/common.js +19 -4
- package/lib/StackView/getStackedContent.js +49 -19
- package/lib/StackView/index.js +29 -5
- 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 +41 -303
- package/lib/TextInput/TextInputBase.js +252 -0
- package/lib/TextInput/index.js +23 -2
- 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 -43
- 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 +518 -24
- 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 +51 -33
- package/lib/utils/pressability.js +120 -0
- package/lib/utils/propTypes.js +269 -116
- 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 +13 -4
- package/package.json +12 -9
- package/release-context.json +4 -4
- package/src/ActivityIndicator/{Spinner.web.jsx → Spinner.jsx} +0 -0
- package/src/Box/Box.jsx +11 -4
- package/src/Button/Button.jsx +9 -5
- package/src/Button/ButtonBase.jsx +69 -69
- package/src/Button/ButtonGroup.jsx +11 -24
- 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/ExpandCollapse/Control.jsx +1 -1
- package/src/Feedback/Feedback.jsx +31 -22
- 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 +21 -26
- package/src/Icon/IconText.jsx +63 -0
- package/src/Icon/index.js +3 -2
- package/src/IconButton/IconButton.jsx +107 -0
- package/src/IconButton/index.js +3 -0
- package/src/InputLabel/InputLabel.jsx +11 -4
- package/src/InputLabel/{LabelContent.web.jsx → LabelContent.jsx} +0 -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 +67 -148
- 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/StackView/StackView.jsx +25 -17
- package/src/StackView/StackWrap.jsx +9 -1
- package/src/StackView/StackWrapBox.jsx +19 -7
- package/src/StackView/StackWrapGap.jsx +15 -5
- package/src/StackView/getStackedContent.jsx +8 -2
- 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 +17 -290
- package/src/TextInput/TextInputBase.jsx +210 -0
- package/src/TextInput/index.js +2 -1
- 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 -20
- 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 +31 -3
- 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 +20 -12
- package/src/utils/pressability.js +96 -0
- package/src/utils/propTypes.js +195 -56
- 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/stories/A11yText/A11yText.stories.jsx +4 -8
- package/stories/Button/Button.stories.jsx +5 -0
- package/stories/Card/Card.stories.jsx +1 -1
- package/stories/Checkbox/Checkbox.stories.jsx +94 -0
- package/stories/Feedback/Feedback.stories.jsx +5 -6
- package/stories/Icon/Icon.stories.jsx +27 -7
- package/stories/IconButton/IconButton.stories.jsx +50 -0
- package/stories/InputLabel/InputLabel.stories.jsx +8 -3
- package/stories/Link/ChevronLink.stories.jsx +3 -3
- package/stories/Link/Link.stories.jsx +28 -18
- 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/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/Skeleton/Skeleton.stories.jsx +36 -0
- package/stories/Spacer/Spacer.stories.jsx +7 -2
- package/stories/StackView/StackView.stories.jsx +10 -0
- package/stories/StackView/StackWrap.stories.jsx +12 -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/Tooltip/Tooltip.stories.jsx +81 -0
- package/stories/TooltipButton/TooltipButton.stories.jsx +11 -0
- package/stories/{platform-supports.web.jsx → platform-supports.jsx} +0 -0
- package/stories/supports.jsx +36 -2
- 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/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
|
@@ -1,12 +1,33 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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 _Platform = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Platform"));
|
|
13
|
+
|
|
14
|
+
var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/View"));
|
|
15
|
+
|
|
16
|
+
var _StyleSheet = _interopRequireDefault(require("react-native-web/dist/cjs/exports/StyleSheet"));
|
|
17
|
+
|
|
18
|
+
var _ButtonBase = _interopRequireDefault(require("../Button/ButtonBase"));
|
|
19
|
+
|
|
20
|
+
var _ThemeProvider = require("../ThemeProvider");
|
|
21
|
+
|
|
22
|
+
var _propTypes2 = require("../utils/propTypes");
|
|
23
|
+
|
|
24
|
+
var _input = require("../utils/input");
|
|
25
|
+
|
|
26
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
27
|
+
|
|
28
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
29
|
+
|
|
30
|
+
const selectButtonTokens = tokens => (0, _propTypes2.selectTokens)('Button', { ...tokens,
|
|
10
31
|
// Width tokens are applied to our inner track. Disable Button width token so it wraps our track width.
|
|
11
32
|
width: null
|
|
12
33
|
}); // Map and rename icon-specific tokens to name used within Icon
|
|
@@ -14,10 +35,8 @@ const selectButtonTokens = tokens => selectTokens('Button', { ...tokens,
|
|
|
14
35
|
|
|
15
36
|
const selectIconTokens = ({
|
|
16
37
|
iconSize,
|
|
17
|
-
iconColor
|
|
18
|
-
iconOpacity
|
|
38
|
+
iconColor
|
|
19
39
|
}) => ({
|
|
20
|
-
opacity: iconOpacity,
|
|
21
40
|
size: iconSize,
|
|
22
41
|
color: iconColor
|
|
23
42
|
});
|
|
@@ -48,8 +67,8 @@ const selectSwitchStyles = ({
|
|
|
48
67
|
borderWidth: switchBorderWidth,
|
|
49
68
|
borderColor: switchBorderColor,
|
|
50
69
|
borderRadius: switchBorderRadius,
|
|
51
|
-
...applyShadowToken(switchShadow),
|
|
52
|
-
...
|
|
70
|
+
...(0, _ThemeProvider.applyShadowToken)(switchShadow),
|
|
71
|
+
..._Platform.default.select({
|
|
53
72
|
// TODO: https://github.com/telus/universal-design-system/issues/487
|
|
54
73
|
web: {
|
|
55
74
|
transition: 'transform 200ms'
|
|
@@ -66,11 +85,11 @@ const ToggleSwitch = ({
|
|
|
66
85
|
variant,
|
|
67
86
|
accessibilityRole = 'switch'
|
|
68
87
|
}) => {
|
|
69
|
-
const getTokens = useThemeTokensCallback('ToggleSwitch', tokens, variant);
|
|
88
|
+
const getTokens = (0, _ThemeProvider.useThemeTokensCallback)('ToggleSwitch', tokens, variant);
|
|
70
89
|
const {
|
|
71
90
|
currentValue,
|
|
72
91
|
setValue
|
|
73
|
-
} = useInputValue({
|
|
92
|
+
} = (0, _input.useInputValue)({
|
|
74
93
|
value,
|
|
75
94
|
initialValue,
|
|
76
95
|
onChange
|
|
@@ -80,7 +99,7 @@ const ToggleSwitch = ({
|
|
|
80
99
|
|
|
81
100
|
const getButtonTokens = buttonState => selectButtonTokens(getTokens(buttonState));
|
|
82
101
|
|
|
83
|
-
return /*#__PURE__*/
|
|
102
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_ButtonBase.default, {
|
|
84
103
|
selected: currentValue,
|
|
85
104
|
inactive: inactive,
|
|
86
105
|
tokens: getButtonTokens,
|
|
@@ -88,66 +107,69 @@ const ToggleSwitch = ({
|
|
|
88
107
|
accessibilityState: {
|
|
89
108
|
checked: currentValue
|
|
90
109
|
},
|
|
91
|
-
onPress: handlePress
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
110
|
+
onPress: handlePress,
|
|
111
|
+
children: buttonState => {
|
|
112
|
+
const themeTokens = getTokens(buttonState);
|
|
113
|
+
const IconComponent = themeTokens.icon;
|
|
114
|
+
const switchStyles = selectSwitchStyles(themeTokens);
|
|
115
|
+
const trackStyles = selectTrackStyles(themeTokens);
|
|
116
|
+
const iconTokens = selectIconTokens(themeTokens); // If drag-slide support is needed, use a PanResponder and apply these to an Animated value.
|
|
117
|
+
// Use translate transforms for smoothest non-thread-blocking animations and to allow drag.
|
|
118
|
+
|
|
119
|
+
const slideStart = 0;
|
|
120
|
+
const slideEnd = themeTokens.width - themeTokens.switchSize - themeTokens.trackBorderWidth * 2;
|
|
121
|
+
const switchOffset = buttonState.selected ? slideEnd : slideStart;
|
|
122
|
+
const switchPositionStyle = {
|
|
123
|
+
transform: [{
|
|
124
|
+
translateX: switchOffset
|
|
125
|
+
}]
|
|
126
|
+
};
|
|
127
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
|
|
128
|
+
style: [staticStyles.track, trackStyles],
|
|
129
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
|
|
130
|
+
style: [staticStyles.switch, switchStyles, switchPositionStyle],
|
|
131
|
+
children: IconComponent && /*#__PURE__*/(0, _jsxRuntime.jsx)(IconComponent, { ...iconTokens
|
|
132
|
+
})
|
|
133
|
+
})
|
|
134
|
+
});
|
|
135
|
+
}
|
|
115
136
|
});
|
|
116
137
|
};
|
|
117
138
|
|
|
118
|
-
ToggleSwitch.propTypes = { ...a11yProps.propTypes,
|
|
119
|
-
...pressProps.propTypes,
|
|
120
|
-
tokens: getTokensPropType('ToggleSwitch'),
|
|
121
|
-
variant: variantProp.propType,
|
|
139
|
+
ToggleSwitch.propTypes = { ..._propTypes2.a11yProps.propTypes,
|
|
140
|
+
..._propTypes2.pressProps.propTypes,
|
|
141
|
+
tokens: (0, _propTypes2.getTokensPropType)('ToggleSwitch'),
|
|
142
|
+
variant: _propTypes2.variantProp.propType,
|
|
122
143
|
|
|
123
144
|
/**
|
|
124
145
|
* If this is a "controlled" component and a parent handles its selected state,
|
|
125
146
|
* tells the switch if it is on (true) or off (false).
|
|
126
147
|
*/
|
|
127
|
-
value:
|
|
148
|
+
value: _propTypes.default.bool,
|
|
128
149
|
|
|
129
150
|
/**
|
|
130
151
|
* If this is an "uncontrolled" component that handles its own selected state,
|
|
131
152
|
* optionally tells the switch if it should default to on (true) or off (false).
|
|
132
153
|
*/
|
|
133
|
-
initialValue:
|
|
154
|
+
initialValue: _propTypes.default.bool,
|
|
134
155
|
|
|
135
156
|
/**
|
|
136
157
|
* Function called when the switch is toggled, with one boolean argument that is the
|
|
137
158
|
* new position of the switch, on (true) or off (false). For "controlled" components,
|
|
138
159
|
* this should always be passed and used to control the state of the switch.
|
|
139
160
|
*/
|
|
140
|
-
onChange:
|
|
161
|
+
onChange: _propTypes.default.func,
|
|
141
162
|
|
|
142
163
|
/**
|
|
143
164
|
* If passed, the switch does not respond to user input and may recieve different
|
|
144
165
|
* theme tokens if the theme supports inactive appearance.
|
|
145
166
|
*/
|
|
146
|
-
inactive:
|
|
167
|
+
inactive: _propTypes.default.bool
|
|
147
168
|
};
|
|
148
|
-
|
|
169
|
+
|
|
170
|
+
const staticStyles = _StyleSheet.default.create({
|
|
149
171
|
track: {
|
|
150
|
-
|
|
172
|
+
flexGrow: 1,
|
|
151
173
|
alignSelf: 'stretch',
|
|
152
174
|
flexDirection: 'row'
|
|
153
175
|
},
|
|
@@ -156,4 +178,6 @@ const staticStyles = StyleSheet.create({
|
|
|
156
178
|
justifyContent: 'center'
|
|
157
179
|
}
|
|
158
180
|
});
|
|
159
|
-
|
|
181
|
+
|
|
182
|
+
var _default = ToggleSwitch;
|
|
183
|
+
exports.default = _default;
|
|
@@ -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 _ToggleSwitch = _interopRequireDefault(require("./ToggleSwitch"));
|
|
9
|
+
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
+
|
|
12
|
+
var _default = _ToggleSwitch.default;
|
|
13
|
+
exports.default = _default;
|
|
@@ -0,0 +1,56 @@
|
|
|
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 _reactDom = _interopRequireDefault(require("react-dom"));
|
|
11
|
+
|
|
12
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
13
|
+
|
|
14
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
+
|
|
16
|
+
function createPortalNode(nodeId) {
|
|
17
|
+
const node = document.createElement('div');
|
|
18
|
+
node.id = nodeId; // we're mimicking React Native's Modal component, except for using an `absolute` position
|
|
19
|
+
// this way the backdrop stays in place when scrolling the window - that's why we need to
|
|
20
|
+
// position it at the scroll position when rendering
|
|
21
|
+
|
|
22
|
+
node.style.cssText = "\n position: absolute; \n top: ".concat(window.scrollY, "px;\n left: ").concat(window.scrollX, "px; \n right: 0; \n bottom: 0; \n z-index: 9999; \n pointer-events: none;\n ");
|
|
23
|
+
document.body.appendChild(node);
|
|
24
|
+
return node;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function removePortalNode(nodeId) {
|
|
28
|
+
const node = document.getElementById(nodeId);
|
|
29
|
+
node.parentElement.removeChild(node);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The Web version of Backdrop utilizes React Portal for overlaying page content, so it is
|
|
33
|
+
* dependent on ReactDOM. Tooltip's closing is handled by the onBlur callback of the control.
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
function Backdrop({
|
|
38
|
+
children
|
|
39
|
+
}) {
|
|
40
|
+
const [portalNode, setPortalNode] = (0, _react.useState)();
|
|
41
|
+
(0, _react.useEffect)(() => {
|
|
42
|
+
const nodeId = "tooltip-backdrop-".concat(Date.now());
|
|
43
|
+
const node = createPortalNode(nodeId);
|
|
44
|
+
setPortalNode(node);
|
|
45
|
+
return () => {
|
|
46
|
+
removePortalNode(nodeId);
|
|
47
|
+
};
|
|
48
|
+
}, []);
|
|
49
|
+
return portalNode ? /*#__PURE__*/_reactDom.default.createPortal(children, portalNode) : null;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
Backdrop.propTypes = {
|
|
53
|
+
children: _propTypes.default.node
|
|
54
|
+
};
|
|
55
|
+
var _default = Backdrop;
|
|
56
|
+
exports.default = _default;
|
|
@@ -0,0 +1,59 @@
|
|
|
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 _TouchableWithoutFeedback = _interopRequireDefault(require("react-native-web/dist/cjs/exports/TouchableWithoutFeedback"));
|
|
11
|
+
|
|
12
|
+
var _Modal = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Modal"));
|
|
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 _propTypes = _interopRequireDefault(require("prop-types"));
|
|
19
|
+
|
|
20
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
21
|
+
|
|
22
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* The Native version of Backdrop utilizes React Native's Modal component for overlaying
|
|
26
|
+
* the app's content, since this is the only reliable to do it. The only drawback of this
|
|
27
|
+
* approach is that a press on the Backdrop will actually stop the press event from propagating,
|
|
28
|
+
* i.e. anything rendered beneath the Backdrop can't be pressed until the Backdrop is closed.
|
|
29
|
+
*/
|
|
30
|
+
function Backdrop({
|
|
31
|
+
onPress,
|
|
32
|
+
children
|
|
33
|
+
}) {
|
|
34
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Modal.default, {
|
|
35
|
+
transparent: true,
|
|
36
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_TouchableWithoutFeedback.default, {
|
|
37
|
+
onPress: onPress,
|
|
38
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
|
|
39
|
+
style: staticStyles.backdrop,
|
|
40
|
+
children: children
|
|
41
|
+
})
|
|
42
|
+
})
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
var _default = Backdrop;
|
|
47
|
+
exports.default = _default;
|
|
48
|
+
Backdrop.propTypes = {
|
|
49
|
+
onPress: _propTypes.default.func,
|
|
50
|
+
children: _propTypes.default.node
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const staticStyles = _StyleSheet.default.create({
|
|
54
|
+
backdrop: {
|
|
55
|
+
flexBasis: '100%',
|
|
56
|
+
backgroundColor: 'rgba(255, 255, 255, 0.5)' // to visually mark that the content beneath is not pressable
|
|
57
|
+
|
|
58
|
+
}
|
|
59
|
+
});
|
|
@@ -0,0 +1,357 @@
|
|
|
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 _Dimensions = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Dimensions"));
|
|
11
|
+
|
|
12
|
+
var _Platform = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Platform"));
|
|
13
|
+
|
|
14
|
+
var _Pressable = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Pressable"));
|
|
15
|
+
|
|
16
|
+
var _StyleSheet = _interopRequireDefault(require("react-native-web/dist/cjs/exports/StyleSheet"));
|
|
17
|
+
|
|
18
|
+
var _Text = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Text"));
|
|
19
|
+
|
|
20
|
+
var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/View"));
|
|
21
|
+
|
|
22
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
23
|
+
|
|
24
|
+
var _ThemeProvider = require("../ThemeProvider");
|
|
25
|
+
|
|
26
|
+
var _utils = require("../utils");
|
|
27
|
+
|
|
28
|
+
var _Backdrop = _interopRequireDefault(require("./Backdrop"));
|
|
29
|
+
|
|
30
|
+
var _getTooltipPosition = _interopRequireDefault(require("./getTooltipPosition"));
|
|
31
|
+
|
|
32
|
+
var _TooltipButton = _interopRequireDefault(require("../TooltipButton"));
|
|
33
|
+
|
|
34
|
+
var _useCopy = _interopRequireDefault(require("../utils/useCopy"));
|
|
35
|
+
|
|
36
|
+
var _dictionary = _interopRequireDefault(require("./dictionary"));
|
|
37
|
+
|
|
38
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
39
|
+
|
|
40
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
41
|
+
|
|
42
|
+
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); }
|
|
43
|
+
|
|
44
|
+
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; }
|
|
45
|
+
|
|
46
|
+
const selectTooltipStyles = ({
|
|
47
|
+
backgroundColor,
|
|
48
|
+
paddingTop,
|
|
49
|
+
paddingBottom,
|
|
50
|
+
paddingLeft,
|
|
51
|
+
paddingRight,
|
|
52
|
+
borderRadius
|
|
53
|
+
}) => ({
|
|
54
|
+
backgroundColor,
|
|
55
|
+
paddingTop,
|
|
56
|
+
paddingBottom,
|
|
57
|
+
paddingLeft,
|
|
58
|
+
paddingRight,
|
|
59
|
+
borderRadius
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
const selectTooltipShadowStyles = ({
|
|
63
|
+
shadow,
|
|
64
|
+
borderRadius
|
|
65
|
+
}) => ({
|
|
66
|
+
borderRadius,
|
|
67
|
+
...(0, _ThemeProvider.applyShadowToken)(shadow)
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
const selectTooltipPositionStyles = ({
|
|
71
|
+
top,
|
|
72
|
+
left,
|
|
73
|
+
width
|
|
74
|
+
}) => {
|
|
75
|
+
return {
|
|
76
|
+
top,
|
|
77
|
+
left,
|
|
78
|
+
width
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const selectArrowStyles = ({
|
|
83
|
+
backgroundColor,
|
|
84
|
+
arrowWidth,
|
|
85
|
+
arrowBorderRadius,
|
|
86
|
+
shadow
|
|
87
|
+
}, {
|
|
88
|
+
position,
|
|
89
|
+
width: tooltipWidth,
|
|
90
|
+
height: tooltipHeight
|
|
91
|
+
}) => {
|
|
92
|
+
// the arrow width is actually a diagonal of the rectangle that we'll use as a tip
|
|
93
|
+
const rectangleSide = Math.sqrt(arrowWidth * arrowWidth / 2); // position the arrow at the side and center of the tooltip - this happens before rotation
|
|
94
|
+
// so we use the rectangle size as basis
|
|
95
|
+
|
|
96
|
+
const verticalOffset = -1 * rectangleSide / 2;
|
|
97
|
+
const horizontalOffset = rectangleSide / 2; // percentage-based absolute positioning doesn't act well on native, so we have to
|
|
98
|
+
// calculate the pixel values
|
|
99
|
+
|
|
100
|
+
const directionalStyles = {
|
|
101
|
+
above: {
|
|
102
|
+
bottom: verticalOffset,
|
|
103
|
+
left: tooltipWidth / 2 - horizontalOffset,
|
|
104
|
+
transform: [{
|
|
105
|
+
rotateZ: '45deg'
|
|
106
|
+
}]
|
|
107
|
+
},
|
|
108
|
+
below: {
|
|
109
|
+
top: verticalOffset,
|
|
110
|
+
left: tooltipWidth / 2 - horizontalOffset,
|
|
111
|
+
transform: [{
|
|
112
|
+
rotateZ: '-135deg'
|
|
113
|
+
}]
|
|
114
|
+
},
|
|
115
|
+
left: {
|
|
116
|
+
right: verticalOffset,
|
|
117
|
+
top: tooltipHeight / 2 - horizontalOffset,
|
|
118
|
+
transform: [{
|
|
119
|
+
rotateZ: '-45deg'
|
|
120
|
+
}]
|
|
121
|
+
},
|
|
122
|
+
right: {
|
|
123
|
+
left: verticalOffset,
|
|
124
|
+
top: tooltipHeight / 2 - horizontalOffset,
|
|
125
|
+
transform: [{
|
|
126
|
+
rotateZ: '135deg'
|
|
127
|
+
}]
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
return {
|
|
131
|
+
backgroundColor,
|
|
132
|
+
width: rectangleSide,
|
|
133
|
+
height: rectangleSide,
|
|
134
|
+
borderBottomRightRadius: arrowBorderRadius,
|
|
135
|
+
// this corner will be the arrow tip after rotation
|
|
136
|
+
...(0, _ThemeProvider.applyShadowToken)(shadow),
|
|
137
|
+
...directionalStyles[position]
|
|
138
|
+
};
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
const selectTextStyles = tokens => (0, _ThemeProvider.applyTextStyles)((0, _utils.selectTokens)('Typography', tokens));
|
|
142
|
+
|
|
143
|
+
const defaultControl = (pressableState, variant) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_TooltipButton.default, {
|
|
144
|
+
pressableState: pressableState,
|
|
145
|
+
variant: variant
|
|
146
|
+
});
|
|
147
|
+
/**
|
|
148
|
+
* Tooltip provides a descriptive and detailed explanation or instructions. It can be used next to an input label
|
|
149
|
+
* to help a user fill it in, or as a standalone component.
|
|
150
|
+
*
|
|
151
|
+
* By default the TooltipButton component will be used as a control for triggering the tooltip, but you may attach
|
|
152
|
+
* a tooltip to any other component. A render function can be used to adjust the control's styling on state changes (hover, focus, etc.).
|
|
153
|
+
*
|
|
154
|
+
* ### Positioning
|
|
155
|
+
* By default a Tooltip will be automatically positioned in a way that ensures it fits within the viewport.
|
|
156
|
+
* You may suggest a position with a prop - it will be used, unless the tooltip would end up outside the viewport.
|
|
157
|
+
*
|
|
158
|
+
* ### Usage criteria
|
|
159
|
+
* - You may use one when the information is useful only to a small percentage of users (ie. tech savvy people wouldn't need this info).
|
|
160
|
+
* - Tooltips may also be useful when vertical space is an issue.
|
|
161
|
+
*/
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
const Tooltip = ({
|
|
165
|
+
children,
|
|
166
|
+
content,
|
|
167
|
+
position = 'auto',
|
|
168
|
+
copy = 'en',
|
|
169
|
+
tokens,
|
|
170
|
+
variant
|
|
171
|
+
}) => {
|
|
172
|
+
const [isOpen, setIsOpen] = (0, _react.useState)(false);
|
|
173
|
+
const controlRef = (0, _react.useRef)();
|
|
174
|
+
const [controlLayout, setControlLayout] = (0, _react.useState)(null);
|
|
175
|
+
const [tooltipDimensions, setTooltipDimensions] = (0, _react.useState)(null);
|
|
176
|
+
const [windowDimensions, setWindowDimensions] = (0, _react.useState)(_Dimensions.default.get('window'));
|
|
177
|
+
const [tooltipPosition, setTooltipPosition] = (0, _react.useState)(null);
|
|
178
|
+
const getCopy = (0, _useCopy.default)({
|
|
179
|
+
dictionary: _dictionary.default,
|
|
180
|
+
copy
|
|
181
|
+
});
|
|
182
|
+
const themeTokens = (0, _ThemeProvider.useThemeTokens)('Tooltip', tokens, variant);
|
|
183
|
+
const {
|
|
184
|
+
arrowWidth,
|
|
185
|
+
arrowOffset
|
|
186
|
+
} = themeTokens;
|
|
187
|
+
(0, _react.useEffect)(() => {
|
|
188
|
+
const subscription = _Dimensions.default.addEventListener('change', ({
|
|
189
|
+
window
|
|
190
|
+
}) => {
|
|
191
|
+
setWindowDimensions(window);
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
return () => subscription === null || subscription === void 0 ? void 0 : subscription.remove();
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
const toggleIsOpen = () => setIsOpen(!isOpen);
|
|
198
|
+
|
|
199
|
+
const close = () => setIsOpen(false);
|
|
200
|
+
|
|
201
|
+
const getPressableState = ({
|
|
202
|
+
pressed,
|
|
203
|
+
hovered,
|
|
204
|
+
focused
|
|
205
|
+
}) => ({
|
|
206
|
+
pressed,
|
|
207
|
+
hover: hovered,
|
|
208
|
+
focus: focused
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
const onTooltipLayout = ({
|
|
212
|
+
nativeEvent: {
|
|
213
|
+
layout: {
|
|
214
|
+
width,
|
|
215
|
+
height
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}) => {
|
|
219
|
+
if (tooltipDimensions === null || tooltipDimensions.width !== width || tooltipDimensions.height !== height) {
|
|
220
|
+
setTooltipDimensions({
|
|
221
|
+
width: _Platform.default.select({
|
|
222
|
+
web: width + 0.3,
|
|
223
|
+
// avoids often unnecessary line breaks due to subpixel rendering of fonts
|
|
224
|
+
native: width
|
|
225
|
+
}),
|
|
226
|
+
height
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
|
|
231
|
+
(0, _react.useEffect)(() => {
|
|
232
|
+
if (isOpen) {
|
|
233
|
+
controlRef.current.measureInWindow((x, y, width, height) => {
|
|
234
|
+
setControlLayout({
|
|
235
|
+
x,
|
|
236
|
+
y,
|
|
237
|
+
width,
|
|
238
|
+
height
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
} else {
|
|
242
|
+
setControlLayout(null);
|
|
243
|
+
setTooltipDimensions(null);
|
|
244
|
+
setTooltipPosition(null);
|
|
245
|
+
}
|
|
246
|
+
}, [isOpen]);
|
|
247
|
+
(0, _react.useEffect)(() => {
|
|
248
|
+
setIsOpen(false);
|
|
249
|
+
}, [windowDimensions]);
|
|
250
|
+
(0, _react.useEffect)(() => {
|
|
251
|
+
if (tooltipPosition !== null && !(tooltipPosition !== null && tooltipPosition !== void 0 && tooltipPosition.isNormalized) || !isOpen || controlLayout === null || tooltipDimensions == null) {
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
const updatedPosition = (0, _getTooltipPosition.default)(position, {
|
|
256
|
+
controlLayout,
|
|
257
|
+
tooltipDimensions,
|
|
258
|
+
windowDimensions,
|
|
259
|
+
arrowWidth,
|
|
260
|
+
arrowOffset
|
|
261
|
+
}); // avoid ending up in an infinite normalization loop
|
|
262
|
+
|
|
263
|
+
if (tooltipPosition !== null && tooltipPosition !== void 0 && tooltipPosition.isNormalized && updatedPosition.isNormalized) {
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
setTooltipPosition(updatedPosition);
|
|
268
|
+
}, [isOpen, position, tooltipDimensions, controlLayout, windowDimensions, arrowWidth, arrowOffset, tooltipPosition]);
|
|
269
|
+
const control = children !== undefined ? children : defaultControl;
|
|
270
|
+
const pressableStyles = control === defaultControl ? _Platform.default.select({
|
|
271
|
+
web: {
|
|
272
|
+
outline: 'none'
|
|
273
|
+
}
|
|
274
|
+
}) : undefined;
|
|
275
|
+
const pressableHitSlop = control === defaultControl ? {
|
|
276
|
+
top: 10,
|
|
277
|
+
bottom: 10,
|
|
278
|
+
left: 10,
|
|
279
|
+
right: 10
|
|
280
|
+
} : undefined;
|
|
281
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_View.default, {
|
|
282
|
+
style: staticStyles.container,
|
|
283
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Pressable.default, {
|
|
284
|
+
onPress: toggleIsOpen,
|
|
285
|
+
ref: controlRef,
|
|
286
|
+
onBlur: close,
|
|
287
|
+
style: pressableStyles,
|
|
288
|
+
hitSlop: pressableHitSlop,
|
|
289
|
+
accessibilityLabel: getCopy('a11yText'),
|
|
290
|
+
accessibilityRole: "button",
|
|
291
|
+
children: typeof control === 'function' ? pressableState => control(getPressableState(pressableState), variant) : control
|
|
292
|
+
}), isOpen && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Backdrop.default, {
|
|
293
|
+
onPress: close,
|
|
294
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_View.default, {
|
|
295
|
+
style: [staticStyles.tooltip, selectTooltipShadowStyles(themeTokens), // applied separately so that it doesn't cover the arrow
|
|
296
|
+
tooltipPosition && selectTooltipPositionStyles(tooltipPosition), (tooltipPosition === null || (tooltipPosition === null || tooltipPosition === void 0 ? void 0 : tooltipPosition.isNormalized)) && staticStyles.tooltipHidden // visually hide the tooltip until we have a final measurement
|
|
297
|
+
],
|
|
298
|
+
onLayout: onTooltipLayout,
|
|
299
|
+
accessibilityRole: "alert",
|
|
300
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
|
|
301
|
+
style: [staticStyles.arrow, tooltipPosition && selectArrowStyles(themeTokens, tooltipPosition)]
|
|
302
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
|
|
303
|
+
style: selectTooltipStyles(themeTokens),
|
|
304
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Text.default, {
|
|
305
|
+
style: selectTextStyles(themeTokens),
|
|
306
|
+
children: content
|
|
307
|
+
})
|
|
308
|
+
})]
|
|
309
|
+
})
|
|
310
|
+
})]
|
|
311
|
+
});
|
|
312
|
+
};
|
|
313
|
+
|
|
314
|
+
Tooltip.propTypes = {
|
|
315
|
+
/**
|
|
316
|
+
* Used to render the control (i.e. tooltip trigger). If a render function is used it will receive the
|
|
317
|
+
* pressable state and tooltip variant as an argument.
|
|
318
|
+
*/
|
|
319
|
+
children: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.node]),
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* The message. Can be raw text or text components.
|
|
323
|
+
*/
|
|
324
|
+
content: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.node]),
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* Select english or french copy for the accessible label.
|
|
328
|
+
*/
|
|
329
|
+
copy: _propTypes.default.oneOf(['en', 'fr']),
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* Use to place the tooltip in a specific location (only if it fits within viewport).
|
|
333
|
+
*/
|
|
334
|
+
position: _propTypes.default.oneOf(['auto', 'above', 'right', 'below', 'left']),
|
|
335
|
+
tokens: (0, _utils.getTokensPropType)('Tooltip'),
|
|
336
|
+
variant: _utils.variantProp.propType
|
|
337
|
+
};
|
|
338
|
+
var _default = Tooltip;
|
|
339
|
+
exports.default = _default;
|
|
340
|
+
|
|
341
|
+
const staticStyles = _StyleSheet.default.create({
|
|
342
|
+
container: {
|
|
343
|
+
alignItems: 'flex-start'
|
|
344
|
+
},
|
|
345
|
+
tooltip: {
|
|
346
|
+
position: 'absolute',
|
|
347
|
+
maxWidth: 240,
|
|
348
|
+
top: 0,
|
|
349
|
+
left: 0
|
|
350
|
+
},
|
|
351
|
+
tooltipHidden: {
|
|
352
|
+
opacity: 0
|
|
353
|
+
},
|
|
354
|
+
arrow: {
|
|
355
|
+
position: 'absolute'
|
|
356
|
+
}
|
|
357
|
+
});
|