@transferwise/components 46.8.0 → 46.10.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 (75) hide show
  1. package/build/index.esm.js +76 -127
  2. package/build/index.esm.js.map +1 -1
  3. package/build/index.js +76 -127
  4. package/build/index.js.map +1 -1
  5. package/build/types/checkboxOption/CheckboxOption.d.ts +2 -2
  6. package/build/types/checkboxOption/CheckboxOption.d.ts.map +1 -1
  7. package/build/types/common/index.d.ts +0 -1
  8. package/build/types/dateLookup/DateLookup.d.ts.map +1 -1
  9. package/build/types/index.d.ts +2 -0
  10. package/build/types/index.d.ts.map +1 -1
  11. package/build/types/inputs/SelectInput.d.ts +2 -1
  12. package/build/types/inputs/SelectInput.d.ts.map +1 -1
  13. package/build/types/moneyInput/MoneyInput.d.ts.map +1 -1
  14. package/build/types/select/Select.d.ts.map +1 -1
  15. package/build/types/snackbar/Snackbar.d.ts +30 -22
  16. package/build/types/snackbar/Snackbar.d.ts.map +1 -1
  17. package/build/types/snackbar/SnackbarContext.d.ts +7 -2
  18. package/build/types/snackbar/SnackbarContext.d.ts.map +1 -1
  19. package/build/types/snackbar/SnackbarProvider.d.ts +7 -12
  20. package/build/types/snackbar/SnackbarProvider.d.ts.map +1 -1
  21. package/build/types/snackbar/index.d.ts +2 -0
  22. package/build/types/snackbar/index.d.ts.map +1 -0
  23. package/build/types/snackbar/useSnackbar.d.ts +1 -1
  24. package/build/types/snackbar/useSnackbar.d.ts.map +1 -1
  25. package/build/types/switch/Switch.d.ts.map +1 -1
  26. package/build/types/tabs/Tabs.d.ts.map +1 -1
  27. package/build/types/typeahead/Typeahead.d.ts.map +1 -1
  28. package/build/types/withNextPortal/withNextPortal.d.ts +1 -1
  29. package/build/types/withNextPortal/withNextPortal.d.ts.map +1 -1
  30. package/package.json +16 -19
  31. package/src/button/Button.story.tsx +3 -3
  32. package/src/checkboxOption/CheckboxOption.tsx +2 -2
  33. package/src/common/fakeEvents.js +2 -2
  34. package/src/common/index.js +0 -1
  35. package/src/dateInput/DateInput.story.tsx +4 -3
  36. package/src/dateLookup/DateLookup.js +6 -7
  37. package/src/dateLookup/DateLookup.keyboardEvents.spec.js +24 -25
  38. package/src/dateLookup/DateLookup.story.js +4 -3
  39. package/src/dateLookup/dateTrigger/DateTrigger.spec.js +3 -3
  40. package/src/index.ts +2 -0
  41. package/src/info/Info.story.tsx +3 -3
  42. package/src/inputWithDisplayFormat/InputWithDisplayFormat.story.js +2 -7
  43. package/src/inputs/SelectInput.spec.tsx +7 -0
  44. package/src/inputs/SelectInput.story.tsx +7 -7
  45. package/src/inputs/SelectInput.tsx +4 -0
  46. package/src/logo/Logo.js +4 -4
  47. package/src/moneyInput/MoneyInput.story.tsx +3 -3
  48. package/src/moneyInput/MoneyInput.tsx +14 -24
  49. package/src/select/Select.js +8 -9
  50. package/src/snackbar/{Snackbar.story.js → Snackbar.story.tsx} +4 -3
  51. package/src/snackbar/{Snackbar.js → Snackbar.tsx} +31 -32
  52. package/src/snackbar/SnackbarContext.ts +11 -0
  53. package/src/snackbar/SnackbarProvider.tsx +39 -0
  54. package/src/switch/Switch.spec.js +2 -3
  55. package/src/switch/Switch.tsx +1 -2
  56. package/src/switchOption/SwitchOption.spec.js +1 -4
  57. package/src/tabs/Tabs.js +1 -2
  58. package/src/textareaWithDisplayFormat/TextareaWithDisplayFormat.story.tsx +5 -4
  59. package/src/tile/Tile.js +2 -2
  60. package/src/tile/Tile.spec.js +5 -5
  61. package/src/tooltip/Tooltip.story.tsx +3 -3
  62. package/src/typeahead/Typeahead.js +5 -6
  63. package/src/typeahead/Typeahead.spec.js +3 -8
  64. package/src/typeahead/Typeahead.story.js +3 -4
  65. package/src/withNextPortal/withNextPortal.tsx +1 -1
  66. package/build/types/common/key.d.ts +0 -9
  67. package/build/types/common/key.d.ts.map +0 -1
  68. package/build/types/common/keyCodes.d.ts +0 -16
  69. package/build/types/common/keyCodes.d.ts.map +0 -1
  70. package/src/common/key.js +0 -8
  71. package/src/common/keyCodes.js +0 -19
  72. package/src/snackbar/SnackbarContext.js +0 -4
  73. package/src/snackbar/SnackbarProvider.js +0 -51
  74. /package/src/snackbar/{index.js → index.ts} +0 -0
  75. /package/src/snackbar/{useSnackbar.js → useSnackbar.ts} +0 -0
package/build/index.js CHANGED
@@ -367,15 +367,6 @@ exports.FileType = void 0;
367
367
  FileType["CSV"] = ".csv,text/csv";
368
368
  })(exports.FileType || (exports.FileType = {}));
369
369
 
370
- const Key = {
371
- ENTER: 'Enter',
372
- ESCAPE: 'Escape',
373
- SPACE: [' ', 'Spacebar'],
374
- TAB: 'Tab',
375
- PERIOD: '.',
376
- COMMA: ','
377
- };
378
-
379
370
  const DEFAULT_LANG = 'en';
380
371
  const DEFAULT_LOCALE = 'en-GB';
381
372
  /**
@@ -2612,7 +2603,7 @@ const CheckboxOption = /*#__PURE__*/React.forwardRef(({
2612
2603
  button: /*#__PURE__*/jsxRuntime.jsx(CheckboxButton$1, {
2613
2604
  checked: checked,
2614
2605
  disabled: disabled,
2615
- onChange: () => onChange(!checked)
2606
+ onChange: () => onChange?.(!checked)
2616
2607
  })
2617
2608
  });
2618
2609
  });
@@ -3168,26 +3159,6 @@ DateInput.defaultProps = {
3168
3159
  };
3169
3160
  var DateInput$1 = DateInput;
3170
3161
 
3171
- /**
3172
- * TODO: mention what to use instead or consider to delete this object
3173
- *
3174
- * @deprecated
3175
- */
3176
- var KeyCodes = {
3177
- DOWN: 40,
3178
- UP: 38,
3179
- LEFT: 37,
3180
- RIGHT: 39,
3181
- ENTER: 13,
3182
- ESCAPE: 27,
3183
- TAB: 9,
3184
- SPACE: 32,
3185
- BACKSPACE: 8,
3186
- DELETE: 46,
3187
- COMMA: 188,
3188
- PERIOD: 190
3189
- };
3190
-
3191
3162
  const POPOVER_OFFSET = [0, 16];
3192
3163
  // By default the flip positioning explores only the opposite alternative. So if left is passed and there's no enough space
3193
3164
  // the right one gets chosen. If there's no space on both sides popover goes back to the initially chosen one left.
@@ -4209,8 +4180,8 @@ class DateLookup extends React.PureComponent {
4209
4180
  open,
4210
4181
  originalDate
4211
4182
  } = this.state;
4212
- switch (event.keyCode) {
4213
- case KeyCodes.LEFT:
4183
+ switch (event.key) {
4184
+ case 'ArrowLeft':
4214
4185
  if (open) {
4215
4186
  this.adjustDate(-1, -1, -1);
4216
4187
  } else {
@@ -4218,7 +4189,7 @@ class DateLookup extends React.PureComponent {
4218
4189
  }
4219
4190
  event.preventDefault();
4220
4191
  break;
4221
- case KeyCodes.UP:
4192
+ case 'ArrowUp':
4222
4193
  if (open) {
4223
4194
  this.adjustDate(-7, -4, -4);
4224
4195
  } else {
@@ -4226,7 +4197,7 @@ class DateLookup extends React.PureComponent {
4226
4197
  }
4227
4198
  event.preventDefault();
4228
4199
  break;
4229
- case KeyCodes.RIGHT:
4200
+ case 'ArrowRight':
4230
4201
  if (open) {
4231
4202
  this.adjustDate(1, 1, 1);
4232
4203
  } else {
@@ -4234,7 +4205,7 @@ class DateLookup extends React.PureComponent {
4234
4205
  }
4235
4206
  event.preventDefault();
4236
4207
  break;
4237
- case KeyCodes.DOWN:
4208
+ case 'ArrowDown':
4238
4209
  if (open) {
4239
4210
  this.adjustDate(7, 4, 4);
4240
4211
  } else {
@@ -4242,7 +4213,7 @@ class DateLookup extends React.PureComponent {
4242
4213
  }
4243
4214
  event.preventDefault();
4244
4215
  break;
4245
- case KeyCodes.ESCAPE:
4216
+ case 'Escape':
4246
4217
  if (originalDate !== null) {
4247
4218
  this.props.onChange(originalDate);
4248
4219
  }
@@ -4565,7 +4536,7 @@ const Tile = ({
4565
4536
  onKeyDown: disabled ? null : ({
4566
4537
  key
4567
4538
  }) => {
4568
- if (key === Key.ENTER || Key.SPACE.includes(key)) {
4539
+ if (key === 'Enter' || key === ' ') {
4569
4540
  onClick();
4570
4541
  }
4571
4542
  },
@@ -6796,6 +6767,7 @@ function SelectInputClearButton({
6796
6767
  }
6797
6768
  const noop = () => {};
6798
6769
  function SelectInput({
6770
+ id,
6799
6771
  name,
6800
6772
  multiple,
6801
6773
  placeholder,
@@ -6861,6 +6833,7 @@ function SelectInput({
6861
6833
  // eslint-disable-next-line react/jsx-no-constructed-context-values
6862
6834
  value: {
6863
6835
  ref: mergeRefs__default.default([ref, triggerRef]),
6836
+ id,
6864
6837
  ...mergeProps__default.default({
6865
6838
  onClick: () => {
6866
6839
  setOpen(prev => !prev);
@@ -7809,8 +7782,7 @@ const parseNumber = ({
7809
7782
  }
7810
7783
  return Number(amount);
7811
7784
  };
7812
- const inputKeyCodeAllowlist = new Set([KeyCodes.BACKSPACE, KeyCodes.DELETE, KeyCodes.COMMA, KeyCodes.PERIOD, KeyCodes.DOWN, KeyCodes.UP, KeyCodes.LEFT, KeyCodes.RIGHT, KeyCodes.ENTER, KeyCodes.ESCAPE, KeyCodes.TAB]);
7813
- const inputKeyAllowlist = new Set([Key.PERIOD, Key.COMMA]);
7785
+ const allowedInputKeys = new Set(['Backspace', 'Delete', ',', '.', 'ArrowDown', 'ArrowUp', 'ArrowLeft', 'ArrowRight', 'Enter', 'Escape', 'Tab']);
7814
7786
  class MoneyInput extends React.Component {
7815
7787
  static defaultProps = {
7816
7788
  size: exports.Size.LARGE,
@@ -7848,13 +7820,12 @@ class MoneyInput extends React.Component {
7848
7820
  }
7849
7821
  isInputAllowedForKeyEvent = event => {
7850
7822
  const {
7851
- keyCode,
7852
7823
  metaKey,
7853
7824
  key,
7854
7825
  ctrlKey
7855
7826
  } = event;
7856
7827
  const isNumberKey = neptuneValidation.isNumber(parseInt(key, 10));
7857
- return isNumberKey || metaKey || ctrlKey || inputKeyCodeAllowlist.has(keyCode) || inputKeyAllowlist.has(key);
7828
+ return isNumberKey || metaKey || ctrlKey || allowedInputKeys.has(key);
7858
7829
  };
7859
7830
  handleKeyDown = event => {
7860
7831
  if (!this.isInputAllowedForKeyEvent(event)) {
@@ -10694,17 +10665,17 @@ function Select({
10694
10665
  }
10695
10666
  };
10696
10667
  const handleKeyDown = event => {
10697
- switch (event.keyCode) {
10698
- case KeyCodes.UP:
10699
- case KeyCodes.DOWN:
10668
+ switch (event.key) {
10669
+ case 'ArrowUp':
10670
+ case 'ArrowDown':
10700
10671
  if (open) {
10701
- moveFocusWithDifference(event.keyCode === KeyCodes.UP ? -1 : 1);
10672
+ moveFocusWithDifference(event.key === 'ArrowUp' ? -1 : 1);
10702
10673
  } else {
10703
10674
  setOpen(true);
10704
10675
  }
10705
10676
  stopPropagation$1(event);
10706
10677
  break;
10707
- case KeyCodes.SPACE:
10678
+ case ' ':
10708
10679
  if (event.target !== searchBoxReference.current) {
10709
10680
  if (open) {
10710
10681
  selectKeyboardFocusedOption();
@@ -10714,7 +10685,7 @@ function Select({
10714
10685
  stopPropagation$1(event);
10715
10686
  }
10716
10687
  break;
10717
- case KeyCodes.ENTER:
10688
+ case 'Enter':
10718
10689
  if (open) {
10719
10690
  selectKeyboardFocusedOption();
10720
10691
  } else {
@@ -10722,11 +10693,11 @@ function Select({
10722
10693
  }
10723
10694
  stopPropagation$1(event);
10724
10695
  break;
10725
- case KeyCodes.ESCAPE:
10696
+ case 'Escape':
10726
10697
  handleCloseOptions();
10727
10698
  stopPropagation$1(event);
10728
10699
  break;
10729
- case KeyCodes.TAB:
10700
+ case 'Tab':
10730
10701
  if (open) {
10731
10702
  selectKeyboardFocusedOption();
10732
10703
  }
@@ -11181,18 +11152,19 @@ const SegmentedControl = ({
11181
11152
 
11182
11153
  const CSS_TRANSITION_DURATION = 400;
11183
11154
  class Snackbar extends React.Component {
11184
- /** @type {RefObject<HTMLSpanElement>} */
11185
11155
  bodyRef = /*#__PURE__*/React.createRef();
11186
- constructor() {
11187
- super();
11156
+ timeout = 0;
11157
+ transitionTimeout = 0;
11158
+ constructor(props) {
11159
+ super(props);
11188
11160
  this.state = {
11189
11161
  visible: false,
11190
11162
  text: ''
11191
11163
  };
11192
11164
  }
11193
11165
  componentWillUnmount() {
11194
- clearTimeout(this.timeout);
11195
- clearTimeout(this.transitionTimeout);
11166
+ window.clearTimeout(this.timeout);
11167
+ window.clearTimeout(this.transitionTimeout);
11196
11168
  }
11197
11169
  shouldComponentUpdate(nextProps, nextState) {
11198
11170
  if (!nextProps.text) {
@@ -11207,7 +11179,7 @@ class Snackbar extends React.Component {
11207
11179
  const {
11208
11180
  timeout
11209
11181
  } = this.props;
11210
- this.timeout = setTimeout(() => {
11182
+ this.timeout = window.setTimeout(() => {
11211
11183
  this.setState({
11212
11184
  visible: false
11213
11185
  });
@@ -11230,12 +11202,12 @@ class Snackbar extends React.Component {
11230
11202
  this.setLeaveTimeout();
11231
11203
  });
11232
11204
  } else if (previousProps.timestamp !== timestamp) {
11233
- clearTimeout(this.timeout);
11205
+ window.clearTimeout(this.timeout);
11234
11206
  if (this.state.visible) {
11235
11207
  this.setState({
11236
11208
  visible: false
11237
11209
  }, () => {
11238
- this.transitionTimeout = setTimeout(() => {
11210
+ this.transitionTimeout = window.setTimeout(() => {
11239
11211
  this.setState({
11240
11212
  visible: true,
11241
11213
  action,
@@ -11260,7 +11232,7 @@ class Snackbar extends React.Component {
11260
11232
  const {
11261
11233
  action,
11262
11234
  text,
11263
- theme,
11235
+ theme = exports.Theme.LIGHT,
11264
11236
  visible
11265
11237
  } = this.state;
11266
11238
  const {
@@ -11294,74 +11266,51 @@ class Snackbar extends React.Component {
11294
11266
  }
11295
11267
  }
11296
11268
  Snackbar.contextType = DirectionContext;
11297
- Snackbar.propTypes = {
11298
- action: PropTypes__default.default.shape({
11299
- label: PropTypes__default.default.string.isRequired,
11300
- onClick: PropTypes__default.default.func
11301
- }),
11302
- text: PropTypes__default.default.node.isRequired,
11303
- theme: PropTypes__default.default.oneOf(['light', 'dark']),
11304
- timeout: PropTypes__default.default.number.isRequired,
11305
- timestamp: PropTypes__default.default.number.isRequired
11306
- };
11307
- Snackbar.defaultProps = {
11308
- action: null,
11309
- theme: exports.Theme.LIGHT
11310
- };
11311
11269
  var SnackbarPortal = withNextPortalWrapper(Snackbar);
11312
11270
 
11313
- const SnackbarContext = /*#__PURE__*/React.createContext();
11271
+ const SnackbarContext = /*#__PURE__*/React.createContext({
11272
+ createSnackbar: () => {}
11273
+ });
11314
11274
  const SnackbarConsumer = SnackbarContext.Consumer;
11315
11275
 
11316
- class SnackbarProvider extends React.Component {
11317
- constructor() {
11318
- super();
11319
- this.state = {
11320
- text: '',
11321
- timestamp: 0
11322
- };
11323
- }
11324
- create = ({
11276
+ function SnackbarProvider({
11277
+ timeout = 4500,
11278
+ children
11279
+ }) {
11280
+ const [state, setState] = React.useState({
11281
+ text: '',
11282
+ timestamp: 0
11283
+ });
11284
+ const {
11325
11285
  action,
11326
11286
  text,
11327
- theme
11328
- }) => {
11329
- this.setState({
11330
- action,
11331
- text,
11332
- theme,
11333
- timestamp: Date.now()
11334
- });
11335
- };
11336
- render() {
11337
- const {
11338
- action,
11339
- text,
11340
- theme,
11341
- timestamp
11342
- } = this.state;
11343
- return /*#__PURE__*/jsxRuntime.jsxs(SnackbarContext.Provider, {
11344
- value: {
11345
- createSnackbar: this.create
11346
- },
11347
- children: [/*#__PURE__*/jsxRuntime.jsx(SnackbarPortal, {
11348
- action: action,
11349
- text: text,
11350
- timestamp: timestamp,
11351
- timeout: this.props.timeout,
11352
- theme: theme
11353
- }), this.props.children]
11354
- });
11355
- }
11287
+ theme,
11288
+ timestamp
11289
+ } = state;
11290
+ return /*#__PURE__*/jsxRuntime.jsxs(SnackbarContext.Provider, {
11291
+ value: React.useMemo(() => ({
11292
+ createSnackbar: ({
11293
+ action,
11294
+ text,
11295
+ theme
11296
+ }) => {
11297
+ setState({
11298
+ action,
11299
+ text,
11300
+ theme,
11301
+ timestamp: Date.now()
11302
+ });
11303
+ }
11304
+ }), []),
11305
+ children: [/*#__PURE__*/jsxRuntime.jsx(SnackbarPortal, {
11306
+ action: action,
11307
+ text: text,
11308
+ timestamp: timestamp,
11309
+ timeout: timeout,
11310
+ theme: theme
11311
+ }), children]
11312
+ });
11356
11313
  }
11357
- SnackbarProvider.propTypes = {
11358
- children: PropTypes__default.default.node.isRequired,
11359
- timeout: PropTypes__default.default.number
11360
- };
11361
- SnackbarProvider.defaultProps = {
11362
- timeout: 4500
11363
- };
11364
- var SnackbarProvider$1 = SnackbarProvider;
11365
11314
 
11366
11315
  const Sticky = ({
11367
11316
  open,
@@ -11507,7 +11456,7 @@ const Switch = props => {
11507
11456
  disabled
11508
11457
  } = props;
11509
11458
  const handleKeyDown = event => {
11510
- if (event.code === '32' || event.keyCode === KeyCodes.SPACE) {
11459
+ if (event.key === ' ') {
11511
11460
  event.preventDefault();
11512
11461
  onClick();
11513
11462
  }
@@ -12004,7 +11953,7 @@ class Tabs extends React.Component {
12004
11953
  this.switchTab(index);
12005
11954
  };
12006
11955
  onKeyDown = index => event => {
12007
- if (event && event.keyCode === KeyCodes.ENTER) {
11956
+ if (event && event.key === 'Enter') {
12008
11957
  this.switchTab(index);
12009
11958
  }
12010
11959
  };
@@ -12606,16 +12555,16 @@ class Typeahead extends React.Component {
12606
12555
  label: query
12607
12556
  });
12608
12557
  } else {
12609
- switch (event.keyCode) {
12610
- case KeyCodes.DOWN:
12558
+ switch (event.key) {
12559
+ case 'ArrowDown':
12611
12560
  event.preventDefault();
12612
12561
  this.moveFocusedOption(1);
12613
12562
  break;
12614
- case KeyCodes.UP:
12563
+ case 'ArrowUp':
12615
12564
  event.preventDefault();
12616
12565
  this.moveFocusedOption(-1);
12617
12566
  break;
12618
- case KeyCodes.ENTER:
12567
+ case 'Enter':
12619
12568
  event.preventDefault();
12620
12569
  if (options[keyboardFocusedOptionIndex]) {
12621
12570
  this.selectItem(options[keyboardFocusedOptionIndex]);
@@ -12625,7 +12574,7 @@ class Typeahead extends React.Component {
12625
12574
  });
12626
12575
  }
12627
12576
  break;
12628
- case KeyCodes.BACKSPACE:
12577
+ case 'Backspace':
12629
12578
  if (multiple && !query && selected.length > 0) {
12630
12579
  this.updateSelectedValue(selected.slice(0, -1));
12631
12580
  }
@@ -15655,7 +15604,7 @@ exports.SlidingPanel = SlidingPanel$1;
15655
15604
  exports.SnackbarConsumer = SnackbarConsumer;
15656
15605
  exports.SnackbarContext = SnackbarContext;
15657
15606
  exports.SnackbarPortal = SnackbarPortal;
15658
- exports.SnackbarProvider = SnackbarProvider$1;
15607
+ exports.SnackbarProvider = SnackbarProvider;
15659
15608
  exports.StatusIcon = StatusIcon;
15660
15609
  exports.Stepper = Stepper;
15661
15610
  exports.Sticky = Sticky$1;