@telus-uds/components-base 0.0.2-prerelease.6 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +9 -0
- package/.ultra.cache.json +1 -1
- package/CHANGELOG.md +85 -0
- package/README.md +4 -2
- package/__fixtures__/Accessible.js +33 -0
- package/__fixtures__/Accessible.native.js +32 -0
- package/__fixtures__/test-utils.js +25 -0
- package/__fixtures__/testTheme.js +851 -57
- package/__tests__/ActivityIndicator/ActivityIndicator.test.jsx +1 -1
- package/__tests__/Button/ButtonBase.test.jsx +2 -31
- package/__tests__/Button/ButtonGroup.test.jsx +6 -7
- package/__tests__/Checkbox/Checkbox.test.jsx +94 -0
- package/__tests__/Checkbox/CheckboxGroup.test.jsx +246 -0
- package/__tests__/ExpandCollapse/ExpandCollapse.test.jsx +2 -2
- package/__tests__/HorizontalScroll/HorizontalScroll.test.jsx +164 -0
- package/__tests__/Icon/Icon.test.jsx +3 -3
- package/__tests__/IconButton/IconButton.test.jsx +52 -0
- package/__tests__/InputSupports/InputSupports.test.jsx +50 -0
- package/__tests__/Link/LinkBase.test.jsx +0 -14
- package/__tests__/List/List.test.jsx +60 -0
- package/__tests__/Modal/Modal.test.jsx +47 -0
- package/__tests__/Notification/Notification.test.jsx +20 -0
- package/__tests__/Pagination/Pagination.test.jsx +2 -2
- package/__tests__/Progress/Progress.test.jsx +79 -0
- package/__tests__/Radio/Radio.test.jsx +87 -0
- package/__tests__/Radio/RadioGroup.test.jsx +220 -0
- package/__tests__/RadioCard/RadioCard.test.jsx +87 -0
- package/__tests__/RadioCard/RadioCardGroup.test.jsx +246 -0
- package/__tests__/Search/Search.test.jsx +73 -0
- package/__tests__/Select/Select.test.jsx +94 -0
- package/__tests__/Skeleton/Skeleton.test.jsx +61 -0
- package/__tests__/StepTracker/StepTracker.test.jsx +94 -0
- package/__tests__/Tabs/Tabs.test.jsx +40 -0
- package/__tests__/Tags/Tags.test.jsx +327 -0
- package/__tests__/TextInput/TextArea.test.jsx +35 -0
- package/__tests__/TextInput/{TextInput.test.jsx → TextInputBase.test.jsx} +29 -50
- package/__tests__/ThemeProvider/ThemeProvider.test.jsx +77 -0
- package/__tests__/ThemeProvider/useThemeTokens.test.jsx +9 -5
- package/__tests__/ThemeProvider/utils/theme-tokens.test.js +41 -0
- package/__tests__/ToggleSwitch/ToggleSwitch.test.jsx +3 -2
- package/__tests__/utils/children.test.jsx +128 -0
- package/__tests__/utils/input.test.js +59 -1
- package/__tests__/utils/semantics.test.jsx +43 -0
- package/__tests__/utils/useCopy.test.js +14 -3
- package/babel.config.js +20 -0
- package/jest.config.js +8 -3
- package/lib/A11yInfoProvider/index.js +54 -26
- package/lib/A11yText/index.js +45 -17
- package/lib/ActivityIndicator/Spinner.js +81 -0
- package/lib/ActivityIndicator/Spinner.native.js +129 -91
- package/lib/ActivityIndicator/index.js +28 -12
- package/lib/ActivityIndicator/shared.js +27 -12
- package/lib/BaseProvider/index.js +34 -11
- package/lib/Box/Box.js +152 -35
- package/lib/Box/index.js +13 -2
- package/lib/Button/Button.js +41 -12
- package/lib/Button/ButtonBase.js +125 -97
- package/lib/Button/ButtonGroup.js +112 -89
- package/lib/Button/ButtonLink.js +48 -17
- package/lib/Button/index.js +31 -4
- package/lib/Button/propTypes.js +32 -9
- package/lib/Card/Card.js +38 -41
- package/lib/Card/CardBase.js +85 -0
- package/lib/Card/PressableCardBase.js +141 -0
- package/lib/Card/index.js +40 -2
- package/lib/Checkbox/Checkbox.js +355 -0
- package/lib/Checkbox/CheckboxGroup.js +241 -0
- package/lib/Checkbox/CheckboxInput.js +74 -0
- package/lib/Checkbox/CheckboxInput.native.js +14 -0
- package/lib/Checkbox/index.js +21 -0
- package/lib/Divider/Divider.js +59 -28
- package/lib/Divider/index.js +13 -2
- package/lib/ExpandCollapse/Accordion.js +26 -7
- package/lib/ExpandCollapse/Control.js +60 -31
- package/lib/ExpandCollapse/ExpandCollapse.js +50 -28
- package/lib/ExpandCollapse/Panel.js +83 -44
- package/lib/ExpandCollapse/index.js +25 -7
- package/lib/Feedback/Feedback.js +90 -39
- package/lib/Feedback/index.js +13 -2
- package/lib/Fieldset/Fieldset.js +165 -0
- package/lib/Fieldset/FieldsetContainer.js +46 -0
- package/lib/Fieldset/FieldsetContainer.native.js +38 -0
- package/lib/Fieldset/Legend.js +38 -0
- package/lib/Fieldset/Legend.native.js +48 -0
- package/lib/Fieldset/cssReset.js +21 -0
- package/lib/Fieldset/index.js +13 -0
- package/lib/FlexGrid/Col/Col.js +73 -41
- package/lib/FlexGrid/Col/index.js +13 -2
- package/lib/FlexGrid/FlexGrid.js +99 -49
- package/lib/FlexGrid/Row/Row.js +58 -30
- package/lib/FlexGrid/Row/index.js +13 -2
- package/lib/FlexGrid/helpers/index.js +9 -1
- package/lib/FlexGrid/index.js +13 -2
- package/lib/FlexGrid/providers/GutterContext.js +15 -3
- package/lib/HorizontalScroll/HorizontalScroll.js +200 -0
- package/lib/HorizontalScroll/HorizontalScrollButton.js +127 -0
- package/lib/HorizontalScroll/ScrollViewEnd.js +66 -0
- package/lib/HorizontalScroll/ScrollViewEnd.native.js +41 -0
- package/lib/HorizontalScroll/dictionary.js +18 -0
- package/lib/HorizontalScroll/index.js +35 -0
- package/lib/HorizontalScroll/itemPositions.js +128 -0
- package/lib/Icon/Icon.js +62 -50
- package/lib/Icon/IconText.js +101 -0
- package/lib/Icon/index.js +31 -3
- package/lib/IconButton/IconButton.js +140 -0
- package/lib/IconButton/index.js +13 -0
- package/lib/InputLabel/InputLabel.js +102 -40
- package/lib/InputLabel/LabelContent.js +41 -0
- package/lib/InputLabel/LabelContent.native.js +32 -6
- package/lib/InputLabel/index.js +13 -2
- package/lib/InputSupports/InputSupports.js +109 -0
- package/lib/InputSupports/index.js +13 -0
- package/lib/InputSupports/propTypes.js +66 -0
- package/lib/InputSupports/useInputSupports.js +41 -0
- package/lib/Link/ChevronLink.js +58 -31
- package/lib/Link/InlinePressable.js +56 -0
- package/lib/Link/InlinePressable.native.js +102 -0
- package/lib/Link/Link.js +39 -15
- package/lib/Link/LinkBase.js +126 -150
- package/lib/Link/TextButton.js +53 -18
- package/lib/Link/index.js +39 -4
- package/lib/List/List.js +81 -0
- package/lib/List/ListItem.js +245 -0
- package/lib/List/index.js +13 -0
- package/lib/Modal/Modal.js +231 -0
- package/lib/Modal/dictionary.js +16 -0
- package/lib/Modal/index.js +13 -0
- package/lib/Notification/Notification.js +216 -0
- package/lib/Notification/dictionary.js +15 -0
- package/lib/Notification/index.js +13 -0
- package/lib/Pagination/PageButton.js +58 -48
- package/lib/Pagination/Pagination.js +78 -43
- package/lib/Pagination/SideButton.js +79 -58
- package/lib/Pagination/dictionary.js +9 -2
- package/lib/Pagination/index.js +13 -2
- package/lib/Pagination/usePagination.js +12 -2
- package/lib/Progress/Progress.js +104 -0
- package/lib/Progress/ProgressBar.js +157 -0
- package/lib/Progress/ProgressBarBackground.js +61 -0
- package/lib/Progress/index.js +16 -0
- package/lib/Radio/Radio.js +293 -0
- package/lib/Radio/RadioButton.js +152 -0
- package/lib/Radio/RadioGroup.js +244 -0
- package/lib/Radio/RadioInput.js +76 -0
- package/lib/Radio/RadioInput.native.js +14 -0
- package/lib/Radio/index.js +21 -0
- package/lib/RadioCard/RadioCard.js +244 -0
- package/lib/RadioCard/RadioCardGroup.js +252 -0
- package/lib/RadioCard/index.js +21 -0
- package/lib/Search/Search.js +254 -0
- package/lib/Search/dictionary.js +19 -0
- package/lib/Search/index.js +13 -0
- package/lib/Select/Group.js +33 -0
- package/lib/Select/Group.native.js +25 -0
- package/lib/Select/Item.js +29 -0
- package/lib/Select/Item.native.js +19 -0
- package/lib/Select/Picker.js +84 -0
- package/lib/Select/Picker.native.js +130 -0
- package/lib/Select/Select.js +342 -0
- package/lib/Select/index.js +19 -0
- package/lib/SideNav/Item.js +63 -37
- package/lib/SideNav/ItemContent.js +41 -15
- package/lib/SideNav/ItemsGroup.js +55 -31
- package/lib/SideNav/SideNav.js +100 -73
- package/lib/SideNav/index.js +15 -1
- package/lib/Skeleton/Skeleton.js +137 -0
- package/lib/Skeleton/index.js +13 -0
- package/lib/Skeleton/skeleton.constant.js +12 -0
- package/lib/Skeleton/skeletonWebAnimation.js +27 -0
- package/lib/Skeleton/useSkeletonNativeAnimation.js +37 -0
- package/lib/Spacer/Spacer.js +49 -18
- package/lib/Spacer/index.js +13 -2
- package/lib/StackView/StackView.js +71 -31
- package/lib/StackView/StackWrap.js +43 -13
- package/lib/StackView/StackWrap.native.js +13 -2
- package/lib/StackView/StackWrapBox.js +76 -29
- package/lib/StackView/StackWrapGap.js +56 -26
- package/lib/StackView/common.js +23 -6
- package/lib/StackView/getStackedContent.js +47 -17
- package/lib/StackView/index.js +29 -5
- package/lib/StepTracker/Step.js +245 -0
- package/lib/StepTracker/StepTracker.js +202 -0
- package/lib/StepTracker/dictionary.js +17 -0
- package/lib/StepTracker/index.js +13 -0
- package/lib/Tabs/Tabs.js +124 -0
- package/lib/Tabs/TabsItem.js +238 -0
- package/lib/Tabs/index.js +13 -0
- package/lib/Tags/Tags.js +266 -0
- package/lib/Tags/index.js +13 -0
- package/lib/TextInput/TextArea.js +111 -0
- package/lib/TextInput/TextInput.js +50 -304
- package/lib/TextInput/TextInputBase.js +256 -0
- package/lib/TextInput/index.js +23 -2
- package/lib/TextInput/propTypes.js +42 -0
- package/lib/ThemeProvider/ThemeProvider.js +46 -18
- package/lib/ThemeProvider/index.js +61 -6
- package/lib/ThemeProvider/useSetTheme.js +19 -5
- package/lib/ThemeProvider/useTheme.js +13 -4
- package/lib/ThemeProvider/useThemeTokens.js +86 -19
- package/lib/ThemeProvider/utils/index.js +31 -2
- package/lib/ThemeProvider/utils/styles.js +50 -14
- package/lib/ThemeProvider/utils/theme-tokens.js +121 -12
- package/lib/ToggleSwitch/ToggleSwitch.js +86 -57
- package/lib/ToggleSwitch/index.js +13 -2
- package/lib/Tooltip/{Backdrop.web.js → Backdrop.js} +20 -8
- package/lib/Tooltip/Backdrop.native.js +39 -15
- package/lib/Tooltip/Tooltip.js +117 -74
- package/lib/Tooltip/dictionary.js +9 -2
- package/lib/Tooltip/getTooltipPosition.js +9 -1
- package/lib/Tooltip/index.js +13 -2
- package/lib/TooltipButton/TooltipButton.js +57 -38
- package/lib/TooltipButton/index.js +13 -2
- package/lib/Typography/Typography.js +86 -55
- package/lib/Typography/index.js +13 -2
- package/lib/ViewportProvider/ViewportProvider.js +34 -13
- package/lib/ViewportProvider/index.js +28 -3
- package/lib/ViewportProvider/useViewport.js +15 -3
- package/lib/ViewportProvider/useViewportListener.js +24 -10
- package/lib/index.js +539 -26
- package/lib/utils/a11y/index.js +31 -0
- package/lib/utils/a11y/semantics.js +173 -0
- package/lib/utils/a11y/textSize.js +49 -0
- package/lib/utils/animation/index.js +15 -2
- package/lib/utils/animation/useVerticalExpandAnimation.js +27 -10
- package/lib/utils/children.js +134 -0
- package/lib/utils/index.js +163 -7
- package/lib/utils/info/index.js +19 -0
- package/lib/utils/info/platform/index.js +23 -0
- package/lib/utils/info/platform/platform.android.js +8 -0
- package/lib/utils/info/platform/platform.ios.js +8 -0
- package/lib/utils/info/platform/platform.js +8 -0
- package/lib/utils/info/platform/platform.native.js +11 -0
- package/lib/utils/info/versions.js +16 -0
- package/lib/utils/input.js +53 -25
- package/lib/utils/pressability.js +120 -0
- package/lib/utils/propTypes.js +338 -132
- package/lib/utils/useCopy.js +40 -5
- package/lib/utils/useHash.js +52 -0
- package/lib/utils/useHash.native.js +15 -0
- package/lib/utils/useResponsiveProp.js +21 -9
- package/lib/utils/useSpacingScale.js +19 -9
- package/lib/utils/useUniqueId.js +12 -3
- package/package.json +16 -10
- package/release-context.json +4 -4
- package/src/A11yText/index.jsx +6 -4
- package/src/ActivityIndicator/{Spinner.web.jsx → Spinner.jsx} +5 -3
- package/src/ActivityIndicator/Spinner.native.jsx +5 -3
- package/src/Box/Box.jsx +131 -39
- package/src/Button/Button.jsx +13 -6
- package/src/Button/ButtonBase.jsx +134 -125
- package/src/Button/ButtonGroup.jsx +85 -86
- package/src/Button/ButtonLink.jsx +22 -7
- package/src/Button/propTypes.js +12 -2
- package/src/Card/Card.jsx +5 -31
- package/src/Card/CardBase.jsx +58 -0
- package/src/Card/PressableCardBase.jsx +119 -0
- package/src/Card/index.js +3 -0
- package/src/Checkbox/Checkbox.jsx +284 -0
- package/src/Checkbox/CheckboxGroup.jsx +206 -0
- package/src/Checkbox/CheckboxInput.jsx +55 -0
- package/src/Checkbox/CheckboxInput.native.jsx +6 -0
- package/src/Checkbox/index.js +5 -0
- package/src/Divider/Divider.jsx +7 -4
- package/src/ExpandCollapse/Accordion.jsx +3 -2
- package/src/ExpandCollapse/Control.jsx +40 -43
- package/src/ExpandCollapse/ExpandCollapse.jsx +26 -23
- package/src/ExpandCollapse/Panel.jsx +69 -63
- package/src/Feedback/Feedback.jsx +42 -30
- package/src/Fieldset/Fieldset.jsx +136 -0
- package/src/Fieldset/FieldsetContainer.jsx +31 -0
- package/src/Fieldset/FieldsetContainer.native.jsx +19 -0
- package/src/Fieldset/Legend.jsx +21 -0
- package/src/Fieldset/Legend.native.jsx +27 -0
- package/src/Fieldset/cssReset.js +14 -0
- package/src/Fieldset/index.js +3 -0
- package/src/FlexGrid/Col/Col.jsx +139 -132
- package/src/FlexGrid/FlexGrid.jsx +79 -51
- package/src/FlexGrid/Row/Row.jsx +55 -48
- package/src/HorizontalScroll/HorizontalScroll.jsx +168 -0
- package/src/HorizontalScroll/HorizontalScrollButton.jsx +105 -0
- package/src/HorizontalScroll/ScrollViewEnd.jsx +53 -0
- package/src/HorizontalScroll/ScrollViewEnd.native.jsx +24 -0
- package/src/HorizontalScroll/dictionary.js +11 -0
- package/src/HorizontalScroll/index.js +17 -0
- package/src/HorizontalScroll/itemPositions.js +101 -0
- package/src/Icon/Icon.jsx +46 -49
- package/src/Icon/IconText.jsx +68 -0
- package/src/Icon/index.js +3 -2
- package/src/IconButton/IconButton.jsx +114 -0
- package/src/IconButton/index.js +3 -0
- package/src/InputLabel/InputLabel.jsx +57 -35
- package/src/InputLabel/LabelContent.jsx +21 -0
- package/src/InputLabel/LabelContent.native.jsx +11 -2
- package/src/InputSupports/InputSupports.jsx +70 -0
- package/src/InputSupports/index.js +3 -0
- package/src/InputSupports/propTypes.js +44 -0
- package/src/InputSupports/useInputSupports.js +30 -0
- package/src/Link/ChevronLink.jsx +34 -21
- package/src/Link/InlinePressable.jsx +39 -0
- package/src/Link/InlinePressable.native.jsx +75 -0
- package/src/Link/Link.jsx +23 -13
- package/src/Link/LinkBase.jsx +98 -170
- package/src/Link/TextButton.jsx +37 -16
- package/src/Link/index.js +2 -1
- package/src/List/List.jsx +48 -0
- package/src/List/ListItem.jsx +182 -0
- package/src/List/index.js +3 -0
- package/src/Modal/Modal.jsx +190 -0
- package/src/Modal/dictionary.js +9 -0
- package/src/Modal/index.js +3 -0
- package/src/Notification/Notification.jsx +164 -0
- package/src/Notification/dictionary.js +8 -0
- package/src/Notification/index.js +3 -0
- package/src/Pagination/PageButton.jsx +42 -49
- package/src/Pagination/Pagination.jsx +88 -92
- package/src/Pagination/SideButton.jsx +58 -66
- package/src/Progress/Progress.jsx +78 -0
- package/src/Progress/ProgressBar.jsx +123 -0
- package/src/Progress/ProgressBarBackground.jsx +36 -0
- package/src/Progress/index.js +6 -0
- package/src/Radio/Radio.jsx +240 -0
- package/src/Radio/RadioButton.jsx +142 -0
- package/src/Radio/RadioGroup.jsx +209 -0
- package/src/Radio/RadioInput.jsx +57 -0
- package/src/Radio/RadioInput.native.jsx +6 -0
- package/src/Radio/index.js +5 -0
- package/src/RadioCard/RadioCard.jsx +198 -0
- package/src/RadioCard/RadioCardGroup.jsx +218 -0
- package/src/RadioCard/index.js +5 -0
- package/src/Search/Search.jsx +225 -0
- package/src/Search/dictionary.js +12 -0
- package/src/Search/index.js +3 -0
- package/src/Select/Group.jsx +15 -0
- package/src/Select/Group.native.jsx +14 -0
- package/src/Select/Item.jsx +11 -0
- package/src/Select/Item.native.jsx +10 -0
- package/src/Select/Picker.jsx +74 -0
- package/src/Select/Picker.native.jsx +102 -0
- package/src/Select/Select.jsx +298 -0
- package/src/Select/index.js +8 -0
- package/src/SideNav/Item.jsx +54 -47
- package/src/SideNav/ItemsGroup.jsx +50 -43
- package/src/SideNav/SideNav.jsx +68 -60
- package/src/Skeleton/Skeleton.jsx +94 -0
- package/src/Skeleton/index.js +3 -0
- package/src/Skeleton/skeleton.constant.js +3 -0
- package/src/Skeleton/skeletonWebAnimation.js +13 -0
- package/src/Skeleton/useSkeletonNativeAnimation.js +27 -0
- package/src/Spacer/Spacer.jsx +11 -4
- package/src/StackView/StackView.jsx +53 -23
- package/src/StackView/StackWrap.jsx +16 -7
- package/src/StackView/StackWrapBox.jsx +62 -28
- package/src/StackView/StackWrapGap.jsx +46 -24
- package/src/StackView/common.jsx +3 -2
- package/src/StackView/getStackedContent.jsx +8 -2
- package/src/StepTracker/Step.jsx +202 -0
- package/src/StepTracker/StepTracker.jsx +174 -0
- package/src/StepTracker/dictionary.js +10 -0
- package/src/StepTracker/index.js +3 -0
- package/src/Tabs/Tabs.jsx +97 -0
- package/src/Tabs/TabsItem.jsx +212 -0
- package/src/Tabs/index.js +3 -0
- package/src/Tags/Tags.jsx +219 -0
- package/src/Tags/index.js +3 -0
- package/src/TextInput/TextArea.jsx +79 -0
- package/src/TextInput/TextInput.jsx +18 -284
- package/src/TextInput/TextInputBase.jsx +217 -0
- package/src/TextInput/index.js +2 -1
- package/src/TextInput/propTypes.js +29 -0
- package/src/ThemeProvider/ThemeProvider.jsx +11 -7
- package/src/ThemeProvider/useSetTheme.js +4 -0
- package/src/ThemeProvider/useThemeTokens.js +56 -5
- package/src/ThemeProvider/utils/styles.js +18 -5
- package/src/ThemeProvider/utils/theme-tokens.js +74 -5
- package/src/ToggleSwitch/ToggleSwitch.jsx +51 -53
- package/src/Tooltip/{Backdrop.web.jsx → Backdrop.jsx} +0 -0
- package/src/Tooltip/Tooltip.jsx +135 -131
- package/src/TooltipButton/TooltipButton.jsx +23 -27
- package/src/Typography/Typography.jsx +72 -59
- package/src/index.js +31 -3
- package/src/utils/a11y/index.js +2 -0
- package/src/utils/a11y/semantics.js +162 -0
- package/src/utils/a11y/textSize.js +30 -0
- package/src/utils/children.jsx +119 -0
- package/src/utils/index.js +6 -0
- package/src/utils/info/index.js +8 -0
- package/src/utils/info/platform/index.js +11 -0
- package/src/utils/info/platform/platform.android.js +1 -0
- package/src/utils/info/platform/platform.ios.js +1 -0
- package/src/utils/info/platform/platform.js +1 -0
- package/src/utils/info/platform/platform.native.js +4 -0
- package/src/utils/info/versions.js +6 -0
- package/src/utils/input.js +36 -25
- package/src/utils/pressability.js +96 -0
- package/src/utils/propTypes.js +291 -90
- package/src/utils/useCopy.js +30 -4
- package/src/utils/useHash.js +39 -0
- package/src/utils/useHash.native.js +6 -0
- package/stories/A11yText/A11yText.stories.jsx +6 -10
- package/stories/ActivityIndicator/ActivityIndicator.stories.jsx +1 -1
- package/stories/Box/Box.stories.jsx +1 -1
- package/stories/Button/Button.stories.jsx +7 -2
- package/stories/Button/ButtonGroup.stories.jsx +1 -1
- package/stories/Button/ButtonLink.stories.jsx +1 -1
- package/stories/Card/Card.stories.jsx +1 -1
- package/stories/Checkbox/Checkbox.stories.jsx +94 -0
- package/stories/Divider/Divider.stories.jsx +1 -1
- package/stories/ExpandCollapse/ExpandCollapse.stories.jsx +2 -2
- package/stories/Feedback/Feedback.stories.jsx +5 -6
- package/stories/FlexGrid/01 FlexGrid.stories.jsx +1 -1
- package/stories/FlexGrid/02 Row.stories.jsx +1 -1
- package/stories/FlexGrid/03 Col.stories.jsx +1 -1
- package/stories/Icon/Icon.stories.jsx +27 -7
- package/stories/IconButton/IconButton.stories.jsx +50 -0
- package/stories/InputLabel/InputLabel.stories.jsx +1 -1
- package/stories/Link/ChevronLink.stories.jsx +1 -1
- package/stories/Link/Link.stories.jsx +28 -18
- package/stories/Link/TextButton.stories.jsx +1 -1
- package/stories/List/List.stories.jsx +117 -0
- package/stories/Modal/Modal.stories.jsx +29 -0
- package/stories/Notification/Notification.stories.jsx +82 -0
- package/stories/Pagination/Pagination.stories.jsx +1 -1
- package/stories/Progress/Progress.stories.jsx +93 -0
- package/stories/Radio/Radio.stories.jsx +100 -0
- package/stories/RadioCard/RadioCard.stories.jsx +98 -0
- package/stories/Search/Search.stories.jsx +16 -0
- package/stories/Select/Select.stories.jsx +55 -0
- package/stories/SideNav/SideNav.stories.jsx +1 -1
- package/stories/SideNav/SideNavItem.stories.jsx +1 -1
- package/stories/SideNav/SideNavItemsGroup.stories.jsx +1 -1
- package/stories/Skeleton/Skeleton.stories.jsx +36 -0
- package/stories/Spacer/Spacer.stories.jsx +1 -1
- package/stories/StackView/StackView.stories.jsx +1 -1
- package/stories/StackView/StackWrap.stories.jsx +1 -1
- package/stories/StepTracker/StepTracker.stories.jsx +71 -0
- package/stories/Tabs/Tabs.stories.jsx +97 -0
- package/stories/Tags/Tags.stories.jsx +69 -0
- package/stories/TextInput/TextArea.stories.jsx +100 -0
- package/stories/TextInput/TextInput.stories.jsx +1 -1
- package/stories/ToggleSwitch/ToggleSwitch.stories.jsx +1 -1
- package/stories/Tooltip/Tooltip.stories.jsx +1 -1
- package/stories/TooltipButton/TooltipButton.stories.jsx +1 -1
- package/stories/Typography/Typography.stories.jsx +1 -1
- package/stories/{platform-supports.web.jsx → platform-supports.jsx} +1 -1
- package/stories/supports.jsx +38 -4
- package/__fixtures__/accessible.icon.svg +0 -6
- package/babel.config.json +0 -8
- package/docs/Contributing.stories.mdx +0 -9
- package/docs/Fonts.stories.mdx +0 -104
- package/docs/Icons.stories.mdx +0 -144
- package/docs/Introduction.stories.mdx +0 -9
- package/lib/ActivityIndicator/Spinner.web.js +0 -55
- package/lib/InputLabel/LabelContent.web.js +0 -17
- package/lib/config/svgr-icons-web.js +0 -9
- package/lib/config/svgr-icons.js +0 -52
- package/src/InputLabel/LabelContent.web.jsx +0 -13
- package/src/config/svgr-icons-web.js +0 -11
- package/src/config/svgr-icons.js +0 -46
|
@@ -0,0 +1,102 @@
|
|
|
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 _Text = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Text"));
|
|
11
|
+
|
|
12
|
+
var _TouchableWithoutFeedback = _interopRequireDefault(require("react-native-web/dist/cjs/exports/TouchableWithoutFeedback"));
|
|
13
|
+
|
|
14
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
15
|
+
|
|
16
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
+
|
|
18
|
+
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); }
|
|
19
|
+
|
|
20
|
+
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; }
|
|
21
|
+
|
|
22
|
+
/* eslint-disable camelcase */
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @typedef {import('react-native').PressableProps} PressableProps
|
|
26
|
+
*/
|
|
27
|
+
// TouchableWithoutFeedback and Pressable have similar but not identical props APIs
|
|
28
|
+
const pressablePropsToTouchable = ({
|
|
29
|
+
unstable_pressDelay,
|
|
30
|
+
android_disableSound,
|
|
31
|
+
android_ripple,
|
|
32
|
+
// Unsupported, discard it
|
|
33
|
+
...props
|
|
34
|
+
}) => ({ ...props,
|
|
35
|
+
touchSoundDisabled: android_disableSound,
|
|
36
|
+
delayPressIn: unstable_pressDelay
|
|
37
|
+
});
|
|
38
|
+
/**
|
|
39
|
+
* InlinePressable is an alternative to React Native's Pressable that works better when nested
|
|
40
|
+
* inline inside Text. It accepts the same props as React Native's Pressable.
|
|
41
|
+
*
|
|
42
|
+
* There are a lot of React Native bugs around Views/Pressables nested in Text, e.g.:
|
|
43
|
+
*
|
|
44
|
+
* - https://github.com/facebook/react-native/issues/23601#issuecomment-468069822
|
|
45
|
+
* - https://github.com/facebook/react-native/issues/30375
|
|
46
|
+
* - https://github.com/facebook/react-native/issues/31955
|
|
47
|
+
*
|
|
48
|
+
* On Native, these can be avoided using a `Text` wrapped in a `TouchableWithoutFeedback`; the latter
|
|
49
|
+
* injects additional handlers such as onPressIn to `Text`, resulting in a tree that is purely `Text`.
|
|
50
|
+
*
|
|
51
|
+
* Note that this should only be used on Native, not Web, because React Navigation's Web navigation
|
|
52
|
+
* functions don't work in Touchables (but do work in Pressable) due to different event handling.
|
|
53
|
+
*
|
|
54
|
+
* @param {PressableProps} PressableProps
|
|
55
|
+
*/
|
|
56
|
+
// React Native exports prop Types but not propTypes, use JSDoc types here rather than duplicate RN
|
|
57
|
+
// eslint-disable-next-line react/prop-types
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
const InlinePressable = /*#__PURE__*/(0, _react.forwardRef)(({
|
|
61
|
+
onPress,
|
|
62
|
+
children,
|
|
63
|
+
style,
|
|
64
|
+
...rest
|
|
65
|
+
}, ref) => {
|
|
66
|
+
const [isFocused, setIsFocused] = (0, _react.useState)(false);
|
|
67
|
+
|
|
68
|
+
const handleFocus = () => setIsFocused(true);
|
|
69
|
+
|
|
70
|
+
const handleBlur = () => setIsFocused(false);
|
|
71
|
+
|
|
72
|
+
const [isPressed, setIsPressed] = (0, _react.useState)(false);
|
|
73
|
+
|
|
74
|
+
const handlePressIn = () => setIsPressed(true);
|
|
75
|
+
|
|
76
|
+
const handlePressOut = () => setIsPressed(false);
|
|
77
|
+
|
|
78
|
+
const pressState = {
|
|
79
|
+
pressed: isPressed,
|
|
80
|
+
focus: isFocused,
|
|
81
|
+
// limited support on native
|
|
82
|
+
hover: false // not yet supported on native
|
|
83
|
+
|
|
84
|
+
};
|
|
85
|
+
const currentStyle = typeof style === 'function' ? style(pressState) : style;
|
|
86
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TouchableWithoutFeedback.default, {
|
|
87
|
+
onPress: onPress,
|
|
88
|
+
onPressIn: handlePressIn,
|
|
89
|
+
onPressOut: handlePressOut,
|
|
90
|
+
onFocus: handleFocus,
|
|
91
|
+
onBlur: handleBlur,
|
|
92
|
+
ref: ref,
|
|
93
|
+
...pressablePropsToTouchable(rest),
|
|
94
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Text.default, {
|
|
95
|
+
style: currentStyle,
|
|
96
|
+
children: typeof children === 'function' ? children(pressState) : children
|
|
97
|
+
})
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
InlinePressable.displayName = 'InlinePressable';
|
|
101
|
+
var _default = InlinePressable;
|
|
102
|
+
exports.default = _default;
|
package/lib/Link/Link.js
CHANGED
|
@@ -1,21 +1,45 @@
|
|
|
1
|
-
|
|
2
|
-
import LinkBase from './LinkBase';
|
|
1
|
+
"use strict";
|
|
3
2
|
|
|
4
|
-
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
|
|
10
|
+
var _ThemeProvider = require("../ThemeProvider");
|
|
11
|
+
|
|
12
|
+
var _LinkBase = _interopRequireDefault(require("./LinkBase"));
|
|
13
|
+
|
|
14
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
15
|
+
|
|
16
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
+
|
|
18
|
+
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); }
|
|
19
|
+
|
|
20
|
+
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; }
|
|
21
|
+
|
|
22
|
+
const Link = /*#__PURE__*/(0, _react.forwardRef)(({
|
|
5
23
|
href,
|
|
6
24
|
children,
|
|
7
25
|
accessibilityRole = 'link',
|
|
8
26
|
variant = {},
|
|
27
|
+
tokens,
|
|
28
|
+
dataSet,
|
|
9
29
|
...linkProps
|
|
10
|
-
}) =>
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
};
|
|
21
|
-
|
|
30
|
+
}, ref) => {
|
|
31
|
+
const getTokens = (0, _ThemeProvider.useThemeTokensCallback)('Link', tokens, variant);
|
|
32
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_LinkBase.default, {
|
|
33
|
+
href: href,
|
|
34
|
+
accessibilityRole: accessibilityRole,
|
|
35
|
+
tokens: getTokens,
|
|
36
|
+
ref: ref,
|
|
37
|
+
dataSet: dataSet,
|
|
38
|
+
...linkProps,
|
|
39
|
+
children: children
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
Link.displayName = 'Link';
|
|
43
|
+
Link.propTypes = _LinkBase.default.propTypes;
|
|
44
|
+
var _default = Link;
|
|
45
|
+
exports.default = _default;
|
package/lib/Link/LinkBase.js
CHANGED
|
@@ -1,42 +1,74 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import { useThemeTokens, applyTextStyles } from '../ThemeProvider';
|
|
6
|
-
|
|
7
|
-
const selectContentStyles = ({
|
|
8
|
-
color
|
|
9
|
-
}) => ({
|
|
10
|
-
color
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
11
5
|
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireWildcard(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 _Platform = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Platform"));
|
|
15
|
+
|
|
16
|
+
var _StyleSheet = _interopRequireDefault(require("react-native-web/dist/cjs/exports/StyleSheet"));
|
|
17
|
+
|
|
18
|
+
var _propTypes2 = require("../utils/propTypes");
|
|
19
|
+
|
|
20
|
+
var _pressability = require("../utils/pressability");
|
|
21
|
+
|
|
22
|
+
var _InlinePressable = _interopRequireDefault(require("./InlinePressable"));
|
|
23
|
+
|
|
24
|
+
var _ThemeProvider = require("../ThemeProvider");
|
|
25
|
+
|
|
26
|
+
var _Icon = require("../Icon");
|
|
27
|
+
|
|
28
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
29
|
+
|
|
30
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
31
|
+
|
|
32
|
+
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); }
|
|
33
|
+
|
|
34
|
+
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; }
|
|
12
35
|
|
|
13
36
|
const selectOuterBorderStyles = ({
|
|
14
37
|
outerBorderColor,
|
|
15
38
|
outerBorderWidth,
|
|
16
39
|
outerBorderGap,
|
|
17
|
-
|
|
40
|
+
borderRadius,
|
|
18
41
|
outerBorderOutline
|
|
19
42
|
}) => // A view wrapper with a border on native messes up inline text alignment
|
|
20
43
|
// so for now make focus styles strictly web-only
|
|
21
|
-
|
|
22
|
-
margin: -1 * (outerBorderGap + outerBorderWidth) || 0,
|
|
23
|
-
padding: outerBorderGap,
|
|
44
|
+
_Platform.default.OS === 'web' ? {
|
|
24
45
|
// Allow theme to define outline, or, turn off outline and use border if rounded corners required
|
|
25
46
|
outline: outerBorderOutline,
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
47
|
+
...(0, _ThemeProvider.applyOuterBorder)({
|
|
48
|
+
outerBorderColor,
|
|
49
|
+
outerBorderWidth,
|
|
50
|
+
outerBorderGap,
|
|
51
|
+
borderRadius
|
|
52
|
+
}),
|
|
29
53
|
// Stops focus ring stretching horizontally if parent has display: block
|
|
30
54
|
// width: fit-content isn't supported on Firefox; can't cascade props like CSS `width: fit-content; width: --moz-fit-content;`
|
|
31
55
|
display: 'inline-flex'
|
|
32
56
|
} : {};
|
|
33
57
|
|
|
34
58
|
const selectTextStyles = ({
|
|
59
|
+
color,
|
|
35
60
|
textLine,
|
|
36
61
|
textLineStyle
|
|
37
62
|
}) => ({
|
|
63
|
+
color,
|
|
38
64
|
textDecorationLine: textLine,
|
|
39
|
-
textDecorationStyle: textLineStyle
|
|
65
|
+
textDecorationStyle: textLineStyle,
|
|
66
|
+
..._Platform.default.select({
|
|
67
|
+
web: {
|
|
68
|
+
// TODO: https://github.com/telus/universal-design-system/issues/487
|
|
69
|
+
transition: 'color 200ms'
|
|
70
|
+
}
|
|
71
|
+
})
|
|
40
72
|
});
|
|
41
73
|
|
|
42
74
|
const selectBlockStyles = ({
|
|
@@ -44,27 +76,23 @@ const selectBlockStyles = ({
|
|
|
44
76
|
blockFontSize,
|
|
45
77
|
blockLineHeight,
|
|
46
78
|
blockFontName
|
|
47
|
-
}) => applyTextStyles({
|
|
79
|
+
}) => (0, _ThemeProvider.applyTextStyles)({
|
|
48
80
|
fontWeight: blockFontWeight,
|
|
49
81
|
fontSize: blockFontSize,
|
|
50
82
|
lineHeight: blockLineHeight,
|
|
51
83
|
fontName: blockFontName
|
|
52
84
|
});
|
|
53
85
|
|
|
54
|
-
const
|
|
86
|
+
const selectIconTokens = ({
|
|
87
|
+
color,
|
|
55
88
|
iconSize,
|
|
56
|
-
iconGapBefore,
|
|
57
|
-
iconGapAfter,
|
|
58
|
-
iconScale,
|
|
59
89
|
iconTranslateX,
|
|
60
90
|
iconTranslateY
|
|
61
91
|
}) => ({
|
|
62
|
-
|
|
92
|
+
color,
|
|
63
93
|
translateX: iconTranslateX,
|
|
64
94
|
translateY: iconTranslateY,
|
|
65
|
-
size: iconSize
|
|
66
|
-
gapBefore: iconGapBefore,
|
|
67
|
-
gapAfter: iconGapAfter
|
|
95
|
+
size: iconSize
|
|
68
96
|
});
|
|
69
97
|
/**
|
|
70
98
|
* Renders a pressable text link, with optional icon. This is rendered as a block element
|
|
@@ -90,163 +118,106 @@ const selectIconStyles = ({
|
|
|
90
118
|
*/
|
|
91
119
|
|
|
92
120
|
|
|
93
|
-
const LinkBase = ({
|
|
121
|
+
const LinkBase = /*#__PURE__*/(0, _react.forwardRef)(({
|
|
94
122
|
href,
|
|
95
123
|
onPress,
|
|
96
124
|
icon,
|
|
97
125
|
iconPosition = icon ? 'left' : undefined,
|
|
98
|
-
|
|
126
|
+
iconProps,
|
|
99
127
|
variant,
|
|
100
|
-
tokens,
|
|
128
|
+
tokens = {},
|
|
101
129
|
children,
|
|
102
130
|
accessibilityRole = 'link',
|
|
131
|
+
dataSet,
|
|
103
132
|
...props
|
|
104
|
-
}) => {
|
|
105
|
-
const handlePress = linkProps.handleHref({
|
|
106
|
-
href,
|
|
107
|
-
onPress
|
|
108
|
-
});
|
|
109
|
-
const [isFocused, setIsFocused] = useState(false);
|
|
110
|
-
|
|
111
|
-
const handleFocus = () => setIsFocused(true);
|
|
112
|
-
|
|
113
|
-
const handleBlur = () => setIsFocused(false);
|
|
114
|
-
|
|
115
|
-
const [isHovered, setIsHovered] = useState(false);
|
|
116
|
-
|
|
117
|
-
const handleHoverIn = () => setIsHovered(true);
|
|
118
|
-
|
|
119
|
-
const handleHoverOut = () => setIsHovered(false);
|
|
120
|
-
|
|
121
|
-
const [isPressed, setIsPressed] = useState(false);
|
|
122
|
-
|
|
123
|
-
const handlePressIn = () => setIsPressed(true);
|
|
124
|
-
|
|
125
|
-
const handlePressOut = () => setIsPressed(false);
|
|
126
|
-
|
|
133
|
+
}, ref) => {
|
|
127
134
|
const {
|
|
128
135
|
hrefAttrs,
|
|
129
136
|
rest
|
|
130
|
-
} = hrefAttrsProp.bundle(props);
|
|
131
|
-
|
|
137
|
+
} = _propTypes2.hrefAttrsProp.bundle(props);
|
|
138
|
+
|
|
139
|
+
const linkPropSet = _propTypes2.linkProps.select({
|
|
132
140
|
accessibilityRole,
|
|
133
141
|
href,
|
|
134
|
-
onPress:
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
onMouseEnter: handleHoverIn,
|
|
140
|
-
onMouseLeave: handleHoverOut,
|
|
141
|
-
...hrefAttrsProp.spread(hrefAttrs),
|
|
142
|
+
onPress: _propTypes2.linkProps.handleHref({
|
|
143
|
+
href,
|
|
144
|
+
onPress
|
|
145
|
+
}),
|
|
146
|
+
hrefAttrs,
|
|
142
147
|
...rest
|
|
143
148
|
});
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
hover: isHovered,
|
|
147
|
-
pressed: isPressed,
|
|
149
|
+
|
|
150
|
+
const resolveLinkTokens = pressState => (0, _pressability.resolvePressableTokens)(tokens, pressState, {
|
|
148
151
|
iconPosition
|
|
152
|
+
}); // On web, this makes focus rings wrap only the link, not the entire block
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
const blockLeftStyle = _Platform.default.OS === 'web' && staticStyles.blockLeft;
|
|
156
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_InlinePressable.default, { ...linkPropSet,
|
|
157
|
+
ref: ref,
|
|
158
|
+
dataSet: dataSet,
|
|
159
|
+
style: linkState => {
|
|
160
|
+
const themeTokens = resolveLinkTokens(linkState);
|
|
161
|
+
const outerBorderStyles = selectOuterBorderStyles(themeTokens);
|
|
162
|
+
const hasIcon = Boolean(icon || themeTokens.icon);
|
|
163
|
+
return [outerBorderStyles, blockLeftStyle, hasIcon && staticStyles.rowContainer];
|
|
164
|
+
},
|
|
165
|
+
children: linkState => {
|
|
166
|
+
const themeTokens = resolveLinkTokens(linkState);
|
|
167
|
+
const textStyles = selectTextStyles(themeTokens);
|
|
168
|
+
const iconTokens = selectIconTokens(themeTokens); // TODO: may need to apply some smarter text inheritance here if inline to avoid native
|
|
169
|
+
// issues like double-application of line heights breaking align-items: baseline
|
|
170
|
+
|
|
171
|
+
const blockTextStyles = selectBlockStyles(themeTokens);
|
|
172
|
+
const IconComponent = icon || themeTokens.icon;
|
|
173
|
+
const {
|
|
174
|
+
iconSpace
|
|
175
|
+
} = themeTokens;
|
|
176
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Icon.IconText, {
|
|
177
|
+
icon: IconComponent,
|
|
178
|
+
iconPosition: iconPosition,
|
|
179
|
+
space: iconSpace,
|
|
180
|
+
iconProps: { ...iconProps,
|
|
181
|
+
tokens: iconTokens
|
|
182
|
+
},
|
|
183
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Text.default, {
|
|
184
|
+
style: [textStyles, blockTextStyles, staticStyles.baseline],
|
|
185
|
+
children: children
|
|
186
|
+
})
|
|
187
|
+
});
|
|
188
|
+
}
|
|
149
189
|
});
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
const iconStyles = selectIconStyles(themeTokens); // TODO: re-apply support for inline links
|
|
157
|
-
|
|
158
|
-
const isNested = false; // On web, this makes focus rings wrap only the link, not the entire block
|
|
159
|
-
|
|
160
|
-
const blockLeftStyle = Platform.OS === 'web' && staticStyles.blockLeft; // Apply typographic text styles if not inheriting, and block positioning if a block
|
|
161
|
-
|
|
162
|
-
const blockTextStyles = !isNested && blockStyles;
|
|
163
|
-
|
|
164
|
-
if (!hasIcon) {
|
|
165
|
-
// onPressIn / onPressOut only work if on TouchableWithoutFeedback, onFocus only works if on Text
|
|
166
|
-
const {
|
|
167
|
-
onPress: _onPress,
|
|
168
|
-
onPressIn,
|
|
169
|
-
onPressOut,
|
|
170
|
-
...textProps
|
|
171
|
-
} = linkPropSet;
|
|
172
|
-
return (
|
|
173
|
-
/*#__PURE__*/
|
|
174
|
-
// TouchableWithoutFeedback modifies its child so this stack is all (touchable) Text: no Views
|
|
175
|
-
React.createElement(TouchableWithoutFeedback, {
|
|
176
|
-
onPressIn: onPressIn,
|
|
177
|
-
onPressOut: onPressOut,
|
|
178
|
-
onPress: _onPress
|
|
179
|
-
}, /*#__PURE__*/React.createElement(Text, Object.assign({}, textProps, {
|
|
180
|
-
style: [outerBorderStyles, blockLeftStyle, contentStyles, blockTextStyles, textStyles]
|
|
181
|
-
}), children))
|
|
182
|
-
);
|
|
183
|
-
} // Scale icon with text, but with a cap so text isn't squashed at large scales
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
const iconScale = Math.min(PixelRatio.getFontScale(), 2);
|
|
187
|
-
const iconTokens = {
|
|
188
|
-
size: iconStyles.size ? iconStyles.size * iconScale : undefined,
|
|
189
|
-
color: contentStyles.color ?? undefined,
|
|
190
|
-
scale: iconStyles.scale ?? undefined,
|
|
191
|
-
translateX: iconStyles.translateX ?? undefined,
|
|
192
|
-
translateY: iconStyles.translateY ?? undefined
|
|
193
|
-
};
|
|
194
|
-
const iconContent = /*#__PURE__*/React.createElement(IconComponent, {
|
|
195
|
-
tokens: iconTokens,
|
|
196
|
-
variant: iconVariant
|
|
197
|
-
});
|
|
198
|
-
const iconBlock = isNested ? // TODO: when reimplementing inline support, insert an appropriate space character
|
|
199
|
-
// based on the value of gapBefore and gapAfter on native (no inline margins/padding)
|
|
200
|
-
iconContent : /*#__PURE__*/React.createElement(View, {
|
|
201
|
-
style: [iconPosition === 'left' && {
|
|
202
|
-
marginRight: iconStyles.gapAfter * iconScale
|
|
203
|
-
}, iconPosition === 'right' && {
|
|
204
|
-
marginLeft: iconStyles.gapBefore * iconScale
|
|
205
|
-
}]
|
|
206
|
-
}, iconContent); // TODO: this doesn't work well when nested inline but does allow block-links to have icons align
|
|
207
|
-
// properly on Android which purely inline links can't do. Add an isNested case that is similar to
|
|
208
|
-
// https://github.com/telus/universal-design-system/pull/233
|
|
209
|
-
|
|
210
|
-
return /*#__PURE__*/React.createElement(Pressable, Object.assign({}, linkPropSet, {
|
|
211
|
-
style: [outerBorderStyles, blockLeftStyle, staticStyles.rowContainer]
|
|
212
|
-
}), iconPosition === 'left' && iconBlock, /*#__PURE__*/React.createElement(Text, {
|
|
213
|
-
style: [contentStyles, blockTextStyles, textStyles, Platform.select({
|
|
214
|
-
web: {
|
|
215
|
-
// TODO: https://github.com/telus/universal-design-system/issues/487
|
|
216
|
-
transition: 'color 200ms'
|
|
217
|
-
}
|
|
218
|
-
})]
|
|
219
|
-
}, children), iconPosition === 'right' && iconBlock);
|
|
220
|
-
};
|
|
221
|
-
|
|
222
|
-
LinkBase.propTypes = { ...a11yProps.types,
|
|
223
|
-
...linkProps.types,
|
|
224
|
-
tokens: getTokensPropType('Link'),
|
|
225
|
-
variant: variantProp.propType,
|
|
190
|
+
});
|
|
191
|
+
LinkBase.displayName = 'LinkBase';
|
|
192
|
+
LinkBase.propTypes = { ..._propTypes2.a11yProps.types,
|
|
193
|
+
..._propTypes2.linkProps.types,
|
|
194
|
+
tokens: (0, _propTypes2.getTokensPropType)('Link'),
|
|
195
|
+
variant: _propTypes2.variantProp.propType,
|
|
226
196
|
|
|
227
197
|
/**
|
|
228
198
|
* Optional variant that may be passed down to the link's icon if there is one
|
|
229
199
|
*/
|
|
230
|
-
|
|
200
|
+
iconProps: _propTypes.default.exact(_Icon.iconComponentPropTypes),
|
|
231
201
|
|
|
232
202
|
/**
|
|
233
203
|
* A function component for an SVG icon to render inside the link. Inherits size and color from
|
|
234
204
|
* the link and any Typography the link is nested inside.
|
|
235
205
|
*/
|
|
236
|
-
icon:
|
|
206
|
+
icon: _propTypes.default.func,
|
|
237
207
|
|
|
238
208
|
/**
|
|
239
209
|
* When `icon` is provided, use `iconPosition` to place the Icon to the left or right side of Link.
|
|
240
210
|
*/
|
|
241
|
-
iconPosition:
|
|
211
|
+
iconPosition: _propTypes.default.oneOf(['left', 'right']),
|
|
242
212
|
|
|
243
213
|
/**
|
|
244
214
|
* On Web if href is passed, React Native Web maps this object's props to
|
|
245
|
-
* `rel`, `target` and
|
|
215
|
+
* `rel`, `target` and `download` attrs.
|
|
246
216
|
*/
|
|
247
|
-
hrefAttrs:
|
|
217
|
+
hrefAttrs: _propTypes.default.shape(_propTypes2.hrefAttrsProp.types)
|
|
248
218
|
};
|
|
249
|
-
|
|
219
|
+
|
|
220
|
+
const staticStyles = _StyleSheet.default.create({
|
|
250
221
|
blockLeft: {
|
|
251
222
|
alignSelf: 'flex-start'
|
|
252
223
|
},
|
|
@@ -254,6 +225,11 @@ const staticStyles = StyleSheet.create({
|
|
|
254
225
|
flexDirection: 'row',
|
|
255
226
|
alignItems: 'center',
|
|
256
227
|
justifyContent: 'flex-start'
|
|
228
|
+
},
|
|
229
|
+
baseline: {
|
|
230
|
+
alignSelf: 'baseline'
|
|
257
231
|
}
|
|
258
232
|
});
|
|
259
|
-
|
|
233
|
+
|
|
234
|
+
var _default = LinkBase;
|
|
235
|
+
exports.default = _default;
|
package/lib/Link/TextButton.js
CHANGED
|
@@ -1,26 +1,61 @@
|
|
|
1
|
-
|
|
2
|
-
import PropTypes from 'prop-types';
|
|
3
|
-
import LinkBase from './LinkBase';
|
|
1
|
+
"use strict";
|
|
4
2
|
|
|
5
|
-
|
|
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 _ThemeProvider = require("../ThemeProvider");
|
|
13
|
+
|
|
14
|
+
var _LinkBase = _interopRequireDefault(require("./LinkBase"));
|
|
15
|
+
|
|
16
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
17
|
+
|
|
18
|
+
var _TextButton$propTypes;
|
|
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
|
+
* `TextButton` is a button that looks like a Link. It uses the same theming and variants as
|
|
28
|
+
* Link but has the accessibility role of a `Button`. It should be used for actions that
|
|
29
|
+
* take place on the current page, or for navigation within an app.
|
|
30
|
+
*/
|
|
31
|
+
const TextButton = /*#__PURE__*/(0, _react.forwardRef)(({
|
|
6
32
|
onPress,
|
|
7
33
|
children,
|
|
8
|
-
variant
|
|
34
|
+
variant,
|
|
35
|
+
tokens,
|
|
36
|
+
// TODO: this may need to use `link` role on Web in the case of being passed both `href` and
|
|
37
|
+
// `onPress` in an omniplatform app that uses React Navigation's useLinkProps for internal nav.
|
|
9
38
|
accessibilityRole = 'button',
|
|
10
39
|
...linkProps
|
|
11
|
-
}) =>
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
40
|
+
}, ref) => {
|
|
41
|
+
const getTokens = (0, _ThemeProvider.useThemeTokensCallback)('Link', tokens, variant);
|
|
42
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_LinkBase.default, {
|
|
43
|
+
onPress: onPress,
|
|
44
|
+
accessibilityRole: accessibilityRole,
|
|
45
|
+
tokens: getTokens,
|
|
46
|
+
ref: ref,
|
|
47
|
+
...linkProps,
|
|
48
|
+
children: children
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
TextButton.displayName = 'TextButton';
|
|
52
|
+
TextButton.propTypes = { ..._LinkBase.default.propTypes,
|
|
53
|
+
onPress: _propTypes.default.func.isRequired
|
|
22
54
|
}; // Remove incompatible Link prop (if this build includes propTypes)
|
|
55
|
+
// TODO: test if this works with web navigation in omniplatform React Navigation
|
|
56
|
+
// https://github.com/telus/universal-design-system/issues/665
|
|
23
57
|
// eslint-disable-next-line react/forbid-foreign-prop-types
|
|
24
58
|
|
|
25
|
-
if (TextButton.propTypes
|
|
26
|
-
|
|
59
|
+
if ((_TextButton$propTypes = TextButton.propTypes) !== null && _TextButton$propTypes !== void 0 && _TextButton$propTypes.href) delete TextButton.propTypes.href;
|
|
60
|
+
var _default = TextButton;
|
|
61
|
+
exports.default = _default;
|
package/lib/Link/index.js
CHANGED
|
@@ -1,4 +1,39 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "ChevronLink", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _ChevronLink.default;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "Link", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _Link.default;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(exports, "LinkBase", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () {
|
|
21
|
+
return _LinkBase.default;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(exports, "TextButton", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
get: function () {
|
|
27
|
+
return _TextButton.default;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
var _ChevronLink = _interopRequireDefault(require("./ChevronLink"));
|
|
32
|
+
|
|
33
|
+
var _Link = _interopRequireDefault(require("./Link"));
|
|
34
|
+
|
|
35
|
+
var _LinkBase = _interopRequireDefault(require("./LinkBase"));
|
|
36
|
+
|
|
37
|
+
var _TextButton = _interopRequireDefault(require("./TextButton"));
|
|
38
|
+
|
|
39
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|