@wise/dynamic-flow-client-internal 3.21.2 → 3.22.1

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/build/main.mjs CHANGED
@@ -303,7 +303,8 @@ var de_default = {
303
303
  "df.wise.MultipleFileUploadSchema.maxFileSizeError": "Diese Datei ist leider zu gro\xDF. Bitte lade eine kleinere Datei hoch.",
304
304
  "df.wise.MultipleFileUploadSchema.maxItemsError": "Bitte lade {maxItems} oder weniger Dateien hoch.",
305
305
  "df.wise.MultipleFileUploadSchema.minItemsError": "Bitte lade mindestens {minItems} Datei(en) hoch.",
306
- "df.wise.PersistAsyncSchema.genericError": "Da ist etwas schiefgegangen. Versuche es bitte nochmal."
306
+ "df.wise.PersistAsyncSchema.genericError": "Da ist etwas schiefgegangen. Versuche es bitte nochmal.",
307
+ "df.wise.SearchLayout.loading": "L\xE4dt..."
307
308
  };
308
309
 
309
310
  // src/i18n/en.json
@@ -337,7 +338,8 @@ var en_default = {
337
338
  "df.wise.MultipleFileUploadSchema.maxFileSizeError": "Sorry, that file is too big. Please upload a smaller file.",
338
339
  "df.wise.MultipleFileUploadSchema.maxItemsError": "Please upload {maxItems} or fewer files.",
339
340
  "df.wise.MultipleFileUploadSchema.minItemsError": "Please upload at least {minItems} file(s).",
340
- "df.wise.PersistAsyncSchema.genericError": "Something went wrong, please try again."
341
+ "df.wise.PersistAsyncSchema.genericError": "Something went wrong, please try again.",
342
+ "df.wise.SearchLayout.loading": "Loading..."
341
343
  };
342
344
 
343
345
  // src/i18n/es.json
@@ -371,7 +373,8 @@ var es_default = {
371
373
  "df.wise.MultipleFileUploadSchema.maxFileSizeError": "Lo sentimos, el archivo pesa demasiado. Sube uno m\xE1s peque\xF1o.",
372
374
  "df.wise.MultipleFileUploadSchema.maxItemsError": "Sube {maxItems} o menos archivos.",
373
375
  "df.wise.MultipleFileUploadSchema.minItemsError": "Sube al menos {minItems} archivo(s).",
374
- "df.wise.PersistAsyncSchema.genericError": "Ha habido un error. Int\xE9ntalo de nuevo."
376
+ "df.wise.PersistAsyncSchema.genericError": "Ha habido un error. Int\xE9ntalo de nuevo.",
377
+ "df.wise.SearchLayout.loading": "Cargando..."
375
378
  };
376
379
 
377
380
  // src/i18n/fr.json
@@ -405,7 +408,8 @@ var fr_default = {
405
408
  "df.wise.MultipleFileUploadSchema.maxFileSizeError": "Nous sommes d\xE9sol\xE9s, ce fichier est trop volumineux. Veuillez t\xE9l\xE9charger un fichier plus petit.",
406
409
  "df.wise.MultipleFileUploadSchema.maxItemsError": "Veuillez t\xE9l\xE9charger {maxItems} fichiers ou moins.",
407
410
  "df.wise.MultipleFileUploadSchema.minItemsError": "Veuillez t\xE9l\xE9charger au moins {minItems} fichier(s).",
408
- "df.wise.PersistAsyncSchema.genericError": "Une erreur s'est produite, veuillez r\xE9essayer."
411
+ "df.wise.PersistAsyncSchema.genericError": "Une erreur s'est produite, veuillez r\xE9essayer.",
412
+ "df.wise.SearchLayout.loading": "Chargement..."
409
413
  };
410
414
 
411
415
  // src/i18n/hu.json
@@ -439,7 +443,8 @@ var hu_default = {
439
443
  "df.wise.MultipleFileUploadSchema.maxFileSizeError": "Sajnos ez a f\xE1jl t\xFAl nagy. K\xE9r\xFCnk, t\xF6lts fel egy kisebb f\xE1jlt.",
440
444
  "df.wise.MultipleFileUploadSchema.maxItemsError": "K\xE9r\xFCnk, hogy legfeljebb {maxItems} f\xE1jlt t\xF6lts fel.",
441
445
  "df.wise.MultipleFileUploadSchema.minItemsError": "K\xE9r\xFCnk, hogy legal\xE1bb {minItems} f\xE1jlt t\xF6lts fel.",
442
- "df.wise.PersistAsyncSchema.genericError": "Valami hiba t\xF6rt\xE9nt. K\xE9r\xFCnk, pr\xF3b\xE1ld \xFAjra."
446
+ "df.wise.PersistAsyncSchema.genericError": "Valami hiba t\xF6rt\xE9nt. K\xE9r\xFCnk, pr\xF3b\xE1ld \xFAjra.",
447
+ "df.wise.SearchLayout.loading": "Bet\xF6lt\xE9s..."
443
448
  };
444
449
 
445
450
  // src/i18n/id.json
@@ -473,7 +478,8 @@ var id_default = {
473
478
  "df.wise.MultipleFileUploadSchema.maxFileSizeError": "Maaf, file Anda terlalu besar. Silakan unggah file yang lebih kecil.",
474
479
  "df.wise.MultipleFileUploadSchema.maxItemsError": "Harap unggah {maxItems} file atau kurang.",
475
480
  "df.wise.MultipleFileUploadSchema.minItemsError": "Harap unggah sedikitnya {minItems} file.",
476
- "df.wise.PersistAsyncSchema.genericError": "Terjadi kesalahan, mohon coba lagi."
481
+ "df.wise.PersistAsyncSchema.genericError": "Terjadi kesalahan, mohon coba lagi.",
482
+ "df.wise.SearchLayout.loading": "Memuat..."
477
483
  };
478
484
 
479
485
  // src/i18n/it.json
@@ -507,7 +513,8 @@ var it_default = {
507
513
  "df.wise.MultipleFileUploadSchema.maxFileSizeError": "Spiacenti, il file \xE8 troppo grande. Carica un file di dimensioni inferiori.",
508
514
  "df.wise.MultipleFileUploadSchema.maxItemsError": "Carica al massimo {maxItems} file.",
509
515
  "df.wise.MultipleFileUploadSchema.minItemsError": "Carica almeno {minItems} file.",
510
- "df.wise.PersistAsyncSchema.genericError": "Qualcosa \xE8 andato storto. Riprova."
516
+ "df.wise.PersistAsyncSchema.genericError": "Qualcosa \xE8 andato storto. Riprova.",
517
+ "df.wise.SearchLayout.loading": "Caricamento..."
511
518
  };
512
519
 
513
520
  // src/i18n/ja.json
@@ -541,7 +548,8 @@ var ja_default = {
541
548
  "df.wise.MultipleFileUploadSchema.maxFileSizeError": "\u5927\u5909\u7533\u3057\u8A33\u3054\u3056\u3044\u307E\u305B\u3093\u304C\u3001\u30D5\u30A1\u30A4\u30EB\u304C\u5927\u304D\u3059\u304E\u307E\u3059\u3002\u3053\u308C\u3088\u308A\u5C0F\u3055\u3044\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
542
549
  "df.wise.MultipleFileUploadSchema.maxItemsError": "{maxItems}\u500B\u4EE5\u4E0B\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
543
550
  "df.wise.MultipleFileUploadSchema.minItemsError": "{minItems}\u500B\u4EE5\u4E0A\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
544
- "df.wise.PersistAsyncSchema.genericError": "\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u518D\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002"
551
+ "df.wise.PersistAsyncSchema.genericError": "\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u518D\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",
552
+ "df.wise.SearchLayout.loading": "\u8AAD\u307F\u8FBC\u307F\u4E2D\u2026"
545
553
  };
546
554
 
547
555
  // src/i18n/pl.json
@@ -575,7 +583,8 @@ var pl_default = {
575
583
  "df.wise.MultipleFileUploadSchema.maxFileSizeError": "Przepraszamy, ten plik jest zbyt du\u017Cy. Prze\u015Blij mniejszy plik.",
576
584
  "df.wise.MultipleFileUploadSchema.maxItemsError": "Prze\u015Blij do {maxItems} plik\xF3w.",
577
585
  "df.wise.MultipleFileUploadSchema.minItemsError": "Prze\u015Blij co najmniej nast\u0119puj\u0105c\u0105 liczb\u0119 plik\xF3w: {minItems}.",
578
- "df.wise.PersistAsyncSchema.genericError": "Wyst\u0105pi\u0142 b\u0142\u0105d, prosimy spr\xF3bowa\u0107 ponownie."
586
+ "df.wise.PersistAsyncSchema.genericError": "Wyst\u0105pi\u0142 b\u0142\u0105d, prosimy spr\xF3bowa\u0107 ponownie.",
587
+ "df.wise.SearchLayout.loading": "Trwa \u0142adowanie..."
579
588
  };
580
589
 
581
590
  // src/i18n/pt.json
@@ -609,7 +618,8 @@ var pt_default = {
609
618
  "df.wise.MultipleFileUploadSchema.maxFileSizeError": "Este arquivo \xE9 muito grande. Por favor, envie um arquivo menor.",
610
619
  "df.wise.MultipleFileUploadSchema.maxItemsError": "Por favor, envie {maxItems} ou menos arquivos.",
611
620
  "df.wise.MultipleFileUploadSchema.minItemsError": "Por favor, envie pelo menos {minItems} arquivo(s).",
612
- "df.wise.PersistAsyncSchema.genericError": "Ocorreu um erro. Por favor, tente novamente."
621
+ "df.wise.PersistAsyncSchema.genericError": "Ocorreu um erro. Por favor, tente novamente.",
622
+ "df.wise.SearchLayout.loading": "Carregando..."
613
623
  };
614
624
 
615
625
  // src/i18n/ro.json
@@ -643,7 +653,8 @@ var ro_default = {
643
653
  "df.wise.MultipleFileUploadSchema.maxFileSizeError": "Ne pare r\u0103u, acel fi\u0219ier este prea mare. Te rug\u0103m s\u0103 \xEEncarci un fi\u0219ier mai mic.",
644
654
  "df.wise.MultipleFileUploadSchema.maxItemsError": "Te rug\u0103m s\u0103 \xEEncarci {maxItems} fi\u0219iere sau mai pu\u021Bine.",
645
655
  "df.wise.MultipleFileUploadSchema.minItemsError": "Te rug\u0103m s\u0103 \xEEncarci cel pu\u021Bin {minItems} fi\u0219ier(e).",
646
- "df.wise.PersistAsyncSchema.genericError": "Ceva nu a mers bine, te rug\u0103m s\u0103 \xEEncerci din nou."
656
+ "df.wise.PersistAsyncSchema.genericError": "Ceva nu a mers bine, te rug\u0103m s\u0103 \xEEncerci din nou.",
657
+ "df.wise.SearchLayout.loading": "Se \xEEncarc\u0103..."
647
658
  };
648
659
 
649
660
  // src/i18n/ru.json
@@ -677,7 +688,8 @@ var ru_default = {
677
688
  "df.wise.MultipleFileUploadSchema.maxFileSizeError": "\u0418\u0437\u0432\u0438\u043D\u0438\u0442\u0435, \u0444\u0430\u0439\u043B \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0439. \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u0444\u0430\u0439\u043B \u043C\u0435\u043D\u044C\u0448\u0435\u0433\u043E \u0440\u0430\u0437\u043C\u0435\u0440\u0430.",
678
689
  "df.wise.MultipleFileUploadSchema.maxItemsError": "\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u043D\u0435 \u0431\u043E\u043B\u0435\u0435 {maxItems} \u0444\u0430\u0439\u043B\u043E\u0432.",
679
690
  "df.wise.MultipleFileUploadSchema.minItemsError": "\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u043F\u043E \u043A\u0440\u0430\u0439\u043D\u0435\u0439 \u043C\u0435\u0440\u0435 {minItems} \u0444\u0430\u0439\u043B(-\u0430/\u043E\u0432).",
680
- "df.wise.PersistAsyncSchema.genericError": "\u0427\u0442\u043E-\u0442\u043E \u043F\u043E\u0448\u043B\u043E \u043D\u0435 \u0442\u0430\u043A, \u043F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0435\u0449\u0435 \u0440\u0430\u0437."
691
+ "df.wise.PersistAsyncSchema.genericError": "\u0427\u0442\u043E-\u0442\u043E \u043F\u043E\u0448\u043B\u043E \u043D\u0435 \u0442\u0430\u043A, \u043F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0435\u0449\u0435 \u0440\u0430\u0437.",
692
+ "df.wise.SearchLayout.loading": "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430..."
681
693
  };
682
694
 
683
695
  // src/i18n/th.json
@@ -711,7 +723,8 @@ var th_default = {
711
723
  "df.wise.MultipleFileUploadSchema.maxFileSizeError": "\u0E02\u0E2D\u0E2D\u0E20\u0E31\u0E22 \u0E44\u0E1F\u0E25\u0E4C\u0E19\u0E31\u0E49\u0E19\u0E43\u0E2B\u0E0D\u0E48\u0E40\u0E01\u0E34\u0E19\u0E44\u0E1B \u0E42\u0E1B\u0E23\u0E14\u0E2D\u0E31\u0E1B\u0E42\u0E2B\u0E25\u0E14\u0E44\u0E1F\u0E25\u0E4C\u0E17\u0E35\u0E48\u0E21\u0E35\u0E02\u0E19\u0E32\u0E14\u0E40\u0E25\u0E47\u0E01\u0E25\u0E07",
712
724
  "df.wise.MultipleFileUploadSchema.maxItemsError": "\u0E42\u0E1B\u0E23\u0E14\u0E2D\u0E31\u0E1B\u0E42\u0E2B\u0E25\u0E14 {maxItems} \u0E44\u0E1F\u0E25\u0E4C\u0E2B\u0E23\u0E37\u0E2D\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32",
713
725
  "df.wise.MultipleFileUploadSchema.minItemsError": "\u0E42\u0E1B\u0E23\u0E14\u0E2D\u0E31\u0E1B\u0E42\u0E2B\u0E25\u0E14\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E19\u0E49\u0E2D\u0E22 {minItems} \u0E44\u0E1F\u0E25\u0E4C",
714
- "df.wise.PersistAsyncSchema.genericError": "\u0E40\u0E01\u0E34\u0E14\u0E02\u0E49\u0E2D\u0E1C\u0E34\u0E14\u0E1E\u0E25\u0E32\u0E14\u0E1A\u0E32\u0E07\u0E2D\u0E22\u0E48\u0E32\u0E07 \u0E42\u0E1B\u0E23\u0E14\u0E25\u0E2D\u0E07\u0E2D\u0E35\u0E01\u0E04\u0E23\u0E31\u0E49\u0E07"
726
+ "df.wise.PersistAsyncSchema.genericError": "\u0E40\u0E01\u0E34\u0E14\u0E02\u0E49\u0E2D\u0E1C\u0E34\u0E14\u0E1E\u0E25\u0E32\u0E14\u0E1A\u0E32\u0E07\u0E2D\u0E22\u0E48\u0E32\u0E07 \u0E42\u0E1B\u0E23\u0E14\u0E25\u0E2D\u0E07\u0E2D\u0E35\u0E01\u0E04\u0E23\u0E31\u0E49\u0E07",
727
+ "df.wise.SearchLayout.loading": "\u0E01\u0E33\u0E25\u0E31\u0E07\u0E42\u0E2B\u0E25\u0E14..."
715
728
  };
716
729
 
717
730
  // src/i18n/tr.json
@@ -745,7 +758,8 @@ var tr_default = {
745
758
  "df.wise.MultipleFileUploadSchema.maxFileSizeError": "\xDCzg\xFCn\xFCz, bu dosya \xE7ok b\xFCy\xFCk. L\xFCtfen daha k\xFC\xE7\xFCk bir dosya y\xFCkleyin.",
746
759
  "df.wise.MultipleFileUploadSchema.maxItemsError": "L\xFCtfen {maxItems} veya daha az dosya y\xFCkleyin.",
747
760
  "df.wise.MultipleFileUploadSchema.minItemsError": "L\xFCtfen en az {minItems} dosya y\xFCkleyin.",
748
- "df.wise.PersistAsyncSchema.genericError": "Bir \u015Feyler ters gitti, l\xFCtfen tekrar deneyin."
761
+ "df.wise.PersistAsyncSchema.genericError": "Bir \u015Feyler ters gitti, l\xFCtfen tekrar deneyin.",
762
+ "df.wise.SearchLayout.loading": "Y\xFCkleniyor..."
749
763
  };
750
764
 
751
765
  // src/i18n/zh_CN.json
@@ -779,7 +793,8 @@ var zh_CN_default = {
779
793
  "df.wise.MultipleFileUploadSchema.maxFileSizeError": "\u62B1\u6B49\uFF0C\u8BE5\u6587\u4EF6\u592A\u5927\u3002\u8BF7\u4E0A\u4F20\u4E00\u4E2A\u66F4\u5C0F\u7684\u6587\u4EF6\u3002",
780
794
  "df.wise.MultipleFileUploadSchema.maxItemsError": "\u8BF7\u4E0A\u4F20\u4E0D\u8D85\u8FC7 {maxItems} \u4E2A\u6587\u4EF6\u3002",
781
795
  "df.wise.MultipleFileUploadSchema.minItemsError": "\u8BF7\u4E0A\u4F20\u81F3\u5C11 {minItems} \u4E2A\u6587\u4EF6\u3002",
782
- "df.wise.PersistAsyncSchema.genericError": "\u51FA\u9519\u4E86\uFF0C\u8BF7\u91CD\u8BD5\u3002"
796
+ "df.wise.PersistAsyncSchema.genericError": "\u51FA\u9519\u4E86\uFF0C\u8BF7\u91CD\u8BD5\u3002",
797
+ "df.wise.SearchLayout.loading": "\u6B63\u5728\u52A0\u8F7D\u2026"
783
798
  };
784
799
 
785
800
  // src/i18n/zh_HK.json
@@ -813,7 +828,8 @@ var zh_HK_default = {
813
828
  "df.wise.MultipleFileUploadSchema.maxFileSizeError": "\u62B1\u6B49\uFF0C\u8A72\u6A94\u6848\u592A\u5927\u3002\u8ACB\u4E0A\u8F09\u4E00\u500B\u8F03\u5C0F\u7684\u6A94\u6848\u3002",
814
829
  "df.wise.MultipleFileUploadSchema.maxItemsError": "\u8ACB\u4E0D\u8981\u4E0A\u8F09\u8D85\u904E{maxItems}\u500B\u6A94\u6848\u3002",
815
830
  "df.wise.MultipleFileUploadSchema.minItemsError": "\u8ACB\u4E0A\u8F09\u81F3\u5C11{minItems}\u500B\u6A94\u6848\u3002",
816
- "df.wise.PersistAsyncSchema.genericError": "\u51FA\u73FE\u4E86\u554F\u984C\uFF0C\u8ACB\u518D\u8A66\u4E00\u6B21\u3002"
831
+ "df.wise.PersistAsyncSchema.genericError": "\u51FA\u73FE\u4E86\u554F\u984C\uFF0C\u8ACB\u518D\u8A66\u4E00\u6B21\u3002",
832
+ "df.wise.SearchLayout.loading": "\u8F09\u5165\u4E2D\u2026"
817
833
  };
818
834
 
819
835
  // src/i18n/index.ts
@@ -847,7 +863,7 @@ var i18n_default = translations;
847
863
 
848
864
  // src/dynamicFlow/DynamicFlow.tsx
849
865
  import { forwardRef as forwardRef2, useCallback, useMemo as useMemo2 } from "react";
850
- import { useIntl as useIntl8 } from "react-intl";
866
+ import { useIntl as useIntl9 } from "react-intl";
851
867
  import {
852
868
  DynamicFlow as DynamicFlowCoreLegacy,
853
869
  DynamicFlowCoreRevamp,
@@ -965,10 +981,29 @@ function LabelContentWithHelp({ text, help }) {
965
981
 
966
982
  // ../renderers/src/components/FieldInput.tsx
967
983
  import { jsx as jsx5 } from "react/jsx-runtime";
968
- function FieldInput({ id, children, label, error, description, help }) {
984
+ function FieldInput({ id, children, label, validation, description, help }) {
969
985
  const labelContent = label && help ? /* @__PURE__ */ jsx5(LabelContentWithHelp, { text: label, help }) : label;
970
- return /* @__PURE__ */ jsx5(Field, { id, label: labelContent, hint: description, error, children });
986
+ return /* @__PURE__ */ jsx5(
987
+ Field,
988
+ {
989
+ id,
990
+ label: labelContent,
991
+ description,
992
+ message: validation == null ? void 0 : validation.message,
993
+ sentiment: mapStatusToSentiment(validation),
994
+ children
995
+ }
996
+ );
971
997
  }
998
+ var mapStatusToSentiment = (validation) => {
999
+ if (validation) {
1000
+ if (validation.status === "valid") {
1001
+ return "positive";
1002
+ }
1003
+ return "negative";
1004
+ }
1005
+ return void 0;
1006
+ };
972
1007
  var FieldInput_default = FieldInput;
973
1008
 
974
1009
  // ../renderers/src/BooleanInputRenderer.tsx
@@ -977,9 +1012,27 @@ import { jsx as jsx6 } from "react/jsx-runtime";
977
1012
  var BooleanInputRenderer = {
978
1013
  canRenderType: "input-boolean",
979
1014
  render: (props) => {
980
- const _a = props, { id, control, label = "", description, help, error, type, value } = _a, rest = __objRest(_a, ["id", "control", "label", "description", "help", "error", "type", "value"]);
1015
+ const _a = props, {
1016
+ id,
1017
+ control,
1018
+ label = "",
1019
+ description,
1020
+ help,
1021
+ type,
1022
+ validationState,
1023
+ value
1024
+ } = _a, rest = __objRest(_a, [
1025
+ "id",
1026
+ "control",
1027
+ "label",
1028
+ "description",
1029
+ "help",
1030
+ "type",
1031
+ "validationState",
1032
+ "value"
1033
+ ]);
981
1034
  const checkboxProps = __spreadProps(__spreadValues({}, rest), { label, secondary: description, checked: value });
982
- return /* @__PURE__ */ jsx6(FieldInput_default, { id, label: "", description: "", error, help, children: /* @__PURE__ */ jsx6(Checkbox, __spreadValues({ id }, checkboxProps)) });
1035
+ return /* @__PURE__ */ jsx6(FieldInput_default, { id, label: "", description: "", validation: validationState, help, children: /* @__PURE__ */ jsx6(Checkbox, __spreadValues({ id }, checkboxProps)) });
983
1036
  }
984
1037
  };
985
1038
  var BooleanInputRenderer_default = BooleanInputRenderer;
@@ -1204,23 +1257,33 @@ var DateInputRenderer = {
1204
1257
  control,
1205
1258
  label,
1206
1259
  description,
1207
- error,
1208
1260
  type,
1209
1261
  help,
1262
+ validationState,
1210
1263
  value: initialValue
1211
1264
  } = _a, rest = __objRest(_a, [
1212
1265
  "id",
1213
1266
  "control",
1214
1267
  "label",
1215
1268
  "description",
1216
- "error",
1217
1269
  "type",
1218
1270
  "help",
1271
+ "validationState",
1219
1272
  "value"
1220
1273
  ]);
1221
1274
  const value = initialValue != null ? initialValue : "";
1222
1275
  const inputProps = __spreadProps(__spreadValues({}, rest), { value, id });
1223
- return /* @__PURE__ */ jsx11(FieldInput_default, { id, label, description, error, help, children: /* @__PURE__ */ jsx11(VariableDateInput_default, { control, inputProps }) });
1276
+ return /* @__PURE__ */ jsx11(
1277
+ FieldInput_default,
1278
+ {
1279
+ id,
1280
+ label,
1281
+ description,
1282
+ validation: validationState,
1283
+ help,
1284
+ children: /* @__PURE__ */ jsx11(VariableDateInput_default, { control, inputProps })
1285
+ }
1286
+ );
1224
1287
  }
1225
1288
  };
1226
1289
  var DateInputRenderer_default = DateInputRenderer;
@@ -1508,23 +1571,33 @@ import { jsx as jsx24 } from "react/jsx-runtime";
1508
1571
  var IntegerInputRenderer = {
1509
1572
  canRenderType: "input-integer",
1510
1573
  render: (props) => {
1511
- const _a = props, { id, label, error, description, help, type, value, onChange } = _a, rest = __objRest(_a, ["id", "label", "error", "description", "help", "type", "value", "onChange"]);
1512
- return /* @__PURE__ */ jsx24(FieldInput_default, { id, label, description, error, help, children: /* @__PURE__ */ jsx24(
1513
- Input,
1514
- __spreadValues({
1574
+ const _a = props, { id, label, description, help, type, validationState, value, onChange } = _a, rest = __objRest(_a, ["id", "label", "description", "help", "type", "validationState", "value", "onChange"]);
1575
+ return /* @__PURE__ */ jsx24(
1576
+ FieldInput_default,
1577
+ {
1515
1578
  id,
1516
- name: id,
1517
- type: "number",
1518
- step: "1",
1519
- pattern: "\\d+",
1520
- value: value != null ? value : "",
1521
- onChange: ({ target: { value: newValue } }) => {
1522
- const parsedValue = Number.parseInt(newValue, 10);
1523
- onChange(Number.isNaN(parsedValue) ? null : parsedValue);
1524
- },
1525
- onWheel
1526
- }, rest)
1527
- ) });
1579
+ label,
1580
+ description,
1581
+ validation: validationState,
1582
+ help,
1583
+ children: /* @__PURE__ */ jsx24(
1584
+ Input,
1585
+ __spreadValues({
1586
+ id,
1587
+ name: id,
1588
+ type: "number",
1589
+ step: "1",
1590
+ pattern: "\\d+",
1591
+ value: value != null ? value : "",
1592
+ onChange: ({ target: { value: newValue } }) => {
1593
+ const parsedValue = Number.parseInt(newValue, 10);
1594
+ onChange(Number.isNaN(parsedValue) ? null : parsedValue);
1595
+ },
1596
+ onWheel
1597
+ }, rest)
1598
+ )
1599
+ }
1600
+ );
1528
1601
  }
1529
1602
  };
1530
1603
  var IntegerInputRenderer_default = IntegerInputRenderer;
@@ -1630,10 +1703,10 @@ function MultiSelectInputRendererComponent(props) {
1630
1703
  disabled,
1631
1704
  label,
1632
1705
  help,
1633
- error,
1634
1706
  options,
1635
1707
  placeholder,
1636
1708
  selectedIndices,
1709
+ validationState,
1637
1710
  onSelect
1638
1711
  } = props;
1639
1712
  const mergedIndices = stagedIndices != null ? stagedIndices : selectedIndices;
@@ -1664,39 +1737,49 @@ function MultiSelectInputRendererComponent(props) {
1664
1737
  };
1665
1738
  return /* @__PURE__ */ jsx29(SelectInputOptionContent, __spreadValues({}, contentProps));
1666
1739
  };
1667
- return /* @__PURE__ */ jsx29(FieldInput_default, { id, label, help, description, error, children: /* @__PURE__ */ jsx29(
1668
- SelectInput,
1740
+ return /* @__PURE__ */ jsx29(
1741
+ FieldInput_default,
1669
1742
  {
1670
1743
  id,
1671
- items: options.map((option, index) => {
1672
- var _a, _b, _c;
1673
- return {
1674
- type: "option",
1675
- value: index,
1676
- filterMatchers: [
1677
- ...(_a = option.keywords) != null ? _a : [],
1678
- (_b = option.title) != null ? _b : "",
1679
- (_c = option.description) != null ? _c : ""
1680
- ],
1681
- disabled: option.disabled
1682
- };
1683
- }),
1684
- disabled,
1685
- placeholder,
1686
- value: mergedIndices,
1687
- renderValue,
1688
- multiple: true,
1689
- onChange: (values) => {
1690
- setStagedIndices(values);
1691
- },
1692
- onClose: () => {
1693
- if (stagedIndices) {
1694
- onSelect(stagedIndices);
1695
- setStagedIndices(void 0);
1744
+ label,
1745
+ help,
1746
+ description,
1747
+ validation: validationState,
1748
+ children: /* @__PURE__ */ jsx29(
1749
+ SelectInput,
1750
+ {
1751
+ id,
1752
+ items: options.map((option, index) => {
1753
+ var _a, _b, _c;
1754
+ return {
1755
+ type: "option",
1756
+ value: index,
1757
+ filterMatchers: [
1758
+ ...(_a = option.keywords) != null ? _a : [],
1759
+ (_b = option.title) != null ? _b : "",
1760
+ (_c = option.description) != null ? _c : ""
1761
+ ],
1762
+ disabled: option.disabled
1763
+ };
1764
+ }),
1765
+ disabled,
1766
+ placeholder,
1767
+ value: mergedIndices,
1768
+ renderValue,
1769
+ multiple: true,
1770
+ onChange: (values) => {
1771
+ setStagedIndices(values);
1772
+ },
1773
+ onClose: () => {
1774
+ if (stagedIndices) {
1775
+ onSelect(stagedIndices);
1776
+ setStagedIndices(void 0);
1777
+ }
1778
+ }
1696
1779
  }
1697
- }
1780
+ )
1698
1781
  }
1699
- ) });
1782
+ );
1700
1783
  }
1701
1784
  var MultiSelectInputRenderer_default = MultiSelectInputRenderer;
1702
1785
 
@@ -1712,8 +1795,8 @@ function UploadFieldInput({
1712
1795
  children,
1713
1796
  label,
1714
1797
  description,
1715
- error,
1716
- help
1798
+ help,
1799
+ validation
1717
1800
  }) {
1718
1801
  const labelContent = label && help ? /* @__PURE__ */ jsx30(LabelContentWithHelp, { text: label, help }) : label;
1719
1802
  const descriptionId = description ? `${id}-description` : void 0;
@@ -1721,12 +1804,12 @@ function UploadFieldInput({
1721
1804
  "div",
1722
1805
  {
1723
1806
  className: (0, import_classnames3.default)("form-group d-block", {
1724
- "has-error": !!error
1807
+ "has-error": (validation == null ? void 0 : validation.status) === "invalid"
1725
1808
  }),
1726
1809
  children: [
1727
1810
  /* @__PURE__ */ jsx30("label", { htmlFor: id, className: "control-label", children: labelContent }),
1728
1811
  children,
1729
- error && /* @__PURE__ */ jsx30(InlineAlert, { type: "negative", id: descriptionId, children: error })
1812
+ (validation == null ? void 0 : validation.status) === "invalid" && /* @__PURE__ */ jsx30(InlineAlert, { type: "negative", id: descriptionId, children: validation.message })
1730
1813
  ]
1731
1814
  }
1732
1815
  );
@@ -1769,10 +1852,10 @@ var MultiUploadInputRenderer = {
1769
1852
  label,
1770
1853
  description,
1771
1854
  disabled,
1772
- error,
1773
1855
  maxSize,
1774
1856
  maxItems,
1775
1857
  uploadLabel,
1858
+ validationState,
1776
1859
  onUpload,
1777
1860
  onDelete
1778
1861
  } = props;
@@ -1785,22 +1868,32 @@ var MultiUploadInputRenderer = {
1785
1868
  };
1786
1869
  const onDeleteFile = async (fileId) => onDelete(String(fileId));
1787
1870
  const descriptionId = description ? `${id}-description` : void 0;
1788
- return /* @__PURE__ */ jsx31(UploadFieldInput_default, { id, label, description, error, help, children: /* @__PURE__ */ jsx31(
1789
- UploadInput,
1871
+ return /* @__PURE__ */ jsx31(
1872
+ UploadFieldInput_default,
1790
1873
  {
1791
1874
  id,
1792
- "aria-describedby": descriptionId,
1875
+ label,
1793
1876
  description,
1794
- disabled,
1795
- fileTypes: getAcceptsString(accepts),
1796
- maxFiles: maxItems,
1797
- multiple: true,
1798
- sizeLimit: maxSize ? toKilobytes(maxSize) : void 0,
1799
- uploadButtonTitle: uploadLabel,
1800
- onDeleteFile,
1801
- onUploadFile
1877
+ validation: validationState,
1878
+ help,
1879
+ children: /* @__PURE__ */ jsx31(
1880
+ UploadInput,
1881
+ {
1882
+ id,
1883
+ "aria-describedby": descriptionId,
1884
+ description,
1885
+ disabled,
1886
+ fileTypes: getAcceptsString(accepts),
1887
+ maxFiles: maxItems,
1888
+ multiple: true,
1889
+ sizeLimit: maxSize ? toKilobytes(maxSize) : void 0,
1890
+ uploadButtonTitle: uploadLabel,
1891
+ onDeleteFile,
1892
+ onUploadFile
1893
+ }
1894
+ )
1802
1895
  }
1803
- ) });
1896
+ );
1804
1897
  }
1805
1898
  };
1806
1899
  var MultiUploadInputRenderer_default = MultiUploadInputRenderer;
@@ -1811,21 +1904,31 @@ import { jsx as jsx32 } from "react/jsx-runtime";
1811
1904
  var NumberInputRenderer = {
1812
1905
  canRenderType: "input-number",
1813
1906
  render: (props) => {
1814
- const _a = props, { id, label, error, description, help, type, value, onChange } = _a, rest = __objRest(_a, ["id", "label", "error", "description", "help", "type", "value", "onChange"]);
1815
- return /* @__PURE__ */ jsx32(FieldInput_default, { id, label, description, error, help, children: /* @__PURE__ */ jsx32(
1816
- Input2,
1817
- __spreadValues({
1907
+ const _a = props, { id, label, description, help, type, validationState, value, onChange } = _a, rest = __objRest(_a, ["id", "label", "description", "help", "type", "validationState", "value", "onChange"]);
1908
+ return /* @__PURE__ */ jsx32(
1909
+ FieldInput_default,
1910
+ {
1818
1911
  id,
1819
- name: id,
1820
- type: "number",
1821
- value: value != null ? value : "",
1822
- onChange: ({ target: { value: newValue } }) => {
1823
- const parsedValue = Number.parseFloat(newValue);
1824
- onChange(Number.isNaN(parsedValue) ? null : parsedValue);
1825
- },
1826
- onWheel
1827
- }, rest)
1828
- ) });
1912
+ label,
1913
+ description,
1914
+ validation: validationState,
1915
+ help,
1916
+ children: /* @__PURE__ */ jsx32(
1917
+ Input2,
1918
+ __spreadValues({
1919
+ id,
1920
+ name: id,
1921
+ type: "number",
1922
+ value: value != null ? value : "",
1923
+ onChange: ({ target: { value: newValue } }) => {
1924
+ const parsedValue = Number.parseFloat(newValue);
1925
+ onChange(Number.isNaN(parsedValue) ? null : parsedValue);
1926
+ },
1927
+ onWheel
1928
+ }, rest)
1929
+ )
1930
+ }
1931
+ );
1829
1932
  }
1830
1933
  };
1831
1934
  var NumberInputRenderer_default = NumberInputRenderer;
@@ -1945,9 +2048,9 @@ function Repeatable(props) {
1945
2048
  description,
1946
2049
  editableItem,
1947
2050
  editItemTitle,
1948
- error,
1949
2051
  items,
1950
2052
  title,
2053
+ validationState,
1951
2054
  onEdit,
1952
2055
  onAdd,
1953
2056
  onSave,
@@ -1983,7 +2086,7 @@ function Repeatable(props) {
1983
2086
  "div",
1984
2087
  {
1985
2088
  className: (0, import_classnames5.default)("form-group", {
1986
- "has-error": error
2089
+ "has-error": (validationState == null ? void 0 : validationState.status) === "invalid"
1987
2090
  }),
1988
2091
  children: [
1989
2092
  items == null ? void 0 : items.map((item, index) => /* @__PURE__ */ jsx34(ItemSummaryOption, { item, onClick: () => onEditItem(index) }, item.id)),
@@ -1996,7 +2099,7 @@ function Repeatable(props) {
1996
2099
  onClick: () => onAddItem()
1997
2100
  }
1998
2101
  ),
1999
- error && /* @__PURE__ */ jsx34(InlineAlert2, { type: "negative", children: error })
2102
+ (validationState == null ? void 0 : validationState.status) === "invalid" && /* @__PURE__ */ jsx34(InlineAlert2, { type: "negative", children: validationState.message })
2000
2103
  ]
2001
2104
  }
2002
2105
  ),
@@ -2061,28 +2164,45 @@ var generic_error_messages_default = defineMessages5({
2061
2164
  });
2062
2165
 
2063
2166
  // ../renderers/src/SearchRenderer/ErrorResult.tsx
2167
+ import { Button as Button5 } from "@transferwise/components";
2064
2168
  import { jsx as jsx35, jsxs as jsxs11 } from "react/jsx-runtime";
2065
2169
  function ErrorResult({ state }) {
2066
2170
  const intl = useIntl5();
2171
+ const buttonVisualProps = {
2172
+ priority: "tertiary",
2173
+ size: "sm",
2174
+ style: { marginTop: "-2px", padding: "0", width: "auto", display: "inline" }
2175
+ };
2067
2176
  return /* @__PURE__ */ jsxs11("p", { className: "m-t-2", children: [
2068
2177
  intl.formatMessage(generic_error_messages_default.genericError),
2069
2178
  "\xA0",
2070
2179
  /* @__PURE__ */ jsx35(
2071
- "a",
2072
- {
2073
- href: "/",
2074
- onClick: (e) => {
2075
- e.preventDefault();
2180
+ Button5,
2181
+ __spreadProps(__spreadValues({}, buttonVisualProps), {
2182
+ onClick: () => {
2076
2183
  state.onRetry();
2077
2184
  },
2078
2185
  children: intl.formatMessage(generic_error_messages_default.retry)
2079
- }
2186
+ })
2080
2187
  )
2081
2188
  ] });
2082
2189
  }
2083
2190
 
2084
2191
  // ../renderers/src/SearchRenderer/BlockSearchRendererComponent.tsx
2085
2192
  import { useState as useState6 } from "react";
2193
+
2194
+ // ../renderers/src/messages/search.messages.ts
2195
+ import { defineMessages as defineMessages6 } from "react-intl";
2196
+ var search_messages_default = defineMessages6({
2197
+ loading: {
2198
+ id: "df.wise.SearchLayout.loading",
2199
+ defaultMessage: "Loading...",
2200
+ description: "A message shown to the user while their search is being processed, before results appear."
2201
+ }
2202
+ });
2203
+
2204
+ // ../renderers/src/SearchRenderer/BlockSearchRendererComponent.tsx
2205
+ import { useIntl as useIntl6 } from "react-intl";
2086
2206
  import { Fragment as Fragment3, jsx as jsx36, jsxs as jsxs12 } from "react/jsx-runtime";
2087
2207
  function BlockSearchRendererComponent({
2088
2208
  id,
@@ -2095,8 +2215,9 @@ function BlockSearchRendererComponent({
2095
2215
  }) {
2096
2216
  const [hasSearched, setHasSearched] = useState6(false);
2097
2217
  const trackEvent = useTrackEvent();
2218
+ const { formatMessage } = useIntl6();
2098
2219
  return /* @__PURE__ */ jsxs12("div", { className: getMargin(margin), children: [
2099
- /* @__PURE__ */ jsx36(FieldInput_default, { id, description: "", error: "", help: "", label: title, children: /* @__PURE__ */ jsx36(
2220
+ /* @__PURE__ */ jsx36(FieldInput_default, { id, description: "", validation: void 0, help: "", label: title, children: /* @__PURE__ */ jsx36(
2100
2221
  Input4,
2101
2222
  {
2102
2223
  id,
@@ -2113,7 +2234,7 @@ function BlockSearchRendererComponent({
2113
2234
  }
2114
2235
  }
2115
2236
  ) }),
2116
- isLoading ? /* @__PURE__ */ jsx36(Fragment3, { children: "Loading..." }) : /* @__PURE__ */ jsx36(SearchResultContent, { state, onChange })
2237
+ isLoading ? /* @__PURE__ */ jsx36(Fragment3, { children: formatMessage(search_messages_default.loading) }) : /* @__PURE__ */ jsx36(SearchResultContent, { state, onChange })
2117
2238
  ] });
2118
2239
  }
2119
2240
  function SearchResultContent({
@@ -2166,7 +2287,7 @@ var BlockSearchRendererComponent_default = BlockSearchRendererComponent;
2166
2287
  import { Markdown as Markdown4, Typeahead } from "@transferwise/components";
2167
2288
  import { Search } from "@transferwise/icons";
2168
2289
  import { useState as useState7 } from "react";
2169
- import { useIntl as useIntl6 } from "react-intl";
2290
+ import { useIntl as useIntl7 } from "react-intl";
2170
2291
  import { jsx as jsx37 } from "react/jsx-runtime";
2171
2292
  function InlineSearchRenderer({
2172
2293
  id,
@@ -2178,8 +2299,8 @@ function InlineSearchRenderer({
2178
2299
  }) {
2179
2300
  const [hasSearched, setHasSearched] = useState7(false);
2180
2301
  const trackEvent = useTrackEvent();
2181
- const intl = useIntl6();
2182
- return /* @__PURE__ */ jsx37("div", { className: getMargin(margin), children: /* @__PURE__ */ jsx37(FieldInput_default, { id, description: "", error: "", help: "", label: title, children: /* @__PURE__ */ jsx37(
2302
+ const intl = useIntl7();
2303
+ return /* @__PURE__ */ jsx37("div", { className: getMargin(margin), children: /* @__PURE__ */ jsx37(FieldInput_default, { id, description: "", validation: void 0, help: "", label: title, children: /* @__PURE__ */ jsx37(
2183
2304
  Typeahead,
2184
2305
  {
2185
2306
  id: "typeahead-input-id",
@@ -2225,6 +2346,7 @@ function mapResultToTypeaheadOption(result) {
2225
2346
  };
2226
2347
  }
2227
2348
  function TypeaheadFooter({ state, isLoading }) {
2349
+ const { formatMessage } = useIntl7();
2228
2350
  if (state.type === "noResults") {
2229
2351
  return /* @__PURE__ */ jsx37(Markdown4, { className: "m-t-2 m-x-2", config: { link: { target: "_blank" } }, children: state.message });
2230
2352
  }
@@ -2232,7 +2354,7 @@ function TypeaheadFooter({ state, isLoading }) {
2232
2354
  return /* @__PURE__ */ jsx37("div", { className: "m-t-2 m-x-2", children: /* @__PURE__ */ jsx37(ErrorResult, { state }) });
2233
2355
  }
2234
2356
  if (state.type === "pending" || isLoading) {
2235
- return /* @__PURE__ */ jsx37("p", { className: "m-t-2 m-x-2", children: "Loading..." });
2357
+ return /* @__PURE__ */ jsx37("p", { className: "m-t-2 m-x-2", children: formatMessage(search_messages_default.loading) });
2236
2358
  }
2237
2359
  return null;
2238
2360
  }
@@ -2255,30 +2377,40 @@ function RadioInputRendererComponent(props) {
2255
2377
  children,
2256
2378
  description,
2257
2379
  disabled,
2258
- error,
2259
2380
  help,
2260
2381
  label,
2261
2382
  options,
2262
2383
  selectedIndex,
2384
+ validationState,
2263
2385
  onSelect
2264
2386
  } = props;
2265
2387
  return /* @__PURE__ */ jsxs13(Fragment4, { children: [
2266
- /* @__PURE__ */ jsx39(FieldInput_default, { id, label, help, description, error, children: /* @__PURE__ */ jsx39("span", { children: /* @__PURE__ */ jsx39(
2267
- RadioGroup,
2388
+ /* @__PURE__ */ jsx39(
2389
+ FieldInput_default,
2268
2390
  {
2269
- name: id,
2270
- radios: options.map((option, index) => ({
2271
- label: option.title,
2272
- value: index,
2273
- secondary: option.description,
2274
- disabled: option.disabled || disabled,
2275
- avatar: /* @__PURE__ */ jsx39(OptionMedia, { icon: option.icon, image: option.image })
2276
- })),
2277
- selectedValue: selectedIndex != null ? selectedIndex : void 0,
2278
- onChange: onSelect
2279
- },
2280
- `${id}-${selectedIndex}`
2281
- ) }) }),
2391
+ id,
2392
+ label,
2393
+ help,
2394
+ description,
2395
+ validation: validationState,
2396
+ children: /* @__PURE__ */ jsx39("span", { children: /* @__PURE__ */ jsx39(
2397
+ RadioGroup,
2398
+ {
2399
+ name: id,
2400
+ radios: options.map((option, index) => ({
2401
+ label: option.title,
2402
+ value: index,
2403
+ secondary: option.description,
2404
+ disabled: option.disabled || disabled,
2405
+ avatar: /* @__PURE__ */ jsx39(OptionMedia, { icon: option.icon, image: option.image })
2406
+ })),
2407
+ selectedValue: selectedIndex != null ? selectedIndex : void 0,
2408
+ onChange: onSelect
2409
+ },
2410
+ `${id}-${selectedIndex}`
2411
+ ) })
2412
+ }
2413
+ ),
2282
2414
  children
2283
2415
  ] });
2284
2416
  }
@@ -2293,11 +2425,11 @@ function TabInputRendererComponent(props) {
2293
2425
  children,
2294
2426
  description,
2295
2427
  disabled,
2296
- error,
2297
2428
  help,
2298
2429
  label,
2299
2430
  options,
2300
2431
  selectedIndex,
2432
+ validationState,
2301
2433
  onSelect
2302
2434
  } = props;
2303
2435
  useEffect3(() => {
@@ -2306,21 +2438,31 @@ function TabInputRendererComponent(props) {
2306
2438
  }
2307
2439
  }, [selectedIndex, onSelect, options.length]);
2308
2440
  return /* @__PURE__ */ jsxs14(Fragment5, { children: [
2309
- /* @__PURE__ */ jsx40(FieldInput_default, { id, label, help, description, error, children: /* @__PURE__ */ jsx40(
2310
- Tabs,
2441
+ /* @__PURE__ */ jsx40(
2442
+ FieldInput_default,
2311
2443
  {
2312
- name: id,
2313
- selected: selectedIndex != null ? selectedIndex : 0,
2314
- tabs: options.map((option) => ({
2315
- title: option.title,
2316
- // if we pass null, we get some props-types console errors
2317
- // eslint-disable-next-line react/jsx-no-useless-fragment
2318
- content: /* @__PURE__ */ jsx40(Fragment5, {}),
2319
- disabled: option.disabled || disabled
2320
- })),
2321
- onTabSelect: onSelect
2444
+ id,
2445
+ label,
2446
+ help,
2447
+ description,
2448
+ validation: validationState,
2449
+ children: /* @__PURE__ */ jsx40(
2450
+ Tabs,
2451
+ {
2452
+ name: id,
2453
+ selected: selectedIndex != null ? selectedIndex : 0,
2454
+ tabs: options.map((option) => ({
2455
+ title: option.title,
2456
+ // if we pass null, we get some props-types console errors
2457
+ // eslint-disable-next-line react/jsx-no-useless-fragment
2458
+ content: /* @__PURE__ */ jsx40(Fragment5, {}),
2459
+ disabled: option.disabled || disabled
2460
+ })),
2461
+ onTabSelect: onSelect
2462
+ }
2463
+ )
2322
2464
  }
2323
- ) }),
2465
+ ),
2324
2466
  children
2325
2467
  ] });
2326
2468
  }
@@ -2353,13 +2495,13 @@ function SelectInputRendererComponent(props) {
2353
2495
  children,
2354
2496
  description,
2355
2497
  disabled,
2356
- error,
2357
2498
  help,
2358
2499
  label,
2359
2500
  options,
2360
2501
  placeholder,
2361
2502
  required,
2362
2503
  selectedIndex,
2504
+ validationState,
2363
2505
  onSelect
2364
2506
  } = props;
2365
2507
  const items = options.map(
@@ -2390,20 +2532,30 @@ function SelectInputRendererComponent(props) {
2390
2532
  return /* @__PURE__ */ jsx42(SelectInputOptionContent2, __spreadValues({}, contentProps));
2391
2533
  };
2392
2534
  return /* @__PURE__ */ jsxs15(Fragment6, { children: [
2393
- /* @__PURE__ */ jsx42(FieldInput_default, { id, label, help, description, error, children: /* @__PURE__ */ jsx42(
2394
- SelectInput2,
2535
+ /* @__PURE__ */ jsx42(
2536
+ FieldInput_default,
2395
2537
  {
2396
- name: id,
2397
- placeholder,
2398
- items,
2399
- disabled,
2400
- value: selectedIndex,
2401
- renderValue,
2402
- filterable: items.length >= 8,
2403
- onChange: onSelect,
2404
- onClear: required ? void 0 : () => onSelect(null)
2538
+ id,
2539
+ label,
2540
+ help,
2541
+ description,
2542
+ validation: validationState,
2543
+ children: /* @__PURE__ */ jsx42(
2544
+ SelectInput2,
2545
+ {
2546
+ name: id,
2547
+ placeholder,
2548
+ items,
2549
+ disabled,
2550
+ value: selectedIndex,
2551
+ renderValue,
2552
+ filterable: items.length >= 8,
2553
+ onChange: onSelect,
2554
+ onClear: required ? void 0 : () => onSelect(null)
2555
+ }
2556
+ )
2405
2557
  }
2406
- ) }),
2558
+ ),
2407
2559
  children
2408
2560
  ] });
2409
2561
  }
@@ -2413,28 +2565,48 @@ import { useEffect as useEffect4 } from "react";
2413
2565
  import { SegmentedControl } from "@transferwise/components";
2414
2566
  import { Fragment as Fragment7, jsx as jsx43, jsxs as jsxs16 } from "react/jsx-runtime";
2415
2567
  function SegmentedInputRendererComponent(props) {
2416
- const { id, children, description, error, help, label, options, selectedIndex, onSelect } = props;
2568
+ const {
2569
+ id,
2570
+ children,
2571
+ description,
2572
+ help,
2573
+ label,
2574
+ options,
2575
+ selectedIndex,
2576
+ validationState,
2577
+ onSelect
2578
+ } = props;
2417
2579
  useEffect4(() => {
2418
2580
  if (!isValidIndex2(selectedIndex, options.length)) {
2419
2581
  onSelect(0);
2420
2582
  }
2421
2583
  }, [selectedIndex, onSelect, options.length]);
2422
2584
  return /* @__PURE__ */ jsxs16(Fragment7, { children: [
2423
- /* @__PURE__ */ jsx43(FieldInput_default, { id, label, help, description, error, children: /* @__PURE__ */ jsx43(
2424
- SegmentedControl,
2585
+ /* @__PURE__ */ jsx43(
2586
+ FieldInput_default,
2425
2587
  {
2426
- name: `${id}-segmented-control`,
2427
- value: String(selectedIndex),
2428
- mode: "view",
2429
- segments: options.map((option, index) => ({
2430
- id: String(index),
2431
- value: String(index),
2432
- label: option.title,
2433
- controls: `${id}-children`
2434
- })),
2435
- onChange: (value) => onSelect(Number(value))
2588
+ id,
2589
+ label,
2590
+ help,
2591
+ description,
2592
+ validation: validationState,
2593
+ children: /* @__PURE__ */ jsx43(
2594
+ SegmentedControl,
2595
+ {
2596
+ name: `${id}-segmented-control`,
2597
+ value: String(selectedIndex),
2598
+ mode: "view",
2599
+ segments: options.map((option, index) => ({
2600
+ id: String(index),
2601
+ value: String(index),
2602
+ label: option.title,
2603
+ controls: `${id}-children`
2604
+ })),
2605
+ onChange: (value) => onSelect(Number(value))
2606
+ }
2607
+ )
2436
2608
  }
2437
- ) }),
2609
+ ),
2438
2610
  /* @__PURE__ */ jsx43("div", { id: `${id}-children`, children })
2439
2611
  ] });
2440
2612
  }
@@ -2467,15 +2639,22 @@ var StatusListRenderer = {
2467
2639
  canRenderType: "status-list",
2468
2640
  render: ({ margin, items, title }) => /* @__PURE__ */ jsxs17("div", { className: getMargin(margin), children: [
2469
2641
  title ? /* @__PURE__ */ jsx45(Header5, { title }) : null,
2470
- items.map(({ description, icon, status, title: itemTitle }) => /* @__PURE__ */ jsx45(
2642
+ items.map(({ callToAction, description, icon, status, title: itemTitle }) => /* @__PURE__ */ jsx45(
2471
2643
  Summary,
2472
2644
  {
2473
2645
  title: itemTitle,
2474
2646
  description,
2475
2647
  icon: icon && "name" in icon ? /* @__PURE__ */ jsx45(DynamicIcon_default, { name: icon.name }) : null,
2476
- status: mapStatus(status)
2648
+ status: mapStatus(status),
2649
+ action: callToAction ? {
2650
+ "aria-label": callToAction.accessibilityDescription,
2651
+ href: callToAction.href,
2652
+ text: callToAction.title,
2653
+ target: callToAction.href ? "_blank" : void 0,
2654
+ onClick: callToAction.href ? void 0 : callToAction.onClick
2655
+ } : void 0
2477
2656
  },
2478
- `${title}/${description || ""}`
2657
+ `${itemTitle}/${description || ""}`
2479
2658
  ))
2480
2659
  ] })
2481
2660
  };
@@ -2577,6 +2756,7 @@ var TextInputRenderer = {
2577
2756
  maxLength,
2578
2757
  minLength,
2579
2758
  type,
2759
+ validationState,
2580
2760
  value: initialValue
2581
2761
  } = _a, rest = __objRest(_a, [
2582
2762
  "id",
@@ -2588,11 +2768,22 @@ var TextInputRenderer = {
2588
2768
  "maxLength",
2589
2769
  "minLength",
2590
2770
  "type",
2771
+ "validationState",
2591
2772
  "value"
2592
2773
  ]);
2593
2774
  const value = initialValue != null ? initialValue : "";
2594
2775
  const inputProps = __spreadProps(__spreadValues({}, rest), { value, id });
2595
- return /* @__PURE__ */ jsx47(FieldInput_default, { id, label, description, error, help, children: /* @__PURE__ */ jsx47(VariableTextInput_default, { control, inputProps }) });
2776
+ return /* @__PURE__ */ jsx47(
2777
+ FieldInput_default,
2778
+ {
2779
+ id,
2780
+ label,
2781
+ description,
2782
+ validation: validationState,
2783
+ help,
2784
+ children: /* @__PURE__ */ jsx47(VariableTextInput_default, { control, inputProps })
2785
+ }
2786
+ );
2596
2787
  }
2597
2788
  };
2598
2789
  var TextInputRenderer_default = TextInputRenderer;
@@ -2603,7 +2794,7 @@ import { jsx as jsx48 } from "react/jsx-runtime";
2603
2794
  var UploadInputRenderer = {
2604
2795
  canRenderType: "input-upload",
2605
2796
  render: (props) => {
2606
- const { id, accepts, error, label, description, disabled, maxSize, onUpload } = props;
2797
+ const { id, accepts, label, description, disabled, maxSize, validationState, onUpload } = props;
2607
2798
  const onUploadFile = async (formData) => {
2608
2799
  const file = formData.get("file");
2609
2800
  return onUpload(file).then(() => ({
@@ -2615,19 +2806,28 @@ var UploadInputRenderer = {
2615
2806
  };
2616
2807
  return (
2617
2808
  // We don't pass help here as there is no sensible place to display it
2618
- /* @__PURE__ */ jsx48(UploadFieldInput_default, { id, label: void 0, description: void 0, error, children: /* @__PURE__ */ jsx48(
2619
- UploadInput2,
2809
+ /* @__PURE__ */ jsx48(
2810
+ UploadFieldInput_default,
2620
2811
  {
2621
2812
  id,
2622
- description,
2623
- disabled,
2624
- fileTypes: getAcceptsString(accepts),
2625
- sizeLimit: maxSize ? toKilobytes(maxSize) : void 0,
2626
- uploadButtonTitle: label,
2627
- onDeleteFile,
2628
- onUploadFile
2813
+ label: void 0,
2814
+ description: void 0,
2815
+ validation: validationState,
2816
+ children: /* @__PURE__ */ jsx48(
2817
+ UploadInput2,
2818
+ {
2819
+ id,
2820
+ description,
2821
+ disabled,
2822
+ fileTypes: getAcceptsString(accepts),
2823
+ sizeLimit: maxSize ? toKilobytes(maxSize) : void 0,
2824
+ uploadButtonTitle: label,
2825
+ onDeleteFile,
2826
+ onUploadFile
2827
+ }
2828
+ )
2629
2829
  }
2630
- ) })
2830
+ )
2631
2831
  );
2632
2832
  }
2633
2833
  };
@@ -2642,10 +2842,10 @@ var LargeUploadRenderer = {
2642
2842
  label,
2643
2843
  description,
2644
2844
  disabled,
2645
- error,
2646
2845
  help,
2647
2846
  maxSize,
2648
2847
  type,
2848
+ validationState,
2649
2849
  onUpload
2650
2850
  } = _a, rest = __objRest(_a, [
2651
2851
  "id",
@@ -2654,10 +2854,10 @@ var LargeUploadRenderer = {
2654
2854
  "label",
2655
2855
  "description",
2656
2856
  "disabled",
2657
- "error",
2658
2857
  "help",
2659
2858
  "maxSize",
2660
2859
  "type",
2860
+ "validationState",
2661
2861
  "onUpload"
2662
2862
  ]);
2663
2863
  const uploadProps = __spreadProps(__spreadValues({}, rest), { id, name: id });
@@ -2670,16 +2870,26 @@ var LargeUploadRenderer = {
2670
2870
  throw e;
2671
2871
  }
2672
2872
  };
2673
- return /* @__PURE__ */ jsx48(FieldInput_default, { id, label, description, error, help, children: /* @__PURE__ */ jsx48(
2674
- Upload,
2675
- __spreadProps(__spreadValues({}, uploadProps), {
2676
- usAccept: getAcceptsString(accepts),
2677
- usDisabled: disabled,
2678
- onSuccess: onUploadFile,
2679
- onFailure: async () => onUpload(null),
2680
- onCancel: async () => onUpload(null)
2681
- })
2682
- ) });
2873
+ return /* @__PURE__ */ jsx48(
2874
+ FieldInput_default,
2875
+ {
2876
+ id,
2877
+ label,
2878
+ description,
2879
+ validation: validationState,
2880
+ help,
2881
+ children: /* @__PURE__ */ jsx48(
2882
+ Upload,
2883
+ __spreadProps(__spreadValues({}, uploadProps), {
2884
+ usAccept: getAcceptsString(accepts),
2885
+ usDisabled: disabled,
2886
+ onSuccess: onUploadFile,
2887
+ onFailure: async () => onUpload(null),
2888
+ onCancel: async () => onUpload(null)
2889
+ })
2890
+ )
2891
+ }
2892
+ );
2683
2893
  }
2684
2894
  };
2685
2895
 
@@ -2748,11 +2958,11 @@ var getFieldValue = (value, help, orientation) => {
2748
2958
  import { useMemo } from "react";
2749
2959
 
2750
2960
  // ../renderers/src/step/ExternalConfirmationDialog.tsx
2751
- import { useIntl as useIntl7 } from "react-intl";
2961
+ import { useIntl as useIntl8 } from "react-intl";
2752
2962
 
2753
2963
  // ../renderers/src/messages/external-confirmation.messages.ts
2754
- import { defineMessages as defineMessages6 } from "react-intl";
2755
- var external_confirmation_messages_default = defineMessages6({
2964
+ import { defineMessages as defineMessages7 } from "react-intl";
2965
+ var external_confirmation_messages_default = defineMessages7({
2756
2966
  title: {
2757
2967
  id: "df.wise.ExternalConfirmation.title",
2758
2968
  defaultMessage: "Please confirm",
@@ -2776,19 +2986,19 @@ var external_confirmation_messages_default = defineMessages6({
2776
2986
  });
2777
2987
 
2778
2988
  // ../renderers/src/step/ExternalConfirmationDialog.tsx
2779
- import { Button as Button5, Markdown as Markdown5 } from "@transferwise/components";
2989
+ import { Button as Button6, Markdown as Markdown5 } from "@transferwise/components";
2780
2990
  import { jsx as jsx50, jsxs as jsxs19 } from "react/jsx-runtime";
2781
2991
  function ExternalConfirmationDialog({
2782
2992
  external,
2783
2993
  onClose
2784
2994
  }) {
2785
- const { formatMessage } = useIntl7();
2995
+ const { formatMessage } = useIntl8();
2786
2996
  return /* @__PURE__ */ jsx50("div", { className: "df-box-renderer-fixed-width", children: /* @__PURE__ */ jsxs19("div", { className: "df-box-renderer-width-lg", children: [
2787
2997
  /* @__PURE__ */ jsx50("h2", { className: "text-xs-center m-b-5", children: formatMessage(external_confirmation_messages_default.title) }),
2788
2998
  /* @__PURE__ */ jsx50(Markdown5, { config: { link: { target: "_blank" } }, className: "text-xs-center m-b-5", children: formatMessage(external_confirmation_messages_default.description, { origin: getOrigin(external.url) }) }),
2789
2999
  /* @__PURE__ */ jsx50("div", { className: "df-box-renderer-fixed-width", children: /* @__PURE__ */ jsxs19("div", { className: "df-box-renderer-width-lg", children: [
2790
3000
  /* @__PURE__ */ jsx50(
2791
- Button5,
3001
+ Button6,
2792
3002
  {
2793
3003
  block: true,
2794
3004
  className: "m-b-2",
@@ -2801,7 +3011,7 @@ function ExternalConfirmationDialog({
2801
3011
  children: formatMessage(external_confirmation_messages_default.open)
2802
3012
  }
2803
3013
  ),
2804
- /* @__PURE__ */ jsx50(Button5, { block: true, className: "m-b-2", priority: "tertiary", size: "md", onClick: onClose, children: formatMessage(external_confirmation_messages_default.cancel) })
3014
+ /* @__PURE__ */ jsx50(Button6, { block: true, className: "m-b-2", priority: "tertiary", size: "md", onClick: onClose, children: formatMessage(external_confirmation_messages_default.cancel) })
2805
3015
  ] }) })
2806
3016
  ] }) });
2807
3017
  }
@@ -2835,15 +3045,13 @@ import { ArrowLeft } from "@transferwise/icons";
2835
3045
  import { jsx as jsx51, jsxs as jsxs20 } from "react/jsx-runtime";
2836
3046
  function BackButton({ title, onClick }) {
2837
3047
  return /* @__PURE__ */ jsx51("div", { className: "m-b-2", children: /* @__PURE__ */ jsxs20(
2838
- "a",
3048
+ "button",
2839
3049
  {
2840
- href: "/",
3050
+ type: "button",
2841
3051
  className: "df-back-btn",
3052
+ title,
2842
3053
  "aria-label": title,
2843
- onClick: (event) => {
2844
- event.preventDefault();
2845
- onClick();
2846
- },
3054
+ onClick,
2847
3055
  children: [
2848
3056
  /* @__PURE__ */ jsx51("span", { className: "sr-only", children: title }),
2849
3057
  /* @__PURE__ */ jsx51(Avatar4, { type: "icon", children: /* @__PURE__ */ jsx51(ArrowLeft, { size: "24" }) })
@@ -2935,7 +3143,7 @@ var DynamicFragment = forwardRef2(function DynamicFragment2(props, ref) {
2935
3143
  return /* @__PURE__ */ jsx53(RendererHttpClientProvider, { httpClient, children: /* @__PURE__ */ jsx53(DynamicFragmentCore, __spreadProps(__spreadValues({}, coreProps), { ref })) });
2936
3144
  });
2937
3145
  var useWiseHttpClient = (httpClient) => {
2938
- const { locale } = useIntl8();
3146
+ const { locale } = useIntl9();
2939
3147
  return useCallback(
2940
3148
  async (input, init = {}) => {
2941
3149
  const headers = new Headers(init.headers);