@telus-uds/components-base 1.93.0 → 1.94.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 (65) hide show
  1. package/CHANGELOG.md +14 -3
  2. package/lib/Button/ButtonGroup.js +17 -1
  3. package/lib/Card/Card.js +12 -0
  4. package/lib/Card/CardBase.js +37 -2
  5. package/lib/Carousel/Carousel.js +55 -13
  6. package/lib/Carousel/CarouselItem/CarouselItem.js +86 -12
  7. package/lib/Fieldset/FieldsetContainer.js +7 -2
  8. package/lib/Fieldset/FieldsetContainer.native.js +4 -1
  9. package/lib/FileUpload/FileUpload.js +336 -0
  10. package/lib/FileUpload/NotificationContent.js +60 -0
  11. package/lib/FileUpload/dictionary.js +47 -0
  12. package/lib/FileUpload/index.js +10 -0
  13. package/lib/Link/TextButton.js +7 -17
  14. package/lib/Modal/ModalContent.js +12 -6
  15. package/lib/MultiSelectFilter/ModalOverlay.js +49 -30
  16. package/lib/MultiSelectFilter/MultiSelectFilter.js +170 -131
  17. package/lib/Notification/Notification.js +11 -2
  18. package/lib/Status/Status.js +9 -4
  19. package/lib/index.js +8 -0
  20. package/lib/utils/convertFromMegaByteToByte.js +16 -0
  21. package/lib/utils/formatImageSource.js +34 -0
  22. package/lib/utils/index.js +17 -1
  23. package/lib-module/Button/ButtonGroup.js +17 -1
  24. package/lib-module/Card/Card.js +13 -1
  25. package/lib-module/Card/CardBase.js +38 -3
  26. package/lib-module/Carousel/Carousel.js +55 -13
  27. package/lib-module/Carousel/CarouselItem/CarouselItem.js +86 -12
  28. package/lib-module/Fieldset/FieldsetContainer.js +7 -2
  29. package/lib-module/Fieldset/FieldsetContainer.native.js +4 -1
  30. package/lib-module/FileUpload/FileUpload.js +329 -0
  31. package/lib-module/FileUpload/NotificationContent.js +55 -0
  32. package/lib-module/FileUpload/dictionary.js +40 -0
  33. package/lib-module/FileUpload/index.js +2 -0
  34. package/lib-module/Link/TextButton.js +7 -17
  35. package/lib-module/Modal/ModalContent.js +12 -6
  36. package/lib-module/MultiSelectFilter/ModalOverlay.js +49 -30
  37. package/lib-module/MultiSelectFilter/MultiSelectFilter.js +171 -132
  38. package/lib-module/Notification/Notification.js +11 -2
  39. package/lib-module/Status/Status.js +9 -4
  40. package/lib-module/index.js +1 -0
  41. package/lib-module/utils/convertFromMegaByteToByte.js +10 -0
  42. package/lib-module/utils/formatImageSource.js +27 -0
  43. package/lib-module/utils/index.js +3 -1
  44. package/package.json +4 -3
  45. package/src/Button/ButtonGroup.jsx +9 -1
  46. package/src/Card/Card.jsx +18 -2
  47. package/src/Card/CardBase.jsx +47 -12
  48. package/src/Carousel/Carousel.jsx +59 -13
  49. package/src/Carousel/CarouselItem/CarouselItem.jsx +94 -9
  50. package/src/Fieldset/FieldsetContainer.jsx +4 -3
  51. package/src/Fieldset/FieldsetContainer.native.jsx +9 -6
  52. package/src/FileUpload/FileUpload.jsx +396 -0
  53. package/src/FileUpload/NotificationContent.jsx +44 -0
  54. package/src/FileUpload/dictionary.js +40 -0
  55. package/src/FileUpload/index.js +3 -0
  56. package/src/Link/TextButton.jsx +10 -17
  57. package/src/Modal/ModalContent.jsx +8 -3
  58. package/src/MultiSelectFilter/ModalOverlay.jsx +44 -18
  59. package/src/MultiSelectFilter/MultiSelectFilter.jsx +188 -126
  60. package/src/Notification/Notification.jsx +12 -4
  61. package/src/Status/Status.jsx +15 -4
  62. package/src/index.js +1 -0
  63. package/src/utils/convertFromMegaByteToByte.js +11 -0
  64. package/src/utils/formatImageSource.js +29 -0
  65. package/src/utils/index.js +2 -0
@@ -8,6 +8,10 @@ var _react = _interopRequireDefault(require("react"));
8
8
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
  var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/View"));
10
10
  var _StyleSheet = _interopRequireDefault(require("react-native-web/dist/cjs/exports/StyleSheet"));
11
+ var _Dimensions = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Dimensions"));
12
+ var _SafeAreaView = _interopRequireDefault(require("react-native-web/dist/cjs/exports/SafeAreaView"));
13
+ var _Platform = _interopRequireDefault(require("react-native-web/dist/cjs/exports/Platform"));
14
+ var _ScrollView = _interopRequireDefault(require("react-native-web/dist/cjs/exports/ScrollView"));
11
15
  var _ThemeProvider = require("../ThemeProvider");
12
16
  var _utils = require("../utils");
13
17
  var _dictionary = _interopRequireDefault(require("./dictionary"));
@@ -22,7 +26,6 @@ var _StackView = _interopRequireDefault(require("../StackView"));
22
26
  var _Typography = _interopRequireDefault(require("../Typography"));
23
27
  var _Link = require("../Link");
24
28
  var _ModalOverlay = _interopRequireDefault(require("./ModalOverlay"));
25
- var _Modal = _interopRequireDefault(require("../Modal"));
26
29
  var _jsxRuntime = require("react/jsx-runtime");
27
30
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
28
31
  const {
@@ -37,21 +40,54 @@ const selectSubTitleTokens = _ref => {
37
40
  color: subtitleColor
38
41
  };
39
42
  };
40
- const selectDividerToknes = _ref2 => {
43
+ const selectDividerTokens = _ref2 => {
41
44
  let {
42
- dividerColor,
43
- width,
44
- decorative = true,
45
- weight = 'thin'
45
+ dividerColor
46
46
  } = _ref2;
47
47
  return {
48
- color: dividerColor,
49
- width,
50
- decorative,
51
- weight
48
+ color: dividerColor
52
49
  };
53
50
  };
54
- const MultiSelectFilter = /*#__PURE__*/_react.default.forwardRef((_ref3, ref) => {
51
+ const selectHeaderTokens = _ref3 => {
52
+ let {
53
+ contentMarginLeft,
54
+ contentMarginRight,
55
+ contentMarginTop,
56
+ contentPaddingLeft,
57
+ contentPaddingRight
58
+ } = _ref3;
59
+ return {
60
+ marginLeft: contentMarginLeft,
61
+ marginRight: contentMarginRight,
62
+ marginTop: contentMarginTop,
63
+ paddingLeft: contentPaddingLeft,
64
+ paddingRight: contentPaddingRight,
65
+ flexGrow: 1
66
+ };
67
+ };
68
+ const selectControlsTokens = _ref4 => {
69
+ let {
70
+ contentMarginBottom,
71
+ contentMarginLeft,
72
+ contentMarginRight,
73
+ contentPaddingLeft,
74
+ contentPaddingRight
75
+ } = _ref4;
76
+ return {
77
+ marginBottom: contentMarginBottom,
78
+ marginLeft: contentMarginLeft,
79
+ marginRight: contentMarginRight,
80
+ paddingLeft: contentPaddingLeft,
81
+ paddingRight: contentPaddingRight
82
+ };
83
+ };
84
+ const selectContainerStyle = (windowHeight, windowWidth) => ({
85
+ height: windowHeight,
86
+ width: windowWidth
87
+ });
88
+ const TOTAL_COLUMNS = 12;
89
+ const MAX_ITEMS_THRESHOLD = 12;
90
+ const MultiSelectFilter = /*#__PURE__*/_react.default.forwardRef((_ref5, ref) => {
55
91
  let {
56
92
  label,
57
93
  subtitle,
@@ -73,7 +109,7 @@ const MultiSelectFilter = /*#__PURE__*/_react.default.forwardRef((_ref3, ref) =>
73
109
  rowLimit = 12,
74
110
  dictionary = _dictionary.default,
75
111
  ...rest
76
- } = _ref3;
112
+ } = _ref5;
77
113
  const viewport = (0, _ViewportProvider.useViewport)();
78
114
  const {
79
115
  currentValues,
@@ -117,7 +153,8 @@ const MultiSelectFilter = /*#__PURE__*/_react.default.forwardRef((_ref3, ref) =>
117
153
  maxWidthSize,
118
154
  subHeaderLineHeight,
119
155
  minHeight,
120
- minWidth
156
+ minWidth,
157
+ ...restTokens
121
158
  } = (0, _ThemeProvider.useThemeTokens)('MultiSelectFilter', tokens, {
122
159
  ...variant,
123
160
  maxHeight,
@@ -195,21 +232,35 @@ const MultiSelectFilter = /*#__PURE__*/_react.default.forwardRef((_ref3, ref) =>
195
232
  offsets,
196
233
  align
197
234
  });
198
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
199
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.ButtonDropdown, {
200
- ref: sourceRef,
201
- ...pressHandlers,
202
- value: isOpen,
203
- selected: isSelected,
204
- label: label,
205
- onChange: handleChange,
206
- tokens: getButtonTokens,
207
- inactive: inactive
208
- }, id), isOpen && viewport === 'xs' && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Modal.default, {
209
- isOpen: isOpen,
210
- onClose: onClose,
211
- ref: ref,
212
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(Row, {
235
+ const [isScrolling, setIsScrolling] = _react.default.useState(false);
236
+ const [scrollViewHeight, setScrollViewHeight] = _react.default.useState(0);
237
+ const [rowHeight, setRowHeight] = _react.default.useState(0);
238
+ const modalRef = (0, _utils.useScrollBlocking)(isOpen);
239
+ const windowWidth = _Dimensions.default.get('window').width;
240
+ const windowHeight = _Dimensions.default.get('window').height;
241
+ _react.default.useEffect(() => {
242
+ if (rowHeight > scrollViewHeight) {
243
+ setIsScrolling(true);
244
+ } else {
245
+ setIsScrolling(false);
246
+ }
247
+ }, [scrollViewHeight, rowHeight]);
248
+ const handleScrollViewLayout = event => {
249
+ const {
250
+ height
251
+ } = event.nativeEvent.layout;
252
+ setScrollViewHeight(height);
253
+ };
254
+ const handleRowLayout = event => {
255
+ const {
256
+ height
257
+ } = event.nativeEvent.layout;
258
+ setRowHeight(height);
259
+ };
260
+ const headerContent = /*#__PURE__*/(0, _jsxRuntime.jsxs)(_View.default, {
261
+ style: [selectHeaderTokens(restTokens), styles.container],
262
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(Row, {
263
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
213
264
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
214
265
  tokens: {
215
266
  ...headerStyles,
@@ -217,26 +268,30 @@ const MultiSelectFilter = /*#__PURE__*/_react.default.forwardRef((_ref3, ref) =>
217
268
  },
218
269
  children: getCopy('filterByLabel').replace(/%\{filterCategory\}/g, label.toLowerCase())
219
270
  })
220
- }), subtitle && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
221
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Spacer.default, {
222
- space: 5
223
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(Row, {
224
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
225
- tokens: {
226
- ...subeHeaderStyles,
227
- lineHeight: subHeaderLineHeight
228
- },
229
- children: subtitle
230
- })
231
- })]
271
+ })
272
+ }), subtitle && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
273
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Spacer.default, {
274
+ space: 4
275
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(Row, {
276
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
277
+ tokens: {
278
+ ...subeHeaderStyles,
279
+ lineHeight: subHeaderLineHeight
280
+ },
281
+ children: subtitle
282
+ })
232
283
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spacer.default, {
233
284
  space: 4
234
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
235
- scroll: true,
285
+ })]
286
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
287
+ style: styles.options,
288
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ScrollView.default, {
289
+ onLayout: handleScrollViewLayout,
236
290
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Row, {
237
291
  distribute: "between",
292
+ onLayout: handleRowLayout,
238
293
  children: [...Array(colSize).keys()].map(i => /*#__PURE__*/(0, _jsxRuntime.jsxs)(Col, {
239
- xs: 12 / colSize,
294
+ xs: TOTAL_COLUMNS / colSize,
240
295
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Checkbox.CheckboxGroup, {
241
296
  items: items.slice(i * rowLength, (i + 1) * rowLength),
242
297
  checkedIds: checkedIds,
@@ -246,13 +301,18 @@ const MultiSelectFilter = /*#__PURE__*/_react.default.forwardRef((_ref3, ref) =>
246
301
  })]
247
302
  }, i))
248
303
  })
249
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Divider.default, {
250
- variant: selectDividerToknes({
251
- ...themeTokens,
252
- width: 'full'
253
- }),
254
- space: 4
255
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(Row, {
304
+ })
305
+ })]
306
+ });
307
+ const controlsContent = /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
308
+ children: [isScrolling ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Divider.default, {
309
+ tokens: selectDividerTokens(themeTokens),
310
+ space: 4
311
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spacer.default, {
312
+ space: 4
313
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
314
+ style: selectControlsTokens(restTokens),
315
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Row, {
256
316
  horizontalAlign: buttonDirection === 'column' ? 'center' : 'start',
257
317
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_StackView.default, {
258
318
  direction: buttonDirection,
@@ -266,7 +326,6 @@ const MultiSelectFilter = /*#__PURE__*/_react.default.forwardRef((_ref3, ref) =>
266
326
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.Button, {
267
327
  onPress: () => onApply(checkedIds),
268
328
  variant: {
269
- size: 'small',
270
329
  priority: 'high',
271
330
  ...(viewport === 'xs' && {
272
331
  width: 'full'
@@ -280,105 +339,85 @@ const MultiSelectFilter = /*#__PURE__*/_react.default.forwardRef((_ref3, ref) =>
280
339
  })
281
340
  })]
282
341
  })
283
- })]
342
+ })
343
+ })]
344
+ });
345
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
346
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.ButtonDropdown, {
347
+ ref: sourceRef,
348
+ ...pressHandlers,
349
+ value: isOpen,
350
+ selected: isSelected,
351
+ label: label,
352
+ onChange: handleChange,
353
+ tokens: getButtonTokens,
354
+ inactive: inactive
355
+ }, id), isOpen && viewport === 'xs' && /*#__PURE__*/(0, _jsxRuntime.jsx)(_ModalOverlay.default, {
356
+ overlaidPosition: {
357
+ top: 0,
358
+ left: 0
359
+ },
360
+ onClose: onClose,
361
+ maxHeight: true,
362
+ maxHeightSize: windowHeight,
363
+ maxWidthSize: windowWidth,
364
+ minHeight: windowHeight,
365
+ minWidth: windowWidth,
366
+ tokens: {
367
+ ...tokens,
368
+ maxWidth: true
369
+ },
370
+ copy: copy,
371
+ isReady: isReady,
372
+ onLayout: onTargetLayout,
373
+ ref: modalRef,
374
+ enableFullscreen: true,
375
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_SafeAreaView.default, {
376
+ style: [selectContainerStyle(windowHeight, windowWidth), styles.content],
377
+ ref: ref,
378
+ children: [headerContent, /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
379
+ style: styles.controls,
380
+ children: controlsContent
381
+ })]
382
+ })
284
383
  }), isOpen && viewport !== 'xs' && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_ModalOverlay.default, {
285
384
  overlaidPosition: overlaidPosition,
286
385
  onClose: onClose,
287
- maxHeight: maxHeight,
386
+ maxHeight: items.length > MAX_ITEMS_THRESHOLD ? true : maxHeight,
288
387
  maxHeightSize: maxHeightSize,
289
388
  maxWidthSize: maxWidthSize,
290
389
  minHeight: minHeight,
291
390
  minWidth: minWidth,
292
391
  tokens: {
293
392
  ...tokens,
294
- maxWidth
393
+ maxWidth: items.length > MAX_ITEMS_THRESHOLD ? true : maxWidth
295
394
  },
296
395
  copy: copy,
297
396
  isReady: isReady,
298
397
  onLayout: onTargetLayout,
299
398
  ref: ref,
300
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(Row, {
301
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
302
- style: styles.textContainerStyle,
303
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
304
- tokens: {
305
- ...headerStyles,
306
- lineHeight: headerLineHeight
307
- },
308
- children: getCopy('filterByLabel').replace(/%\{filterCategory\}/g, label.toLowerCase())
309
- })
310
- })
311
- }), subtitle && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
312
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Spacer.default, {
313
- space: 5
314
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(Row, {
315
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
316
- tokens: {
317
- ...subeHeaderStyles,
318
- lineHeight: subHeaderLineHeight
319
- },
320
- children: subtitle
321
- })
322
- })]
323
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spacer.default, {
324
- space: 4
325
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
326
- scroll: true,
327
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Row, {
328
- distribute: "between",
329
- children: [...Array(colSize).keys()].map(i => /*#__PURE__*/(0, _jsxRuntime.jsxs)(Col, {
330
- xs: 12 / colSize,
331
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Checkbox.CheckboxGroup, {
332
- items: items.slice(i * rowLength, (i + 1) * rowLength),
333
- checkedIds: checkedIds,
334
- onChange: e => setCheckedIds(e, i)
335
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spacer.default, {
336
- size: 4
337
- })]
338
- }, i))
339
- })
340
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Divider.default, {
341
- variant: selectDividerToknes({
342
- ...themeTokens,
343
- width: 'full'
344
- }),
345
- space: 4
346
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(Row, {
347
- horizontalAlign: buttonDirection === 'column' ? 'center' : 'start',
348
- children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_StackView.default, {
349
- direction: buttonDirection,
350
- space: 3,
351
- tokens: {
352
- alignItems: 'center',
353
- ...(viewport === 'xs' && {
354
- flexGrow: 1
355
- })
356
- },
357
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.Button, {
358
- onPress: () => onApply(checkedIds),
359
- variant: {
360
- size: 'small',
361
- priority: 'high',
362
- ...(viewport === 'xs' && {
363
- width: 'full'
364
- })
365
- },
366
- children: getCopy('applyButtonLabel')
367
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
368
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Link.TextButton, {
369
- onPress: onClear,
370
- children: getCopy('clearButtonLabel')
371
- })
372
- })]
373
- })
374
- })]
399
+ children: [headerContent, controlsContent]
375
400
  })]
376
401
  });
377
402
  });
378
403
  MultiSelectFilter.displayName = 'MultiSelectFilter';
379
404
  const styles = _StyleSheet.default.create({
380
- textContainerStyle: {
381
- marginRight: 52
405
+ container: {
406
+ flex: 1
407
+ },
408
+ controls: _Platform.default.select({
409
+ web: {},
410
+ default: {
411
+ flex: 0.35
412
+ }
413
+ }),
414
+ content: {
415
+ flex: 1,
416
+ justifyContent: 'space-between',
417
+ backgroundColor: 'transparent'
418
+ },
419
+ options: {
420
+ flex: 1
382
421
  }
383
422
  });
384
423
 
@@ -6,6 +6,7 @@ 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"));
9
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
10
11
  var _ThemeProvider = require("../ThemeProvider");
11
12
  var _utils = require("../utils");
@@ -182,7 +183,7 @@ const getMediaQueryStyles = (themeTokens, themeOptions, mediaIdsRef, dismissible
182
183
  const getDefaultStyles = (themeTokens, themeOptions, maxWidth, dismissible, viewport, system) => ({
183
184
  containerStyles: {
184
185
  container: {
185
- flexDirection: system === true && viewport === 'xl' ? 'row' : 'inherit',
186
+ flexDirection: system === true && viewport === 'xl' || _Platform.default.OS === 'android' ? 'row' : 'inherit',
186
187
  ...selectContainerStyles(themeTokens)
187
188
  }
188
189
  },
@@ -287,6 +288,7 @@ const Notification = /*#__PURE__*/_react.default.forwardRef((_ref6, ref) => {
287
288
  copy = 'en',
288
289
  tokens,
289
290
  variant,
291
+ onDismiss,
290
292
  ...rest
291
293
  } = _ref6;
292
294
  const [isDismissed, setIsDismissed] = _react.default.useState(false);
@@ -346,7 +348,10 @@ const Notification = /*#__PURE__*/_react.default.forwardRef((_ref6, ref) => {
346
348
  dismissIcon: DismissIconComponent,
347
349
  dismissIconColor
348
350
  } = enableMediaQueryStyleSheet === false ? themeTokens : themeTokens[viewport];
349
- const onDismissPress = () => setIsDismissed(true);
351
+ const onDismissPress = () => {
352
+ setIsDismissed(true);
353
+ onDismiss === null || onDismiss === void 0 ? void 0 : onDismiss();
354
+ };
350
355
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
351
356
  ref: ref,
352
357
  style: notificationComponentRef.current.containerStyles.container,
@@ -420,6 +425,10 @@ Notification.propTypes = {
420
425
  copy: _propTypes.default.oneOfType([_propTypes.default.oneOf(['en', 'fr']), _propTypes.default.shape({
421
426
  dismiss: _propTypes.default.string
422
427
  })]),
428
+ /**
429
+ * Callback function called when the dismiss button is clicked
430
+ */
431
+ onDismiss: _propTypes.default.func,
423
432
  tokens: (0, _utils.getTokensPropType)('Notification'),
424
433
  variant: _utils.variantProp.propType
425
434
  };
@@ -80,7 +80,8 @@ const selectTextStyles = _ref3 => {
80
80
  textLineHeight,
81
81
  fontName,
82
82
  fontSize,
83
- fontWeight
83
+ fontWeight,
84
+ marginLeft
84
85
  } = _ref3;
85
86
  return (0, _ThemeProvider.applyTextStyles)({
86
87
  fontColor: textColor,
@@ -88,7 +89,7 @@ const selectTextStyles = _ref3 => {
88
89
  fontSize,
89
90
  fontWeight,
90
91
  lineHeight: _Platform.default.OS === 'web' ? textLineHeight : textLineHeight * 1.2,
91
- marginLeft: 8
92
+ marginLeft
92
93
  });
93
94
  };
94
95
 
@@ -100,6 +101,7 @@ const selectTextStyles = _ref3 => {
100
101
  * @param {string} variant - The variant of the status component.
101
102
  * @param {ReactNode} children - The content to be displayed inside the status component.
102
103
  * @param {function} customGradient - The custom gradient function for the status component.
104
+ * @param {elementType} customGradient - Defines an icon to be rendered.
103
105
  * @param {object} rest - The rest of the props to be applied to the status component.
104
106
  * @param {React.Ref} ref - The ref to be applied to the status component.
105
107
  * @returns {ReactNode} The rendered status component.
@@ -113,14 +115,17 @@ const Status = /*#__PURE__*/_react.default.forwardRef((_ref4, ref) => {
113
115
  ...rest
114
116
  } = _ref4;
115
117
  const themeTokens = (0, _ThemeProvider.useThemeTokens)('Status', tokens, variant);
118
+ const {
119
+ icon
120
+ } = themeTokens;
116
121
  const containerStyles = {
117
122
  ...selectContainerStyles(themeTokens),
118
123
  ...staticStyles.container
119
124
  };
120
125
  let content = /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
121
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Icon.default, {
126
+ children: [icon ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Icon.default, {
122
127
  ...selectIconProps(themeTokens)
123
- }), (0, _utils.wrapStringsInText)(children, {
128
+ }) : null, (0, _utils.wrapStringsInText)(children, {
124
129
  style: selectTextStyles(themeTokens)
125
130
  })]
126
131
  });
package/lib/index.js CHANGED
@@ -13,6 +13,7 @@ var _exportNames = {
13
13
  Card: true,
14
14
  PressableCardBase: true,
15
15
  CardGroup: true,
16
+ FileUpload: true,
16
17
  Listbox: true,
17
18
  Checkbox: true,
18
19
  CheckboxCard: true,
@@ -195,6 +196,12 @@ Object.defineProperty(exports, "Fieldset", {
195
196
  return _Fieldset.default;
196
197
  }
197
198
  });
199
+ Object.defineProperty(exports, "FileUpload", {
200
+ enumerable: true,
201
+ get: function () {
202
+ return _FileUpload.default;
203
+ }
204
+ });
198
205
  Object.defineProperty(exports, "FlexGrid", {
199
206
  enumerable: true,
200
207
  get: function () {
@@ -569,6 +576,7 @@ Object.keys(_Carousel).forEach(function (key) {
569
576
  }
570
577
  });
571
578
  });
579
+ var _FileUpload = _interopRequireDefault(require("./FileUpload"));
572
580
  var _Listbox = _interopRequireDefault(require("./Listbox"));
573
581
  var _Checkbox = _interopRequireWildcard(require("./Checkbox"));
574
582
  Object.keys(_Checkbox).forEach(function (key) {
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = convertFromMegaByteToByte;
7
+ /**
8
+ * Converts a value from megabytes to bytes.
9
+ *
10
+ * @param {number} megaByte - The value in megabytes to be converted.
11
+ * @returns {number} The converted value in bytes.
12
+ */
13
+ const BYTES_IN_A_MEGABYTE = 1024 * 1024;
14
+ function convertFromMegaByteToByte(megaByte) {
15
+ return megaByte * BYTES_IN_A_MEGABYTE;
16
+ }
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ // react native source for Image and ImageBackground needs proper formatting to work
8
+ // remote sources that start with 'http' and base64 encoded sources that start with 'data:' need be wrapped in uri when passing source prop for Image and ImageBackground ie. source={ uri: image }
9
+ // local source for image can be passed normally without wrapping in uri ie. source={ image }
10
+
11
+ /**
12
+ * example code from react native docs: https://reactnative.dev/docs/imagebackground
13
+ *
14
+ * const image = {uri: 'https://legacy.reactjs.org/logo-og.png'}
15
+ *
16
+ * const App = () => (
17
+ * <View style={styles.container}>
18
+ * <ImageBackground source={image} resizeMode="cover" style={styles.image}>
19
+ * <Text style={styles.text}>Inside</Text>
20
+ * </ImageBackground>
21
+ * </View>
22
+ * )
23
+ */
24
+
25
+ /**
26
+ * Formats the image source for React Native Image and ImageBackground components.
27
+ * @param {string|number} source - The image source, either a URI string or a number (when a local image source is bundled in IOS or Android app).
28
+ * @returns {object|string} - The formatted image source.
29
+ */
30
+ const formatImageSource = source => typeof source === 'string' && (source.startsWith('http') || source.startsWith('data:')) ? {
31
+ uri: source
32
+ } : source;
33
+ var _default = formatImageSource;
34
+ exports.default = _default;
@@ -17,7 +17,9 @@ var _exportNames = {
17
17
  containUniqueFields: true,
18
18
  BaseView: true,
19
19
  htmlAttrs: true,
20
- transformGradient: true
20
+ transformGradient: true,
21
+ convertFromMegaByteToByte: true,
22
+ formatImageSource: true
21
23
  };
22
24
  Object.defineProperty(exports, "BaseView", {
23
25
  enumerable: true,
@@ -31,6 +33,18 @@ Object.defineProperty(exports, "containUniqueFields", {
31
33
  return _containUniqueFields.default;
32
34
  }
33
35
  });
36
+ Object.defineProperty(exports, "convertFromMegaByteToByte", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _convertFromMegaByteToByte.default;
40
+ }
41
+ });
42
+ Object.defineProperty(exports, "formatImageSource", {
43
+ enumerable: true,
44
+ get: function () {
45
+ return _formatImageSource.default;
46
+ }
47
+ });
34
48
  Object.defineProperty(exports, "htmlAttrs", {
35
49
  enumerable: true,
36
50
  get: function () {
@@ -224,6 +238,8 @@ var _containUniqueFields = _interopRequireDefault(require("./containUniqueFields
224
238
  var _BaseView = _interopRequireDefault(require("./BaseView"));
225
239
  var _htmlAttrs = _interopRequireDefault(require("./htmlAttrs"));
226
240
  var _transformGradient = require("./transformGradient");
241
+ var _convertFromMegaByteToByte = _interopRequireDefault(require("./convertFromMegaByteToByte"));
242
+ var _formatImageSource = _interopRequireDefault(require("./formatImageSource"));
227
243
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
228
244
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
229
245
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -48,7 +48,11 @@ const ButtonGroup = /*#__PURE__*/React.forwardRef((_ref, ref) => {
48
48
  const {
49
49
  direction,
50
50
  space,
51
- fieldSpace
51
+ fieldSpace,
52
+ borderRadius,
53
+ backgroundColor,
54
+ padding,
55
+ gap
52
56
  } = themeTokens;
53
57
  const getButtonTokens = useThemeTokensCallback('ButtonGroupItem', tokens, variant);
54
58
  const {
@@ -87,12 +91,24 @@ const ButtonGroup = /*#__PURE__*/React.forwardRef((_ref, ref) => {
87
91
  inactive: inactive,
88
92
  validation: validation,
89
93
  accessibilityRole: accessibilityRole,
94
+ style: {
95
+ borderRadius,
96
+ backgroundColor,
97
+ padding,
98
+ ...(Platform.OS === 'web' ? {
99
+ gap,
100
+ width: 'fit-content'
101
+ } : {
102
+ alignSelf: 'flex-start'
103
+ })
104
+ },
90
105
  ...selectProps(rest),
91
106
  children: /*#__PURE__*/_jsx(StackWrap, {
92
107
  accessibilityRole: innerRole,
93
108
  space: space,
94
109
  direction: direction,
95
110
  tokens: stackTokens,
111
+ gap: gap,
96
112
  ref: ref,
97
113
  children: items.map((_ref2, index) => {
98
114
  let {