@hero-design/rn 7.5.0 → 7.6.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 (74) hide show
  1. package/.turbo/turbo-build.log +8 -8
  2. package/es/index.js +474 -110
  3. package/lib/index.js +474 -108
  4. package/package.json +2 -2
  5. package/playground/.turbo/turbo-type-check.log +7 -0
  6. package/playground/package.json +3 -3
  7. package/playground/src/App.tsx +6 -0
  8. package/playground/src/ContentNavigator.tsx +3 -10
  9. package/playground/src/Select.tsx +32 -0
  10. package/playground/src/Switch.tsx +80 -0
  11. package/src/components/BottomSheet/Header.tsx +1 -1
  12. package/src/components/BottomSheet/__tests__/__snapshots__/index.spec.tsx.snap +8 -8
  13. package/src/components/BottomSheet/index.tsx +6 -0
  14. package/src/components/Radio/RadioGroup.tsx +31 -7
  15. package/src/components/Radio/types.ts +1 -0
  16. package/src/components/SectionHeading/StyledHeading.tsx +5 -5
  17. package/src/components/SectionHeading/__tests__/{StyledHeading.tsx → StyledHeading.spec.tsx} +0 -0
  18. package/src/components/SectionHeading/__tests__/__snapshots__/{StyledHeading.tsx.snap → StyledHeading.spec.tsx.snap} +0 -0
  19. package/src/components/Select/MultiSelect/Footer.tsx +15 -0
  20. package/src/components/Select/MultiSelect/OptionList.tsx +76 -0
  21. package/src/components/Select/MultiSelect/StyledMultiSelect.tsx +30 -0
  22. package/src/components/Select/MultiSelect/__tests__/StyledMultiSelect.spec.tsx +49 -0
  23. package/src/components/Select/MultiSelect/__tests__/__snapshots__/StyledMultiSelect.spec.tsx.snap +108 -0
  24. package/src/components/Select/MultiSelect/__tests__/__snapshots__/index.spec.tsx.snap +1630 -0
  25. package/src/components/Select/MultiSelect/__tests__/index.spec.tsx +94 -0
  26. package/src/components/Select/MultiSelect/index.tsx +103 -0
  27. package/src/components/Select/MultiSelect/types.ts +1 -0
  28. package/src/components/Select/index.tsx +5 -0
  29. package/src/components/Switch/StyledSwitch.tsx +50 -0
  30. package/src/components/Switch/__tests__/StyledHeading.spec.tsx +42 -0
  31. package/src/components/Switch/__tests__/__snapshots__/StyledHeading.spec.tsx.snap +74 -0
  32. package/src/components/Switch/__tests__/__snapshots__/index.spec.tsx.snap +129 -0
  33. package/src/components/Switch/__tests__/index.spec.tsx +24 -0
  34. package/src/components/Switch/index.tsx +87 -0
  35. package/src/components/TextInput/StyledTextInput.tsx +2 -6
  36. package/src/components/TextInput/__tests__/StyledTextInput.spec.tsx +1 -7
  37. package/src/components/TextInput/__tests__/__snapshots__/StyledTextInput.spec.tsx.snap +1 -22
  38. package/src/components/TextInput/__tests__/index.spec.tsx +2 -1
  39. package/src/components/TextInput/index.tsx +19 -6
  40. package/src/index.ts +4 -0
  41. package/src/theme/__tests__/__snapshots__/index.spec.ts.snap +58 -1
  42. package/src/theme/components/sectionHeading.ts +18 -0
  43. package/src/theme/components/select.ts +23 -0
  44. package/src/theme/components/switch.ts +50 -0
  45. package/src/theme/components/textInput.ts +1 -1
  46. package/src/theme/global/colors.ts +1 -0
  47. package/src/theme/index.ts +12 -3
  48. package/types/components/BottomSheet/index.d.ts +5 -1
  49. package/types/components/Radio/RadioGroup.d.ts +11 -8
  50. package/types/components/Radio/index.d.ts +1 -1
  51. package/types/components/Radio/types.d.ts +5 -0
  52. package/types/components/SectionHeading/__tests__/{StyledHeading.d.ts → StyledHeading.spec.d.ts} +0 -0
  53. package/types/components/Select/MultiSelect/Footer.d.ts +5 -0
  54. package/types/components/Select/MultiSelect/OptionList.d.ts +3 -0
  55. package/types/components/Select/MultiSelect/StyledMultiSelect.d.ts +26 -0
  56. package/types/components/Select/MultiSelect/__tests__/StyledMultiSelect.spec.d.ts +1 -0
  57. package/types/components/Select/MultiSelect/__tests__/index.spec.d.ts +1 -0
  58. package/types/components/Select/MultiSelect/index.d.ts +39 -0
  59. package/types/components/Select/MultiSelect/types.d.ts +5 -0
  60. package/types/components/Select/index.d.ts +5 -0
  61. package/types/components/Switch/StyledSwitch.d.ts +36 -0
  62. package/types/components/Switch/__tests__/StyledHeading.spec.d.ts +1 -0
  63. package/types/components/Switch/__tests__/index.spec.d.ts +1 -0
  64. package/types/components/Switch/index.d.ts +30 -0
  65. package/types/components/TextInput/StyledTextInput.d.ts +1 -5
  66. package/types/components/TextInput/index.d.ts +13 -5
  67. package/types/index.d.ts +3 -1
  68. package/types/theme/components/sectionHeading.d.ts +13 -0
  69. package/types/theme/components/select.d.ts +17 -0
  70. package/types/theme/components/switch.d.ts +32 -0
  71. package/types/theme/components/textInput.d.ts +1 -1
  72. package/types/theme/global/colors.d.ts +1 -0
  73. package/types/theme/global/index.d.ts +1 -0
  74. package/types/theme/index.d.ts +8 -2
package/lib/index.js CHANGED
@@ -1750,7 +1750,8 @@ var systemPalette = {
1750
1750
  invertedText: palette.white,
1751
1751
  outline: palette.greyLight60,
1752
1752
  archived: palette.greyLight45,
1753
- black: palette.black
1753
+ black: palette.black,
1754
+ inactiveBackground: palette.greyDark30
1754
1755
  };
1755
1756
 
1756
1757
  var BASE_WIDTH = 390; // Based on iPhone 13's viewport size
@@ -2257,25 +2258,6 @@ var getProgressTheme = function getProgressTheme(theme) {
2257
2258
  };
2258
2259
  };
2259
2260
 
2260
- var getSpinnerTheme = function getSpinnerTheme(theme) {
2261
- var color = {
2262
- "default": theme.colors.primary
2263
- };
2264
- var space = {
2265
- spinnerDot: theme.space.medium,
2266
- spinnerDotPadding: theme.space.small,
2267
- spinnerTextPaddingTop: theme.space.small
2268
- };
2269
- var radii = {
2270
- "default": theme.radii.medium
2271
- };
2272
- return {
2273
- color: color,
2274
- space: space,
2275
- radii: radii
2276
- };
2277
- };
2278
-
2279
2261
  var getRadioTheme = function getRadioTheme(theme) {
2280
2262
  var colors = {
2281
2263
  circle: theme.colors.black,
@@ -2307,6 +2289,102 @@ var getRadioTheme = function getRadioTheme(theme) {
2307
2289
  };
2308
2290
  };
2309
2291
 
2292
+ var getSectionHeadingTheme = function getSectionHeadingTheme(theme) {
2293
+ var colors = {
2294
+ background: theme.colors.outline
2295
+ };
2296
+ var space = {
2297
+ headingVerticalPadding: theme.space.small,
2298
+ headingHorizontalPadding: theme.space.medium,
2299
+ headingMarginBottom: theme.space.medium,
2300
+ iconMarginRight: theme.space.small
2301
+ };
2302
+ return {
2303
+ colors: colors,
2304
+ space: space
2305
+ };
2306
+ };
2307
+
2308
+ var getSelectTheme = function getSelectTheme(theme) {
2309
+ var colors = {
2310
+ option: theme.colors.platformBackground,
2311
+ checkedOption: theme.colors.primaryBackground,
2312
+ footerText: theme.colors.primary
2313
+ };
2314
+ var space = {
2315
+ optionPadding: theme.space.medium,
2316
+ optionListPadding: theme.space.medium,
2317
+ optionListSpacing: theme.space.xsmall
2318
+ };
2319
+ var radii = {
2320
+ option: theme.radii.base
2321
+ };
2322
+ return {
2323
+ space: space,
2324
+ colors: colors,
2325
+ radii: radii
2326
+ };
2327
+ };
2328
+
2329
+ var getSpinnerTheme = function getSpinnerTheme(theme) {
2330
+ var color = {
2331
+ "default": theme.colors.primary
2332
+ };
2333
+ var space = {
2334
+ spinnerDot: theme.space.medium,
2335
+ spinnerDotPadding: theme.space.small,
2336
+ spinnerTextPaddingTop: theme.space.small
2337
+ };
2338
+ var radii = {
2339
+ "default": theme.radii.medium
2340
+ };
2341
+ return {
2342
+ color: color,
2343
+ space: space,
2344
+ radii: radii
2345
+ };
2346
+ };
2347
+
2348
+ var getSwitchTheme = function getSwitchTheme(theme) {
2349
+ var colors = {
2350
+ thumb: theme.colors.platformBackground,
2351
+ active: theme.colors.primary,
2352
+ inactive: theme.colors.inactiveBackground
2353
+ };
2354
+ var thumbSizes = {
2355
+ small: theme.space.medium,
2356
+ medium: theme.space.medium * 1.3
2357
+ };
2358
+ var widths = {
2359
+ small: theme.space.xxxlarge,
2360
+ medium: theme.space.xxxxlarge
2361
+ };
2362
+ var heights = {
2363
+ small: theme.space.large,
2364
+ medium: theme.space.large * 1.2
2365
+ };
2366
+ var spaces = {
2367
+ small: theme.space.xsmall,
2368
+ medium: theme.space.xsmall,
2369
+ inactive: 0
2370
+ };
2371
+ var radii = {
2372
+ rounded: theme.radii.rounded
2373
+ };
2374
+ var borderWidths = {
2375
+ "default": theme.borderWidths.base
2376
+ };
2377
+ return {
2378
+ colors: colors,
2379
+ thumbSizes: thumbSizes,
2380
+ widths: widths,
2381
+ heights: heights,
2382
+ spaces: spaces,
2383
+ radii: radii,
2384
+ borderWidths: borderWidths
2385
+ };
2386
+ };
2387
+
2310
2388
  var getTabsTheme = function getTabsTheme(theme) {
2311
2389
  var colors = {
2312
2390
  active: theme.colors.primary,
@@ -2387,7 +2465,7 @@ var getTextInputTheme = function getTextInputTheme(theme) {
2387
2465
  labelLeft: theme.space.medium,
2388
2466
  labelTop: theme.lineHeights.small / -2,
2389
2467
  labelHorizontalPadding: theme.space.xsmall,
2390
- prefixMarginRight: theme.space.small
2468
+ inputHorizontalMargin: theme.space.small
2391
2469
  };
2392
2470
  var fontSizes = {
2393
2471
  text: theme.fontSizes.large
@@ -2456,9 +2534,12 @@ var getTheme = function getTheme() {
2456
2534
  drawer: getDrawerTheme(globalTheme),
2457
2535
  fab: getFABTheme(globalTheme),
2458
2536
  icon: getIconTheme(globalTheme),
2459
- spinner: getSpinnerTheme(globalTheme),
2460
2537
  progress: getProgressTheme(globalTheme),
2461
2538
  radio: getRadioTheme(globalTheme),
2539
+ sectionHeading: getSectionHeadingTheme(globalTheme),
2540
+ select: getSelectTheme(globalTheme),
2541
+ spinner: getSpinnerTheme(globalTheme),
2542
+ "switch": getSwitchTheme(globalTheme),
2462
2543
  tabs: getTabsTheme(globalTheme),
2463
2544
  tag: getTagTheme(globalTheme),
2464
2545
  textInput: getTextInputTheme(globalTheme),
@@ -14858,7 +14939,7 @@ var Divider = function Divider(_ref) {
14858
14939
  };
14859
14940
 
14860
14941
  var AnimatedPressable$1 = ReactNative.Animated.createAnimatedComponent(ReactNative.Pressable);
14861
- var StyledWrapper$3 = index$2(ReactNative.View)(_objectSpread2(_objectSpread2({}, ReactNative.StyleSheet.absoluteFillObject), {}, {
14942
+ var StyledWrapper$4 = index$2(ReactNative.View)(_objectSpread2(_objectSpread2({}, ReactNative.StyleSheet.absoluteFillObject), {}, {
14862
14943
  flexDirection: 'column-reverse'
14863
14944
  }));
14864
14945
  var StyledBottomSheet = index$2(ReactNative.Animated.View)(function (_ref) {
@@ -14921,7 +15002,7 @@ var StyledIconWrapper$1 = index$2(ReactNative.View)(function (_ref6) {
14921
15002
  };
14922
15003
  });
14923
15004
 
14924
- var Footer = function Footer(_ref) {
15005
+ var Footer$1 = function Footer(_ref) {
14925
15006
  var children = _ref.children,
14926
15007
  showDivider = _ref.showDivider;
14927
15008
  return /*#__PURE__*/React__default["default"].createElement(ReactNative.View, null, showDivider ? /*#__PURE__*/React__default["default"].createElement(Divider, null) : null, /*#__PURE__*/React__default["default"].createElement(StyledFooter, null, children));
@@ -15384,7 +15465,7 @@ var Header = function Header(_ref) {
15384
15465
  return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(StyledHeaderWrapper, null, typeof content === 'string' ? /*#__PURE__*/React__default["default"].createElement(StyledHeader, {
15385
15466
  adjacentIcon: showCloseButton
15386
15467
  }, /*#__PURE__*/React__default["default"].createElement(Typography.Text, {
15387
- fontSize: "xlarge",
15468
+ fontSize: "large",
15388
15469
  fontWeight: "semi-bold"
15389
15470
  }, content)) : /*#__PURE__*/React__default["default"].createElement(ReactNative.View, {
15390
15471
  style: {
@@ -15405,6 +15486,7 @@ var BottomSheet = function BottomSheet(_ref) {
15405
15486
  children = _ref.children,
15406
15487
  onOpen = _ref.onOpen,
15407
15488
  onRequestClose = _ref.onRequestClose,
15489
+ onDismiss = _ref.onDismiss,
15408
15490
  _ref$showCloseButton = _ref.showCloseButton,
15409
15491
  showCloseButton = _ref$showCloseButton === void 0 ? true : _ref$showCloseButton,
15410
15492
  _ref$hasBackdrop = _ref.hasBackdrop,
@@ -15440,6 +15522,7 @@ var BottomSheet = function BottomSheet(_ref) {
15440
15522
 
15441
15523
  if (endValueOfTransition === 0 && value === endValueOfTransition) {
15442
15524
  setVisibility(false);
15525
+ onDismiss === null || onDismiss === void 0 ? void 0 : onDismiss();
15443
15526
  }
15444
15527
  });
15445
15528
  return function () {
@@ -15473,7 +15556,7 @@ var BottomSheet = function BottomSheet(_ref) {
15473
15556
  transparent: true,
15474
15557
  testID: testID,
15475
15558
  onShow: onOpen
15476
- }, /*#__PURE__*/React__default["default"].createElement(StyledWrapper$3, {
15559
+ }, /*#__PURE__*/React__default["default"].createElement(StyledWrapper$4, {
15477
15560
  pointerEvents: "box-none"
15478
15561
  }, /*#__PURE__*/React__default["default"].createElement(StyledBackdrop$2, {
15479
15562
  style: {
@@ -15497,7 +15580,7 @@ var BottomSheet = function BottomSheet(_ref) {
15497
15580
  showDivider: showDivider,
15498
15581
  onRequestClose: onRequestClose,
15499
15582
  showCloseButton: showCloseButton
15500
- }) : null, children, footer ? /*#__PURE__*/React__default["default"].createElement(Footer, {
15583
+ }) : null, children, footer ? /*#__PURE__*/React__default["default"].createElement(Footer$1, {
15501
15584
  showDivider: showDivider
15502
15585
  }, footer) : null)));
15503
15586
  };
@@ -15546,7 +15629,7 @@ var Card = function Card(_ref) {
15546
15629
  }), children);
15547
15630
  };
15548
15631
 
15549
- var StyledWrapper$2 = index$2(ReactNative.Animated.View)(function () {
15632
+ var StyledWrapper$3 = index$2(ReactNative.Animated.View)(function () {
15550
15633
  return {
15551
15634
  margin: 0,
15552
15635
  padding: 0,
@@ -15606,7 +15689,7 @@ var Collapse = function Collapse(_ref) {
15606
15689
  var height = _ref2.height;
15607
15690
  setContentHeight(height);
15608
15691
  }, [contentHeight]);
15609
- return /*#__PURE__*/React__default["default"].createElement(StyledWrapper$2, {
15692
+ return /*#__PURE__*/React__default["default"].createElement(StyledWrapper$3, {
15610
15693
  style: [style, {
15611
15694
  height: collapseAnim
15612
15695
  }],
@@ -16201,7 +16284,7 @@ var ProgressCircle = function ProgressCircle(_ref2) {
16201
16284
  }, "".concat(value, "%")))));
16202
16285
  };
16203
16286
 
16204
- var StyledWrapper$1 = index$2(ReactNative.View)(function (_ref) {
16287
+ var StyledWrapper$2 = index$2(ReactNative.View)(function (_ref) {
16205
16288
  var theme = _ref.theme;
16206
16289
  return {
16207
16290
  height: theme.__hd__.progress.sizes.barHeight,
@@ -16256,7 +16339,7 @@ var ProgressBar = function ProgressBar(_ref) {
16256
16339
  outputRange: [999, 0],
16257
16340
  extrapolate: 'clamp'
16258
16341
  });
16259
- return /*#__PURE__*/React__default["default"].createElement(StyledWrapper$1, _extends$3({}, nativeProps, {
16342
+ return /*#__PURE__*/React__default["default"].createElement(StyledWrapper$2, _extends$3({}, nativeProps, {
16260
16343
  testID: testID,
16261
16344
  style: style
16262
16345
  }), /*#__PURE__*/React__default["default"].createElement(StyledInner, {
@@ -16419,7 +16502,7 @@ var InnerCircle = index$2(ReactNative.View)(function (_ref3) {
16419
16502
  backgroundColor: theme.__hd__.radio.colors.checkedCircle
16420
16503
  };
16421
16504
  });
16422
- var Spacer = index$2(ReactNative.View)(function (_ref4) {
16505
+ var Spacer$1 = index$2(ReactNative.View)(function (_ref4) {
16423
16506
  var theme = _ref4.theme;
16424
16507
  return {
16425
16508
  marginTop: theme.__hd__.radio.space.groupTopMargin
@@ -16451,10 +16534,25 @@ var Radio = function Radio(_ref) {
16451
16534
  })));
16452
16535
  };
16453
16536
 
16537
+ function getKey$1(option, index, keyExtractor) {
16538
+ var key = '';
16539
+
16540
+ if (keyExtractor !== undefined) {
16541
+ key = keyExtractor(option, index);
16542
+ } else if (option.key !== undefined) {
16543
+ key = option.key;
16544
+ } else {
16545
+ key = index;
16546
+ }
16547
+
16548
+ return key;
16549
+ }
16550
+
16454
16551
  var RadioGroup = function RadioGroup(_ref) {
16455
16552
  var value = _ref.value,
16456
16553
  _onPress = _ref.onPress,
16457
16554
  options = _ref.options,
16555
+ keyExtractor = _ref.keyExtractor,
16458
16556
  style = _ref.style,
16459
16557
  testID = _ref.testID;
16460
16558
  return /*#__PURE__*/React__default["default"].createElement(ReactNative.View, {
@@ -16462,8 +16560,8 @@ var RadioGroup = function RadioGroup(_ref) {
16462
16560
  testID: testID
16463
16561
  }, options.map(function (option, index) {
16464
16562
  return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, {
16465
- key: option.value
16466
- }, index !== 0 && /*#__PURE__*/React__default["default"].createElement(Spacer, null), /*#__PURE__*/React__default["default"].createElement(Radio, {
16563
+ key: getKey$1(option, index, keyExtractor)
16564
+ }, index !== 0 && /*#__PURE__*/React__default["default"].createElement(Spacer$1, null), /*#__PURE__*/React__default["default"].createElement(Radio, {
16467
16565
  text: option.text,
16468
16566
  checked: option.value === value,
16469
16567
  onPress: function onPress() {
@@ -16480,10 +16578,10 @@ var CompoundRadio = {
16480
16578
  var StyledHeading = index$2(ReactNative.View)(function (_ref) {
16481
16579
  var theme = _ref.theme;
16482
16580
  return {
16483
- paddingVertical: theme.space.small,
16484
- paddingHorizontal: theme.space.medium,
16485
- backgroundColor: theme.colors.outline,
16486
- marginBottom: theme.space.medium,
16581
+ paddingVertical: theme.__hd__.sectionHeading.space.headingVerticalPadding,
16582
+ paddingHorizontal: theme.__hd__.sectionHeading.space.headingHorizontalPadding,
16583
+ backgroundColor: theme.__hd__.sectionHeading.colors.background,
16584
+ marginBottom: theme.__hd__.sectionHeading.space.headingMarginBottom,
16487
16585
  display: 'flex',
16488
16586
  flexDirection: 'row',
16489
16587
  alignContent: 'center',
@@ -16493,10 +16591,10 @@ var StyledHeading = index$2(ReactNative.View)(function (_ref) {
16493
16591
  var StyledIconWrapper = index$2(ReactNative.View)(function (_ref2) {
16494
16592
  var theme = _ref2.theme;
16495
16593
  return {
16496
- marginRight: theme.space.small
16594
+ marginRight: theme.__hd__.sectionHeading.space.iconMarginRight
16497
16595
  };
16498
16596
  });
16499
- var StyledWrapper = index$2(ReactNative.View)(function () {
16597
+ var StyledWrapper$1 = index$2(ReactNative.View)(function () {
16500
16598
  return {
16501
16599
  display: 'flex',
16502
16600
  flexDirection: 'row'
@@ -16530,7 +16628,7 @@ var SectionHeading = function SectionHeading(_ref) {
16530
16628
  return /*#__PURE__*/React__default["default"].createElement(StyledHeading, {
16531
16629
  style: style,
16532
16630
  testID: testID
16533
- }, /*#__PURE__*/React__default["default"].createElement(StyledWrapper, null, /*#__PURE__*/React__default["default"].createElement(StyledIconWrapper, null, icon && /*#__PURE__*/React__default["default"].createElement(Icon, {
16631
+ }, /*#__PURE__*/React__default["default"].createElement(StyledWrapper$1, null, /*#__PURE__*/React__default["default"].createElement(StyledIconWrapper, null, icon && /*#__PURE__*/React__default["default"].createElement(Icon, {
16534
16632
  icon: icon,
16535
16633
  size: ICON_SIZE_MAP[fontSize],
16536
16634
  intent: ICON_INTENT_MAP[intent]
@@ -16541,6 +16639,337 @@ var SectionHeading = function SectionHeading(_ref) {
16541
16639
  }, text)), rightChildren);
16542
16640
  };
16543
16641
 
16642
+ var Container = index$2(ReactNative.View)(function (_ref) {
16643
+ var theme = _ref.theme;
16644
+ return {
16645
+ position: 'relative',
16646
+ width: '100%',
16647
+ borderWidth: theme.__hd__.textInput.borderWidths.container,
16648
+ borderRadius: theme.__hd__.textInput.radii.container,
16649
+ padding: theme.__hd__.textInput.space.containerPadding,
16650
+ flexDirection: 'row',
16651
+ alignItems: 'center'
16652
+ };
16653
+ });
16654
+ var Label = index$2(Typography.Text)(function (_ref2) {
16655
+ var theme = _ref2.theme;
16656
+ return {
16657
+ position: 'absolute',
16658
+ left: theme.__hd__.textInput.space.labelLeft,
16659
+ top: theme.__hd__.textInput.space.labelTop,
16660
+ backgroundColor: theme.__hd__.textInput.colors.labelBackground,
16661
+ zIndex: 1,
16662
+ paddingHorizontal: theme.__hd__.textInput.space.labelHorizontalPadding
16663
+ };
16664
+ });
16665
+ var StyledTextInput = index$2(ReactNative.TextInput)(function (_ref3) {
16666
+ var theme = _ref3.theme;
16667
+ return {
16668
+ flex: 1,
16669
+ fontSize: theme.__hd__.textInput.fontSizes.text,
16670
+ marginHorizontal: theme.__hd__.textInput.space.inputHorizontalMargin
16671
+ };
16672
+ });
16673
+
16674
+ var _excluded$1 = ["label", "prefix", "suffix", "style", "textStyle", "testID", "accessibilityLabelledBy"];
16675
+
16676
+ var TextInput = function TextInput(_ref) {
16677
+ var label = _ref.label,
16678
+ prefix = _ref.prefix,
16679
+ suffix = _ref.suffix,
16680
+ style = _ref.style,
16681
+ textStyle = _ref.textStyle,
16682
+ testID = _ref.testID,
16683
+ accessibilityLabelledBy = _ref.accessibilityLabelledBy,
16684
+ nativeProps = _objectWithoutProperties$1(_ref, _excluded$1);
16685
+
16686
+ return /*#__PURE__*/React__default["default"].createElement(Container, {
16687
+ style: style,
16688
+ testID: testID
16689
+ }, label && /*#__PURE__*/React__default["default"].createElement(Label, {
16690
+ nativeID: accessibilityLabelledBy,
16691
+ testID: "input-label",
16692
+ fontSize: "small"
16693
+ }, label), prefix && /*#__PURE__*/React__default["default"].createElement(Icon, {
16694
+ testID: "input-prefix",
16695
+ icon: prefix,
16696
+ size: "xsmall"
16697
+ }), /*#__PURE__*/React__default["default"].createElement(StyledTextInput, _extends$3({
16698
+ style: textStyle,
16699
+ testID: "text-input" // @ts-ignore
16700
+ ,
16701
+ accessibilityLabelledBy: accessibilityLabelledBy
16702
+ }, nativeProps)), suffix && /*#__PURE__*/React__default["default"].createElement(Icon, {
16703
+ testID: "input-suffix",
16704
+ icon: suffix,
16705
+ size: "xsmall"
16706
+ }));
16707
+ };
16708
+
16709
+ var OptionWrapper = index$2(ReactNative.TouchableOpacity)(function (_ref) {
16710
+ var theme = _ref.theme,
16711
+ themeSelected = _ref.themeSelected;
16712
+ return {
16713
+ flexDirection: 'row',
16714
+ justifyContent: 'space-between',
16715
+ alignItems: 'center',
16716
+ borderRadius: theme.__hd__.select.radii.option,
16717
+ padding: theme.__hd__.select.space.optionPadding,
16718
+ backgroundColor: themeSelected ? theme.__hd__.select.colors.checkedOption : theme.__hd__.select.colors.option
16719
+ };
16720
+ });
16721
+ var OptionListWrapper = index$2(ReactNative.View)(function (_ref2) {
16722
+ var theme = _ref2.theme;
16723
+ return {
16724
+ padding: theme.__hd__.select.space.optionListPadding
16725
+ };
16726
+ });
16727
+ var Spacer = index$2(ReactNative.View)(function (_ref3) {
16728
+ var theme = _ref3.theme;
16729
+ return {
16730
+ marginTop: theme.__hd__.select.space.optionListSpacing
16731
+ };
16732
+ });
16733
+ var FooterText = index$2(Typography.Text)(function (_ref4) {
16734
+ var theme = _ref4.theme;
16735
+ return {
16736
+ color: theme.__hd__.select.colors.footerText
16737
+ };
16738
+ });
16739
+
16740
+ function Footer(_ref) {
16741
+ var label = _ref.label,
16742
+ onPress = _ref.onPress;
16743
+ return /*#__PURE__*/React__default["default"].createElement(ReactNative.TouchableOpacity, {
16744
+ onPress: onPress
16745
+ }, /*#__PURE__*/React__default["default"].createElement(FooterText, {
16746
+ fontSize: "large",
16747
+ fontWeight: "semi-bold"
16748
+ }, label));
16749
+ }
16750
+
16751
+ function Option(_ref) {
16752
+ var text = _ref.text,
16753
+ selected = _ref.selected,
16754
+ onPress = _ref.onPress;
16755
+ return /*#__PURE__*/React__default["default"].createElement(OptionWrapper, {
16756
+ themeSelected: selected,
16757
+ onPress: onPress
16758
+ }, /*#__PURE__*/React__default["default"].createElement(ReactNative.View, {
16759
+ style: {
16760
+ flex: 1
16761
+ }
16762
+ }, /*#__PURE__*/React__default["default"].createElement(Typography.Text, {
16763
+ fontSize: "large"
16764
+ }, text)), selected && /*#__PURE__*/React__default["default"].createElement(Icon, {
16765
+ icon: "checkmark",
16766
+ size: "small"
16767
+ }));
16768
+ }
16769
+
16770
+ function getKey(option, index, keyExtractor) {
16771
+ var key = '';
16772
+
16773
+ if (keyExtractor !== undefined) {
16774
+ key = keyExtractor(option, index);
16775
+ } else if (option.key !== undefined) {
16776
+ key = option.key;
16777
+ } else {
16778
+ key = index;
16779
+ }
16780
+
16781
+ return key;
16782
+ }
16783
+
16784
+ function OptionList(_ref2) {
16785
+ var value = _ref2.value,
16786
+ options = _ref2.options,
16787
+ _onPress = _ref2.onPress,
16788
+ keyExtractor = _ref2.keyExtractor;
16789
+ return /*#__PURE__*/React__default["default"].createElement(OptionListWrapper, null, options.map(function (opt, index) {
16790
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, {
16791
+ key: getKey(opt, index, keyExtractor)
16792
+ }, index !== 0 && /*#__PURE__*/React__default["default"].createElement(Spacer, null), /*#__PURE__*/React__default["default"].createElement(Option, {
16793
+ text: opt.text,
16794
+ selected: value.includes(opt.value),
16795
+ onPress: function onPress() {
16796
+ if (value.includes(opt.value)) {
16797
+ _onPress(value.filter(function (val) {
16798
+ return val !== opt.value;
16799
+ }));
16800
+ } else {
16801
+ _onPress([].concat(_toConsumableArray$1(value), [opt.value]));
16802
+ }
16803
+ }
16804
+ }));
16805
+ }));
16806
+ }
16807
+
16808
+ function MultiSelect(_ref) {
16809
+ var options = _ref.options,
16810
+ value = _ref.value,
16811
+ testID = _ref.testID,
16812
+ style = _ref.style,
16813
+ label = _ref.label,
16814
+ footerLabel = _ref.footerLabel,
16815
+ _onPress = _ref.onPress;
16816
+ var theme = useTheme();
16817
+
16818
+ var _useState = React.useState(false),
16819
+ _useState2 = _slicedToArray(_useState, 2),
16820
+ open = _useState2[0],
16821
+ setOpen = _useState2[1];
16822
+
16823
+ var _useState3 = React.useState(value),
16824
+ _useState4 = _slicedToArray(_useState3, 2),
16825
+ selectingValue = _useState4[0],
16826
+ setSelectingValue = _useState4[1];
16827
+
16828
+ var displayedValue = options.filter(function (opt) {
16829
+ return value.includes(opt.value);
16830
+ }).map(function (opt) {
16831
+ return opt.text;
16832
+ }).join(', ');
16833
+ return /*#__PURE__*/React__default["default"].createElement(ReactNative.TouchableOpacity, {
16834
+ onPress: function onPress() {
16835
+ return setOpen(true);
16836
+ }
16837
+ }, /*#__PURE__*/React__default["default"].createElement(TextInput, {
16838
+ label: label,
16839
+ value: displayedValue,
16840
+ onPressIn: function onPressIn() {
16841
+ return setOpen(true);
16842
+ },
16843
+ editable: false // when input is not editable on Android, the text color is gray
16844
+ // hence, adding this to make the text color the same as iOS
16845
+ ,
16846
+ textStyle: {
16847
+ color: theme.colors.text
16848
+ },
16849
+ suffix: "arrow-down",
16850
+ multiline: true,
16851
+ style: style,
16852
+ testID: testID
16853
+ }), /*#__PURE__*/React__default["default"].createElement(BottomSheet, {
16854
+ open: open,
16855
+ onRequestClose: function onRequestClose() {
16856
+ return setOpen(false);
16857
+ },
16858
+ onDismiss: function onDismiss() {
16859
+ return setSelectingValue(value);
16860
+ },
16861
+ header: label,
16862
+ footer: /*#__PURE__*/React__default["default"].createElement(Footer, {
16863
+ label: footerLabel,
16864
+ onPress: function onPress() {
16865
+ setOpen(false);
16866
+
16867
+ _onPress(selectingValue);
16868
+ }
16869
+ })
16870
+ }, /*#__PURE__*/React__default["default"].createElement(OptionList, {
16871
+ options: options,
16872
+ value: selectingValue,
16873
+ onPress: setSelectingValue
16874
+ })));
16875
+ }
16876
+
16877
+ var CompoundSelect = {
16878
+ Multi: MultiSelect
16879
+ };
16880
+
16881
+ var StyledWrapper = index$2(ReactNative.View)(function (_ref) {
16882
+ var theme = _ref.theme,
16883
+ themeChecked = _ref.themeChecked,
16884
+ themeSize = _ref.themeSize;
16885
+ return {
16886
+ height: theme.__hd__["switch"].heights[themeSize],
16887
+ width: theme.__hd__["switch"].widths[themeSize],
16888
+ paddingHorizontal: theme.__hd__["switch"].spaces[themeSize],
16889
+ borderRadius: theme.__hd__["switch"].radii.rounded,
16890
+ backgroundColor: themeChecked ? theme.__hd__["switch"].colors.active : theme.__hd__["switch"].colors.inactive
16891
+ };
16892
+ });
16893
+ var StyledDisabledWrapper = index$2(ReactNative.View)(function (_ref2) {
16894
+ var theme = _ref2.theme,
16895
+ themeSize = _ref2.themeSize;
16896
+ return {
16897
+ position: 'absolute',
16898
+ height: theme.__hd__["switch"].heights[themeSize],
16899
+ width: theme.__hd__["switch"].widths[themeSize],
16900
+ borderRadius: theme.__hd__["switch"].radii.rounded,
16901
+ backgroundColor: theme.__hd__["switch"].colors.thumb,
16902
+ zIndex: 9999,
16903
+ opacity: 0.8
16904
+ };
16905
+ });
16906
+ var StyledThumbWrapper = index$2(ReactNative.View)(function (_ref3) {
16907
+ var theme = _ref3.theme,
16908
+ themeSize = _ref3.themeSize;
16909
+ return {
16910
+ height: theme.__hd__["switch"].heights[themeSize],
16911
+ width: theme.__hd__["switch"].widths[themeSize],
16912
+ borderRadius: theme.__hd__["switch"].radii.rounded,
16913
+ display: 'flex',
16914
+ justifyContent: 'center'
16915
+ };
16916
+ });
16917
+ var StyledKnot = index$2(ReactNative.Animated.View)(function (_ref4) {
16918
+ var theme = _ref4.theme,
16919
+ themeSize = _ref4.themeSize;
16920
+ return {
16921
+ width: theme.__hd__["switch"].thumbSizes[themeSize],
16922
+ height: theme.__hd__["switch"].thumbSizes[themeSize],
16923
+ backgroundColor: theme.__hd__["switch"].colors.thumb,
16924
+ borderRadius: theme.__hd__["switch"].radii.rounded
16925
+ };
16926
+ });
16927
+
16928
+ var Switch = function Switch(_ref) {
16929
+ var _ref$size = _ref.size,
16930
+ size = _ref$size === void 0 ? 'medium' : _ref$size,
16931
+ _ref$disabled = _ref.disabled,
16932
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
16933
+ checked = _ref.checked,
16934
+ onPress = _ref.onPress,
16935
+ style = _ref.style,
16936
+ testID = _ref.testID;
16937
+ var theme = useTheme();
16938
+ var offset = checked ? theme.__hd__["switch"].widths[size] - theme.__hd__["switch"].thumbSizes[size] - theme.__hd__["switch"].spaces[size] * 2 : theme.__hd__["switch"].spaces.inactive;
16939
+
16940
+ var _useState = React.useState(function () {
16941
+ return new ReactNative.Animated.Value(offset);
16942
+ }),
16943
+ _useState2 = _slicedToArray(_useState, 1),
16944
+ animatedOffset = _useState2[0];
16945
+
16946
+ React.useEffect(function () {
16947
+ ReactNative.Animated.timing(animatedOffset, {
16948
+ toValue: offset,
16949
+ easing: ReactNative.Easing.inOut(ReactNative.Easing.cubic),
16950
+ useNativeDriver: false
16951
+ }).start();
16952
+ }, [checked]);
16953
+ return /*#__PURE__*/React__default["default"].createElement(ReactNative.TouchableWithoutFeedback, {
16954
+ testID: testID,
16955
+ onPress: onPress,
16956
+ disabled: disabled
16957
+ }, /*#__PURE__*/React__default["default"].createElement(StyledWrapper, {
16958
+ themeChecked: checked,
16959
+ themeSize: size,
16960
+ style: style
16961
+ }, disabled && /*#__PURE__*/React__default["default"].createElement(StyledDisabledWrapper, {
16962
+ themeSize: size
16963
+ }), /*#__PURE__*/React__default["default"].createElement(StyledThumbWrapper, {
16964
+ themeSize: size
16965
+ }, /*#__PURE__*/React__default["default"].createElement(StyledKnot, {
16966
+ themeSize: size,
16967
+ style: {
16968
+ left: animatedOffset
16969
+ }
16970
+ }))));
16971
+ };
16972
+
16544
16973
  var childrenWithOverriddenStyle = function childrenWithOverriddenStyle(children) {
16545
16974
  return React.Children.map(children, function (child) {
16546
16975
  var element = child;
@@ -17192,7 +17621,7 @@ var StyledText = index$2(ReactNative.Text)(function (_ref2) {
17192
17621
  };
17193
17622
  });
17194
17623
 
17195
- var _excluded$1 = ["content", "intent", "style", "testID"];
17624
+ var _excluded = ["content", "intent", "style", "testID"];
17196
17625
 
17197
17626
  var Tag = function Tag(_ref) {
17198
17627
  var content = _ref.content,
@@ -17200,7 +17629,7 @@ var Tag = function Tag(_ref) {
17200
17629
  intent = _ref$intent === void 0 ? 'info' : _ref$intent,
17201
17630
  style = _ref.style,
17202
17631
  testID = _ref.testID,
17203
- nativeProps = _objectWithoutProperties$1(_ref, _excluded$1);
17632
+ nativeProps = _objectWithoutProperties$1(_ref, _excluded);
17204
17633
 
17205
17634
  return /*#__PURE__*/React__default["default"].createElement(StyledView, _extends$3({}, nativeProps, {
17206
17635
  themeIntent: intent,
@@ -17211,71 +17640,6 @@ var Tag = function Tag(_ref) {
17211
17640
  }, content));
17212
17641
  };
17213
17642
 
17214
- var Container = index$2(ReactNative.View)(function (_ref) {
17215
- var theme = _ref.theme;
17216
- return {
17217
- position: 'relative',
17218
- width: '100%',
17219
- borderWidth: theme.__hd__.textInput.borderWidths.container,
17220
- borderRadius: theme.__hd__.textInput.radii.container,
17221
- padding: theme.__hd__.textInput.space.containerPadding,
17222
- flexDirection: 'row',
17223
- alignItems: 'center'
17224
- };
17225
- });
17226
- var Label = index$2(Typography.Text)(function (_ref2) {
17227
- var theme = _ref2.theme;
17228
- return {
17229
- position: 'absolute',
17230
- left: theme.__hd__.textInput.space.labelLeft,
17231
- top: theme.__hd__.textInput.space.labelTop,
17232
- backgroundColor: theme.__hd__.textInput.colors.labelBackground,
17233
- zIndex: 1,
17234
- paddingHorizontal: theme.__hd__.textInput.space.labelHorizontalPadding
17235
- };
17236
- });
17237
- var Prefix = index$2(Icon)(function (_ref3) {
17238
- var theme = _ref3.theme;
17239
- return {
17240
- marginRight: theme.__hd__.textInput.space.prefixMarginRight
17241
- };
17242
- });
17243
- var StyledTextInput = index$2(ReactNative.TextInput)(function (_ref4) {
17244
- var theme = _ref4.theme;
17245
- return {
17246
- flex: 1,
17247
- fontSize: theme.__hd__.textInput.fontSizes.text
17248
- };
17249
- });
17250
-
17251
- var _excluded = ["label", "prefix", "style", "testID", "accessibilityLabelledBy"];
17252
-
17253
- var TextInput = function TextInput(_ref) {
17254
- var label = _ref.label,
17255
- prefix = _ref.prefix,
17256
- style = _ref.style,
17257
- testID = _ref.testID,
17258
- accessibilityLabelledBy = _ref.accessibilityLabelledBy,
17259
- nativeProps = _objectWithoutProperties$1(_ref, _excluded);
17260
-
17261
- return /*#__PURE__*/React__default["default"].createElement(Container, {
17262
- style: style,
17263
- testID: testID
17264
- }, label && /*#__PURE__*/React__default["default"].createElement(Label, {
17265
- nativeID: accessibilityLabelledBy,
17266
- testID: "input-label",
17267
- fontSize: "small"
17268
- }, label), prefix && /*#__PURE__*/React__default["default"].createElement(Prefix, {
17269
- testID: "input-prefix",
17270
- icon: prefix,
17271
- size: "xsmall"
17272
- }), /*#__PURE__*/React__default["default"].createElement(StyledTextInput, _extends$3({
17273
- testID: "text-input" // @ts-ignore
17274
- ,
17275
- accessibilityLabelledBy: accessibilityLabelledBy
17276
- }, nativeProps)));
17277
- };
17278
-
17279
17643
  exports.Alert = Alert;
17280
17644
  exports.Avatar = Avatar;
17281
17645
  exports.Badge = Badge$1;
@@ -17292,7 +17656,9 @@ exports.Icon = Icon;
17292
17656
  exports.Progress = Progress;
17293
17657
  exports.Radio = CompoundRadio;
17294
17658
  exports.SectionHeading = SectionHeading;
17659
+ exports.Select = CompoundSelect;
17295
17660
  exports.Spinner = Spinner;
17661
+ exports.Switch = Switch;
17296
17662
  exports.Tabs = index;
17297
17663
  exports.Tag = Tag;
17298
17664
  exports.TextInput = TextInput;