@unifold/ui-react 0.1.81 → 0.1.82

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.
package/dist/index.mjs CHANGED
@@ -27,6 +27,9 @@ var en_default = {
27
27
  loading: "Loading...",
28
28
  search: "Search",
29
29
  close: "Close",
30
+ noResults: "No matches found",
31
+ selectCountry: "Select country",
32
+ selectState: "Select state",
30
33
  review: "Review",
31
34
  tryAgain: "Try Again",
32
35
  somethingWentWrong: "Something went wrong",
@@ -249,6 +252,7 @@ var en_default = {
249
252
  not_opted_in: "Please make sure you opt-in {{token_symbol}}({{chain_name}}) before receiving funds",
250
253
  insufficient_balance: "Recipient account does not meet the minimum balance requirement",
251
254
  account_not_found: "Recipient account does not exist on {{chain_name}}",
255
+ destination_tag_required: "This {{chain_name}} address requires a memo tag. Please provide your memo tag as well, in the format address:memotag",
252
256
  validation_error: "Unable to verify recipient address on {{chain_name}}"
253
257
  },
254
258
  defaultError: "The recipient address cannot receive funds for the selected token"
@@ -827,12 +831,18 @@ var en_default = {
827
831
  receiveChain: "Receive chain",
828
832
  recipientAddress: "Recipient address",
829
833
  recipientAddressPlaceholder: "Enter wallet address",
834
+ recipientAddressPlaceholderXrpl: "Enter wallet address, or address:memotag",
830
835
  amount: "Amount",
831
836
  amountPlaceholder: "0.00",
832
837
  balance: "Balance",
833
838
  minimum: "min",
834
839
  withdraw: "Withdraw",
835
840
  invalidAddress: "Please enter a valid address",
841
+ invalidXrplAddress: "Please enter a valid {{chain_name}} address. If your recipient requires a memo tag, please provide it as well, in the format address:memotag",
842
+ memoTag: "Memo tag",
843
+ memoTagPlaceholder: "e.g. 12345",
844
+ memoTagRequiredHint: "This {{chain_name}} address requires a memo tag before it can receive funds",
845
+ invalidMemoTag: "Memo tag must be a whole number between 0 and 4294967295",
836
846
  invalidAmount: "Please enter a valid amount",
837
847
  verifyingAddress: "Verifying address...",
838
848
  loading: "Loading...",
@@ -882,6 +892,9 @@ var zh_default = {
882
892
  loading: "\u52A0\u8F7D\u4E2D...",
883
893
  search: "\u641C\u7D22",
884
894
  close: "\u5173\u95ED",
895
+ noResults: "\u6CA1\u6709\u5339\u914D\u7684\u7ED3\u679C",
896
+ selectCountry: "\u9009\u62E9\u56FD\u5BB6",
897
+ selectState: "\u9009\u62E9\u5DDE",
885
898
  review: "\u786E\u8BA4\u4FE1\u606F",
886
899
  tryAgain: "\u91CD\u8BD5",
887
900
  somethingWentWrong: "\u51FA\u73B0\u9519\u8BEF",
@@ -1104,6 +1117,7 @@ var zh_default = {
1104
1117
  not_opted_in: "\u8BF7\u5148\u5728 {{chain_name}} \u4E0A\u5F00\u901A {{token_symbol}}\uFF0C\u7136\u540E\u518D\u63A5\u6536\u8D44\u91D1",
1105
1118
  insufficient_balance: "\u6536\u6B3E\u8D26\u6237\u672A\u6EE1\u8DB3\u6700\u4F4E\u4F59\u989D\u8981\u6C42",
1106
1119
  account_not_found: "\u6536\u6B3E\u8D26\u6237\u5728 {{chain_name}} \u4E0A\u4E0D\u5B58\u5728",
1120
+ destination_tag_required: "\u8BE5 {{chain_name}} \u5730\u5740\u9700\u8981\u76EE\u6807\u6807\u7B7E\uFF08Destination Tag\uFF09\uFF0C\u8BF7\u4E00\u5E76\u586B\u5199\u6807\u7B7E\uFF0C\u683C\u5F0F\u4E3A \u5730\u5740:\u6807\u7B7E",
1107
1121
  validation_error: "\u65E0\u6CD5\u5728 {{chain_name}} \u4E0A\u9A8C\u8BC1\u6536\u6B3E\u5730\u5740"
1108
1122
  },
1109
1123
  defaultError: "\u8BE5\u6536\u6B3E\u5730\u5740\u65E0\u6CD5\u63A5\u6536\u6240\u9009\u4EE3\u5E01\u7684\u8D44\u91D1"
@@ -1682,12 +1696,18 @@ var zh_default = {
1682
1696
  receiveChain: "\u63A5\u6536\u7F51\u7EDC",
1683
1697
  recipientAddress: "\u6536\u6B3E\u5730\u5740",
1684
1698
  recipientAddressPlaceholder: "\u8F93\u5165\u94B1\u5305\u5730\u5740",
1699
+ recipientAddressPlaceholderXrpl: "\u8F93\u5165\u5730\u5740\uFF0C\u6216 \u5730\u5740:\u6807\u7B7E",
1685
1700
  amount: "\u91D1\u989D",
1686
1701
  amountPlaceholder: "0.00",
1687
1702
  balance: "\u4F59\u989D",
1688
1703
  minimum: "\u6700\u4F4E",
1689
1704
  withdraw: "\u63D0\u73B0",
1690
1705
  invalidAddress: "\u8BF7\u8F93\u5165\u6709\u6548\u5730\u5740",
1706
+ invalidXrplAddress: "\u8BF7\u8F93\u5165\u6709\u6548\u7684 {{chain_name}} \u5730\u5740\u3002\u5982\u679C\u6536\u6B3E\u65B9\u9700\u8981\u76EE\u6807\u6807\u7B7E\uFF0C\u8BF7\u4E00\u5E76\u586B\u5199\uFF0C\u683C\u5F0F\u4E3A \u5730\u5740:\u6807\u7B7E",
1707
+ memoTag: "\u76EE\u6807\u6807\u7B7E",
1708
+ memoTagPlaceholder: "\u4F8B\u5982 12345",
1709
+ memoTagRequiredHint: "\u8BE5 {{chain_name}} \u5730\u5740\u9700\u8981\u586B\u5199\u76EE\u6807\u6807\u7B7E\u624D\u80FD\u6536\u6B3E",
1710
+ invalidMemoTag: "\u76EE\u6807\u6807\u7B7E\u5FC5\u987B\u662F 0 \u5230 4294967295 \u4E4B\u95F4\u7684\u6574\u6570",
1691
1711
  invalidAmount: "\u8BF7\u8F93\u5165\u6709\u6548\u91D1\u989D",
1692
1712
  verifyingAddress: "\u6B63\u5728\u9A8C\u8BC1\u5730\u5740...",
1693
1713
  loading: "\u52A0\u8F7D\u4E2D...",
@@ -1737,6 +1757,9 @@ var zh_TW_default = {
1737
1757
  loading: "\u8F09\u5165\u4E2D...",
1738
1758
  search: "\u641C\u5C0B",
1739
1759
  close: "\u95DC\u9589",
1760
+ noResults: "\u6C92\u6709\u7B26\u5408\u7684\u7D50\u679C",
1761
+ selectCountry: "\u9078\u64C7\u570B\u5BB6",
1762
+ selectState: "\u9078\u64C7\u5DDE",
1740
1763
  review: "\u78BA\u8A8D\u8CC7\u8A0A",
1741
1764
  tryAgain: "\u91CD\u8A66",
1742
1765
  somethingWentWrong: "\u767C\u751F\u932F\u8AA4",
@@ -1959,6 +1982,7 @@ var zh_TW_default = {
1959
1982
  not_opted_in: "\u8ACB\u5148\u5728 {{chain_name}} \u4E0A\u958B\u901A {{token_symbol}}\uFF0C\u7136\u5F8C\u518D\u63A5\u6536\u8CC7\u91D1",
1960
1983
  insufficient_balance: "\u6536\u6B3E\u5E33\u6236\u672A\u9054\u6700\u4F4E\u9918\u984D\u8981\u6C42",
1961
1984
  account_not_found: "\u6536\u6B3E\u5E33\u6236\u5728 {{chain_name}} \u4E0A\u4E0D\u5B58\u5728",
1985
+ destination_tag_required: "\u8A72 {{chain_name}} \u5730\u5740\u9700\u8981\u76EE\u7684\u5730\u6A19\u7C64\uFF08Destination Tag\uFF09\uFF0C\u8ACB\u4E00\u4F75\u586B\u5BEB\u6A19\u7C64\uFF0C\u683C\u5F0F\u70BA \u5730\u5740:\u6A19\u7C64",
1962
1986
  validation_error: "\u7121\u6CD5\u5728 {{chain_name}} \u4E0A\u9A57\u8B49\u6536\u6B3E\u5730\u5740"
1963
1987
  },
1964
1988
  defaultError: "\u8A72\u6536\u6B3E\u5730\u5740\u7121\u6CD5\u63A5\u6536\u6240\u9078\u4EE3\u5E63\u7684\u8CC7\u91D1"
@@ -2537,12 +2561,18 @@ var zh_TW_default = {
2537
2561
  receiveChain: "\u63A5\u6536\u7DB2\u8DEF",
2538
2562
  recipientAddress: "\u6536\u6B3E\u5730\u5740",
2539
2563
  recipientAddressPlaceholder: "\u8F38\u5165\u9322\u5305\u5730\u5740",
2564
+ recipientAddressPlaceholderXrpl: "\u8F38\u5165\u5730\u5740\uFF0C\u6216 \u5730\u5740:\u6A19\u7C64",
2540
2565
  amount: "\u91D1\u984D",
2541
2566
  amountPlaceholder: "0.00",
2542
2567
  balance: "\u9918\u984D",
2543
2568
  minimum: "\u6700\u4F4E",
2544
2569
  withdraw: "\u63D0\u9818",
2545
2570
  invalidAddress: "\u8ACB\u8F38\u5165\u6709\u6548\u5730\u5740",
2571
+ invalidXrplAddress: "\u8ACB\u8F38\u5165\u6709\u6548\u7684 {{chain_name}} \u5730\u5740\u3002\u82E5\u6536\u6B3E\u65B9\u9700\u8981\u76EE\u7684\u5730\u6A19\u7C64\uFF0C\u8ACB\u4E00\u4F75\u586B\u5BEB\uFF0C\u683C\u5F0F\u70BA \u5730\u5740:\u6A19\u7C64",
2572
+ memoTag: "\u76EE\u7684\u5730\u6A19\u7C64",
2573
+ memoTagPlaceholder: "\u4F8B\u5982 12345",
2574
+ memoTagRequiredHint: "\u8A72 {{chain_name}} \u5730\u5740\u9700\u8981\u586B\u5BEB\u76EE\u7684\u5730\u6A19\u7C64\u624D\u80FD\u6536\u6B3E",
2575
+ invalidMemoTag: "\u76EE\u7684\u5730\u6A19\u7C64\u5FC5\u9808\u662F 0 \u5230 4294967295 \u4E4B\u9593\u7684\u6574\u6578",
2546
2576
  invalidAmount: "\u8ACB\u8F38\u5165\u6709\u6548\u91D1\u984D",
2547
2577
  verifyingAddress: "\u6B63\u5728\u9A57\u8B49\u5730\u5740...",
2548
2578
  loading: "\u8F09\u5165\u4E2D...",
@@ -2592,6 +2622,9 @@ var fr_default = {
2592
2622
  loading: "Chargement...",
2593
2623
  search: "Rechercher",
2594
2624
  close: "Fermer",
2625
+ noResults: "Aucun r\xE9sultat",
2626
+ selectCountry: "S\xE9lectionner un pays",
2627
+ selectState: "S\xE9lectionner un \xC9tat",
2595
2628
  review: "V\xE9rifier",
2596
2629
  tryAgain: "R\xE9essayer",
2597
2630
  somethingWentWrong: "Une erreur s'est produite",
@@ -2814,6 +2847,7 @@ var fr_default = {
2814
2847
  not_opted_in: "Veuillez d'abord activer {{token_symbol}} ({{chain_name}}) avant de recevoir des fonds",
2815
2848
  insufficient_balance: "Le compte destinataire ne respecte pas le solde minimum requis",
2816
2849
  account_not_found: "Le compte destinataire n'existe pas sur {{chain_name}}",
2850
+ destination_tag_required: "Cette adresse {{chain_name}} n\xE9cessite un tag de destination. Veuillez \xE9galement indiquer votre tag, au format adresse:tag",
2817
2851
  validation_error: "Impossible de v\xE9rifier l'adresse du destinataire sur {{chain_name}}"
2818
2852
  },
2819
2853
  defaultError: "L'adresse du destinataire ne peut pas recevoir de fonds pour le jeton s\xE9lectionn\xE9"
@@ -3392,12 +3426,18 @@ var fr_default = {
3392
3426
  receiveChain: "R\xE9seau de r\xE9ception",
3393
3427
  recipientAddress: "Adresse du destinataire",
3394
3428
  recipientAddressPlaceholder: "Saisir l'adresse du portefeuille",
3429
+ recipientAddressPlaceholderXrpl: "Saisir l'adresse, ou adresse:tag",
3395
3430
  amount: "Montant",
3396
3431
  amountPlaceholder: "0,00",
3397
3432
  balance: "Solde",
3398
3433
  minimum: "min.",
3399
3434
  withdraw: "Retirer",
3400
3435
  invalidAddress: "Veuillez saisir une adresse valide",
3436
+ invalidXrplAddress: "Veuillez saisir une adresse {{chain_name}} valide. Si votre destinataire n\xE9cessite un tag de destination, indiquez-le \xE9galement, au format adresse:tag",
3437
+ memoTag: "Tag de destination",
3438
+ memoTagPlaceholder: "ex. 12345",
3439
+ memoTagRequiredHint: "Cette adresse {{chain_name}} n\xE9cessite un tag de destination pour recevoir des fonds",
3440
+ invalidMemoTag: "Le tag de destination doit \xEAtre un nombre entier entre 0 et 4294967295",
3401
3441
  invalidAmount: "Veuillez saisir un montant valide",
3402
3442
  verifyingAddress: "V\xE9rification de l'adresse...",
3403
3443
  loading: "Chargement...",
@@ -3447,6 +3487,9 @@ var th_default = {
3447
3487
  loading: "\u0E01\u0E33\u0E25\u0E31\u0E07\u0E42\u0E2B\u0E25\u0E14...",
3448
3488
  search: "\u0E04\u0E49\u0E19\u0E2B\u0E32",
3449
3489
  close: "\u0E1B\u0E34\u0E14",
3490
+ noResults: "\u0E44\u0E21\u0E48\u0E1E\u0E1A\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E17\u0E35\u0E48\u0E15\u0E23\u0E07\u0E01\u0E31\u0E19",
3491
+ selectCountry: "\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E1B\u0E23\u0E30\u0E40\u0E17\u0E28",
3492
+ selectState: "\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E23\u0E31\u0E10",
3450
3493
  review: "\u0E15\u0E23\u0E27\u0E08\u0E2A\u0E2D\u0E1A",
3451
3494
  tryAgain: "\u0E25\u0E2D\u0E07\u0E2D\u0E35\u0E01\u0E04\u0E23\u0E31\u0E49\u0E07",
3452
3495
  somethingWentWrong: "\u0E40\u0E01\u0E34\u0E14\u0E02\u0E49\u0E2D\u0E1C\u0E34\u0E14\u0E1E\u0E25\u0E32\u0E14",
@@ -3669,6 +3712,7 @@ var th_default = {
3669
3712
  not_opted_in: "\u0E42\u0E1B\u0E23\u0E14\u0E40\u0E1B\u0E34\u0E14\u0E43\u0E0A\u0E49 {{token_symbol}} ({{chain_name}}) \u0E01\u0E48\u0E2D\u0E19\u0E23\u0E31\u0E1A\u0E40\u0E07\u0E34\u0E19",
3670
3713
  insufficient_balance: "\u0E1A\u0E31\u0E0D\u0E0A\u0E35\u0E1C\u0E39\u0E49\u0E23\u0E31\u0E1A\u0E44\u0E21\u0E48\u0E21\u0E35\u0E22\u0E2D\u0E14\u0E04\u0E07\u0E40\u0E2B\u0E25\u0E37\u0E2D\u0E02\u0E31\u0E49\u0E19\u0E15\u0E48\u0E33\u0E15\u0E32\u0E21\u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14",
3671
3714
  account_not_found: "\u0E44\u0E21\u0E48\u0E21\u0E35\u0E1A\u0E31\u0E0D\u0E0A\u0E35\u0E1C\u0E39\u0E49\u0E23\u0E31\u0E1A\u0E1A\u0E19 {{chain_name}}",
3715
+ destination_tag_required: "\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 {{chain_name}} \u0E19\u0E35\u0E49\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35 destination tag \u0E01\u0E23\u0E38\u0E13\u0E32\u0E23\u0E30\u0E1A\u0E38\u0E41\u0E17\u0E47\u0E01\u0E02\u0E2D\u0E07\u0E04\u0E38\u0E13\u0E14\u0E49\u0E27\u0E22 \u0E43\u0E19\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A \u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48:\u0E41\u0E17\u0E47\u0E01",
3672
3716
  validation_error: "\u0E44\u0E21\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E15\u0E23\u0E27\u0E08\u0E2A\u0E2D\u0E1A\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48\u0E1C\u0E39\u0E49\u0E23\u0E31\u0E1A\u0E1A\u0E19 {{chain_name}} \u0E44\u0E14\u0E49"
3673
3717
  },
3674
3718
  defaultError: "\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48\u0E1C\u0E39\u0E49\u0E23\u0E31\u0E1A\u0E44\u0E21\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E23\u0E31\u0E1A\u0E40\u0E07\u0E34\u0E19\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E42\u0E17\u0E40\u0E04\u0E19\u0E17\u0E35\u0E48\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E44\u0E14\u0E49"
@@ -4247,12 +4291,18 @@ var th_default = {
4247
4291
  receiveChain: "\u0E40\u0E04\u0E23\u0E37\u0E2D\u0E02\u0E48\u0E32\u0E22\u0E17\u0E35\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A",
4248
4292
  recipientAddress: "\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48\u0E1C\u0E39\u0E49\u0E23\u0E31\u0E1A",
4249
4293
  recipientAddressPlaceholder: "\u0E01\u0E23\u0E2D\u0E01\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48\u0E01\u0E23\u0E30\u0E40\u0E1B\u0E4B\u0E32\u0E40\u0E07\u0E34\u0E19",
4294
+ recipientAddressPlaceholderXrpl: "\u0E01\u0E23\u0E2D\u0E01\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 \u0E2B\u0E23\u0E37\u0E2D \u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48:\u0E41\u0E17\u0E47\u0E01",
4250
4295
  amount: "\u0E08\u0E33\u0E19\u0E27\u0E19",
4251
4296
  amountPlaceholder: "0.00",
4252
4297
  balance: "\u0E22\u0E2D\u0E14\u0E04\u0E07\u0E40\u0E2B\u0E25\u0E37\u0E2D",
4253
4298
  minimum: "\u0E02\u0E31\u0E49\u0E19\u0E15\u0E48\u0E33",
4254
4299
  withdraw: "\u0E16\u0E2D\u0E19",
4255
4300
  invalidAddress: "\u0E42\u0E1B\u0E23\u0E14\u0E01\u0E23\u0E2D\u0E01\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48\u0E17\u0E35\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07",
4301
+ invalidXrplAddress: "\u0E42\u0E1B\u0E23\u0E14\u0E01\u0E23\u0E2D\u0E01\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 {{chain_name}} \u0E17\u0E35\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07 \u0E2B\u0E32\u0E01\u0E1C\u0E39\u0E49\u0E23\u0E31\u0E1A\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E0A\u0E49 destination tag \u0E01\u0E23\u0E38\u0E13\u0E32\u0E23\u0E30\u0E1A\u0E38\u0E14\u0E49\u0E27\u0E22\u0E43\u0E19\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A \u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48:\u0E41\u0E17\u0E47\u0E01",
4302
+ memoTag: "Destination tag",
4303
+ memoTagPlaceholder: "\u0E40\u0E0A\u0E48\u0E19 12345",
4304
+ memoTagRequiredHint: "\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 {{chain_name}} \u0E19\u0E35\u0E49\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35 destination tag \u0E08\u0E36\u0E07\u0E08\u0E30\u0E23\u0E31\u0E1A\u0E40\u0E07\u0E34\u0E19\u0E44\u0E14\u0E49",
4305
+ invalidMemoTag: "Destination tag \u0E15\u0E49\u0E2D\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E08\u0E33\u0E19\u0E27\u0E19\u0E40\u0E15\u0E47\u0E21\u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07 0 \u0E16\u0E36\u0E07 4294967295",
4256
4306
  invalidAmount: "\u0E42\u0E1B\u0E23\u0E14\u0E01\u0E23\u0E2D\u0E01\u0E08\u0E33\u0E19\u0E27\u0E19\u0E17\u0E35\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07",
4257
4307
  verifyingAddress: "\u0E01\u0E33\u0E25\u0E31\u0E07\u0E15\u0E23\u0E27\u0E08\u0E2A\u0E2D\u0E1A\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48...",
4258
4308
  loading: "\u0E01\u0E33\u0E25\u0E31\u0E07\u0E42\u0E2B\u0E25\u0E14...",
@@ -4302,6 +4352,9 @@ var ja_default = {
4302
4352
  loading: "\u8AAD\u307F\u8FBC\u307F\u4E2D...",
4303
4353
  search: "\u691C\u7D22",
4304
4354
  close: "\u9589\u3058\u308B",
4355
+ noResults: "\u4E00\u81F4\u3059\u308B\u9805\u76EE\u304C\u3042\u308A\u307E\u305B\u3093",
4356
+ selectCountry: "\u56FD\u3092\u9078\u629E",
4357
+ selectState: "\u5DDE\u3092\u9078\u629E",
4305
4358
  review: "\u78BA\u8A8D",
4306
4359
  tryAgain: "\u518D\u8A66\u884C",
4307
4360
  somethingWentWrong: "\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F",
@@ -4524,6 +4577,7 @@ var ja_default = {
4524
4577
  not_opted_in: "\u8CC7\u91D1\u3092\u53D7\u3051\u53D6\u308B\u524D\u306B\u3001{{chain_name}}\u3067{{token_symbol}}\u3092\u30AA\u30D7\u30C8\u30A4\u30F3\u3057\u3066\u304F\u3060\u3055\u3044",
4525
4578
  insufficient_balance: "\u53D7\u53D6\u53E3\u5EA7\u304C\u6700\u4F4E\u6B8B\u9AD8\u306E\u8981\u4EF6\u3092\u6E80\u305F\u3057\u3066\u3044\u307E\u305B\u3093",
4526
4579
  account_not_found: "{{chain_name}}\u4E0A\u306B\u53D7\u53D6\u53E3\u5EA7\u304C\u5B58\u5728\u3057\u307E\u305B\u3093",
4580
+ destination_tag_required: "\u3053\u306E{{chain_name}}\u30A2\u30C9\u30EC\u30B9\u306B\u306F\u5B9B\u5148\u30BF\u30B0\u304C\u5FC5\u8981\u3067\u3059\u3002\u5B9B\u5148\u30BF\u30B0\u3082\u300C\u30A2\u30C9\u30EC\u30B9:\u30BF\u30B0\u300D\u306E\u5F62\u5F0F\u3067\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044",
4527
4581
  validation_error: "{{chain_name}}\u4E0A\u306E\u53D7\u53D6\u30A2\u30C9\u30EC\u30B9\u3092\u78BA\u8A8D\u3067\u304D\u307E\u305B\u3093"
4528
4582
  },
4529
4583
  defaultError: "\u9078\u629E\u3057\u305F\u30C8\u30FC\u30AF\u30F3\u3067\u306F\u3001\u3053\u306E\u53D7\u53D6\u30A2\u30C9\u30EC\u30B9\u306B\u8CC7\u91D1\u3092\u9001\u308C\u307E\u305B\u3093"
@@ -5102,12 +5156,18 @@ var ja_default = {
5102
5156
  receiveChain: "\u53D7\u53D6\u30C1\u30A7\u30FC\u30F3",
5103
5157
  recipientAddress: "\u53D7\u53D6\u30A2\u30C9\u30EC\u30B9",
5104
5158
  recipientAddressPlaceholder: "\u30A6\u30A9\u30EC\u30C3\u30C8\u30A2\u30C9\u30EC\u30B9\u3092\u5165\u529B",
5159
+ recipientAddressPlaceholderXrpl: "\u30A2\u30C9\u30EC\u30B9\u3001\u307E\u305F\u306F \u30A2\u30C9\u30EC\u30B9:\u30BF\u30B0 \u3092\u5165\u529B",
5105
5160
  amount: "\u91D1\u984D",
5106
5161
  amountPlaceholder: "0.00",
5107
5162
  balance: "\u6B8B\u9AD8",
5108
5163
  minimum: "\u6700\u4F4E",
5109
5164
  withdraw: "\u51FA\u91D1",
5110
5165
  invalidAddress: "\u6709\u52B9\u306A\u30A2\u30C9\u30EC\u30B9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044",
5166
+ invalidXrplAddress: "\u6709\u52B9\u306A{{chain_name}}\u30A2\u30C9\u30EC\u30B9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u53D7\u53D6\u5148\u3067\u5B9B\u5148\u30BF\u30B0\u304C\u5FC5\u8981\u306A\u5834\u5408\u306F\u3001\u300C\u30A2\u30C9\u30EC\u30B9:\u30BF\u30B0\u300D\u306E\u5F62\u5F0F\u3067\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044",
5167
+ memoTag: "\u5B9B\u5148\u30BF\u30B0",
5168
+ memoTagPlaceholder: "\u4F8B: 12345",
5169
+ memoTagRequiredHint: "\u3053\u306E{{chain_name}}\u30A2\u30C9\u30EC\u30B9\u306F\u3001\u8CC7\u91D1\u3092\u53D7\u3051\u53D6\u308B\u305F\u3081\u306B\u5B9B\u5148\u30BF\u30B0\u304C\u5FC5\u8981\u3067\u3059",
5170
+ invalidMemoTag: "\u5B9B\u5148\u30BF\u30B0\u306F 0\u301C4294967295 \u306E\u6574\u6570\u3067\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044",
5111
5171
  invalidAmount: "\u6709\u52B9\u306A\u91D1\u984D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044",
5112
5172
  verifyingAddress: "\u30A2\u30C9\u30EC\u30B9\u3092\u78BA\u8A8D\u3057\u3066\u3044\u307E\u3059...",
5113
5173
  loading: "\u8AAD\u307F\u8FBC\u307F\u4E2D...",
@@ -5157,6 +5217,9 @@ var ko_default = {
5157
5217
  loading: "\uB85C\uB529 \uC911...",
5158
5218
  search: "\uAC80\uC0C9",
5159
5219
  close: "\uB2EB\uAE30",
5220
+ noResults: "\uC77C\uCE58\uD558\uB294 \uD56D\uBAA9\uC774 \uC5C6\uC2B5\uB2C8\uB2E4",
5221
+ selectCountry: "\uAD6D\uAC00 \uC120\uD0DD",
5222
+ selectState: "\uC8FC \uC120\uD0DD",
5160
5223
  review: "\uD655\uC778",
5161
5224
  tryAgain: "\uB2E4\uC2DC \uC2DC\uB3C4",
5162
5225
  somethingWentWrong: "\uBB38\uC81C\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4",
@@ -5379,6 +5442,7 @@ var ko_default = {
5379
5442
  not_opted_in: "\uC790\uAE08\uC744 \uBC1B\uAE30 \uC804\uC5D0 {{chain_name}}\uC5D0\uC11C {{token_symbol}}\uC744(\uB97C) \uC635\uD2B8\uC778\uD558\uC138\uC694",
5380
5443
  insufficient_balance: "\uBC1B\uB294 \uACC4\uC815\uC774 \uCD5C\uC18C \uC794\uC561 \uC694\uAC74\uC744 \uCDA9\uC871\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4",
5381
5444
  account_not_found: "{{chain_name}}\uC5D0 \uBC1B\uB294 \uACC4\uC815\uC774 \uC5C6\uC2B5\uB2C8\uB2E4",
5445
+ destination_tag_required: "\uC774 {{chain_name}} \uC8FC\uC18C\uC5D0\uB294 \uB370\uC2A4\uD2F0\uB124\uC774\uC158 \uD0DC\uADF8\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4. \uD0DC\uADF8\uB3C4 \uD568\uAED8 \uC8FC\uC18C:\uD0DC\uADF8 \uD615\uC2DD\uC73C\uB85C \uC785\uB825\uD558\uC138\uC694",
5382
5446
  validation_error: "{{chain_name}}\uC5D0\uC11C \uBC1B\uB294 \uC8FC\uC18C\uB97C \uD655\uC778\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4"
5383
5447
  },
5384
5448
  defaultError: "\uC120\uD0DD\uD55C \uD1A0\uD070\uC73C\uB85C\uB294 \uC774 \uBC1B\uB294 \uC8FC\uC18C\uC5D0 \uC790\uAE08\uC744 \uBCF4\uB0BC \uC218 \uC5C6\uC2B5\uB2C8\uB2E4"
@@ -5957,12 +6021,18 @@ var ko_default = {
5957
6021
  receiveChain: "\uBC1B\uC744 \uCCB4\uC778",
5958
6022
  recipientAddress: "\uBC1B\uB294 \uC8FC\uC18C",
5959
6023
  recipientAddressPlaceholder: "\uC9C0\uAC11 \uC8FC\uC18C\uB97C \uC785\uB825\uD558\uC138\uC694",
6024
+ recipientAddressPlaceholderXrpl: "\uC8FC\uC18C \uB610\uB294 \uC8FC\uC18C:\uD0DC\uADF8 \uB97C \uC785\uB825\uD558\uC138\uC694",
5960
6025
  amount: "\uAE08\uC561",
5961
6026
  amountPlaceholder: "0.00",
5962
6027
  balance: "\uC794\uC561",
5963
6028
  minimum: "\uCD5C\uC18C",
5964
6029
  withdraw: "\uCD9C\uAE08",
5965
6030
  invalidAddress: "\uC720\uD6A8\uD55C \uC8FC\uC18C\uB97C \uC785\uB825\uD574 \uC8FC\uC138\uC694",
6031
+ invalidXrplAddress: "\uC720\uD6A8\uD55C {{chain_name}} \uC8FC\uC18C\uB97C \uC785\uB825\uD574 \uC8FC\uC138\uC694. \uC218\uCDE8\uC778\uC774 \uB370\uC2A4\uD2F0\uB124\uC774\uC158 \uD0DC\uADF8\uB97C \uC694\uAD6C\uD558\uB294 \uACBD\uC6B0 \uC8FC\uC18C:\uD0DC\uADF8 \uD615\uC2DD\uC73C\uB85C \uD568\uAED8 \uC785\uB825\uD558\uC138\uC694",
6032
+ memoTag: "\uB370\uC2A4\uD2F0\uB124\uC774\uC158 \uD0DC\uADF8",
6033
+ memoTagPlaceholder: "\uC608: 12345",
6034
+ memoTagRequiredHint: "\uC774 {{chain_name}} \uC8FC\uC18C\uB294 \uC790\uAE08\uC744 \uBC1B\uAE30 \uC704\uD574 \uB370\uC2A4\uD2F0\uB124\uC774\uC158 \uD0DC\uADF8\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4",
6035
+ invalidMemoTag: "\uB370\uC2A4\uD2F0\uB124\uC774\uC158 \uD0DC\uADF8\uB294 0\uC5D0\uC11C 4294967295 \uC0AC\uC774\uC758 \uC815\uC218\uC5EC\uC57C \uD569\uB2C8\uB2E4",
5966
6036
  invalidAmount: "\uC720\uD6A8\uD55C \uAE08\uC561\uC744 \uC785\uB825\uD574 \uC8FC\uC138\uC694",
5967
6037
  verifyingAddress: "\uC8FC\uC18C\uB97C \uD655\uC778\uD558\uB294 \uC911...",
5968
6038
  loading: "\uB85C\uB529 \uC911...",
@@ -8980,6 +9050,19 @@ function DepositPollingToasts({
8980
9050
  );
8981
9051
  }
8982
9052
 
9053
+ // src/components/deposits/card-onramp-session.ts
9054
+ var initialCardOnrampSessionState = {
9055
+ active: null,
9056
+ started: false
9057
+ };
9058
+ function startCardOnrampSession(session) {
9059
+ return { active: session, started: true };
9060
+ }
9061
+ function cardOnrampSessionForView(state, view) {
9062
+ if (view === "review" || state.active === null) return state;
9063
+ return { active: null, started: state.started };
9064
+ }
9065
+
8983
9066
  // src/components/deposits/BuyWithCard.tsx
8984
9067
  import { jsx as jsx17, jsxs as jsxs13 } from "react/jsx-runtime";
8985
9068
  function formatFiatAmount(value, symbol) {
@@ -9060,10 +9143,13 @@ function BuyWithCard({
9060
9143
  const [defaultToken, setDefaultToken] = useState11(null);
9061
9144
  const [defaultTokenLoading, setDefaultTokenLoading] = useState11(false);
9062
9145
  const { userIpInfo, isLoading: isLoadingIp } = useUserIp();
9063
- const [onrampSession, setOnrampSession] = useState11(null);
9146
+ const [onrampSession, setOnrampSession] = useState11(initialCardOnrampSessionState);
9064
9147
  const currentView = externalView ?? internalView;
9065
9148
  const showQuotesView = currentView === "quotes";
9066
9149
  const showReviewView = currentView === "review";
9150
+ useEffect8(() => {
9151
+ setOnrampSession((prev) => cardOnrampSessionForView(prev, currentView));
9152
+ }, [currentView]);
9067
9153
  useEffect8(() => {
9068
9154
  if (externalView) {
9069
9155
  setInternalView(externalView);
@@ -9215,7 +9301,7 @@ function BuyWithCard({
9215
9301
  const { executions, isPolling } = useDepositPolling({
9216
9302
  userId,
9217
9303
  publishableKey,
9218
- enabled: !!onrampSession,
9304
+ enabled: onrampSession.started,
9219
9305
  depositWalletId,
9220
9306
  onDepositSuccess,
9221
9307
  onDepositError
@@ -9508,13 +9594,15 @@ function BuyWithCard({
9508
9594
  ...isDestinationMode ? { destination_amount: destinationAmount } : { source_amount: amount }
9509
9595
  };
9510
9596
  const sessionStartUrl = getOnrampSessionStartUrl(sessionRequest, publishableKey);
9511
- setOnrampSession({
9512
- provider: selectedProvider,
9513
- sourceCurrency: currency,
9514
- sourceAmount: amount,
9515
- sessionUrl: sessionStartUrl,
9516
- externalId
9517
- });
9597
+ setOnrampSession(
9598
+ startCardOnrampSession({
9599
+ provider: selectedProvider,
9600
+ sourceCurrency: currency,
9601
+ sourceAmount: amount,
9602
+ sessionUrl: sessionStartUrl,
9603
+ externalId
9604
+ })
9605
+ );
9518
9606
  track("flow_started", {
9519
9607
  method: "card",
9520
9608
  flow_type: "deposit",
@@ -9970,8 +10058,8 @@ function BuyWithCard({
9970
10058
  onToggleDetails: () => setShowReviewDetails((prev) => !prev),
9971
10059
  onContinue: handleStartOnramp,
9972
10060
  continueLabel: strings.common.confirm,
9973
- continueDisabled: !selectedProvider || !!onrampSession,
9974
- checking: !!onrampSession,
10061
+ continueDisabled: !selectedProvider || !!onrampSession.active,
10062
+ checking: !!onrampSession.active,
9975
10063
  disclaimer: strings.common.intentAddressDisclaimer
9976
10064
  }
9977
10065
  )
@@ -19016,6 +19104,11 @@ function useStripeOnramp(stripePublishableKey, isDark = false) {
19016
19104
  return { coordinator, isLoading, error, initialize };
19017
19105
  }
19018
19106
 
19107
+ // src/components/deposits/stripe-link/normalize-kyc-address.ts
19108
+ function normalizeStripeStateCode(raw) {
19109
+ return raw.replace(/[^a-zA-Z]/g, "").slice(0, 2).toUpperCase();
19110
+ }
19111
+
19019
19112
  // src/components/deposits/stripe-link/stripe-session-storage.ts
19020
19113
  var STORAGE_PREFIX = "unifold:stripe-link:session";
19021
19114
  function storageKey(externalUserId) {
@@ -20086,7 +20179,7 @@ function PayWithStripeLink({
20086
20179
  setKycFormMode("name");
20087
20180
  return;
20088
20181
  }
20089
- if (!kycForm.addressLine1.trim() || !kycForm.addressCity.trim() || !kycForm.addressState.trim() || !kycForm.addressPostalCode.trim()) {
20182
+ if (!kycForm.addressLine1.trim() || !kycForm.addressCity.trim() || normalizeStripeStateCode(kycForm.addressState).length !== 2 || !kycForm.addressPostalCode.trim()) {
20090
20183
  setError(t.formErrors.enterFullAddress);
20091
20184
  return;
20092
20185
  }
@@ -20097,7 +20190,8 @@ function PayWithStripeLink({
20097
20190
  line1: kycForm.addressLine1,
20098
20191
  ...kycForm.addressLine2.trim() && { line2: kycForm.addressLine2 },
20099
20192
  city: kycForm.addressCity,
20100
- state: kycForm.addressState,
20193
+ // Stripe requires a 2-letter uppercase code for US/CA (`TX`, not `Tx`).
20194
+ state: normalizeStripeStateCode(kycForm.addressState),
20101
20195
  postal_code: kycForm.addressPostalCode,
20102
20196
  country: kycForm.addressCountry
20103
20197
  }
@@ -21361,9 +21455,14 @@ function PayWithStripeLink({
21361
21455
  ...NO_AUTOFILL,
21362
21456
  type: "text",
21363
21457
  value: kycForm.addressState,
21364
- onChange: (e) => setKycForm((f) => ({ ...f, addressState: e.target.value })),
21458
+ onChange: (e) => setKycForm((f) => ({
21459
+ ...f,
21460
+ addressState: normalizeStripeStateCode(e.target.value)
21461
+ })),
21365
21462
  placeholder: "CA",
21366
21463
  maxLength: 2,
21464
+ autoCapitalize: "characters",
21465
+ spellCheck: false,
21367
21466
  className: "uf-w-full uf-py-2.5 uf-px-3 uf-bg-transparent uf-outline-none uf-text-sm",
21368
21467
  style: inputStyle
21369
21468
  }
@@ -21469,7 +21568,7 @@ function PayWithStripeLink({
21469
21568
  DepositFooterButton,
21470
21569
  {
21471
21570
  onClick: kycFormMode === "name" ? handleNameNext : handleKycSubmit,
21472
- disabled: loading || (kycFormMode === "name" ? !kycForm.givenName || !kycForm.surname : kycFormMode === "address" ? !kycForm.addressLine1 || !kycForm.addressCity || !kycForm.addressState || !kycForm.addressPostalCode : !kycForm.ssn || !kycForm.dob.day || !kycForm.dob.month || !kycForm.dob.year),
21571
+ disabled: loading || (kycFormMode === "name" ? !kycForm.givenName || !kycForm.surname : kycFormMode === "address" ? !kycForm.addressLine1 || !kycForm.addressCity || kycForm.addressState.length !== 2 || !kycForm.addressPostalCode : !kycForm.ssn || !kycForm.dob.day || !kycForm.dob.month || !kycForm.dob.year),
21473
21572
  loading,
21474
21573
  className: "uf-flex-1",
21475
21574
  children: loading ? t.submitting : strings.common.review
@@ -35580,6 +35679,32 @@ async function detectBrowserWallet(chainType, senderAddress) {
35580
35679
  return null;
35581
35680
  }
35582
35681
 
35682
+ // src/lib/xrpl-address.ts
35683
+ var XRPL_BASE58 = "rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz";
35684
+ var CLASSIC_ADDRESS = new RegExp(`^r[${XRPL_BASE58}]{24,34}$`);
35685
+ var X_ADDRESS = new RegExp(`^[XT][${XRPL_BASE58}]{40,50}$`);
35686
+ var MAX_DESTINATION_TAG = 4294967295;
35687
+ function isXrplRecipientShapeValid(input) {
35688
+ const trimmed = input.trim();
35689
+ if (trimmed.length === 0) {
35690
+ return false;
35691
+ }
35692
+ const separatorIndex = trimmed.indexOf(":");
35693
+ if (separatorIndex === -1) {
35694
+ return CLASSIC_ADDRESS.test(trimmed) || X_ADDRESS.test(trimmed);
35695
+ }
35696
+ const address = trimmed.slice(0, separatorIndex);
35697
+ const tag = trimmed.slice(separatorIndex + 1);
35698
+ return isDestinationTagValid(tag) && (CLASSIC_ADDRESS.test(address) || X_ADDRESS.test(address));
35699
+ }
35700
+ function isDestinationTagValid(tag) {
35701
+ if (!/^\d+$/.test(tag)) {
35702
+ return false;
35703
+ }
35704
+ const parsed = Number(tag);
35705
+ return parsed <= MAX_DESTINATION_TAG;
35706
+ }
35707
+
35583
35708
  // src/hooks/use-hypercore-withdraw-activation.ts
35584
35709
  import { useMemo as useMemo22 } from "react";
35585
35710
  import { ActionType as ActionType6 } from "@unifold/core";
@@ -35754,6 +35879,8 @@ function WithdrawForm({
35754
35879
  const t = strings.withdrawModal;
35755
35880
  const tCrypto = strings.transferCrypto;
35756
35881
  const [recipientAddress, setRecipientAddress] = useState47(recipientAddressProp || "");
35882
+ const [memoTag, setMemoTag] = useState47("");
35883
+ const [memoTagRequiredFor, setMemoTagRequiredFor] = useState47(null);
35757
35884
  const [amount, setAmount] = useState47("");
35758
35885
  const [inputUnit, setInputUnit] = useState47("fiat");
35759
35886
  const [isSubmitting, setIsSubmitting] = useState47(false);
@@ -35772,7 +35899,16 @@ function WithdrawForm({
35772
35899
  setIsMaxed(false);
35773
35900
  }, [balanceData?.balanceBaseUnit]);
35774
35901
  const trimmedAddress = recipientAddress.trim();
35775
- const debouncedAddress = useDebounce(trimmedAddress, 500);
35902
+ const trimmedMemoTag = memoTag.trim();
35903
+ const isMemoTagValid = isDestinationTagValid(trimmedMemoTag);
35904
+ const destinationKey = `${selectedChain?.chain_type ?? ""}:${selectedChain?.chain_id ?? ""}:${selectedChain?.token_address ?? ""}`;
35905
+ const recipientKey = `${destinationKey}:${trimmedAddress}`;
35906
+ const memoTagRequired = trimmedAddress.length > 0 && memoTagRequiredFor === recipientKey;
35907
+ const effectiveRecipient = memoTagRequired && isMemoTagValid ? `${trimmedAddress}:${trimmedMemoTag}` : trimmedAddress;
35908
+ const debouncedRecipient = useDebounce(effectiveRecipient, 500);
35909
+ const isXrplDestination = selectedChain?.chain_type === "xrpl";
35910
+ const isXrplRecipientMalformed = isXrplDestination && trimmedAddress.length > 5 && !isXrplRecipientShapeValid(effectiveRecipient);
35911
+ const canVerifyXrplRecipient = !isXrplDestination || isXrplRecipientShapeValid(debouncedRecipient);
35776
35912
  const {
35777
35913
  data: addressVerification,
35778
35914
  isLoading: isVerifyingAddress,
@@ -35781,16 +35917,36 @@ function WithdrawForm({
35781
35917
  chainType: selectedChain?.chain_type,
35782
35918
  chainId: selectedChain?.chain_id,
35783
35919
  tokenAddress: selectedChain?.token_address,
35784
- recipientAddress: debouncedAddress,
35920
+ recipientAddress: debouncedRecipient,
35785
35921
  publishableKey,
35786
- enabled: debouncedAddress.length > 5 && !!selectedChain
35922
+ enabled: debouncedRecipient.length > 5 && !!selectedChain && canVerifyXrplRecipient
35787
35923
  });
35788
- const isDebouncing = trimmedAddress !== debouncedAddress;
35924
+ const isDebouncing = effectiveRecipient !== debouncedRecipient;
35925
+ const verifiedRecipientKey = `${destinationKey}:${debouncedRecipient}`;
35926
+ useEffect45(() => {
35927
+ if (addressVerification?.failure_code === "destination_tag_required") {
35928
+ setMemoTagRequiredFor(verifiedRecipientKey);
35929
+ }
35930
+ }, [addressVerification, verifiedRecipientKey]);
35931
+ useEffect45(() => {
35932
+ setMemoTag("");
35933
+ }, [recipientKey]);
35934
+ const xrplFormatHint = useMemo23(
35935
+ () => interpolate(t.invalidXrplAddress, {
35936
+ chain_name: selectedChain?.chain_name ?? "XRP Ledger"
35937
+ }),
35938
+ [t, selectedChain]
35939
+ );
35789
35940
  const addressError = useMemo23(() => {
35790
35941
  if (!trimmedAddress || trimmedAddress.length <= 5) return null;
35942
+ if (isXrplRecipientMalformed) return xrplFormatHint;
35791
35943
  if (isDebouncing || isVerifyingAddress) return null;
35792
- if (verifyError) return t.invalidAddress;
35944
+ if (verifyError) return isXrplDestination ? xrplFormatHint : t.invalidAddress;
35793
35945
  if (addressVerification && !addressVerification.valid) {
35946
+ if (addressVerification.failure_code === "destination_tag_required")
35947
+ return memoTagRequired ? null : interpolate(tCrypto.addressValidation.errors.destination_tag_required, {
35948
+ chain_name: selectedChain?.chain_name ?? ""
35949
+ });
35794
35950
  if (addressVerification.message && addressVerification.message.trim().length > 0) {
35795
35951
  return addressVerification.message;
35796
35952
  }
@@ -35803,13 +35959,17 @@ function WithdrawForm({
35803
35959
  token_symbol: selectedToken?.symbol ?? "",
35804
35960
  chain_name: selectedChain?.chain_name ?? ""
35805
35961
  });
35806
- return t.invalidAddress;
35962
+ return isXrplDestination ? xrplFormatHint : t.invalidAddress;
35807
35963
  }
35808
35964
  return null;
35809
35965
  }, [
35810
35966
  trimmedAddress,
35811
35967
  isDebouncing,
35812
35968
  isVerifyingAddress,
35969
+ isXrplDestination,
35970
+ isXrplRecipientMalformed,
35971
+ memoTagRequired,
35972
+ xrplFormatHint,
35813
35973
  verifyError,
35814
35974
  addressVerification,
35815
35975
  selectedChain,
@@ -35817,6 +35977,7 @@ function WithdrawForm({
35817
35977
  t,
35818
35978
  tCrypto
35819
35979
  ]);
35980
+ const memoTagError = memoTagRequired && trimmedMemoTag.length > 0 && !isMemoTagValid ? t.invalidMemoTag : null;
35820
35981
  const isAddressValid = !isDebouncing && !!addressVerification?.valid && !addressError;
35821
35982
  const { showWarning: showActivationWarning, activationFee: effectiveActivationFee } = useHypercoreWithdrawActivation({
35822
35983
  userId: externalUserId,
@@ -35824,7 +35985,7 @@ function WithdrawForm({
35824
35985
  senderAddress,
35825
35986
  sourceChainId,
35826
35987
  sourceChainType,
35827
- recipientAddress: debouncedAddress,
35988
+ recipientAddress: debouncedRecipient,
35828
35989
  destinationChainType: selectedChain?.chain_type,
35829
35990
  destinationChainId: selectedChain?.chain_id,
35830
35991
  destinationTokenAddress: selectedChain?.token_address,
@@ -35938,7 +36099,7 @@ function WithdrawForm({
35938
36099
  const isBalanceBelowMinimum = !isLoadingBalance && minimumWithdrawAmountUsd !== null && Math.round(balanceUsdNum * 100) / 100 < minimumWithdrawAmountUsd;
35939
36100
  const isBelowMinimum = minimumWithdrawAmountUsd !== null && fiatAmountFromInput > 0 && Math.round(fiatAmountFromInput * 100) / 100 < minimumWithdrawAmountUsd;
35940
36101
  const isOverBalance = inputUnit === "crypto" ? cryptoAmountFromInput > 0 && balanceCrypto > 0 && cryptoAmountFromInput > balanceCrypto : fiatAmountFromInput > 0 && balanceUsdNum > 0 && Math.round(fiatAmountFromInput * 100) / 100 > Math.round(balanceUsdNum * 100) / 100;
35941
- const isFormValid = trimmedAddress.length > 0 && amount.trim().length > 0 && cryptoAmountFromInput > 0 && isAddressValid && !isBelowMinimum && !isOverBalance && !isBalanceBelowMinimum && !!balanceData;
36102
+ const isFormValid = trimmedAddress.length > 0 && amount.trim().length > 0 && cryptoAmountFromInput > 0 && isAddressValid && !(memoTagRequired && !isMemoTagValid) && !isBelowMinimum && !isOverBalance && !isBalanceBelowMinimum && !!balanceData;
35942
36103
  const handleWithdraw = useCallback18(async () => {
35943
36104
  if (!selectedToken || !selectedChain) return;
35944
36105
  if (!isFormValid) return;
@@ -35952,7 +36113,7 @@ function WithdrawForm({
35952
36113
  destinationChainType: selectedChain.chain_type,
35953
36114
  destinationChainId: selectedChain.chain_id,
35954
36115
  destinationTokenAddress: selectedChain.token_address,
35955
- recipientAddress: trimmedAddress
36116
+ recipientAddress: effectiveRecipient
35956
36117
  });
35957
36118
  let amountBaseUnit = isMaxed ? balanceData.balanceBaseUnit : computeBaseUnit(
35958
36119
  balanceData.balanceBaseUnit,
@@ -36001,7 +36162,7 @@ function WithdrawForm({
36001
36162
  amount: humanAmount,
36002
36163
  amountBaseUnit,
36003
36164
  withdrawIntentAddress: depositWallet.address,
36004
- recipientAddress: trimmedAddress
36165
+ recipientAddress: effectiveRecipient
36005
36166
  };
36006
36167
  const usdValue = isMaxed ? balanceUsdNum : fiatAmountFromInput;
36007
36168
  onWithdrawStarted?.({
@@ -36038,7 +36199,7 @@ function WithdrawForm({
36038
36199
  isFormValid,
36039
36200
  cryptoAmountFromInput,
36040
36201
  sourceDecimals,
36041
- trimmedAddress,
36202
+ effectiveRecipient,
36042
36203
  publishableKey,
36043
36204
  onWithdraw,
36044
36205
  sourceChainType,
@@ -36089,7 +36250,7 @@ function WithdrawForm({
36089
36250
  "input",
36090
36251
  {
36091
36252
  type: "text",
36092
- placeholder: t.recipientAddressPlaceholder,
36253
+ placeholder: isXrplDestination ? t.recipientAddressPlaceholderXrpl : t.recipientAddressPlaceholder,
36093
36254
  value: recipientAddress,
36094
36255
  onChange: (e) => {
36095
36256
  setRecipientAddress(e.target.value);
@@ -36125,7 +36286,7 @@ function WithdrawForm({
36125
36286
  ]
36126
36287
  }
36127
36288
  ),
36128
- (isDebouncing || isVerifyingAddress) && trimmedAddress.length > 5 && /* @__PURE__ */ jsxs68("div", { className: "uf-flex uf-items-center uf-gap-1.5 uf-mt-1.5", children: [
36289
+ (isDebouncing || isVerifyingAddress) && trimmedAddress.length > 5 && !addressError && /* @__PURE__ */ jsxs68("div", { className: "uf-flex uf-items-center uf-gap-1.5 uf-mt-1.5", children: [
36129
36290
  /* @__PURE__ */ jsx79(
36130
36291
  Loader213,
36131
36292
  {
@@ -36147,6 +36308,61 @@ function WithdrawForm({
36147
36308
  /* @__PURE__ */ jsx79("span", { className: "uf-text-xs", style: { color: colors2.error, fontFamily: fonts.regular }, children: addressError })
36148
36309
  ] })
36149
36310
  ] }),
36311
+ memoTagRequired && /* @__PURE__ */ jsxs68("div", { children: [
36312
+ /* @__PURE__ */ jsx79(
36313
+ "div",
36314
+ {
36315
+ className: "uf-text-xs uf-mb-1.5",
36316
+ style: { color: components.card.labelColor, fontFamily: fonts.medium },
36317
+ children: t.memoTag
36318
+ }
36319
+ ),
36320
+ /* @__PURE__ */ jsx79(
36321
+ "style",
36322
+ {
36323
+ dangerouslySetInnerHTML: {
36324
+ __html: `.uf-withdraw-memo::placeholder { color: ${components.search.placeholderColor}; }`
36325
+ }
36326
+ }
36327
+ ),
36328
+ /* @__PURE__ */ jsx79(
36329
+ "input",
36330
+ {
36331
+ type: "text",
36332
+ inputMode: "numeric",
36333
+ placeholder: t.memoTagPlaceholder,
36334
+ value: memoTag,
36335
+ onChange: (e) => {
36336
+ setMemoTag(e.target.value);
36337
+ setSubmitError(null);
36338
+ },
36339
+ className: "uf-withdraw-memo uf-w-full uf-px-3 uf-py-2.5 uf-text-sm uf-outline-none",
36340
+ style: {
36341
+ backgroundColor: components.search.backgroundColor,
36342
+ borderRadius: components.input.borderRadius,
36343
+ border: `${components.input.borderWidth}px solid ${memoTagError ? colors2.error : components.input.borderColor}`,
36344
+ color: components.search.inputColor,
36345
+ fontFamily: fonts.regular
36346
+ }
36347
+ }
36348
+ ),
36349
+ /* @__PURE__ */ jsxs68("div", { className: "uf-flex uf-items-center uf-gap-1.5 uf-mt-1.5", children: [
36350
+ memoTagError && /* @__PURE__ */ jsx79(AlertTriangle7, { className: "uf-w-3 uf-h-3", style: { color: colors2.error } }),
36351
+ /* @__PURE__ */ jsx79(
36352
+ "span",
36353
+ {
36354
+ className: "uf-text-xs",
36355
+ style: {
36356
+ color: memoTagError ? colors2.error : colors2.foregroundMuted,
36357
+ fontFamily: fonts.regular
36358
+ },
36359
+ children: memoTagError ?? interpolate(t.memoTagRequiredHint, {
36360
+ chain_name: selectedChain?.chain_name ?? "XRP Ledger"
36361
+ })
36362
+ }
36363
+ )
36364
+ ] })
36365
+ ] }),
36150
36366
  /* @__PURE__ */ jsxs68("div", { children: [
36151
36367
  /* @__PURE__ */ jsxs68(
36152
36368
  "div",
@@ -37464,7 +37680,1062 @@ function WithdrawTokenSelector({ tokens, onSelect, onBack }) {
37464
37680
  ) })
37465
37681
  ] });
37466
37682
  }
37683
+
37684
+ // src/lib/countries/countries.ts
37685
+ var COUNTRIES = [
37686
+ { alpha2: "AD", name: "Andorra", dialCode: "376" },
37687
+ { alpha2: "AE", name: "United Arab Emirates", dialCode: "971" },
37688
+ { alpha2: "AF", name: "Afghanistan", dialCode: "93" },
37689
+ { alpha2: "AG", name: "Antigua and Barbuda", dialCode: "1" },
37690
+ { alpha2: "AI", name: "Anguilla", dialCode: "1" },
37691
+ { alpha2: "AL", name: "Albania", dialCode: "355" },
37692
+ { alpha2: "AM", name: "Armenia", dialCode: "374" },
37693
+ { alpha2: "AO", name: "Angola", dialCode: "244" },
37694
+ { alpha2: "AQ", name: "Antarctica" },
37695
+ { alpha2: "AR", name: "Argentina", dialCode: "54" },
37696
+ { alpha2: "AS", name: "American Samoa", dialCode: "1" },
37697
+ { alpha2: "AT", name: "Austria", dialCode: "43" },
37698
+ { alpha2: "AU", name: "Australia", dialCode: "61" },
37699
+ { alpha2: "AW", name: "Aruba", dialCode: "297" },
37700
+ { alpha2: "AX", name: "\xC5land Islands", dialCode: "358" },
37701
+ { alpha2: "AZ", name: "Azerbaijan", dialCode: "994" },
37702
+ { alpha2: "BA", name: "Bosnia and Herzegovina", dialCode: "387" },
37703
+ { alpha2: "BB", name: "Barbados", dialCode: "1" },
37704
+ { alpha2: "BD", name: "Bangladesh", dialCode: "880" },
37705
+ { alpha2: "BE", name: "Belgium", dialCode: "32" },
37706
+ { alpha2: "BF", name: "Burkina Faso", dialCode: "226" },
37707
+ { alpha2: "BG", name: "Bulgaria", dialCode: "359" },
37708
+ { alpha2: "BH", name: "Bahrain", dialCode: "973" },
37709
+ { alpha2: "BI", name: "Burundi", dialCode: "257" },
37710
+ { alpha2: "BJ", name: "Benin", dialCode: "229" },
37711
+ { alpha2: "BL", name: "Saint Barth\xE9lemy", dialCode: "590" },
37712
+ { alpha2: "BM", name: "Bermuda", dialCode: "1" },
37713
+ { alpha2: "BN", name: "Brunei", dialCode: "673" },
37714
+ { alpha2: "BO", name: "Bolivia", dialCode: "591" },
37715
+ { alpha2: "BQ", name: "Bonaire, Sint Eustatius and Saba", dialCode: "599" },
37716
+ { alpha2: "BR", name: "Brazil", dialCode: "55" },
37717
+ { alpha2: "BS", name: "Bahamas", dialCode: "1" },
37718
+ { alpha2: "BT", name: "Bhutan", dialCode: "975" },
37719
+ { alpha2: "BV", name: "Bouvet Island" },
37720
+ { alpha2: "BW", name: "Botswana", dialCode: "267" },
37721
+ { alpha2: "BY", name: "Belarus", dialCode: "375" },
37722
+ { alpha2: "BZ", name: "Belize", dialCode: "501" },
37723
+ { alpha2: "CA", name: "Canada", dialCode: "1" },
37724
+ { alpha2: "CC", name: "Cocos (Keeling) Islands", dialCode: "61" },
37725
+ { alpha2: "CD", name: "Congo (Democratic Republic)", dialCode: "243" },
37726
+ { alpha2: "CF", name: "Central African Republic", dialCode: "236" },
37727
+ { alpha2: "CG", name: "Congo (Republic)", dialCode: "242" },
37728
+ { alpha2: "CH", name: "Switzerland", dialCode: "41" },
37729
+ { alpha2: "CI", name: "C\xF4te d'Ivoire", dialCode: "225" },
37730
+ { alpha2: "CK", name: "Cook Islands", dialCode: "682" },
37731
+ { alpha2: "CL", name: "Chile", dialCode: "56" },
37732
+ { alpha2: "CM", name: "Cameroon", dialCode: "237" },
37733
+ { alpha2: "CN", name: "China", dialCode: "86" },
37734
+ { alpha2: "CO", name: "Colombia", dialCode: "57" },
37735
+ { alpha2: "CR", name: "Costa Rica", dialCode: "506" },
37736
+ { alpha2: "CU", name: "Cuba", dialCode: "53" },
37737
+ { alpha2: "CV", name: "Cabo Verde", dialCode: "238" },
37738
+ { alpha2: "CW", name: "Cura\xE7ao", dialCode: "599" },
37739
+ { alpha2: "CX", name: "Christmas Island", dialCode: "61" },
37740
+ { alpha2: "CY", name: "Cyprus", dialCode: "357" },
37741
+ { alpha2: "CZ", name: "Czech Republic", dialCode: "420" },
37742
+ { alpha2: "DE", name: "Germany", dialCode: "49" },
37743
+ { alpha2: "DJ", name: "Djibouti", dialCode: "253" },
37744
+ { alpha2: "DK", name: "Denmark", dialCode: "45" },
37745
+ { alpha2: "DM", name: "Dominica", dialCode: "1" },
37746
+ { alpha2: "DO", name: "Dominican Republic", dialCode: "1" },
37747
+ { alpha2: "DZ", name: "Algeria", dialCode: "213" },
37748
+ { alpha2: "EC", name: "Ecuador", dialCode: "593" },
37749
+ { alpha2: "EE", name: "Estonia", dialCode: "372" },
37750
+ { alpha2: "EG", name: "Egypt", dialCode: "20" },
37751
+ { alpha2: "EH", name: "Western Sahara", dialCode: "212" },
37752
+ { alpha2: "ER", name: "Eritrea", dialCode: "291" },
37753
+ { alpha2: "ES", name: "Spain", dialCode: "34" },
37754
+ { alpha2: "ET", name: "Ethiopia", dialCode: "251" },
37755
+ { alpha2: "FI", name: "Finland", dialCode: "358" },
37756
+ { alpha2: "FJ", name: "Fiji", dialCode: "679" },
37757
+ { alpha2: "FK", name: "Falkland Islands", dialCode: "500" },
37758
+ { alpha2: "FM", name: "Micronesia", dialCode: "691" },
37759
+ { alpha2: "FO", name: "Faroe Islands", dialCode: "298" },
37760
+ { alpha2: "FR", name: "France", dialCode: "33" },
37761
+ { alpha2: "GA", name: "Gabon", dialCode: "241" },
37762
+ { alpha2: "GB", name: "United Kingdom", dialCode: "44" },
37763
+ { alpha2: "GD", name: "Grenada", dialCode: "1" },
37764
+ { alpha2: "GE", name: "Georgia", dialCode: "995" },
37765
+ { alpha2: "GF", name: "French Guiana", dialCode: "594" },
37766
+ { alpha2: "GG", name: "Guernsey", dialCode: "44" },
37767
+ { alpha2: "GH", name: "Ghana", dialCode: "233" },
37768
+ { alpha2: "GI", name: "Gibraltar", dialCode: "350" },
37769
+ { alpha2: "GL", name: "Greenland", dialCode: "299" },
37770
+ { alpha2: "GM", name: "Gambia", dialCode: "220" },
37771
+ { alpha2: "GN", name: "Guinea", dialCode: "224" },
37772
+ { alpha2: "GP", name: "Guadeloupe", dialCode: "590" },
37773
+ { alpha2: "GQ", name: "Equatorial Guinea", dialCode: "240" },
37774
+ { alpha2: "GR", name: "Greece", dialCode: "30" },
37775
+ { alpha2: "GS", name: "South Georgia and the South Sandwich Islands" },
37776
+ { alpha2: "GT", name: "Guatemala", dialCode: "502" },
37777
+ { alpha2: "GU", name: "Guam", dialCode: "1" },
37778
+ { alpha2: "GW", name: "Guinea-Bissau", dialCode: "245" },
37779
+ { alpha2: "GY", name: "Guyana", dialCode: "592" },
37780
+ { alpha2: "HK", name: "Hong Kong", dialCode: "852" },
37781
+ { alpha2: "HM", name: "Heard Island and McDonald Islands" },
37782
+ { alpha2: "HN", name: "Honduras", dialCode: "504" },
37783
+ { alpha2: "HR", name: "Croatia", dialCode: "385" },
37784
+ { alpha2: "HT", name: "Haiti", dialCode: "509" },
37785
+ { alpha2: "HU", name: "Hungary", dialCode: "36" },
37786
+ { alpha2: "ID", name: "Indonesia", dialCode: "62" },
37787
+ { alpha2: "IE", name: "Ireland", dialCode: "353" },
37788
+ { alpha2: "IL", name: "Israel", dialCode: "972" },
37789
+ { alpha2: "IM", name: "Isle of Man", dialCode: "44" },
37790
+ { alpha2: "IN", name: "India", dialCode: "91" },
37791
+ { alpha2: "IO", name: "British Indian Ocean Territory", dialCode: "246" },
37792
+ { alpha2: "IQ", name: "Iraq", dialCode: "964" },
37793
+ { alpha2: "IR", name: "Iran", dialCode: "98" },
37794
+ { alpha2: "IS", name: "Iceland", dialCode: "354" },
37795
+ { alpha2: "IT", name: "Italy", dialCode: "39" },
37796
+ { alpha2: "JE", name: "Jersey", dialCode: "44" },
37797
+ { alpha2: "JM", name: "Jamaica", dialCode: "1" },
37798
+ { alpha2: "JO", name: "Jordan", dialCode: "962" },
37799
+ { alpha2: "JP", name: "Japan", dialCode: "81" },
37800
+ { alpha2: "KE", name: "Kenya", dialCode: "254" },
37801
+ { alpha2: "KG", name: "Kyrgyzstan", dialCode: "996" },
37802
+ { alpha2: "KH", name: "Cambodia", dialCode: "855" },
37803
+ { alpha2: "KI", name: "Kiribati", dialCode: "686" },
37804
+ { alpha2: "KM", name: "Comoros", dialCode: "269" },
37805
+ { alpha2: "KN", name: "Saint Kitts and Nevis", dialCode: "1" },
37806
+ { alpha2: "KP", name: "North Korea", dialCode: "850" },
37807
+ { alpha2: "KR", name: "South Korea", dialCode: "82" },
37808
+ { alpha2: "KW", name: "Kuwait", dialCode: "965" },
37809
+ { alpha2: "KY", name: "Cayman Islands", dialCode: "1" },
37810
+ { alpha2: "KZ", name: "Kazakhstan", dialCode: "7" },
37811
+ { alpha2: "LA", name: "Laos", dialCode: "856" },
37812
+ { alpha2: "LB", name: "Lebanon", dialCode: "961" },
37813
+ { alpha2: "LC", name: "Saint Lucia", dialCode: "1" },
37814
+ { alpha2: "LI", name: "Liechtenstein", dialCode: "423" },
37815
+ { alpha2: "LK", name: "Sri Lanka", dialCode: "94" },
37816
+ { alpha2: "LR", name: "Liberia", dialCode: "231" },
37817
+ { alpha2: "LS", name: "Lesotho", dialCode: "266" },
37818
+ { alpha2: "LT", name: "Lithuania", dialCode: "370" },
37819
+ { alpha2: "LU", name: "Luxembourg", dialCode: "352" },
37820
+ { alpha2: "LV", name: "Latvia", dialCode: "371" },
37821
+ { alpha2: "LY", name: "Libya", dialCode: "218" },
37822
+ { alpha2: "MA", name: "Morocco", dialCode: "212" },
37823
+ { alpha2: "MC", name: "Monaco", dialCode: "377" },
37824
+ { alpha2: "MD", name: "Moldova", dialCode: "373" },
37825
+ { alpha2: "ME", name: "Montenegro", dialCode: "382" },
37826
+ { alpha2: "MF", name: "Saint Martin (French part)", dialCode: "590" },
37827
+ { alpha2: "MG", name: "Madagascar", dialCode: "261" },
37828
+ { alpha2: "MH", name: "Marshall Islands", dialCode: "692" },
37829
+ { alpha2: "MK", name: "North Macedonia", dialCode: "389" },
37830
+ { alpha2: "ML", name: "Mali", dialCode: "223" },
37831
+ { alpha2: "MM", name: "Myanmar", dialCode: "95" },
37832
+ { alpha2: "MN", name: "Mongolia", dialCode: "976" },
37833
+ { alpha2: "MO", name: "Macao", dialCode: "853" },
37834
+ { alpha2: "MP", name: "Northern Mariana Islands", dialCode: "1" },
37835
+ { alpha2: "MQ", name: "Martinique", dialCode: "596" },
37836
+ { alpha2: "MR", name: "Mauritania", dialCode: "222" },
37837
+ { alpha2: "MS", name: "Montserrat", dialCode: "1" },
37838
+ { alpha2: "MT", name: "Malta", dialCode: "356" },
37839
+ { alpha2: "MU", name: "Mauritius", dialCode: "230" },
37840
+ { alpha2: "MV", name: "Maldives", dialCode: "960" },
37841
+ { alpha2: "MW", name: "Malawi", dialCode: "265" },
37842
+ { alpha2: "MX", name: "Mexico", dialCode: "52" },
37843
+ { alpha2: "MY", name: "Malaysia", dialCode: "60" },
37844
+ { alpha2: "MZ", name: "Mozambique", dialCode: "258" },
37845
+ { alpha2: "NA", name: "Namibia", dialCode: "264" },
37846
+ { alpha2: "NC", name: "New Caledonia", dialCode: "687" },
37847
+ { alpha2: "NE", name: "Niger", dialCode: "227" },
37848
+ { alpha2: "NF", name: "Norfolk Island", dialCode: "672" },
37849
+ { alpha2: "NG", name: "Nigeria", dialCode: "234" },
37850
+ { alpha2: "NI", name: "Nicaragua", dialCode: "505" },
37851
+ { alpha2: "NL", name: "Netherlands", dialCode: "31" },
37852
+ { alpha2: "NO", name: "Norway", dialCode: "47" },
37853
+ { alpha2: "NP", name: "Nepal", dialCode: "977" },
37854
+ { alpha2: "NR", name: "Nauru", dialCode: "674" },
37855
+ { alpha2: "NU", name: "Niue", dialCode: "683" },
37856
+ { alpha2: "NZ", name: "New Zealand", dialCode: "64" },
37857
+ { alpha2: "OM", name: "Oman", dialCode: "968" },
37858
+ { alpha2: "PA", name: "Panama", dialCode: "507" },
37859
+ { alpha2: "PE", name: "Peru", dialCode: "51" },
37860
+ { alpha2: "PF", name: "French Polynesia", dialCode: "689" },
37861
+ { alpha2: "PG", name: "Papua New Guinea", dialCode: "675" },
37862
+ { alpha2: "PH", name: "Philippines", dialCode: "63" },
37863
+ { alpha2: "PK", name: "Pakistan", dialCode: "92" },
37864
+ { alpha2: "PL", name: "Poland", dialCode: "48" },
37865
+ { alpha2: "PM", name: "Saint Pierre and Miquelon", dialCode: "508" },
37866
+ { alpha2: "PN", name: "Pitcairn", dialCode: "64" },
37867
+ { alpha2: "PR", name: "Puerto Rico", dialCode: "1" },
37868
+ { alpha2: "PS", name: "Palestine", dialCode: "970" },
37869
+ { alpha2: "PT", name: "Portugal", dialCode: "351" },
37870
+ { alpha2: "PW", name: "Palau", dialCode: "680" },
37871
+ { alpha2: "PY", name: "Paraguay", dialCode: "595" },
37872
+ { alpha2: "QA", name: "Qatar", dialCode: "974" },
37873
+ { alpha2: "RE", name: "R\xE9union", dialCode: "262" },
37874
+ { alpha2: "RO", name: "Romania", dialCode: "40" },
37875
+ { alpha2: "RS", name: "Serbia", dialCode: "381" },
37876
+ { alpha2: "RU", name: "Russia", dialCode: "7" },
37877
+ { alpha2: "RW", name: "Rwanda", dialCode: "250" },
37878
+ { alpha2: "SA", name: "Saudi Arabia", dialCode: "966" },
37879
+ { alpha2: "SB", name: "Solomon Islands", dialCode: "677" },
37880
+ { alpha2: "SC", name: "Seychelles", dialCode: "248" },
37881
+ { alpha2: "SD", name: "Sudan", dialCode: "249" },
37882
+ { alpha2: "SE", name: "Sweden", dialCode: "46" },
37883
+ { alpha2: "SG", name: "Singapore", dialCode: "65" },
37884
+ { alpha2: "SH", name: "Saint Helena, Ascension and Tristan da Cunha", dialCode: "290" },
37885
+ { alpha2: "SI", name: "Slovenia", dialCode: "386" },
37886
+ { alpha2: "SJ", name: "Svalbard and Jan Mayen", dialCode: "47" },
37887
+ { alpha2: "SK", name: "Slovakia", dialCode: "421" },
37888
+ { alpha2: "SL", name: "Sierra Leone", dialCode: "232" },
37889
+ { alpha2: "SM", name: "San Marino", dialCode: "378" },
37890
+ { alpha2: "SN", name: "Senegal", dialCode: "221" },
37891
+ { alpha2: "SO", name: "Somalia", dialCode: "252" },
37892
+ { alpha2: "SR", name: "Suriname", dialCode: "597" },
37893
+ { alpha2: "SS", name: "South Sudan", dialCode: "211" },
37894
+ { alpha2: "ST", name: "Sao Tome and Principe", dialCode: "239" },
37895
+ { alpha2: "SV", name: "El Salvador", dialCode: "503" },
37896
+ { alpha2: "SX", name: "Sint Maarten (Dutch part)", dialCode: "1" },
37897
+ { alpha2: "SY", name: "Syria", dialCode: "963" },
37898
+ { alpha2: "SZ", name: "Eswatini", dialCode: "268" },
37899
+ { alpha2: "TC", name: "Turks and Caicos Islands", dialCode: "1" },
37900
+ { alpha2: "TD", name: "Chad", dialCode: "235" },
37901
+ { alpha2: "TF", name: "French Southern Territories" },
37902
+ { alpha2: "TG", name: "Togo", dialCode: "228" },
37903
+ { alpha2: "TH", name: "Thailand", dialCode: "66" },
37904
+ { alpha2: "TJ", name: "Tajikistan", dialCode: "992" },
37905
+ { alpha2: "TK", name: "Tokelau", dialCode: "690" },
37906
+ { alpha2: "TL", name: "Timor-Leste", dialCode: "670" },
37907
+ { alpha2: "TM", name: "Turkmenistan", dialCode: "993" },
37908
+ { alpha2: "TN", name: "Tunisia", dialCode: "216" },
37909
+ { alpha2: "TO", name: "Tonga", dialCode: "676" },
37910
+ { alpha2: "TR", name: "T\xFCrkiye", dialCode: "90" },
37911
+ { alpha2: "TT", name: "Trinidad and Tobago", dialCode: "1" },
37912
+ { alpha2: "TV", name: "Tuvalu", dialCode: "688" },
37913
+ { alpha2: "TW", name: "Taiwan", dialCode: "886" },
37914
+ { alpha2: "TZ", name: "Tanzania", dialCode: "255" },
37915
+ { alpha2: "UA", name: "Ukraine", dialCode: "380" },
37916
+ { alpha2: "UG", name: "Uganda", dialCode: "256" },
37917
+ { alpha2: "UM", name: "U.S. Minor Outlying Islands" },
37918
+ { alpha2: "US", name: "United States", dialCode: "1" },
37919
+ { alpha2: "UY", name: "Uruguay", dialCode: "598" },
37920
+ { alpha2: "UZ", name: "Uzbekistan", dialCode: "998" },
37921
+ { alpha2: "VA", name: "Vatican City", dialCode: "39" },
37922
+ { alpha2: "VC", name: "Saint Vincent and the Grenadines", dialCode: "1" },
37923
+ { alpha2: "VE", name: "Venezuela", dialCode: "58" },
37924
+ { alpha2: "VG", name: "British Virgin Islands", dialCode: "1" },
37925
+ { alpha2: "VI", name: "U.S. Virgin Islands", dialCode: "1" },
37926
+ { alpha2: "VN", name: "Vietnam", dialCode: "84" },
37927
+ { alpha2: "VU", name: "Vanuatu", dialCode: "678" },
37928
+ { alpha2: "WF", name: "Wallis and Futuna", dialCode: "681" },
37929
+ { alpha2: "WS", name: "Samoa", dialCode: "685" },
37930
+ { alpha2: "YE", name: "Yemen", dialCode: "967" },
37931
+ { alpha2: "YT", name: "Mayotte", dialCode: "262" },
37932
+ { alpha2: "ZA", name: "South Africa", dialCode: "27" },
37933
+ { alpha2: "ZM", name: "Zambia", dialCode: "260" },
37934
+ { alpha2: "ZW", name: "Zimbabwe", dialCode: "263" }
37935
+ ];
37936
+ var BY_ALPHA2 = new Map(COUNTRIES.map((c) => [c.alpha2, c]));
37937
+ var ALL_COUNTRIES = [...COUNTRIES].sort(
37938
+ (a, b) => a.name.localeCompare(b.name)
37939
+ );
37940
+ function findCountry(code) {
37941
+ const upper = (code ?? "").trim().toUpperCase();
37942
+ return upper.length === 2 ? BY_ALPHA2.get(upper) : void 0;
37943
+ }
37944
+ function toAlpha2(code) {
37945
+ return findCountry(code)?.alpha2;
37946
+ }
37947
+ function countryName(code) {
37948
+ return findCountry(code)?.name ?? code;
37949
+ }
37950
+ function dialCode(code) {
37951
+ return findCountry(code)?.dialCode;
37952
+ }
37953
+
37954
+ // src/lib/countries/groups.ts
37955
+ var US = ["US"];
37956
+ var CANADA = ["CA"];
37957
+ var UK = ["GB"];
37958
+ var EU = [
37959
+ "AT",
37960
+ "BE",
37961
+ "BG",
37962
+ "HR",
37963
+ "CY",
37964
+ "CZ",
37965
+ "DK",
37966
+ "EE",
37967
+ "FI",
37968
+ "FR",
37969
+ "DE",
37970
+ "GR",
37971
+ "HU",
37972
+ "IE",
37973
+ "IT",
37974
+ "LV",
37975
+ "LT",
37976
+ "LU",
37977
+ "MT",
37978
+ "NL",
37979
+ "PL",
37980
+ "PT",
37981
+ "RO",
37982
+ "SK",
37983
+ "SI",
37984
+ "ES",
37985
+ "SE"
37986
+ ];
37987
+ var EEA = [...EU, "IS", "LI", "NO"];
37988
+ var EUROPE = [
37989
+ ...EEA,
37990
+ ...UK,
37991
+ "CH",
37992
+ "AD",
37993
+ "MC",
37994
+ "SM",
37995
+ "VA",
37996
+ "GI",
37997
+ "GG",
37998
+ "JE",
37999
+ "IM",
38000
+ "FO",
38001
+ "AX",
38002
+ "SJ",
38003
+ "GL",
38004
+ "PM",
38005
+ "AL",
38006
+ "BA",
38007
+ "ME",
38008
+ "MK",
38009
+ "RS",
38010
+ "MD",
38011
+ "UA",
38012
+ "BY",
38013
+ "RU",
38014
+ "GE",
38015
+ "AM",
38016
+ "AZ",
38017
+ "TR"
38018
+ ];
38019
+ var INDIA = ["IN"];
38020
+ var SEA = ["BN", "KH", "ID", "LA", "MY", "MM", "PH", "SG", "TH", "VN", "TL"];
38021
+ var ASIA = [
38022
+ ...SEA,
38023
+ ...INDIA,
38024
+ "CN",
38025
+ "HK",
38026
+ "MO",
38027
+ "TW",
38028
+ "JP",
38029
+ "KR",
38030
+ "KP",
38031
+ "MN",
38032
+ "PK",
38033
+ "BD",
38034
+ "LK",
38035
+ "NP",
38036
+ "BT",
38037
+ "MV",
38038
+ "AF",
38039
+ "KZ",
38040
+ "KG",
38041
+ "TJ",
38042
+ "TM",
38043
+ "UZ"
38044
+ ];
38045
+ var MENA = [
38046
+ "AE",
38047
+ "SA",
38048
+ "QA",
38049
+ "KW",
38050
+ "BH",
38051
+ "OM",
38052
+ "YE",
38053
+ "IQ",
38054
+ "IR",
38055
+ "IL",
38056
+ "PS",
38057
+ "JO",
38058
+ "LB",
38059
+ "SY",
38060
+ "EG",
38061
+ "LY",
38062
+ "TN",
38063
+ "DZ",
38064
+ "MA",
38065
+ "EH"
38066
+ ];
38067
+ var AFRICA = [
38068
+ "AO",
38069
+ "BJ",
38070
+ "BW",
38071
+ "BF",
38072
+ "BI",
38073
+ "CV",
38074
+ "CM",
38075
+ "CF",
38076
+ "TD",
38077
+ "KM",
38078
+ "CD",
38079
+ "CG",
38080
+ "CI",
38081
+ "DJ",
38082
+ "GQ",
38083
+ "ER",
38084
+ "SZ",
38085
+ "ET",
38086
+ "GA",
38087
+ "GM",
38088
+ "GH",
38089
+ "GN",
38090
+ "GW",
38091
+ "KE",
38092
+ "LS",
38093
+ "LR",
38094
+ "MG",
38095
+ "MW",
38096
+ "ML",
38097
+ "MR",
38098
+ "MU",
38099
+ "YT",
38100
+ "MZ",
38101
+ "NA",
38102
+ "NE",
38103
+ "NG",
38104
+ "RE",
38105
+ "RW",
38106
+ "SH",
38107
+ "ST",
38108
+ "SN",
38109
+ "SC",
38110
+ "SL",
38111
+ "SO",
38112
+ "ZA",
38113
+ "SS",
38114
+ "SD",
38115
+ "TZ",
38116
+ "TG",
38117
+ "UG",
38118
+ "ZM",
38119
+ "ZW",
38120
+ "IO",
38121
+ "TF"
38122
+ ];
38123
+ var CARIBBEAN = [
38124
+ "AI",
38125
+ "AG",
38126
+ "AW",
38127
+ "BS",
38128
+ "BB",
38129
+ "BM",
38130
+ "BQ",
38131
+ "VG",
38132
+ "KY",
38133
+ "CU",
38134
+ "CW",
38135
+ "DM",
38136
+ "DO",
38137
+ "GD",
38138
+ "GP",
38139
+ "HT",
38140
+ "JM",
38141
+ "MQ",
38142
+ "MS",
38143
+ "PR",
38144
+ "BL",
38145
+ "KN",
38146
+ "LC",
38147
+ "MF",
38148
+ "VC",
38149
+ "SX",
38150
+ "TT",
38151
+ "TC",
38152
+ "VI"
38153
+ ];
38154
+ var LATAM = [
38155
+ ...CARIBBEAN,
38156
+ "MX",
38157
+ "BZ",
38158
+ "CR",
38159
+ "SV",
38160
+ "GT",
38161
+ "HN",
38162
+ "NI",
38163
+ "PA",
38164
+ "AR",
38165
+ "BO",
38166
+ "BR",
38167
+ "CL",
38168
+ "CO",
38169
+ "EC",
38170
+ "FK",
38171
+ "GF",
38172
+ "GY",
38173
+ "PY",
38174
+ "PE",
38175
+ "GS",
38176
+ "SR",
38177
+ "UY",
38178
+ "VE"
38179
+ ];
38180
+ var OCEANIA = [
38181
+ "AU",
38182
+ "NZ",
38183
+ "FJ",
38184
+ "PG",
38185
+ "SB",
38186
+ "VU",
38187
+ "NC",
38188
+ "PF",
38189
+ "WS",
38190
+ "AS",
38191
+ "TO",
38192
+ "KI",
38193
+ "FM",
38194
+ "MH",
38195
+ "PW",
38196
+ "NR",
38197
+ "TV",
38198
+ "CK",
38199
+ "NU",
38200
+ "TK",
38201
+ "WF",
38202
+ "GU",
38203
+ "MP",
38204
+ "UM",
38205
+ "PN",
38206
+ "NF",
38207
+ "CX",
38208
+ "CC",
38209
+ "HM",
38210
+ "AQ",
38211
+ "BV"
38212
+ ];
38213
+ var COUNTRY_GROUPS = {
38214
+ US,
38215
+ CANADA,
38216
+ UK,
38217
+ EU,
38218
+ EEA,
38219
+ EUROPE,
38220
+ INDIA,
38221
+ SEA,
38222
+ ASIA,
38223
+ MENA,
38224
+ AFRICA,
38225
+ CARIBBEAN,
38226
+ LATAM,
38227
+ OCEANIA
38228
+ };
38229
+ function isInGroup(code, group) {
38230
+ const alpha2 = toAlpha2(code);
38231
+ return !!alpha2 && COUNTRY_GROUPS[group].includes(alpha2);
38232
+ }
38233
+ function getKycCountryList(options = {}) {
38234
+ const { group, whitelisted, blacklisted } = options;
38235
+ const scoped = !!group?.length || !!whitelisted?.length;
38236
+ const include = /* @__PURE__ */ new Set();
38237
+ if (scoped) {
38238
+ for (const g of group ?? []) for (const code of COUNTRY_GROUPS[g]) include.add(code);
38239
+ for (const code of whitelisted ?? []) {
38240
+ const alpha2 = toAlpha2(code);
38241
+ if (alpha2) include.add(alpha2);
38242
+ }
38243
+ }
38244
+ const exclude = /* @__PURE__ */ new Set();
38245
+ for (const code of blacklisted ?? []) {
38246
+ const alpha2 = toAlpha2(code);
38247
+ if (alpha2) exclude.add(alpha2);
38248
+ }
38249
+ return ALL_COUNTRIES.filter((c) => (!scoped || include.has(c.alpha2)) && !exclude.has(c.alpha2));
38250
+ }
38251
+
38252
+ // src/lib/countries/us-states.ts
38253
+ var US_STATES = [
38254
+ { code: "AL", name: "Alabama" },
38255
+ { code: "AK", name: "Alaska" },
38256
+ { code: "AS", name: "American Samoa" },
38257
+ { code: "AZ", name: "Arizona" },
38258
+ { code: "AR", name: "Arkansas" },
38259
+ { code: "CA", name: "California" },
38260
+ { code: "CO", name: "Colorado" },
38261
+ { code: "CT", name: "Connecticut" },
38262
+ { code: "DE", name: "Delaware" },
38263
+ { code: "DC", name: "District of Columbia" },
38264
+ { code: "FL", name: "Florida" },
38265
+ { code: "GA", name: "Georgia" },
38266
+ { code: "GU", name: "Guam" },
38267
+ { code: "HI", name: "Hawaii" },
38268
+ { code: "ID", name: "Idaho" },
38269
+ { code: "IL", name: "Illinois" },
38270
+ { code: "IN", name: "Indiana" },
38271
+ { code: "IA", name: "Iowa" },
38272
+ { code: "KS", name: "Kansas" },
38273
+ { code: "KY", name: "Kentucky" },
38274
+ { code: "LA", name: "Louisiana" },
38275
+ { code: "ME", name: "Maine" },
38276
+ { code: "MD", name: "Maryland" },
38277
+ { code: "MA", name: "Massachusetts" },
38278
+ { code: "MI", name: "Michigan" },
38279
+ { code: "MN", name: "Minnesota" },
38280
+ { code: "MS", name: "Mississippi" },
38281
+ { code: "MO", name: "Missouri" },
38282
+ { code: "MT", name: "Montana" },
38283
+ { code: "NE", name: "Nebraska" },
38284
+ { code: "NV", name: "Nevada" },
38285
+ { code: "NH", name: "New Hampshire" },
38286
+ { code: "NJ", name: "New Jersey" },
38287
+ { code: "NM", name: "New Mexico" },
38288
+ { code: "NY", name: "New York" },
38289
+ { code: "NC", name: "North Carolina" },
38290
+ { code: "ND", name: "North Dakota" },
38291
+ { code: "MP", name: "Northern Mariana Islands" },
38292
+ { code: "OH", name: "Ohio" },
38293
+ { code: "OK", name: "Oklahoma" },
38294
+ { code: "OR", name: "Oregon" },
38295
+ { code: "PA", name: "Pennsylvania" },
38296
+ { code: "PR", name: "Puerto Rico" },
38297
+ { code: "RI", name: "Rhode Island" },
38298
+ { code: "SC", name: "South Carolina" },
38299
+ { code: "SD", name: "South Dakota" },
38300
+ { code: "TN", name: "Tennessee" },
38301
+ { code: "TX", name: "Texas" },
38302
+ { code: "UT", name: "Utah" },
38303
+ { code: "VT", name: "Vermont" },
38304
+ { code: "VA", name: "Virginia" },
38305
+ { code: "VI", name: "U.S. Virgin Islands" },
38306
+ { code: "WA", name: "Washington" },
38307
+ { code: "WV", name: "West Virginia" },
38308
+ { code: "WI", name: "Wisconsin" },
38309
+ { code: "WY", name: "Wyoming" }
38310
+ ];
38311
+ function usStateName(code) {
38312
+ return US_STATES.find((s) => s.code === code)?.name ?? code;
38313
+ }
38314
+
38315
+ // src/lib/countries/flags.tsx
38316
+ import { getIconUrlWithCdn as getIconUrlWithCdn2 } from "@unifold/core";
38317
+ import { jsx as jsx84 } from "react/jsx-runtime";
38318
+ function countryFlagIconPath(alpha2) {
38319
+ return `/icons/countries/svg/${alpha2.toLowerCase()}.svg`;
38320
+ }
38321
+ function countryFlagPngPath(alpha2) {
38322
+ return `/icons/countries/png/${alpha2.toLowerCase()}.png`;
38323
+ }
38324
+ function countryFlag(code) {
38325
+ const upper = toAlpha2(code) ?? "";
38326
+ if (!/^[A-Z]{2}$/.test(upper)) return "";
38327
+ const REGIONAL_INDICATOR_A = 127462;
38328
+ return String.fromCodePoint(
38329
+ ...[...upper].map((char) => REGIONAL_INDICATOR_A + char.charCodeAt(0) - "A".charCodeAt(0))
38330
+ );
38331
+ }
38332
+ function CountryFlag({
38333
+ code,
38334
+ assetCdnUrl,
38335
+ size = 20,
38336
+ className
38337
+ }) {
38338
+ const alpha2 = toAlpha2(code);
38339
+ if (!alpha2) return null;
38340
+ return /* @__PURE__ */ jsx84(
38341
+ "img",
38342
+ {
38343
+ src: getIconUrlWithCdn2(countryFlagIconPath(alpha2), assetCdnUrl),
38344
+ alt: "",
38345
+ "aria-hidden": true,
38346
+ loading: "lazy",
38347
+ width: size,
38348
+ height: Math.round(size * 0.7),
38349
+ className: className ?? "uf-rounded-sm uf-flex-shrink-0",
38350
+ style: { width: size, height: "auto" },
38351
+ onError: (e) => {
38352
+ e.currentTarget.style.visibility = "hidden";
38353
+ }
38354
+ }
38355
+ );
38356
+ }
38357
+
38358
+ // src/components/shared/region-picker/RegionSelectorSheet.tsx
38359
+ import { useEffect as useEffect48, useMemo as useMemo26, useRef as useRef21, useState as useState51 } from "react";
38360
+ import { createPortal } from "react-dom";
38361
+ import { X as X6 } from "lucide-react";
38362
+ import { Fragment as Fragment22, jsx as jsx85, jsxs as jsxs73 } from "react/jsx-runtime";
38363
+ var REGION_SHEET_ANCHOR_ATTR = "data-uf-sheet-anchor";
38364
+ var REGION_LIST_MAX_HEIGHT = 350;
38365
+ var MODAL_GUTTER = "1.5rem";
38366
+ var ROW_STYLE = {
38367
+ paddingTop: "0.875rem",
38368
+ paddingBottom: "0.875rem",
38369
+ paddingLeft: "0.75rem",
38370
+ paddingRight: "0.75rem"
38371
+ };
38372
+ var ROW_NAME_FONT_SIZE = "1rem";
38373
+ var ROW_CODE_FONT_SIZE = "0.875rem";
38374
+ var ROW_FLAG_SIZE = 24;
38375
+ function filterRegions(options, query, matchDialCode = false) {
38376
+ const q = query.trim().toLowerCase().replace(/^\+/, "");
38377
+ if (!q) return [...options];
38378
+ const numeric = matchDialCode && /^\d+$/.test(q);
38379
+ return options.filter((c) => {
38380
+ if (c.name.toLowerCase().includes(q)) return true;
38381
+ if (c.code.toLowerCase().startsWith(q)) return true;
38382
+ if (!numeric) return false;
38383
+ const dial = dialCode(c.flagCode ?? c.code);
38384
+ return !!dial && dial.startsWith(q);
38385
+ });
38386
+ }
38387
+ function RegionSelectorSheet({
38388
+ open,
38389
+ onOpenChange,
38390
+ options,
38391
+ selectedCode,
38392
+ onSelect,
38393
+ title,
38394
+ showDialCode,
38395
+ showFlags = true,
38396
+ assetCdnUrl
38397
+ }) {
38398
+ const { colors: colors2, fonts, components } = useTheme();
38399
+ const { t: strings } = useI18n();
38400
+ const [query, setQuery] = useState51("");
38401
+ const [hovered, setHovered] = useState51(null);
38402
+ const searchRef = useRef21(null);
38403
+ const probeRef = useRef21(null);
38404
+ const [anchor, setAnchor] = useState51(void 0);
38405
+ useEffect48(() => {
38406
+ if (!open) {
38407
+ setAnchor(void 0);
38408
+ setQuery("");
38409
+ return;
38410
+ }
38411
+ setAnchor(probeRef.current?.closest(`[${REGION_SHEET_ANCHOR_ATTR}]`) ?? null);
38412
+ }, [open]);
38413
+ useEffect48(() => {
38414
+ if (!open || anchor === void 0) return;
38415
+ searchRef.current?.focus({ preventScroll: true });
38416
+ }, [open, anchor]);
38417
+ const filtered = useMemo26(
38418
+ () => filterRegions(options, query, showDialCode),
38419
+ [options, query, showDialCode]
38420
+ );
38421
+ useEffect48(() => {
38422
+ if (!open) return;
38423
+ const onKeyDown = (event) => {
38424
+ if (event.key !== "Escape") return;
38425
+ event.preventDefault();
38426
+ event.stopPropagation();
38427
+ onOpenChange(false);
38428
+ };
38429
+ window.addEventListener("keydown", onKeyDown, true);
38430
+ return () => window.removeEventListener("keydown", onKeyDown, true);
38431
+ }, [open, onOpenChange]);
38432
+ if (!open) return null;
38433
+ const close = () => {
38434
+ onOpenChange(false);
38435
+ };
38436
+ const pick = (code) => {
38437
+ onSelect(code);
38438
+ close();
38439
+ };
38440
+ const panel = (
38441
+ // Absolutely positioned so it covers the whole modal body including the
38442
+ // "Powered by" footer, which is a sibling of this flow and so can't be
38443
+ // covered from normal flow. `absolute` rather than `fixed` because the modal
38444
+ // can be portaled into a host container, which a fixed layer would escape.
38445
+ // The anchor is the positioned wrapper in DepositModal.
38446
+ /* @__PURE__ */ jsxs73(
38447
+ "div",
38448
+ {
38449
+ style: {
38450
+ position: "absolute",
38451
+ top: 0,
38452
+ bottom: 0,
38453
+ // Reaches past the gutter DialogContent puts around the modal body so
38454
+ // the sheet meets the modal's edges.
38455
+ left: `-${MODAL_GUTTER}`,
38456
+ right: `-${MODAL_GUTTER}`,
38457
+ zIndex: 20,
38458
+ display: "flex",
38459
+ flexDirection: "column",
38460
+ justifyContent: "flex-end",
38461
+ overflow: "hidden"
38462
+ },
38463
+ children: [
38464
+ /* @__PURE__ */ jsx85(
38465
+ "style",
38466
+ {
38467
+ dangerouslySetInnerHTML: {
38468
+ __html: `
38469
+ .uf-region-sheet-search::placeholder { color: ${components.search.placeholderColor}; }
38470
+ .uf-region-sheet-list::-webkit-scrollbar { display: none; }
38471
+ @keyframes uf-region-sheet-rise {
38472
+ from { transform: translateY(100%); }
38473
+ to { transform: translateY(0); }
38474
+ }
38475
+ .uf-region-sheet-panel {
38476
+ animation: uf-region-sheet-rise 260ms cubic-bezier(0.32, 0.72, 0, 1) both;
38477
+ }
38478
+ @media (prefers-reduced-motion: reduce) {
38479
+ .uf-region-sheet-panel { animation: none; }
38480
+ }
38481
+ `
38482
+ }
38483
+ }
38484
+ ),
38485
+ /* @__PURE__ */ jsx85(
38486
+ "div",
38487
+ {
38488
+ role: "presentation",
38489
+ onClick: close,
38490
+ style: { position: "absolute", inset: 0, backgroundColor: "rgba(0, 0, 0, 0.45)" }
38491
+ }
38492
+ ),
38493
+ /* @__PURE__ */ jsxs73(
38494
+ "div",
38495
+ {
38496
+ role: "dialog",
38497
+ "aria-modal": "true",
38498
+ "aria-label": title,
38499
+ onClick: (event) => event.stopPropagation(),
38500
+ className: "uf-region-sheet-panel uf-flex uf-flex-col",
38501
+ style: {
38502
+ position: "relative",
38503
+ // Never taller than the area it covers: the list shrinks rather than
38504
+ // the panel spilling out over the modal header.
38505
+ maxHeight: "100%",
38506
+ // Restores the gutter the wrapper cancelled, so content keeps its
38507
+ // alignment with the rest of the modal while the sheet spans the edges.
38508
+ padding: `0.75rem ${MODAL_GUTTER}`,
38509
+ // Same surface as the modal it sits in, rather than the card tone.
38510
+ backgroundColor: colors2.background,
38511
+ // Docked to the bottom edge to edge, so only the top corners are
38512
+ // rounded and only the top edge is drawn — side borders against the
38513
+ // modal's own edges would read as a seam.
38514
+ borderTop: `${components.card.borderWidth}px solid ${components.card.borderColor}`,
38515
+ borderTopLeftRadius: components.card.borderRadius,
38516
+ borderTopRightRadius: components.card.borderRadius,
38517
+ boxShadow: "0 -8px 28px rgba(0, 0, 0, 0.32)"
38518
+ },
38519
+ children: [
38520
+ /* @__PURE__ */ jsxs73("div", { className: "uf-relative", children: [
38521
+ /* @__PURE__ */ jsx85(
38522
+ "h3",
38523
+ {
38524
+ className: "uf-text-center",
38525
+ style: {
38526
+ color: components.container.titleColor,
38527
+ fontFamily: fonts.medium,
38528
+ fontSize: "1rem"
38529
+ },
38530
+ children: title
38531
+ }
38532
+ ),
38533
+ /* @__PURE__ */ jsxs73(
38534
+ "button",
38535
+ {
38536
+ type: "button",
38537
+ onClick: close,
38538
+ className: "uf-opacity-70 uf-transition-opacity hover:uf-opacity-100",
38539
+ style: {
38540
+ position: "absolute",
38541
+ // Padded out to a finger-sized target, then pulled back into the
38542
+ // gutter by the same amount so the glyph still lines up with the
38543
+ // right edge of the rows below.
38544
+ padding: "0.5rem",
38545
+ right: "-0.5rem",
38546
+ top: "50%",
38547
+ transform: "translateY(-50%)",
38548
+ // Centres the glyph in its box rather than on the text baseline.
38549
+ lineHeight: 0,
38550
+ color: components.container.titleColor
38551
+ },
38552
+ children: [
38553
+ /* @__PURE__ */ jsx85(X6, { style: { width: "1.25rem", height: "1.25rem" } }),
38554
+ /* @__PURE__ */ jsx85("span", { className: "uf-sr-only", children: strings.common.close })
38555
+ ]
38556
+ }
38557
+ )
38558
+ ] }),
38559
+ /* @__PURE__ */ jsx85("div", { className: "uf-pt-3 uf-pb-3", children: /* @__PURE__ */ jsx85(
38560
+ "input",
38561
+ {
38562
+ ref: searchRef,
38563
+ type: "text",
38564
+ value: query,
38565
+ onChange: (e) => setQuery(e.target.value),
38566
+ onKeyDown: (e) => {
38567
+ if (e.key !== "Enter") return;
38568
+ e.preventDefault();
38569
+ if (filtered[0]) pick(filtered[0].code);
38570
+ },
38571
+ placeholder: strings.common.search,
38572
+ className: "uf-region-sheet-search uf-w-full uf-px-4 uf-py-3 uf-outline-none",
38573
+ style: {
38574
+ backgroundColor: components.search.backgroundColor,
38575
+ color: components.search.inputColor,
38576
+ fontFamily: fonts.regular,
38577
+ // 16px: anything smaller makes iOS Safari zoom the page on focus.
38578
+ fontSize: "1rem",
38579
+ borderRadius: components.input.borderRadius,
38580
+ border: `${components.input.borderWidth}px solid ${components.input.borderColor}`
38581
+ }
38582
+ }
38583
+ ) }),
38584
+ /* @__PURE__ */ jsx85(
38585
+ "div",
38586
+ {
38587
+ className: "uf-region-sheet-list",
38588
+ style: {
38589
+ maxHeight: REGION_LIST_MAX_HEIGHT,
38590
+ minHeight: 0,
38591
+ overflowY: "auto",
38592
+ scrollbarWidth: "none",
38593
+ msOverflowStyle: "none"
38594
+ },
38595
+ children: filtered.length === 0 ? /* @__PURE__ */ jsx85(
38596
+ "p",
38597
+ {
38598
+ className: "uf-text-center uf-py-8",
38599
+ style: {
38600
+ color: components.container.subtitleColor,
38601
+ fontFamily: fonts.regular,
38602
+ fontSize: ROW_NAME_FONT_SIZE
38603
+ },
38604
+ children: strings.common.noResults
38605
+ }
38606
+ ) : /* @__PURE__ */ jsx85("div", { className: "uf-flex uf-flex-col uf-gap-1", children: filtered.map((c) => {
38607
+ const isSelected = c.code === selectedCode;
38608
+ const flagCode = c.flagCode ?? c.code;
38609
+ return /* @__PURE__ */ jsxs73(
38610
+ "button",
38611
+ {
38612
+ type: "button",
38613
+ onClick: () => pick(c.code),
38614
+ onMouseEnter: () => setHovered(c.code),
38615
+ onMouseLeave: () => setHovered(null),
38616
+ "aria-current": isSelected,
38617
+ className: "uf-w-full uf-flex uf-items-center uf-gap-3 uf-text-left uf-transition-colors",
38618
+ style: {
38619
+ ...ROW_STYLE,
38620
+ borderRadius: components.card.borderRadius,
38621
+ // The selection is carried by a tinted row rather than a
38622
+ // trailing check, so it has to read as clearly distinct from
38623
+ // the plain hover state.
38624
+ backgroundColor: isSelected ? `${colors2.primary}24` : hovered === c.code ? colors2.cardHover : "transparent"
38625
+ },
38626
+ children: [
38627
+ showFlags && /* @__PURE__ */ jsx85(CountryFlag, { code: flagCode, assetCdnUrl, size: ROW_FLAG_SIZE }),
38628
+ /* @__PURE__ */ jsx85(
38629
+ "span",
38630
+ {
38631
+ className: "uf-flex-1 uf-truncate",
38632
+ style: {
38633
+ color: colors2.foreground,
38634
+ fontFamily: isSelected ? fonts.medium : fonts.regular,
38635
+ fontSize: ROW_NAME_FONT_SIZE
38636
+ },
38637
+ children: c.name
38638
+ }
38639
+ ),
38640
+ /* @__PURE__ */ jsx85(
38641
+ "span",
38642
+ {
38643
+ className: "uf-shrink-0",
38644
+ style: {
38645
+ color: isSelected ? colors2.primary : components.container.subtitleColor,
38646
+ fontFamily: isSelected ? fonts.medium : fonts.regular,
38647
+ fontSize: ROW_CODE_FONT_SIZE
38648
+ },
38649
+ children: showDialCode ? `+${dialCode(flagCode) ?? ""}` : c.code
38650
+ }
38651
+ )
38652
+ ]
38653
+ },
38654
+ c.code
38655
+ );
38656
+ }) })
38657
+ }
38658
+ )
38659
+ ]
38660
+ }
38661
+ )
38662
+ ]
38663
+ }
38664
+ )
38665
+ );
38666
+ return /* @__PURE__ */ jsxs73(Fragment22, { children: [
38667
+ /* @__PURE__ */ jsx85("span", { ref: probeRef, hidden: true }),
38668
+ anchor === void 0 ? null : anchor ? createPortal(panel, anchor) : panel
38669
+ ] });
38670
+ }
38671
+
38672
+ // src/components/shared/region-picker/RegionPickerButton.tsx
38673
+ import { ChevronDown as ChevronDown12 } from "lucide-react";
38674
+ import { Fragment as Fragment23, jsx as jsx86, jsxs as jsxs74 } from "react/jsx-runtime";
38675
+ function RegionPickerButton({
38676
+ label,
38677
+ placeholder,
38678
+ flagCode,
38679
+ assetCdnUrl,
38680
+ onClick,
38681
+ fitContent,
38682
+ dense,
38683
+ locked,
38684
+ style: styleOverride
38685
+ }) {
38686
+ const { colors: colors2, fonts, components } = useTheme();
38687
+ const className = "uf-flex uf-items-center uf-justify-between uf-gap-1 uf-px-3 uf-text-sm uf-transition-colors";
38688
+ const style = {
38689
+ // Inline so it can't be lost to a stale stylesheet, and so it matches the
38690
+ // neighbouring input's padding exactly.
38691
+ paddingTop: dense ? "0.625rem" : "0.75rem",
38692
+ paddingBottom: dense ? "0.625rem" : "0.75rem",
38693
+ width: fitContent ? "auto" : "100%",
38694
+ // A floor so the control doesn't visibly resize as the user switches
38695
+ // between a one- and a three-digit dial code.
38696
+ minWidth: fitContent ? "6rem" : void 0,
38697
+ // Hold that width in the flex row it shares with the phone input, and
38698
+ // let the input give up the space instead.
38699
+ flexShrink: fitContent ? 0 : void 0,
38700
+ color: placeholder ? components.container.subtitleColor : colors2.foreground,
38701
+ backgroundColor: components.input.backgroundColor,
38702
+ borderRadius: components.input.borderRadius,
38703
+ border: `${components.input.borderWidth}px solid ${components.input.borderColor}`,
38704
+ fontFamily: fonts.regular,
38705
+ ...styleOverride,
38706
+ // A placeholder stays dimmed even when the override sets a text colour.
38707
+ ...placeholder ? { color: components.container.subtitleColor } : {}
38708
+ };
38709
+ const content = /* @__PURE__ */ jsxs74(Fragment23, { children: [
38710
+ /* @__PURE__ */ jsxs74("span", { className: "uf-flex uf-items-center uf-gap-2 uf-min-w-0", children: [
38711
+ flagCode && /* @__PURE__ */ jsx86(CountryFlag, { code: flagCode, assetCdnUrl, size: 20 }),
38712
+ /* @__PURE__ */ jsx86("span", { className: "uf-truncate", children: label })
38713
+ ] }),
38714
+ !locked && /* @__PURE__ */ jsx86(
38715
+ ChevronDown12,
38716
+ {
38717
+ className: "uf-w-4 uf-h-4 uf-shrink-0",
38718
+ style: { color: components.container.subtitleColor }
38719
+ }
38720
+ )
38721
+ ] });
38722
+ if (locked) {
38723
+ return /* @__PURE__ */ jsx86("div", { className, style, children: content });
38724
+ }
38725
+ return /* @__PURE__ */ jsx86(
38726
+ "button",
38727
+ {
38728
+ type: "button",
38729
+ onClick,
38730
+ className,
38731
+ style,
38732
+ "aria-haspopup": "dialog",
38733
+ children: content
38734
+ }
38735
+ );
38736
+ }
37467
38737
  export {
38738
+ ALL_COUNTRIES,
37468
38739
  AnalyticsProvider,
37469
38740
  BankTransfer,
37470
38741
  BankTransferButton,
@@ -37473,11 +38744,14 @@ export {
37473
38744
  BuyWithCard,
37474
38745
  BuyWithGooglePay,
37475
38746
  BuyWithWalletPay,
38747
+ COUNTRIES,
38748
+ COUNTRY_GROUPS,
37476
38749
  CheckingForDepositIndicator,
37477
38750
  CheckoutModal,
37478
38751
  CoinbaseConnect,
37479
38752
  ConfirmingView,
37480
38753
  ConnectExchangeButton,
38754
+ CountryFlag,
37481
38755
  CurrencyListItem,
37482
38756
  CurrencyListSection,
37483
38757
  CurrencyModal,
@@ -37505,6 +38779,9 @@ export {
37505
38779
  ManualDepositButton,
37506
38780
  PayWithStripeLink,
37507
38781
  QRCodeSkeleton,
38782
+ REGION_SHEET_ANCHOR_ATTR,
38783
+ RegionPickerButton,
38784
+ RegionSelectorSheet,
37508
38785
  SUPPORTED_LOCALES,
37509
38786
  Select,
37510
38787
  SelectContent,
@@ -37527,6 +38804,7 @@ export {
37527
38804
  TransferCryptoDoubleInput,
37528
38805
  TransferCryptoSingleInput,
37529
38806
  TransferQrCode,
38807
+ US_STATES,
37530
38808
  WalletPayQrCheckout,
37531
38809
  WithdrawConfirmingView,
37532
38810
  WithdrawDoubleInput,
@@ -37541,10 +38819,17 @@ export {
37541
38819
  cn,
37542
38820
  colors,
37543
38821
  connectSolanaStandardWallet,
38822
+ countryFlag,
38823
+ countryFlagIconPath,
38824
+ countryFlagPngPath,
38825
+ countryName,
37544
38826
  defaultColors,
37545
38827
  detectBrowserLocale,
37546
38828
  detectBrowserWallet,
37547
38829
  detectConnectedBrowserWallet,
38830
+ dialCode,
38831
+ filterRegions,
38832
+ findCountry,
37548
38833
  findSolanaStandardWallet,
37549
38834
  formatCryptoAmount,
37550
38835
  formatFiat,
@@ -37552,6 +38837,7 @@ export {
37552
38837
  getActiveStrings,
37553
38838
  getAuthorizedSolanaStandardAccounts,
37554
38839
  getColors,
38840
+ getKycCountryList,
37555
38841
  getSolanaStandardWallets,
37556
38842
  getStoredWalletPaySession as getStoredApplePaySession,
37557
38843
  getStoredWalletPaySession,
@@ -37559,6 +38845,7 @@ export {
37559
38845
  i18n,
37560
38846
  interpolate,
37561
38847
  isHypercoreChain,
38848
+ isInGroup,
37562
38849
  isOnrampTokenFresh,
37563
38850
  isSolanaWalletDetectedViaWalletStandard,
37564
38851
  mergeColors,
@@ -37577,7 +38864,9 @@ export {
37577
38864
  startBrowserWalletDiscovery,
37578
38865
  subscribeSolanaStandardAccountChanges,
37579
38866
  subscribeSolanaStandardWallets,
38867
+ toAlpha2,
37580
38868
  truncateAddress,
38869
+ usStateName,
37581
38870
  useAddressBalance,
37582
38871
  useAllowedCountry,
37583
38872
  useAnalytics,