@telus-uds/components-base 1.87.0 → 1.88.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 +16 -2
- package/lib/OrderedList/Item.js +14 -23
- package/lib/Radio/RadioGroup.js +1 -1
- package/lib/Validator/Validator.js +18 -9
- package/lib-module/OrderedList/Item.js +14 -23
- package/lib-module/Radio/RadioGroup.js +1 -1
- package/lib-module/Validator/Validator.js +18 -9
- package/package.json +2 -2
- package/src/OrderedList/Item.jsx +12 -16
- package/src/Radio/RadioGroup.jsx +1 -1
- package/src/Validator/Validator.jsx +21 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,12 +1,26 @@
|
|
|
1
1
|
# Change Log - @telus-uds/components-base
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Thu, 04 Jul 2024 19:28:59 GMT and should not be manually modified.
|
|
4
4
|
|
|
5
5
|
<!-- Start content -->
|
|
6
6
|
|
|
7
|
+
## 1.88.0
|
|
8
|
+
|
|
9
|
+
Thu, 04 Jul 2024 19:28:59 GMT
|
|
10
|
+
|
|
11
|
+
### Minor changes
|
|
12
|
+
|
|
13
|
+
- Add data masking to validator component (Mauricio.BatresMontejo@telus.com)
|
|
14
|
+
- Bump @telus-uds/system-theme-tokens to v2.59.0
|
|
15
|
+
|
|
16
|
+
### Patches
|
|
17
|
+
|
|
18
|
+
- Remove label like unique field in RadioGroup component (Mauricio.BatresMontejo@telus.com)
|
|
19
|
+
- `OrderedList`: fix numbered text alignment (guillermo.peitzner@telus.com)
|
|
20
|
+
|
|
7
21
|
## 1.87.0
|
|
8
22
|
|
|
9
|
-
Mon, 24 Jun 2024 16:
|
|
23
|
+
Mon, 24 Jun 2024 16:28:34 GMT
|
|
10
24
|
|
|
11
25
|
### Minor changes
|
|
12
26
|
|
package/lib/OrderedList/Item.js
CHANGED
|
@@ -10,7 +10,6 @@ var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Vi
|
|
|
10
10
|
var _StyleSheet = _interopRequireDefault(require("react-native-web/dist/cjs/exports/StyleSheet"));
|
|
11
11
|
var _utils = require("../utils");
|
|
12
12
|
var _ThemeProvider = require("../ThemeProvider");
|
|
13
|
-
var _StackView = _interopRequireDefault(require("../StackView"));
|
|
14
13
|
var _Typography = _interopRequireDefault(require("../Typography"));
|
|
15
14
|
var _ItemBase = _interopRequireDefault(require("./ItemBase"));
|
|
16
15
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
@@ -36,20 +35,18 @@ const selectItemTextStyles = (_ref, themeOptions) => {
|
|
|
36
35
|
const selectItemCounterStyles = _ref2 => {
|
|
37
36
|
let {
|
|
38
37
|
itemBulletContainerWidth,
|
|
39
|
-
|
|
38
|
+
itemBulletTextAlign,
|
|
40
39
|
itemFontWeight,
|
|
41
40
|
itemFontSize,
|
|
42
41
|
itemFontName,
|
|
43
42
|
itemLineHeight,
|
|
44
43
|
themeOptions,
|
|
45
|
-
listGutter,
|
|
46
44
|
itemColor
|
|
47
45
|
} = _ref2;
|
|
48
46
|
return {
|
|
49
47
|
color: itemColor,
|
|
50
48
|
width: itemBulletContainerWidth,
|
|
51
|
-
|
|
52
|
-
textAlign: itemBulletContainerAlign,
|
|
49
|
+
textAlign: itemBulletTextAlign,
|
|
53
50
|
...(0, _ThemeProvider.applyTextStyles)({
|
|
54
51
|
fontWeight: itemFontWeight,
|
|
55
52
|
fontSize: itemFontSize,
|
|
@@ -62,10 +59,12 @@ const selectItemCounterStyles = _ref2 => {
|
|
|
62
59
|
const selectItemContentStyles = (_ref3, isLastChild) => {
|
|
63
60
|
let {
|
|
64
61
|
interItemMargin,
|
|
62
|
+
listGutter,
|
|
65
63
|
...themeTokens
|
|
66
64
|
} = _ref3;
|
|
67
65
|
return {
|
|
68
66
|
...themeTokens,
|
|
67
|
+
marginLeft: listGutter,
|
|
69
68
|
marginBottom: !isLastChild ? interItemMargin : 0
|
|
70
69
|
};
|
|
71
70
|
};
|
|
@@ -106,27 +105,19 @@ const Item = /*#__PURE__*/_react.default.forwardRef((_ref4, ref) => {
|
|
|
106
105
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
|
|
107
106
|
style: [staticStyles.itemCounter, selectItemCounterStyles(themeTokens)],
|
|
108
107
|
children: itemCounter
|
|
109
|
-
}), /*#__PURE__*/(0, _jsxRuntime.
|
|
110
|
-
style: staticStyles.itemContent,
|
|
111
|
-
children: title
|
|
112
|
-
|
|
113
|
-
flexShrink: 1
|
|
114
|
-
},
|
|
115
|
-
space: 0,
|
|
116
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
|
|
108
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_View.default, {
|
|
109
|
+
style: [staticStyles.itemContent, selectItemContentStyles(themeTokens, isLastChild)],
|
|
110
|
+
children: [title && /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
|
|
111
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
|
|
117
112
|
variant: {
|
|
118
113
|
size: 'h4'
|
|
119
114
|
},
|
|
120
115
|
tokens: headingTokens,
|
|
121
116
|
children: title
|
|
122
|
-
})
|
|
123
|
-
|
|
124
|
-
children: itemContent
|
|
125
|
-
})]
|
|
126
|
-
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
|
|
127
|
-
style: selectItemContentStyles(themeTokens, isLastChild),
|
|
117
|
+
})
|
|
118
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
|
|
128
119
|
children: itemContent
|
|
129
|
-
})
|
|
120
|
+
})]
|
|
130
121
|
})]
|
|
131
122
|
});
|
|
132
123
|
});
|
|
@@ -162,13 +153,13 @@ var _default = Item;
|
|
|
162
153
|
exports.default = _default;
|
|
163
154
|
const staticStyles = _StyleSheet.default.create({
|
|
164
155
|
container: {
|
|
156
|
+
flex: 1,
|
|
165
157
|
flexDirection: 'row'
|
|
166
158
|
},
|
|
167
159
|
itemCounter: {
|
|
168
|
-
|
|
160
|
+
alignItems: 'flex-end'
|
|
169
161
|
},
|
|
170
162
|
itemContent: {
|
|
171
|
-
|
|
172
|
-
marginLeft: 8
|
|
163
|
+
flexShrink: 1
|
|
173
164
|
}
|
|
174
165
|
});
|
package/lib/Radio/RadioGroup.js
CHANGED
|
@@ -121,7 +121,7 @@ const RadioGroup = /*#__PURE__*/_react.default.forwardRef((_ref, ref) => {
|
|
|
121
121
|
onChange,
|
|
122
122
|
readOnly: readOnly || inactive
|
|
123
123
|
});
|
|
124
|
-
const uniqueFields = ['id'
|
|
124
|
+
const uniqueFields = ['id'];
|
|
125
125
|
if (!(0, _utils.containUniqueFields)(items, uniqueFields)) {
|
|
126
126
|
throw new Error(`RadioGroup items must have unique ${uniqueFields.join(', ')}`);
|
|
127
127
|
}
|
|
@@ -32,6 +32,7 @@ const Validator = /*#__PURE__*/_react.default.forwardRef((_ref2, ref) => {
|
|
|
32
32
|
let {
|
|
33
33
|
value = '',
|
|
34
34
|
inactive,
|
|
35
|
+
mask = '',
|
|
35
36
|
onChange,
|
|
36
37
|
tokens = {},
|
|
37
38
|
variant = {},
|
|
@@ -77,32 +78,36 @@ const Validator = /*#__PURE__*/_react.default.forwardRef((_ref2, ref) => {
|
|
|
77
78
|
[codeId]: val
|
|
78
79
|
});
|
|
79
80
|
};
|
|
81
|
+
const changeDataMasking = boxElement => {
|
|
82
|
+
let charMasking = '';
|
|
83
|
+
const element = boxElement;
|
|
84
|
+
if (mask && mask.length === 1) charMasking = mask;else if (mask && mask.length > 1) charMasking = mask.substring(0, 1);
|
|
85
|
+
if (charMasking) element.value = charMasking;
|
|
86
|
+
};
|
|
80
87
|
const handleChangeCode = () => {
|
|
81
88
|
let code = '';
|
|
82
89
|
for (let i = 0; i < validatorsLength; i += 1) code += singleCodes[prefix + i];
|
|
83
90
|
if (typeof onChange === 'function') onChange(code, singleCodes);
|
|
84
91
|
};
|
|
85
92
|
const handleChangeCodeValues = (event, codeId, nextIndex) => {
|
|
86
|
-
var _codeReferences$codeI, _event$nativeEvent, _event$target, _codeElement$value
|
|
93
|
+
var _codeReferences$codeI, _event$nativeEvent, _event$target, _codeElement$value;
|
|
87
94
|
const codeElement = (_codeReferences$codeI = codeReferences[codeId]) === null || _codeReferences$codeI === void 0 ? void 0 : _codeReferences$codeI.current;
|
|
88
95
|
const val = ((_event$nativeEvent = event.nativeEvent) === null || _event$nativeEvent === void 0 ? void 0 : _event$nativeEvent.value) || ((_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.value);
|
|
89
96
|
if (Number(val).toString() === 'NaN') {
|
|
90
97
|
codeElement.value = singleCodes[codeId] ?? '';
|
|
91
98
|
return;
|
|
92
99
|
}
|
|
93
|
-
if ((codeElement === null || codeElement === void 0 ? void 0 : (_codeElement$value = codeElement.value) === null || _codeElement$value === void 0 ? void 0 : _codeElement$value.length) > 1) {
|
|
94
|
-
const oldValue = singleCodes[codeId];
|
|
95
|
-
const newValue = codeElement.value.replace(oldValue, '');
|
|
96
|
-
codeElement.value = newValue;
|
|
97
|
-
handleSingleCodes(codeId, codeElement.value, 'success');
|
|
98
|
-
}
|
|
99
100
|
handleSingleCodes(codeId, (codeElement === null || codeElement === void 0 ? void 0 : codeElement.value) ?? singleCodes[codeId], 'success');
|
|
100
101
|
handleChangeCode();
|
|
101
102
|
if (nextIndex === validatorsLength) {
|
|
102
103
|
codeElement.blur();
|
|
104
|
+
changeDataMasking(codeElement);
|
|
103
105
|
return;
|
|
104
106
|
}
|
|
105
|
-
if ((codeElement === null || codeElement === void 0 ? void 0 : (_codeElement$
|
|
107
|
+
if ((codeElement === null || codeElement === void 0 ? void 0 : (_codeElement$value = codeElement.value) === null || _codeElement$value === void 0 ? void 0 : _codeElement$value.length) > 0) {
|
|
108
|
+
codeReferences[prefix + nextIndex].current.focus();
|
|
109
|
+
changeDataMasking(codeElement);
|
|
110
|
+
}
|
|
106
111
|
};
|
|
107
112
|
const handleKeyPress = (event, currentIndex, previousIndex) => {
|
|
108
113
|
if (!(event.keyCode === 8 || event.code === 'Backspace')) return;
|
|
@@ -150,7 +155,7 @@ const Validator = /*#__PURE__*/_react.default.forwardRef((_ref2, ref) => {
|
|
|
150
155
|
/* eslint-disable react-hooks/exhaustive-deps */
|
|
151
156
|
_react.default.useEffect(() => {
|
|
152
157
|
for (let i = 0; i < validatorsLength; i += 1) {
|
|
153
|
-
codeReferences[prefix + i].current.value = text[i] ?? '';
|
|
158
|
+
if (mask && text[i]) codeReferences[prefix + i].current.value = mask;else codeReferences[prefix + i].current.value = text[i] ?? '';
|
|
154
159
|
handleSingleCodes(prefix + i, text[i] ?? '', text[i] ? 'success' : '');
|
|
155
160
|
}
|
|
156
161
|
}, [text]);
|
|
@@ -207,6 +212,10 @@ Validator.propTypes = {
|
|
|
207
212
|
* If true, the component is inactive and non editable.
|
|
208
213
|
*/
|
|
209
214
|
inactive: _propTypes.default.bool,
|
|
215
|
+
/**
|
|
216
|
+
* Show masked characters and obscure the actual input. For example: '*'
|
|
217
|
+
*/
|
|
218
|
+
mask: _propTypes.default.string,
|
|
210
219
|
/**
|
|
211
220
|
* Use to react upon input's value changes. Required when the `value` prop is set. Will receive the input's value as an argument.
|
|
212
221
|
*/
|
|
@@ -4,7 +4,6 @@ import View from "react-native-web/dist/exports/View";
|
|
|
4
4
|
import StyleSheet from "react-native-web/dist/exports/StyleSheet";
|
|
5
5
|
import { getTokensPropType, htmlAttrs, selectSystemProps, variantProp, viewProps, wrapStringsInText } from '../utils';
|
|
6
6
|
import { applyTextStyles, useTheme, useThemeTokens } from '../ThemeProvider';
|
|
7
|
-
import StackView from '../StackView';
|
|
8
7
|
import Typography from '../Typography';
|
|
9
8
|
import ItemBase from './ItemBase';
|
|
10
9
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
@@ -30,20 +29,18 @@ const selectItemTextStyles = (_ref, themeOptions) => {
|
|
|
30
29
|
const selectItemCounterStyles = _ref2 => {
|
|
31
30
|
let {
|
|
32
31
|
itemBulletContainerWidth,
|
|
33
|
-
|
|
32
|
+
itemBulletTextAlign,
|
|
34
33
|
itemFontWeight,
|
|
35
34
|
itemFontSize,
|
|
36
35
|
itemFontName,
|
|
37
36
|
itemLineHeight,
|
|
38
37
|
themeOptions,
|
|
39
|
-
listGutter,
|
|
40
38
|
itemColor
|
|
41
39
|
} = _ref2;
|
|
42
40
|
return {
|
|
43
41
|
color: itemColor,
|
|
44
42
|
width: itemBulletContainerWidth,
|
|
45
|
-
|
|
46
|
-
textAlign: itemBulletContainerAlign,
|
|
43
|
+
textAlign: itemBulletTextAlign,
|
|
47
44
|
...applyTextStyles({
|
|
48
45
|
fontWeight: itemFontWeight,
|
|
49
46
|
fontSize: itemFontSize,
|
|
@@ -56,10 +53,12 @@ const selectItemCounterStyles = _ref2 => {
|
|
|
56
53
|
const selectItemContentStyles = (_ref3, isLastChild) => {
|
|
57
54
|
let {
|
|
58
55
|
interItemMargin,
|
|
56
|
+
listGutter,
|
|
59
57
|
...themeTokens
|
|
60
58
|
} = _ref3;
|
|
61
59
|
return {
|
|
62
60
|
...themeTokens,
|
|
61
|
+
marginLeft: listGutter,
|
|
63
62
|
marginBottom: !isLastChild ? interItemMargin : 0
|
|
64
63
|
};
|
|
65
64
|
};
|
|
@@ -100,27 +99,19 @@ const Item = /*#__PURE__*/React.forwardRef((_ref4, ref) => {
|
|
|
100
99
|
children: [/*#__PURE__*/_jsx(View, {
|
|
101
100
|
style: [staticStyles.itemCounter, selectItemCounterStyles(themeTokens)],
|
|
102
101
|
children: itemCounter
|
|
103
|
-
}), /*#__PURE__*/
|
|
104
|
-
style: staticStyles.itemContent,
|
|
105
|
-
children: title
|
|
106
|
-
|
|
107
|
-
flexShrink: 1
|
|
108
|
-
},
|
|
109
|
-
space: 0,
|
|
110
|
-
children: [/*#__PURE__*/_jsx(Typography, {
|
|
102
|
+
}), /*#__PURE__*/_jsxs(View, {
|
|
103
|
+
style: [staticStyles.itemContent, selectItemContentStyles(themeTokens, isLastChild)],
|
|
104
|
+
children: [title && /*#__PURE__*/_jsx(View, {
|
|
105
|
+
children: /*#__PURE__*/_jsx(Typography, {
|
|
111
106
|
variant: {
|
|
112
107
|
size: 'h4'
|
|
113
108
|
},
|
|
114
109
|
tokens: headingTokens,
|
|
115
110
|
children: title
|
|
116
|
-
})
|
|
117
|
-
|
|
118
|
-
children: itemContent
|
|
119
|
-
})]
|
|
120
|
-
}) : /*#__PURE__*/_jsx(View, {
|
|
121
|
-
style: selectItemContentStyles(themeTokens, isLastChild),
|
|
111
|
+
})
|
|
112
|
+
}), /*#__PURE__*/_jsx(View, {
|
|
122
113
|
children: itemContent
|
|
123
|
-
})
|
|
114
|
+
})]
|
|
124
115
|
})]
|
|
125
116
|
});
|
|
126
117
|
});
|
|
@@ -155,13 +146,13 @@ Item.displayName = 'OrderedListItem';
|
|
|
155
146
|
export default Item;
|
|
156
147
|
const staticStyles = StyleSheet.create({
|
|
157
148
|
container: {
|
|
149
|
+
flex: 1,
|
|
158
150
|
flexDirection: 'row'
|
|
159
151
|
},
|
|
160
152
|
itemCounter: {
|
|
161
|
-
|
|
153
|
+
alignItems: 'flex-end'
|
|
162
154
|
},
|
|
163
155
|
itemContent: {
|
|
164
|
-
|
|
165
|
-
marginLeft: 8
|
|
156
|
+
flexShrink: 1
|
|
166
157
|
}
|
|
167
158
|
});
|
|
@@ -114,7 +114,7 @@ const RadioGroup = /*#__PURE__*/React.forwardRef((_ref, ref) => {
|
|
|
114
114
|
onChange,
|
|
115
115
|
readOnly: readOnly || inactive
|
|
116
116
|
});
|
|
117
|
-
const uniqueFields = ['id'
|
|
117
|
+
const uniqueFields = ['id'];
|
|
118
118
|
if (!containUniqueFields(items, uniqueFields)) {
|
|
119
119
|
throw new Error(`RadioGroup items must have unique ${uniqueFields.join(', ')}`);
|
|
120
120
|
}
|
|
@@ -25,6 +25,7 @@ const Validator = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
|
|
|
25
25
|
let {
|
|
26
26
|
value = '',
|
|
27
27
|
inactive,
|
|
28
|
+
mask = '',
|
|
28
29
|
onChange,
|
|
29
30
|
tokens = {},
|
|
30
31
|
variant = {},
|
|
@@ -70,32 +71,36 @@ const Validator = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
|
|
|
70
71
|
[codeId]: val
|
|
71
72
|
});
|
|
72
73
|
};
|
|
74
|
+
const changeDataMasking = boxElement => {
|
|
75
|
+
let charMasking = '';
|
|
76
|
+
const element = boxElement;
|
|
77
|
+
if (mask && mask.length === 1) charMasking = mask;else if (mask && mask.length > 1) charMasking = mask.substring(0, 1);
|
|
78
|
+
if (charMasking) element.value = charMasking;
|
|
79
|
+
};
|
|
73
80
|
const handleChangeCode = () => {
|
|
74
81
|
let code = '';
|
|
75
82
|
for (let i = 0; i < validatorsLength; i += 1) code += singleCodes[prefix + i];
|
|
76
83
|
if (typeof onChange === 'function') onChange(code, singleCodes);
|
|
77
84
|
};
|
|
78
85
|
const handleChangeCodeValues = (event, codeId, nextIndex) => {
|
|
79
|
-
var _codeReferences$codeI, _event$nativeEvent, _event$target, _codeElement$value
|
|
86
|
+
var _codeReferences$codeI, _event$nativeEvent, _event$target, _codeElement$value;
|
|
80
87
|
const codeElement = (_codeReferences$codeI = codeReferences[codeId]) === null || _codeReferences$codeI === void 0 ? void 0 : _codeReferences$codeI.current;
|
|
81
88
|
const val = ((_event$nativeEvent = event.nativeEvent) === null || _event$nativeEvent === void 0 ? void 0 : _event$nativeEvent.value) || ((_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.value);
|
|
82
89
|
if (Number(val).toString() === 'NaN') {
|
|
83
90
|
codeElement.value = singleCodes[codeId] ?? '';
|
|
84
91
|
return;
|
|
85
92
|
}
|
|
86
|
-
if ((codeElement === null || codeElement === void 0 ? void 0 : (_codeElement$value = codeElement.value) === null || _codeElement$value === void 0 ? void 0 : _codeElement$value.length) > 1) {
|
|
87
|
-
const oldValue = singleCodes[codeId];
|
|
88
|
-
const newValue = codeElement.value.replace(oldValue, '');
|
|
89
|
-
codeElement.value = newValue;
|
|
90
|
-
handleSingleCodes(codeId, codeElement.value, 'success');
|
|
91
|
-
}
|
|
92
93
|
handleSingleCodes(codeId, (codeElement === null || codeElement === void 0 ? void 0 : codeElement.value) ?? singleCodes[codeId], 'success');
|
|
93
94
|
handleChangeCode();
|
|
94
95
|
if (nextIndex === validatorsLength) {
|
|
95
96
|
codeElement.blur();
|
|
97
|
+
changeDataMasking(codeElement);
|
|
96
98
|
return;
|
|
97
99
|
}
|
|
98
|
-
if ((codeElement === null || codeElement === void 0 ? void 0 : (_codeElement$
|
|
100
|
+
if ((codeElement === null || codeElement === void 0 ? void 0 : (_codeElement$value = codeElement.value) === null || _codeElement$value === void 0 ? void 0 : _codeElement$value.length) > 0) {
|
|
101
|
+
codeReferences[prefix + nextIndex].current.focus();
|
|
102
|
+
changeDataMasking(codeElement);
|
|
103
|
+
}
|
|
99
104
|
};
|
|
100
105
|
const handleKeyPress = (event, currentIndex, previousIndex) => {
|
|
101
106
|
if (!(event.keyCode === 8 || event.code === 'Backspace')) return;
|
|
@@ -143,7 +148,7 @@ const Validator = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
|
|
|
143
148
|
/* eslint-disable react-hooks/exhaustive-deps */
|
|
144
149
|
React.useEffect(() => {
|
|
145
150
|
for (let i = 0; i < validatorsLength; i += 1) {
|
|
146
|
-
codeReferences[prefix + i].current.value = text[i] ?? '';
|
|
151
|
+
if (mask && text[i]) codeReferences[prefix + i].current.value = mask;else codeReferences[prefix + i].current.value = text[i] ?? '';
|
|
147
152
|
handleSingleCodes(prefix + i, text[i] ?? '', text[i] ? 'success' : '');
|
|
148
153
|
}
|
|
149
154
|
}, [text]);
|
|
@@ -200,6 +205,10 @@ Validator.propTypes = {
|
|
|
200
205
|
* If true, the component is inactive and non editable.
|
|
201
206
|
*/
|
|
202
207
|
inactive: PropTypes.bool,
|
|
208
|
+
/**
|
|
209
|
+
* Show masked characters and obscure the actual input. For example: '*'
|
|
210
|
+
*/
|
|
211
|
+
mask: PropTypes.string,
|
|
203
212
|
/**
|
|
204
213
|
* Use to react upon input's value changes. Required when the `value` prop is set. Will receive the input's value as an argument.
|
|
205
214
|
*/
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"@floating-ui/react-native": "^0.8.1",
|
|
12
12
|
"@gorhom/portal": "^1.0.14",
|
|
13
13
|
"@telus-uds/system-constants": "^1.3.0",
|
|
14
|
-
"@telus-uds/system-theme-tokens": "^2.
|
|
14
|
+
"@telus-uds/system-theme-tokens": "^2.59.0",
|
|
15
15
|
"airbnb-prop-types": "^2.16.0",
|
|
16
16
|
"css-mediaquery": "^0.1.2",
|
|
17
17
|
"expo-linear-gradient": "^12.5.0",
|
|
@@ -85,6 +85,6 @@
|
|
|
85
85
|
"standard-engine": {
|
|
86
86
|
"skip": true
|
|
87
87
|
},
|
|
88
|
-
"version": "1.
|
|
88
|
+
"version": "1.88.0",
|
|
89
89
|
"types": "types/index.d.ts"
|
|
90
90
|
}
|
package/src/OrderedList/Item.jsx
CHANGED
|
@@ -11,7 +11,6 @@ import {
|
|
|
11
11
|
wrapStringsInText
|
|
12
12
|
} from '../utils'
|
|
13
13
|
import { applyTextStyles, useTheme, useThemeTokens } from '../ThemeProvider'
|
|
14
|
-
import StackView from '../StackView'
|
|
15
14
|
import Typography from '../Typography'
|
|
16
15
|
import ItemBase from './ItemBase'
|
|
17
16
|
|
|
@@ -32,19 +31,17 @@ const selectItemTextStyles = (
|
|
|
32
31
|
|
|
33
32
|
const selectItemCounterStyles = ({
|
|
34
33
|
itemBulletContainerWidth,
|
|
35
|
-
|
|
34
|
+
itemBulletTextAlign,
|
|
36
35
|
itemFontWeight,
|
|
37
36
|
itemFontSize,
|
|
38
37
|
itemFontName,
|
|
39
38
|
itemLineHeight,
|
|
40
39
|
themeOptions,
|
|
41
|
-
listGutter,
|
|
42
40
|
itemColor
|
|
43
41
|
}) => ({
|
|
44
42
|
color: itemColor,
|
|
45
43
|
width: itemBulletContainerWidth,
|
|
46
|
-
|
|
47
|
-
textAlign: itemBulletContainerAlign,
|
|
44
|
+
textAlign: itemBulletTextAlign,
|
|
48
45
|
...applyTextStyles({
|
|
49
46
|
fontWeight: itemFontWeight,
|
|
50
47
|
fontSize: itemFontSize,
|
|
@@ -54,8 +51,9 @@ const selectItemCounterStyles = ({
|
|
|
54
51
|
lineHeight: itemLineHeight * itemFontSize
|
|
55
52
|
})
|
|
56
53
|
|
|
57
|
-
const selectItemContentStyles = ({ interItemMargin, ...themeTokens }, isLastChild) => ({
|
|
54
|
+
const selectItemContentStyles = ({ interItemMargin, listGutter, ...themeTokens }, isLastChild) => ({
|
|
58
55
|
...themeTokens,
|
|
56
|
+
marginLeft: listGutter,
|
|
59
57
|
marginBottom: !isLastChild ? interItemMargin : 0
|
|
60
58
|
})
|
|
61
59
|
|
|
@@ -87,17 +85,15 @@ const Item = React.forwardRef(
|
|
|
87
85
|
<View style={[staticStyles.itemCounter, selectItemCounterStyles(themeTokens)]}>
|
|
88
86
|
{itemCounter}
|
|
89
87
|
</View>
|
|
90
|
-
<View style={staticStyles.itemContent}>
|
|
91
|
-
{title
|
|
92
|
-
<
|
|
88
|
+
<View style={[staticStyles.itemContent, selectItemContentStyles(themeTokens, isLastChild)]}>
|
|
89
|
+
{title && (
|
|
90
|
+
<View>
|
|
93
91
|
<Typography variant={{ size: 'h4' }} tokens={headingTokens}>
|
|
94
92
|
{title}
|
|
95
93
|
</Typography>
|
|
96
|
-
|
|
97
|
-
</StackView>
|
|
98
|
-
) : (
|
|
99
|
-
<View style={selectItemContentStyles(themeTokens, isLastChild)}>{itemContent}</View>
|
|
94
|
+
</View>
|
|
100
95
|
)}
|
|
96
|
+
<View>{itemContent}</View>
|
|
101
97
|
</View>
|
|
102
98
|
</ItemBase>
|
|
103
99
|
)
|
|
@@ -138,13 +134,13 @@ export default Item
|
|
|
138
134
|
|
|
139
135
|
const staticStyles = StyleSheet.create({
|
|
140
136
|
container: {
|
|
137
|
+
flex: 1,
|
|
141
138
|
flexDirection: 'row'
|
|
142
139
|
},
|
|
143
140
|
itemCounter: {
|
|
144
|
-
|
|
141
|
+
alignItems: 'flex-end'
|
|
145
142
|
},
|
|
146
143
|
itemContent: {
|
|
147
|
-
|
|
148
|
-
marginLeft: 8
|
|
144
|
+
flexShrink: 1
|
|
149
145
|
}
|
|
150
146
|
})
|
package/src/Radio/RadioGroup.jsx
CHANGED
|
@@ -131,7 +131,7 @@ const RadioGroup = React.forwardRef(
|
|
|
131
131
|
readOnly: readOnly || inactive
|
|
132
132
|
})
|
|
133
133
|
|
|
134
|
-
const uniqueFields = ['id'
|
|
134
|
+
const uniqueFields = ['id']
|
|
135
135
|
if (!containUniqueFields(items, uniqueFields)) {
|
|
136
136
|
throw new Error(`RadioGroup items must have unique ${uniqueFields.join(', ')}`)
|
|
137
137
|
}
|
|
@@ -18,7 +18,7 @@ const selectCodeTextInputTokens = ({ outerBorderColor, outerBackgroundColor }) =
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
const Validator = React.forwardRef(
|
|
21
|
-
({ value = '', inactive, onChange, tokens = {}, variant = {}, ...rest }, ref) => {
|
|
21
|
+
({ value = '', inactive, mask = '', onChange, tokens = {}, variant = {}, ...rest }, ref) => {
|
|
22
22
|
const defaultRef = React.useRef()
|
|
23
23
|
const codeRef = ref ?? defaultRef
|
|
24
24
|
|
|
@@ -62,6 +62,15 @@ const Validator = React.forwardRef(
|
|
|
62
62
|
})
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
+
const changeDataMasking = (boxElement) => {
|
|
66
|
+
let charMasking = ''
|
|
67
|
+
const element = boxElement
|
|
68
|
+
if (mask && mask.length === 1) charMasking = mask
|
|
69
|
+
else if (mask && mask.length > 1) charMasking = mask.substring(0, 1)
|
|
70
|
+
|
|
71
|
+
if (charMasking) element.value = charMasking
|
|
72
|
+
}
|
|
73
|
+
|
|
65
74
|
const handleChangeCode = () => {
|
|
66
75
|
let code = ''
|
|
67
76
|
for (let i = 0; i < validatorsLength; i += 1) code += singleCodes[prefix + i]
|
|
@@ -76,20 +85,18 @@ const Validator = React.forwardRef(
|
|
|
76
85
|
codeElement.value = singleCodes[codeId] ?? ''
|
|
77
86
|
return
|
|
78
87
|
}
|
|
79
|
-
if (codeElement?.value?.length > 1) {
|
|
80
|
-
const oldValue = singleCodes[codeId]
|
|
81
|
-
const newValue = codeElement.value.replace(oldValue, '')
|
|
82
|
-
codeElement.value = newValue
|
|
83
|
-
handleSingleCodes(codeId, codeElement.value, 'success')
|
|
84
|
-
}
|
|
85
88
|
|
|
86
89
|
handleSingleCodes(codeId, codeElement?.value ?? singleCodes[codeId], 'success')
|
|
87
90
|
handleChangeCode()
|
|
88
91
|
if (nextIndex === validatorsLength) {
|
|
89
92
|
codeElement.blur()
|
|
93
|
+
changeDataMasking(codeElement)
|
|
90
94
|
return
|
|
91
95
|
}
|
|
92
|
-
if (codeElement?.value?.length > 0)
|
|
96
|
+
if (codeElement?.value?.length > 0) {
|
|
97
|
+
codeReferences[prefix + nextIndex].current.focus()
|
|
98
|
+
changeDataMasking(codeElement)
|
|
99
|
+
}
|
|
93
100
|
}
|
|
94
101
|
|
|
95
102
|
const handleKeyPress = (event, currentIndex, previousIndex) => {
|
|
@@ -138,7 +145,8 @@ const Validator = React.forwardRef(
|
|
|
138
145
|
/* eslint-disable react-hooks/exhaustive-deps */
|
|
139
146
|
React.useEffect(() => {
|
|
140
147
|
for (let i = 0; i < validatorsLength; i += 1) {
|
|
141
|
-
codeReferences[prefix + i].current.value =
|
|
148
|
+
if (mask && text[i]) codeReferences[prefix + i].current.value = mask
|
|
149
|
+
else codeReferences[prefix + i].current.value = text[i] ?? ''
|
|
142
150
|
handleSingleCodes(prefix + i, text[i] ?? '', text[i] ? 'success' : '')
|
|
143
151
|
}
|
|
144
152
|
}, [text])
|
|
@@ -203,6 +211,10 @@ Validator.propTypes = {
|
|
|
203
211
|
* If true, the component is inactive and non editable.
|
|
204
212
|
*/
|
|
205
213
|
inactive: PropTypes.bool,
|
|
214
|
+
/**
|
|
215
|
+
* Show masked characters and obscure the actual input. For example: '*'
|
|
216
|
+
*/
|
|
217
|
+
mask: PropTypes.string,
|
|
206
218
|
/**
|
|
207
219
|
* Use to react upon input's value changes. Required when the `value` prop is set. Will receive the input's value as an argument.
|
|
208
220
|
*/
|