@telus-uds/components-base 1.18.1 → 1.19.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/CHANGELOG.md +22 -2
- package/component-docs.json +111 -16
- package/jest.config-android.js +17 -0
- package/jest.config-ios.js +18 -0
- package/jest.config-web.js +31 -0
- package/lib/Button/ButtonBase.js +6 -2
- package/lib/Carousel/Carousel.js +32 -4
- package/lib/Carousel/CarouselTabs/CarouselTabsPanel.js +1 -10
- package/lib/Pagination/SideButton.js +6 -4
- package/lib/Responsive/Responsive.js +58 -0
- package/lib/Responsive/index.js +13 -0
- package/lib/Search/Search.js +29 -62
- package/lib/Tags/Tags.js +10 -4
- package/lib/TextInput/TextInputBase.js +53 -19
- package/lib/index.js +9 -0
- package/lib-module/Button/ButtonBase.js +6 -2
- package/lib-module/Carousel/Carousel.js +32 -4
- package/lib-module/Carousel/CarouselTabs/CarouselTabsPanel.js +1 -10
- package/lib-module/Pagination/SideButton.js +6 -4
- package/lib-module/Responsive/Responsive.js +45 -0
- package/lib-module/Responsive/index.js +2 -0
- package/lib-module/Search/Search.js +29 -60
- package/lib-module/Tags/Tags.js +10 -4
- package/lib-module/TextInput/TextInputBase.js +52 -19
- package/lib-module/index.js +1 -0
- package/package.json +6 -3
- package/src/Button/ButtonBase.jsx +4 -2
- package/src/Carousel/Carousel.jsx +42 -10
- package/src/Carousel/CarouselTabs/CarouselTabsPanel.jsx +0 -10
- package/src/Pagination/SideButton.jsx +5 -5
- package/src/Responsive/Responsive.jsx +33 -0
- package/src/Responsive/index.js +3 -0
- package/src/Search/Search.jsx +17 -32
- package/src/Tags/Tags.jsx +46 -33
- package/src/TextInput/TextInputBase.jsx +46 -16
- package/src/index.js +1 -0
package/src/Tags/Tags.jsx
CHANGED
|
@@ -30,39 +30,49 @@ const [selectItemProps, selectedItemPropTypes] = selectSystemProps([
|
|
|
30
30
|
viewProps
|
|
31
31
|
])
|
|
32
32
|
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
iconPosition,
|
|
48
|
-
iconSpace,
|
|
49
|
-
iconWrapperStyle: {
|
|
50
|
-
backgroundColor: iconBackground,
|
|
51
|
-
borderRadius: iconBorderRadius,
|
|
52
|
-
alignSelf: iconAlignSelf,
|
|
53
|
-
padding: iconPadding,
|
|
54
|
-
...Platform.select({
|
|
55
|
-
// TODO: https://github.com/telus/universal-design-system/issues/487
|
|
56
|
-
web: { transition: 'color 200ms, background 200ms' }
|
|
57
|
-
})
|
|
33
|
+
const separateIconTextTokens = (
|
|
34
|
+
{
|
|
35
|
+
icon,
|
|
36
|
+
iconPosition,
|
|
37
|
+
iconSpace,
|
|
38
|
+
iconSize,
|
|
39
|
+
iconColor,
|
|
40
|
+
iconBackground,
|
|
41
|
+
iconBorderRadius,
|
|
42
|
+
iconAlignSelf,
|
|
43
|
+
iconPadding,
|
|
44
|
+
iconTranslateX,
|
|
45
|
+
iconTranslateY,
|
|
46
|
+
...rest
|
|
58
47
|
},
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
48
|
+
returnRest
|
|
49
|
+
) =>
|
|
50
|
+
returnRest
|
|
51
|
+
? rest
|
|
52
|
+
: {
|
|
53
|
+
icon,
|
|
54
|
+
iconPosition,
|
|
55
|
+
iconSpace,
|
|
56
|
+
iconWrapperStyle: {
|
|
57
|
+
backgroundColor: iconBackground,
|
|
58
|
+
borderRadius: iconBorderRadius,
|
|
59
|
+
alignSelf: iconAlignSelf,
|
|
60
|
+
padding: iconPadding,
|
|
61
|
+
...Platform.select({
|
|
62
|
+
// TODO: https://github.com/telus/universal-design-system/issues/487
|
|
63
|
+
web: { transition: 'color 200ms, background 200ms' }
|
|
64
|
+
})
|
|
65
|
+
},
|
|
66
|
+
iconTokens: {
|
|
67
|
+
size: iconSize,
|
|
68
|
+
color: iconColor,
|
|
69
|
+
translateX: iconTranslateX,
|
|
70
|
+
translateY: iconTranslateY
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const selectIconTextTokens = (tokens) => separateIconTextTokens(tokens, false)
|
|
75
|
+
const selectNonIconTextTokens = (tokens) => separateIconTextTokens(tokens, true)
|
|
66
76
|
|
|
67
77
|
const Tags = forwardRef(
|
|
68
78
|
(
|
|
@@ -87,7 +97,10 @@ const Tags = forwardRef(
|
|
|
87
97
|
const { direction, space } = themeTokens
|
|
88
98
|
|
|
89
99
|
const getItemTokens = useThemeTokensCallback('TagsItem', tokens, variant)
|
|
90
|
-
|
|
100
|
+
|
|
101
|
+
const getButtonTokens = (buttonState) =>
|
|
102
|
+
// Remove icon-text-related tokens, since we want to handle them ourselves, not use ButtonBase's handling
|
|
103
|
+
selectTokens('Button', selectNonIconTextTokens(getItemTokens(buttonState)))
|
|
91
104
|
|
|
92
105
|
const { currentValues, toggleOneValue } = useMultipleInputValues({
|
|
93
106
|
initialValues,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React, { forwardRef, useEffect, useState } from 'react'
|
|
2
|
-
import { Platform, StyleSheet, TextInput as NativeTextInput, View } from 'react-native'
|
|
3
|
-
|
|
4
2
|
import PropTypes from 'prop-types'
|
|
3
|
+
import { Platform, StyleSheet, TextInput as NativeTextInput, View } from 'react-native'
|
|
5
4
|
import { applyTextStyles, useTheme, useThemeTokens, applyOuterBorder } from '../ThemeProvider'
|
|
5
|
+
import StackView from '../StackView'
|
|
6
6
|
import {
|
|
7
7
|
a11yProps,
|
|
8
8
|
getTokensPropType,
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
textInputHandlerProps,
|
|
11
11
|
textInputProps,
|
|
12
12
|
useInputValue,
|
|
13
|
+
useSpacingScale,
|
|
13
14
|
variantProp,
|
|
14
15
|
viewProps
|
|
15
16
|
} from '../utils'
|
|
@@ -116,27 +117,35 @@ const selectIconTokens = ({ iconSize, iconColor }) => ({
|
|
|
116
117
|
color: iconColor
|
|
117
118
|
})
|
|
118
119
|
|
|
119
|
-
const selectIconContainerStyles = (
|
|
120
|
-
paddingRight,
|
|
120
|
+
const selectIconContainerStyles = (
|
|
121
|
+
{ buttonSize, buttonsGapSize, paddingRight, paddingBottom },
|
|
122
|
+
buttonCount
|
|
123
|
+
) => ({
|
|
124
|
+
paddingRight: paddingRight + buttonCount * (buttonSize + buttonsGapSize),
|
|
121
125
|
paddingBottom
|
|
122
126
|
})
|
|
123
127
|
|
|
128
|
+
const selectButtonsContainerStyle = ({ buttonsPaddingRight }) => ({
|
|
129
|
+
paddingRight: buttonsPaddingRight
|
|
130
|
+
})
|
|
131
|
+
|
|
124
132
|
const TextInputBase = forwardRef(
|
|
125
133
|
(
|
|
126
134
|
{
|
|
127
|
-
|
|
135
|
+
buttons = [],
|
|
128
136
|
height,
|
|
129
|
-
initialValue,
|
|
130
137
|
inactive,
|
|
131
|
-
|
|
138
|
+
initialValue,
|
|
139
|
+
onBlur,
|
|
132
140
|
onChange,
|
|
133
141
|
onChangeText,
|
|
134
142
|
onFocus,
|
|
135
|
-
onBlur,
|
|
136
|
-
onMouseOver,
|
|
137
143
|
onMouseOut,
|
|
144
|
+
onMouseOver,
|
|
138
145
|
pattern,
|
|
146
|
+
readOnly,
|
|
139
147
|
tokens,
|
|
148
|
+
value,
|
|
140
149
|
variant = {},
|
|
141
150
|
...rest
|
|
142
151
|
},
|
|
@@ -188,7 +197,7 @@ const TextInputBase = forwardRef(
|
|
|
188
197
|
|
|
189
198
|
const themeTokens = useThemeTokens('TextInput', tokens, variant, states)
|
|
190
199
|
|
|
191
|
-
const { icon: IconComponent } = themeTokens
|
|
200
|
+
const { icon: IconComponent, buttonsGap } = themeTokens
|
|
192
201
|
|
|
193
202
|
const inputProps = {
|
|
194
203
|
...selectProps(rest),
|
|
@@ -204,6 +213,9 @@ const TextInputBase = forwardRef(
|
|
|
204
213
|
value: isControlled ? currentValue : undefined
|
|
205
214
|
}
|
|
206
215
|
|
|
216
|
+
// Get the actual gap value for the current viewport
|
|
217
|
+
const buttonsGapSize = useSpacingScale(buttonsGap)
|
|
218
|
+
|
|
207
219
|
const { themeOptions } = useTheme()
|
|
208
220
|
const nativeInputStyle = selectInputStyles({ ...themeTokens, height }, themeOptions, inactive)
|
|
209
221
|
|
|
@@ -213,11 +225,21 @@ const TextInputBase = forwardRef(
|
|
|
213
225
|
{IconComponent && (
|
|
214
226
|
<View
|
|
215
227
|
pointerEvents="none" // avoid hijacking input press events
|
|
216
|
-
style={[
|
|
228
|
+
style={[
|
|
229
|
+
staticStyles.iconContainer,
|
|
230
|
+
selectIconContainerStyles({ ...themeTokens, buttonsGapSize }, buttons?.length)
|
|
231
|
+
]}
|
|
217
232
|
>
|
|
218
233
|
<IconComponent {...selectIconTokens(themeTokens)} />
|
|
219
234
|
</View>
|
|
220
235
|
)}
|
|
236
|
+
{buttons?.length > 0 && (
|
|
237
|
+
<View style={[staticStyles.buttonsContainer, selectButtonsContainerStyle(themeTokens)]}>
|
|
238
|
+
<StackView direction="row" space={buttonsGap}>
|
|
239
|
+
{buttons}
|
|
240
|
+
</StackView>
|
|
241
|
+
</View>
|
|
242
|
+
)}
|
|
221
243
|
</View>
|
|
222
244
|
)
|
|
223
245
|
}
|
|
@@ -226,24 +248,32 @@ TextInputBase.displayName = 'TextInputBase'
|
|
|
226
248
|
|
|
227
249
|
TextInputBase.propTypes = {
|
|
228
250
|
...selectedSystemPropTypes,
|
|
229
|
-
|
|
251
|
+
buttons: PropTypes.arrayOf(PropTypes.node),
|
|
230
252
|
height: PropTypes.number,
|
|
231
|
-
initialValue: PropTypes.string,
|
|
232
253
|
inactive: PropTypes.bool,
|
|
233
|
-
|
|
254
|
+
initialValue: PropTypes.string,
|
|
255
|
+
onBlur: PropTypes.func,
|
|
234
256
|
onChange: PropTypes.func,
|
|
235
257
|
onChangeText: PropTypes.func,
|
|
236
258
|
onFocus: PropTypes.func,
|
|
237
|
-
onBlur: PropTypes.func,
|
|
238
|
-
onMouseOver: PropTypes.func,
|
|
239
259
|
onMouseOut: PropTypes.func,
|
|
260
|
+
onMouseOver: PropTypes.func,
|
|
261
|
+
readOnly: PropTypes.bool,
|
|
240
262
|
tokens: getTokensPropType('TextInput', 'TextArea'),
|
|
263
|
+
value: PropTypes.string,
|
|
241
264
|
variant: variantProp.propType
|
|
242
265
|
}
|
|
243
266
|
|
|
244
267
|
export default TextInputBase
|
|
245
268
|
|
|
246
269
|
const staticStyles = StyleSheet.create({
|
|
270
|
+
buttonsContainer: {
|
|
271
|
+
position: 'absolute',
|
|
272
|
+
right: 0,
|
|
273
|
+
top: 0,
|
|
274
|
+
bottom: 0,
|
|
275
|
+
justifyContent: 'center'
|
|
276
|
+
},
|
|
247
277
|
iconContainer: {
|
|
248
278
|
position: 'absolute',
|
|
249
279
|
right: 0,
|
package/src/index.js
CHANGED
|
@@ -29,6 +29,7 @@ export { default as Radio } from './Radio'
|
|
|
29
29
|
export * from './Radio'
|
|
30
30
|
export { default as RadioCard } from './RadioCard'
|
|
31
31
|
export * from './RadioCard'
|
|
32
|
+
export { default as Responsive } from './Responsive'
|
|
32
33
|
export { default as Search } from './Search'
|
|
33
34
|
export { default as Select } from './Select'
|
|
34
35
|
export { default as SideNav } from './SideNav'
|