@telus-uds/components-base 1.78.1 → 1.79.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 CHANGED
@@ -1,12 +1,26 @@
1
1
  # Change Log - @telus-uds/components-base
2
2
 
3
- This log was last generated on Wed, 28 Feb 2024 23:55:55 GMT and should not be manually modified.
3
+ This log was last generated on Wed, 06 Mar 2024 00:02:37 GMT and should not be manually modified.
4
4
 
5
5
  <!-- Start content -->
6
6
 
7
+ ## 1.79.0
8
+
9
+ Wed, 06 Mar 2024 00:02:37 GMT
10
+
11
+ ### Minor changes
12
+
13
+ - adjusting Typography to use the new token gradient (hoss.agina@telus.com)
14
+ - Bump @telus-uds/system-theme-tokens to v2.53.0
15
+
16
+ ### Patches
17
+
18
+ - prevent onchange event from being fired twice on select component (guillermo.peitzner@telus.com)
19
+ - fix step-tracker component visual states (guillermo.peitzner@telus.com)
20
+
7
21
  ## 1.78.1
8
22
 
9
- Wed, 28 Feb 2024 23:55:55 GMT
23
+ Thu, 29 Feb 2024 00:05:08 GMT
10
24
 
11
25
  ### Patches
12
26
 
@@ -255,7 +255,7 @@ const Select = /*#__PURE__*/(0, _react.forwardRef)((_ref8, ref) => {
255
255
  onBlur: handleBlur,
256
256
  onMouseOver: handleMouseOver,
257
257
  onMouseOut: handleMouseOut,
258
- onChange: setValue,
258
+ onChange: e => setValue(e, null),
259
259
  value: currentValue,
260
260
  inactive: inactive,
261
261
  placeholder: placeholder !== undefined ? {
@@ -209,11 +209,11 @@ const Step = _ref8 => {
209
209
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_View.default, {
210
210
  style: [staticStyles.knob, selectKnobStyles(themeTokens, isCompleted, isCurrent)],
211
211
  testID: getStepTestID(isCompleted, isCurrent),
212
- children: [(isCompleted && completedIcon || isCurrent && !completedIcon) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
213
- style: selectCurrentInnerStyles(themeTokens)
214
- }), isCurrent && completedIcon && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Icon.default, {
212
+ children: [isCompleted && completedIcon && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Icon.default, {
215
213
  icon: completedIcon,
216
214
  tokens: selectCompletedIconTokens(themeTokens)
215
+ }), (isCurrent && completedIcon || isCurrent && !completedIcon) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
216
+ style: selectCurrentInnerStyles(themeTokens)
217
217
  })]
218
218
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
219
219
  style: [staticStyles.connector, !isLast && selectConnectorStyles(themeTokens, isCompleted)]
@@ -30,7 +30,8 @@ const selectTextStyles = (_ref, themeOptions) => {
30
30
  textAlign,
31
31
  textTransform,
32
32
  letterSpacing,
33
- textDecorationLine
33
+ textDecorationLine,
34
+ gradient
34
35
  } = _ref;
35
36
  return (0, _utils.applyTextStyles)({
36
37
  fontWeight,
@@ -42,7 +43,8 @@ const selectTextStyles = (_ref, themeOptions) => {
42
43
  textAlign,
43
44
  textTransform,
44
45
  letterSpacing,
45
- textDecorationLine
46
+ textDecorationLine,
47
+ gradient
46
48
  });
47
49
  };
48
50
 
@@ -74,6 +76,36 @@ const Typography = /*#__PURE__*/(0, _react.forwardRef)((_ref2, ref) => {
74
76
  });
75
77
  const maxFontSizeMultiplier = enableMediaQueryStyleSheet ? (0, _utils2.getMaxFontMultiplier)(themeTokens[viewport]) : (0, _utils2.getMaxFontMultiplier)(themeTokens);
76
78
  const textDecorationLine = strikeThrough ? 'line-through' : 'none';
79
+ const generateGradientString = gradientObj => {
80
+ let gradientStr = '';
81
+ const {
82
+ type,
83
+ angle,
84
+ stops: [stopOne, stopTwo],
85
+ specification
86
+ } = gradientObj;
87
+ if (type === 'radial') {
88
+ gradientStr = `radial-gradient(${specification}`;
89
+ gradientStr += `, ${stopOne.color} ${stopOne.stop * 100}%, ${stopTwo.color} ${stopTwo.stop * 100}%`;
90
+ } else if (type === 'linear') {
91
+ gradientStr = `linear-gradient(${angle}deg`;
92
+ if (angle === 135) {
93
+ gradientStr += `, ${stopOne.color}, 75%, ${stopTwo.color}`;
94
+ } else {
95
+ gradientStr += `, ${stopOne.color}, ${stopTwo.color}`;
96
+ }
97
+ }
98
+ gradientStr += ')';
99
+ return gradientStr;
100
+ };
101
+ const getStyleWithGradient = styles => {
102
+ return styles.gradient ? {
103
+ ...styles,
104
+ color: 'transparent',
105
+ backgroundImage: generateGradientString(styles.gradient),
106
+ backgroundClip: 'text'
107
+ } : styles;
108
+ };
77
109
  let textStyles;
78
110
  let mediaIds;
79
111
  if (enableMediaQueryStyleSheet) {
@@ -144,7 +176,7 @@ const Typography = /*#__PURE__*/(0, _react.forwardRef)((_ref2, ref) => {
144
176
  ...containerProps,
145
177
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Text.default, {
146
178
  ...resolvedTextProps,
147
- style: textStyles,
179
+ style: getStyleWithGradient(textStyles),
148
180
  dataSet: dataSetValue,
149
181
  children: sanitizeChildren(children)
150
182
  })
@@ -152,7 +184,7 @@ const Typography = /*#__PURE__*/(0, _react.forwardRef)((_ref2, ref) => {
152
184
  ref: ref,
153
185
  ...containerProps,
154
186
  ...resolvedTextProps,
155
- style: textStyles,
187
+ style: getStyleWithGradient(textStyles),
156
188
  dataSet: dataSetValue,
157
189
  children: sanitizeChildren(children)
158
190
  });
@@ -247,7 +247,7 @@ const Select = /*#__PURE__*/forwardRef((_ref8, ref) => {
247
247
  onBlur: handleBlur,
248
248
  onMouseOver: handleMouseOver,
249
249
  onMouseOut: handleMouseOut,
250
- onChange: setValue,
250
+ onChange: e => setValue(e, null),
251
251
  value: currentValue,
252
252
  inactive: inactive,
253
253
  placeholder: placeholder !== undefined ? {
@@ -203,11 +203,11 @@ const Step = _ref8 => {
203
203
  }), /*#__PURE__*/_jsxs(View, {
204
204
  style: [staticStyles.knob, selectKnobStyles(themeTokens, isCompleted, isCurrent)],
205
205
  testID: getStepTestID(isCompleted, isCurrent),
206
- children: [(isCompleted && completedIcon || isCurrent && !completedIcon) && /*#__PURE__*/_jsx(View, {
207
- style: selectCurrentInnerStyles(themeTokens)
208
- }), isCurrent && completedIcon && /*#__PURE__*/_jsx(Icon, {
206
+ children: [isCompleted && completedIcon && /*#__PURE__*/_jsx(Icon, {
209
207
  icon: completedIcon,
210
208
  tokens: selectCompletedIconTokens(themeTokens)
209
+ }), (isCurrent && completedIcon || isCurrent && !completedIcon) && /*#__PURE__*/_jsx(View, {
210
+ style: selectCurrentInnerStyles(themeTokens)
211
211
  })]
212
212
  }), /*#__PURE__*/_jsx(View, {
213
213
  style: [staticStyles.connector, !isLast && selectConnectorStyles(themeTokens, isCompleted)]
@@ -22,7 +22,8 @@ const selectTextStyles = (_ref, themeOptions) => {
22
22
  textAlign,
23
23
  textTransform,
24
24
  letterSpacing,
25
- textDecorationLine
25
+ textDecorationLine,
26
+ gradient
26
27
  } = _ref;
27
28
  return applyTextStyles({
28
29
  fontWeight,
@@ -34,7 +35,8 @@ const selectTextStyles = (_ref, themeOptions) => {
34
35
  textAlign,
35
36
  textTransform,
36
37
  letterSpacing,
37
- textDecorationLine
38
+ textDecorationLine,
39
+ gradient
38
40
  });
39
41
  };
40
42
 
@@ -66,6 +68,36 @@ const Typography = /*#__PURE__*/forwardRef((_ref2, ref) => {
66
68
  });
67
69
  const maxFontSizeMultiplier = enableMediaQueryStyleSheet ? getMaxFontMultiplier(themeTokens[viewport]) : getMaxFontMultiplier(themeTokens);
68
70
  const textDecorationLine = strikeThrough ? 'line-through' : 'none';
71
+ const generateGradientString = gradientObj => {
72
+ let gradientStr = '';
73
+ const {
74
+ type,
75
+ angle,
76
+ stops: [stopOne, stopTwo],
77
+ specification
78
+ } = gradientObj;
79
+ if (type === 'radial') {
80
+ gradientStr = `radial-gradient(${specification}`;
81
+ gradientStr += `, ${stopOne.color} ${stopOne.stop * 100}%, ${stopTwo.color} ${stopTwo.stop * 100}%`;
82
+ } else if (type === 'linear') {
83
+ gradientStr = `linear-gradient(${angle}deg`;
84
+ if (angle === 135) {
85
+ gradientStr += `, ${stopOne.color}, 75%, ${stopTwo.color}`;
86
+ } else {
87
+ gradientStr += `, ${stopOne.color}, ${stopTwo.color}`;
88
+ }
89
+ }
90
+ gradientStr += ')';
91
+ return gradientStr;
92
+ };
93
+ const getStyleWithGradient = styles => {
94
+ return styles.gradient ? {
95
+ ...styles,
96
+ color: 'transparent',
97
+ backgroundImage: generateGradientString(styles.gradient),
98
+ backgroundClip: 'text'
99
+ } : styles;
100
+ };
69
101
  let textStyles;
70
102
  let mediaIds;
71
103
  if (enableMediaQueryStyleSheet) {
@@ -136,7 +168,7 @@ const Typography = /*#__PURE__*/forwardRef((_ref2, ref) => {
136
168
  ...containerProps,
137
169
  children: /*#__PURE__*/_jsx(Text, {
138
170
  ...resolvedTextProps,
139
- style: textStyles,
171
+ style: getStyleWithGradient(textStyles),
140
172
  dataSet: dataSetValue,
141
173
  children: sanitizeChildren(children)
142
174
  })
@@ -144,7 +176,7 @@ const Typography = /*#__PURE__*/forwardRef((_ref2, ref) => {
144
176
  ref: ref,
145
177
  ...containerProps,
146
178
  ...resolvedTextProps,
147
- style: textStyles,
179
+ style: getStyleWithGradient(textStyles),
148
180
  dataSet: dataSetValue,
149
181
  children: sanitizeChildren(children)
150
182
  });
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.52.1",
14
+ "@telus-uds/system-theme-tokens": "^2.53.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.78.1",
88
+ "version": "1.79.0",
89
89
  "types": "types/index.d.ts"
90
90
  }
@@ -241,7 +241,7 @@ const Select = forwardRef(
241
241
  onBlur={handleBlur}
242
242
  onMouseOver={handleMouseOver}
243
243
  onMouseOut={handleMouseOut}
244
- onChange={setValue}
244
+ onChange={(e) => setValue(e, null)}
245
245
  value={currentValue}
246
246
  inactive={inactive}
247
247
  placeholder={
@@ -172,12 +172,12 @@ const Step = ({ label, name, status = 0, stepCount = 0, stepIndex = 0, tokens, .
172
172
  style={[staticStyles.knob, selectKnobStyles(themeTokens, isCompleted, isCurrent)]}
173
173
  testID={getStepTestID(isCompleted, isCurrent)}
174
174
  >
175
- {((isCompleted && completedIcon) || (isCurrent && !completedIcon)) && (
176
- <View style={selectCurrentInnerStyles(themeTokens)} />
177
- )}
178
- {isCurrent && completedIcon && (
175
+ {isCompleted && completedIcon && (
179
176
  <Icon icon={completedIcon} tokens={selectCompletedIconTokens(themeTokens)} />
180
177
  )}
178
+ {((isCurrent && completedIcon) || (isCurrent && !completedIcon)) && (
179
+ <View style={selectCurrentInnerStyles(themeTokens)} />
180
+ )}
181
181
  </View>
182
182
  <View
183
183
  style={[
@@ -35,7 +35,8 @@ const selectTextStyles = (
35
35
  textAlign,
36
36
  textTransform,
37
37
  letterSpacing,
38
- textDecorationLine
38
+ textDecorationLine,
39
+ gradient
39
40
  },
40
41
  themeOptions
41
42
  ) =>
@@ -49,7 +50,8 @@ const selectTextStyles = (
49
50
  textAlign,
50
51
  textTransform,
51
52
  letterSpacing,
52
- textDecorationLine
53
+ textDecorationLine,
54
+ gradient
53
55
  })
54
56
 
55
57
  // General-purpose flexible theme-neutral base component for text
@@ -87,6 +89,45 @@ const Typography = forwardRef(
87
89
  : getMaxFontMultiplier(themeTokens)
88
90
  const textDecorationLine = strikeThrough ? 'line-through' : 'none'
89
91
 
92
+ const generateGradientString = (gradientObj) => {
93
+ let gradientStr = ''
94
+
95
+ const {
96
+ type,
97
+ angle,
98
+ stops: [stopOne, stopTwo],
99
+ specification
100
+ } = gradientObj
101
+
102
+ if (type === 'radial') {
103
+ gradientStr = `radial-gradient(${specification}`
104
+ gradientStr += `, ${stopOne.color} ${stopOne.stop * 100}%, ${stopTwo.color} ${
105
+ stopTwo.stop * 100
106
+ }%`
107
+ } else if (type === 'linear') {
108
+ gradientStr = `linear-gradient(${angle}deg`
109
+ if (angle === 135) {
110
+ gradientStr += `, ${stopOne.color}, 75%, ${stopTwo.color}`
111
+ } else {
112
+ gradientStr += `, ${stopOne.color}, ${stopTwo.color}`
113
+ }
114
+ }
115
+
116
+ gradientStr += ')'
117
+ return gradientStr
118
+ }
119
+
120
+ const getStyleWithGradient = (styles) => {
121
+ return styles.gradient
122
+ ? {
123
+ ...styles,
124
+ color: 'transparent',
125
+ backgroundImage: generateGradientString(styles.gradient),
126
+ backgroundClip: 'text'
127
+ }
128
+ : styles
129
+ }
130
+
90
131
  let textStyles
91
132
  let mediaIds
92
133
 
@@ -161,7 +202,11 @@ const Typography = forwardRef(
161
202
 
162
203
  return block ? (
163
204
  <View ref={ref} {...containerProps}>
164
- <Text {...resolvedTextProps} style={textStyles} dataSet={dataSetValue}>
205
+ <Text
206
+ {...resolvedTextProps}
207
+ style={getStyleWithGradient(textStyles)}
208
+ dataSet={dataSetValue}
209
+ >
165
210
  {sanitizeChildren(children)}
166
211
  </Text>
167
212
  </View>
@@ -170,7 +215,7 @@ const Typography = forwardRef(
170
215
  ref={ref}
171
216
  {...containerProps}
172
217
  {...resolvedTextProps}
173
- style={textStyles}
218
+ style={getStyleWithGradient(textStyles)}
174
219
  dataSet={dataSetValue}
175
220
  >
176
221
  {sanitizeChildren(children)}