@telus-uds/components-base 0.0.2-prerelease.7 → 0.0.2-prerelease.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.ultra.cache.json +1 -1
- package/CHANGELOG.md +27 -0
- package/__fixtures__/Accessible.js +33 -0
- package/__fixtures__/Accessible.native.js +32 -0
- package/__fixtures__/testTheme.js +429 -29
- package/__tests__/ActivityIndicator/ActivityIndicator.test.jsx +1 -1
- package/__tests__/Button/ButtonGroup.test.jsx +2 -2
- package/__tests__/Checkbox/CheckboxGroup.test.jsx +247 -0
- package/__tests__/Icon/Icon.test.jsx +3 -3
- package/__tests__/Modal/Modal.test.jsx +47 -0
- package/__tests__/Notification/Notification.test.jsx +20 -0
- package/__tests__/Pagination/Pagination.test.jsx +2 -2
- package/__tests__/Progress/Progress.test.jsx +79 -0
- package/__tests__/Radio/RadioGroup.test.jsx +221 -0
- package/__tests__/RadioCard/RadioCard.test.jsx +87 -0
- package/__tests__/RadioCard/RadioCardGroup.test.jsx +247 -0
- package/__tests__/Search/Search.test.jsx +72 -0
- package/__tests__/Skeleton/Skeleton.test.jsx +1 -1
- package/__tests__/StepTracker/StepTracker.test.jsx +94 -0
- package/__tests__/Tabs/Tabs.test.jsx +200 -0
- package/__tests__/Tags/Tags.test.jsx +1 -1
- package/__tests__/utils/input.test.js +58 -0
- package/__tests__/utils/useCopy.test.js +14 -3
- package/babel.config.js +20 -0
- package/jest.config.js +1 -1
- package/lib/A11yInfoProvider/index.js +54 -26
- package/lib/A11yText/index.js +37 -14
- package/lib/ActivityIndicator/Spinner.js +78 -0
- package/lib/ActivityIndicator/Spinner.native.js +121 -87
- package/lib/ActivityIndicator/index.js +28 -12
- package/lib/ActivityIndicator/shared.js +27 -12
- package/lib/BaseProvider/index.js +34 -11
- package/lib/Box/Box.js +54 -31
- package/lib/Box/index.js +13 -2
- package/lib/Button/Button.js +32 -11
- package/lib/Button/ButtonBase.js +85 -78
- package/lib/Button/ButtonGroup.js +94 -70
- package/lib/Button/ButtonLink.js +38 -15
- package/lib/Button/index.js +31 -4
- package/lib/Button/propTypes.js +32 -9
- package/lib/Card/Card.js +36 -41
- package/lib/Card/CardBase.js +78 -0
- package/lib/Card/PressableCardBase.js +137 -0
- package/lib/Card/index.js +40 -2
- package/lib/Checkbox/Checkbox.js +139 -103
- package/lib/Checkbox/CheckboxGroup.js +231 -0
- package/lib/Checkbox/CheckboxInput.js +74 -0
- package/lib/Checkbox/CheckboxInput.native.js +9 -1
- package/lib/Checkbox/index.js +21 -2
- package/lib/Divider/Divider.js +50 -24
- package/lib/Divider/index.js +13 -2
- package/lib/ExpandCollapse/Accordion.js +20 -7
- package/lib/ExpandCollapse/Control.js +50 -27
- package/lib/ExpandCollapse/ExpandCollapse.js +41 -24
- package/lib/ExpandCollapse/Panel.js +75 -37
- package/lib/ExpandCollapse/index.js +25 -7
- package/lib/Feedback/Feedback.js +69 -40
- package/lib/Feedback/index.js +13 -2
- package/lib/Fieldset/Fieldset.js +160 -0
- package/lib/Fieldset/FieldsetContainer.js +41 -0
- package/lib/Fieldset/FieldsetContainer.native.js +33 -0
- package/lib/Fieldset/Legend.js +33 -0
- package/lib/Fieldset/Legend.native.js +43 -0
- package/lib/Fieldset/cssReset.js +21 -0
- package/lib/Fieldset/index.js +13 -0
- package/lib/FlexGrid/Col/Col.js +67 -38
- package/lib/FlexGrid/Col/index.js +13 -2
- package/lib/FlexGrid/FlexGrid.js +70 -45
- package/lib/FlexGrid/Row/Row.js +48 -27
- package/lib/FlexGrid/Row/index.js +13 -2
- package/lib/FlexGrid/helpers/index.js +9 -1
- package/lib/FlexGrid/index.js +13 -2
- package/lib/FlexGrid/providers/GutterContext.js +15 -3
- package/lib/Icon/Icon.js +46 -44
- package/lib/Icon/IconText.js +49 -21
- package/lib/Icon/index.js +31 -4
- package/lib/InputLabel/InputLabel.js +70 -36
- package/lib/InputLabel/LabelContent.js +31 -0
- package/lib/InputLabel/LabelContent.native.js +9 -1
- package/lib/InputLabel/index.js +13 -2
- package/lib/InputSupports/InputSupports.js +62 -48
- package/lib/InputSupports/index.js +13 -2
- package/lib/InputSupports/propTypes.js +19 -8
- package/lib/InputSupports/useInputSupports.js +41 -0
- package/lib/Link/ChevronLink.js +33 -16
- package/lib/Link/InlinePressable.js +50 -0
- package/lib/Link/InlinePressable.native.js +34 -11
- package/lib/Link/Link.js +25 -9
- package/lib/Link/LinkBase.js +87 -57
- package/lib/Link/TextButton.js +32 -13
- package/lib/Link/index.js +39 -5
- package/lib/List/List.js +51 -23
- package/lib/List/ListItem.js +70 -40
- package/lib/List/index.js +13 -2
- package/lib/Modal/Modal.js +226 -0
- package/lib/Modal/dictionary.js +16 -0
- package/lib/Modal/index.js +13 -0
- package/lib/Notification/Notification.js +200 -0
- package/lib/Notification/dictionary.js +15 -0
- package/lib/Notification/index.js +13 -0
- package/lib/Pagination/PageButton.js +47 -25
- package/lib/Pagination/Pagination.js +70 -40
- package/lib/Pagination/SideButton.js +63 -37
- package/lib/Pagination/dictionary.js +9 -2
- package/lib/Pagination/index.js +13 -2
- package/lib/Pagination/usePagination.js +12 -2
- package/lib/Progress/Progress.js +99 -0
- package/lib/Progress/ProgressBar.js +146 -0
- package/lib/Progress/ProgressBarBackground.js +57 -0
- package/lib/Progress/index.js +16 -0
- package/lib/Radio/Radio.js +110 -109
- package/lib/Radio/RadioButton.js +141 -0
- package/lib/Radio/RadioGroup.js +233 -0
- package/lib/Radio/RadioInput.js +76 -0
- package/lib/Radio/RadioInput.native.js +9 -1
- package/lib/Radio/index.js +21 -2
- package/lib/RadioCard/RadioCard.js +240 -0
- package/lib/RadioCard/RadioCardGroup.js +251 -0
- package/lib/RadioCard/index.js +21 -0
- package/lib/Search/Search.js +243 -0
- package/lib/Search/dictionary.js +19 -0
- package/lib/Search/index.js +13 -0
- package/lib/Select/Group.js +33 -0
- package/lib/Select/Group.native.js +16 -5
- package/lib/Select/Item.js +29 -0
- package/lib/Select/Item.native.js +14 -4
- package/lib/Select/Picker.js +79 -0
- package/lib/Select/Picker.native.js +52 -24
- package/lib/Select/Select.js +110 -82
- package/lib/Select/index.js +19 -6
- package/lib/SideNav/Item.js +54 -33
- package/lib/SideNav/ItemContent.js +41 -15
- package/lib/SideNav/ItemsGroup.js +46 -27
- package/lib/SideNav/SideNav.js +92 -69
- package/lib/SideNav/index.js +15 -1
- package/lib/Skeleton/Skeleton.js +55 -37
- package/lib/Skeleton/index.js +13 -2
- package/lib/Skeleton/skeleton.constant.js +12 -0
- package/lib/Skeleton/skeletonWebAnimation.js +27 -0
- package/lib/Skeleton/useSkeletonNativeAnimation.js +37 -0
- package/lib/Spacer/Spacer.js +31 -12
- package/lib/Spacer/index.js +13 -2
- package/lib/StackView/StackView.js +49 -27
- package/lib/StackView/StackWrap.js +33 -10
- package/lib/StackView/StackWrap.native.js +13 -2
- package/lib/StackView/StackWrapBox.js +46 -24
- package/lib/StackView/StackWrapGap.js +43 -22
- package/lib/StackView/common.js +19 -4
- package/lib/StackView/getStackedContent.js +49 -19
- package/lib/StackView/index.js +29 -5
- package/lib/StepTracker/Step.js +245 -0
- package/lib/StepTracker/StepTracker.js +197 -0
- package/lib/StepTracker/dictionary.js +17 -0
- package/lib/StepTracker/index.js +13 -0
- package/lib/Tabs/HorizontalScroll.js +199 -0
- package/lib/Tabs/ScrollViewEnd.js +66 -0
- package/lib/Tabs/ScrollViewEnd.native.js +41 -0
- package/lib/Tabs/Tabs.js +117 -0
- package/lib/Tabs/TabsItem.js +234 -0
- package/lib/Tabs/TabsScrollButton.js +121 -0
- package/lib/Tabs/dictionary.js +18 -0
- package/lib/Tabs/index.js +13 -0
- package/lib/Tabs/itemPositions.js +128 -0
- package/lib/Tags/Tags.js +130 -97
- package/lib/Tags/index.js +13 -2
- package/lib/TextInput/TextArea.js +51 -24
- package/lib/TextInput/TextInput.js +40 -19
- package/lib/TextInput/TextInputBase.js +78 -55
- package/lib/TextInput/index.js +23 -3
- package/lib/TextInput/propTypes.js +18 -7
- package/lib/ThemeProvider/ThemeProvider.js +38 -14
- package/lib/ThemeProvider/index.js +61 -6
- package/lib/ThemeProvider/useSetTheme.js +14 -5
- package/lib/ThemeProvider/useTheme.js +13 -4
- package/lib/ThemeProvider/useThemeTokens.js +32 -16
- package/lib/ThemeProvider/utils/index.js +31 -2
- package/lib/ThemeProvider/utils/styles.js +52 -16
- package/lib/ThemeProvider/utils/theme-tokens.js +94 -16
- package/lib/ToggleSwitch/ToggleSwitch.js +75 -51
- package/lib/ToggleSwitch/index.js +13 -2
- package/lib/Tooltip/{Backdrop.web.js → Backdrop.js} +22 -18
- package/lib/Tooltip/Backdrop.native.js +39 -15
- package/lib/Tooltip/Tooltip.js +112 -70
- package/lib/Tooltip/dictionary.js +9 -2
- package/lib/Tooltip/getTooltipPosition.js +9 -1
- package/lib/Tooltip/index.js +13 -2
- package/lib/TooltipButton/TooltipButton.js +57 -38
- package/lib/TooltipButton/index.js +13 -2
- package/lib/Typography/Typography.js +57 -27
- package/lib/Typography/index.js +13 -2
- package/lib/ViewportProvider/ViewportProvider.js +34 -13
- package/lib/ViewportProvider/index.js +28 -3
- package/lib/ViewportProvider/useViewport.js +15 -3
- package/lib/ViewportProvider/useViewportListener.js +24 -10
- package/lib/index.js +509 -33
- package/lib/utils/a11y/index.js +18 -1
- package/lib/utils/a11y/textSize.js +23 -7
- package/lib/utils/animation/index.js +15 -2
- package/lib/utils/animation/useVerticalExpandAnimation.js +28 -11
- package/lib/utils/children.js +87 -0
- package/lib/utils/index.js +163 -10
- package/lib/utils/info/index.js +18 -6
- package/lib/utils/info/platform/index.js +19 -7
- package/lib/utils/info/platform/platform.android.js +8 -1
- package/lib/utils/info/platform/platform.ios.js +8 -1
- package/lib/utils/info/platform/platform.js +8 -0
- package/lib/utils/info/platform/platform.native.js +8 -1
- package/lib/utils/info/versions.js +15 -4
- package/lib/utils/input.js +51 -33
- package/lib/utils/pressability.js +38 -10
- package/lib/utils/propTypes.js +217 -125
- package/lib/utils/useCopy.js +40 -5
- package/lib/utils/useHash.js +48 -0
- package/lib/utils/useHash.native.js +15 -0
- package/lib/utils/useResponsiveProp.js +21 -9
- package/lib/utils/useSpacingScale.js +21 -9
- package/lib/utils/useUniqueId.js +13 -4
- package/package.json +7 -6
- package/release-context.json +4 -4
- package/src/ActivityIndicator/{Spinner.web.jsx → Spinner.jsx} +0 -0
- package/src/Box/Box.jsx +11 -4
- package/src/Button/Button.jsx +3 -2
- package/src/Button/ButtonBase.jsx +27 -36
- package/src/Button/ButtonGroup.jsx +2 -2
- package/src/Button/ButtonLink.jsx +3 -2
- package/src/Button/propTypes.js +12 -2
- package/src/Card/Card.jsx +4 -30
- package/src/Card/CardBase.jsx +57 -0
- package/src/Card/PressableCardBase.jsx +112 -0
- package/src/Card/index.js +3 -0
- package/src/Checkbox/Checkbox.jsx +10 -11
- package/src/Checkbox/CheckboxGroup.jsx +196 -0
- package/src/Checkbox/{CheckboxInput.web.jsx → CheckboxInput.jsx} +0 -0
- package/src/Checkbox/index.js +2 -0
- package/src/ExpandCollapse/Control.jsx +1 -1
- package/src/Feedback/Feedback.jsx +1 -1
- package/src/Fieldset/Fieldset.jsx +129 -0
- package/src/Fieldset/FieldsetContainer.jsx +22 -0
- package/src/Fieldset/FieldsetContainer.native.jsx +16 -0
- package/src/Fieldset/Legend.jsx +16 -0
- package/src/Fieldset/Legend.native.jsx +22 -0
- package/src/Fieldset/cssReset.js +14 -0
- package/src/Fieldset/index.js +3 -0
- package/src/Icon/Icon.jsx +14 -23
- package/src/Icon/IconText.jsx +2 -2
- package/src/Icon/index.js +2 -2
- package/src/InputLabel/InputLabel.jsx +9 -2
- package/src/InputLabel/{LabelContent.web.jsx → LabelContent.jsx} +0 -0
- package/src/InputSupports/InputSupports.jsx +7 -18
- package/src/InputSupports/useInputSupports.js +30 -0
- package/src/Link/{InlinePressable.web.jsx → InlinePressable.jsx} +0 -0
- package/src/Link/LinkBase.jsx +14 -12
- package/src/Modal/Modal.jsx +185 -0
- package/src/Modal/dictionary.js +9 -0
- package/src/Modal/index.js +3 -0
- package/src/Notification/Notification.jsx +149 -0
- package/src/Notification/dictionary.js +8 -0
- package/src/Notification/index.js +3 -0
- package/src/Progress/Progress.jsx +77 -0
- package/src/Progress/ProgressBar.jsx +110 -0
- package/src/Progress/ProgressBarBackground.jsx +34 -0
- package/src/Progress/index.js +6 -0
- package/src/Radio/Radio.jsx +19 -56
- package/src/Radio/RadioButton.jsx +131 -0
- package/src/Radio/RadioGroup.jsx +198 -0
- package/src/Radio/{RadioInput.web.jsx → RadioInput.jsx} +0 -0
- package/src/Radio/index.js +2 -0
- package/src/RadioCard/RadioCard.jsx +191 -0
- package/src/RadioCard/RadioCardGroup.jsx +211 -0
- package/src/RadioCard/index.js +5 -0
- package/src/Search/Search.jsx +204 -0
- package/src/Search/dictionary.js +12 -0
- package/src/Search/index.js +3 -0
- package/src/Select/{Group.web.jsx → Group.jsx} +0 -0
- package/src/Select/{Item.web.jsx → Item.jsx} +0 -0
- package/src/Select/{Picker.web.jsx → Picker.jsx} +0 -0
- package/src/Select/Select.jsx +12 -22
- package/src/SideNav/Item.jsx +2 -2
- package/src/Skeleton/Skeleton.jsx +17 -20
- package/src/Skeleton/skeleton.constant.js +3 -0
- package/src/Skeleton/skeletonWebAnimation.js +13 -0
- package/src/Skeleton/useSkeletonNativeAnimation.js +27 -0
- package/src/StackView/StackView.jsx +10 -3
- package/src/StackView/StackWrap.jsx +9 -1
- package/src/StackView/StackWrapBox.jsx +4 -3
- package/src/StackView/StackWrapGap.jsx +3 -3
- package/src/StackView/getStackedContent.jsx +8 -2
- package/src/StepTracker/Step.jsx +202 -0
- package/src/StepTracker/StepTracker.jsx +163 -0
- package/src/StepTracker/dictionary.js +10 -0
- package/src/StepTracker/index.js +3 -0
- package/src/Tabs/HorizontalScroll.jsx +165 -0
- package/src/Tabs/ScrollViewEnd.jsx +53 -0
- package/src/Tabs/ScrollViewEnd.native.jsx +24 -0
- package/src/Tabs/Tabs.jsx +89 -0
- package/src/Tabs/TabsItem.jsx +204 -0
- package/src/Tabs/TabsScrollButton.jsx +100 -0
- package/src/Tabs/dictionary.js +11 -0
- package/src/Tabs/index.js +3 -0
- package/src/Tabs/itemPositions.js +101 -0
- package/src/Tags/Tags.jsx +2 -1
- package/src/TextInput/TextInputBase.jsx +12 -22
- package/src/ThemeProvider/useThemeTokens.js +2 -2
- package/src/ThemeProvider/utils/styles.js +18 -5
- package/src/ThemeProvider/utils/theme-tokens.js +46 -5
- package/src/ToggleSwitch/ToggleSwitch.jsx +2 -3
- package/src/Tooltip/{Backdrop.web.jsx → Backdrop.jsx} +0 -0
- package/src/Tooltip/Tooltip.jsx +1 -1
- package/src/TooltipButton/TooltipButton.jsx +23 -27
- package/src/Typography/Typography.jsx +6 -5
- package/src/index.js +20 -2
- package/src/utils/children.jsx +66 -0
- package/src/utils/index.js +3 -0
- package/src/utils/info/platform/platform.js +1 -0
- package/src/utils/info/versions.js +2 -2
- package/src/utils/input.js +20 -12
- package/src/utils/pressability.js +4 -0
- package/src/utils/propTypes.js +98 -34
- package/src/utils/useCopy.js +30 -4
- package/src/utils/useHash.js +34 -0
- package/src/utils/useHash.native.js +6 -0
- package/stories/A11yText/A11yText.stories.jsx +4 -8
- package/stories/Checkbox/Checkbox.stories.jsx +24 -1
- package/stories/Icon/Icon.stories.jsx +6 -5
- package/stories/Modal/Modal.stories.jsx +29 -0
- package/stories/Notification/Notification.stories.jsx +82 -0
- package/stories/Progress/Progress.stories.jsx +93 -0
- package/stories/Radio/Radio.stories.jsx +23 -36
- package/stories/RadioCard/RadioCard.stories.jsx +98 -0
- package/stories/Search/Search.stories.jsx +16 -0
- package/stories/StepTracker/StepTracker.stories.jsx +71 -0
- package/stories/Tabs/Tabs.stories.jsx +97 -0
- package/stories/{platform-supports.web.jsx → platform-supports.jsx} +0 -0
- package/__fixtures__/accessible.icon.svg +0 -6
- package/babel.config.json +0 -8
- package/lib/ActivityIndicator/Spinner.web.js +0 -55
- package/lib/Checkbox/CheckboxInput.web.js +0 -57
- package/lib/InputLabel/LabelContent.web.js +0 -17
- package/lib/Link/InlinePressable.web.js +0 -32
- package/lib/Radio/RadioInput.web.js +0 -59
- package/lib/Select/Group.web.js +0 -18
- package/lib/Select/Item.web.js +0 -15
- package/lib/Select/Picker.web.js +0 -63
- package/lib/config/svgr-icons-web.js +0 -9
- package/lib/config/svgr-icons.js +0 -52
- package/lib/utils/info/platform/platform.web.js +0 -1
- package/src/config/svgr-icons-web.js +0 -11
- package/src/config/svgr-icons.js +0 -46
- package/src/utils/info/platform/platform.web.js +0 -1
|
@@ -1,9 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exports.resolveResponsiveProp = void 0;
|
|
7
|
+
|
|
8
|
+
var _systemConstants = require("@telus-uds/system-constants");
|
|
9
|
+
|
|
10
|
+
var _ViewportProvider = require("../ViewportProvider");
|
|
3
11
|
|
|
4
12
|
const hasOwn = (objectProp, key) => Object.prototype.hasOwnProperty.call(objectProp, key);
|
|
5
13
|
|
|
6
|
-
const hasResponsiveProperties = objectProp => viewports.keys.some(key => hasOwn(objectProp, key));
|
|
14
|
+
const hasResponsiveProperties = objectProp => _systemConstants.viewports.keys.some(key => hasOwn(objectProp, key));
|
|
7
15
|
/**
|
|
8
16
|
* Resolves a prop which may be a responsive object with keys for viewports.
|
|
9
17
|
*
|
|
@@ -16,12 +24,12 @@ const hasResponsiveProperties = objectProp => viewports.keys.some(key => hasOwn(
|
|
|
16
24
|
*/
|
|
17
25
|
|
|
18
26
|
|
|
19
|
-
|
|
27
|
+
const resolveResponsiveProp = (prop, viewport, defaultValue) => {
|
|
20
28
|
if (prop === undefined) return defaultValue;
|
|
21
29
|
if (!prop || typeof prop !== 'object' || !hasResponsiveProperties(prop)) return prop;
|
|
22
|
-
const value = viewports.keys.includes(viewport) ? // If there's a current viewport, return the closest match at or below it
|
|
23
|
-
viewports.inherit(prop)[viewport] : // If no current viewport is available, default to smallest viewport
|
|
24
|
-
prop[viewports.keys.find(key => hasOwn(prop, key))];
|
|
30
|
+
const value = _systemConstants.viewports.keys.includes(viewport) ? // If there's a current viewport, return the closest match at or below it
|
|
31
|
+
_systemConstants.viewports.inherit(prop)[viewport] : // If no current viewport is available, default to smallest viewport
|
|
32
|
+
prop[_systemConstants.viewports.keys.find(key => hasOwn(prop, key))];
|
|
25
33
|
return value === undefined ? defaultValue : value;
|
|
26
34
|
};
|
|
27
35
|
/**
|
|
@@ -39,9 +47,13 @@ export const resolveResponsiveProp = (prop, viewport, defaultValue) => {
|
|
|
39
47
|
* @returns {*}
|
|
40
48
|
*/
|
|
41
49
|
|
|
50
|
+
|
|
51
|
+
exports.resolveResponsiveProp = resolveResponsiveProp;
|
|
52
|
+
|
|
42
53
|
const useResponsiveProp = (prop, defaultValue) => {
|
|
43
|
-
const viewport = useViewport();
|
|
54
|
+
const viewport = (0, _ViewportProvider.useViewport)();
|
|
44
55
|
return resolveResponsiveProp(prop, viewport, defaultValue);
|
|
45
56
|
};
|
|
46
57
|
|
|
47
|
-
|
|
58
|
+
var _default = useResponsiveProp;
|
|
59
|
+
exports.default = _default;
|
|
@@ -1,6 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _ViewportProvider = require("../ViewportProvider");
|
|
9
|
+
|
|
10
|
+
var _ThemeProvider = require("../ThemeProvider");
|
|
11
|
+
|
|
12
|
+
var _useResponsiveProp = require("./useResponsiveProp");
|
|
13
|
+
|
|
4
14
|
/**
|
|
5
15
|
* @typedef {import('@telus-uds/system-constants/viewports').Viewport} Viewport
|
|
6
16
|
* @typedef {import('./propTypes.js').SpacingValue} SpacingValue
|
|
@@ -8,9 +18,8 @@ import { resolveResponsiveProp } from './useResponsiveProp';
|
|
|
8
18
|
* @typedef {import('./propTypes.js').SpacingObject} SpacingObject
|
|
9
19
|
* @typedef {import('./propTypes.js').SpacingOptions} SpacingOptions
|
|
10
20
|
*/
|
|
11
|
-
|
|
12
21
|
const resolveSpacingOptions = space => {
|
|
13
|
-
if (!space
|
|
22
|
+
if (!(space !== null && space !== void 0 && space.options)) return {};
|
|
14
23
|
const {
|
|
15
24
|
size,
|
|
16
25
|
variant,
|
|
@@ -101,23 +110,26 @@ const resolveSpacingOptions = space => {
|
|
|
101
110
|
|
|
102
111
|
|
|
103
112
|
const useSpacingScale = spaceValue => {
|
|
113
|
+
var _spaceValue$space;
|
|
114
|
+
|
|
104
115
|
// In future, may need to consider window height as well as width, particularly for native apps,
|
|
105
116
|
// e.g. to ensure designs don't look lost on large, tall, not-so-wide portrait screens.
|
|
106
|
-
const viewport = useViewport();
|
|
117
|
+
const viewport = (0, _ViewportProvider.useViewport)();
|
|
107
118
|
const {
|
|
108
119
|
tokens,
|
|
109
120
|
variant,
|
|
110
121
|
overridden,
|
|
111
122
|
subtract = 0
|
|
112
123
|
} = resolveSpacingOptions(spaceValue);
|
|
113
|
-
const space = !overridden && (spaceValue
|
|
124
|
+
const space = !overridden && ((_spaceValue$space = spaceValue === null || spaceValue === void 0 ? void 0 : spaceValue.space) !== null && _spaceValue$space !== void 0 ? _spaceValue$space : (0, _useResponsiveProp.resolveResponsiveProp)(spaceValue, viewport, 0));
|
|
114
125
|
const {
|
|
115
126
|
size
|
|
116
|
-
} = useThemeTokens('spacingScale', tokens, variant, {
|
|
127
|
+
} = (0, _ThemeProvider.useThemeTokens)('spacingScale', tokens, variant, {
|
|
117
128
|
space: typeof space === 'number' ? space : 0,
|
|
118
129
|
viewport
|
|
119
130
|
});
|
|
120
131
|
return Math.max(size - subtract, 0);
|
|
121
132
|
};
|
|
122
133
|
|
|
123
|
-
|
|
134
|
+
var _default = useSpacingScale;
|
|
135
|
+
exports.default = _default;
|
package/lib/utils/useUniqueId.js
CHANGED
|
@@ -1,12 +1,21 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
2
10
|
let id = 0;
|
|
3
11
|
|
|
4
12
|
function useUniqueId(prefix = '') {
|
|
5
|
-
const [uniqueId] = useState(() => {
|
|
13
|
+
const [uniqueId] = (0, _react.useState)(() => {
|
|
6
14
|
id += 1;
|
|
7
|
-
return
|
|
15
|
+
return "".concat(prefix, "-").concat(id);
|
|
8
16
|
});
|
|
9
17
|
return uniqueId;
|
|
10
18
|
}
|
|
11
19
|
|
|
12
|
-
|
|
20
|
+
var _default = useUniqueId;
|
|
21
|
+
exports.default = _default;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@telus-uds/components-base",
|
|
3
|
-
"version": "0.0.2-prerelease.
|
|
3
|
+
"version": "0.0.2-prerelease.8",
|
|
4
4
|
"description": "Base components",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"base"
|
|
@@ -9,8 +9,7 @@
|
|
|
9
9
|
"homepage": "https://github.com/telus/universal-design-system#readme",
|
|
10
10
|
"license": "ISC",
|
|
11
11
|
"main": "lib/index.js",
|
|
12
|
-
"
|
|
13
|
-
"react-native": "lib/index.js",
|
|
12
|
+
"react-native": "src/index.js",
|
|
14
13
|
"directories": {
|
|
15
14
|
"lib": "lib",
|
|
16
15
|
"test": "__tests__"
|
|
@@ -35,10 +34,10 @@
|
|
|
35
34
|
"skip": true
|
|
36
35
|
},
|
|
37
36
|
"peerDependencies": {
|
|
38
|
-
"react": "
|
|
37
|
+
"react": "^17.0.2",
|
|
39
38
|
"react-dom": "*",
|
|
40
39
|
"react-native": "*",
|
|
41
|
-
"react-native-web": "
|
|
40
|
+
"react-native-web": "^0.17.0"
|
|
42
41
|
},
|
|
43
42
|
"devDependencies": {
|
|
44
43
|
"@testing-library/jest-native": "^4.0.1",
|
|
@@ -47,8 +46,10 @@
|
|
|
47
46
|
"react-test-renderer": "^16.3.2"
|
|
48
47
|
},
|
|
49
48
|
"dependencies": {
|
|
49
|
+
"airbnb-prop-types": "^2.16.0",
|
|
50
50
|
"@telus-uds/system-constants": "^0.0.2-prerelease.2",
|
|
51
|
-
"@telus-uds/system-themes": "^0.0.2-prerelease.
|
|
51
|
+
"@telus-uds/system-themes": "^0.0.2-prerelease.1",
|
|
52
|
+
"lodash.debounce": "^4.0.8",
|
|
52
53
|
"lodash.merge": "^4.6.2",
|
|
53
54
|
"prop-types": "^15.7.2",
|
|
54
55
|
"react-native-picker-select": "^8.0.4"
|
package/release-context.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"previousReleaseTag": "@telus-uds/components-base/v0.0.2-prerelease.
|
|
3
|
-
"changelog": "### [0.0.2-prerelease.
|
|
4
|
-
"releaseTag": "@telus-uds/components-base/v0.0.2-prerelease.
|
|
5
|
-
"newVersion": "0.0.2-prerelease.
|
|
2
|
+
"previousReleaseTag": "@telus-uds/components-base/v0.0.2-prerelease.7",
|
|
3
|
+
"changelog": "### [0.0.2-prerelease.8](https://github.com/telus/universal-design-system/compare/@telus-uds/components-base/v0.0.2-prerelease.7...@telus-uds/components-base/v0.0.2-prerelease.8) (2021-12-15)\n\n\n### Features\n\n* **base:** add `ProgressBar` component ([#890](https://github.com/telus/universal-design-system/issues/890)) ([b98315c](https://github.com/telus/universal-design-system/commit/b98315cc7dabb2c7130c62c9c3bbf6fdfb7419a0))\n* **base:** add `Tabs` component ([#908](https://github.com/telus/universal-design-system/issues/908)) ([073bbd2](https://github.com/telus/universal-design-system/commit/073bbd2a0b4282112aa434f8e97e505fa8b4b92f))\n* **base:** add base `StepTracker` component ([#800](https://github.com/telus/universal-design-system/issues/800)) ([aa7d472](https://github.com/telus/universal-design-system/commit/aa7d47297c1d9ba13daef60b5184ead07b95cd52))\n* **base:** add Group fieldsets for RadioCard, Radio, Checkbox ([#875](https://github.com/telus/universal-design-system/issues/875)) ([4b99987](https://github.com/telus/universal-design-system/commit/4b999872714144b643f676d3d473369d605b3eea))\n* **base:** add Notification ([#848](https://github.com/telus/universal-design-system/issues/848)) ([ee6a83e](https://github.com/telus/universal-design-system/commit/ee6a83e05dc991acef3b9449f78c17d43d63b248))\n* **base:** add RadioCard and PressableCardBase ([#865](https://github.com/telus/universal-design-system/issues/865)) ([55c6fa2](https://github.com/telus/universal-design-system/commit/55c6fa293f2fa09499aed763910d3791eefbc4a1))\n* **base:** add the Modal component ([#878](https://github.com/telus/universal-design-system/issues/878)) ([431d4cd](https://github.com/telus/universal-design-system/commit/431d4cd2c1a7f4ce30b453d437b9f5d7b69fd251))\n* **base:** add the Search component ([#798](https://github.com/telus/universal-design-system/issues/798)) ([7b974df](https://github.com/telus/universal-design-system/commit/7b974df12d2bf0cb94b6360091bac8ac57dd7245))\n* **base:** handle `Tabs` hashes, with `useHash` ([#910](https://github.com/telus/universal-design-system/issues/910)) ([8ad6507](https://github.com/telus/universal-design-system/commit/8ad65072c249e8439e7d1c7e55fee535a5f30b4e))\n* **ds-allium:** `PriceLockup` implmementation ([#858](https://github.com/telus/universal-design-system/issues/858)) ([8669b9e](https://github.com/telus/universal-design-system/commit/8669b9e3f80261bd18962dfba5d774c90a5f4ebb))\n* **ds-allium:** add `StoryCard` component ([#880](https://github.com/telus/universal-design-system/issues/880)) ([6f0616d](https://github.com/telus/universal-design-system/commit/6f0616dc761cbdcf470bc2505d773eb362bf800e))\n* **ds-allium:** add Modal content types ([#896](https://github.com/telus/universal-design-system/issues/896)) ([f070447](https://github.com/telus/universal-design-system/commit/f070447fc796139046a96892aab34b74bc1974a4))\n* **ds-allium:** add SubNavigation ([#931](https://github.com/telus/universal-design-system/issues/931)) ([834ee7b](https://github.com/telus/universal-design-system/commit/834ee7bbe811ea8477ac4870466ae573d73e3a8f))\n* use built icons ([#809](https://github.com/telus/universal-design-system/issues/809)) ([120802e](https://github.com/telus/universal-design-system/commit/120802e11bcb4352b9d2e171525f6dc5b687c023))\n\n\n### Bug Fixes\n\n* **base:** add outer border to Radio, extract RadioButton ([#847](https://github.com/telus/universal-design-system/issues/847)) ([b563335](https://github.com/telus/universal-design-system/commit/b563335087fbfffe6739ad185fe4fc7886ef4e4d))\n* **base:** fix Tags icon, update Allium Tags/ButtonGroup ([#888](https://github.com/telus/universal-design-system/issues/888)) ([6d6ff35](https://github.com/telus/universal-design-system/commit/6d6ff35caba4c9c6c99eacf015be56e8862ad170))\n* **components-base:** Remove named import of json file ([#930](https://github.com/telus/universal-design-system/issues/930)) ([9db1cbe](https://github.com/telus/universal-design-system/commit/9db1cbe501d3c049f1f6476720a3ee9bd8b4d736))\n* fix storybook error from proptypes ([#857](https://github.com/telus/universal-design-system/issues/857)) ([175537a](https://github.com/telus/universal-design-system/commit/175537a6ac4b48699f66b1a59eb35910cbf9930b))\n* update test theme icons + cleanup ds-allium icon usage ([#860](https://github.com/telus/universal-design-system/issues/860)) ([c2c0a84](https://github.com/telus/universal-design-system/commit/c2c0a84914eed9dafaf47acca30e1f5119f19e57))\n",
|
|
4
|
+
"releaseTag": "@telus-uds/components-base/v0.0.2-prerelease.8",
|
|
5
|
+
"newVersion": "0.0.2-prerelease.8",
|
|
6
6
|
"packageName": "@telus-uds/components-base"
|
|
7
7
|
}
|
|
File without changes
|
package/src/Box/Box.jsx
CHANGED
|
@@ -2,7 +2,14 @@ import React from 'react'
|
|
|
2
2
|
import PropTypes from 'prop-types'
|
|
3
3
|
import { View, ScrollView } from 'react-native'
|
|
4
4
|
import { useThemeTokens } from '../ThemeProvider'
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
a11yProps,
|
|
7
|
+
spacingProps,
|
|
8
|
+
variantProp,
|
|
9
|
+
getTokensPropType,
|
|
10
|
+
useSpacingScale,
|
|
11
|
+
viewProps
|
|
12
|
+
} from '../utils'
|
|
6
13
|
/**
|
|
7
14
|
* @typedef {import('../utils/propTypes.js').SpacingValue} SpacingValue
|
|
8
15
|
* @typedef {import('../utils/propTypes.js').SpacingIndex} SpacingIndex
|
|
@@ -102,7 +109,7 @@ const Box = ({
|
|
|
102
109
|
testID,
|
|
103
110
|
...rest
|
|
104
111
|
}) => {
|
|
105
|
-
const
|
|
112
|
+
const props = { ...a11yProps.select(rest), ...viewProps.select(rest) }
|
|
106
113
|
|
|
107
114
|
const themeTokens = useThemeTokens('Box', tokens, variant)
|
|
108
115
|
const styles = {
|
|
@@ -117,13 +124,13 @@ const Box = ({
|
|
|
117
124
|
const scrollProps = typeof scroll === 'object' ? scroll : {}
|
|
118
125
|
scrollProps.contentContainerStyle = [styles, scrollProps.contentContainerStyle]
|
|
119
126
|
return (
|
|
120
|
-
<ScrollView {...scrollProps} {...
|
|
127
|
+
<ScrollView {...scrollProps} {...props} testID={testID}>
|
|
121
128
|
{children}
|
|
122
129
|
</ScrollView>
|
|
123
130
|
)
|
|
124
131
|
}
|
|
125
132
|
return (
|
|
126
|
-
<View {...
|
|
133
|
+
<View {...props} style={styles} testID={testID}>
|
|
127
134
|
{children}
|
|
128
135
|
</View>
|
|
129
136
|
)
|
package/src/Button/Button.jsx
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
2
|
|
|
3
3
|
import ButtonBase from './ButtonBase'
|
|
4
|
-
import buttonPropTypes from './propTypes'
|
|
4
|
+
import buttonPropTypes, { textAndA11yText } from './propTypes'
|
|
5
5
|
import { useThemeTokensCallback } from '../ThemeProvider'
|
|
6
6
|
import { a11yProps } from '../utils/propTypes'
|
|
7
7
|
|
|
@@ -12,7 +12,8 @@ const Button = ({ accessibilityRole = 'button', tokens, variant, ...props }) =>
|
|
|
12
12
|
|
|
13
13
|
Button.propTypes = {
|
|
14
14
|
...a11yProps.types,
|
|
15
|
-
...buttonPropTypes
|
|
15
|
+
...buttonPropTypes,
|
|
16
|
+
children: textAndA11yText
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
export default Button
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
|
-
import { Pressable,
|
|
2
|
+
import { Pressable, View, StyleSheet, Platform } from 'react-native'
|
|
3
3
|
|
|
4
|
-
import { applyTextStyles, applyShadowToken } from '../ThemeProvider/utils'
|
|
4
|
+
import { applyTextStyles, applyShadowToken, applyOuterBorder } from '../ThemeProvider/utils'
|
|
5
5
|
import buttonPropTypes from './propTypes'
|
|
6
6
|
import {
|
|
7
7
|
a11yProps,
|
|
8
8
|
getCursorStyle,
|
|
9
|
-
hrefAttrsProp,
|
|
10
9
|
linkProps,
|
|
11
10
|
resolvePressableState,
|
|
12
|
-
resolvePressableTokens
|
|
11
|
+
resolvePressableTokens,
|
|
12
|
+
wrapStringsInText
|
|
13
13
|
} from '../utils'
|
|
14
14
|
|
|
15
15
|
const getOuterBorderOffset = ({ outerBorderGap = 0, outerBorderWidth = 0 }) =>
|
|
@@ -20,27 +20,26 @@ const selectOuterContainerStyles = ({
|
|
|
20
20
|
opacity,
|
|
21
21
|
outerBorderColor,
|
|
22
22
|
outerBorderWidth,
|
|
23
|
-
outerBorderGap
|
|
24
|
-
|
|
23
|
+
outerBorderGap,
|
|
24
|
+
borderRadius,
|
|
25
25
|
outerBackgroundColor
|
|
26
26
|
}) => ({
|
|
27
27
|
alignSelf,
|
|
28
|
-
padding: outerBorderGap,
|
|
29
|
-
borderWidth: outerBorderWidth,
|
|
30
|
-
borderColor: outerBorderColor,
|
|
31
|
-
borderRadius: outerBorderRadius + outerBorderGap,
|
|
32
28
|
backgroundColor: outerBackgroundColor,
|
|
33
|
-
opacity
|
|
29
|
+
opacity,
|
|
30
|
+
...applyOuterBorder({
|
|
31
|
+
outerBorderGap,
|
|
32
|
+
outerBorderWidth,
|
|
33
|
+
outerBorderColor,
|
|
34
|
+
borderRadius
|
|
35
|
+
})
|
|
34
36
|
})
|
|
35
37
|
|
|
36
38
|
const selectOuterWidthStyles = ({ outerBorderGap, outerBorderWidth, width }) => {
|
|
37
39
|
// The inner container's bounding box is the bounding box of the button overall
|
|
38
40
|
// so this many device pixels will sit outside of the overall bounding box
|
|
39
41
|
const outerBorderOffset = getOuterBorderOffset({ outerBorderGap, outerBorderWidth })
|
|
40
|
-
|
|
41
|
-
const widthStyles = {
|
|
42
|
-
margin: 0 - outerBorderOffset
|
|
43
|
-
}
|
|
42
|
+
const widthStyles = {}
|
|
44
43
|
|
|
45
44
|
if (!width) {
|
|
46
45
|
return {
|
|
@@ -131,19 +130,6 @@ const selectWebOnlyStyles = (inactive, themeTokens, { accessibilityRole }) => {
|
|
|
131
130
|
})
|
|
132
131
|
}
|
|
133
132
|
|
|
134
|
-
// TODO: see if this can be made into a generalised utility, ideally when
|
|
135
|
-
// there is a stable, generic, generalised approach to within-component text
|
|
136
|
-
const resolveChildren = (children, { textStyles, state }) => {
|
|
137
|
-
switch (typeof children) {
|
|
138
|
-
case 'function':
|
|
139
|
-
return children(state)
|
|
140
|
-
case 'string':
|
|
141
|
-
return <Text style={textStyles}>{children}</Text>
|
|
142
|
-
default:
|
|
143
|
-
return children
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
133
|
const ButtonBase = ({
|
|
148
134
|
href,
|
|
149
135
|
hrefAttrs,
|
|
@@ -156,13 +142,13 @@ const ButtonBase = ({
|
|
|
156
142
|
...rest
|
|
157
143
|
}) => {
|
|
158
144
|
const extraButtonState = { inactive, selected }
|
|
159
|
-
const
|
|
145
|
+
const resolveButtonTokens = (pressableState) =>
|
|
160
146
|
resolvePressableTokens(tokens, pressableState, extraButtonState)
|
|
161
147
|
|
|
162
148
|
const a11y = a11yProps.select(rest)
|
|
163
149
|
|
|
164
150
|
const getPressableStyle = (pressableState) => {
|
|
165
|
-
const themeTokens =
|
|
151
|
+
const themeTokens = resolveButtonTokens(pressableState)
|
|
166
152
|
return [
|
|
167
153
|
staticStyles.row,
|
|
168
154
|
selectWebOnlyStyles(inactive, themeTokens, a11y),
|
|
@@ -177,11 +163,11 @@ const ButtonBase = ({
|
|
|
177
163
|
onPress={linkProps.handleHref({ href, onPress })}
|
|
178
164
|
style={getPressableStyle}
|
|
179
165
|
disabled={inactive}
|
|
180
|
-
{
|
|
166
|
+
hrefAttrs={hrefAttrs}
|
|
181
167
|
{...a11y}
|
|
182
168
|
>
|
|
183
169
|
{(pressableState) => {
|
|
184
|
-
const themeTokens =
|
|
170
|
+
const themeTokens = resolveButtonTokens(pressableState)
|
|
185
171
|
const containerStyles = selectInnerContainerStyles(themeTokens)
|
|
186
172
|
const borderStyles = selectBorderStyles(themeTokens)
|
|
187
173
|
const textStyles = [selectTextStyles(themeTokens), staticStyles.text]
|
|
@@ -206,10 +192,15 @@ const ButtonBase = ({
|
|
|
206
192
|
})
|
|
207
193
|
]}
|
|
208
194
|
>
|
|
209
|
-
{
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
195
|
+
{wrapStringsInText(
|
|
196
|
+
typeof children === 'function'
|
|
197
|
+
? children({
|
|
198
|
+
...resolvePressableState(pressableState, extraButtonState),
|
|
199
|
+
textStyles
|
|
200
|
+
})
|
|
201
|
+
: children,
|
|
202
|
+
{ style: textStyles }
|
|
203
|
+
)}
|
|
213
204
|
</View>
|
|
214
205
|
)
|
|
215
206
|
}}
|
|
@@ -27,7 +27,7 @@ const ButtonGroup = ({
|
|
|
27
27
|
readOnly = false,
|
|
28
28
|
inactive = false,
|
|
29
29
|
accessibilityRole = maxValues === 1
|
|
30
|
-
? '
|
|
30
|
+
? 'radiogroup' // radiogroup is cross-platform; only web aria has generic groups
|
|
31
31
|
: Platform.select({ web: 'group', default: 'none' }),
|
|
32
32
|
...rest
|
|
33
33
|
}) => {
|
|
@@ -50,7 +50,7 @@ const ButtonGroup = ({
|
|
|
50
50
|
accessibilityRole,
|
|
51
51
|
...rest
|
|
52
52
|
})
|
|
53
|
-
const itemA11yRole = a11y.accessibilityRole === '
|
|
53
|
+
const itemA11yRole = a11y.accessibilityRole === 'radiogroup' ? 'radio' : 'checkbox'
|
|
54
54
|
|
|
55
55
|
return (
|
|
56
56
|
<StackWrap {...a11y} space={space} direction={direction} tokens={stackTokens}>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
2
|
import ButtonBase from './ButtonBase'
|
|
3
|
-
import buttonPropTypes from './propTypes'
|
|
3
|
+
import buttonPropTypes, { textAndA11yText } from './propTypes'
|
|
4
4
|
import { a11yProps, hrefAttrsProp, linkProps } from '../utils/propTypes'
|
|
5
5
|
import { useThemeTokensCallback } from '../ThemeProvider'
|
|
6
6
|
|
|
@@ -24,7 +24,8 @@ const ButtonLink = ({ accessibilityRole = 'link', tokens, variant, ...props }) =
|
|
|
24
24
|
ButtonLink.propTypes = {
|
|
25
25
|
...a11yProps.types,
|
|
26
26
|
...buttonPropTypes,
|
|
27
|
-
...linkProps.types
|
|
27
|
+
...linkProps.types,
|
|
28
|
+
children: textAndA11yText
|
|
28
29
|
}
|
|
29
30
|
|
|
30
31
|
export default ButtonLink
|
package/src/Button/propTypes.js
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import PropTypes from 'prop-types'
|
|
2
|
+
import ABBPropTypes from 'airbnb-prop-types'
|
|
2
3
|
import { variantProp } from '../utils/propTypes'
|
|
4
|
+
import A11yText from '../A11yText'
|
|
5
|
+
|
|
6
|
+
export const textAndA11yText = ABBPropTypes.childrenOf(
|
|
7
|
+
PropTypes.oneOfType([ABBPropTypes.elementType(A11yText), PropTypes.string])
|
|
8
|
+
)
|
|
3
9
|
|
|
4
10
|
const buttonPropTypes = {
|
|
5
11
|
/**
|
|
@@ -12,10 +18,14 @@ const buttonPropTypes = {
|
|
|
12
18
|
*/
|
|
13
19
|
disabled: PropTypes.bool,
|
|
14
20
|
/**
|
|
15
|
-
* Button's children must be either
|
|
21
|
+
* Button's children must be either:
|
|
22
|
+
* - One or more text strings and / or A11yText components
|
|
23
|
+
* - A render function with contents that responds to current button state by being passed an object of:
|
|
24
|
+
* ```
|
|
16
25
|
* { hovered<bool>, focused<bool>, pressed<bool>, inactive<bool>, selected<bool>, textStyles<RNStyle> }
|
|
26
|
+
* ```
|
|
17
27
|
*/
|
|
18
|
-
children: PropTypes.oneOfType([PropTypes.
|
|
28
|
+
children: PropTypes.oneOfType([PropTypes.func, textAndA11yText]).isRequired,
|
|
19
29
|
/**
|
|
20
30
|
* Function called when the button is pressed. Required unless the button has a href.
|
|
21
31
|
*/
|
package/src/Card/Card.jsx
CHANGED
|
@@ -1,34 +1,11 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
2
|
import PropTypes from 'prop-types'
|
|
3
|
-
import { View } from 'react-native'
|
|
4
3
|
|
|
5
|
-
import {
|
|
4
|
+
import { useThemeTokens } from '../ThemeProvider'
|
|
6
5
|
import { getTokensPropType, variantProp } from '../utils'
|
|
7
6
|
import { useViewport } from '../ViewportProvider'
|
|
8
7
|
import { a11yProps } from '../utils/propTypes'
|
|
9
|
-
|
|
10
|
-
// Ensure explicit selection of tokens
|
|
11
|
-
const selectStyles = ({
|
|
12
|
-
backgroundColor,
|
|
13
|
-
borderColor,
|
|
14
|
-
borderRadius,
|
|
15
|
-
borderWidth,
|
|
16
|
-
paddingBottom,
|
|
17
|
-
paddingLeft,
|
|
18
|
-
paddingRight,
|
|
19
|
-
paddingTop,
|
|
20
|
-
shadow
|
|
21
|
-
}) => ({
|
|
22
|
-
backgroundColor,
|
|
23
|
-
borderColor,
|
|
24
|
-
borderRadius,
|
|
25
|
-
borderWidth,
|
|
26
|
-
paddingBottom,
|
|
27
|
-
paddingLeft,
|
|
28
|
-
paddingRight,
|
|
29
|
-
paddingTop,
|
|
30
|
-
...applyShadowToken(shadow)
|
|
31
|
-
})
|
|
8
|
+
import CardBase from './CardBase'
|
|
32
9
|
|
|
33
10
|
/**
|
|
34
11
|
* A basic card component, unstyled by default.
|
|
@@ -81,13 +58,10 @@ const selectStyles = ({
|
|
|
81
58
|
const Card = ({ children, tokens, variant, ...rest }) => {
|
|
82
59
|
const viewport = useViewport()
|
|
83
60
|
const themeTokens = useThemeTokens('Card', tokens, variant, { viewport })
|
|
84
|
-
const cardStyle = selectStyles(themeTokens)
|
|
85
|
-
const a11y = a11yProps.select(rest)
|
|
86
|
-
|
|
87
61
|
return (
|
|
88
|
-
<
|
|
62
|
+
<CardBase tokens={themeTokens} {...rest}>
|
|
89
63
|
{children}
|
|
90
|
-
</
|
|
64
|
+
</CardBase>
|
|
91
65
|
)
|
|
92
66
|
}
|
|
93
67
|
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import PropTypes from 'prop-types'
|
|
3
|
+
import { View } from 'react-native'
|
|
4
|
+
|
|
5
|
+
import { applyShadowToken } from '../ThemeProvider'
|
|
6
|
+
import { getTokensPropType } from '../utils'
|
|
7
|
+
import { a11yProps, viewProps } from '../utils/propTypes'
|
|
8
|
+
|
|
9
|
+
// Ensure explicit selection of tokens
|
|
10
|
+
const selectStyles = ({
|
|
11
|
+
flex,
|
|
12
|
+
backgroundColor,
|
|
13
|
+
borderColor,
|
|
14
|
+
borderRadius,
|
|
15
|
+
borderWidth,
|
|
16
|
+
paddingBottom,
|
|
17
|
+
paddingLeft,
|
|
18
|
+
paddingRight,
|
|
19
|
+
paddingTop,
|
|
20
|
+
minWidth,
|
|
21
|
+
shadow
|
|
22
|
+
}) => ({
|
|
23
|
+
flex,
|
|
24
|
+
backgroundColor,
|
|
25
|
+
borderColor,
|
|
26
|
+
borderRadius,
|
|
27
|
+
borderWidth,
|
|
28
|
+
paddingBottom,
|
|
29
|
+
paddingLeft,
|
|
30
|
+
paddingRight,
|
|
31
|
+
paddingTop,
|
|
32
|
+
minWidth,
|
|
33
|
+
...applyShadowToken(shadow)
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* A themeless base component for Card which components can apply theme tokens to. Not
|
|
38
|
+
* intended to be used in apps or sites directly: build themed components on top of this.
|
|
39
|
+
*/
|
|
40
|
+
const CardBase = ({ children, tokens, ...rest }) => {
|
|
41
|
+
const cardStyle = selectStyles(typeof tokens === 'function' ? tokens() : tokens)
|
|
42
|
+
const props = { ...a11yProps.select(rest), ...viewProps.select(rest) }
|
|
43
|
+
|
|
44
|
+
return (
|
|
45
|
+
<View style={cardStyle} {...props}>
|
|
46
|
+
{children}
|
|
47
|
+
</View>
|
|
48
|
+
)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
CardBase.propTypes = {
|
|
52
|
+
children: PropTypes.node,
|
|
53
|
+
tokens: getTokensPropType('Card'),
|
|
54
|
+
...a11yProps.types
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export default CardBase
|