@transferwise/components 0.0.0-experimental-b9f8dc1 → 0.0.0-experimental-e1f66d5

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 (44) hide show
  1. package/build/main.css +210 -209
  2. package/build/moneyInput/MoneyInput.js +1 -0
  3. package/build/moneyInput/MoneyInput.js.map +1 -1
  4. package/build/moneyInput/MoneyInput.mjs +1 -0
  5. package/build/moneyInput/MoneyInput.mjs.map +1 -1
  6. package/build/styles/main.css +210 -209
  7. package/build/styles/uploadInput/UploadInput.css +81 -13
  8. package/build/styles/uploadInput/uploadButton/UploadButton.css +31 -77
  9. package/build/styles/uploadInput/uploadItem/UploadItem.css +109 -130
  10. package/build/types/moneyInput/MoneyInput.d.ts.map +1 -1
  11. package/build/types/uploadInput/UploadInput.d.ts.map +1 -1
  12. package/build/types/uploadInput/uploadButton/UploadButton.d.ts +0 -5
  13. package/build/types/uploadInput/uploadButton/UploadButton.d.ts.map +1 -1
  14. package/build/types/uploadInput/uploadItem/UploadItem.d.ts.map +1 -1
  15. package/build/uploadInput/UploadInput.js +20 -30
  16. package/build/uploadInput/UploadInput.js.map +1 -1
  17. package/build/uploadInput/UploadInput.mjs +20 -30
  18. package/build/uploadInput/UploadInput.mjs.map +1 -1
  19. package/build/uploadInput/uploadButton/UploadButton.js +32 -25
  20. package/build/uploadInput/uploadButton/UploadButton.js.map +1 -1
  21. package/build/uploadInput/uploadButton/UploadButton.mjs +32 -25
  22. package/build/uploadInput/uploadButton/UploadButton.mjs.map +1 -1
  23. package/build/uploadInput/uploadItem/UploadItem.js +38 -32
  24. package/build/uploadInput/uploadItem/UploadItem.js.map +1 -1
  25. package/build/uploadInput/uploadItem/UploadItem.mjs +39 -33
  26. package/build/uploadInput/uploadItem/UploadItem.mjs.map +1 -1
  27. package/build/uploadInput/uploadItem/UploadItemLink.js +1 -2
  28. package/build/uploadInput/uploadItem/UploadItemLink.js.map +1 -1
  29. package/build/uploadInput/uploadItem/UploadItemLink.mjs +1 -2
  30. package/build/uploadInput/uploadItem/UploadItemLink.mjs.map +1 -1
  31. package/package.json +3 -3
  32. package/src/main.css +210 -209
  33. package/src/moneyInput/MoneyInput.tsx +1 -0
  34. package/src/uploadInput/UploadInput.css +81 -13
  35. package/src/uploadInput/UploadInput.less +80 -18
  36. package/src/uploadInput/UploadInput.tests.story.tsx +5 -5
  37. package/src/uploadInput/UploadInput.tsx +32 -43
  38. package/src/uploadInput/uploadButton/UploadButton.css +31 -77
  39. package/src/uploadInput/uploadButton/UploadButton.less +35 -77
  40. package/src/uploadInput/uploadButton/UploadButton.tsx +26 -37
  41. package/src/uploadInput/uploadItem/UploadItem.css +109 -130
  42. package/src/uploadInput/uploadItem/UploadItem.less +118 -130
  43. package/src/uploadInput/uploadItem/UploadItem.tsx +28 -26
  44. package/src/uploadInput/uploadItem/UploadItemLink.tsx +3 -3
package/build/main.css CHANGED
@@ -5454,279 +5454,280 @@ html:not([dir="rtl"]) .np-navigation-option {
5454
5454
  .upload-error-message .alert {
5455
5455
  min-width: 100px;
5456
5456
  }
5457
- .np-upload-input__upload-button {
5458
- position: relative;
5459
- padding: 16px;
5460
- padding: var(--size-16);
5461
- display: flex;
5462
- align-items: center;
5463
- margin: 0;
5464
- border-bottom-left-radius: 10px;
5465
- border-bottom-left-radius: var(--radius-small);
5466
- border-bottom-right-radius: 10px;
5467
- border-bottom-right-radius: var(--radius-small);
5468
- border: var(--outerBorder);
5469
- cursor: pointer;
5457
+ .np-upload-button-container {
5458
+ border-style: solid;
5470
5459
  }
5471
- .np-upload-input__upload-button .np-upload-input__title {
5472
- color: var(--color-content-link);
5473
- -webkit-text-decoration: underline;
5474
- text-decoration: underline;
5475
- text-underline-offset: 0.3em;
5476
- }
5477
- .np-upload-input__upload-button .np-upload-input__title + .np-upload-input__text {
5478
- margin-top: 4px;
5479
- margin-top: var(--size-4);
5480
- }
5481
- .np-upload-input__upload-button .np-upload-input__icon {
5482
- padding-right: 16px;
5483
- padding-right: var(--size-16);
5484
- color: var(--color-interactive-primary);
5460
+ .np-upload-button-container .droppable-card-content {
5461
+ display: flex;
5485
5462
  }
5486
- .np-upload-input__upload-button.is-dropping .np-upload-input__icon,
5487
- .np-upload-input__upload-button.is-dropping .np-upload-input__item-content {
5488
- display: none;
5463
+ .np-upload-button-container.droppable-dropping {
5464
+ border-color: #c9cbce !important;
5465
+ border-color: var(--color-interactive-secondary) !important;
5489
5466
  }
5490
- .np-upload-input__upload-button:focus-within,
5491
- .np-upload-input__upload-button:focus-visible {
5492
- outline: var(--ring-outline-color) solid 3px;
5493
- outline-offset: -3px;
5467
+ .np-upload-button-container.droppable-dropping:before {
5468
+ z-index: 2;
5494
5469
  }
5495
- .np-upload-input__upload-button-input {
5496
- position: absolute;
5470
+ .np-upload-button-container input[type="file"] {
5497
5471
  opacity: 0;
5498
5472
  z-index: -1;
5499
- }
5500
- .np-upload-input__upload-button-input:focus {
5501
- outline: none;
5502
- }
5503
- .np-upload-input__upload-button .np-upload-input__drop-file-overlay {
5504
- display: flex;
5505
- flex: 1;
5506
- padding: 13px 0 !important;
5507
- background-color: transparent;
5508
- transition: transform 0.3s ease;
5509
- position: relative;
5510
- }
5511
- .np-upload-input__upload-button--with-entries {
5512
- border-top-width: 0;
5513
- }
5514
- .np-upload-input__upload-button--with-entries:before {
5515
- display: block;
5516
5473
  position: absolute;
5517
- height: 1px;
5518
- background-color: rgba(0,0,0,0.10196);
5519
- background-color: var(--color-border-neutral);
5520
- content: " ";
5521
- left: 16px;
5522
- left: var(--size-16);
5523
- width: calc(100% - 2 * 16px);
5524
- width: calc(100% - 2 * var(--size-16));
5525
- top: 0;
5526
5474
  }
5527
- .np-upload-input__upload-button--without-entries {
5528
- border-top: var(--outerBorder);
5529
- border-radius: 10px;
5530
- border-radius: var(--radius-small);
5531
- }
5532
- .np-upload-input__upload-button--enabled.is-dropping,
5533
- .np-upload-input__upload-button--enabled:hover,
5534
- .np-upload-input__upload-button--enabled:active {
5535
- background: rgba(134,167,189,0.10196);
5536
- background: var(--color-background-neutral);
5475
+ .np-upload-button-container .np-upload-button {
5476
+ border: none;
5537
5477
  }
5538
- .np-upload-input__upload-button--enabled.is-dropping:before,
5539
- .np-upload-input__upload-button--enabled:hover:before,
5540
- .np-upload-input__upload-button--enabled:active:before {
5478
+ .np-upload-button {
5541
5479
  width: 100%;
5542
- left: 0;
5543
- }
5544
- .np-upload-input__upload-button--disabled {
5545
- cursor: inherit;
5480
+ border-top: 1px solid transparent;
5481
+ padding: 16px;
5482
+ padding: var(--padding-small);
5483
+ border-radius: 0;
5546
5484
  }
5547
- .np-upload-input {
5548
- --outerBorder: 1px solid var(--color-interactive-secondary);
5549
- border-radius: 10px;
5550
- border-radius: var(--radius-small);
5485
+ label.np-upload-button:not(.disabled):hover,
5486
+ label.np-upload-button:not(.disabled):active {
5487
+ background-color: var(--color-background-screen-hover);
5551
5488
  }
5552
- .np-upload-input .np-upload-input__section {
5553
- margin: 0;
5489
+ .disabled label.np-upload-button:not(.disabled):hover,
5490
+ .disabled label.np-upload-button:not(.disabled):active {
5491
+ background-color: transparent;
5554
5492
  }
5555
- .np-upload-input .np-upload-input__section:only-child .np-upload-input__item {
5556
- border-radius: 10px;
5557
- border-radius: var(--radius-small);
5558
- border-bottom: var(--outerBorder);
5493
+ .np-upload-button .media {
5494
+ align-items: flex-start;
5559
5495
  }
5560
- .np-upload-input .np-upload-input__section:has(.np-upload-input__item:last-child.is-interactive:hover):not(:has(.np-upload-input__item-button:hover)) + .np-upload-input__section--uploader .np-upload-input__upload-button::before {
5561
- left: 0;
5562
- width: 100%;
5563
- top: 0;
5496
+ @media (max-width: 320px) {
5497
+ .np-upload-icon {
5498
+ padding-left: 0;
5499
+ }
5564
5500
  }
5565
- .np-upload-input__item {
5566
- position: relative;
5567
- padding: 16px;
5568
- padding: var(--size-16);
5569
- display: flex;
5570
- align-items: flex-start;
5571
- border-left: var(--outerBorder);
5572
- border-right: var(--outerBorder);
5501
+ .np-upload-input.form-control {
5502
+ height: auto;
5503
+ padding: 0;
5504
+ padding: initial;
5573
5505
  }
5574
- .np-upload-input__item:first-child {
5575
- border-top: var(--outerBorder);
5506
+ .np-upload-input > div:first-child,
5507
+ .np-upload-input > div:first-child .np-upload-item--single-file,
5508
+ .np-upload-input > div:first-child .np-upload-item--link {
5576
5509
  border-top-left-radius: 10px;
5577
5510
  border-top-left-radius: var(--radius-small);
5578
5511
  border-top-right-radius: 10px;
5579
5512
  border-top-right-radius: var(--radius-small);
5580
5513
  }
5581
- .np-upload-input__item + .np-upload-input__item:before {
5582
- content: " ";
5583
- display: block;
5584
- position: absolute;
5585
- height: 1px;
5586
- left: 16px;
5587
- left: var(--size-16);
5588
- width: calc(100% - 2 * 16px);
5589
- width: calc(100% - 2 * var(--size-16));
5590
- top: 0;
5591
- background: rgba(0,0,0,0.10196);
5592
- background: var(--color-border-neutral);
5514
+ .np-upload-input > div:last-child {
5515
+ border-bottom-left-radius: 10px;
5516
+ border-bottom-left-radius: var(--radius-small);
5517
+ border-bottom-right-radius: 10px;
5518
+ border-bottom-right-radius: var(--radius-small);
5519
+ }
5520
+ .np-theme-personal .np-upload-input.disabled .btn {
5521
+ cursor: inherit;
5593
5522
  }
5594
- .np-upload-input__item .np-upload-input__item-content {
5523
+ .np-theme-personal .np-upload-input .np-upload-icon {
5524
+ color: var(--color-interactive-primary);
5525
+ }
5526
+ .np-theme-personal .np-upload-input .media-body {
5595
5527
  padding-right: 32px;
5596
5528
  padding-right: var(--size-32);
5597
- flex: 1;
5529
+ color: var(--color-content-link);
5530
+ white-space: break-spaces;
5598
5531
  }
5599
5532
  @media (max-width: 320px) {
5600
- .np-upload-input__item .np-upload-input__item-content {
5533
+ .np-theme-personal .np-upload-input .media-body {
5601
5534
  padding-right: 64px;
5602
5535
  padding-right: var(--size-64);
5603
5536
  }
5604
5537
  }
5605
- .np-upload-input__item .np-upload-input__title,
5606
- .np-upload-input__item .np-upload-input__text {
5607
- margin: 0;
5608
- -moz-text-align-last: left;
5609
- text-align-last: left;
5610
- color: #5d7079;
5611
- color: var(--color-content-secondary);
5538
+ .np-theme-personal .np-upload-input .media-body .np-text-body-large-bold {
5539
+ -webkit-text-decoration: underline;
5540
+ text-decoration: underline;
5541
+ text-underline-offset: 0.3em;
5612
5542
  }
5613
- .np-upload-input__item .np-upload-input__title + .np-upload-input__text {
5614
- margin-top: 4px;
5615
- margin-top: var(--size-4);
5543
+ .np-theme-personal .np-upload-input .media-body .np-text-body-default,
5544
+ .np-theme-personal .np-upload-input .media-body .np-upload-description,
5545
+ .np-theme-personal .np-upload-input .media-body .text-positive {
5546
+ color: #5d7079 !important;
5547
+ color: var(--color-content-secondary) !important;
5616
5548
  }
5617
- .np-upload-input__item .np-upload-input__icon {
5618
- padding-right: 16px;
5619
- padding-right: var(--size-16);
5549
+ .np-theme-personal .np-upload-input .media-body .text-negative {
5550
+ color: var(--color-sentiment-negative) !important;
5620
5551
  }
5621
- .np-upload-input__item .np-upload-input__item-link,
5622
- .np-upload-input__item .np-upload-input__item-container {
5623
- align-items: flex-start;
5624
- display: flex;
5625
- width: 100%;
5552
+ .np-theme-personal .np-upload-input-errors {
5553
+ list-style: none;
5554
+ padding-left: 0;
5626
5555
  }
5627
- .np-upload-input__item .np-upload-input__item-action {
5628
- --iconSize: var(--size-24);
5629
- --clickAreaSize: 44px;
5630
- --buttonTopRightOffset: var(--size-16);
5631
- --clickAreaTopRightOffset: calc((var(--clickAreaSize) - var(--iconSize)) * -0.5);
5556
+ .np-theme-personal .np-upload-input-errors li {
5557
+ position: relative;
5558
+ padding-left: 16px;
5559
+ padding-left: var(--size-16);
5560
+ }
5561
+ @media (max-width: 320px) {
5562
+ .np-theme-personal .np-upload-input-errors li {
5563
+ padding-left: 32px;
5564
+ padding-left: var(--size-32);
5565
+ }
5566
+ }
5567
+ .np-theme-personal .np-upload-input-errors li:before {
5568
+ content: '•';
5632
5569
  position: absolute;
5633
- right: 16px;
5634
- right: var(--buttonTopRightOffset);
5635
- top: 16px;
5636
- top: var(--buttonTopRightOffset);
5570
+ display: block;
5571
+ left: 0;
5572
+ }
5573
+ .np-theme-personal .np-upload-input .status-circle {
5574
+ width: 24px;
5575
+ width: var(--size-x-small);
5576
+ height: 24px;
5577
+ height: var(--size-x-small);
5637
5578
  }
5638
5579
  @media (max-width: 320px) {
5639
- .np-upload-input__item .np-upload-input__item-action {
5640
- --iconSize: var(--size-48);
5641
- --clickAreaTopRightOffset: calc(-1 * var(--buttonTopRightOffset));
5580
+ .np-theme-personal .np-upload-input .status-circle {
5581
+ width: 48px;
5582
+ width: var(--size-large);
5583
+ height: 48px;
5584
+ height: var(--size-large);
5642
5585
  }
5643
5586
  }
5644
- .np-upload-input__item .np-upload-input__item-action .np-upload-input__item-button {
5645
- -webkit-appearance: none;
5646
- -moz-appearance: none;
5647
- appearance: none;
5648
- height: var(--iconSize);
5649
- width: var(--iconSize);
5650
- padding: 0 4px;
5651
- padding: 0 var(--size-4);
5652
- border-radius: 50%;
5653
- border: 0;
5654
- background-color: rgba(134,167,189,0.10196);
5655
- background-color: var(--color-background-neutral);
5656
- color: var(--color-interactive-primary);
5657
- transition: color, background-color 0.15s ease-in-out;
5658
- outline-offset: 0;
5659
- display: flex;
5660
- align-items: center;
5661
- justify-content: center;
5587
+ .np-upload-item {
5588
+ border: 1px solid #c9cbce;
5589
+ border: 1px solid var(--color-interactive-secondary);
5590
+ position: relative;
5662
5591
  }
5663
- .np-upload-input__item .np-upload-input__item-action .np-upload-input__item-button:before {
5664
- content: '';
5592
+ .np-upload-item:first-child ~ div:not(.np-upload-item--link):before,
5593
+ .np-upload-item:not(:first-child).np-upload-item--link .np-upload-item__link:before,
5594
+ .np-upload-item.np-upload-item--link:hover .np-upload-item__link:after {
5665
5595
  display: block;
5666
- width: var(--clickAreaSize);
5667
- height: var(--clickAreaSize);
5668
- border-radius: 50%;
5669
5596
  position: absolute;
5670
- top: var(--clickAreaTopRightOffset);
5671
- right: var(--clickAreaTopRightOffset);
5597
+ height: 1px;
5598
+ background-color: rgba(0,0,0,0.10196);
5599
+ background-color: var(--color-border-neutral);
5600
+ content: " ";
5601
+ left: 16px;
5602
+ left: var(--size-16);
5603
+ width: calc(100% - 2 * 16px);
5604
+ width: calc(100% - 2 * var(--size-16));
5672
5605
  }
5673
- .np-upload-input__item .np-upload-input__item-action .np-upload-input__item-button:hover {
5674
- background-color: var(--color-sentiment-negative);
5675
- color: var(--color-contrast-overlay) !important;
5606
+ .np-upload-item:first-child ~ div:not(.np-upload-item--link):before,
5607
+ .np-upload-item:not(:first-child).np-upload-item--link .np-upload-item__link:before {
5608
+ top: 0;
5676
5609
  }
5677
- .np-upload-input__item .np-upload-input__item-action .np-upload-input__item-button:active {
5678
- background-color: var(--color-background-neutral-active);
5610
+ .np-upload-item.np-upload-item--link:hover .np-upload-item__link:after {
5611
+ bottom: -1px;
5679
5612
  }
5680
- .np-upload-input__item.is-interactive {
5681
- padding: 0;
5613
+ .np-upload-item:first-child ~ div {
5614
+ border-top: 1px;
5682
5615
  }
5683
- .np-upload-input__item.is-interactive:hover:not(:has(.np-upload-input__item-button:hover)):before,
5684
- .np-upload-input__item.is-interactive:hover:not(:has(.np-upload-input__item-button:hover)) + .np-upload-input__item:before {
5685
- width: 100%;
5686
- left: 0;
5616
+ .np-upload-item:not(:first-child) .np-upload-item__link:hover {
5617
+ border-top-color: rgba(0,0,0,0.10196);
5618
+ border-top-color: var(--color-border-neutral);
5687
5619
  }
5688
- .np-upload-input__item.is-interactive .np-upload-input__item-link {
5689
- padding: 16px;
5690
- padding: var(--size-16);
5620
+ .np-upload-item:not(:last-child) {
5621
+ border-bottom: 0;
5622
+ }
5623
+ .np-upload-item.np-upload-item--link:hover + .np-upload-item:before,
5624
+ .np-upload-item.np-upload-item--link:hover + .np-upload-button-container:before,
5625
+ .np-upload-item.np-upload-item--link:hover + .np-upload-item .np-upload-item__link:before,
5626
+ .np-upload-item.np-upload-item--link:hover + .np-upload-button-container .np-upload-item__link:before {
5627
+ display: none;
5628
+ }
5629
+ .np-upload-button-container:hover:before,
5630
+ .np-upload-button-container.droppable-dropping:before {
5631
+ left: 0 !important;
5632
+ width: 100% !important;
5633
+ }
5634
+ .np-upload-button-container:has(:focus-visible) {
5635
+ outline: var(--ring-outline-color) solid var(--ring-outline-width);
5636
+ outline-offset: var(--ring-outline-offset);
5637
+ border-color: transparent;
5638
+ outline-offset: -3px;
5639
+ }
5640
+ .np-upload-item--single-file:focus-visible,
5641
+ .np-upload-item__link:focus-visible,
5642
+ .np-upload-button-container:has(:focus-visible) {
5643
+ outline-width: 3px;
5644
+ }
5645
+ .np-upload-item--link a {
5646
+ flex: 1;
5691
5647
  -webkit-text-decoration: none;
5692
5648
  text-decoration: none;
5693
- border-radius: inherit;
5694
5649
  border-top: 1px solid transparent;
5695
- background-clip: padding-box;
5650
+ border-radius: inherit;
5696
5651
  }
5697
- .np-upload-input__item.is-interactive .np-upload-input__item-link:focus-visible {
5652
+ .np-upload-item--link a:focus-visible {
5698
5653
  outline-offset: -2px;
5699
- outline-width: 3px;
5700
5654
  }
5701
- .np-upload-input__item.is-interactive .np-upload-input__item-link:hover,
5702
- .np-upload-input__item.is-interactive .np-upload-input__item-link:active {
5655
+ .np-upload-item--link a:hover:before {
5656
+ display: none !important;
5657
+ }
5658
+ .np-upload-item--link a:hover:after {
5659
+ left: 0 !important;
5660
+ width: 100% !important;
5661
+ }
5662
+ .np-upload-item--link a:hover,
5663
+ .np-upload-item--link a:active {
5664
+ -webkit-text-decoration: none;
5665
+ text-decoration: none;
5666
+ }
5667
+ .np-upload-item--link a:hover .np-upload-button,
5668
+ .np-upload-item--link a:active .np-upload-button {
5703
5669
  background-color: rgba(134,167,189,0.10196);
5704
5670
  background-color: var(--color-background-neutral);
5671
+ border-radius: inherit;
5705
5672
  }
5706
- .np-upload-input__item.is-interactive:first-child .np-upload-input__item-link {
5707
- border-top-width: 0;
5708
- }
5709
- .np-upload-input__item .np-upload-input-errors {
5710
- padding-left: 0;
5711
- list-style-type: "";
5673
+ .np-upload-item--link:first-of-type a {
5674
+ border-top: 0;
5712
5675
  }
5713
- .np-upload-input__item .np-upload-input-errors > li {
5676
+ .np-upload-item__body {
5677
+ display: flex;
5678
+ align-items: center;
5679
+ justify-content: space-between;
5714
5680
  position: relative;
5715
- padding-left: 16px;
5716
- padding-left: var(--size-16);
5681
+ border-radius: inherit;
5717
5682
  }
5718
- .np-upload-input__item .np-upload-input-errors > li::before {
5719
- content: '•';
5683
+ .np-upload-item__remove-button {
5684
+ display: flex;
5685
+ align-items: center;
5686
+ justify-content: center;
5687
+ align-self: flex-start;
5720
5688
  position: absolute;
5721
- display: block;
5722
- left: 0;
5689
+ height: 24px;
5690
+ height: var(--size-24);
5691
+ min-height: 0;
5692
+ width: 24px;
5693
+ width: var(--size-24);
5694
+ padding: 0;
5695
+ border-radius: 50% !important;
5696
+ outline-offset: 0 !important;
5697
+ background-color: rgba(134,167,189,0.10196);
5698
+ background-color: var(--color-background-neutral);
5699
+ border: none;
5700
+ color: var(--color-interactive-primary);
5701
+ right: 16px;
5702
+ right: var(--size-16);
5703
+ top: 16px;
5704
+ top: var(--size-16);
5705
+ transition: color, background-color 0.15s ease-in-out;
5723
5706
  }
5724
5707
  @media (max-width: 320px) {
5725
- .np-upload-input__item .np-upload-input-errors > li {
5726
- padding-left: 32px;
5727
- padding-left: var(--size-32);
5708
+ .np-upload-item__remove-button {
5709
+ top: 16px;
5710
+ top: var(--size-16);
5711
+ right: 16px;
5712
+ right: var(--size-16);
5713
+ height: 48px;
5714
+ height: var(--size-48);
5715
+ width: 48px;
5716
+ width: var(--size-48);
5728
5717
  }
5729
5718
  }
5719
+ .np-upload-item__remove-button:hover {
5720
+ background-color: var(--color-sentiment-negative);
5721
+ color: var(--color-contrast-overlay) !important;
5722
+ }
5723
+ .np-upload-item__remove-button:before {
5724
+ display: block;
5725
+ width: 44px;
5726
+ height: 44px;
5727
+ content: '';
5728
+ border-radius: 50%;
5729
+ position: absolute;
5730
+ }
5730
5731
  .np-progress {
5731
5732
  border-radius: 10px;
5732
5733
  border-radius: var(--radius-small);
@@ -259,6 +259,7 @@ class MoneyInput extends React.Component {
259
259
  children: selectedCurrency.currency.toUpperCase()
260
260
  })]
261
261
  }) : /*#__PURE__*/jsxRuntime.jsx("div", {
262
+ translate: "no",
262
263
  className: clsx.clsx(this.style('input-group-btn'), this.style('amount-currency-select-btn')),
263
264
  children: /*#__PURE__*/jsxRuntime.jsx(SelectInput.SelectInput, {
264
265
  UNSAFE_triggerButtonProps: {
@@ -1 +1 @@
1
- {"version":3,"file":"MoneyInput.js","sources":["../../src/moneyInput/MoneyInput.tsx"],"sourcesContent":["import { isEmpty, isNumber, isNull } from '@transferwise/neptune-validation';\nimport { Flag } from '@wise/art';\nimport { clsx } from 'clsx';\nimport { Component } from 'react';\nimport { injectIntl, WrappedComponentProps } from 'react-intl';\n\nimport { Typography, Size, SizeLarge, SizeMedium, SizeSmall } from '../common';\nimport { withInputAttributes, WithInputAttributesProps } from '../inputs/contexts';\nimport { Input } from '../inputs/Input';\nimport {\n SelectInput,\n SelectInputItem,\n SelectInputOptionContent,\n SelectInputOptionItem,\n SelectInputProps,\n} from '../inputs/SelectInput';\nimport Title from '../title';\n\nimport messages from './MoneyInput.messages';\nimport { formatAmount, parseAmount } from './currencyFormatting';\nimport withId from '../withId';\n\nexport interface CurrencyOptionItem {\n header?: never;\n value: string;\n label: string;\n currency: string;\n note?: string;\n searchable?: string;\n}\n\nexport interface CurrencyHeaderItem {\n header: string;\n}\n\nexport type CurrencyItem = CurrencyOptionItem | CurrencyHeaderItem;\n\nconst isNumberOrNull = (v: unknown): v is number | null => isNumber(v) || isNull(v);\n\nconst formatAmountIfSet = ({\n amount,\n currency,\n locale,\n}: {\n amount: number | null | undefined;\n currency: string;\n locale: string;\n}) => {\n return typeof amount === 'number' ? formatAmount(amount, currency, locale) : '';\n};\n\nconst parseNumber = ({\n amount,\n currency,\n locale,\n}: {\n amount: string;\n currency: string;\n locale: string;\n}) => {\n return parseAmount(amount, currency, locale);\n};\n\nconst allowedInputKeys = new Set([\n 'Backspace',\n 'Delete',\n ',',\n '.',\n 'ArrowDown',\n 'ArrowUp',\n 'ArrowLeft',\n 'ArrowRight',\n 'Enter',\n 'Escape',\n 'Tab',\n]);\n\nexport interface MoneyInputProps extends WrappedComponentProps {\n id?: string;\n 'aria-labelledby'?: string;\n currencies: readonly CurrencyItem[];\n selectedCurrency: CurrencyOptionItem;\n onCurrencyChange?: (value: CurrencyOptionItem) => void;\n placeholder?: number;\n amount: number | null;\n size?: SizeSmall | SizeMedium | SizeLarge;\n onAmountChange?: (value: number | null) => void;\n addon?: React.ReactNode;\n searchPlaceholder?: string;\n /**\n * Allows the consumer to react to searching, while the search itself is handled internally.\n */\n onSearchChange?: (value: { searchQuery: string; filteredOptions: CurrencyItem[] }) => void;\n customActionLabel?: React.ReactNode;\n onCustomAction?: () => void;\n classNames?: Record<string, string>;\n selectProps?: Partial<SelectInputProps<CurrencyOptionItem>>;\n}\n\ntype MoneyInputPropsWithInputAttributes = MoneyInputProps & Partial<WithInputAttributesProps>;\n\ninterface MoneyInputState {\n searchQuery: string;\n formattedAmount: string;\n locale: string;\n}\n\nclass MoneyInput extends Component<MoneyInputPropsWithInputAttributes, MoneyInputState> {\n declare props: MoneyInputPropsWithInputAttributes &\n Required<Pick<MoneyInputPropsWithInputAttributes, keyof typeof MoneyInput.defaultProps>>;\n\n static defaultProps = {\n size: Size.LARGE,\n classNames: {},\n selectProps: {},\n } satisfies Partial<MoneyInputPropsWithInputAttributes>;\n\n amountFocused = false;\n\n constructor(props: MoneyInputProps) {\n super(props);\n this.state = {\n searchQuery: '',\n formattedAmount: formatAmountIfSet({\n amount: props.amount,\n currency: props.selectedCurrency.currency,\n locale: props.intl.locale,\n }),\n locale: props.intl.locale,\n };\n }\n\n UNSAFE_componentWillReceiveProps(nextProps: MoneyInputProps) {\n this.setState({ locale: nextProps.intl.locale });\n\n if (!this.amountFocused) {\n this.setState({\n formattedAmount: formatAmountIfSet({\n amount: nextProps.amount,\n currency: nextProps.selectedCurrency.currency,\n locale: nextProps.intl.locale,\n }),\n });\n }\n }\n\n isInputAllowedForKeyEvent = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const { metaKey, key, ctrlKey } = event;\n const isNumberKey = isNumber(Number.parseInt(key, 10));\n\n return isNumberKey || metaKey || ctrlKey || allowedInputKeys.has(key);\n };\n\n handleKeyDown: React.KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (!this.isInputAllowedForKeyEvent(event)) {\n event.preventDefault();\n }\n };\n\n handlePaste: React.ClipboardEventHandler<HTMLInputElement> = (event) => {\n const paste = event.clipboardData.getData('text');\n const { locale } = this.state;\n const parsed = isEmpty(paste)\n ? null\n : parseNumber({\n amount: paste,\n currency: this.props.selectedCurrency.currency,\n locale,\n });\n\n if (isNumberOrNull(parsed)) {\n this.setState({\n formattedAmount: formatAmountIfSet({\n amount: parsed,\n currency: this.props.selectedCurrency.currency,\n locale,\n }),\n });\n this.props.onAmountChange?.(parsed);\n }\n\n event.preventDefault();\n };\n\n onAmountChange: React.ChangeEventHandler<HTMLInputElement> = (event) => {\n const { value } = event.target;\n this.setState({\n formattedAmount: value,\n });\n const parsed = isEmpty(value)\n ? null\n : parseNumber({\n amount: value,\n currency: this.props.selectedCurrency.currency,\n locale: this.state.locale,\n });\n if (isNumberOrNull(parsed)) {\n this.props.onAmountChange?.(parsed);\n }\n };\n\n onAmountBlur = () => {\n this.amountFocused = false;\n this.setAmount();\n };\n\n onAmountFocus = () => {\n this.amountFocused = true;\n };\n\n getSelectOptions() {\n const selectOptions = filterCurrenciesForQuery(this.props.currencies, this.state.searchQuery);\n\n const formattedOptions: SelectInputItem<CurrencyOptionItem>[] = [];\n let currentGroupOptions: SelectInputOptionItem<CurrencyOptionItem>[] | undefined;\n\n selectOptions.forEach((item) => {\n if (item.header != null) {\n currentGroupOptions = [];\n formattedOptions.push({\n type: 'group',\n label: item.header,\n options: currentGroupOptions,\n });\n } else {\n (currentGroupOptions ?? formattedOptions).push({\n type: 'option',\n value: item,\n filterMatchers: [item.value, item.label, item.note ?? '', item.searchable ?? ''],\n });\n }\n });\n\n return formattedOptions;\n }\n\n setAmount() {\n this.setState((previousState) => {\n const parsed = parseNumber({\n amount: previousState.formattedAmount,\n currency: this.props.selectedCurrency.currency,\n locale: previousState.locale,\n });\n if (!isNumberOrNull(parsed)) {\n return {\n formattedAmount: previousState.formattedAmount,\n };\n }\n return {\n formattedAmount: formatAmountIfSet({\n amount: parsed,\n currency: this.props.selectedCurrency.currency,\n locale: previousState.locale,\n }),\n };\n });\n }\n\n handleSelectChange = (value: CurrencyOptionItem) => {\n this.handleSearchChange('');\n this.props.onCurrencyChange?.(value);\n };\n\n handleCustomAction = () => {\n this.handleSearchChange('');\n this.props.onCustomAction?.();\n };\n\n handleSearchChange = (searchQuery: string) => {\n this.setState({ searchQuery });\n this.props.onSearchChange?.({\n searchQuery,\n filteredOptions: filterCurrenciesForQuery(this.props.currencies, searchQuery),\n });\n };\n\n style = (className: string) => this.props.classNames[className] || className;\n\n render() {\n const {\n inputAttributes,\n id: amountInputId,\n 'aria-labelledby': ariaLabelledByProp,\n selectedCurrency,\n onCurrencyChange,\n size,\n addon,\n selectProps,\n } = this.props;\n const ariaLabelledBy = ariaLabelledByProp ?? inputAttributes?.['aria-labelledby'];\n const selectOptions = this.getSelectOptions();\n\n const hasSingleCurrency = () => {\n if (selectOptions.length !== 0) {\n const firstItem = selectOptions[0];\n\n if (selectOptions.length === 1) {\n if (firstItem.type === 'option') {\n return firstItem.value.currency === selectedCurrency.currency;\n }\n if (firstItem.type === 'group') {\n return (\n firstItem.options.length === 1 &&\n !(this.props.onCustomAction && this.props.customActionLabel)\n );\n }\n }\n } else if (selectedCurrency?.currency) {\n return true;\n }\n\n return false;\n };\n\n const isFixedCurrency = (!this.state.searchQuery && hasSingleCurrency()) || !onCurrencyChange;\n const disabled = !this.props.onAmountChange;\n const selectedCurrencyElementId = `${inputAttributes?.id ?? amountInputId}SelectedCurrency`;\n\n return (\n <div\n role=\"group\"\n {...inputAttributes}\n aria-labelledby={ariaLabelledBy}\n className={clsx(\n this.style('tw-money-input'),\n this.style('input-group'),\n this.style(`input-group-${size}`),\n )}\n >\n <Input\n id={amountInputId}\n value={this.state.formattedAmount}\n inputMode=\"decimal\"\n disabled={disabled}\n placeholder={formatAmountIfSet({\n amount: this.props.placeholder,\n currency: this.props.selectedCurrency.currency,\n locale: this.state.locale,\n })}\n autoComplete=\"off\"\n aria-describedby={selectedCurrencyElementId}\n onKeyDown={this.handleKeyDown}\n onChange={this.onAmountChange}\n onFocus={this.onAmountFocus}\n onBlur={this.onAmountBlur}\n onPaste={this.handlePaste}\n />\n {addon && (\n <span\n className={clsx(\n this.style('input-group-addon'),\n this.style(`input-${size}`),\n disabled ? this.style('disabled') : '',\n )}\n >\n {addon}\n </span>\n )}\n {isFixedCurrency ? (\n <div\n className={clsx(\n this.style('input-group-addon'),\n this.style(`input-${size}`),\n this.style('tw-money-input__fixed-currency'),\n disabled ? this.style('disabled') : '',\n )}\n id={selectedCurrencyElementId}\n >\n {(size === 'lg' || size === 'md') && (\n <span className={clsx(this.style('money-input-currency-flag'), this.style('m-r-2'))}>\n <Flag code={selectedCurrency.currency.toLowerCase()} intrinsicSize={24} />\n </span>\n )}\n <Title\n as=\"span\"\n type={Typography.TITLE_SUBSECTION}\n className={size === 'lg' ? this.style('m-r-1') : ''}\n >\n {selectedCurrency.currency.toUpperCase()}\n </Title>\n </div>\n ) : (\n <div\n className={clsx(\n this.style('input-group-btn'),\n this.style('amount-currency-select-btn'),\n )}\n >\n <SelectInput\n UNSAFE_triggerButtonProps={{\n id: undefined,\n 'aria-labelledby': undefined,\n 'aria-describedby': undefined,\n 'aria-invalid': undefined,\n 'aria-label': this.props.intl.formatMessage(messages.selectCurrencyLabel),\n }}\n id={selectedCurrencyElementId}\n items={selectOptions}\n value={selectedCurrency}\n compareValues=\"currency\"\n renderValue={(currency, withinTrigger) => {\n return (\n <SelectInputOptionContent\n title={withinTrigger ? currency.currency.toUpperCase() : currency.label}\n note={withinTrigger ? undefined : currency.note}\n icon={<Flag code={currency.currency} intrinsicSize={24} />}\n />\n );\n }}\n renderFooter={\n this.props.onCustomAction\n ? () => (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\n <div role=\"button\" tabIndex={0} onClick={this.handleCustomAction}>\n {this.props.customActionLabel}\n </div>\n )\n : undefined\n }\n placeholder={this.props.intl.formatMessage(messages.selectPlaceholder)}\n filterable\n filterPlaceholder={this.props.searchPlaceholder}\n disabled={disabled}\n size={size}\n onChange={this.handleSelectChange}\n onFilterChange={({ queryNormalized }) => {\n this.handleSearchChange(queryNormalized ?? '');\n }}\n {...selectProps}\n />\n </div>\n )}\n </div>\n );\n }\n}\n\nfunction filterCurrenciesForQuery(\n currencies: readonly CurrencyItem[],\n query: string,\n): CurrencyItem[] {\n if (!query) {\n return [...currencies];\n }\n\n const options = currencies.filter(\n (option): option is CurrencyOptionItem => option.header == null,\n );\n const filteredOptions = removeDuplicateValueOptions(options).filter((option) =>\n currencyOptionFitsQuery(option, query),\n );\n\n return sortOptionsLabelsToFirst(filteredOptions, query);\n}\n\nfunction removeDuplicateValueOptions(options: readonly CurrencyOptionItem[]) {\n const uniqueValues = new Set<string>();\n return options.filter((option) => {\n if (!uniqueValues.has(option.value)) {\n uniqueValues.add(option.value);\n return true;\n }\n return false;\n });\n}\n\nfunction currencyOptionFitsQuery(option: CurrencyOptionItem, query: string) {\n if (!option.value) {\n return false;\n }\n\n return (\n contains(option.label, query) ||\n contains(option.searchable, query) ||\n contains(option.note, query)\n );\n}\n\nfunction contains(property: string | undefined, query: string) {\n return property?.toLowerCase().includes(query.toLowerCase());\n}\n\nfunction sortOptionsLabelsToFirst(options: readonly CurrencyOptionItem[], query: string) {\n return [...options].sort((first, second) => {\n const firstContains = contains(first.label, query);\n const secondContains = contains(second.label, query);\n\n if (firstContains && secondContains) {\n return 0;\n }\n if (firstContains) {\n return -1;\n }\n if (secondContains) {\n return 1;\n }\n return 0;\n });\n}\n\nexport default injectIntl(withId(withInputAttributes(MoneyInput, { nonLabelable: true })));\n"],"names":["isNumberOrNull","v","isNumber","isNull","formatAmountIfSet","amount","currency","locale","formatAmount","parseNumber","parseAmount","allowedInputKeys","Set","MoneyInput","Component","defaultProps","size","Size","LARGE","classNames","selectProps","amountFocused","constructor","props","state","searchQuery","formattedAmount","selectedCurrency","intl","UNSAFE_componentWillReceiveProps","nextProps","setState","isInputAllowedForKeyEvent","event","metaKey","key","ctrlKey","isNumberKey","Number","parseInt","has","handleKeyDown","preventDefault","handlePaste","paste","clipboardData","getData","parsed","isEmpty","onAmountChange","value","target","onAmountBlur","setAmount","onAmountFocus","getSelectOptions","selectOptions","filterCurrenciesForQuery","currencies","formattedOptions","currentGroupOptions","forEach","item","header","push","type","label","options","filterMatchers","note","searchable","previousState","handleSelectChange","handleSearchChange","onCurrencyChange","handleCustomAction","onCustomAction","onSearchChange","filteredOptions","style","className","render","inputAttributes","id","amountInputId","ariaLabelledByProp","addon","ariaLabelledBy","hasSingleCurrency","length","firstItem","customActionLabel","isFixedCurrency","disabled","selectedCurrencyElementId","_jsxs","role","clsx","children","_jsx","Input","inputMode","placeholder","autoComplete","onKeyDown","onChange","onFocus","onBlur","onPaste","Flag","code","toLowerCase","intrinsicSize","Title","as","Typography","TITLE_SUBSECTION","toUpperCase","SelectInput","UNSAFE_triggerButtonProps","undefined","formatMessage","messages","selectCurrencyLabel","items","compareValues","renderValue","withinTrigger","SelectInputOptionContent","title","icon","renderFooter","tabIndex","onClick","selectPlaceholder","filterable","filterPlaceholder","searchPlaceholder","onFilterChange","queryNormalized","query","filter","option","removeDuplicateValueOptions","currencyOptionFitsQuery","sortOptionsLabelsToFirst","uniqueValues","add","contains","property","includes","sort","first","second","firstContains","secondContains","injectIntl","withId","withInputAttributes","nonLabelable"],"mappings":"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"}
1
+ {"version":3,"file":"MoneyInput.js","sources":["../../src/moneyInput/MoneyInput.tsx"],"sourcesContent":["import { isEmpty, isNumber, isNull } from '@transferwise/neptune-validation';\nimport { Flag } from '@wise/art';\nimport { clsx } from 'clsx';\nimport { Component } from 'react';\nimport { injectIntl, WrappedComponentProps } from 'react-intl';\n\nimport { Typography, Size, SizeLarge, SizeMedium, SizeSmall } from '../common';\nimport { withInputAttributes, WithInputAttributesProps } from '../inputs/contexts';\nimport { Input } from '../inputs/Input';\nimport {\n SelectInput,\n SelectInputItem,\n SelectInputOptionContent,\n SelectInputOptionItem,\n SelectInputProps,\n} from '../inputs/SelectInput';\nimport Title from '../title';\n\nimport messages from './MoneyInput.messages';\nimport { formatAmount, parseAmount } from './currencyFormatting';\nimport withId from '../withId';\n\nexport interface CurrencyOptionItem {\n header?: never;\n value: string;\n label: string;\n currency: string;\n note?: string;\n searchable?: string;\n}\n\nexport interface CurrencyHeaderItem {\n header: string;\n}\n\nexport type CurrencyItem = CurrencyOptionItem | CurrencyHeaderItem;\n\nconst isNumberOrNull = (v: unknown): v is number | null => isNumber(v) || isNull(v);\n\nconst formatAmountIfSet = ({\n amount,\n currency,\n locale,\n}: {\n amount: number | null | undefined;\n currency: string;\n locale: string;\n}) => {\n return typeof amount === 'number' ? formatAmount(amount, currency, locale) : '';\n};\n\nconst parseNumber = ({\n amount,\n currency,\n locale,\n}: {\n amount: string;\n currency: string;\n locale: string;\n}) => {\n return parseAmount(amount, currency, locale);\n};\n\nconst allowedInputKeys = new Set([\n 'Backspace',\n 'Delete',\n ',',\n '.',\n 'ArrowDown',\n 'ArrowUp',\n 'ArrowLeft',\n 'ArrowRight',\n 'Enter',\n 'Escape',\n 'Tab',\n]);\n\nexport interface MoneyInputProps extends WrappedComponentProps {\n id?: string;\n 'aria-labelledby'?: string;\n currencies: readonly CurrencyItem[];\n selectedCurrency: CurrencyOptionItem;\n onCurrencyChange?: (value: CurrencyOptionItem) => void;\n placeholder?: number;\n amount: number | null;\n size?: SizeSmall | SizeMedium | SizeLarge;\n onAmountChange?: (value: number | null) => void;\n addon?: React.ReactNode;\n searchPlaceholder?: string;\n /**\n * Allows the consumer to react to searching, while the search itself is handled internally.\n */\n onSearchChange?: (value: { searchQuery: string; filteredOptions: CurrencyItem[] }) => void;\n customActionLabel?: React.ReactNode;\n onCustomAction?: () => void;\n classNames?: Record<string, string>;\n selectProps?: Partial<SelectInputProps<CurrencyOptionItem>>;\n}\n\ntype MoneyInputPropsWithInputAttributes = MoneyInputProps & Partial<WithInputAttributesProps>;\n\ninterface MoneyInputState {\n searchQuery: string;\n formattedAmount: string;\n locale: string;\n}\n\nclass MoneyInput extends Component<MoneyInputPropsWithInputAttributes, MoneyInputState> {\n declare props: MoneyInputPropsWithInputAttributes &\n Required<Pick<MoneyInputPropsWithInputAttributes, keyof typeof MoneyInput.defaultProps>>;\n\n static defaultProps = {\n size: Size.LARGE,\n classNames: {},\n selectProps: {},\n } satisfies Partial<MoneyInputPropsWithInputAttributes>;\n\n amountFocused = false;\n\n constructor(props: MoneyInputProps) {\n super(props);\n this.state = {\n searchQuery: '',\n formattedAmount: formatAmountIfSet({\n amount: props.amount,\n currency: props.selectedCurrency.currency,\n locale: props.intl.locale,\n }),\n locale: props.intl.locale,\n };\n }\n\n UNSAFE_componentWillReceiveProps(nextProps: MoneyInputProps) {\n this.setState({ locale: nextProps.intl.locale });\n\n if (!this.amountFocused) {\n this.setState({\n formattedAmount: formatAmountIfSet({\n amount: nextProps.amount,\n currency: nextProps.selectedCurrency.currency,\n locale: nextProps.intl.locale,\n }),\n });\n }\n }\n\n isInputAllowedForKeyEvent = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const { metaKey, key, ctrlKey } = event;\n const isNumberKey = isNumber(Number.parseInt(key, 10));\n\n return isNumberKey || metaKey || ctrlKey || allowedInputKeys.has(key);\n };\n\n handleKeyDown: React.KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (!this.isInputAllowedForKeyEvent(event)) {\n event.preventDefault();\n }\n };\n\n handlePaste: React.ClipboardEventHandler<HTMLInputElement> = (event) => {\n const paste = event.clipboardData.getData('text');\n const { locale } = this.state;\n const parsed = isEmpty(paste)\n ? null\n : parseNumber({\n amount: paste,\n currency: this.props.selectedCurrency.currency,\n locale,\n });\n\n if (isNumberOrNull(parsed)) {\n this.setState({\n formattedAmount: formatAmountIfSet({\n amount: parsed,\n currency: this.props.selectedCurrency.currency,\n locale,\n }),\n });\n this.props.onAmountChange?.(parsed);\n }\n\n event.preventDefault();\n };\n\n onAmountChange: React.ChangeEventHandler<HTMLInputElement> = (event) => {\n const { value } = event.target;\n this.setState({\n formattedAmount: value,\n });\n const parsed = isEmpty(value)\n ? null\n : parseNumber({\n amount: value,\n currency: this.props.selectedCurrency.currency,\n locale: this.state.locale,\n });\n if (isNumberOrNull(parsed)) {\n this.props.onAmountChange?.(parsed);\n }\n };\n\n onAmountBlur = () => {\n this.amountFocused = false;\n this.setAmount();\n };\n\n onAmountFocus = () => {\n this.amountFocused = true;\n };\n\n getSelectOptions() {\n const selectOptions = filterCurrenciesForQuery(this.props.currencies, this.state.searchQuery);\n\n const formattedOptions: SelectInputItem<CurrencyOptionItem>[] = [];\n let currentGroupOptions: SelectInputOptionItem<CurrencyOptionItem>[] | undefined;\n\n selectOptions.forEach((item) => {\n if (item.header != null) {\n currentGroupOptions = [];\n formattedOptions.push({\n type: 'group',\n label: item.header,\n options: currentGroupOptions,\n });\n } else {\n (currentGroupOptions ?? formattedOptions).push({\n type: 'option',\n value: item,\n filterMatchers: [item.value, item.label, item.note ?? '', item.searchable ?? ''],\n });\n }\n });\n\n return formattedOptions;\n }\n\n setAmount() {\n this.setState((previousState) => {\n const parsed = parseNumber({\n amount: previousState.formattedAmount,\n currency: this.props.selectedCurrency.currency,\n locale: previousState.locale,\n });\n if (!isNumberOrNull(parsed)) {\n return {\n formattedAmount: previousState.formattedAmount,\n };\n }\n return {\n formattedAmount: formatAmountIfSet({\n amount: parsed,\n currency: this.props.selectedCurrency.currency,\n locale: previousState.locale,\n }),\n };\n });\n }\n\n handleSelectChange = (value: CurrencyOptionItem) => {\n this.handleSearchChange('');\n this.props.onCurrencyChange?.(value);\n };\n\n handleCustomAction = () => {\n this.handleSearchChange('');\n this.props.onCustomAction?.();\n };\n\n handleSearchChange = (searchQuery: string) => {\n this.setState({ searchQuery });\n this.props.onSearchChange?.({\n searchQuery,\n filteredOptions: filterCurrenciesForQuery(this.props.currencies, searchQuery),\n });\n };\n\n style = (className: string) => this.props.classNames[className] || className;\n\n render() {\n const {\n inputAttributes,\n id: amountInputId,\n 'aria-labelledby': ariaLabelledByProp,\n selectedCurrency,\n onCurrencyChange,\n size,\n addon,\n selectProps,\n } = this.props;\n const ariaLabelledBy = ariaLabelledByProp ?? inputAttributes?.['aria-labelledby'];\n const selectOptions = this.getSelectOptions();\n\n const hasSingleCurrency = () => {\n if (selectOptions.length !== 0) {\n const firstItem = selectOptions[0];\n\n if (selectOptions.length === 1) {\n if (firstItem.type === 'option') {\n return firstItem.value.currency === selectedCurrency.currency;\n }\n if (firstItem.type === 'group') {\n return (\n firstItem.options.length === 1 &&\n !(this.props.onCustomAction && this.props.customActionLabel)\n );\n }\n }\n } else if (selectedCurrency?.currency) {\n return true;\n }\n\n return false;\n };\n\n const isFixedCurrency = (!this.state.searchQuery && hasSingleCurrency()) || !onCurrencyChange;\n const disabled = !this.props.onAmountChange;\n const selectedCurrencyElementId = `${inputAttributes?.id ?? amountInputId}SelectedCurrency`;\n\n return (\n <div\n role=\"group\"\n {...inputAttributes}\n aria-labelledby={ariaLabelledBy}\n className={clsx(\n this.style('tw-money-input'),\n this.style('input-group'),\n this.style(`input-group-${size}`),\n )}\n >\n <Input\n id={amountInputId}\n value={this.state.formattedAmount}\n inputMode=\"decimal\"\n disabled={disabled}\n placeholder={formatAmountIfSet({\n amount: this.props.placeholder,\n currency: this.props.selectedCurrency.currency,\n locale: this.state.locale,\n })}\n autoComplete=\"off\"\n aria-describedby={selectedCurrencyElementId}\n onKeyDown={this.handleKeyDown}\n onChange={this.onAmountChange}\n onFocus={this.onAmountFocus}\n onBlur={this.onAmountBlur}\n onPaste={this.handlePaste}\n />\n {addon && (\n <span\n className={clsx(\n this.style('input-group-addon'),\n this.style(`input-${size}`),\n disabled ? this.style('disabled') : '',\n )}\n >\n {addon}\n </span>\n )}\n {isFixedCurrency ? (\n <div\n className={clsx(\n this.style('input-group-addon'),\n this.style(`input-${size}`),\n this.style('tw-money-input__fixed-currency'),\n disabled ? this.style('disabled') : '',\n )}\n id={selectedCurrencyElementId}\n >\n {(size === 'lg' || size === 'md') && (\n <span className={clsx(this.style('money-input-currency-flag'), this.style('m-r-2'))}>\n <Flag code={selectedCurrency.currency.toLowerCase()} intrinsicSize={24} />\n </span>\n )}\n <Title\n as=\"span\"\n type={Typography.TITLE_SUBSECTION}\n className={size === 'lg' ? this.style('m-r-1') : ''}\n >\n {selectedCurrency.currency.toUpperCase()}\n </Title>\n </div>\n ) : (\n <div\n translate=\"no\"\n className={clsx(\n this.style('input-group-btn'),\n this.style('amount-currency-select-btn'),\n )}\n >\n <SelectInput\n UNSAFE_triggerButtonProps={{\n id: undefined,\n 'aria-labelledby': undefined,\n 'aria-describedby': undefined,\n 'aria-invalid': undefined,\n 'aria-label': this.props.intl.formatMessage(messages.selectCurrencyLabel),\n }}\n id={selectedCurrencyElementId}\n items={selectOptions}\n value={selectedCurrency}\n compareValues=\"currency\"\n renderValue={(currency, withinTrigger) => {\n return (\n <SelectInputOptionContent\n title={withinTrigger ? currency.currency.toUpperCase() : currency.label}\n note={withinTrigger ? undefined : currency.note}\n icon={<Flag code={currency.currency} intrinsicSize={24} />}\n />\n );\n }}\n renderFooter={\n this.props.onCustomAction\n ? () => (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\n <div role=\"button\" tabIndex={0} onClick={this.handleCustomAction}>\n {this.props.customActionLabel}\n </div>\n )\n : undefined\n }\n placeholder={this.props.intl.formatMessage(messages.selectPlaceholder)}\n filterable\n filterPlaceholder={this.props.searchPlaceholder}\n disabled={disabled}\n size={size}\n onChange={this.handleSelectChange}\n onFilterChange={({ queryNormalized }) => {\n this.handleSearchChange(queryNormalized ?? '');\n }}\n {...selectProps}\n />\n </div>\n )}\n </div>\n );\n }\n}\n\nfunction filterCurrenciesForQuery(\n currencies: readonly CurrencyItem[],\n query: string,\n): CurrencyItem[] {\n if (!query) {\n return [...currencies];\n }\n\n const options = currencies.filter(\n (option): option is CurrencyOptionItem => option.header == null,\n );\n const filteredOptions = removeDuplicateValueOptions(options).filter((option) =>\n currencyOptionFitsQuery(option, query),\n );\n\n return sortOptionsLabelsToFirst(filteredOptions, query);\n}\n\nfunction removeDuplicateValueOptions(options: readonly CurrencyOptionItem[]) {\n const uniqueValues = new Set<string>();\n return options.filter((option) => {\n if (!uniqueValues.has(option.value)) {\n uniqueValues.add(option.value);\n return true;\n }\n return false;\n });\n}\n\nfunction currencyOptionFitsQuery(option: CurrencyOptionItem, query: string) {\n if (!option.value) {\n return false;\n }\n\n return (\n contains(option.label, query) ||\n contains(option.searchable, query) ||\n contains(option.note, query)\n );\n}\n\nfunction contains(property: string | undefined, query: string) {\n return property?.toLowerCase().includes(query.toLowerCase());\n}\n\nfunction sortOptionsLabelsToFirst(options: readonly CurrencyOptionItem[], query: string) {\n return [...options].sort((first, second) => {\n const firstContains = contains(first.label, query);\n const secondContains = contains(second.label, query);\n\n if (firstContains && secondContains) {\n return 0;\n }\n if (firstContains) {\n return -1;\n }\n if (secondContains) {\n return 1;\n }\n return 0;\n });\n}\n\nexport default injectIntl(withId(withInputAttributes(MoneyInput, { nonLabelable: true })));\n"],"names":["isNumberOrNull","v","isNumber","isNull","formatAmountIfSet","amount","currency","locale","formatAmount","parseNumber","parseAmount","allowedInputKeys","Set","MoneyInput","Component","defaultProps","size","Size","LARGE","classNames","selectProps","amountFocused","constructor","props","state","searchQuery","formattedAmount","selectedCurrency","intl","UNSAFE_componentWillReceiveProps","nextProps","setState","isInputAllowedForKeyEvent","event","metaKey","key","ctrlKey","isNumberKey","Number","parseInt","has","handleKeyDown","preventDefault","handlePaste","paste","clipboardData","getData","parsed","isEmpty","onAmountChange","value","target","onAmountBlur","setAmount","onAmountFocus","getSelectOptions","selectOptions","filterCurrenciesForQuery","currencies","formattedOptions","currentGroupOptions","forEach","item","header","push","type","label","options","filterMatchers","note","searchable","previousState","handleSelectChange","handleSearchChange","onCurrencyChange","handleCustomAction","onCustomAction","onSearchChange","filteredOptions","style","className","render","inputAttributes","id","amountInputId","ariaLabelledByProp","addon","ariaLabelledBy","hasSingleCurrency","length","firstItem","customActionLabel","isFixedCurrency","disabled","selectedCurrencyElementId","_jsxs","role","clsx","children","_jsx","Input","inputMode","placeholder","autoComplete","onKeyDown","onChange","onFocus","onBlur","onPaste","Flag","code","toLowerCase","intrinsicSize","Title","as","Typography","TITLE_SUBSECTION","toUpperCase","translate","SelectInput","UNSAFE_triggerButtonProps","undefined","formatMessage","messages","selectCurrencyLabel","items","compareValues","renderValue","withinTrigger","SelectInputOptionContent","title","icon","renderFooter","tabIndex","onClick","selectPlaceholder","filterable","filterPlaceholder","searchPlaceholder","onFilterChange","queryNormalized","query","filter","option","removeDuplicateValueOptions","currencyOptionFitsQuery","sortOptionsLabelsToFirst","uniqueValues","add","contains","property","includes","sort","first","second","firstContains","secondContains","injectIntl","withId","withInputAttributes","nonLabelable"],"mappings":"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"}