@telus-uds/components-base 1.3.0 → 1.3.1
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 +38 -0
- package/CHANGELOG.md +15 -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 +88 -424
- 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 -6
- 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 +7 -2
- 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 +171 -0
- package/lib-module/HorizontalScroll/HorizontalScrollButton.js +102 -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 +12 -5
- 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 +17 -3
- 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
|
@@ -3,7 +3,9 @@ import { Pressable, View } from 'react-native'
|
|
|
3
3
|
import PropTypes from 'prop-types'
|
|
4
4
|
|
|
5
5
|
import { useThemeTokensCallback, verticalAlignRow } from '../ThemeProvider'
|
|
6
|
-
import { getTokensPropType, variantProp,
|
|
6
|
+
import { a11yProps, getTokensPropType, selectSystemProps, variantProp, viewProps } from '../utils'
|
|
7
|
+
|
|
8
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
7
9
|
|
|
8
10
|
function selectContainerStyles({
|
|
9
11
|
backgroundColor,
|
|
@@ -48,12 +50,15 @@ function selectIconTokens(tokens) {
|
|
|
48
50
|
}
|
|
49
51
|
|
|
50
52
|
const ExpandCollapseControl = forwardRef(
|
|
51
|
-
(
|
|
53
|
+
(
|
|
54
|
+
{ onPress, isExpanded, children, tokens, accessibilityRole = 'button', variant, ...rest },
|
|
55
|
+
ref
|
|
56
|
+
) => {
|
|
52
57
|
const getTokens = useThemeTokensCallback('ExpandCollapseControl', tokens, variant)
|
|
53
58
|
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
...(
|
|
59
|
+
const selectedProps = selectProps({ ...rest, accessibilityRole })
|
|
60
|
+
selectedProps.accessibilityState = {
|
|
61
|
+
...(selectedProps.accessibilityState || {}),
|
|
57
62
|
expanded: isExpanded
|
|
58
63
|
}
|
|
59
64
|
|
|
@@ -68,7 +73,7 @@ const ExpandCollapseControl = forwardRef(
|
|
|
68
73
|
selectContainerStyles(getControlTokens(pressableState))
|
|
69
74
|
|
|
70
75
|
return (
|
|
71
|
-
<Pressable ref={ref} {...
|
|
76
|
+
<Pressable ref={ref} {...selectedProps} onPress={onPress} style={getPressableStyle}>
|
|
72
77
|
{(pressableState) => {
|
|
73
78
|
const { icon: IconComponent, ...themeTokens } = getControlTokens(pressableState)
|
|
74
79
|
return (
|
|
@@ -91,7 +96,7 @@ const ExpandCollapseControl = forwardRef(
|
|
|
91
96
|
ExpandCollapseControl.displayName = 'ExpandCollapseControl'
|
|
92
97
|
|
|
93
98
|
ExpandCollapseControl.propTypes = {
|
|
94
|
-
...
|
|
99
|
+
...selectedSystemPropTypes,
|
|
95
100
|
tokens: getTokensPropType('ExpandCollapseControl'),
|
|
96
101
|
variant: variantProp.propType,
|
|
97
102
|
/**
|
|
@@ -3,7 +3,16 @@ import { View } from 'react-native'
|
|
|
3
3
|
import PropTypes from 'prop-types'
|
|
4
4
|
|
|
5
5
|
import { useThemeTokens } from '../ThemeProvider'
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
a11yProps,
|
|
8
|
+
getTokensPropType,
|
|
9
|
+
selectSystemProps,
|
|
10
|
+
useMultipleInputValues,
|
|
11
|
+
variantProp,
|
|
12
|
+
viewProps
|
|
13
|
+
} from '../utils'
|
|
14
|
+
|
|
15
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
7
16
|
|
|
8
17
|
function selectBorderStyles(tokens) {
|
|
9
18
|
return {
|
|
@@ -21,7 +30,7 @@ function selectBorderStyles(tokens) {
|
|
|
21
30
|
* nested (they do not need to be direct children), and non-interactive items may be included too.
|
|
22
31
|
*/
|
|
23
32
|
const ExpandCollapse = forwardRef(
|
|
24
|
-
({ children, tokens, variant, maxOpen, open, initialOpen, onChange }, ref) => {
|
|
33
|
+
({ children, tokens, variant, maxOpen, open, initialOpen, onChange, ...rest }, ref) => {
|
|
25
34
|
const {
|
|
26
35
|
currentValues: openIds,
|
|
27
36
|
toggleOneValue: onToggle,
|
|
@@ -37,7 +46,7 @@ const ExpandCollapse = forwardRef(
|
|
|
37
46
|
const themeTokens = useThemeTokens('ExpandCollapse', tokens, variant)
|
|
38
47
|
|
|
39
48
|
return (
|
|
40
|
-
<View ref={ref} style={selectBorderStyles(themeTokens)}>
|
|
49
|
+
<View ref={ref} style={selectBorderStyles(themeTokens)} {...selectProps(rest)}>
|
|
41
50
|
{typeof children === 'function'
|
|
42
51
|
? children({ openIds, onToggle, resetValues, setValues, unsetValues })
|
|
43
52
|
: children}
|
|
@@ -48,6 +57,7 @@ const ExpandCollapse = forwardRef(
|
|
|
48
57
|
ExpandCollapse.displayName = 'ExpandCollapse'
|
|
49
58
|
|
|
50
59
|
ExpandCollapse.propTypes = {
|
|
60
|
+
...selectedSystemPropTypes,
|
|
51
61
|
variant: variantProp.propType,
|
|
52
62
|
tokens: getTokensPropType('ExpandCollapse'),
|
|
53
63
|
/**
|
|
@@ -4,7 +4,16 @@ import PropTypes from 'prop-types'
|
|
|
4
4
|
|
|
5
5
|
import ExpandCollapseControl from './Control'
|
|
6
6
|
import { useThemeTokens } from '../ThemeProvider'
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
a11yProps,
|
|
9
|
+
getTokensPropType,
|
|
10
|
+
selectSystemProps,
|
|
11
|
+
useVerticalExpandAnimation,
|
|
12
|
+
variantProp,
|
|
13
|
+
viewProps
|
|
14
|
+
} from '../utils'
|
|
15
|
+
|
|
16
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
8
17
|
|
|
9
18
|
// just void functions for now, since there are no style tokens for a panel or control at this point
|
|
10
19
|
const selectGroupStyles = () => {}
|
|
@@ -49,9 +58,9 @@ const ExpandCollapsePanel = forwardRef(
|
|
|
49
58
|
const [containerHeight, setContainerHeight] = useState(null)
|
|
50
59
|
const isExpanded = openIds.includes(panelId)
|
|
51
60
|
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
...(
|
|
61
|
+
const selectedProps = selectProps(rest)
|
|
62
|
+
selectedProps.accessibilityState = {
|
|
63
|
+
...(selectedProps.accessibilityState || {}),
|
|
55
64
|
expanded: isExpanded
|
|
56
65
|
}
|
|
57
66
|
|
|
@@ -88,7 +97,7 @@ const ExpandCollapsePanel = forwardRef(
|
|
|
88
97
|
return (
|
|
89
98
|
<View ref={ref} style={selectGroupStyles(themeTokens)}>
|
|
90
99
|
<ExpandCollapseControl
|
|
91
|
-
{...
|
|
100
|
+
{...selectedProps}
|
|
92
101
|
isExpanded={isExpanded}
|
|
93
102
|
tokens={controlTokens}
|
|
94
103
|
onPress={handleControlPress}
|
|
@@ -110,6 +119,7 @@ const ExpandCollapsePanel = forwardRef(
|
|
|
110
119
|
ExpandCollapsePanel.displayName = 'ExpandCollapsePanel'
|
|
111
120
|
|
|
112
121
|
ExpandCollapsePanel.propTypes = {
|
|
122
|
+
...selectedSystemPropTypes,
|
|
113
123
|
variant: variantProp.propType,
|
|
114
124
|
tokens: getTokensPropType('ExpandCollapsePanel'),
|
|
115
125
|
/**
|
|
@@ -3,9 +3,18 @@ import { StyleSheet, Text, View } from 'react-native'
|
|
|
3
3
|
import PropTypes from 'prop-types'
|
|
4
4
|
|
|
5
5
|
import { applyTextStyles, useThemeTokens } from '../ThemeProvider'
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
a11yProps,
|
|
8
|
+
getTokensPropType,
|
|
9
|
+
selectSystemProps,
|
|
10
|
+
selectTokens,
|
|
11
|
+
variantProp,
|
|
12
|
+
viewProps
|
|
13
|
+
} from '../utils'
|
|
7
14
|
import StackView from '../StackView'
|
|
8
15
|
|
|
16
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
17
|
+
|
|
9
18
|
const selectStyles = (tokens) => selectTokens('Feedback', tokens)
|
|
10
19
|
|
|
11
20
|
const selectTitleTextStyles = ({ titleFontSize, ...tokens }) =>
|
|
@@ -53,13 +62,13 @@ const Feedback = forwardRef(
|
|
|
53
62
|
const content =
|
|
54
63
|
typeof children === 'string' ? <Text style={contentTextStyles}>{children}</Text> : children
|
|
55
64
|
|
|
56
|
-
const
|
|
65
|
+
const selectedProps = selectProps({
|
|
57
66
|
accessibilityRole: validation === 'error' ? 'alert' : undefined,
|
|
58
67
|
...rest
|
|
59
68
|
})
|
|
60
69
|
|
|
61
70
|
return (
|
|
62
|
-
<View ref={ref} style={selectStyles(themeTokens)}
|
|
71
|
+
<View ref={ref} style={selectStyles(themeTokens)} nativeID={id} {...selectedProps}>
|
|
63
72
|
<StackView space={space}>
|
|
64
73
|
{title !== undefined && (
|
|
65
74
|
<View style={staticStyles.title}>
|
|
@@ -82,6 +91,7 @@ const Feedback = forwardRef(
|
|
|
82
91
|
Feedback.displayName = 'Feedback'
|
|
83
92
|
|
|
84
93
|
Feedback.propTypes = {
|
|
94
|
+
...selectedSystemPropTypes,
|
|
85
95
|
/**
|
|
86
96
|
* Emphasized summary of the feedback. If an icon is set, it is rendered next to the title.
|
|
87
97
|
*/
|
|
@@ -60,7 +60,7 @@ const Fieldset = forwardRef(
|
|
|
60
60
|
// and on MacOS voiceover, radiogroup -> radio. To allow elements to be direct children of the
|
|
61
61
|
// fieldset as much as possible, but also allow different spacing within content and between
|
|
62
62
|
// fieldset / feedback / etc, wrap resolved children in a fragment, and stack with `preserveFragments`.
|
|
63
|
-
const childContent = <>{typeof children === 'function' ? children(
|
|
63
|
+
const childContent = <>{typeof children === 'function' ? children(a11yProps) : children}</>
|
|
64
64
|
const orderedContent =
|
|
65
65
|
feedbackPosition === 'bottom'
|
|
66
66
|
? [legendContent, feedbackContent, childContent]
|
|
@@ -3,10 +3,18 @@ import PropTypes from 'prop-types'
|
|
|
3
3
|
import { Platform, StyleSheet, View } from 'react-native'
|
|
4
4
|
|
|
5
5
|
import { validateThemeTokens, resolveThemeTokens } from '../ThemeProvider'
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
a11yProps,
|
|
8
|
+
getTokensSetPropType,
|
|
9
|
+
selectSystemProps,
|
|
10
|
+
selectTokens,
|
|
11
|
+
viewProps
|
|
12
|
+
} from '../utils'
|
|
7
13
|
import ScrollViewEnd from './ScrollViewEnd'
|
|
8
14
|
import { getItemPositionScrollTarget, itemPositionsPropType } from './itemPositions'
|
|
9
15
|
|
|
16
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
17
|
+
|
|
10
18
|
const tokenKeys = [
|
|
11
19
|
'nextIcon',
|
|
12
20
|
'previousIcon',
|
|
@@ -22,7 +30,7 @@ export const selectHorizontalScrollTokens = (themeTokens, prefix) =>
|
|
|
22
30
|
* Base component that scrolls horizontally and displays left and right buttons if
|
|
23
31
|
* there is content to the left and the right which can be scrolled to.
|
|
24
32
|
*
|
|
25
|
-
* @TODO
|
|
33
|
+
* @TODO revisit `ScrollButton` after IconButton is stable.
|
|
26
34
|
*/
|
|
27
35
|
const HorizontalScroll = forwardRef(
|
|
28
36
|
({ ScrollButton, tokens, itemPositions, children, ...rest }, ref) => {
|
|
@@ -108,8 +116,6 @@ const HorizontalScroll = forwardRef(
|
|
|
108
116
|
const scrollNext = () => scrollTo(scrollOffset + scrollDistance)
|
|
109
117
|
const scrollPrevious = () => scrollTo(scrollOffset - scrollDistance)
|
|
110
118
|
|
|
111
|
-
const a11y = a11yProps.select(rest)
|
|
112
|
-
|
|
113
119
|
// On Web, being scrollable in one direction prevents overflow: visible in the other direction.
|
|
114
120
|
// Apply a fixed margin gutter that tab highlight effects can overhang without getting trimmed.
|
|
115
121
|
return (
|
|
@@ -125,7 +131,7 @@ const HorizontalScroll = forwardRef(
|
|
|
125
131
|
staticStyles.scrollContainer,
|
|
126
132
|
{ marginBottom: gutter, borderBottomWidth, borderBottomColor }
|
|
127
133
|
]}
|
|
128
|
-
{...
|
|
134
|
+
{...selectProps(rest)}
|
|
129
135
|
>
|
|
130
136
|
{children}
|
|
131
137
|
</ScrollViewEnd>
|
|
@@ -159,6 +165,7 @@ const staticStyles = StyleSheet.create({
|
|
|
159
165
|
})
|
|
160
166
|
|
|
161
167
|
HorizontalScroll.propTypes = {
|
|
168
|
+
...selectedSystemPropTypes,
|
|
162
169
|
itemPositions: itemPositionsPropType,
|
|
163
170
|
ScrollButton: PropTypes.elementType,
|
|
164
171
|
tokens: getTokensSetPropType(tokenKeys, { allowFunction: true }),
|
|
@@ -4,18 +4,22 @@ import { Pressable, Platform, StyleSheet, View } from 'react-native'
|
|
|
4
4
|
|
|
5
5
|
import { applyOuterBorder, useThemeTokensCallback, applyShadowToken } from '../ThemeProvider'
|
|
6
6
|
import {
|
|
7
|
-
|
|
7
|
+
a11yProps,
|
|
8
8
|
clickProps,
|
|
9
|
+
getTokensPropType,
|
|
10
|
+
hrefAttrsProp,
|
|
9
11
|
linkProps,
|
|
10
12
|
resolvePressableState,
|
|
11
|
-
|
|
12
|
-
getTokensPropType,
|
|
13
|
+
selectSystemProps,
|
|
13
14
|
selectTokens,
|
|
15
|
+
variantProp,
|
|
16
|
+
viewProps,
|
|
14
17
|
withLinkRouter
|
|
15
18
|
} from '../utils'
|
|
16
|
-
import { a11yProps } from '../utils/props'
|
|
17
19
|
import Icon from '../Icon'
|
|
18
20
|
|
|
21
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
22
|
+
|
|
19
23
|
const selectOuterStyle = ({
|
|
20
24
|
backgroundColor,
|
|
21
25
|
borderRadius,
|
|
@@ -60,7 +64,7 @@ const IconButton = forwardRef(
|
|
|
60
64
|
ref
|
|
61
65
|
) => {
|
|
62
66
|
const { onPress, ...rest } = clickProps.toPressProps(rawRest)
|
|
63
|
-
const
|
|
67
|
+
const selectedProps = selectProps({
|
|
64
68
|
...rest,
|
|
65
69
|
accessibilityRole
|
|
66
70
|
})
|
|
@@ -77,7 +81,7 @@ const IconButton = forwardRef(
|
|
|
77
81
|
onPress={handlePress}
|
|
78
82
|
hrefAttrs={hrefAttrs}
|
|
79
83
|
style={getOuterStyle}
|
|
80
|
-
{...
|
|
84
|
+
{...selectedProps}
|
|
81
85
|
>
|
|
82
86
|
{(pressableState) => {
|
|
83
87
|
const themeTokens = getTokens(resolvePressableState(pressableState))
|
|
@@ -85,7 +89,7 @@ const IconButton = forwardRef(
|
|
|
85
89
|
<View style={selectInnerStyle(themeTokens)}>
|
|
86
90
|
<Icon
|
|
87
91
|
icon={IconComponent}
|
|
88
|
-
title={
|
|
92
|
+
title={selectedProps.accessibilityLabel}
|
|
89
93
|
tokens={selectTokens('Icon', themeTokens, 'icon')}
|
|
90
94
|
/>
|
|
91
95
|
</View>
|
|
@@ -98,7 +102,7 @@ const IconButton = forwardRef(
|
|
|
98
102
|
IconButton.displayName = 'IconButton'
|
|
99
103
|
|
|
100
104
|
IconButton.propTypes = {
|
|
101
|
-
...
|
|
105
|
+
...selectedSystemPropTypes,
|
|
102
106
|
variant: variantProp.propType,
|
|
103
107
|
tokens: getTokensPropType('IconButton'),
|
|
104
108
|
icon: PropTypes.elementType.isRequired,
|
|
@@ -3,11 +3,20 @@ import { StyleSheet, Text, View } from 'react-native'
|
|
|
3
3
|
import PropTypes from 'prop-types'
|
|
4
4
|
|
|
5
5
|
import { applyTextStyles, useThemeTokens } from '../ThemeProvider'
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
a11yProps,
|
|
8
|
+
getTokensPropType,
|
|
9
|
+
selectSystemProps,
|
|
10
|
+
selectTokens,
|
|
11
|
+
variantProp,
|
|
12
|
+
viewProps
|
|
13
|
+
} from '../utils'
|
|
7
14
|
|
|
8
15
|
import LabelContent from './LabelContent'
|
|
9
16
|
import Tooltip from '../Tooltip'
|
|
10
17
|
|
|
18
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
19
|
+
|
|
11
20
|
const selectLabelStyles = (tokens) => applyTextStyles(selectTokens('Typography', tokens))
|
|
12
21
|
|
|
13
22
|
const selectHintStyles = ({
|
|
@@ -28,7 +37,10 @@ const selectHintStyles = ({
|
|
|
28
37
|
const selectGapStyles = ({ gap }) => ({ marginRight: gap })
|
|
29
38
|
|
|
30
39
|
const InputLabel = forwardRef(
|
|
31
|
-
(
|
|
40
|
+
(
|
|
41
|
+
{ label, forId, hint, hintPosition = 'inline', hintId, tooltip, tokens, variant, ...rest },
|
|
42
|
+
ref
|
|
43
|
+
) => {
|
|
32
44
|
const themeTokens = useThemeTokens('InputLabel', tokens, variant)
|
|
33
45
|
|
|
34
46
|
const hasTooltip = tooltip !== undefined
|
|
@@ -38,6 +50,7 @@ const InputLabel = forwardRef(
|
|
|
38
50
|
<View
|
|
39
51
|
ref={ref}
|
|
40
52
|
style={[staticStyles.container, !isHintInline && staticStyles.containerWithHintBelow]}
|
|
53
|
+
{...selectProps(rest)}
|
|
41
54
|
>
|
|
42
55
|
<Text
|
|
43
56
|
style={[selectLabelStyles(themeTokens), selectGapStyles(themeTokens), staticStyles.label]}
|
|
@@ -69,6 +82,7 @@ const InputLabel = forwardRef(
|
|
|
69
82
|
InputLabel.displayName = 'InputLabel'
|
|
70
83
|
|
|
71
84
|
InputLabel.propTypes = {
|
|
85
|
+
...selectedSystemPropTypes,
|
|
72
86
|
/**
|
|
73
87
|
* The input label.
|
|
74
88
|
*/
|
|
@@ -30,7 +30,7 @@ const InputSupports = forwardRef(
|
|
|
30
30
|
forId={inputId}
|
|
31
31
|
/>
|
|
32
32
|
)}
|
|
33
|
-
{typeof children === 'function' ? children({
|
|
33
|
+
{typeof children === 'function' ? children({ inputId, ...a11yProps }) : children}
|
|
34
34
|
{feedback && <Feedback id={feedbackId} title={feedback} validation={validation} />}
|
|
35
35
|
</StackView>
|
|
36
36
|
)
|
package/src/Link/LinkBase.jsx
CHANGED
|
@@ -3,11 +3,13 @@ import PropTypes from 'prop-types'
|
|
|
3
3
|
import { Text, Platform, StyleSheet } from 'react-native'
|
|
4
4
|
import {
|
|
5
5
|
a11yProps,
|
|
6
|
+
clickProps,
|
|
7
|
+
getTokensPropType,
|
|
6
8
|
hrefAttrsProp,
|
|
7
|
-
variantProp,
|
|
8
9
|
linkProps,
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
selectSystemProps,
|
|
11
|
+
variantProp,
|
|
12
|
+
viewProps
|
|
11
13
|
} from '../utils/props'
|
|
12
14
|
import { resolvePressableTokens } from '../utils/pressability'
|
|
13
15
|
import { withLinkRouter } from '../utils'
|
|
@@ -16,6 +18,8 @@ import InlinePressable from './InlinePressable'
|
|
|
16
18
|
import { applyTextStyles, applyOuterBorder } from '../ThemeProvider'
|
|
17
19
|
import { IconText, iconComponentPropTypes } from '../Icon'
|
|
18
20
|
|
|
21
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, linkProps, viewProps])
|
|
22
|
+
|
|
19
23
|
const selectOuterBorderStyles = ({
|
|
20
24
|
outerBorderColor,
|
|
21
25
|
outerBorderWidth,
|
|
@@ -101,14 +105,13 @@ const LinkBase = forwardRef(
|
|
|
101
105
|
tokens = {},
|
|
102
106
|
children,
|
|
103
107
|
accessibilityRole = 'link',
|
|
104
|
-
dataSet,
|
|
105
108
|
...rawRest
|
|
106
109
|
},
|
|
107
110
|
ref
|
|
108
111
|
) => {
|
|
109
112
|
const { onPress, ...props } = clickProps.toPressProps(rawRest)
|
|
110
113
|
const { hrefAttrs, rest } = hrefAttrsProp.bundle(props)
|
|
111
|
-
const
|
|
114
|
+
const selectedProps = selectProps({
|
|
112
115
|
accessibilityRole,
|
|
113
116
|
href,
|
|
114
117
|
onPress: linkProps.handleHref({ href, onPress }),
|
|
@@ -124,9 +127,8 @@ const LinkBase = forwardRef(
|
|
|
124
127
|
|
|
125
128
|
return (
|
|
126
129
|
<InlinePressable
|
|
127
|
-
{...
|
|
130
|
+
{...selectedProps}
|
|
128
131
|
ref={ref}
|
|
129
|
-
dataSet={dataSet}
|
|
130
132
|
style={(linkState) => {
|
|
131
133
|
const themeTokens = resolveLinkTokens(linkState)
|
|
132
134
|
const outerBorderStyles = selectOuterBorderStyles(themeTokens)
|
|
@@ -164,8 +166,7 @@ const LinkBase = forwardRef(
|
|
|
164
166
|
LinkBase.displayName = 'LinkBase'
|
|
165
167
|
|
|
166
168
|
LinkBase.propTypes = {
|
|
167
|
-
...
|
|
168
|
-
...linkProps.types,
|
|
169
|
+
...selectedSystemPropTypes,
|
|
169
170
|
tokens: getTokensPropType('Link'),
|
|
170
171
|
variant: variantProp.propType,
|
|
171
172
|
/**
|
package/src/List/List.jsx
CHANGED
|
@@ -1,17 +1,24 @@
|
|
|
1
1
|
import React, { cloneElement, forwardRef, Children } from 'react'
|
|
2
2
|
import { View, Platform } from 'react-native'
|
|
3
3
|
import PropTypes from 'prop-types'
|
|
4
|
-
import {
|
|
5
|
-
|
|
4
|
+
import {
|
|
5
|
+
a11yProps,
|
|
6
|
+
componentPropType,
|
|
7
|
+
getTokensPropType,
|
|
8
|
+
selectSystemProps,
|
|
9
|
+
variantProp,
|
|
10
|
+
viewProps
|
|
11
|
+
} from '../utils'
|
|
6
12
|
import ListItem from './ListItem'
|
|
7
13
|
|
|
14
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
15
|
+
|
|
8
16
|
/**
|
|
9
17
|
* An unordered List component has a child a ListItem that
|
|
10
18
|
* allows icon, dividers and customized typography
|
|
11
19
|
*/
|
|
12
20
|
const List = forwardRef(({ children, showDivider, tokens, variant, ...rest }, ref) => {
|
|
13
21
|
const accessibilityRole = Platform.select({ web: 'list', default: 'none' })
|
|
14
|
-
const a11y = a11yProps.select(rest)
|
|
15
22
|
const items = Children.map(children, (child, index) => {
|
|
16
23
|
if (child.type.name === ListItem.name) {
|
|
17
24
|
return cloneElement(child, {
|
|
@@ -25,7 +32,7 @@ const List = forwardRef(({ children, showDivider, tokens, variant, ...rest }, re
|
|
|
25
32
|
})
|
|
26
33
|
|
|
27
34
|
return (
|
|
28
|
-
<View ref={ref} accessibilityRole={accessibilityRole} {...
|
|
35
|
+
<View ref={ref} accessibilityRole={accessibilityRole} {...selectProps(rest)}>
|
|
29
36
|
{items}
|
|
30
37
|
</View>
|
|
31
38
|
)
|
|
@@ -33,7 +40,7 @@ const List = forwardRef(({ children, showDivider, tokens, variant, ...rest }, re
|
|
|
33
40
|
List.displayName = 'List'
|
|
34
41
|
|
|
35
42
|
List.propTypes = {
|
|
36
|
-
...
|
|
43
|
+
...selectedSystemPropTypes,
|
|
37
44
|
tokens: getTokensPropType('List'),
|
|
38
45
|
variant: variantProp.propType,
|
|
39
46
|
children: componentPropType('ListItem'),
|
package/src/List/ListItem.jsx
CHANGED
|
@@ -2,7 +2,16 @@ import React, { forwardRef } from 'react'
|
|
|
2
2
|
import { View, Platform, StyleSheet } from 'react-native'
|
|
3
3
|
import PropTypes from 'prop-types'
|
|
4
4
|
import { useThemeTokens, applyTextStyles } from '../ThemeProvider'
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
a11yProps,
|
|
7
|
+
getTokensPropType,
|
|
8
|
+
selectSystemProps,
|
|
9
|
+
variantProp,
|
|
10
|
+
viewProps,
|
|
11
|
+
wrapStringsInText
|
|
12
|
+
} from '../utils'
|
|
13
|
+
|
|
14
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
6
15
|
|
|
7
16
|
const selectBulletStyles = ({ itemBulletWidth, itemBulletHeight, itemBulletColor }) => ({
|
|
8
17
|
width: itemBulletWidth,
|
|
@@ -53,7 +62,10 @@ const selectDividerStyles = ({ dividerColor, dividerSize, interItemMarginWithDiv
|
|
|
53
62
|
* ListItem is responsible for rendering icon or a bullet as side item
|
|
54
63
|
*/
|
|
55
64
|
const ListItem = forwardRef(
|
|
56
|
-
(
|
|
65
|
+
(
|
|
66
|
+
{ tokens, variant, icon, iconColor, iconSize, showDivider, children, isLastItem, ...rest },
|
|
67
|
+
ref
|
|
68
|
+
) => {
|
|
57
69
|
const themeTokens = useThemeTokens('List', tokens, variant)
|
|
58
70
|
|
|
59
71
|
const itemStyles = selectItemStyles(themeTokens)
|
|
@@ -118,6 +130,7 @@ const ListItem = forwardRef(
|
|
|
118
130
|
ref={ref}
|
|
119
131
|
style={[staticStyles.itemContainer, getContainerStyle()]}
|
|
120
132
|
accessibilityRole={accessibilityRole}
|
|
133
|
+
{...selectProps(rest)}
|
|
121
134
|
>
|
|
122
135
|
{renderMarker()}
|
|
123
136
|
{renderItem()}
|
|
@@ -137,6 +150,7 @@ const staticStyles = StyleSheet.create({
|
|
|
137
150
|
})
|
|
138
151
|
|
|
139
152
|
ListItem.propTypes = {
|
|
153
|
+
...selectedSystemPropTypes,
|
|
140
154
|
tokens: getTokensPropType('List'),
|
|
141
155
|
variant: variantProp.propType,
|
|
142
156
|
children: PropTypes.node.isRequired,
|
package/src/Modal/Modal.jsx
CHANGED
|
@@ -9,11 +9,21 @@ import {
|
|
|
9
9
|
|
|
10
10
|
import PropTypes from 'prop-types'
|
|
11
11
|
import { applyShadowToken, useThemeTokens } from '../ThemeProvider'
|
|
12
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
a11yProps,
|
|
14
|
+
copyPropTypes,
|
|
15
|
+
getTokensPropType,
|
|
16
|
+
selectSystemProps,
|
|
17
|
+
useCopy,
|
|
18
|
+
variantProp,
|
|
19
|
+
viewProps
|
|
20
|
+
} from '../utils'
|
|
13
21
|
import { useViewport } from '../ViewportProvider'
|
|
14
22
|
import ButtonBase from '../Button/ButtonBase'
|
|
15
23
|
import dictionary from './dictionary'
|
|
16
24
|
|
|
25
|
+
const [selectProps, selectedSystemPropTypes] = selectSystemProps([a11yProps, viewProps])
|
|
26
|
+
|
|
17
27
|
const selectContainerStyles = ({
|
|
18
28
|
containerPaddingLeft,
|
|
19
29
|
containerPaddingRight,
|
|
@@ -79,72 +89,75 @@ const selectCloseIconProps = ({ closeIconSize, closeIconColor }) => ({
|
|
|
79
89
|
* - Don’t use modals to reinforce or repeat information already available in the parent page or view
|
|
80
90
|
* - Don’t use modals consecutively
|
|
81
91
|
*/
|
|
82
|
-
const Modal = forwardRef(
|
|
83
|
-
|
|
84
|
-
|
|
92
|
+
const Modal = forwardRef(
|
|
93
|
+
({ children, isOpen, onClose, maxWidth, tokens, variant, copy, ...rest }, ref) => {
|
|
94
|
+
const viewport = useViewport()
|
|
95
|
+
const themeTokens = useThemeTokens('Modal', tokens, variant, { viewport, maxWidth })
|
|
85
96
|
|
|
86
|
-
|
|
97
|
+
const { closeIcon: CloseIconComponent } = themeTokens
|
|
87
98
|
|
|
88
|
-
|
|
89
|
-
|
|
99
|
+
const getCopy = useCopy({ dictionary, copy })
|
|
100
|
+
const closeLabel = getCopy('closeButton')
|
|
90
101
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
102
|
+
const handleClose = () => {
|
|
103
|
+
if (typeof onClose === 'function') onClose()
|
|
104
|
+
}
|
|
94
105
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
106
|
+
const handleKeyUp = (event) => {
|
|
107
|
+
if (event.key === 'Escape') onClose()
|
|
108
|
+
}
|
|
98
109
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
110
|
+
if (!isOpen) {
|
|
111
|
+
return null
|
|
112
|
+
}
|
|
102
113
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
<View
|
|
108
|
-
style={[staticStyles.sizingContainer, selectContainerStyles(themeTokens)]}
|
|
109
|
-
pointerEvents="box-none" // don't capture backdrop press events
|
|
110
|
-
>
|
|
114
|
+
// TODO: replace the close button with IconButton when implemented (https://github.com/telus/universal-design-system/issues/281)
|
|
115
|
+
return (
|
|
116
|
+
<NativeModal transparent {...selectProps(rest)}>
|
|
117
|
+
<View style={[staticStyles.positioningContainer]}>
|
|
111
118
|
<View
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
onKeyUp={handleKeyUp}
|
|
119
|
+
style={[staticStyles.sizingContainer, selectContainerStyles(themeTokens)]}
|
|
120
|
+
pointerEvents="box-none" // don't capture backdrop press events
|
|
115
121
|
>
|
|
116
122
|
<View
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
]}
|
|
123
|
+
ref={ref}
|
|
124
|
+
style={[staticStyles.modal, selectModalStyles(themeTokens)]}
|
|
125
|
+
onKeyUp={handleKeyUp}
|
|
121
126
|
>
|
|
122
|
-
<
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
127
|
+
<View
|
|
128
|
+
style={[
|
|
129
|
+
staticStyles.closeButtonContainer,
|
|
130
|
+
selectCloseButtonContainerStyles(themeTokens)
|
|
131
|
+
]}
|
|
126
132
|
>
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
133
|
+
<ButtonBase
|
|
134
|
+
onPress={handleClose}
|
|
135
|
+
accessibilityRole="button"
|
|
136
|
+
accessibilityLabel={closeLabel}
|
|
137
|
+
>
|
|
138
|
+
{
|
|
139
|
+
// TODO: add close button interactive states after IconButton is done
|
|
140
|
+
() => <CloseIconComponent {...selectCloseIconProps(themeTokens)} />
|
|
141
|
+
}
|
|
142
|
+
</ButtonBase>
|
|
143
|
+
</View>
|
|
144
|
+
{children}
|
|
132
145
|
</View>
|
|
133
|
-
{children}
|
|
134
146
|
</View>
|
|
147
|
+
{/* when a modal becomes open its first focusable element is being automatically focused */}
|
|
148
|
+
{/* and we prefer the close button over backdrop */}
|
|
149
|
+
<TouchableWithoutFeedback onPress={handleClose}>
|
|
150
|
+
<View style={[staticStyles.backdrop, selectBackdropStyles(themeTokens)]} />
|
|
151
|
+
</TouchableWithoutFeedback>
|
|
135
152
|
</View>
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
</TouchableWithoutFeedback>
|
|
141
|
-
</View>
|
|
142
|
-
</NativeModal>
|
|
143
|
-
)
|
|
144
|
-
})
|
|
153
|
+
</NativeModal>
|
|
154
|
+
)
|
|
155
|
+
}
|
|
156
|
+
)
|
|
145
157
|
Modal.displayName = 'Modal'
|
|
146
158
|
|
|
147
159
|
Modal.propTypes = {
|
|
160
|
+
...selectedSystemPropTypes,
|
|
148
161
|
children: PropTypes.oneOfType([PropTypes.node, PropTypes.arrayOf(PropTypes.node)]),
|
|
149
162
|
copy: copyPropTypes,
|
|
150
163
|
isOpen: PropTypes.bool,
|