@telus-uds/components-base 1.3.0 → 1.5.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/.turbo/turbo-build.log +5 -2
- package/CHANGELOG.json +82 -0
- package/CHANGELOG.md +42 -2
- package/__tests__/ActivityIndicator/ActivityIndicator.test.jsx +35 -0
- package/__tests__/ActivityIndicator/__snapshots__/ActivityIndicator.test.jsx.snap +287 -0
- package/babel.config.js +27 -5
- package/component-docs.json +121 -438
- package/lib/A11yText/index.js +5 -4
- package/lib/ActivityIndicator/Spinner.js +46 -37
- package/lib/ActivityIndicator/Spinner.native.js +26 -15
- package/lib/Box/Box.js +4 -4
- package/lib/Button/ButtonBase.js +7 -8
- package/lib/Card/Card.js +5 -4
- package/lib/Card/PressableCardBase.js +6 -11
- package/lib/Checkbox/Checkbox.js +4 -6
- package/lib/Divider/Divider.js +12 -11
- package/lib/ExpandCollapse/Control.js +7 -7
- package/lib/ExpandCollapse/ExpandCollapse.js +6 -2
- package/lib/ExpandCollapse/Panel.js +6 -7
- package/lib/Feedback/Feedback.js +6 -5
- package/lib/Fieldset/Fieldset.js +1 -3
- package/lib/HorizontalScroll/HorizontalScroll.js +5 -7
- package/lib/HorizontalScroll/HorizontalScrollButton.js +23 -49
- package/lib/IconButton/IconButton.js +6 -6
- package/lib/InputLabel/InputLabel.js +7 -2
- package/lib/InputSupports/InputSupports.js +2 -2
- package/lib/Link/LinkBase.js +5 -6
- package/lib/List/List.js +4 -6
- package/lib/List/ListItem.js +6 -2
- package/lib/Modal/Modal.js +6 -2
- package/lib/Notification/Notification.js +12 -8
- package/lib/Pagination/Pagination.js +8 -3
- package/lib/Progress/Progress.js +5 -4
- package/lib/Progress/ProgressBar.js +8 -7
- package/lib/Radio/Radio.js +4 -6
- package/lib/Radio/RadioButton.js +6 -3
- package/lib/Radio/RadioGroup.js +7 -2
- package/lib/RadioCard/RadioCard.js +4 -4
- package/lib/RadioCard/RadioCardGroup.js +9 -6
- package/lib/Search/Search.js +7 -2
- package/lib/Select/Select.js +10 -9
- package/lib/SideNav/Item.js +7 -7
- package/lib/SideNav/SideNav.js +7 -3
- package/lib/Skeleton/Skeleton.js +6 -2
- package/lib/Spacer/Spacer.js +7 -18
- package/lib/StackView/StackView.js +7 -7
- package/lib/StackView/StackWrapBox.js +6 -7
- package/lib/StackView/StackWrapGap.js +6 -5
- package/lib/StepTracker/Step.js +7 -3
- package/lib/StepTracker/StepTracker.js +7 -7
- package/lib/Tabs/Tabs.js +6 -2
- package/lib/Tabs/TabsItem.js +6 -5
- package/lib/Tags/Tags.js +5 -6
- package/lib/TextInput/TextArea.js +13 -14
- package/lib/TextInput/TextInput.js +13 -14
- package/lib/TextInput/TextInputBase.js +5 -3
- package/lib/ToggleSwitch/ToggleSwitch.js +10 -9
- package/lib/ToggleSwitch/ToggleSwitchGroup.js +5 -7
- package/lib/Tooltip/Tooltip.js +7 -2
- package/lib/TooltipButton/TooltipButton.js +7 -2
- package/lib/Typography/Typography.js +8 -6
- package/lib/index.js +7 -0
- package/lib/utils/children.js +5 -1
- package/lib/utils/index.js +14 -0
- package/lib/utils/props/index.js +9 -0
- package/lib/{InputSupports/propTypes.js → utils/props/inputSupportsProps.js} +2 -3
- package/lib/utils/ssr.js +51 -0
- package/lib-module/A11yInfoProvider/index.js +62 -0
- package/lib-module/A11yText/index.js +55 -0
- package/lib-module/ActivityIndicator/Spinner.js +76 -0
- package/lib-module/ActivityIndicator/Spinner.native.js +143 -0
- package/lib-module/ActivityIndicator/index.js +40 -0
- package/lib-module/ActivityIndicator/shared.js +12 -0
- package/lib-module/BaseProvider/index.js +26 -0
- package/lib-module/Box/Box.js +243 -0
- package/lib-module/Box/index.js +2 -0
- package/lib-module/Button/Button.js +25 -0
- package/lib-module/Button/ButtonBase.js +254 -0
- package/lib-module/Button/ButtonGroup.js +164 -0
- package/lib-module/Button/ButtonLink.js +39 -0
- package/lib-module/Button/index.js +4 -0
- package/lib-module/Button/propTypes.js +36 -0
- package/lib-module/Card/Card.js +83 -0
- package/lib-module/Card/CardBase.js +62 -0
- package/lib-module/Card/PressableCardBase.js +113 -0
- package/lib-module/Card/index.js +4 -0
- package/lib-module/Checkbox/Checkbox.js +321 -0
- package/lib-module/Checkbox/CheckboxGroup.js +218 -0
- package/lib-module/Checkbox/CheckboxInput.js +58 -0
- package/lib-module/Checkbox/CheckboxInput.native.js +6 -0
- package/lib-module/Checkbox/index.js +3 -0
- package/lib-module/Divider/Divider.js +123 -0
- package/lib-module/Divider/index.js +2 -0
- package/lib-module/ExpandCollapse/Accordion.js +15 -0
- package/lib-module/ExpandCollapse/Control.js +130 -0
- package/lib-module/ExpandCollapse/ExpandCollapse.js +94 -0
- package/lib-module/ExpandCollapse/Panel.js +158 -0
- package/lib-module/ExpandCollapse/index.js +7 -0
- package/lib-module/Feedback/Feedback.js +144 -0
- package/lib-module/Feedback/index.js +2 -0
- package/lib-module/Fieldset/Fieldset.js +145 -0
- package/lib-module/Fieldset/FieldsetContainer.js +29 -0
- package/lib-module/Fieldset/FieldsetContainer.native.js +20 -0
- package/lib-module/Fieldset/Legend.js +21 -0
- package/lib-module/Fieldset/Legend.native.js +28 -0
- package/lib-module/Fieldset/cssReset.js +14 -0
- package/lib-module/Fieldset/index.js +2 -0
- package/lib-module/FlexGrid/Col/Col.js +265 -0
- package/lib-module/FlexGrid/Col/index.js +2 -0
- package/lib-module/FlexGrid/FlexGrid.js +147 -0
- package/lib-module/FlexGrid/Row/Row.js +177 -0
- package/lib-module/FlexGrid/Row/index.js +2 -0
- package/lib-module/FlexGrid/helpers/index.js +18 -0
- package/lib-module/FlexGrid/index.js +2 -0
- package/lib-module/FlexGrid/providers/GutterContext.js +3 -0
- package/lib-module/HorizontalScroll/HorizontalScroll.js +170 -0
- package/lib-module/HorizontalScroll/HorizontalScrollButton.js +77 -0
- package/lib-module/HorizontalScroll/ScrollViewEnd.js +47 -0
- package/lib-module/HorizontalScroll/ScrollViewEnd.native.js +24 -0
- package/lib-module/HorizontalScroll/dictionary.js +11 -0
- package/lib-module/HorizontalScroll/index.js +11 -0
- package/lib-module/HorizontalScroll/itemPositions.js +106 -0
- package/lib-module/Icon/Icon.js +61 -0
- package/lib-module/Icon/IconText.js +81 -0
- package/lib-module/Icon/index.js +4 -0
- package/lib-module/IconButton/IconButton.js +115 -0
- package/lib-module/IconButton/index.js +2 -0
- package/lib-module/InputLabel/InputLabel.js +131 -0
- package/lib-module/InputLabel/LabelContent.js +24 -0
- package/lib-module/InputLabel/LabelContent.native.js +16 -0
- package/lib-module/InputLabel/index.js +2 -0
- package/lib-module/InputSupports/InputSupports.js +88 -0
- package/lib-module/InputSupports/index.js +2 -0
- package/lib-module/InputSupports/useInputSupports.js +31 -0
- package/lib-module/Link/ChevronLink.js +51 -0
- package/lib-module/Link/InlinePressable.js +37 -0
- package/lib-module/Link/InlinePressable.native.js +85 -0
- package/lib-module/Link/Link.js +27 -0
- package/lib-module/Link/LinkBase.js +210 -0
- package/lib-module/Link/TextButton.js +43 -0
- package/lib-module/Link/index.js +5 -0
- package/lib-module/List/List.js +55 -0
- package/lib-module/List/ListItem.js +213 -0
- package/lib-module/List/index.js +5 -0
- package/lib-module/Modal/Modal.js +208 -0
- package/lib-module/Modal/dictionary.js +9 -0
- package/lib-module/Modal/index.js +2 -0
- package/lib-module/Notification/Notification.js +196 -0
- package/lib-module/Notification/dictionary.js +8 -0
- package/lib-module/Notification/index.js +2 -0
- package/lib-module/Pagination/PageButton.js +65 -0
- package/lib-module/Pagination/Pagination.js +140 -0
- package/lib-module/Pagination/SideButton.js +103 -0
- package/lib-module/Pagination/dictionary.js +18 -0
- package/lib-module/Pagination/index.js +2 -0
- package/lib-module/Pagination/usePagination.js +72 -0
- package/lib-module/Progress/Progress.js +85 -0
- package/lib-module/Progress/ProgressBar.js +134 -0
- package/lib-module/Progress/ProgressBarBackground.js +41 -0
- package/lib-module/Progress/index.js +4 -0
- package/lib-module/Radio/Radio.js +263 -0
- package/lib-module/Radio/RadioButton.js +128 -0
- package/lib-module/Radio/RadioGroup.js +225 -0
- package/lib-module/Radio/RadioInput.js +60 -0
- package/lib-module/Radio/RadioInput.native.js +6 -0
- package/lib-module/Radio/index.js +3 -0
- package/lib-module/RadioCard/RadioCard.js +218 -0
- package/lib-module/RadioCard/RadioCardGroup.js +232 -0
- package/lib-module/RadioCard/index.js +3 -0
- package/lib-module/Search/Search.js +233 -0
- package/lib-module/Search/dictionary.js +12 -0
- package/lib-module/Search/index.js +2 -0
- package/lib-module/Select/Group.js +20 -0
- package/lib-module/Select/Group.native.js +14 -0
- package/lib-module/Select/Item.js +17 -0
- package/lib-module/Select/Item.native.js +9 -0
- package/lib-module/Select/Picker.js +67 -0
- package/lib-module/Select/Picker.native.js +110 -0
- package/lib-module/Select/Select.js +317 -0
- package/lib-module/Select/index.js +6 -0
- package/lib-module/SideNav/Item.js +139 -0
- package/lib-module/SideNav/ItemContent.js +45 -0
- package/lib-module/SideNav/ItemsGroup.js +115 -0
- package/lib-module/SideNav/SideNav.js +133 -0
- package/lib-module/SideNav/index.js +1 -0
- package/lib-module/Skeleton/Skeleton.js +117 -0
- package/lib-module/Skeleton/index.js +2 -0
- package/lib-module/Skeleton/skeleton.constant.js +3 -0
- package/lib-module/Skeleton/skeletonWebAnimation.js +18 -0
- package/lib-module/Skeleton/useSkeletonNativeAnimation.js +24 -0
- package/lib-module/Spacer/Spacer.js +97 -0
- package/lib-module/Spacer/index.js +2 -0
- package/lib-module/StackView/StackView.js +124 -0
- package/lib-module/StackView/StackWrap.js +48 -0
- package/lib-module/StackView/StackWrap.native.js +3 -0
- package/lib-module/StackView/StackWrapBox.js +114 -0
- package/lib-module/StackView/StackWrapGap.js +58 -0
- package/lib-module/StackView/common.js +32 -0
- package/lib-module/StackView/getStackedContent.js +123 -0
- package/lib-module/StackView/index.js +5 -0
- package/lib-module/StepTracker/Step.js +229 -0
- package/lib-module/StepTracker/StepTracker.js +175 -0
- package/lib-module/StepTracker/dictionary.js +10 -0
- package/lib-module/StepTracker/index.js +2 -0
- package/lib-module/Tabs/Tabs.js +113 -0
- package/lib-module/Tabs/TabsItem.js +215 -0
- package/lib-module/Tabs/index.js +2 -0
- package/lib-module/Tags/Tags.js +238 -0
- package/lib-module/Tags/index.js +2 -0
- package/lib-module/TextInput/TextArea.js +88 -0
- package/lib-module/TextInput/TextInput.js +60 -0
- package/lib-module/TextInput/TextInputBase.js +233 -0
- package/lib-module/TextInput/index.js +3 -0
- package/lib-module/TextInput/propTypes.js +31 -0
- package/lib-module/ThemeProvider/ThemeProvider.js +35 -0
- package/lib-module/ThemeProvider/index.js +6 -0
- package/lib-module/ThemeProvider/useSetTheme.js +22 -0
- package/lib-module/ThemeProvider/useTheme.js +14 -0
- package/lib-module/ThemeProvider/useThemeTokens.js +105 -0
- package/lib-module/ThemeProvider/utils/index.js +2 -0
- package/lib-module/ThemeProvider/utils/styles.js +174 -0
- package/lib-module/ThemeProvider/utils/theme-tokens.js +151 -0
- package/lib-module/ToggleSwitch/ToggleSwitch.js +224 -0
- package/lib-module/ToggleSwitch/ToggleSwitchGroup.js +202 -0
- package/lib-module/ToggleSwitch/index.js +3 -0
- package/lib-module/Tooltip/Backdrop.js +52 -0
- package/lib-module/Tooltip/Backdrop.native.js +43 -0
- package/lib-module/Tooltip/Tooltip.js +332 -0
- package/lib-module/Tooltip/dictionary.js +8 -0
- package/lib-module/Tooltip/getTooltipPosition.js +164 -0
- package/lib-module/Tooltip/index.js +2 -0
- package/lib-module/TooltipButton/TooltipButton.js +71 -0
- package/lib-module/TooltipButton/index.js +2 -0
- package/lib-module/Typography/Typography.js +118 -0
- package/lib-module/Typography/index.js +2 -0
- package/lib-module/ViewportProvider/ViewportProvider.js +28 -0
- package/lib-module/ViewportProvider/index.js +3 -0
- package/lib-module/ViewportProvider/useViewport.js +3 -0
- package/lib-module/ViewportProvider/useViewportListener.js +43 -0
- package/lib-module/index.js +48 -0
- package/lib-module/utils/a11y/index.js +2 -0
- package/lib-module/utils/a11y/semantics.js +154 -0
- package/lib-module/utils/a11y/textSize.js +34 -0
- package/lib-module/utils/animation/index.js +2 -0
- package/lib-module/utils/animation/useVerticalExpandAnimation.js +49 -0
- package/lib-module/utils/children.js +118 -0
- package/lib-module/utils/index.js +15 -0
- package/lib-module/utils/info/index.js +7 -0
- package/lib-module/utils/info/platform/index.js +11 -0
- package/lib-module/utils/info/platform/platform.android.js +1 -0
- package/lib-module/utils/info/platform/platform.ios.js +1 -0
- package/lib-module/utils/info/platform/platform.js +1 -0
- package/lib-module/utils/info/platform/platform.native.js +4 -0
- package/lib-module/utils/info/versions.js +5 -0
- package/lib-module/utils/input.js +180 -0
- package/lib-module/utils/pressability.js +97 -0
- package/lib-module/utils/props/a11yProps.js +140 -0
- package/lib-module/utils/props/clickProps.js +25 -0
- package/lib-module/utils/props/componentPropType.js +63 -0
- package/lib-module/utils/props/copyPropTypes.js +2 -0
- package/lib-module/utils/props/getPropSelector.js +6 -0
- package/lib-module/utils/props/hrefAttrsProp.js +30 -0
- package/lib-module/utils/props/index.js +16 -0
- package/lib-module/utils/props/inputSupportsProps.js +54 -0
- package/lib-module/utils/props/linkProps.js +47 -0
- package/lib-module/utils/props/paddingProp.js +9 -0
- package/lib-module/utils/props/pressProps.js +42 -0
- package/lib-module/utils/props/rectProp.js +9 -0
- package/lib-module/utils/props/responsiveProps.js +30 -0
- package/lib-module/utils/props/selectSystemProps.js +24 -0
- package/lib-module/utils/props/spacingProps.js +56 -0
- package/lib-module/utils/props/tokens.js +120 -0
- package/lib-module/utils/props/variantProp.js +18 -0
- package/lib-module/utils/props/viewProps.js +22 -0
- package/lib-module/utils/ssr.js +35 -0
- package/lib-module/utils/useCopy.js +42 -0
- package/lib-module/utils/useHash.js +44 -0
- package/lib-module/utils/useHash.native.js +7 -0
- package/lib-module/utils/useResponsiveProp.js +47 -0
- package/lib-module/utils/useSpacingScale.js +123 -0
- package/lib-module/utils/useUniqueId.js +12 -0
- package/lib-module/utils/withLinkRouter.js +82 -0
- package/package.json +9 -5
- package/src/A11yText/index.jsx +7 -3
- package/src/ActivityIndicator/Spinner.jsx +56 -44
- package/src/ActivityIndicator/Spinner.native.jsx +20 -12
- package/src/Box/Box.jsx +10 -9
- package/src/Button/ButtonBase.jsx +9 -8
- package/src/Card/Card.jsx +7 -4
- package/src/Card/PressableCardBase.jsx +12 -12
- package/src/Checkbox/Checkbox.jsx +12 -5
- package/src/Divider/Divider.jsx +17 -10
- package/src/ExpandCollapse/Control.jsx +12 -7
- package/src/ExpandCollapse/ExpandCollapse.jsx +13 -3
- package/src/ExpandCollapse/Panel.jsx +15 -5
- package/src/Feedback/Feedback.jsx +13 -3
- package/src/Fieldset/Fieldset.jsx +1 -1
- package/src/HorizontalScroll/HorizontalScroll.jsx +13 -6
- package/src/HorizontalScroll/HorizontalScrollButton.jsx +21 -58
- package/src/IconButton/IconButton.jsx +12 -8
- package/src/InputLabel/InputLabel.jsx +16 -2
- package/src/InputSupports/InputSupports.jsx +1 -1
- package/src/Link/LinkBase.jsx +10 -9
- package/src/List/List.jsx +12 -5
- package/src/List/ListItem.jsx +16 -2
- package/src/Modal/Modal.jsx +63 -50
- package/src/Notification/Notification.jsx +23 -6
- package/src/Pagination/Pagination.jsx +10 -3
- package/src/Progress/Progress.jsx +5 -3
- package/src/Progress/ProgressBar.jsx +8 -6
- package/src/Radio/Radio.jsx +13 -5
- package/src/Radio/RadioButton.jsx +13 -3
- package/src/Radio/RadioGroup.jsx +14 -2
- package/src/RadioCard/RadioCard.jsx +9 -6
- package/src/RadioCard/RadioCardGroup.jsx +16 -4
- package/src/Search/Search.jsx +15 -3
- package/src/Select/Select.jsx +21 -7
- package/src/SideNav/Item.jsx +15 -7
- package/src/SideNav/SideNav.jsx +13 -2
- package/src/Skeleton/Skeleton.jsx +55 -43
- package/src/Spacer/Spacer.jsx +8 -16
- package/src/StackView/StackView.jsx +13 -12
- package/src/StackView/StackWrapBox.jsx +12 -12
- package/src/StackView/StackWrapGap.jsx +9 -7
- package/src/StepTracker/Step.jsx +7 -4
- package/src/StepTracker/StepTracker.jsx +8 -8
- package/src/Tabs/Tabs.jsx +16 -3
- package/src/Tabs/TabsItem.jsx +13 -9
- package/src/Tags/Tags.jsx +20 -5
- package/src/TextInput/TextArea.jsx +20 -8
- package/src/TextInput/TextInput.jsx +20 -8
- package/src/TextInput/TextInputBase.jsx +13 -3
- package/src/ToggleSwitch/ToggleSwitch.jsx +16 -5
- package/src/ToggleSwitch/ToggleSwitchGroup.jsx +14 -6
- package/src/Tooltip/Tooltip.jsx +13 -3
- package/src/TooltipButton/TooltipButton.jsx +6 -4
- package/src/Typography/Typography.jsx +10 -6
- package/src/index.js +1 -1
- package/src/utils/children.jsx +2 -1
- package/src/utils/index.js +1 -0
- package/src/utils/props/index.js +1 -0
- package/src/{InputSupports/propTypes.js → utils/props/inputSupportsProps.js} +2 -4
- package/src/utils/ssr.js +35 -0
- package/release-context.json +0 -7
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import PropTypes from 'prop-types'; // Prototype-safe alternative to (linter-forbidden) someObject.hasOwnProperty()
|
|
3
|
+
|
|
4
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
|
+
|
|
6
|
+
const hasOwnProperty = (object, prop) => Object.prototype.hasOwnProperty.call(object, prop);
|
|
7
|
+
/**
|
|
8
|
+
* Higher-order component that has no effect unless an additional prop `LinkRouter` is passed.
|
|
9
|
+
* This may be used to provide custom wrappers for integrations with third party libraries.
|
|
10
|
+
*
|
|
11
|
+
* If LinkRouter is passed, LinkRouter is rendered in place of the main component and is passed:
|
|
12
|
+
*
|
|
13
|
+
* - `linkRouterProps`: an optional object passed alongside LinkRouter, for props needed by the wrapper
|
|
14
|
+
* that are not valid props for the wrapped component.
|
|
15
|
+
* - `Component`: automatically provided, the original component to render inside the wrapper.
|
|
16
|
+
* - `ref`: forwarded `ref` passed down to `Component`
|
|
17
|
+
* - All other props passed to the outer component
|
|
18
|
+
*
|
|
19
|
+
* @example A LinkRouter component to be used with link-like components might look like:
|
|
20
|
+
*
|
|
21
|
+
* ```jsx
|
|
22
|
+
* const LinkLinkRouter = forwardRef(({ Component, linkRouterProps: { to, options }, href, ...rest }, ref) => {
|
|
23
|
+
* const { href: resolvedHref, onClick } = useSomeRouterHook({ to, href, options })
|
|
24
|
+
* return <Component href={resolvedHref} onPress={onClick} {...rest} />
|
|
25
|
+
* })
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* Any component that takes href and onPress props may then use this wrapper:
|
|
29
|
+
*
|
|
30
|
+
* ```jsx
|
|
31
|
+
* <Link href={href} LinkRouter={LinkLinkRouter} linkRouterProps={{ to, options }}>Some link</Link>
|
|
32
|
+
* <IconButton icon={SomeIcon} LinkRouter={LinkLinkRouter} linkRouterProps={{ to, options }} ref={iconRef} />
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
const withLinkRouter = Component => {
|
|
38
|
+
const wrappedComponent = /*#__PURE__*/forwardRef(({
|
|
39
|
+
LinkRouter,
|
|
40
|
+
linkRouterProps,
|
|
41
|
+
...props
|
|
42
|
+
}, ref) => {
|
|
43
|
+
if (!LinkRouter) return /*#__PURE__*/_jsx(Component, { ...props,
|
|
44
|
+
ref: ref
|
|
45
|
+
});
|
|
46
|
+
return /*#__PURE__*/_jsx(LinkRouter, {
|
|
47
|
+
linkRouterProps: linkRouterProps,
|
|
48
|
+
Component: Component,
|
|
49
|
+
ref: ref,
|
|
50
|
+
...props
|
|
51
|
+
});
|
|
52
|
+
}); // Ensure the returned component has appropriate outer properties set:
|
|
53
|
+
|
|
54
|
+
/* eslint-disable-next-line react/forbid-foreign-prop-types */
|
|
55
|
+
|
|
56
|
+
const {
|
|
57
|
+
displayName,
|
|
58
|
+
name,
|
|
59
|
+
propTypes,
|
|
60
|
+
...otherProperties
|
|
61
|
+
} = Component; // Apply unique component name as a displayName
|
|
62
|
+
|
|
63
|
+
wrappedComponent.displayName = Component.displayName || Component.name; // Apply proptypes including wrapper props - is safely { ...undefined, ...undefined } in prod
|
|
64
|
+
|
|
65
|
+
wrappedComponent.propTypes = { ...Component.propTypes,
|
|
66
|
+
...withLinkRouter.propTypes
|
|
67
|
+
}; // Forward any other properties explicitly set e.g. Component.SubComponent
|
|
68
|
+
|
|
69
|
+
Object.keys(otherProperties).forEach(key => {
|
|
70
|
+
// Skip internal React properties from wrappedComponent's forwardRef (render, $$typeof, etc)
|
|
71
|
+
if (hasOwnProperty(Component, key) && !hasOwnProperty(wrappedComponent, key)) {
|
|
72
|
+
wrappedComponent[key] = Component[key];
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
return wrappedComponent;
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
withLinkRouter.propTypes = {
|
|
79
|
+
LinkRouter: PropTypes.elementType,
|
|
80
|
+
linkRouterProps: PropTypes.object
|
|
81
|
+
};
|
|
82
|
+
export default withLinkRouter;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@telus-uds/components-base",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.0",
|
|
4
4
|
"description": "Base components",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"base"
|
|
@@ -9,7 +9,9 @@
|
|
|
9
9
|
"homepage": "https://github.com/telus/universal-design-system#readme",
|
|
10
10
|
"license": "UNLICENSED",
|
|
11
11
|
"main": "lib/index.js",
|
|
12
|
+
"module": "lib-module/index.js",
|
|
12
13
|
"react-native": "src/index.js",
|
|
14
|
+
"sideEffects": false,
|
|
13
15
|
"directories": {
|
|
14
16
|
"lib": "lib",
|
|
15
17
|
"test": "__tests__"
|
|
@@ -24,7 +26,9 @@
|
|
|
24
26
|
"lint:fix": "telus-standard --fix",
|
|
25
27
|
"format": "prettier --write .",
|
|
26
28
|
"build": "yarn build:code && yarn build:docs",
|
|
27
|
-
"build:
|
|
29
|
+
"build:main": "babel src -d lib",
|
|
30
|
+
"build:module": "babel src -d lib-module --env-name module",
|
|
31
|
+
"build:code": "yarn build:main && yarn build:module",
|
|
28
32
|
"build:docs": "babel-node --plugins=react-docgen-alpha generate-component-docs.js",
|
|
29
33
|
"storybook": "start-storybook",
|
|
30
34
|
"dev": "yarn build:code --watch",
|
|
@@ -46,7 +50,7 @@
|
|
|
46
50
|
"react-native-web": "^0.17.0"
|
|
47
51
|
},
|
|
48
52
|
"devDependencies": {
|
|
49
|
-
"@telus-uds/browserslist-config": "^1.0.
|
|
53
|
+
"@telus-uds/browserslist-config": "^1.0.1",
|
|
50
54
|
"@testing-library/jest-native": "^4.0.1",
|
|
51
55
|
"@testing-library/react-hooks": "^7.0.1",
|
|
52
56
|
"@testing-library/react-native": "^7.2.0",
|
|
@@ -54,8 +58,8 @@
|
|
|
54
58
|
},
|
|
55
59
|
"dependencies": {
|
|
56
60
|
"airbnb-prop-types": "^2.16.0",
|
|
57
|
-
"@telus-uds/system-constants": "^1.0.
|
|
58
|
-
"@telus-uds/system-theme-tokens": "^1.
|
|
61
|
+
"@telus-uds/system-constants": "^1.0.2",
|
|
62
|
+
"@telus-uds/system-theme-tokens": "^1.4.0",
|
|
59
63
|
"lodash.debounce": "^4.0.8",
|
|
60
64
|
"lodash.merge": "^4.6.2",
|
|
61
65
|
"prop-types": "^15.7.2",
|
package/src/A11yText/index.jsx
CHANGED
|
@@ -2,7 +2,9 @@ import React, { forwardRef } from 'react'
|
|
|
2
2
|
import { Platform, StyleSheet, View } from 'react-native'
|
|
3
3
|
import PropTypes from 'prop-types'
|
|
4
4
|
|
|
5
|
-
import { a11yProps } from '../utils/props'
|
|
5
|
+
import { a11yProps, selectSystemProps, viewProps } from '../utils/props'
|
|
6
|
+
|
|
7
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
6
8
|
|
|
7
9
|
/**
|
|
8
10
|
* A11yText is a zero-size invisible element that adds text to be read by screen readers.
|
|
@@ -11,7 +13,7 @@ import { a11yProps } from '../utils/props'
|
|
|
11
13
|
* as a sibling to blocks of text like paragraphs and interactive elements like buttons.
|
|
12
14
|
*/
|
|
13
15
|
const A11yText = forwardRef(({ text, heading, ...rest }, ref) => {
|
|
14
|
-
const
|
|
16
|
+
const selectedProps = selectProps({
|
|
15
17
|
// On iOS, needs `accessible` to be true to be focusable without non-a11y content.
|
|
16
18
|
// On Web, `accessible` causes RNW to set attributes that may make the element be treated as a group.
|
|
17
19
|
// On Android, may cause this to be skipped when with `<Text>` siblings in an `accessible` View,
|
|
@@ -21,12 +23,14 @@ const A11yText = forwardRef(({ text, heading, ...rest }, ref) => {
|
|
|
21
23
|
accessibilityRole: heading ? 'header' : 'text',
|
|
22
24
|
...rest
|
|
23
25
|
})
|
|
24
|
-
|
|
26
|
+
|
|
27
|
+
return <View style={styles.invisible} ref={ref} {...selectedProps} />
|
|
25
28
|
})
|
|
26
29
|
|
|
27
30
|
A11yText.displayName = 'A11yText'
|
|
28
31
|
|
|
29
32
|
A11yText.propTypes = {
|
|
33
|
+
...selectedSystemPropTypes,
|
|
30
34
|
text: PropTypes.string.isRequired,
|
|
31
35
|
heading: PropTypes.bool
|
|
32
36
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React, { forwardRef } from 'react'
|
|
2
2
|
import { DURATION, MIN_EMPTY_ANGLE, MIN_STROKE_ANGLE, BEZIER, propTypes } from './shared'
|
|
3
|
+
import { useA11yInfo } from '../A11yInfoProvider'
|
|
3
4
|
|
|
4
5
|
const SVG_RADIUS = 20
|
|
5
6
|
const SVG_CIRCUMFERENCE = SVG_RADIUS * 2 * Math.PI
|
|
@@ -20,50 +21,61 @@ const bezierProps = {
|
|
|
20
21
|
}
|
|
21
22
|
// We're using svg rather than css here to define the animation to avoid needing to introduce css injection mechanism
|
|
22
23
|
// 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
|
-
const Spinner = forwardRef(({ size, color, thickness, label }, ref) =>
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
{
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
24
|
+
const Spinner = forwardRef(({ size, color, thickness, label }, ref) => {
|
|
25
|
+
const { reduceMotionEnabled } = useA11yInfo()
|
|
26
|
+
return (
|
|
27
|
+
<svg
|
|
28
|
+
ref={ref}
|
|
29
|
+
width={`${size}px`}
|
|
30
|
+
height={`${size}px`}
|
|
31
|
+
viewBox="0 0 48 48"
|
|
32
|
+
aria-valuetext={label}
|
|
33
|
+
role="progressbar"
|
|
34
|
+
aria-busy={true}
|
|
35
|
+
>
|
|
36
|
+
<g>
|
|
37
|
+
{reduceMotionEnabled ? null : (
|
|
38
|
+
<animateTransform
|
|
39
|
+
attributeName="transform"
|
|
40
|
+
type="rotate"
|
|
41
|
+
values={`-180 24 24;${360 + MIN_STROKE_ANGLE - 180} 24 24`}
|
|
42
|
+
{...animationProps}
|
|
43
|
+
/>
|
|
44
|
+
)}
|
|
45
|
+
<circle
|
|
46
|
+
fill="none"
|
|
47
|
+
stroke={color}
|
|
48
|
+
strokeWidth={(thickness * 48) / size}
|
|
49
|
+
strokeLinecap="round"
|
|
50
|
+
cx="24"
|
|
51
|
+
cy="24"
|
|
52
|
+
r="20"
|
|
53
|
+
strokeDasharray={
|
|
54
|
+
reduceMotionEnabled ? MAX_SVG_LENGTH : [MIN_SVG_LENGTH, SVG_CIRCUMFERENCE]
|
|
55
|
+
}
|
|
56
|
+
strokeDashoffset={0}
|
|
57
|
+
>
|
|
58
|
+
{reduceMotionEnabled ? null : (
|
|
59
|
+
<>
|
|
60
|
+
<animate
|
|
61
|
+
attributeName="stroke-dashoffset"
|
|
62
|
+
values={`0;-10;${MIN_SVG_LENGTH - SVG_CIRCUMFERENCE}`}
|
|
63
|
+
{...animationProps}
|
|
64
|
+
{...bezierProps}
|
|
65
|
+
/>
|
|
66
|
+
<animate
|
|
67
|
+
attributeName="stroke-dasharray"
|
|
68
|
+
values={`${MIN_SVG_LENGTH}, 200;${MAX_SVG_LENGTH}, 200;${MIN_SVG_LENGTH}, 200`}
|
|
69
|
+
{...animationProps}
|
|
70
|
+
{...bezierProps}
|
|
71
|
+
/>
|
|
72
|
+
</>
|
|
73
|
+
)}
|
|
74
|
+
</circle>
|
|
75
|
+
</g>
|
|
76
|
+
</svg>
|
|
77
|
+
)
|
|
78
|
+
})
|
|
67
79
|
Spinner.displayName = 'Spinner'
|
|
68
80
|
|
|
69
81
|
Spinner.propTypes = propTypes
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import React, { forwardRef } from 'react'
|
|
2
2
|
import { Animated, Easing, StyleSheet, View } from 'react-native'
|
|
3
3
|
import { DURATION, MIN_EMPTY_ANGLE, MIN_STROKE_ANGLE, BEZIER, propTypes } from './shared'
|
|
4
|
+
import { useA11yInfo } from '../A11yInfoProvider'
|
|
4
5
|
|
|
5
6
|
const ea = MIN_EMPTY_ANGLE / 2
|
|
6
7
|
const sa = MIN_STROKE_ANGLE / 2
|
|
7
8
|
|
|
8
9
|
const Spinner = forwardRef(({ size, color, thickness, label }, ref) => {
|
|
9
10
|
const { current: timer } = React.useRef(new Animated.Value(0))
|
|
11
|
+
const { reduceMotionEnabled } = useA11yInfo()
|
|
10
12
|
|
|
11
13
|
React.useLayoutEffect(() => {
|
|
12
14
|
const loop = Animated.timing(timer, {
|
|
@@ -17,16 +19,19 @@ const Spinner = forwardRef(({ size, color, thickness, label }, ref) => {
|
|
|
17
19
|
toValue: 1,
|
|
18
20
|
isInteraction: false
|
|
19
21
|
})
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
|
|
23
|
+
if (!reduceMotionEnabled) Animated.loop(loop).start()
|
|
24
|
+
else loop.stop()
|
|
25
|
+
}, [timer, reduceMotionEnabled])
|
|
22
26
|
|
|
23
27
|
const frames = (60 * DURATION) / 1000
|
|
24
28
|
const easing = Easing.bezier(...BEZIER)
|
|
25
29
|
const containerStyle = {
|
|
26
30
|
width: size,
|
|
27
|
-
height: size / 2,
|
|
31
|
+
height: size / (reduceMotionEnabled ? 1.5 : 2),
|
|
28
32
|
overflow: 'hidden'
|
|
29
33
|
}
|
|
34
|
+
const animationFrequency = reduceMotionEnabled ? [0] : [0, 1]
|
|
30
35
|
|
|
31
36
|
// Credit to https://github.com/n4kz/react-native-indicators and https://github.com/callstack/react-native-paper for this
|
|
32
37
|
return (
|
|
@@ -39,7 +44,7 @@ const Spinner = forwardRef(({ size, color, thickness, label }, ref) => {
|
|
|
39
44
|
accessibilityState={{ busy: true }}
|
|
40
45
|
>
|
|
41
46
|
<Animated.View style={[{ width: size, height: size }]} collapsable={false}>
|
|
42
|
-
{
|
|
47
|
+
{animationFrequency.map((index) => {
|
|
43
48
|
const inputRange = Array.from(
|
|
44
49
|
new Array(frames),
|
|
45
50
|
(_, frameIndex) => frameIndex / (frames - 1)
|
|
@@ -59,8 +64,16 @@ const Spinner = forwardRef(({ size, color, thickness, label }, ref) => {
|
|
|
59
64
|
|
|
60
65
|
const layerStyle = {
|
|
61
66
|
width: size,
|
|
62
|
-
height: size
|
|
63
|
-
|
|
67
|
+
height: size
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const viewportStyle = {
|
|
71
|
+
width: size,
|
|
72
|
+
height: size
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (!reduceMotionEnabled) {
|
|
76
|
+
layerStyle.transform = [
|
|
64
77
|
{
|
|
65
78
|
rotate: timer.interpolate({
|
|
66
79
|
inputRange: [0, 1],
|
|
@@ -68,12 +81,7 @@ const Spinner = forwardRef(({ size, color, thickness, label }, ref) => {
|
|
|
68
81
|
})
|
|
69
82
|
}
|
|
70
83
|
]
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const viewportStyle = {
|
|
74
|
-
width: size,
|
|
75
|
-
height: size,
|
|
76
|
-
transform: [
|
|
84
|
+
viewportStyle.transform = [
|
|
77
85
|
{
|
|
78
86
|
translateY: index ? -size / 2 : 0
|
|
79
87
|
},
|
package/src/Box/Box.jsx
CHANGED
|
@@ -4,15 +4,18 @@ import { View, ScrollView } from 'react-native'
|
|
|
4
4
|
import { useThemeTokens } from '../ThemeProvider'
|
|
5
5
|
import {
|
|
6
6
|
a11yProps,
|
|
7
|
-
|
|
8
|
-
variantProp,
|
|
7
|
+
getA11yPropsFromHtmlTag,
|
|
9
8
|
getTokensPropType,
|
|
9
|
+
layoutTags,
|
|
10
|
+
selectSystemProps,
|
|
11
|
+
spacingProps,
|
|
10
12
|
useSpacingScale,
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
layoutTags
|
|
13
|
+
variantProp,
|
|
14
|
+
viewProps
|
|
14
15
|
} from '../utils'
|
|
15
16
|
|
|
17
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
18
|
+
|
|
16
19
|
/**
|
|
17
20
|
* @typedef {import('../utils/props/spacingProps.js').SpacingValue} SpacingValue
|
|
18
21
|
* @typedef {import('../utils/props/spacingProps.js').SpacingIndex} SpacingIndex
|
|
@@ -122,8 +125,7 @@ const Box = forwardRef(
|
|
|
122
125
|
) => {
|
|
123
126
|
const props = {
|
|
124
127
|
...getA11yPropsFromHtmlTag(tag, accessibilityRole),
|
|
125
|
-
...
|
|
126
|
-
...viewProps.select(rest)
|
|
128
|
+
...selectProps(rest)
|
|
127
129
|
}
|
|
128
130
|
|
|
129
131
|
const themeTokens = useThemeTokens('Box', tokens, variant)
|
|
@@ -155,8 +157,7 @@ const Box = forwardRef(
|
|
|
155
157
|
Box.displayName = 'Box'
|
|
156
158
|
|
|
157
159
|
Box.propTypes = {
|
|
158
|
-
...
|
|
159
|
-
...viewProps.types,
|
|
160
|
+
...selectedSystemPropTypes,
|
|
160
161
|
variant: variantProp.propType,
|
|
161
162
|
tokens: getTokensPropType('Box'),
|
|
162
163
|
/**
|
|
@@ -11,10 +11,14 @@ import {
|
|
|
11
11
|
linkProps,
|
|
12
12
|
resolvePressableState,
|
|
13
13
|
resolvePressableTokens,
|
|
14
|
+
selectSystemProps,
|
|
15
|
+
viewProps,
|
|
14
16
|
wrapStringsInText,
|
|
15
17
|
withLinkRouter
|
|
16
18
|
} from '../utils'
|
|
17
19
|
|
|
20
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, linkProps, viewProps])
|
|
21
|
+
|
|
18
22
|
const getOuterBorderOffset = ({ outerBorderGap = 0, outerBorderWidth = 0 }) =>
|
|
19
23
|
outerBorderGap + outerBorderWidth
|
|
20
24
|
|
|
@@ -144,7 +148,6 @@ const ButtonBase = forwardRef(
|
|
|
144
148
|
disabled = false, // alias for inactive
|
|
145
149
|
inactive = disabled,
|
|
146
150
|
selected = false,
|
|
147
|
-
dataSet,
|
|
148
151
|
...rawRest
|
|
149
152
|
},
|
|
150
153
|
ref
|
|
@@ -154,13 +157,13 @@ const ButtonBase = forwardRef(
|
|
|
154
157
|
const resolveButtonTokens = (pressableState) =>
|
|
155
158
|
resolvePressableTokens(tokens, pressableState, extraButtonState)
|
|
156
159
|
|
|
157
|
-
const
|
|
160
|
+
const systemProps = selectProps(rest)
|
|
158
161
|
|
|
159
162
|
const getPressableStyle = (pressableState) => {
|
|
160
163
|
const themeTokens = resolveButtonTokens(pressableState)
|
|
161
164
|
return [
|
|
162
165
|
staticStyles.row,
|
|
163
|
-
selectWebOnlyStyles(inactive, themeTokens,
|
|
166
|
+
selectWebOnlyStyles(inactive, themeTokens, systemProps),
|
|
164
167
|
selectOuterContainerStyles(themeTokens),
|
|
165
168
|
selectOuterWidthStyles(themeTokens)
|
|
166
169
|
]
|
|
@@ -173,9 +176,8 @@ const ButtonBase = forwardRef(
|
|
|
173
176
|
onPress={linkProps.handleHref({ href, onPress })}
|
|
174
177
|
style={getPressableStyle}
|
|
175
178
|
disabled={inactive}
|
|
176
|
-
dataSet={dataSet}
|
|
177
179
|
hrefAttrs={hrefAttrs}
|
|
178
|
-
{...
|
|
180
|
+
{...systemProps}
|
|
179
181
|
>
|
|
180
182
|
{(pressableState) => {
|
|
181
183
|
const themeTokens = resolveButtonTokens(pressableState)
|
|
@@ -224,9 +226,8 @@ ButtonBase.displayName = 'ButtonBase'
|
|
|
224
226
|
|
|
225
227
|
ButtonBase.propTypes = {
|
|
226
228
|
id: PropTypes.string,
|
|
227
|
-
...
|
|
228
|
-
...buttonPropTypes
|
|
229
|
-
...linkProps.types
|
|
229
|
+
...selectedSystemPropTypes,
|
|
230
|
+
...buttonPropTypes
|
|
230
231
|
}
|
|
231
232
|
ButtonBase.defaultProps = { id: undefined }
|
|
232
233
|
|
package/src/Card/Card.jsx
CHANGED
|
@@ -4,9 +4,11 @@ import PropTypes from 'prop-types'
|
|
|
4
4
|
import { useThemeTokens } from '../ThemeProvider'
|
|
5
5
|
import { getTokensPropType, variantProp } from '../utils'
|
|
6
6
|
import { useViewport } from '../ViewportProvider'
|
|
7
|
-
import { a11yProps } from '../utils/props'
|
|
7
|
+
import { a11yProps, selectSystemProps, viewProps } from '../utils/props'
|
|
8
8
|
import CardBase from './CardBase'
|
|
9
9
|
|
|
10
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
11
|
+
|
|
10
12
|
/**
|
|
11
13
|
* A basic card component, unstyled by default.
|
|
12
14
|
*
|
|
@@ -58,18 +60,19 @@ import CardBase from './CardBase'
|
|
|
58
60
|
const Card = ({ children, tokens, variant, dataSet, ...rest }) => {
|
|
59
61
|
const viewport = useViewport()
|
|
60
62
|
const themeTokens = useThemeTokens('Card', tokens, variant, { viewport })
|
|
63
|
+
|
|
61
64
|
return (
|
|
62
|
-
<CardBase tokens={themeTokens} dataSet={dataSet} {...rest}>
|
|
65
|
+
<CardBase tokens={themeTokens} dataSet={dataSet} {...selectProps(rest)}>
|
|
63
66
|
{children}
|
|
64
67
|
</CardBase>
|
|
65
68
|
)
|
|
66
69
|
}
|
|
67
70
|
|
|
68
71
|
Card.propTypes = {
|
|
72
|
+
...selectedSystemPropTypes,
|
|
69
73
|
children: PropTypes.node,
|
|
70
74
|
tokens: getTokensPropType('Card'),
|
|
71
|
-
variant: variantProp.propType
|
|
72
|
-
...a11yProps.types
|
|
75
|
+
variant: variantProp.propType
|
|
73
76
|
}
|
|
74
77
|
|
|
75
78
|
export default Card
|
|
@@ -5,19 +5,23 @@ import { Pressable, Platform } from 'react-native'
|
|
|
5
5
|
import { useViewport } from '../ViewportProvider'
|
|
6
6
|
import { applyOuterBorder, validateThemeTokens } from '../ThemeProvider'
|
|
7
7
|
import {
|
|
8
|
+
a11yProps,
|
|
9
|
+
clickProps,
|
|
10
|
+
getTokenNames,
|
|
11
|
+
getTokensSetPropType,
|
|
12
|
+
linkProps,
|
|
8
13
|
resolvePressableState,
|
|
9
14
|
resolvePressableTokens,
|
|
15
|
+
selectSystemProps,
|
|
10
16
|
selectTokens,
|
|
11
|
-
getTokenNames,
|
|
12
|
-
getTokensSetPropType,
|
|
13
17
|
variantProp,
|
|
14
|
-
|
|
15
|
-
clickProps,
|
|
18
|
+
viewProps,
|
|
16
19
|
withLinkRouter
|
|
17
20
|
} from '../utils'
|
|
18
|
-
import { a11yProps } from '../utils/props'
|
|
19
21
|
import CardBase from './CardBase'
|
|
20
22
|
|
|
23
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
24
|
+
|
|
21
25
|
const tokenKeys = [
|
|
22
26
|
...getTokenNames('Card'),
|
|
23
27
|
|
|
@@ -52,10 +56,6 @@ const PressableCardBase = forwardRef(
|
|
|
52
56
|
) => {
|
|
53
57
|
const { onPress, ...rest } = clickProps.toPressProps(rawRest)
|
|
54
58
|
const viewport = useViewport()
|
|
55
|
-
const a11y = a11yProps.select({
|
|
56
|
-
...rest,
|
|
57
|
-
accessibilityRole
|
|
58
|
-
})
|
|
59
59
|
const additionalState = { checked, validation, inactive, viewport }
|
|
60
60
|
|
|
61
61
|
const getCardState = (pressableState) => resolvePressableState(pressableState, additionalState)
|
|
@@ -98,7 +98,7 @@ const PressableCardBase = forwardRef(
|
|
|
98
98
|
onKeyDown={handleKeyDown}
|
|
99
99
|
hrefAttrs={hrefAttrs}
|
|
100
100
|
style={getOuterBorderStyle}
|
|
101
|
-
{...
|
|
101
|
+
{...selectProps({ ...rest, accessibilityRole })}
|
|
102
102
|
>
|
|
103
103
|
{(pressableState) => (
|
|
104
104
|
<CardBase tokens={getCardTokens(pressableState)}>
|
|
@@ -112,10 +112,10 @@ const PressableCardBase = forwardRef(
|
|
|
112
112
|
PressableCardBase.displayName = 'PressableCardBase'
|
|
113
113
|
|
|
114
114
|
PressableCardBase.propTypes = {
|
|
115
|
+
...selectedSystemPropTypes,
|
|
115
116
|
children: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),
|
|
116
117
|
tokens: getTokensSetPropType(tokenKeys, { requireAll: true, allowFunction: true }),
|
|
117
|
-
variant: variantProp.propType
|
|
118
|
-
...a11yProps.types
|
|
118
|
+
variant: variantProp.propType
|
|
119
119
|
}
|
|
120
120
|
|
|
121
121
|
export default withLinkRouter(PressableCardBase)
|
|
@@ -7,10 +7,18 @@ import CheckboxLabel from '../InputLabel/LabelContent'
|
|
|
7
7
|
import Feedback from '../Feedback'
|
|
8
8
|
import StackView from '../StackView'
|
|
9
9
|
import { applyShadowToken, applyTextStyles, useThemeTokensCallback } from '../ThemeProvider'
|
|
10
|
-
import {
|
|
11
|
-
|
|
10
|
+
import {
|
|
11
|
+
a11yProps,
|
|
12
|
+
getTokensPropType,
|
|
13
|
+
selectSystemProps,
|
|
14
|
+
useInputValue,
|
|
15
|
+
variantProp,
|
|
16
|
+
viewProps
|
|
17
|
+
} from '../utils'
|
|
12
18
|
import useUniqueId from '../utils/useUniqueId'
|
|
13
19
|
|
|
20
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
21
|
+
|
|
14
22
|
const selectInputStyles = (
|
|
15
23
|
{
|
|
16
24
|
iconBackgroundColor,
|
|
@@ -154,7 +162,6 @@ const Checkbox = forwardRef(
|
|
|
154
162
|
// The expected keyboard shortcut for activating a checkbox is the Space key
|
|
155
163
|
if (event?.key === ' ') handleChange(event)
|
|
156
164
|
}
|
|
157
|
-
const accessibilityProps = a11yProps.select(rest)
|
|
158
165
|
const uniqueId = useUniqueId('checkbox')
|
|
159
166
|
const inputId = id ?? uniqueId
|
|
160
167
|
|
|
@@ -167,7 +174,7 @@ const Checkbox = forwardRef(
|
|
|
167
174
|
onPress={handleChange}
|
|
168
175
|
accessibilityRole="checkbox"
|
|
169
176
|
accessibilityState={{ checked: isChecked, disabled: inactive }}
|
|
170
|
-
{...
|
|
177
|
+
{...selectProps(rest)}
|
|
171
178
|
>
|
|
172
179
|
{({ focused: focus, hovered: hover, pressed }) => {
|
|
173
180
|
const { icon: IconComponent, ...stateTokens } = getTokens({ focus, hover, pressed })
|
|
@@ -222,7 +229,7 @@ const Checkbox = forwardRef(
|
|
|
222
229
|
Checkbox.displayName = 'Checkbox'
|
|
223
230
|
|
|
224
231
|
Checkbox.propTypes = {
|
|
225
|
-
...
|
|
232
|
+
...selectedSystemPropTypes,
|
|
226
233
|
/**
|
|
227
234
|
* Use `checked` for controlled Checkbox. For uncontrolled Checkbox, use the `defaultChecked` prop.
|
|
228
235
|
*/
|
package/src/Divider/Divider.jsx
CHANGED
|
@@ -3,7 +3,17 @@ import PropTypes from 'prop-types'
|
|
|
3
3
|
import { View, StyleSheet, Platform } from 'react-native'
|
|
4
4
|
import { useThemeTokens } from '../ThemeProvider'
|
|
5
5
|
import Spacer from '../Spacer'
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
a11yProps,
|
|
8
|
+
getTokensPropType,
|
|
9
|
+
selectSystemProps,
|
|
10
|
+
spacingProps,
|
|
11
|
+
variantProp,
|
|
12
|
+
viewProps
|
|
13
|
+
} from '../utils'
|
|
14
|
+
|
|
15
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
16
|
+
|
|
7
17
|
/**
|
|
8
18
|
* @typedef {import('../utils/props/spacingProps.js').SpacingIndex} SpacingIndex
|
|
9
19
|
* @typedef {import('../utils/props/spacingProps.js').SpacingObject} SpacingObject
|
|
@@ -45,7 +55,7 @@ import { getTokensPropType, variantProp, spacingProps } from '../utils'
|
|
|
45
55
|
*
|
|
46
56
|
* For accessibility purposes a divider component will be described with ARIA attributes, i.e. `role="separator"` and `aria-orientation="vertical/horizontal"`.
|
|
47
57
|
*/
|
|
48
|
-
const Divider = forwardRef(({ variant, vertical = false, space, tokens,
|
|
58
|
+
const Divider = forwardRef(({ variant, vertical = false, space, tokens, ...rest }, ref) => {
|
|
49
59
|
const { color, width } = useThemeTokens('Divider', tokens, variant)
|
|
50
60
|
|
|
51
61
|
const borderStyles = vertical
|
|
@@ -68,8 +78,10 @@ const Divider = forwardRef(({ variant, vertical = false, space, tokens, testID }
|
|
|
68
78
|
: // There are no such equivalent attributes for native
|
|
69
79
|
{}
|
|
70
80
|
|
|
81
|
+
const { testID, ...selectedProps } = selectProps({ ...a11y, ...rest })
|
|
82
|
+
|
|
71
83
|
const divider = (
|
|
72
|
-
<View ref={ref} style={[styles.divider, borderStyles]} testID={testID} {...
|
|
84
|
+
<View ref={ref} style={[styles.divider, borderStyles]} testID={testID} {...selectedProps} />
|
|
73
85
|
)
|
|
74
86
|
if (!space) return divider
|
|
75
87
|
const spacerProps = { space, direction: vertical ? 'row' : 'column' }
|
|
@@ -84,6 +96,7 @@ const Divider = forwardRef(({ variant, vertical = false, space, tokens, testID }
|
|
|
84
96
|
Divider.displayName = 'Divider'
|
|
85
97
|
|
|
86
98
|
Divider.propTypes = {
|
|
99
|
+
...selectedSystemPropTypes,
|
|
87
100
|
tokens: getTokensPropType('Divider'),
|
|
88
101
|
space: spacingProps.types.spacingValue,
|
|
89
102
|
variant: variantProp.propType,
|
|
@@ -91,13 +104,7 @@ Divider.propTypes = {
|
|
|
91
104
|
* By default, the divider is a horizontal line the full width of its parent.
|
|
92
105
|
* With `vertical` prop and when inside a container with { flexDirection: row }, draws a full height vertical line.
|
|
93
106
|
*/
|
|
94
|
-
vertical: PropTypes.bool
|
|
95
|
-
/**
|
|
96
|
-
* @ignore
|
|
97
|
-
* In tests, the only way to select dividers is with testID prop and getByTestId, since they have no content,
|
|
98
|
-
* no accessibility role on native, and there is no equivalent of nextSibling in React Native Testing Library.
|
|
99
|
-
*/
|
|
100
|
-
testID: PropTypes.string
|
|
107
|
+
vertical: PropTypes.bool
|
|
101
108
|
}
|
|
102
109
|
|
|
103
110
|
const styles = StyleSheet.create({
|