@telus-uds/components-base 1.8.0 → 1.8.3
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/CHANGELOG.md +34 -2
- package/component-docs.json +710 -668
- package/lib/A11yInfoProvider/index.js +4 -3
- package/lib/A11yText/index.js +6 -5
- package/lib/ActivityIndicator/Spinner.js +7 -6
- package/lib/ActivityIndicator/Spinner.native.js +8 -6
- package/lib/ActivityIndicator/index.js +6 -5
- package/lib/ActivityIndicator/shared.js +1 -1
- package/lib/BaseProvider/index.js +13 -10
- package/lib/Box/Box.js +20 -19
- package/lib/Button/Button.js +7 -6
- package/lib/Button/ButtonBase.js +95 -77
- package/lib/Button/ButtonGroup.js +33 -31
- package/lib/Button/ButtonLink.js +9 -7
- package/lib/Button/index.js +4 -4
- package/lib/Button/propTypes.js +1 -1
- package/lib/Card/Card.js +8 -7
- package/lib/Card/CardBase.js +35 -31
- package/lib/Card/PressableCardBase.js +14 -12
- package/lib/Checkbox/Checkbox.js +96 -82
- package/lib/Checkbox/CheckboxGroup.js +27 -25
- package/lib/Checkbox/CheckboxInput.js +12 -10
- package/lib/Divider/Divider.js +8 -7
- package/lib/ExpandCollapse/Control.js +42 -36
- package/lib/ExpandCollapse/ExpandCollapse.js +11 -10
- package/lib/ExpandCollapse/Panel.js +27 -23
- package/lib/Feedback/Feedback.js +48 -35
- package/lib/Fieldset/Fieldset.js +16 -15
- package/lib/Fieldset/FieldsetContainer.js +16 -13
- package/lib/Fieldset/FieldsetContainer.native.js +11 -8
- package/lib/Fieldset/Legend.js +10 -7
- package/lib/Fieldset/Legend.native.js +10 -7
- package/lib/FlexGrid/Col/Col.js +17 -16
- package/lib/FlexGrid/FlexGrid.js +15 -14
- package/lib/FlexGrid/Row/Row.js +13 -12
- package/lib/HorizontalScroll/HorizontalScroll.js +25 -20
- package/lib/HorizontalScroll/HorizontalScrollButton.js +18 -14
- package/lib/HorizontalScroll/ScrollViewEnd.js +6 -5
- package/lib/HorizontalScroll/ScrollViewEnd.native.js +12 -9
- package/lib/HorizontalScroll/itemPositions.js +19 -13
- package/lib/Icon/Icon.js +10 -9
- package/lib/Icon/IconText.js +8 -7
- package/lib/Icon/index.js +5 -5
- package/lib/IconButton/IconButton.js +50 -42
- package/lib/InputLabel/InputLabel.js +37 -30
- package/lib/InputLabel/LabelContent.js +12 -9
- package/lib/InputLabel/LabelContent.native.js +9 -6
- package/lib/InputSupports/InputSupports.js +11 -10
- package/lib/InputSupports/useInputSupports.js +7 -6
- package/lib/Link/ChevronLink.js +9 -8
- package/lib/Link/InlinePressable.js +13 -10
- package/lib/Link/InlinePressable.native.js +20 -16
- package/lib/Link/Link.js +10 -9
- package/lib/Link/LinkBase.js +96 -78
- package/lib/Link/TextButton.js +9 -8
- package/lib/List/List.js +12 -11
- package/lib/List/ListItem.js +103 -79
- package/lib/Modal/Modal.js +74 -60
- package/lib/Notification/Notification.js +46 -33
- package/lib/Pagination/PageButton.js +11 -10
- package/lib/Pagination/Pagination.js +39 -28
- package/lib/Pagination/SideButton.js +21 -18
- package/lib/Pagination/usePagination.js +5 -4
- package/lib/Progress/Progress.js +23 -19
- package/lib/Progress/ProgressBar.js +23 -19
- package/lib/Progress/ProgressBarBackground.js +4 -3
- package/lib/Radio/Radio.js +79 -68
- package/lib/Radio/RadioButton.js +63 -53
- package/lib/Radio/RadioGroup.js +28 -26
- package/lib/Radio/RadioInput.js +12 -10
- package/lib/RadioCard/RadioCard.js +15 -14
- package/lib/RadioCard/RadioCardGroup.js +28 -26
- package/lib/Search/Search.js +51 -31
- package/lib/Select/Group.js +5 -4
- package/lib/Select/Group.native.js +4 -3
- package/lib/Select/Item.js +10 -7
- package/lib/Select/Item.native.js +1 -9
- package/lib/Select/Picker.js +16 -15
- package/lib/Select/Picker.native.js +49 -38
- package/lib/Select/Select.js +134 -113
- package/lib/SideNav/Item.js +39 -33
- package/lib/SideNav/ItemContent.js +15 -12
- package/lib/SideNav/ItemsGroup.js +13 -11
- package/lib/SideNav/SideNav.js +19 -16
- package/lib/Skeleton/Skeleton.js +60 -44
- package/lib/Skeleton/skeleton.constant.js +1 -1
- package/lib/Spacer/Spacer.js +6 -5
- package/lib/StackView/StackView.js +12 -11
- package/lib/StackView/StackWrap.js +2 -2
- package/lib/StackView/StackWrapBox.js +12 -11
- package/lib/StackView/StackWrapGap.js +11 -10
- package/lib/StackView/common.js +14 -11
- package/lib/StackView/getStackedContent.js +8 -7
- package/lib/StackView/index.js +1 -1
- package/lib/StepTracker/Step.js +122 -103
- package/lib/StepTracker/StepTracker.js +48 -38
- package/lib/Tabs/Tabs.js +29 -24
- package/lib/Tabs/TabsItem.js +79 -68
- package/lib/Tags/Tags.js +67 -61
- package/lib/TextInput/TextArea.js +26 -20
- package/lib/TextInput/TextInput.js +20 -15
- package/lib/TextInput/TextInputBase.js +74 -62
- package/lib/TextInput/index.js +4 -4
- package/lib/ThemeProvider/ThemeProvider.js +6 -5
- package/lib/ThemeProvider/index.js +5 -5
- package/lib/ThemeProvider/useSetTheme.js +6 -3
- package/lib/ThemeProvider/useThemeTokens.js +7 -2
- package/lib/ThemeProvider/utils/styles.js +48 -41
- package/lib/ThemeProvider/utils/theme-tokens.js +26 -12
- package/lib/ToggleSwitch/ToggleSwitch.js +89 -73
- package/lib/ToggleSwitch/ToggleSwitchGroup.js +36 -34
- package/lib/Tooltip/Backdrop.js +4 -3
- package/lib/Tooltip/Backdrop.native.js +5 -4
- package/lib/Tooltip/Tooltip.js +81 -65
- package/lib/Tooltip/getTooltipPosition.js +29 -18
- package/lib/TooltipButton/TooltipButton.js +28 -21
- package/lib/Typography/Typography.js +37 -33
- package/lib/ViewportProvider/ViewportProvider.js +4 -3
- package/lib/ViewportProvider/useViewportListener.js +6 -3
- package/lib/index.js +54 -54
- package/lib/utils/a11y/semantics.js +5 -2
- package/lib/utils/a11y/textSize.js +8 -6
- package/lib/utils/animation/useVerticalExpandAnimation.js +6 -5
- package/lib/utils/children.js +2 -1
- package/lib/utils/index.js +10 -10
- package/lib/utils/input.js +22 -17
- package/lib/utils/pressability.js +36 -22
- package/lib/utils/props/clickProps.js +2 -1
- package/lib/utils/props/getPropSelector.js +6 -3
- package/lib/utils/props/handlerProps.js +25 -19
- package/lib/utils/props/hrefAttrsProp.js +14 -11
- package/lib/utils/props/index.js +12 -12
- package/lib/utils/props/inputSupportsProps.js +15 -12
- package/lib/utils/props/linkProps.js +7 -6
- package/lib/utils/props/pressProps.js +1 -1
- package/lib/utils/props/tokens.js +27 -13
- package/lib/utils/ssr.js +6 -2
- package/lib/utils/useCopy.js +6 -4
- package/lib/utils/useHash.js +2 -1
- package/lib/utils/useResponsiveProp.js +1 -1
- package/lib/utils/useUniqueId.js +2 -1
- package/lib/utils/withLinkRouter.js +6 -5
- package/package.json +13 -11
- package/src/List/List.jsx +30 -19
- package/src/List/ListItem.jsx +12 -2
- package/src/Modal/Modal.jsx +2 -1
- package/src/Pagination/Pagination.jsx +3 -0
- package/src/Search/Search.jsx +11 -0
- package/src/Select/Item.native.jsx +0 -7
- package/.storybook/main.js +0 -11
- package/.storybook/preview.js +0 -37
- package/.turbo/turbo-build.log +0 -8
- package/.turbo/turbo-lint.log +0 -3
- package/CHANGELOG.json +0 -311
- package/__fixtures__/Accessible.js +0 -34
- package/__fixtures__/Accessible.native.js +0 -34
- package/__fixtures__/Theme.jsx +0 -13
- package/__fixtures__/Viewport.jsx +0 -17
- package/__fixtures__/test-utils.js +0 -25
- package/__fixtures__/testTheme.js +0 -1830
- package/__tests__/A11yText/A11yText.test.jsx +0 -34
- package/__tests__/ActivityIndicator/ActivityIndicator.test.jsx +0 -68
- package/__tests__/ActivityIndicator/__snapshots__/ActivityIndicator.test.jsx.snap +0 -287
- package/__tests__/Box/Box.test.jsx +0 -111
- package/__tests__/Button/Button.test.jsx +0 -86
- package/__tests__/Button/ButtonBase.test.jsx +0 -82
- package/__tests__/Button/ButtonGroup.test.jsx +0 -347
- package/__tests__/Button/ButtonLink.test.jsx +0 -61
- package/__tests__/Card/Card.test.jsx +0 -63
- package/__tests__/Checkbox/Checkbox.test.jsx +0 -94
- package/__tests__/Checkbox/CheckboxGroup.test.jsx +0 -246
- package/__tests__/Divider/Divider.test.jsx +0 -91
- package/__tests__/ExpandCollapse/ExpandCollapse.test.jsx +0 -109
- package/__tests__/Feedback/Feedback.test.jsx +0 -42
- package/__tests__/FlexGrid/Col.test.jsx +0 -261
- package/__tests__/FlexGrid/FlexGrid.test.jsx +0 -136
- package/__tests__/FlexGrid/Row.test.jsx +0 -273
- package/__tests__/HorizontalScroll/HorizontalScroll.test.jsx +0 -165
- package/__tests__/Icon/Icon.test.jsx +0 -61
- package/__tests__/IconButton/IconButton.test.jsx +0 -52
- package/__tests__/InputLabel/InputLabel.test.jsx +0 -28
- package/__tests__/InputLabel/__snapshots__/InputLabel.test.jsx.snap +0 -3
- package/__tests__/InputSupports/InputSupports.test.jsx +0 -60
- package/__tests__/Link/Link.test.jsx +0 -63
- package/__tests__/Link/TextButton.test.jsx +0 -35
- package/__tests__/List/List.test.jsx +0 -60
- package/__tests__/Modal/Modal.test.jsx +0 -47
- package/__tests__/Notification/Notification.test.jsx +0 -20
- package/__tests__/Pagination/Pagination.test.jsx +0 -160
- package/__tests__/Progress/Progress.test.jsx +0 -79
- package/__tests__/Radio/Radio.test.jsx +0 -87
- package/__tests__/Radio/RadioGroup.test.jsx +0 -220
- package/__tests__/RadioCard/RadioCard.test.jsx +0 -87
- package/__tests__/RadioCard/RadioCardGroup.test.jsx +0 -246
- package/__tests__/Search/Search.test.jsx +0 -73
- package/__tests__/Select/Select.test.jsx +0 -94
- package/__tests__/SideNav/SideNav.test.jsx +0 -110
- package/__tests__/Skeleton/Skeleton.test.jsx +0 -61
- package/__tests__/Spacer/Spacer.test.jsx +0 -63
- package/__tests__/StackView/StackView.test.jsx +0 -216
- package/__tests__/StackView/StackWrap.test.jsx +0 -47
- package/__tests__/StackView/getStackedContent.test.jsx +0 -295
- package/__tests__/StepTracker/StepTracker.test.jsx +0 -94
- package/__tests__/Tabs/Tabs.test.jsx +0 -40
- package/__tests__/Tags/Tags.test.jsx +0 -327
- package/__tests__/TextInput/TextArea.test.jsx +0 -35
- package/__tests__/TextInput/TextInputBase.test.jsx +0 -125
- package/__tests__/ThemeProvider/ThemeProvider.test.jsx +0 -77
- package/__tests__/ThemeProvider/useThemeTokens.test.jsx +0 -514
- package/__tests__/ThemeProvider/utils/theme-tokens.test.js +0 -41
- package/__tests__/ToggleSwitch/ToggleSwitch.test.jsx +0 -82
- package/__tests__/ToggleSwitch/ToggleSwitchGroup.test.jsx +0 -192
- package/__tests__/Tooltip/Tooltip.test.jsx +0 -65
- package/__tests__/Tooltip/getTooltipPosition.test.js +0 -79
- package/__tests__/Typography/typography.test.jsx +0 -90
- package/__tests__/utils/children.test.jsx +0 -128
- package/__tests__/utils/containUniqueFields.test.js +0 -25
- package/__tests__/utils/input.test.js +0 -375
- package/__tests__/utils/props.test.js +0 -36
- package/__tests__/utils/semantics.test.jsx +0 -34
- package/__tests__/utils/useCopy.test.js +0 -42
- package/__tests__/utils/useResponsiveProp.test.jsx +0 -202
- package/__tests__/utils/useSpacingScale.test.jsx +0 -273
- package/__tests__/utils/useUniqueId.test.js +0 -31
- package/babel.config.js +0 -35
- package/generate-component-docs.js +0 -72
- package/jest.config.js +0 -32
- package/lib-module/A11yInfoProvider/index.js +0 -62
- package/lib-module/A11yText/index.js +0 -55
- package/lib-module/ActivityIndicator/Spinner.js +0 -76
- package/lib-module/ActivityIndicator/Spinner.native.js +0 -143
- package/lib-module/ActivityIndicator/index.js +0 -40
- package/lib-module/ActivityIndicator/shared.js +0 -12
- package/lib-module/BaseProvider/index.js +0 -26
- package/lib-module/Box/Box.js +0 -243
- package/lib-module/Box/index.js +0 -2
- package/lib-module/Button/Button.js +0 -25
- package/lib-module/Button/ButtonBase.js +0 -254
- package/lib-module/Button/ButtonGroup.js +0 -245
- package/lib-module/Button/ButtonLink.js +0 -39
- package/lib-module/Button/index.js +0 -4
- package/lib-module/Button/propTypes.js +0 -36
- package/lib-module/Card/Card.js +0 -83
- package/lib-module/Card/CardBase.js +0 -62
- package/lib-module/Card/PressableCardBase.js +0 -113
- package/lib-module/Card/index.js +0 -4
- package/lib-module/Checkbox/Checkbox.js +0 -332
- package/lib-module/Checkbox/CheckboxGroup.js +0 -231
- package/lib-module/Checkbox/CheckboxInput.js +0 -58
- package/lib-module/Checkbox/CheckboxInput.native.js +0 -6
- package/lib-module/Checkbox/index.js +0 -3
- package/lib-module/Divider/Divider.js +0 -123
- package/lib-module/Divider/index.js +0 -2
- package/lib-module/ExpandCollapse/Accordion.js +0 -15
- package/lib-module/ExpandCollapse/Control.js +0 -130
- package/lib-module/ExpandCollapse/ExpandCollapse.js +0 -94
- package/lib-module/ExpandCollapse/Panel.js +0 -159
- package/lib-module/ExpandCollapse/index.js +0 -7
- package/lib-module/Feedback/Feedback.js +0 -144
- package/lib-module/Feedback/index.js +0 -2
- package/lib-module/Fieldset/Fieldset.js +0 -152
- package/lib-module/Fieldset/FieldsetContainer.js +0 -29
- package/lib-module/Fieldset/FieldsetContainer.native.js +0 -20
- package/lib-module/Fieldset/Legend.js +0 -21
- package/lib-module/Fieldset/Legend.native.js +0 -28
- package/lib-module/Fieldset/cssReset.js +0 -14
- package/lib-module/Fieldset/index.js +0 -2
- package/lib-module/FlexGrid/Col/Col.js +0 -275
- package/lib-module/FlexGrid/Col/index.js +0 -2
- package/lib-module/FlexGrid/FlexGrid.js +0 -147
- package/lib-module/FlexGrid/Row/Row.js +0 -183
- package/lib-module/FlexGrid/Row/index.js +0 -2
- package/lib-module/FlexGrid/helpers/index.js +0 -18
- package/lib-module/FlexGrid/index.js +0 -2
- package/lib-module/FlexGrid/providers/GutterContext.js +0 -3
- package/lib-module/HorizontalScroll/HorizontalScroll.js +0 -170
- package/lib-module/HorizontalScroll/HorizontalScrollButton.js +0 -77
- package/lib-module/HorizontalScroll/ScrollViewEnd.js +0 -47
- package/lib-module/HorizontalScroll/ScrollViewEnd.native.js +0 -24
- package/lib-module/HorizontalScroll/dictionary.js +0 -11
- package/lib-module/HorizontalScroll/index.js +0 -11
- package/lib-module/HorizontalScroll/itemPositions.js +0 -106
- package/lib-module/Icon/Icon.js +0 -61
- package/lib-module/Icon/IconText.js +0 -81
- package/lib-module/Icon/index.js +0 -4
- package/lib-module/IconButton/IconButton.js +0 -115
- package/lib-module/IconButton/index.js +0 -2
- package/lib-module/InputLabel/InputLabel.js +0 -141
- package/lib-module/InputLabel/LabelContent.js +0 -24
- package/lib-module/InputLabel/LabelContent.native.js +0 -16
- package/lib-module/InputLabel/index.js +0 -2
- package/lib-module/InputSupports/InputSupports.js +0 -95
- package/lib-module/InputSupports/index.js +0 -2
- package/lib-module/InputSupports/useInputSupports.js +0 -31
- package/lib-module/Link/ChevronLink.js +0 -51
- package/lib-module/Link/InlinePressable.js +0 -37
- package/lib-module/Link/InlinePressable.native.js +0 -85
- package/lib-module/Link/Link.js +0 -27
- package/lib-module/Link/LinkBase.js +0 -223
- package/lib-module/Link/TextButton.js +0 -34
- package/lib-module/Link/index.js +0 -5
- package/lib-module/List/List.js +0 -55
- package/lib-module/List/ListItem.js +0 -223
- package/lib-module/List/index.js +0 -5
- package/lib-module/Modal/Modal.js +0 -208
- package/lib-module/Modal/dictionary.js +0 -9
- package/lib-module/Modal/index.js +0 -2
- package/lib-module/Notification/Notification.js +0 -196
- package/lib-module/Notification/dictionary.js +0 -8
- package/lib-module/Notification/index.js +0 -2
- package/lib-module/Pagination/PageButton.js +0 -65
- package/lib-module/Pagination/Pagination.js +0 -140
- package/lib-module/Pagination/SideButton.js +0 -103
- package/lib-module/Pagination/dictionary.js +0 -18
- package/lib-module/Pagination/index.js +0 -2
- package/lib-module/Pagination/usePagination.js +0 -72
- package/lib-module/Progress/Progress.js +0 -85
- package/lib-module/Progress/ProgressBar.js +0 -134
- package/lib-module/Progress/ProgressBarBackground.js +0 -41
- package/lib-module/Progress/index.js +0 -4
- package/lib-module/Radio/Radio.js +0 -274
- package/lib-module/Radio/RadioButton.js +0 -128
- package/lib-module/Radio/RadioGroup.js +0 -241
- package/lib-module/Radio/RadioInput.js +0 -60
- package/lib-module/Radio/RadioInput.native.js +0 -6
- package/lib-module/Radio/index.js +0 -3
- package/lib-module/RadioCard/RadioCard.js +0 -218
- package/lib-module/RadioCard/RadioCardGroup.js +0 -248
- package/lib-module/RadioCard/index.js +0 -3
- package/lib-module/Search/Search.js +0 -241
- package/lib-module/Search/dictionary.js +0 -12
- package/lib-module/Search/index.js +0 -2
- package/lib-module/Select/Group.js +0 -20
- package/lib-module/Select/Group.native.js +0 -14
- package/lib-module/Select/Item.js +0 -17
- package/lib-module/Select/Item.native.js +0 -9
- package/lib-module/Select/Picker.js +0 -67
- package/lib-module/Select/Picker.native.js +0 -110
- package/lib-module/Select/Select.js +0 -316
- package/lib-module/Select/index.js +0 -6
- package/lib-module/SideNav/Item.js +0 -139
- package/lib-module/SideNav/ItemContent.js +0 -45
- package/lib-module/SideNav/ItemsGroup.js +0 -115
- package/lib-module/SideNav/SideNav.js +0 -133
- package/lib-module/SideNav/index.js +0 -1
- package/lib-module/Skeleton/Skeleton.js +0 -163
- package/lib-module/Skeleton/index.js +0 -2
- package/lib-module/Skeleton/skeleton.constant.js +0 -3
- package/lib-module/Skeleton/skeletonWebAnimation.js +0 -18
- package/lib-module/Skeleton/useSkeletonNativeAnimation.js +0 -24
- package/lib-module/Spacer/Spacer.js +0 -97
- package/lib-module/Spacer/index.js +0 -2
- package/lib-module/StackView/StackView.js +0 -124
- package/lib-module/StackView/StackWrap.js +0 -48
- package/lib-module/StackView/StackWrap.native.js +0 -3
- package/lib-module/StackView/StackWrapBox.js +0 -114
- package/lib-module/StackView/StackWrapGap.js +0 -58
- package/lib-module/StackView/common.js +0 -32
- package/lib-module/StackView/getStackedContent.js +0 -123
- package/lib-module/StackView/index.js +0 -5
- package/lib-module/StepTracker/Step.js +0 -229
- package/lib-module/StepTracker/StepTracker.js +0 -175
- package/lib-module/StepTracker/dictionary.js +0 -10
- package/lib-module/StepTracker/index.js +0 -2
- package/lib-module/Tabs/Tabs.js +0 -113
- package/lib-module/Tabs/TabsItem.js +0 -215
- package/lib-module/Tabs/index.js +0 -2
- package/lib-module/Tags/Tags.js +0 -245
- package/lib-module/Tags/index.js +0 -2
- package/lib-module/TextInput/TextArea.js +0 -88
- package/lib-module/TextInput/TextInput.js +0 -68
- package/lib-module/TextInput/TextInputBase.js +0 -233
- package/lib-module/TextInput/index.js +0 -3
- package/lib-module/TextInput/propTypes.js +0 -37
- package/lib-module/ThemeProvider/ThemeProvider.js +0 -35
- package/lib-module/ThemeProvider/index.js +0 -6
- package/lib-module/ThemeProvider/useSetTheme.js +0 -22
- package/lib-module/ThemeProvider/useTheme.js +0 -14
- package/lib-module/ThemeProvider/useThemeTokens.js +0 -105
- package/lib-module/ThemeProvider/utils/index.js +0 -2
- package/lib-module/ThemeProvider/utils/styles.js +0 -174
- package/lib-module/ThemeProvider/utils/theme-tokens.js +0 -151
- package/lib-module/ToggleSwitch/ToggleSwitch.js +0 -234
- package/lib-module/ToggleSwitch/ToggleSwitchGroup.js +0 -218
- package/lib-module/ToggleSwitch/index.js +0 -3
- package/lib-module/Tooltip/Backdrop.js +0 -52
- package/lib-module/Tooltip/Backdrop.native.js +0 -43
- package/lib-module/Tooltip/Tooltip.js +0 -332
- package/lib-module/Tooltip/dictionary.js +0 -8
- package/lib-module/Tooltip/getTooltipPosition.js +0 -164
- package/lib-module/Tooltip/index.js +0 -2
- package/lib-module/TooltipButton/TooltipButton.js +0 -71
- package/lib-module/TooltipButton/index.js +0 -2
- package/lib-module/Typography/Typography.js +0 -120
- package/lib-module/Typography/index.js +0 -2
- package/lib-module/ViewportProvider/ViewportProvider.js +0 -28
- package/lib-module/ViewportProvider/index.js +0 -3
- package/lib-module/ViewportProvider/useViewport.js +0 -3
- package/lib-module/ViewportProvider/useViewportListener.js +0 -43
- package/lib-module/index.js +0 -48
- package/lib-module/utils/a11y/index.js +0 -2
- package/lib-module/utils/a11y/semantics.js +0 -154
- package/lib-module/utils/a11y/textSize.js +0 -34
- package/lib-module/utils/animation/index.js +0 -2
- package/lib-module/utils/animation/useVerticalExpandAnimation.js +0 -61
- package/lib-module/utils/children.js +0 -118
- package/lib-module/utils/containUniqueFields.js +0 -26
- package/lib-module/utils/index.js +0 -16
- package/lib-module/utils/info/index.js +0 -7
- package/lib-module/utils/info/platform/index.js +0 -11
- package/lib-module/utils/info/platform/platform.android.js +0 -1
- package/lib-module/utils/info/platform/platform.ios.js +0 -1
- package/lib-module/utils/info/platform/platform.js +0 -1
- package/lib-module/utils/info/platform/platform.native.js +0 -4
- package/lib-module/utils/info/versions.js +0 -5
- package/lib-module/utils/input.js +0 -180
- package/lib-module/utils/pressability.js +0 -97
- package/lib-module/utils/props/a11yProps.js +0 -140
- package/lib-module/utils/props/clickProps.js +0 -25
- package/lib-module/utils/props/componentPropType.js +0 -63
- package/lib-module/utils/props/copyPropTypes.js +0 -2
- package/lib-module/utils/props/getPropSelector.js +0 -6
- package/lib-module/utils/props/handlerProps.js +0 -59
- package/lib-module/utils/props/hrefAttrsProp.js +0 -30
- package/lib-module/utils/props/index.js +0 -19
- package/lib-module/utils/props/inputSupportsProps.js +0 -59
- package/lib-module/utils/props/linkProps.js +0 -43
- package/lib-module/utils/props/paddingProp.js +0 -9
- package/lib-module/utils/props/pressProps.js +0 -42
- package/lib-module/utils/props/rectProp.js +0 -9
- package/lib-module/utils/props/responsiveProps.js +0 -30
- package/lib-module/utils/props/selectSystemProps.js +0 -24
- package/lib-module/utils/props/spacingProps.js +0 -56
- package/lib-module/utils/props/textInputProps.js +0 -194
- package/lib-module/utils/props/textProps.js +0 -59
- package/lib-module/utils/props/tokens.js +0 -120
- package/lib-module/utils/props/variantProp.js +0 -18
- package/lib-module/utils/props/viewProps.js +0 -22
- package/lib-module/utils/ssr.js +0 -35
- package/lib-module/utils/useCopy.js +0 -42
- package/lib-module/utils/useHash.js +0 -44
- package/lib-module/utils/useHash.native.js +0 -7
- package/lib-module/utils/useResponsiveProp.js +0 -47
- package/lib-module/utils/useSpacingScale.js +0 -123
- package/lib-module/utils/useUniqueId.js +0 -12
- package/lib-module/utils/withLinkRouter.js +0 -82
- package/stories/A11yText/A11yText.stories.jsx +0 -71
- package/stories/ActivityIndicator/ActivityIndicator.stories.jsx +0 -22
- package/stories/Box/Box.stories.jsx +0 -143
- package/stories/Button/Button.stories.jsx +0 -72
- package/stories/Button/ButtonGroup.stories.jsx +0 -81
- package/stories/Button/ButtonLink.stories.jsx +0 -30
- package/stories/Card/Card.stories.jsx +0 -62
- package/stories/Checkbox/Checkbox.stories.jsx +0 -94
- package/stories/Divider/Divider.stories.jsx +0 -68
- package/stories/ExpandCollapse/ExpandCollapse.stories.jsx +0 -112
- package/stories/Feedback/Feedback.stories.jsx +0 -96
- package/stories/FlexGrid/01 FlexGrid.stories.jsx +0 -54
- package/stories/FlexGrid/02 Row.stories.jsx +0 -41
- package/stories/FlexGrid/03 Col.stories.jsx +0 -141
- package/stories/Icon/Icon.stories.jsx +0 -79
- package/stories/IconButton/IconButton.stories.jsx +0 -50
- package/stories/InputLabel/InputLabel.stories.jsx +0 -39
- package/stories/Link/ChevronLink.stories.jsx +0 -48
- package/stories/Link/Link.stories.jsx +0 -90
- package/stories/Link/TextButton.stories.jsx +0 -79
- package/stories/List/List.stories.jsx +0 -117
- package/stories/Modal/Modal.stories.jsx +0 -54
- package/stories/Notification/Notification.stories.jsx +0 -82
- package/stories/Pagination/Pagination.stories.jsx +0 -64
- package/stories/Progress/Progress.stories.jsx +0 -93
- package/stories/Radio/Radio.stories.jsx +0 -100
- package/stories/RadioCard/RadioCard.stories.jsx +0 -98
- package/stories/Search/Search.stories.jsx +0 -66
- package/stories/Select/Select.stories.jsx +0 -55
- package/stories/SideNav/SideNav.stories.jsx +0 -42
- package/stories/SideNav/SideNavItem.stories.jsx +0 -9
- package/stories/SideNav/SideNavItemsGroup.stories.jsx +0 -17
- package/stories/Skeleton/Skeleton.stories.jsx +0 -36
- package/stories/Spacer/Spacer.stories.jsx +0 -38
- package/stories/StackView/StackView.stories.jsx +0 -75
- package/stories/StackView/StackWrap.stories.jsx +0 -64
- package/stories/StepTracker/StepTracker.stories.jsx +0 -71
- package/stories/Tabs/Tabs.stories.jsx +0 -98
- package/stories/Tags/Tags.stories.jsx +0 -69
- package/stories/TextInput/TextArea.stories.jsx +0 -101
- package/stories/TextInput/TextInput.stories.jsx +0 -141
- package/stories/ToggleSwitch/ToggleSwitch.stories.jsx +0 -64
- package/stories/ToggleSwitch/ToggleSwitchGroup.stories.jsx +0 -81
- package/stories/Tooltip/Tooltip.stories.jsx +0 -81
- package/stories/TooltipButton/TooltipButton.stories.jsx +0 -11
- package/stories/Typography/Typography.stories.jsx +0 -49
- package/stories/platform-supports.jsx +0 -32
- package/stories/platform-supports.native.jsx +0 -3
- package/stories/supports.jsx +0 -236
|
@@ -1,273 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import { renderHook } from '@testing-library/react-hooks'
|
|
3
|
-
import { useSpacingScale } from '../../src/utils'
|
|
4
|
-
import Theme from '../../__fixtures__/Theme'
|
|
5
|
-
import Viewport from '../../__fixtures__/Viewport'
|
|
6
|
-
|
|
7
|
-
describe('useSpacingScale', () => {
|
|
8
|
-
// values from testTheme.js
|
|
9
|
-
const expectedDefaultScale = [0, 4, 8, 16, 24, 32, 36]
|
|
10
|
-
const expectedCompactScale = [0, 2, 4, 6, 8, 10, 12]
|
|
11
|
-
const expectedResponsiveScale = {
|
|
12
|
-
xs: [0, 1, 2, 3, 4, 5, 6],
|
|
13
|
-
sm: [0, 3, 4, 5, 6, 7, 8],
|
|
14
|
-
md: [0, 3, 4, 5, 6, 7, 8],
|
|
15
|
-
lg: [0, 7, 8, 9, 10, 11, 12],
|
|
16
|
-
xl: [0, 7, 8, 9, 10, 11, 12]
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
const wrapper = ({ children, viewport }) => (
|
|
20
|
-
<Viewport viewport={viewport}>
|
|
21
|
-
<Theme>{children}</Theme>
|
|
22
|
-
</Viewport>
|
|
23
|
-
)
|
|
24
|
-
|
|
25
|
-
it.each(expectedDefaultScale.map((item, index) => [item, index]))(
|
|
26
|
-
'returns the expected size index %# from the theme spacing scale',
|
|
27
|
-
(expectedSize, index) => {
|
|
28
|
-
const { result } = renderHook(() => useSpacingScale(index), {
|
|
29
|
-
wrapper
|
|
30
|
-
})
|
|
31
|
-
expect(result.current).toBe(expectedSize)
|
|
32
|
-
}
|
|
33
|
-
)
|
|
34
|
-
it.each(expectedCompactScale.map((item, index) => [item, index]))(
|
|
35
|
-
'returns the expected size index %# from the theme spacing scale in a variant',
|
|
36
|
-
(expectedSize, index) => {
|
|
37
|
-
const { result } = renderHook(
|
|
38
|
-
() => useSpacingScale({ space: index, options: { variant: { compact: true } } }),
|
|
39
|
-
{
|
|
40
|
-
wrapper
|
|
41
|
-
}
|
|
42
|
-
)
|
|
43
|
-
expect(result.current).toBe(expectedSize)
|
|
44
|
-
}
|
|
45
|
-
)
|
|
46
|
-
it.each(Object.entries(expectedResponsiveScale))(
|
|
47
|
-
'returns appropriate sizes from a responsive theme variant at %p viewport',
|
|
48
|
-
(viewport, expectedValues) => {
|
|
49
|
-
const { result, rerender } = renderHook(({ spacingValue }) => useSpacingScale(spacingValue), {
|
|
50
|
-
wrapper
|
|
51
|
-
})
|
|
52
|
-
expectedValues.forEach((expectedSize, index) => {
|
|
53
|
-
rerender({
|
|
54
|
-
viewport,
|
|
55
|
-
spacingValue: { space: index, options: { variant: { responsive: true } } }
|
|
56
|
-
})
|
|
57
|
-
expect(result.current).toBe(expectedSize)
|
|
58
|
-
})
|
|
59
|
-
}
|
|
60
|
-
)
|
|
61
|
-
|
|
62
|
-
it('returns the 0 index when passed a nullish spacing value', () => {
|
|
63
|
-
const { result, rerender } = renderHook((spacingValue) => useSpacingScale(spacingValue), {
|
|
64
|
-
wrapper
|
|
65
|
-
})
|
|
66
|
-
// implicit undefined
|
|
67
|
-
expect(result.current).toBe(expectedDefaultScale[0])
|
|
68
|
-
// explicit undefined
|
|
69
|
-
rerender(undefined)
|
|
70
|
-
expect(result.current).toBe(expectedDefaultScale[0])
|
|
71
|
-
rerender(null)
|
|
72
|
-
expect(result.current).toBe(expectedDefaultScale[0])
|
|
73
|
-
|
|
74
|
-
// confim this test isn't a false positive misuing rerender etc
|
|
75
|
-
rerender(1)
|
|
76
|
-
expect(result.current).toBe(expectedDefaultScale[1])
|
|
77
|
-
})
|
|
78
|
-
it('returns the 0 index when passed a nullish spacing value in a variant', () => {
|
|
79
|
-
const { result, rerender } = renderHook((spacingValue) => useSpacingScale(spacingValue), {
|
|
80
|
-
wrapper,
|
|
81
|
-
initialProps: { options: { variant: { compact: true } } }
|
|
82
|
-
})
|
|
83
|
-
// implicit undefined
|
|
84
|
-
expect(result.current).toBe(expectedCompactScale[0])
|
|
85
|
-
// explicit undefined
|
|
86
|
-
rerender({ space: undefined, options: { variant: { compact: true } } })
|
|
87
|
-
expect(result.current).toBe(expectedCompactScale[0])
|
|
88
|
-
rerender({ space: null, options: { variant: { compact: true } } })
|
|
89
|
-
expect(result.current).toBe(expectedCompactScale[0])
|
|
90
|
-
|
|
91
|
-
// confim this test isn't a false positive misuing rerender etc
|
|
92
|
-
rerender({ space: 1, options: { variant: { compact: true } } })
|
|
93
|
-
expect(result.current).toBe(expectedCompactScale[1])
|
|
94
|
-
})
|
|
95
|
-
|
|
96
|
-
it('returns the highest index when passed an out-of-bounds spacing index', () => {
|
|
97
|
-
const { result } = renderHook(() => useSpacingScale(99), {
|
|
98
|
-
wrapper
|
|
99
|
-
})
|
|
100
|
-
expect(result.current).toBe(expectedDefaultScale[expectedDefaultScale.length - 1])
|
|
101
|
-
})
|
|
102
|
-
it('returns the highest index when passed an out-of-bounds spacing index in a variant', () => {
|
|
103
|
-
const { result } = renderHook(
|
|
104
|
-
() => useSpacingScale({ space: 99, options: { variant: { compact: true } } }),
|
|
105
|
-
{
|
|
106
|
-
wrapper
|
|
107
|
-
}
|
|
108
|
-
)
|
|
109
|
-
expect(result.current).toBe(expectedCompactScale[expectedDefaultScale.length - 1])
|
|
110
|
-
})
|
|
111
|
-
|
|
112
|
-
it('returns viewport indexes that explicitly match current viewport', () => {
|
|
113
|
-
const spacingValue = { xs: 1, sm: 2, md: 3, lg: 4, xl: 5 }
|
|
114
|
-
const { rerender, result } = renderHook((args) => useSpacingScale(args.spacingValue), {
|
|
115
|
-
wrapper,
|
|
116
|
-
initialProps: { viewport: 'xs', spacingValue }
|
|
117
|
-
})
|
|
118
|
-
expect(result.current).toBe(expectedDefaultScale[1])
|
|
119
|
-
rerender({ viewport: 'sm', spacingValue })
|
|
120
|
-
expect(result.current).toBe(expectedDefaultScale[2])
|
|
121
|
-
rerender({ viewport: 'md', spacingValue })
|
|
122
|
-
expect(result.current).toBe(expectedDefaultScale[3])
|
|
123
|
-
rerender({ viewport: 'lg', spacingValue })
|
|
124
|
-
expect(result.current).toBe(expectedDefaultScale[4])
|
|
125
|
-
rerender({ viewport: 'xl', spacingValue })
|
|
126
|
-
expect(result.current).toBe(expectedDefaultScale[5])
|
|
127
|
-
})
|
|
128
|
-
it('returns viewport indexes that explicitly match current viewport in a variant', () => {
|
|
129
|
-
const spacingValue = {
|
|
130
|
-
xs: 1,
|
|
131
|
-
sm: 2,
|
|
132
|
-
md: 3,
|
|
133
|
-
lg: 4,
|
|
134
|
-
xl: 5,
|
|
135
|
-
options: { variant: { compact: true } }
|
|
136
|
-
}
|
|
137
|
-
const { rerender, result } = renderHook((args) => useSpacingScale(args.spacingValue), {
|
|
138
|
-
wrapper,
|
|
139
|
-
initialProps: { viewport: 'xs', spacingValue }
|
|
140
|
-
})
|
|
141
|
-
expect(result.current).toBe(expectedCompactScale[1])
|
|
142
|
-
rerender({ viewport: 'sm', spacingValue })
|
|
143
|
-
expect(result.current).toBe(expectedCompactScale[2])
|
|
144
|
-
rerender({ viewport: 'md', spacingValue })
|
|
145
|
-
expect(result.current).toBe(expectedCompactScale[3])
|
|
146
|
-
rerender({ viewport: 'lg', spacingValue })
|
|
147
|
-
expect(result.current).toBe(expectedCompactScale[4])
|
|
148
|
-
rerender({ viewport: 'xl', spacingValue })
|
|
149
|
-
expect(result.current).toBe(expectedCompactScale[5])
|
|
150
|
-
})
|
|
151
|
-
|
|
152
|
-
it('returns viewport indexes that implicitly match current viewport', () => {
|
|
153
|
-
const spacingValue = { xs: 1, md: 3 }
|
|
154
|
-
const { rerender, result } = renderHook((args) => useSpacingScale(args.spacingValue), {
|
|
155
|
-
wrapper,
|
|
156
|
-
initialProps: { viewport: 'xs', spacingValue }
|
|
157
|
-
})
|
|
158
|
-
expect(result.current).toBe(expectedDefaultScale[1])
|
|
159
|
-
rerender({ viewport: 'sm', spacingValue })
|
|
160
|
-
expect(result.current).toBe(expectedDefaultScale[1])
|
|
161
|
-
rerender({ viewport: 'md', spacingValue })
|
|
162
|
-
expect(result.current).toBe(expectedDefaultScale[3])
|
|
163
|
-
rerender({ viewport: 'lg', spacingValue })
|
|
164
|
-
expect(result.current).toBe(expectedDefaultScale[3])
|
|
165
|
-
rerender({ viewport: 'xl', spacingValue })
|
|
166
|
-
expect(result.current).toBe(expectedDefaultScale[3])
|
|
167
|
-
})
|
|
168
|
-
it('returns viewport indexes that implicitly match current viewport in a variant', () => {
|
|
169
|
-
const spacingValue = { xs: 1, md: 3, options: { variant: { compact: true } } }
|
|
170
|
-
const { rerender, result } = renderHook((args) => useSpacingScale(args.spacingValue), {
|
|
171
|
-
wrapper,
|
|
172
|
-
initialProps: { viewport: 'xs', spacingValue }
|
|
173
|
-
})
|
|
174
|
-
expect(result.current).toBe(expectedCompactScale[1])
|
|
175
|
-
rerender({ viewport: 'sm', spacingValue })
|
|
176
|
-
expect(result.current).toBe(expectedCompactScale[1])
|
|
177
|
-
rerender({ viewport: 'md', spacingValue })
|
|
178
|
-
expect(result.current).toBe(expectedCompactScale[3])
|
|
179
|
-
rerender({ viewport: 'lg', spacingValue })
|
|
180
|
-
expect(result.current).toBe(expectedCompactScale[3])
|
|
181
|
-
rerender({ viewport: 'xl', spacingValue })
|
|
182
|
-
expect(result.current).toBe(expectedCompactScale[3])
|
|
183
|
-
})
|
|
184
|
-
|
|
185
|
-
it('chooses smallest provided viewport index if viewport is unavailable', () => {
|
|
186
|
-
const spacingValue = { xs: 1, sm: 2, md: 3, lg: 4, xl: 5 }
|
|
187
|
-
const { result } = renderHook((args) => useSpacingScale(args.spacingValue), {
|
|
188
|
-
wrapper,
|
|
189
|
-
initialProps: { viewport: null, spacingValue }
|
|
190
|
-
})
|
|
191
|
-
expect(result.current).toBe(expectedDefaultScale[1])
|
|
192
|
-
})
|
|
193
|
-
it('chooses 0 index if current viewport matches no provided index', () => {
|
|
194
|
-
const spacingValue = { lg: 4 }
|
|
195
|
-
const { result, rerender } = renderHook((args) => useSpacingScale(args.spacingValue), {
|
|
196
|
-
wrapper,
|
|
197
|
-
initialProps: { viewport: 'xs', spacingValue }
|
|
198
|
-
})
|
|
199
|
-
expect(result.current).toBe(expectedDefaultScale[0])
|
|
200
|
-
rerender({ viewport: 'sm', spacingValue })
|
|
201
|
-
expect(result.current).toBe(expectedDefaultScale[0])
|
|
202
|
-
rerender({ viewport: 'md', spacingValue })
|
|
203
|
-
expect(result.current).toBe(expectedDefaultScale[0])
|
|
204
|
-
rerender({ viewport: 'lg', spacingValue })
|
|
205
|
-
expect(result.current).toBe(expectedDefaultScale[4])
|
|
206
|
-
rerender({ viewport: 'xl', spacingValue })
|
|
207
|
-
expect(result.current).toBe(expectedDefaultScale[4])
|
|
208
|
-
})
|
|
209
|
-
|
|
210
|
-
it('subtracts a provided value from a spacing scale value', () => {
|
|
211
|
-
const spacingValue = { viewport: 'xs', space: 2, options: { subtract: 3 } }
|
|
212
|
-
const { result } = renderHook(() => useSpacingScale(spacingValue), {
|
|
213
|
-
wrapper
|
|
214
|
-
})
|
|
215
|
-
expect(result.current).toBe(expectedDefaultScale[2] - 3)
|
|
216
|
-
})
|
|
217
|
-
it('subtracts a provided value from a spacing scale value in a variant', () => {
|
|
218
|
-
const spacingValue = {
|
|
219
|
-
space: 4,
|
|
220
|
-
options: { subtract: 3, variant: { compact: true } }
|
|
221
|
-
}
|
|
222
|
-
const { result } = renderHook(() => useSpacingScale(spacingValue), {
|
|
223
|
-
wrapper
|
|
224
|
-
})
|
|
225
|
-
expect(result.current).toBe(expectedCompactScale[4] - 3)
|
|
226
|
-
})
|
|
227
|
-
it('returns 0 if a subtraction would result in a negative number', () => {
|
|
228
|
-
const spacingValue = { space: 2, options: { subtract: 999 } }
|
|
229
|
-
const { result } = renderHook((args) => useSpacingScale(args.spacingValue), {
|
|
230
|
-
wrapper,
|
|
231
|
-
initialProps: { spacingValue }
|
|
232
|
-
})
|
|
233
|
-
expect(result.current).toBe(0)
|
|
234
|
-
})
|
|
235
|
-
|
|
236
|
-
it('gives an exact amount if `size` option is passed', () => {
|
|
237
|
-
const size = 123456
|
|
238
|
-
const spacingValue = { xs: 1, sm: 2, md: 3, lg: 4, xl: 5, options: { size } }
|
|
239
|
-
const compactSpacingValue = { ...spacingValue, options: { size, variant: { compact: true } } }
|
|
240
|
-
const { result, rerender } = renderHook((args) => useSpacingScale(args.spacingValue), {
|
|
241
|
-
wrapper,
|
|
242
|
-
initialProps: { viewport: 'xs', spacingValue }
|
|
243
|
-
})
|
|
244
|
-
expect(result.current).toBe(size)
|
|
245
|
-
rerender({ viewport: 'sm', spacingValue })
|
|
246
|
-
expect(result.current).toBe(size)
|
|
247
|
-
rerender({ viewport: 'md', spacingValue })
|
|
248
|
-
expect(result.current).toBe(size)
|
|
249
|
-
rerender({ viewport: 'lg', spacingValue })
|
|
250
|
-
expect(result.current).toBe(size)
|
|
251
|
-
rerender({ viewport: 'xl', spacingValue })
|
|
252
|
-
expect(result.current).toBe(size)
|
|
253
|
-
rerender({ viewport: 'xs', spacingValue: compactSpacingValue })
|
|
254
|
-
expect(result.current).toBe(size)
|
|
255
|
-
rerender({ viewport: 'sm', spacingValue: compactSpacingValue })
|
|
256
|
-
expect(result.current).toBe(size)
|
|
257
|
-
rerender({ viewport: 'md', spacingValue: compactSpacingValue })
|
|
258
|
-
expect(result.current).toBe(size)
|
|
259
|
-
rerender({ viewport: 'lg', spacingValue: compactSpacingValue })
|
|
260
|
-
expect(result.current).toBe(size)
|
|
261
|
-
rerender({ viewport: 'xl', spacingValue: compactSpacingValue })
|
|
262
|
-
expect(result.current).toBe(size)
|
|
263
|
-
})
|
|
264
|
-
it('subtracts from size if `subtract` and `size` options are provided', () => {
|
|
265
|
-
const size = 123456
|
|
266
|
-
const subtract = 12345
|
|
267
|
-
const spacingValue = { options: { size, subtract } }
|
|
268
|
-
const { result } = renderHook(() => useSpacingScale(spacingValue), {
|
|
269
|
-
wrapper
|
|
270
|
-
})
|
|
271
|
-
expect(result.current).toBe(size - subtract)
|
|
272
|
-
})
|
|
273
|
-
})
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { renderHook } from '@testing-library/react-hooks'
|
|
2
|
-
import useUniqueId from '../../lib/utils/useUniqueId'
|
|
3
|
-
|
|
4
|
-
describe('useUniqueId hook', () => {
|
|
5
|
-
it('returns the same id for each re-render, but a different id for a new instance', () => {
|
|
6
|
-
const { result, rerender } = renderHook(() => useUniqueId('prefix'))
|
|
7
|
-
|
|
8
|
-
expect(result.current).toBe('prefix-1')
|
|
9
|
-
|
|
10
|
-
rerender()
|
|
11
|
-
|
|
12
|
-
expect(result.current).toBe('prefix-1')
|
|
13
|
-
|
|
14
|
-
// has to be done within the same test case, as we can't ensure order in which tests are being run in parallel
|
|
15
|
-
const { result: result2, rerender: rerender2 } = renderHook(() => useUniqueId('prefix'))
|
|
16
|
-
|
|
17
|
-
expect(result.current).toBe('prefix-1')
|
|
18
|
-
expect(result2.current).toBe('prefix-2')
|
|
19
|
-
|
|
20
|
-
// ensure that instances' rerendering doesn't affect one another
|
|
21
|
-
rerender2()
|
|
22
|
-
|
|
23
|
-
expect(result.current).toBe('prefix-1')
|
|
24
|
-
expect(result2.current).toBe('prefix-2')
|
|
25
|
-
|
|
26
|
-
rerender()
|
|
27
|
-
|
|
28
|
-
expect(result.current).toBe('prefix-1')
|
|
29
|
-
expect(result2.current).toBe('prefix-2')
|
|
30
|
-
})
|
|
31
|
-
})
|
package/babel.config.js
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
module.exports = (api) => {
|
|
2
|
-
// configuration for jest
|
|
3
|
-
if (api.env('test')) {
|
|
4
|
-
return {
|
|
5
|
-
presets: ['module:metro-react-native-babel-preset']
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
// Default to CJS for docs generators etc; build as ESM modules when requested.
|
|
10
|
-
const isModule = api.env('module')
|
|
11
|
-
|
|
12
|
-
return {
|
|
13
|
-
presets: [
|
|
14
|
-
['@babel/preset-react', { runtime: 'automatic' }],
|
|
15
|
-
[
|
|
16
|
-
'@babel/preset-env',
|
|
17
|
-
{
|
|
18
|
-
// `false` in babel env options means preserve ESM import / export syntax
|
|
19
|
-
// https://babeljs.io/docs/en/babel-preset-env#modules
|
|
20
|
-
modules: isModule ? false : 'cjs'
|
|
21
|
-
}
|
|
22
|
-
]
|
|
23
|
-
],
|
|
24
|
-
plugins: [
|
|
25
|
-
[
|
|
26
|
-
'react-native-web',
|
|
27
|
-
{
|
|
28
|
-
// Use the build of React Native Web that matches our build. ESM prefered, for treeshaking etc.
|
|
29
|
-
// Be careful not to have both RNW builds in an app as init will run twice, shuffling styles.
|
|
30
|
-
commonjs: !isModule
|
|
31
|
-
}
|
|
32
|
-
]
|
|
33
|
-
]
|
|
34
|
-
}
|
|
35
|
-
}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
const fs = require('fs')
|
|
2
|
-
const schema = require('@telus-uds/system-theme-tokens')
|
|
3
|
-
const allExports = require('./src')
|
|
4
|
-
|
|
5
|
-
const { a11yProps } = allExports
|
|
6
|
-
const a11yPropTypes = Object.keys(a11yProps.types)
|
|
7
|
-
|
|
8
|
-
const parseComponentDocs = (name, generated) => {
|
|
9
|
-
const { description } = generated // TODO parse markdown and split by heading
|
|
10
|
-
const props = {} // store derived prop data
|
|
11
|
-
const attributes = {
|
|
12
|
-
// any other computed attributes
|
|
13
|
-
acceptsRNA11yProps: a11yPropTypes.every((key) => key in generated.props)
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
Object.entries(generated.props).forEach(([propName, prop]) => {
|
|
17
|
-
if (prop.description?.includes('@ignore')) {
|
|
18
|
-
return // remove ignored props
|
|
19
|
-
}
|
|
20
|
-
if (attributes.acceptsRNA11yProps && a11yPropTypes.includes(propName)) {
|
|
21
|
-
return // remove a11y props if all supported (there are 30+, instead we have the above attribute to show this)
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const out = { ...prop }
|
|
25
|
-
|
|
26
|
-
// check if this prop references the tokens schema;
|
|
27
|
-
// this regex extracts unquoted parameter strings from function
|
|
28
|
-
// calls like `getTokensPropType('ChevronLink', 'Link')` with the result
|
|
29
|
-
// being an array: `['ChevronLink', 'Link']`
|
|
30
|
-
const tokensProp = out.type?.raw?.match(/(?<=getTokensPropType\(.*)(\w+)+(?=.*\))/gs)
|
|
31
|
-
|
|
32
|
-
// if so, try and read the schema from the base components
|
|
33
|
-
if (tokensProp && tokensProp.length > 0) {
|
|
34
|
-
let raw = {}
|
|
35
|
-
|
|
36
|
-
tokensProp.forEach((componentName) => {
|
|
37
|
-
if (!schema.components[componentName]) {
|
|
38
|
-
// this would be a run-time error in the base components
|
|
39
|
-
throw new Error(
|
|
40
|
-
`Unknown schema component reference: ${componentName} from component: ${name}`
|
|
41
|
-
)
|
|
42
|
-
}
|
|
43
|
-
raw = { ...raw, ...schema.components[componentName] }
|
|
44
|
-
})
|
|
45
|
-
out.type = { ...out.type, raw }
|
|
46
|
-
}
|
|
47
|
-
props[propName] = out
|
|
48
|
-
})
|
|
49
|
-
|
|
50
|
-
return { docs: { description, props, attributes } }
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
const components = {}
|
|
54
|
-
|
|
55
|
-
Object.entries(allExports).forEach(([name, exp]) => {
|
|
56
|
-
// fail fast with meaningful error on typos, missing exports, etc
|
|
57
|
-
if (!exp) throw new Error(`components-base export "${name}" is ${exp} (typeof ${typeof exp})`)
|
|
58
|
-
|
|
59
|
-
if (exp.__docgenInfo) {
|
|
60
|
-
// populated by babel-plugin-react-docgen
|
|
61
|
-
components[name] = parseComponentDocs(name, exp.__docgenInfo)
|
|
62
|
-
|
|
63
|
-
// check for second-level components e.g List.Item (can only be on a component)
|
|
64
|
-
Object.entries(exp).forEach(([subComponentName, prop]) => {
|
|
65
|
-
if (prop.__docgenInfo) {
|
|
66
|
-
components[name][subComponentName] = parseComponentDocs(subComponentName, prop.__docgenInfo)
|
|
67
|
-
}
|
|
68
|
-
})
|
|
69
|
-
}
|
|
70
|
-
}, {})
|
|
71
|
-
|
|
72
|
-
fs.writeFileSync('./component-docs.json', JSON.stringify({ schema, components }, null, 2))
|
package/jest.config.js
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
const preset = require('react-native/jest-preset')
|
|
2
|
-
const name = require('./package.json').name.split('@telus-uds/').pop()
|
|
3
|
-
|
|
4
|
-
// cherry-pick the bits of the preset we want to avoid it overriding the fix we have on L14
|
|
5
|
-
module.exports = {
|
|
6
|
-
haste: preset.haste,
|
|
7
|
-
displayName: {
|
|
8
|
-
name,
|
|
9
|
-
color: 'blue'
|
|
10
|
-
},
|
|
11
|
-
setupFiles: preset.setupFiles,
|
|
12
|
-
transform: {
|
|
13
|
-
// Use babel-jest instead of react-native/jest/preprocessor.js so that the coverage report is correct as per:
|
|
14
|
-
// https://github.com/facebook/react-native/issues/20404#issuecomment-593392763
|
|
15
|
-
// https://kulshekhar.github.io/ts-jest/docs/guides/react-native/#jest-config
|
|
16
|
-
// __dirname here tells babel to look in components-base for babel root when running from monorepo root
|
|
17
|
-
'\\.(js|jsx)$': ['babel-jest', { cwd: __dirname }]
|
|
18
|
-
},
|
|
19
|
-
setupFilesAfterEnv: [
|
|
20
|
-
'@testing-library/jest-native/extend-expect',
|
|
21
|
-
// Fail tests that use console.error or console.warn
|
|
22
|
-
'<rootDir>/../../jest-no-console'
|
|
23
|
-
],
|
|
24
|
-
moduleNameMapper: {
|
|
25
|
-
'.+\\.(otf|svg|png|jpg)$': 'identity-obj-proxy'
|
|
26
|
-
},
|
|
27
|
-
transformIgnorePatterns: [
|
|
28
|
-
'node_modules/(?!(jest-)?react-native|@react-native|@react-native-community|@react-native-picker)'
|
|
29
|
-
],
|
|
30
|
-
// Count everything in src when calculating coverage
|
|
31
|
-
collectCoverageFrom: ['src/**/*.{js,jsx}']
|
|
32
|
-
}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import React, { createContext, useContext, useEffect, useState } from 'react';
|
|
2
|
-
import PropTypes from 'prop-types';
|
|
3
|
-
import AccessibilityInfo from "react-native-web/dist/exports/AccessibilityInfo";
|
|
4
|
-
import Platform from "react-native-web/dist/exports/Platform";
|
|
5
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
6
|
-
const ScreenReaderContext = /*#__PURE__*/createContext(false);
|
|
7
|
-
const ReducedMotionContext = /*#__PURE__*/createContext(false);
|
|
8
|
-
|
|
9
|
-
const A11yInfoProvider = ({
|
|
10
|
-
children
|
|
11
|
-
}) => {
|
|
12
|
-
const [reduceMotionEnabled, setReduceMotionEnabled] = useState(false);
|
|
13
|
-
const [screenReaderEnabled, setScreenReaderEnabled] = useState(false);
|
|
14
|
-
useEffect(() => {
|
|
15
|
-
if (process.env.NODE_ENV === 'test') {
|
|
16
|
-
// On Jest these effects do nothing but can cause `act` state change warnings
|
|
17
|
-
// and "...after the Jest environment has been torn down" errors, so skip them.
|
|
18
|
-
return () => {};
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
AccessibilityInfo.addEventListener('reduceMotionChanged', setReduceMotionEnabled);
|
|
22
|
-
AccessibilityInfo.addEventListener('screenReaderChanged', setScreenReaderEnabled);
|
|
23
|
-
|
|
24
|
-
const setInitialA11yInfo = async () => {
|
|
25
|
-
const [initialReduceMotionEnabled, initialScreenReaderEnabled] = await Promise.all([AccessibilityInfo.isReduceMotionEnabled(), AccessibilityInfo.isScreenReaderEnabled()]); // Browsers can't detect screen readers; in RNW isScreenReaderEnabled() is always `true`
|
|
26
|
-
// https://github.com/necolas/react-native-web/blob/master/packages/react-native-web/src/exports/AccessibilityInfo/index.js#L14
|
|
27
|
-
|
|
28
|
-
setScreenReaderEnabled(Platform.OS !== 'web' && !!initialScreenReaderEnabled); // RNW does support isReduceMotionEnabled looking for 'prefers-reduced-motion' state
|
|
29
|
-
|
|
30
|
-
setReduceMotionEnabled(!!initialReduceMotionEnabled);
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
if (AccessibilityInfo.isReduceMotionEnabled && AccessibilityInfo.isScreenReaderEnabled) {
|
|
34
|
-
setInitialA11yInfo();
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
return () => {
|
|
38
|
-
AccessibilityInfo.removeEventListener('reduceMotionChanged', setReduceMotionEnabled);
|
|
39
|
-
AccessibilityInfo.removeEventListener('screenReaderChanged', setScreenReaderEnabled);
|
|
40
|
-
};
|
|
41
|
-
}, []);
|
|
42
|
-
return /*#__PURE__*/_jsx(ReducedMotionContext.Provider, {
|
|
43
|
-
value: reduceMotionEnabled,
|
|
44
|
-
children: /*#__PURE__*/_jsx(ScreenReaderContext.Provider, {
|
|
45
|
-
value: screenReaderEnabled,
|
|
46
|
-
children: children
|
|
47
|
-
})
|
|
48
|
-
});
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
A11yInfoProvider.propTypes = {
|
|
52
|
-
children: PropTypes.node.isRequired
|
|
53
|
-
};
|
|
54
|
-
export default A11yInfoProvider;
|
|
55
|
-
export const useA11yInfo = () => {
|
|
56
|
-
const screenReaderEnabled = useContext(ScreenReaderContext);
|
|
57
|
-
const reduceMotionEnabled = useContext(ReducedMotionContext);
|
|
58
|
-
return {
|
|
59
|
-
reduceMotionEnabled,
|
|
60
|
-
screenReaderEnabled
|
|
61
|
-
};
|
|
62
|
-
};
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import React, { forwardRef } from 'react';
|
|
2
|
-
import Platform from "react-native-web/dist/exports/Platform";
|
|
3
|
-
import StyleSheet from "react-native-web/dist/exports/StyleSheet";
|
|
4
|
-
import View from "react-native-web/dist/exports/View";
|
|
5
|
-
import PropTypes from 'prop-types';
|
|
6
|
-
import { a11yProps, selectSystemProps, viewProps } from '../utils/props';
|
|
7
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
8
|
-
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps]);
|
|
9
|
-
/**
|
|
10
|
-
* A11yText is a zero-size invisible element that adds text to be read by screen readers.
|
|
11
|
-
*
|
|
12
|
-
* It should be used to add selectable screen-reader-only text to the main document flow,
|
|
13
|
-
* as a sibling to blocks of text like paragraphs and interactive elements like buttons.
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
const A11yText = /*#__PURE__*/forwardRef(({
|
|
17
|
-
text,
|
|
18
|
-
heading,
|
|
19
|
-
...rest
|
|
20
|
-
}, ref) => {
|
|
21
|
-
const selectedProps = selectProps({
|
|
22
|
-
// On iOS, needs `accessible` to be true to be focusable without non-a11y content.
|
|
23
|
-
// On Web, `accessible` causes RNW to set attributes that may make the element be treated as a group.
|
|
24
|
-
// On Android, may cause this to be skipped when with `<Text>` siblings in an `accessible` View,
|
|
25
|
-
// see https://github.com/facebook/react-native/issues/30851#issuecomment-790165489
|
|
26
|
-
accessible: Platform.OS === 'ios',
|
|
27
|
-
accessibilityLabel: text,
|
|
28
|
-
accessibilityRole: heading ? 'header' : 'text',
|
|
29
|
-
...rest
|
|
30
|
-
});
|
|
31
|
-
return /*#__PURE__*/_jsx(View, {
|
|
32
|
-
style: styles.invisible,
|
|
33
|
-
ref: ref,
|
|
34
|
-
...selectedProps
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
A11yText.displayName = 'A11yText';
|
|
38
|
-
A11yText.propTypes = { ...selectedSystemPropTypes,
|
|
39
|
-
text: PropTypes.string.isRequired,
|
|
40
|
-
heading: PropTypes.bool
|
|
41
|
-
};
|
|
42
|
-
const styles = StyleSheet.create({
|
|
43
|
-
invisible: {
|
|
44
|
-
// Without width or height it is not shown
|
|
45
|
-
minHeight: 1,
|
|
46
|
-
minWidth: 1,
|
|
47
|
-
// Ensures it doesn't occupy space
|
|
48
|
-
// position: 'absolute' causes it to be read first in its container
|
|
49
|
-
marginEnd: -1,
|
|
50
|
-
marginBottom: -1,
|
|
51
|
-
// Ensures it is in the correct position on Native
|
|
52
|
-
top: -1
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
export default A11yText;
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import React, { forwardRef } from 'react';
|
|
2
|
-
import { DURATION, MIN_EMPTY_ANGLE, MIN_STROKE_ANGLE, BEZIER, propTypes } from './shared';
|
|
3
|
-
import { useA11yInfo } from '../A11yInfoProvider';
|
|
4
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
|
-
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
6
|
-
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
7
|
-
const SVG_RADIUS = 20;
|
|
8
|
-
const SVG_CIRCUMFERENCE = SVG_RADIUS * 2 * Math.PI;
|
|
9
|
-
const MIN_SVG_LENGTH = MIN_STROKE_ANGLE / 360 * SVG_CIRCUMFERENCE;
|
|
10
|
-
const MAX_SVG_LENGTH = (1 - MIN_EMPTY_ANGLE / 360) * SVG_CIRCUMFERENCE;
|
|
11
|
-
const animationProps = {
|
|
12
|
-
begin: '0s',
|
|
13
|
-
dur: `${DURATION}ms`,
|
|
14
|
-
fill: 'freeze',
|
|
15
|
-
repeatCount: 'indefinite'
|
|
16
|
-
};
|
|
17
|
-
const bezierProps = {
|
|
18
|
-
calcMode: 'spline',
|
|
19
|
-
keyTimes: '0; 0.5; 1',
|
|
20
|
-
keySplines: `${BEZIER.join(', ')} ; ${BEZIER.join(', ')}`
|
|
21
|
-
}; // We're using svg rather than css here to define the animation to avoid needing to introduce css injection mechanism
|
|
22
|
-
// It's possible to replicate this functionality with RNW animations, but it snags on chrome at least, see https://github.com/telus/universal-design-system/pull/477 for details.
|
|
23
|
-
|
|
24
|
-
const Spinner = /*#__PURE__*/forwardRef(({
|
|
25
|
-
size,
|
|
26
|
-
color,
|
|
27
|
-
thickness,
|
|
28
|
-
label
|
|
29
|
-
}, ref) => {
|
|
30
|
-
const {
|
|
31
|
-
reduceMotionEnabled
|
|
32
|
-
} = useA11yInfo();
|
|
33
|
-
return /*#__PURE__*/_jsx("svg", {
|
|
34
|
-
ref: ref,
|
|
35
|
-
width: `${size}px`,
|
|
36
|
-
height: `${size}px`,
|
|
37
|
-
viewBox: "0 0 48 48",
|
|
38
|
-
"aria-valuetext": label,
|
|
39
|
-
role: "progressbar",
|
|
40
|
-
"aria-busy": true,
|
|
41
|
-
children: /*#__PURE__*/_jsxs("g", {
|
|
42
|
-
children: [reduceMotionEnabled ? null : /*#__PURE__*/_jsx("animateTransform", {
|
|
43
|
-
attributeName: "transform",
|
|
44
|
-
type: "rotate",
|
|
45
|
-
values: `-180 24 24;${360 + MIN_STROKE_ANGLE - 180} 24 24`,
|
|
46
|
-
...animationProps
|
|
47
|
-
}), /*#__PURE__*/_jsx("circle", {
|
|
48
|
-
fill: "none",
|
|
49
|
-
stroke: color,
|
|
50
|
-
strokeWidth: thickness * 48 / size,
|
|
51
|
-
strokeLinecap: "round",
|
|
52
|
-
cx: "24",
|
|
53
|
-
cy: "24",
|
|
54
|
-
r: "20",
|
|
55
|
-
strokeDasharray: reduceMotionEnabled ? MAX_SVG_LENGTH : [MIN_SVG_LENGTH, SVG_CIRCUMFERENCE],
|
|
56
|
-
strokeDashoffset: 0,
|
|
57
|
-
children: reduceMotionEnabled ? null : /*#__PURE__*/_jsxs(_Fragment, {
|
|
58
|
-
children: [/*#__PURE__*/_jsx("animate", {
|
|
59
|
-
attributeName: "stroke-dashoffset",
|
|
60
|
-
values: `0;-10;${MIN_SVG_LENGTH - SVG_CIRCUMFERENCE}`,
|
|
61
|
-
...animationProps,
|
|
62
|
-
...bezierProps
|
|
63
|
-
}), /*#__PURE__*/_jsx("animate", {
|
|
64
|
-
attributeName: "stroke-dasharray",
|
|
65
|
-
values: `${MIN_SVG_LENGTH}, 200;${MAX_SVG_LENGTH}, 200;${MIN_SVG_LENGTH}, 200`,
|
|
66
|
-
...animationProps,
|
|
67
|
-
...bezierProps
|
|
68
|
-
})]
|
|
69
|
-
})
|
|
70
|
-
})]
|
|
71
|
-
})
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
Spinner.displayName = 'Spinner';
|
|
75
|
-
Spinner.propTypes = propTypes;
|
|
76
|
-
export default Spinner;
|