@telus-uds/components-base 3.1.0 → 3.3.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.
Files changed (42) hide show
  1. package/CHANGELOG.md +35 -2
  2. package/lib/cjs/Card/CardBase.js +2 -1
  3. package/lib/cjs/Carousel/Carousel.js +202 -51
  4. package/lib/cjs/Carousel/CarouselItem/CarouselItem.js +1 -15
  5. package/lib/cjs/Carousel/CarouselStepTracker/CarouselStepTracker.js +6 -6
  6. package/lib/cjs/ExpandCollapse/Control.js +3 -1
  7. package/lib/cjs/ExpandCollapseMini/ExpandCollapseMini.js +1 -1
  8. package/lib/cjs/List/ListItemBase.js +1 -2
  9. package/lib/cjs/List/ListItemMark.js +6 -2
  10. package/lib/cjs/Modal/ModalContent.js +1 -1
  11. package/lib/cjs/MultiSelectFilter/MultiSelectFilter.js +2 -2
  12. package/lib/cjs/Notification/Notification.js +15 -25
  13. package/lib/cjs/TextInput/TextArea.js +10 -1
  14. package/lib/cjs/Typography/Typography.js +9 -3
  15. package/lib/esm/Card/CardBase.js +2 -1
  16. package/lib/esm/Carousel/Carousel.js +203 -52
  17. package/lib/esm/Carousel/CarouselItem/CarouselItem.js +2 -16
  18. package/lib/esm/Carousel/CarouselStepTracker/CarouselStepTracker.js +6 -6
  19. package/lib/esm/ExpandCollapse/Control.js +3 -1
  20. package/lib/esm/ExpandCollapseMini/ExpandCollapseMini.js +1 -1
  21. package/lib/esm/List/ListItemBase.js +1 -2
  22. package/lib/esm/List/ListItemMark.js +6 -2
  23. package/lib/esm/Modal/ModalContent.js +1 -1
  24. package/lib/esm/MultiSelectFilter/MultiSelectFilter.js +2 -2
  25. package/lib/esm/Notification/Notification.js +16 -26
  26. package/lib/esm/TextInput/TextArea.js +10 -1
  27. package/lib/esm/Typography/Typography.js +9 -3
  28. package/lib/package.json +2 -2
  29. package/package.json +2 -2
  30. package/src/Card/CardBase.jsx +2 -1
  31. package/src/Carousel/Carousel.jsx +200 -55
  32. package/src/Carousel/CarouselItem/CarouselItem.jsx +1 -7
  33. package/src/Carousel/CarouselStepTracker/CarouselStepTracker.jsx +5 -4
  34. package/src/ExpandCollapse/Control.jsx +3 -1
  35. package/src/ExpandCollapseMini/ExpandCollapseMini.jsx +1 -1
  36. package/src/List/ListItemBase.jsx +1 -2
  37. package/src/List/ListItemMark.jsx +9 -3
  38. package/src/Modal/ModalContent.jsx +1 -1
  39. package/src/MultiSelectFilter/MultiSelectFilter.jsx +1 -1
  40. package/src/Notification/Notification.jsx +14 -17
  41. package/src/TextInput/TextArea.jsx +11 -1
  42. package/src/Typography/Typography.jsx +9 -3
@@ -51,10 +51,12 @@ const selectBulletPositioningStyles = _ref3 => {
51
51
  const selectBulletContainerStyles = _ref4 => {
52
52
  let {
53
53
  itemBulletContainerWidth,
54
+ itemBulletContainerHeight,
54
55
  itemBulletContainerAlign
55
56
  } = _ref4;
56
57
  return {
57
58
  width: itemBulletContainerWidth,
59
+ height: itemBulletContainerHeight,
58
60
  alignItems: itemBulletContainerAlign
59
61
  };
60
62
  };
@@ -76,10 +78,11 @@ const ListItemMark = /*#__PURE__*/_react.default.forwardRef((_ref5, ref) => {
76
78
  const IconComponent = icon || /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {});
77
79
  const themeTokens = typeof tokens === 'function' ? tokens() : tokens;
78
80
  const sideItemContainerStyles = selectSideItemContainerStyles(themeTokens);
81
+ const bulletContainerStyles = selectBulletContainerStyles(themeTokens);
79
82
  if (icon) {
80
83
  const iconTokens = selectItemIconTokens(themeTokens);
81
84
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
82
- style: sideItemContainerStyles,
85
+ style: [sideItemContainerStyles, bulletContainerStyles],
83
86
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(IconComponent, {
84
87
  size: iconSize || iconTokens.size,
85
88
  color: iconColor || iconTokens.color
@@ -101,7 +104,8 @@ const ListItemMark = /*#__PURE__*/_react.default.forwardRef((_ref5, ref) => {
101
104
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Icon.default, {
102
105
  icon: bulletIcon,
103
106
  tokens: {
104
- color: bulletColor
107
+ color: bulletColor,
108
+ size: themeTokens.itemIconSize
105
109
  }
106
110
  })
107
111
  })
@@ -135,7 +135,7 @@ const ModalContent = /*#__PURE__*/_react.default.forwardRef((_ref, ref) => {
135
135
  },
136
136
  children: subHeading
137
137
  })
138
- }), Boolean(bodyText && hasHeadingSection) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spacer.default, {
138
+ }), Boolean((bodyText || children) && hasHeadingSection) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spacer.default, {
139
139
  space: 3
140
140
  })]
141
141
  }), bodyText && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
@@ -293,9 +293,9 @@ const MultiSelectFilter = /*#__PURE__*/_react.default.forwardRef((_ref3, ref) =>
293
293
  },
294
294
  children: subtitle
295
295
  })
296
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spacer.default, {
297
- space: 4
298
296
  })]
297
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spacer.default, {
298
+ space: 4
299
299
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
300
300
  style: styles.options,
301
301
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ScrollView.default, {
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _react = _interopRequireDefault(require("react"));
8
8
  var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/View"));
9
- var _Platform = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Platform"));
10
9
  var _propTypes = _interopRequireDefault(require("prop-types"));
10
+ var _systemConstants = require("@telus-uds/system-constants");
11
11
  var _ThemeProvider = require("../ThemeProvider");
12
12
  var _utils = require("../utils");
13
13
  var _IconButton = _interopRequireDefault(require("../IconButton"));
@@ -71,12 +71,12 @@ const selectDismissButtonContainerStyles = _ref4 => {
71
71
  };
72
72
  };
73
73
  const selectContentContainerStyle = (themeTokens, maxWidth, viewport, system) => ({
74
- maxWidth: viewport === 'xl' && system === true ? maxWidth : 'auto',
75
- minWidth: viewport === 'xl' && system === true ? maxWidth : 'auto',
74
+ maxWidth: viewport === 'xl' && system === true ? maxWidth : '100%',
75
+ width: '100%',
76
76
  paddingRight: themeTokens?.containerPaddingRight,
77
77
  paddingLeft: themeTokens?.containerPaddingLeft
78
78
  });
79
- const getMediaQueryStyles = (themeTokens, themeOptions, mediaIdsRef, dismissible, viewport, system) => {
79
+ const getMediaQueryStyles = (themeTokens, themeOptions, maxWidth, mediaIdsRef, dismissible, viewport, system) => {
80
80
  const transformedSelectContainerStyles = Object.entries(themeTokens).reduce((acc, _ref5) => {
81
81
  let [vp, viewportTokens] = _ref5;
82
82
  acc[vp] = selectContainerStyles({
@@ -90,7 +90,7 @@ const getMediaQueryStyles = (themeTokens, themeOptions, mediaIdsRef, dismissible
90
90
  styles: containerStyles
91
91
  } = _utils.StyleSheet.create({
92
92
  container: {
93
- flexDirection: system === true && viewport === 'xl' ? 'row' : 'inherit',
93
+ flexDirection: 'column',
94
94
  ...selectContainerMediaQueryStyles
95
95
  }
96
96
  });
@@ -102,22 +102,9 @@ const getMediaQueryStyles = (themeTokens, themeOptions, mediaIdsRef, dismissible
102
102
  flexDirection: 'row',
103
103
  flexShrink: 1,
104
104
  justifyContent: 'space-between',
105
- ...(0, _utils.createMediaQueryStyles)({
106
- xs: {
107
- maxWidth: themeOptions?.contentMaxWidth?.xs || '100%'
108
- },
109
- md: {
110
- maxWidth: themeOptions?.contentMaxWidth?.md || '100%'
111
- },
112
- lg: {
113
- maxWidth: themeOptions?.contentMaxWidth?.lg || '100%'
114
- },
115
- sm: {
116
- maxWidth: themeOptions?.contentMaxWidth?.sm || '100%'
117
- },
118
- xl: {
119
- maxWidth: themeOptions?.contentMaxWidth?.xl || '100%'
120
- }
105
+ ...selectContentContainerStyle(themeTokens, maxWidth, viewport, system),
106
+ ...(system && {
107
+ alignSelf: 'center'
121
108
  })
122
109
  }
123
110
  });
@@ -182,7 +169,7 @@ const getMediaQueryStyles = (themeTokens, themeOptions, mediaIdsRef, dismissible
182
169
  const getDefaultStyles = (themeTokens, themeOptions, maxWidth, dismissible, viewport, system) => ({
183
170
  containerStyles: {
184
171
  container: {
185
- flexDirection: system === true && viewport === 'xl' || _Platform.default.OS === 'android' ? 'row' : 'inherit',
172
+ flexDirection: 'column',
186
173
  ...selectContainerStyles(themeTokens)
187
174
  }
188
175
  },
@@ -191,7 +178,10 @@ const getDefaultStyles = (themeTokens, themeOptions, maxWidth, dismissible, view
191
178
  flexDirection: 'row',
192
179
  flexShrink: 1,
193
180
  justifyContent: 'space-between',
194
- ...selectContentContainerStyle(themeTokens, maxWidth, viewport, system)
181
+ ...selectContentContainerStyle(themeTokens, maxWidth, viewport, system),
182
+ ...(system && {
183
+ alignSelf: 'center'
184
+ })
195
185
  }
196
186
  },
197
187
  staticContentContainerStyles: {
@@ -309,7 +299,7 @@ const Notification = /*#__PURE__*/_react.default.forwardRef((_ref6, ref) => {
309
299
  system: isSystemEnabled,
310
300
  viewport
311
301
  });
312
- const maxWidth = (0, _utils.useResponsiveProp)(themeOptions?.contentMaxWidth);
302
+ const maxWidth = _systemConstants.viewports.map.get(_systemConstants.viewports.xl);
313
303
  const notificationComponentRef = _react.default.useRef({
314
304
  containerStyles: {},
315
305
  contentContainerStyles: {},
@@ -331,7 +321,7 @@ const Notification = /*#__PURE__*/_react.default.forwardRef((_ref6, ref) => {
331
321
  selectDismissIconPropsIds: {}
332
322
  });
333
323
  if (enableMediaQueryStyleSheet) {
334
- notificationComponentRef.current = getMediaQueryStyles(themeTokens, themeOptions, mediaIdsRef, dismissible, viewport, isSystemEnabled);
324
+ notificationComponentRef.current = getMediaQueryStyles(themeTokens, themeOptions, maxWidth, mediaIdsRef, dismissible, viewport, isSystemEnabled);
335
325
  } else {
336
326
  notificationComponentRef.current = getDefaultStyles(themeTokens, themeOptions, maxWidth, dismissible, viewport, isSystemEnabled);
337
327
  }
@@ -47,6 +47,7 @@ const TextArea = /*#__PURE__*/_react.default.forwardRef((_ref, ref) => {
47
47
  } = _ref;
48
48
  const themeTokens = (0, _ThemeProvider.useThemeTokens)('TextArea', tokens, variant);
49
49
  const [inputHeight, setInputHeight] = _react.default.useState();
50
+ const isUpdatingHeight = _react.default.useRef(false);
50
51
 
51
52
  // adjust the text area's height as new lines are added to the content
52
53
  const onHeightChange = _ref2 => {
@@ -58,8 +59,16 @@ const TextArea = /*#__PURE__*/_react.default.forwardRef((_ref, ref) => {
58
59
  }
59
60
  } = _ref2;
60
61
  // on native this is happens out of the box
61
- if (_Platform.default.OS === 'web') {
62
+ if (_Platform.default.OS === 'web' && !isUpdatingHeight.current) {
63
+ isUpdatingHeight.current = true;
62
64
  setInputHeight(height);
65
+ // setTimeout is used to “wait” for the next update cycle before allowing a new height adjustment,
66
+ // avoiding multiple updates in the same render and preventing a possible infinite loop or constant re-renders.
67
+ setTimeout(() => {
68
+ isUpdatingHeight.current = false;
69
+ }, 0);
70
+ } else {
71
+ setInputHeight(null);
63
72
  }
64
73
  };
65
74
  const {
@@ -69,7 +69,7 @@ const Typography = /*#__PURE__*/_react.default.forwardRef((_ref3, ref) => {
69
69
  tag = typeof heading === 'string' ? heading : undefined,
70
70
  accessibilityRole = heading === true ? 'header' : undefined,
71
71
  block = false,
72
- align = undefined,
72
+ align = _Platform.default.OS === 'web' ? 'inherit' : undefined,
73
73
  tokens,
74
74
  dataSet,
75
75
  strikeThrough = false,
@@ -118,13 +118,19 @@ const Typography = /*#__PURE__*/_react.default.forwardRef((_ref3, ref) => {
118
118
  backgroundClip: 'text'
119
119
  } : styles;
120
120
  };
121
+
122
+ /**
123
+ * Added to maintain previous behavior, as the 'auto' value for the 'align' prop now defaults to 'inherit' on the web,
124
+ * maintaining the previous behavior that was changed in the Text component of react-native.
125
+ */
126
+ const resolvedAlign = _Platform.default.OS === 'web' && align === 'auto' ? 'inherit' : align;
121
127
  let textStyles;
122
128
  let mediaIds;
123
129
  if (enableMediaQueryStyleSheet) {
124
130
  const transformedThemeTokens = Object.entries(themeTokens).reduce((acc, _ref4) => {
125
131
  let [vp, viewportTokens] = _ref4;
126
132
  acc[vp] = selectTextStyles({
127
- textAlign: align,
133
+ textAlign: resolvedAlign,
128
134
  textDecorationLine,
129
135
  ...viewportTokens
130
136
  }, themeOptions);
@@ -153,7 +159,7 @@ const Typography = /*#__PURE__*/_react.default.forwardRef((_ref3, ref) => {
153
159
  mediaIds = ids.text;
154
160
  } else {
155
161
  textStyles = selectTextStyles({
156
- textAlign: align,
162
+ textAlign: resolvedAlign,
157
163
  textDecorationLine,
158
164
  ...themeTokens
159
165
  }, themeOptions);
@@ -84,13 +84,14 @@ const CardBase = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
84
84
  ref: ref,
85
85
  ...props,
86
86
  children: src ? /*#__PURE__*/_jsx(ImageBackground, {
87
- alt: alt,
88
87
  source: imageSourceViewport,
89
88
  imageStyle: {
90
89
  borderRadius: cardStyle?.borderRadius - cardStyle?.borderWidth
91
90
  },
92
91
  resizeMode: backgroundImageResizeMode,
93
92
  style: styles.imageBackground,
93
+ accessible: true,
94
+ accessibilityLabel: alt,
94
95
  children: children
95
96
  }) : children
96
97
  });