@wise/dynamic-flow-client 5.15.1 → 5.16.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.
Files changed (69) hide show
  1. package/build/i18n/cs.json +3 -0
  2. package/build/i18n/de.json +3 -0
  3. package/build/i18n/en.json +3 -0
  4. package/build/i18n/es.json +3 -0
  5. package/build/i18n/fr.json +3 -0
  6. package/build/i18n/hu.json +3 -0
  7. package/build/i18n/id.json +3 -0
  8. package/build/i18n/it.json +3 -0
  9. package/build/i18n/ja.json +3 -0
  10. package/build/i18n/nl.json +3 -0
  11. package/build/i18n/pl.json +3 -0
  12. package/build/i18n/pt.json +3 -0
  13. package/build/i18n/ro.json +3 -0
  14. package/build/i18n/ru.json +3 -0
  15. package/build/i18n/th.json +3 -0
  16. package/build/i18n/tr.json +3 -0
  17. package/build/i18n/uk.json +3 -0
  18. package/build/i18n/zh_CN.json +3 -0
  19. package/build/i18n/zh_HK.json +3 -0
  20. package/build/main.js +347 -84
  21. package/build/main.mjs +345 -82
  22. package/build/tsconfig.types.tsbuildinfo +1 -1
  23. package/build/types/common/messages/download.messages.d.ts +19 -0
  24. package/build/types/common/messages/download.messages.d.ts.map +1 -0
  25. package/build/types/controller/FlowController.d.ts +32 -3
  26. package/build/types/controller/FlowController.d.ts.map +1 -1
  27. package/build/types/controller/executeDownload.d.ts +11 -0
  28. package/build/types/controller/executeDownload.d.ts.map +1 -0
  29. package/build/types/controller/getFilenameFromContentDisposition.d.ts +2 -0
  30. package/build/types/controller/getFilenameFromContentDisposition.d.ts.map +1 -0
  31. package/build/types/domain/components/DateInputComponent.d.ts +3 -2
  32. package/build/types/domain/components/DateInputComponent.d.ts.map +1 -1
  33. package/build/types/domain/components/IntegerInputComponent.d.ts +3 -2
  34. package/build/types/domain/components/IntegerInputComponent.d.ts.map +1 -1
  35. package/build/types/domain/components/NumberInputComponent.d.ts +3 -2
  36. package/build/types/domain/components/NumberInputComponent.d.ts.map +1 -1
  37. package/build/types/domain/components/PersistAsyncComponent.d.ts +1 -0
  38. package/build/types/domain/components/PersistAsyncComponent.d.ts.map +1 -1
  39. package/build/types/domain/components/TextInputComponent.d.ts +3 -2
  40. package/build/types/domain/components/TextInputComponent.d.ts.map +1 -1
  41. package/build/types/domain/components/step/StepDomainComponent.d.ts +2 -0
  42. package/build/types/domain/components/step/StepDomainComponent.d.ts.map +1 -1
  43. package/build/types/domain/features/validation/spec-utils.d.ts.map +1 -1
  44. package/build/types/domain/features/validationAsync/getComponentValidationAsync.d.ts.map +1 -1
  45. package/build/types/domain/features/validationAsync/getInitialValidationAsyncState.d.ts.map +1 -1
  46. package/build/types/domain/features/validationAsync/getPerformValidationAsync.d.ts.map +1 -1
  47. package/build/types/domain/mappers/mapStepToComponent.d.ts.map +1 -1
  48. package/build/types/domain/mappers/schema/persistAsyncSchemaToComponent.d.ts +14 -0
  49. package/build/types/domain/mappers/schema/persistAsyncSchemaToComponent.d.ts.map +1 -1
  50. package/build/types/domain/mappers/schema/utils/mapCommonSchemaProps.d.ts +1 -0
  51. package/build/types/domain/mappers/schema/utils/mapCommonSchemaProps.d.ts.map +1 -1
  52. package/build/types/domain/mappers/types.d.ts +3 -0
  53. package/build/types/domain/mappers/types.d.ts.map +1 -1
  54. package/build/types/domain/types.d.ts +7 -2
  55. package/build/types/domain/types.d.ts.map +1 -1
  56. package/build/types/renderers/getSchemaErrorMessageFunction.d.ts.map +1 -1
  57. package/build/types/renderers/mappers/persistAsyncComponentToProps.d.ts +2 -1
  58. package/build/types/renderers/mappers/persistAsyncComponentToProps.d.ts.map +1 -1
  59. package/build/types/renderers/mappers/utils/inputComponentToProps.d.ts +3 -1
  60. package/build/types/renderers/mappers/utils/inputComponentToProps.d.ts.map +1 -1
  61. package/build/types/renderers/subflow/getDynamicSubflowRenderer.d.ts +1 -0
  62. package/build/types/renderers/subflow/getDynamicSubflowRenderer.d.ts.map +1 -1
  63. package/build/types/test-utils/DynamicFlowWise.d.ts.map +1 -1
  64. package/build/types/test-utils/useSnackBar.d.ts +9 -0
  65. package/build/types/test-utils/useSnackBar.d.ts.map +1 -0
  66. package/build/types/types.d.ts +3 -29
  67. package/build/types/types.d.ts.map +1 -1
  68. package/build/types/useDynamicFlow.d.ts.map +1 -1
  69. package/package.json +23 -23
package/build/main.mjs CHANGED
@@ -79,6 +79,9 @@ var cs_default = {
79
79
  "dynamicFlows.ControlFeedback.patternDate": "Zadejte pros\xEDm datum ve spr\xE1vn\xE9m form\xE1tu.",
80
80
  "dynamicFlows.ControlFeedback.required": "Vypl\u0148te pros\xEDm toto pole.",
81
81
  "dynamicFlows.ControlFeedback.type": "Nespr\xE1vn\xFD typ",
82
+ "dynamicFlows.DownloadFeedback.failed": "Stahov\xE1n\xED se nezda\u0159ilo",
83
+ "dynamicFlows.DownloadFeedback.started": "Stahov\xE1n\xED...",
84
+ "dynamicFlows.DownloadFeedback.successful": "Stahov\xE1n\xED prob\u011Bhlo \xFAsp\u011B\u0161n\u011B",
82
85
  "dynamicFlows.DynamicParagraph.copied": "Zkop\xEDrov\xE1no do schr\xE1nky",
83
86
  "dynamicFlows.DynamicParagraph.copy": "Kop\xEDrovat",
84
87
  "dynamicFlows.ErrorBoundary.errorAlert": "N\u011Bco se pokazilo.",
@@ -116,6 +119,9 @@ var de_default = {
116
119
  "dynamicFlows.ControlFeedback.patternDate": "Bitte gib ein Datum im richtigen Format ein.",
117
120
  "dynamicFlows.ControlFeedback.required": "Bitte f\xFClle dieses Feld aus.",
118
121
  "dynamicFlows.ControlFeedback.type": "Falscher Typ",
122
+ "dynamicFlows.DownloadFeedback.failed": "Download fehlgeschlagenen",
123
+ "dynamicFlows.DownloadFeedback.started": "Wird heruntergeladen...",
124
+ "dynamicFlows.DownloadFeedback.successful": "Erfolgreich heruntergeladen",
119
125
  "dynamicFlows.DynamicParagraph.copied": "In Zwischenablage kopiert",
120
126
  "dynamicFlows.DynamicParagraph.copy": "Kopieren",
121
127
  "dynamicFlows.ErrorBoundary.errorAlert": "Da ist etwas schiefgegangen.",
@@ -153,6 +159,9 @@ var en_default = {
153
159
  "dynamicFlows.ControlFeedback.patternDate": "Please enter a date in the corrrect format.",
154
160
  "dynamicFlows.ControlFeedback.required": "Please fill out this field.",
155
161
  "dynamicFlows.ControlFeedback.type": "Incorrect type",
162
+ "dynamicFlows.DownloadFeedback.failed": "Download failed",
163
+ "dynamicFlows.DownloadFeedback.started": "Downloading...",
164
+ "dynamicFlows.DownloadFeedback.successful": "Download successful",
156
165
  "dynamicFlows.DynamicParagraph.copied": "Copied to clipboard",
157
166
  "dynamicFlows.DynamicParagraph.copy": "Copy",
158
167
  "dynamicFlows.ErrorBoundary.errorAlert": "Something went wrong.",
@@ -190,6 +199,9 @@ var es_default = {
190
199
  "dynamicFlows.ControlFeedback.patternDate": "Introduce la fecha en un formato correcto.",
191
200
  "dynamicFlows.ControlFeedback.required": "Completa este campo.",
192
201
  "dynamicFlows.ControlFeedback.type": "Tipo incorrecto",
202
+ "dynamicFlows.DownloadFeedback.failed": "Descarga fallida",
203
+ "dynamicFlows.DownloadFeedback.started": "Descargando...",
204
+ "dynamicFlows.DownloadFeedback.successful": "Descarga correcta",
193
205
  "dynamicFlows.DynamicParagraph.copied": "Copiado al portapapeles",
194
206
  "dynamicFlows.DynamicParagraph.copy": "Copiar",
195
207
  "dynamicFlows.ErrorBoundary.errorAlert": "Ha habido un error.",
@@ -227,6 +239,9 @@ var fr_default = {
227
239
  "dynamicFlows.ControlFeedback.patternDate": "Veuillez saisir une date au format correct.",
228
240
  "dynamicFlows.ControlFeedback.required": "Champ obligatoire.",
229
241
  "dynamicFlows.ControlFeedback.type": "Type incorrect",
242
+ "dynamicFlows.DownloadFeedback.failed": "\xC9chec du t\xE9l\xE9chargement",
243
+ "dynamicFlows.DownloadFeedback.started": "T\xE9l\xE9chargement...",
244
+ "dynamicFlows.DownloadFeedback.successful": "T\xE9l\xE9chargement r\xE9ussi",
230
245
  "dynamicFlows.DynamicParagraph.copied": "Copi\xE9 dans le presse-papier",
231
246
  "dynamicFlows.DynamicParagraph.copy": "Copier",
232
247
  "dynamicFlows.ErrorBoundary.errorAlert": "Une erreur s'est produite.",
@@ -264,6 +279,9 @@ var hu_default = {
264
279
  "dynamicFlows.ControlFeedback.patternDate": "K\xE9r\xFCnk, hogy a d\xE1tumot helyes form\xE1tumban add meg.",
265
280
  "dynamicFlows.ControlFeedback.required": "K\xE9r\xFCnk, t\xF6ltsd ki ezt a mez\u0151t.",
266
281
  "dynamicFlows.ControlFeedback.type": "Helytelen t\xEDpus",
282
+ "dynamicFlows.DownloadFeedback.failed": "Sikertelen let\xF6lt\xE9s",
283
+ "dynamicFlows.DownloadFeedback.started": "Let\xF6lt\xE9s...",
284
+ "dynamicFlows.DownloadFeedback.successful": "Let\xF6lt\xE9s sikeres",
267
285
  "dynamicFlows.DynamicParagraph.copied": "V\xE1g\xF3lapra m\xE1solva",
268
286
  "dynamicFlows.DynamicParagraph.copy": "M\xE1sol\xE1s",
269
287
  "dynamicFlows.ErrorBoundary.errorAlert": "Valami hiba t\xF6rt\xE9nt.",
@@ -301,6 +319,9 @@ var id_default = {
301
319
  "dynamicFlows.ControlFeedback.patternDate": "Harap masukkan tanggal dalam format yang benar.",
302
320
  "dynamicFlows.ControlFeedback.required": "Harap isi kolom ini.",
303
321
  "dynamicFlows.ControlFeedback.type": "Tipe salah",
322
+ "dynamicFlows.DownloadFeedback.failed": "Pengunduhan gagal",
323
+ "dynamicFlows.DownloadFeedback.started": "Mengunduh...",
324
+ "dynamicFlows.DownloadFeedback.successful": "Pengunduhan berhasil",
304
325
  "dynamicFlows.DynamicParagraph.copied": "Disalin ke clipboard",
305
326
  "dynamicFlows.DynamicParagraph.copy": "Salin",
306
327
  "dynamicFlows.ErrorBoundary.errorAlert": "Terjadi kesalahan.",
@@ -338,6 +359,9 @@ var it_default = {
338
359
  "dynamicFlows.ControlFeedback.patternDate": "Inserisci la data in un formato corretto.",
339
360
  "dynamicFlows.ControlFeedback.required": "Compila questo campo.",
340
361
  "dynamicFlows.ControlFeedback.type": "Tipo errato",
362
+ "dynamicFlows.DownloadFeedback.failed": "Download non riuscito",
363
+ "dynamicFlows.DownloadFeedback.started": "Download in corso...",
364
+ "dynamicFlows.DownloadFeedback.successful": "Download completato",
341
365
  "dynamicFlows.DynamicParagraph.copied": "Copiato negli appunti",
342
366
  "dynamicFlows.DynamicParagraph.copy": "Copia",
343
367
  "dynamicFlows.ErrorBoundary.errorAlert": "Qualcosa non ha funzionato.",
@@ -375,6 +399,9 @@ var ja_default = {
375
399
  "dynamicFlows.ControlFeedback.patternDate": "\u6B63\u3057\u3044\u5F62\u5F0F\u3067\u65E5\u4ED8\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
376
400
  "dynamicFlows.ControlFeedback.required": "\u3053\u306E\u9805\u76EE\u306F\u5165\u529B\u5FC5\u9808\u3067\u3059\u3002",
377
401
  "dynamicFlows.ControlFeedback.type": "\u4E0D\u6B63\u306A\u30BF\u30A4\u30D7",
402
+ "dynamicFlows.DownloadFeedback.failed": "\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
403
+ "dynamicFlows.DownloadFeedback.started": "\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u4E2D...",
404
+ "dynamicFlows.DownloadFeedback.successful": "\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u304C\u5B8C\u4E86\u3057\u307E\u3057\u305F",
378
405
  "dynamicFlows.DynamicParagraph.copied": "\u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9\u3078\u30B3\u30D4\u30FC\u3057\u307E\u3057\u305F",
379
406
  "dynamicFlows.DynamicParagraph.copy": "\u30B3\u30D4\u30FC\u3059\u308B",
380
407
  "dynamicFlows.ErrorBoundary.errorAlert": "\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002",
@@ -412,6 +439,9 @@ var nl_default = {
412
439
  "dynamicFlows.ControlFeedback.patternDate": "Voer een datum in de juiste indeling in.",
413
440
  "dynamicFlows.ControlFeedback.required": "Vul dit veld in.",
414
441
  "dynamicFlows.ControlFeedback.type": "Onjuist type",
442
+ "dynamicFlows.DownloadFeedback.failed": "Downloaden mislukt",
443
+ "dynamicFlows.DownloadFeedback.started": "Downloaden...",
444
+ "dynamicFlows.DownloadFeedback.successful": "Download gelukt",
415
445
  "dynamicFlows.DynamicParagraph.copied": "Naar klembord gekopieerd",
416
446
  "dynamicFlows.DynamicParagraph.copy": "Kopi\xEBren",
417
447
  "dynamicFlows.ErrorBoundary.errorAlert": "Er is iets misgegaan.",
@@ -449,6 +479,9 @@ var pl_default = {
449
479
  "dynamicFlows.ControlFeedback.patternDate": "Wprowad\u017A dat\u0119 w prawid\u0142owym formacie.",
450
480
  "dynamicFlows.ControlFeedback.required": "Prosz\u0119 wype\u0142ni\u0107 to pole.",
451
481
  "dynamicFlows.ControlFeedback.type": "Nieprawid\u0142owy typ",
482
+ "dynamicFlows.DownloadFeedback.failed": "Pobieranie nieudane",
483
+ "dynamicFlows.DownloadFeedback.started": "Pobieranie...",
484
+ "dynamicFlows.DownloadFeedback.successful": "Pobieranie zako\u0144czone powodzeniem",
452
485
  "dynamicFlows.DynamicParagraph.copied": "Skopiowano do schowka",
453
486
  "dynamicFlows.DynamicParagraph.copy": "Kopiuj",
454
487
  "dynamicFlows.ErrorBoundary.errorAlert": "Co\u015B posz\u0142o nie tak.",
@@ -486,6 +519,9 @@ var pt_default = {
486
519
  "dynamicFlows.ControlFeedback.patternDate": "Por favor, insira a data no formato correto.",
487
520
  "dynamicFlows.ControlFeedback.required": "Por favor, preencha o campo.",
488
521
  "dynamicFlows.ControlFeedback.type": "Tipo incorreto",
522
+ "dynamicFlows.DownloadFeedback.failed": "Falha no envio",
523
+ "dynamicFlows.DownloadFeedback.started": "Baixando...",
524
+ "dynamicFlows.DownloadFeedback.successful": "Download successful",
489
525
  "dynamicFlows.DynamicParagraph.copied": "Copiado",
490
526
  "dynamicFlows.DynamicParagraph.copy": "Copiar",
491
527
  "dynamicFlows.ErrorBoundary.errorAlert": "Algo deu errado.",
@@ -523,6 +559,9 @@ var ro_default = {
523
559
  "dynamicFlows.ControlFeedback.patternDate": "Te rug\u0103m s\u0103 introduci o dat\u0103 \xEEn formatul corect.",
524
560
  "dynamicFlows.ControlFeedback.required": "Te rug\u0103m s\u0103 completezi acest spa\u021Biu.",
525
561
  "dynamicFlows.ControlFeedback.type": "Tip incorect",
562
+ "dynamicFlows.DownloadFeedback.failed": "Desc\u0103rcare e\u0219uat\u0103",
563
+ "dynamicFlows.DownloadFeedback.started": "Se descarc\u0103...",
564
+ "dynamicFlows.DownloadFeedback.successful": "Desc\u0103rcare reu\u0219it\u0103",
526
565
  "dynamicFlows.DynamicParagraph.copied": "Copiat \xEEn clipboard",
527
566
  "dynamicFlows.DynamicParagraph.copy": "Copiaz\u0103",
528
567
  "dynamicFlows.ErrorBoundary.errorAlert": "Ceva nu a mers bine.",
@@ -560,6 +599,9 @@ var ru_default = {
560
599
  "dynamicFlows.ControlFeedback.patternDate": "\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0434\u0430\u0442\u0443 \u0432 \u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u043E\u043C \u0444\u043E\u0440\u043C\u0430\u0442\u0435.",
561
600
  "dynamicFlows.ControlFeedback.required": "\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0437\u0430\u043F\u043E\u043B\u043D\u0438\u0442\u0435 \u0434\u0430\u043D\u043D\u043E\u0435 \u043F\u043E\u043B\u0435.",
562
601
  "dynamicFlows.ControlFeedback.type": "\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0442\u0438\u043F",
602
+ "dynamicFlows.DownloadFeedback.failed": "\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0441\u043A\u0430\u0447\u0430\u0442\u044C",
603
+ "dynamicFlows.DownloadFeedback.started": "\u0421\u043A\u0430\u0447\u0438\u0432\u0430\u043D\u0438\u0435...",
604
+ "dynamicFlows.DownloadFeedback.successful": "Download successful",
563
605
  "dynamicFlows.DynamicParagraph.copied": "\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u043E \u0432 \u0431\u0443\u0444\u0435\u0440 \u043E\u0431\u043C\u0435\u043D\u0430",
564
606
  "dynamicFlows.DynamicParagraph.copy": "\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C",
565
607
  "dynamicFlows.ErrorBoundary.errorAlert": "\u0427\u0442\u043E-\u0442\u043E \u043F\u043E\u0448\u043B\u043E \u043D\u0435 \u0442\u0430\u043A.",
@@ -597,6 +639,9 @@ var th_default = {
597
639
  "dynamicFlows.ControlFeedback.patternDate": "\u0E42\u0E1B\u0E23\u0E14\u0E1B\u0E49\u0E2D\u0E19\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E43\u0E19\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E17\u0E35\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07",
598
640
  "dynamicFlows.ControlFeedback.required": "\u0E42\u0E1B\u0E23\u0E14\u0E43\u0E2A\u0E48\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E43\u0E19\u0E0A\u0E48\u0E2D\u0E07\u0E19\u0E35\u0E49",
599
641
  "dynamicFlows.ControlFeedback.type": "\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07",
642
+ "dynamicFlows.DownloadFeedback.failed": "\u0E14\u0E32\u0E27\u0E19\u0E4C\u0E42\u0E2B\u0E25\u0E14\u0E25\u0E49\u0E21\u0E40\u0E2B\u0E25\u0E27",
643
+ "dynamicFlows.DownloadFeedback.started": "\u0E01\u0E33\u0E25\u0E31\u0E07\u0E14\u0E32\u0E27\u0E19\u0E4C\u0E42\u0E2B\u0E25\u0E14...",
644
+ "dynamicFlows.DownloadFeedback.successful": "Download successful",
600
645
  "dynamicFlows.DynamicParagraph.copied": "\u0E04\u0E31\u0E14\u0E25\u0E2D\u0E01\u0E44\u0E1B\u0E22\u0E31\u0E07\u0E04\u0E25\u0E34\u0E1B\u0E1A\u0E2D\u0E23\u0E4C\u0E14",
601
646
  "dynamicFlows.DynamicParagraph.copy": "\u0E04\u0E31\u0E14\u0E25\u0E2D\u0E01",
602
647
  "dynamicFlows.ErrorBoundary.errorAlert": "\u0E40\u0E01\u0E34\u0E14\u0E02\u0E49\u0E2D\u0E1C\u0E34\u0E14\u0E1E\u0E25\u0E32\u0E14\u0E1A\u0E32\u0E07\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E02\u0E36\u0E49\u0E19",
@@ -634,6 +679,9 @@ var tr_default = {
634
679
  "dynamicFlows.ControlFeedback.patternDate": "L\xFCtfen tarihi do\u011Fru bi\xE7imde girin.",
635
680
  "dynamicFlows.ControlFeedback.required": "L\xFCtfen bu alan\u0131 doldurun.",
636
681
  "dynamicFlows.ControlFeedback.type": "Ge\xE7ersiz se\xE7im",
682
+ "dynamicFlows.DownloadFeedback.failed": "\u0130ndirme ba\u015Far\u0131s\u0131z",
683
+ "dynamicFlows.DownloadFeedback.started": "\u0130ndiriliyor...",
684
+ "dynamicFlows.DownloadFeedback.successful": "Download successful",
637
685
  "dynamicFlows.DynamicParagraph.copied": "Panoya kopyaland\u0131",
638
686
  "dynamicFlows.DynamicParagraph.copy": "Kopyala",
639
687
  "dynamicFlows.ErrorBoundary.errorAlert": "Bir sorun olu\u015Ftu.",
@@ -671,6 +719,9 @@ var zh_CN_default = {
671
719
  "dynamicFlows.ControlFeedback.patternDate": "\u8BF7\u4EE5\u6B63\u786E\u7684\u683C\u5F0F\u8F93\u5165\u65E5\u671F",
672
720
  "dynamicFlows.ControlFeedback.required": "\u8BF7\u586B\u5199\u6B64\u5B57\u6BB5\u3002",
673
721
  "dynamicFlows.ControlFeedback.type": "\u7C7B\u578B\u9519\u8BEF",
722
+ "dynamicFlows.DownloadFeedback.failed": "\u4E0B\u8F7D\u5931\u8D25",
723
+ "dynamicFlows.DownloadFeedback.started": "\u6B63\u5728\u4E0B\u8F7D...",
724
+ "dynamicFlows.DownloadFeedback.successful": "Download successful",
674
725
  "dynamicFlows.DynamicParagraph.copied": "\u5DF2\u590D\u5236\u5230\u526A\u8D34\u677F",
675
726
  "dynamicFlows.DynamicParagraph.copy": "\u590D\u5236",
676
727
  "dynamicFlows.ErrorBoundary.errorAlert": "\u51FA\u9519\u4E86\u3002",
@@ -708,6 +759,9 @@ var zh_HK_default = {
708
759
  "dynamicFlows.ControlFeedback.patternDate": "\u8ACB\u4EE5\u6B63\u78BA\u683C\u5F0F\u8F38\u5165\u65E5\u671F\u3002",
709
760
  "dynamicFlows.ControlFeedback.required": "\u8ACB\u586B\u5BEB\u6B64\u6B04\u4F4D\u3002",
710
761
  "dynamicFlows.ControlFeedback.type": "\u932F\u8AA4\u7684\u985E\u578B",
762
+ "dynamicFlows.DownloadFeedback.failed": "\u4E0B\u8F09\u5931\u6557",
763
+ "dynamicFlows.DownloadFeedback.started": "\u4E0B\u8F09\u4E2D...",
764
+ "dynamicFlows.DownloadFeedback.successful": "\u4E0B\u8F09\u6210\u529F",
711
765
  "dynamicFlows.DynamicParagraph.copied": "\u8907\u88FD\u5230\u526A\u8CBC\u677F",
712
766
  "dynamicFlows.DynamicParagraph.copy": "\u8907\u88FD",
713
767
  "dynamicFlows.ErrorBoundary.errorAlert": "\u51FA\u4E86\u4E9B\u554F\u984C\u3002",
@@ -2566,13 +2620,14 @@ var getLocalValues = (components) => components.map((component) => component.get
2566
2620
 
2567
2621
  // src/domain/components/step/StepDomainComponent.ts
2568
2622
  var createStepComponent = (stepProps) => {
2569
- const _a = stepProps, { uid, stepPolling, stepRefreshAfter, stepPrefetch, onComponentUpdate } = _a, rest = __objRest(_a, ["uid", "stepPolling", "stepRefreshAfter", "stepPrefetch", "onComponentUpdate"]);
2623
+ const _a = stepProps, { uid, stepPolling, stepRefreshAfter, stepPrefetch, onComponentUpdate, onLoad } = _a, rest = __objRest(_a, ["uid", "stepPolling", "stepRefreshAfter", "stepPrefetch", "onComponentUpdate", "onLoad"]);
2570
2624
  const update = getInputUpdateFunction(onComponentUpdate);
2571
2625
  const component = __spreadProps(__spreadValues({
2572
2626
  uid
2573
2627
  }, rest), {
2574
2628
  type: "step",
2575
2629
  kind: "step",
2630
+ state: "initial",
2576
2631
  modals: [],
2577
2632
  requestCache: stepPrefetch.requestCache,
2578
2633
  subflow: null,
@@ -2635,6 +2690,12 @@ var createStepComponent = (stepProps) => {
2635
2690
  });
2636
2691
  },
2637
2692
  start() {
2693
+ if (this.state === "initial") {
2694
+ onLoad == null ? void 0 : onLoad();
2695
+ }
2696
+ this._update((draft) => {
2697
+ draft.state = "started";
2698
+ });
2638
2699
  stepPolling == null ? void 0 : stepPolling.start();
2639
2700
  stepRefreshAfter == null ? void 0 : stepRefreshAfter.start();
2640
2701
  stepPrefetch.start(this.getSubmittableValueSync());
@@ -2644,6 +2705,7 @@ var createStepComponent = (stepProps) => {
2644
2705
  stepRefreshAfter == null ? void 0 : stepRefreshAfter.stop();
2645
2706
  stepPrefetch.stop();
2646
2707
  this._update((draft) => {
2708
+ draft.state = "stopped";
2647
2709
  draft.modals = [];
2648
2710
  });
2649
2711
  }
@@ -3185,7 +3247,8 @@ var getComponentValidationAsync = (update, performValidationAsync) => (
3185
3247
  draft.validationAsyncState = {
3186
3248
  abortController: newAbortController,
3187
3249
  lastSubmitted: currentValue,
3188
- messages: {}
3250
+ messages: {},
3251
+ loadingState: "idle"
3189
3252
  };
3190
3253
  });
3191
3254
  return;
@@ -3196,6 +3259,7 @@ var getComponentValidationAsync = (update, performValidationAsync) => (
3196
3259
  if (message) {
3197
3260
  draft.validationAsyncState.messages.success = message;
3198
3261
  }
3262
+ draft.validationAsyncState.loadingState = "idle";
3199
3263
  });
3200
3264
  return message;
3201
3265
  }).catch((error) => {
@@ -3204,13 +3268,15 @@ var getComponentValidationAsync = (update, performValidationAsync) => (
3204
3268
  }
3205
3269
  update(component, (draft) => {
3206
3270
  draft.validationAsyncState.messages.error = error.message;
3271
+ draft.validationAsyncState.loadingState = "idle";
3207
3272
  });
3208
3273
  });
3209
3274
  update(component, (draft) => {
3210
3275
  draft.validationAsyncState = {
3211
3276
  abortController: newAbortController,
3212
3277
  lastSubmitted: currentValue,
3213
- messages: {}
3278
+ messages: {},
3279
+ loadingState: "pending"
3214
3280
  };
3215
3281
  });
3216
3282
  return newSubmission;
@@ -3313,22 +3379,23 @@ var getSchemaOnChange = (schema, onBehavior) => {
3313
3379
  return void 0;
3314
3380
  };
3315
3381
  var getBehaviorFromSchemaOnChange = (schema) => {
3382
+ var _a;
3316
3383
  if ("onChange" in schema && schema.onChange) {
3317
3384
  const { $id, analyticsId, onChange } = schema;
3318
3385
  const behavior = __spreadProps(__spreadValues({}, normaliseBehavior(onChange, [])), {
3319
- analytics: { schema: analyticsId != null ? analyticsId : $id }
3386
+ analytics: { schema: (_a = analyticsId != null ? analyticsId : $id) != null ? _a : "" }
3320
3387
  });
3321
3388
  return behavior;
3322
3389
  }
3323
3390
  return void 0;
3324
3391
  };
3325
3392
  var getBehaviorFromSchemaRefreshStepOnChange = (schema) => {
3326
- var _a, _b;
3393
+ var _a, _b, _c;
3327
3394
  if ("refreshStepOnChange" in schema && ((_a = schema.refreshStepOnChange) != null ? _a : false) || "refreshFormOnChange" in schema && ((_b = schema.refreshFormOnChange) != null ? _b : false)) {
3328
3395
  const { $id, analyticsId, refreshUrl, refreshFormUrl } = schema;
3329
3396
  const behavior = {
3330
3397
  type: "refresh",
3331
- analytics: { schema: analyticsId != null ? analyticsId : $id },
3398
+ analytics: { schema: (_c = analyticsId != null ? analyticsId : $id) != null ? _c : "" },
3332
3399
  url: refreshUrl != null ? refreshUrl : refreshFormUrl
3333
3400
  };
3334
3401
  return behavior;
@@ -3560,7 +3627,8 @@ var autocompleteTokenMap = {
3560
3627
  var getInitialValidationAsyncState = () => ({
3561
3628
  abortController: new AbortController(),
3562
3629
  lastSubmitted: null,
3563
- messages: {}
3630
+ messages: {},
3631
+ loadingState: "idle"
3564
3632
  });
3565
3633
 
3566
3634
  // src/domain/features/utils/response-utils.ts
@@ -3580,10 +3648,9 @@ var getPerformValidationAsync = ({
3580
3648
  trackEvent
3581
3649
  }) => {
3582
3650
  const { method, param, url } = validationAsyncConfig;
3583
- const trackFailureAndReturn = (json) => {
3651
+ const trackFailure = (json) => {
3584
3652
  const analytics = getAnalyticsFromErrorResponse(json);
3585
3653
  trackEvent("ValidationAsync Failed", __spreadValues({ schema: schemaId }, analytics));
3586
- return null;
3587
3654
  };
3588
3655
  return async function performValidationAsync({ value, signal }) {
3589
3656
  let response;
@@ -3593,8 +3660,9 @@ var getPerformValidationAsync = ({
3593
3660
  url,
3594
3661
  constructPayload({ value, signal, requestConfig: { method, param } })
3595
3662
  );
3596
- } catch (e) {
3597
- return trackFailureAndReturn();
3663
+ } catch (error) {
3664
+ trackFailure();
3665
+ throw error;
3598
3666
  }
3599
3667
  const json = await response.json().catch(() => null);
3600
3668
  const message = getValidationMessage(json);
@@ -3608,7 +3676,8 @@ var getPerformValidationAsync = ({
3608
3676
  throw new Error(message);
3609
3677
  }
3610
3678
  }
3611
- return trackFailureAndReturn(json);
3679
+ trackFailure(json);
3680
+ return null;
3612
3681
  };
3613
3682
  };
3614
3683
  var getValidationMessage = (json) => {
@@ -3705,7 +3774,7 @@ var mapCommonSchemaProps = (schemaMapperProps) => {
3705
3774
  title,
3706
3775
  hidden
3707
3776
  } = schema;
3708
- return __spreadValues(__spreadValues(__spreadValues({
3777
+ return __spreadValues(__spreadValues(__spreadValues(__spreadValues({
3709
3778
  uid,
3710
3779
  id: $id != null ? $id : uid,
3711
3780
  schemaId,
@@ -3722,7 +3791,7 @@ var mapCommonSchemaProps = (schemaMapperProps) => {
3722
3791
  title,
3723
3792
  onPersistAsync,
3724
3793
  summariser: getSummariser(schema)
3725
- }, schemaHasHelp(schema) ? { help: schema.help.markdown } : {}), schemaHasPlaceholder(schema) ? { placeholder: schema.placeholder } : {}), schema.alert ? { alert: mapSchemaAlert(schema.alert) } : {});
3794
+ }, schemaHasHelp(schema) ? { help: schema.help.markdown } : {}), schemaHasPlaceholder(schema) ? { placeholder: schema.placeholder } : {}), schema.alert ? { alert: mapSchemaAlert(schema.alert) } : {}), schema.inlineAlert ? { inlineAlert: mapInlineAlert(schema.inlineAlert) } : {});
3726
3795
  };
3727
3796
  var schemaHasDisabled = (schema) => Boolean("disabled" in schema && schema.disabled !== void 0);
3728
3797
  var schemaHasHelp = (schema) => Boolean("help" in schema && schema.help);
@@ -5653,6 +5722,7 @@ var createPersistAsyncComponent = (props, performPersistAsync, schemaOnChange, o
5653
5722
  schemaId,
5654
5723
  component,
5655
5724
  hidden,
5725
+ status: "idle",
5656
5726
  lastSubmitted: model != null ? localValue != null ? localValue : null : null,
5657
5727
  lastResponse: model != null ? model : null,
5658
5728
  submission: Promise.resolve(model != null ? model : null),
@@ -5691,6 +5761,7 @@ var createPersistAsyncComponent = (props, performPersistAsync, schemaOnChange, o
5691
5761
  draft.lastSubmitted = childLocalValue;
5692
5762
  draft.submission = resolvedNull;
5693
5763
  draft.errors = [];
5764
+ draft.status = "idle";
5694
5765
  });
5695
5766
  void (schemaOnChange == null ? void 0 : schemaOnChange());
5696
5767
  return resolvedNull;
@@ -5700,6 +5771,7 @@ var createPersistAsyncComponent = (props, performPersistAsync, schemaOnChange, o
5700
5771
  this._update((draft) => {
5701
5772
  draft.lastResponse = token;
5702
5773
  draft.errors = [];
5774
+ draft.status = "success";
5703
5775
  });
5704
5776
  void (schemaOnChange == null ? void 0 : schemaOnChange());
5705
5777
  return token;
@@ -5711,6 +5783,7 @@ var createPersistAsyncComponent = (props, performPersistAsync, schemaOnChange, o
5711
5783
  draft.lastResponse = null;
5712
5784
  draft.lastSubmitted = null;
5713
5785
  draft.submission = Promise.resolve(null);
5786
+ draft.status = "error";
5714
5787
  if (this.component.type !== "upload") {
5715
5788
  draft.errors = error instanceof Error ? [error.message] : [];
5716
5789
  }
@@ -5723,6 +5796,7 @@ var createPersistAsyncComponent = (props, performPersistAsync, schemaOnChange, o
5723
5796
  draft.lastResponse = null;
5724
5797
  draft.submission = newSubmission;
5725
5798
  draft.errors = [];
5799
+ draft.status = "persisting";
5726
5800
  });
5727
5801
  return newSubmission;
5728
5802
  }
@@ -6291,7 +6365,7 @@ var mapStepToComponent = (_a) => {
6291
6365
  "onPoll",
6292
6366
  "onBehavior"
6293
6367
  ]);
6294
- var _a2;
6368
+ var _a2, _b2;
6295
6369
  const { etag, step, stepLocalValue, flowRequestCache, logEvent, onComponentUpdate } = restProps;
6296
6370
  const {
6297
6371
  id,
@@ -6310,6 +6384,12 @@ var mapStepToComponent = (_a) => {
6310
6384
  const registerSubmissionBehavior = (behavior) => {
6311
6385
  submissionBehaviors.push(behavior);
6312
6386
  };
6387
+ const mapperProps = __spreadProps(__spreadValues({}, restProps), {
6388
+ features,
6389
+ trackEvent,
6390
+ onBehavior,
6391
+ registerSubmissionBehavior
6392
+ });
6313
6393
  const back = mapBackNavigation(navigation, onBehavior, features.isEnabled("nativeBack"));
6314
6394
  const stepId = id || key;
6315
6395
  if (stepId === void 0) {
@@ -6325,18 +6405,15 @@ var mapStepToComponent = (_a) => {
6325
6405
  }) : void 0;
6326
6406
  const stepRefreshAfter = refreshAfter ? getStepRefreshAfter({ refreshAfter, logEvent, onBehavior }) : void 0;
6327
6407
  const stepPrefetch = getStepPrefetch(restProps.httpClient, flowRequestCache, submissionBehaviors);
6328
- const externalConfirmation = (external == null ? void 0 : external.url) ? createExternalConfirmation(
6329
- `${uid}-external-confirmation`,
6330
- external == null ? void 0 : external.url,
6331
- restProps.onLink,
6332
- onComponentUpdate
6333
- ) : void 0;
6334
- const mapperProps = __spreadProps(__spreadValues({}, restProps), {
6335
- features,
6336
- trackEvent,
6337
- onBehavior,
6408
+ const onLoadBehavior = getDomainLayerBehavior(
6409
+ { behavior: step.onLoad },
6410
+ (_a2 = step.actions) != null ? _a2 : [],
6338
6411
  registerSubmissionBehavior
6339
- });
6412
+ );
6413
+ const stepOnLoad = onLoadBehavior && onLoadBehavior.type !== "link" ? () => {
6414
+ void onBehavior(onLoadBehavior);
6415
+ } : void 0;
6416
+ const externalConfirmation = getExternalConfiguration(uid, external, onLoadBehavior, mapperProps);
6340
6417
  const referencedSchemaIds = getReferencedSchemaId(step);
6341
6418
  const schemaComponents = mapStepSchemas(uid, step, stepLocalValue, mapperProps);
6342
6419
  const { layout, footer } = getLayoutAndFooter(step, features);
@@ -6364,13 +6441,14 @@ var mapStepToComponent = (_a) => {
6364
6441
  stepRefreshAfter,
6365
6442
  title,
6366
6443
  tags,
6367
- stackBehavior: (_a2 = navigation == null ? void 0 : navigation.stackBehavior) != null ? _a2 : "default",
6444
+ stackBehavior: (_b2 = navigation == null ? void 0 : navigation.stackBehavior) != null ? _b2 : "default",
6368
6445
  stepPrefetch,
6369
6446
  step,
6370
6447
  referencedSchemaIds,
6371
6448
  onComponentUpdate,
6372
6449
  trackEvent,
6373
- onBehavior
6450
+ onBehavior,
6451
+ onLoad: stepOnLoad
6374
6452
  });
6375
6453
  return stepComponent;
6376
6454
  };
@@ -6392,6 +6470,25 @@ var mapBackNavigation = (navigation, onBehavior, isNativeBackEnabled) => {
6392
6470
  }
6393
6471
  } : void 0;
6394
6472
  };
6473
+ var getExternalConfiguration = (uid, external, onLoad, mapperProps) => {
6474
+ if (onLoad.type === "link") {
6475
+ return createExternalConfirmation(
6476
+ `${uid}-external-confirmation`,
6477
+ onLoad == null ? void 0 : onLoad.url,
6478
+ mapperProps.onLink,
6479
+ mapperProps.onComponentUpdate
6480
+ );
6481
+ }
6482
+ if ((external == null ? void 0 : external.url) && onLoad.type === "none") {
6483
+ return createExternalConfirmation(
6484
+ `${uid}-external-confirmation`,
6485
+ external == null ? void 0 : external.url,
6486
+ mapperProps.onLink,
6487
+ mapperProps.onComponentUpdate
6488
+ );
6489
+ }
6490
+ return void 0;
6491
+ };
6395
6492
  var getLayoutAndFooter = (step, features) => {
6396
6493
  var _a;
6397
6494
  if (step.footer) {
@@ -6422,6 +6519,135 @@ var validateStepTypes = (step, logEvent) => {
6422
6519
  }
6423
6520
  };
6424
6521
 
6522
+ // src/controller/getFilenameFromContentDisposition.ts
6523
+ var getFilenameFromContentDisposition = (contentDisposition) => {
6524
+ var _a;
6525
+ if (!contentDisposition) {
6526
+ return "";
6527
+ }
6528
+ const parameters = getFilenames(contentDisposition);
6529
+ const { filename, filenameStar } = parameters;
6530
+ const decodedFilename = decodeFilename(filenameStar);
6531
+ return extractBasename((_a = decodedFilename != null ? decodedFilename : filename) != null ? _a : "");
6532
+ };
6533
+ var filenameRegex = /;\s*(filename\*?)\s*=\s*("[^"]*"|[^;]*)/gi;
6534
+ var getFilenames = (contentDisposition) => {
6535
+ var _a, _b;
6536
+ const params = Array.from(contentDisposition.matchAll(filenameRegex)).map((match) => {
6537
+ var _a2, _b2, _c;
6538
+ return [(_a2 = match[1]) == null ? void 0 : _a2.toLowerCase(), removeQuotes((_c = (_b2 = match[2]) == null ? void 0 : _b2.trim()) != null ? _c : "") || void 0];
6539
+ });
6540
+ return {
6541
+ filename: (_a = params.find(([key]) => key === "filename")) == null ? void 0 : _a[1],
6542
+ filenameStar: (_b = params.find(([key]) => key === "filename*")) == null ? void 0 : _b[1]
6543
+ };
6544
+ };
6545
+ var removeQuotes = (value) => {
6546
+ if (value.startsWith('"') && value.endsWith('"')) {
6547
+ return value.slice(1, -1);
6548
+ }
6549
+ return value;
6550
+ };
6551
+ var decodeFilename = (encodedFilename) => {
6552
+ if (!encodedFilename) {
6553
+ return void 0;
6554
+ }
6555
+ const sections = encodedFilename.split("'");
6556
+ const encodedValue = sections.length >= 3 ? sections.slice(2).join("'") : encodedFilename;
6557
+ try {
6558
+ return decodeURIComponent(encodedValue);
6559
+ } catch (e) {
6560
+ return void 0;
6561
+ }
6562
+ };
6563
+ var extractBasename = (filename) => {
6564
+ var _a;
6565
+ const segments = filename.split(/[\\/]+/).filter(Boolean);
6566
+ return (_a = segments.at(-1)) != null ? _a : "";
6567
+ };
6568
+
6569
+ // src/controller/executeDownload.ts
6570
+ var getExecuteDownload = ({
6571
+ onNotification,
6572
+ getErrorMessageFunctions,
6573
+ trackEvent
6574
+ // TODO: add analytics after aligning with other client platforms
6575
+ }) => {
6576
+ const pendingRequests = createPendingRequestsSet();
6577
+ const executeDownload = async (request, httpClient) => {
6578
+ if (pendingRequests.has(request)) {
6579
+ return;
6580
+ }
6581
+ pendingRequests.add(request);
6582
+ onNotification == null ? void 0 : onNotification({ text: getErrorMessageFunctions().downloadStarted() });
6583
+ return fetchDownloadRequest(request, httpClient).then(saveBlob).then(() => {
6584
+ onNotification == null ? void 0 : onNotification({ text: getErrorMessageFunctions().downloadSuccessful() });
6585
+ }).catch((error) => {
6586
+ onNotification == null ? void 0 : onNotification({ text: getErrorMessageFunctions().downloadFailed() });
6587
+ throw error;
6588
+ }).finally(() => {
6589
+ pendingRequests.remove(request);
6590
+ });
6591
+ };
6592
+ return executeDownload;
6593
+ };
6594
+ var fetchDownloadRequest = async (request, httpClient) => {
6595
+ const { url, method, body, headers } = request;
6596
+ const requestBody = method === "GET" ? void 0 : JSON.stringify(body);
6597
+ const requestHeaders = filterForbiddenHeaders(headers);
6598
+ if (requestBody) {
6599
+ requestHeaders.set("Content-Type", "application/json");
6600
+ }
6601
+ const response = await httpClient(url, { method, body: requestBody, headers: requestHeaders });
6602
+ if (!response.ok) {
6603
+ throw new Error(`Download failed with status ${response.status}`);
6604
+ }
6605
+ const contentDisposition = response.headers.get("Content-Disposition");
6606
+ const filename = getFilenameFromContentDisposition(contentDisposition);
6607
+ const blob = await response.blob();
6608
+ return { filename, blob };
6609
+ };
6610
+ var saveBlob = async ({ blob, filename = "" }) => {
6611
+ const blobUrl = URL.createObjectURL(blob);
6612
+ const link = Object.assign(document.createElement("a"), {
6613
+ href: blobUrl,
6614
+ download: filename
6615
+ });
6616
+ document.body.appendChild(link);
6617
+ link.click();
6618
+ await wait();
6619
+ document.body.removeChild(link);
6620
+ URL.revokeObjectURL(blobUrl);
6621
+ };
6622
+ var filterForbiddenHeaders = (headers) => {
6623
+ const forbiddenHeaders = ["authorization", "cookie", "host"];
6624
+ const filteredHeaders = Object.entries(headers != null ? headers : {}).map(([key, value]) => [
6625
+ key.trim().toLowerCase(),
6626
+ value
6627
+ ]).filter(([key]) => !forbiddenHeaders.includes(key));
6628
+ return new Headers(filteredHeaders);
6629
+ };
6630
+ var wait = async () => new Promise((resolve) => {
6631
+ setTimeout(resolve, 0);
6632
+ });
6633
+ var createPendingRequestsSet = () => {
6634
+ const pendingRequests = /* @__PURE__ */ new Set();
6635
+ return {
6636
+ add: (request) => {
6637
+ const requestKey = JSON.stringify(request);
6638
+ pendingRequests.add(requestKey);
6639
+ },
6640
+ remove: (request) => {
6641
+ const requestKey = JSON.stringify(request);
6642
+ pendingRequests.delete(requestKey);
6643
+ },
6644
+ has: (request) => {
6645
+ const requestKey = JSON.stringify(request);
6646
+ return pendingRequests.has(requestKey);
6647
+ }
6648
+ };
6649
+ };
6650
+
6425
6651
  // src/controller/executePoll.ts
6426
6652
  var executePoll = async (props) => {
6427
6653
  const { errorBehavior, signal, url, httpClient, trackEvent } = props;
@@ -6694,13 +6920,14 @@ var getStepCounter = () => {
6694
6920
 
6695
6921
  // src/controller/FlowController.ts
6696
6922
  var createFlowController = (props) => {
6697
- const _a = props, {
6923
+ const {
6698
6924
  flowId,
6699
6925
  initialAction,
6700
6926
  initialStep,
6701
6927
  backConfig,
6702
6928
  features,
6703
6929
  nativeSubflowHandlers,
6930
+ requestCache,
6704
6931
  getErrorMessageFunctions,
6705
6932
  scrollToTop,
6706
6933
  onChange,
@@ -6708,38 +6935,21 @@ var createFlowController = (props) => {
6708
6935
  onCompletion,
6709
6936
  onCopy,
6710
6937
  onLink,
6938
+ onNotification,
6711
6939
  onError,
6712
6940
  onEvent,
6713
6941
  onLog,
6714
6942
  onValueChange
6715
- } = _a, rest = __objRest(_a, [
6716
- "flowId",
6717
- "initialAction",
6718
- "initialStep",
6719
- "backConfig",
6720
- "features",
6721
- "nativeSubflowHandlers",
6722
- "getErrorMessageFunctions",
6723
- "scrollToTop",
6724
- "onChange",
6725
- "onCancellation",
6726
- "onCompletion",
6727
- "onCopy",
6728
- "onLink",
6729
- "onError",
6730
- "onEvent",
6731
- "onLog",
6732
- "onValueChange"
6733
- ]);
6943
+ } = props;
6734
6944
  const httpClient = getHttpClientWithCapabilities(props.httpClient, nativeSubflowHandlers);
6735
6945
  const rootComponent = createRootDomainComponent(
6736
6946
  onChange,
6737
6947
  scrollToTop,
6738
6948
  backConfig,
6739
- normaliseRequestCache(rest.requestCache)
6949
+ normaliseRequestCache(requestCache)
6740
6950
  );
6741
6951
  const stepCount = getStepCounter();
6742
- const abortController = getRequestAbortController();
6952
+ const refreshAbortController = getRequestAbortController();
6743
6953
  const createStep = (newStep, etag) => {
6744
6954
  if (rootComponent.hasStep()) {
6745
6955
  stepCount.increment();
@@ -6751,8 +6961,8 @@ var createFlowController = (props) => {
6751
6961
  }
6752
6962
  };
6753
6963
  const updateStep = (newStep, etag) => {
6754
- var _a2;
6755
- const component = createStepComponent2(newStep, etag, (_a2 = rootComponent.getLocalValue()) != null ? _a2 : null);
6964
+ var _a;
6965
+ const component = createStepComponent2(newStep, etag, (_a = rootComponent.getLocalValue()) != null ? _a : null);
6756
6966
  if (component) {
6757
6967
  rootComponent.updateStep(component);
6758
6968
  rootComponent.setLoadingState("idle");
@@ -6787,14 +6997,14 @@ var createFlowController = (props) => {
6787
6997
  }
6788
6998
  };
6789
6999
  const getStep = () => {
6790
- var _a2;
7000
+ var _a;
6791
7001
  const stepComponent = rootComponent.getStep();
6792
- return (_a2 = stepComponent == null ? void 0 : stepComponent.step) != null ? _a2 : initialStep;
7002
+ return (_a = stepComponent == null ? void 0 : stepComponent.step) != null ? _a : initialStep;
6793
7003
  };
6794
7004
  const trackEvent = (eventName, properties) => {
6795
- var _a2, _b;
7005
+ var _a, _b;
6796
7006
  const step = getStep();
6797
- const stepId = (_b = (_a2 = step == null ? void 0 : step.id) != null ? _a2 : step == null ? void 0 : step.key) != null ? _b : null;
7007
+ const stepId = (_b = (_a = step == null ? void 0 : step.id) != null ? _a : step == null ? void 0 : step.key) != null ? _b : null;
6798
7008
  const analytics = step == null ? void 0 : step.analytics;
6799
7009
  const metadata = __spreadValues(__spreadValues(__spreadValues(__spreadValues({
6800
7010
  flowId,
@@ -6805,10 +7015,16 @@ var createFlowController = (props) => {
6805
7015
  } catch (e) {
6806
7016
  }
6807
7017
  };
7018
+ const trackCoreEvent = trackEvent;
7019
+ const executeDownload = getExecuteDownload({
7020
+ onNotification,
7021
+ getErrorMessageFunctions,
7022
+ trackEvent
7023
+ });
6808
7024
  const logEvent = (level, message, properties) => {
6809
- var _a2, _b;
7025
+ var _a, _b;
6810
7026
  const step = getStep();
6811
- const stepId = (_b = (_a2 = step == null ? void 0 : step.id) != null ? _a2 : step == null ? void 0 : step.key) != null ? _b : null;
7027
+ const stepId = (_b = (_a = step == null ? void 0 : step.id) != null ? _a : step == null ? void 0 : step.key) != null ? _b : null;
6812
7028
  try {
6813
7029
  onLog == null ? void 0 : onLog(level, message, __spreadValues(__spreadValues(__spreadProps(__spreadValues({}, properties), {
6814
7030
  flowId
@@ -6818,17 +7034,25 @@ var createFlowController = (props) => {
6818
7034
  };
6819
7035
  const closeWithError = (error, analytics, statusCode) => {
6820
7036
  rootComponent.stop();
6821
- trackEvent("Failed", __spreadValues({}, analytics));
7037
+ trackCoreEvent("Failed", __spreadValues({}, analytics));
6822
7038
  logEvent("error", "Dynamic Flow failed", { errorMessage: getErrorMessage(error), analytics });
6823
7039
  onError(error, statusCode);
6824
7040
  };
6825
7041
  const closeWithCancellation = () => {
6826
- trackEvent("Cancelled");
7042
+ trackCoreEvent("Cancelled");
6827
7043
  onCancellation == null ? void 0 : onCancellation();
6828
7044
  };
6829
7045
  const onBehavior = async (behavior) => {
6830
- var _a2;
7046
+ var _a;
6831
7047
  switch (behavior.type) {
7048
+ case "download": {
7049
+ try {
7050
+ await executeDownload(behavior.request, httpClient);
7051
+ } catch (error) {
7052
+ logEvent("error", "Download failed", { errorMessage: getErrorMessage(error) });
7053
+ }
7054
+ break;
7055
+ }
6832
7056
  case "back": {
6833
7057
  if (behavior.action) {
6834
7058
  onAction(behavior.action, null).then(() => {
@@ -6863,6 +7087,7 @@ var createFlowController = (props) => {
6863
7087
  void onAction(action, model);
6864
7088
  } else {
6865
7089
  rootComponent.setLoadingState("idle");
7090
+ scrollToTop("smooth");
6866
7091
  }
6867
7092
  } catch (e) {
6868
7093
  rootComponent.setLoadingState("idle");
@@ -6885,7 +7110,7 @@ var createFlowController = (props) => {
6885
7110
  void onRefresh({ refreshUrl: behavior.url, analytics: behavior.analytics });
6886
7111
  return {
6887
7112
  abort: () => {
6888
- abortController.abort();
7113
+ refreshAbortController.abort();
6889
7114
  }
6890
7115
  };
6891
7116
  }
@@ -6894,7 +7119,7 @@ var createFlowController = (props) => {
6894
7119
  break;
6895
7120
  }
6896
7121
  case "modal": {
6897
- const currentStep = (_a2 = rootComponent.getStep()) == null ? void 0 : _a2.step;
7122
+ const currentStep = (_a = rootComponent.getStep()) == null ? void 0 : _a.step;
6898
7123
  if (currentStep) {
6899
7124
  rootComponent.showModal(
6900
7125
  modalToComponent(
@@ -6945,14 +7170,14 @@ var createFlowController = (props) => {
6945
7170
  } };
6946
7171
  };
6947
7172
  const onAction = async (action, model) => {
6948
- var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j;
7173
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
6949
7174
  try {
6950
7175
  rootComponent.setLoadingState("submitting");
6951
7176
  const command = await executeSubmission({
6952
7177
  action,
6953
7178
  model,
6954
7179
  isInitial: !rootComponent.hasStep(),
6955
- requestCache: (_b = (_a2 = rootComponent.getStep()) == null ? void 0 : _a2.requestCache) != null ? _b : rootComponent.requestCache,
7180
+ requestCache: (_b = (_a = rootComponent.getStep()) == null ? void 0 : _a.requestCache) != null ? _b : rootComponent.requestCache,
6956
7181
  httpClient,
6957
7182
  trackEvent,
6958
7183
  logEvent
@@ -6960,7 +7185,7 @@ var createFlowController = (props) => {
6960
7185
  switch (command.type) {
6961
7186
  case "complete": {
6962
7187
  onCompletion(command.result);
6963
- trackEvent("Succeeded");
7188
+ trackCoreEvent("Succeeded");
6964
7189
  if (features.isEnabled("continueAfterCompletion")) {
6965
7190
  rootComponent.setLoadingState("idle");
6966
7191
  } else {
@@ -6972,7 +7197,7 @@ var createFlowController = (props) => {
6972
7197
  const isFirstStep = !rootComponent.hasStep();
6973
7198
  rootComponent.closeSubflow();
6974
7199
  createStep(command.step, command.etag);
6975
- trackEvent("Step Shown", { isFirstStep });
7200
+ trackCoreEvent("Step Shown", { isFirstStep });
6976
7201
  break;
6977
7202
  }
6978
7203
  case "error": {
@@ -6989,8 +7214,10 @@ var createFlowController = (props) => {
6989
7214
  // and the model that was submitted
6990
7215
  polling: void 0,
6991
7216
  // and no polling, to avoid restarting it
6992
- external: void 0
7217
+ external: void 0,
6993
7218
  // and no external, to avoid retriggering it
7219
+ onLoad: void 0
7220
+ // and no onLoad, to avoid retriggering it (how is this still the best we have. Should refactor soon)
6994
7221
  }),
6995
7222
  (_f = (_e = rootComponent.getStep()) == null ? void 0 : _e.etag) != null ? _f : null
6996
7223
  );
@@ -7029,13 +7256,13 @@ var createFlowController = (props) => {
7029
7256
  errorsOverride,
7030
7257
  analytics
7031
7258
  }) => {
7032
- var _a2, _b, _c;
7259
+ var _a, _b, _c;
7033
7260
  try {
7034
7261
  rootComponent.setLoadingState("refreshing");
7035
7262
  const model = rootComponent.getSubmittableValueSync();
7036
7263
  const command = await executeRefresh({
7037
- abortSignal: abortController.abortAndGetNewSignal(),
7038
- url: (_a2 = refreshUrl != null ? refreshUrl : rootComponent.getRefreshUrl()) != null ? _a2 : "",
7264
+ abortSignal: refreshAbortController.abortAndGetNewSignal(),
7265
+ url: (_a = refreshUrl != null ? refreshUrl : rootComponent.getRefreshUrl()) != null ? _a : "",
7039
7266
  model,
7040
7267
  etag: (_c = (_b = rootComponent.getStep()) == null ? void 0 : _b.etag) != null ? _c : null,
7041
7268
  analytics,
@@ -7091,14 +7318,14 @@ var createFlowController = (props) => {
7091
7318
  let initState = "initial";
7092
7319
  if (initialStep) {
7093
7320
  initState = "created";
7094
- trackEvent("Initiated");
7321
+ trackCoreEvent("Initiated");
7095
7322
  createStep(initialStep, null);
7096
- trackEvent("Step Shown", { isFirstStep: true });
7323
+ trackCoreEvent("Step Shown", { isFirstStep: true });
7097
7324
  }
7098
7325
  const start = () => {
7099
7326
  if (initState === "initial" && initialAction) {
7100
7327
  initState = "created";
7101
- trackEvent("Initiated");
7328
+ trackCoreEvent("Initiated");
7102
7329
  rootComponent.setLoadingState("submitting");
7103
7330
  void onAction(__spreadValues({ method: "GET" }, initialAction), null).then(() => {
7104
7331
  initState = "started";
@@ -7297,6 +7524,26 @@ var multi_file_upload_messages_default = defineMessages5({
7297
7524
  }
7298
7525
  });
7299
7526
 
7527
+ // src/common/messages/download.messages.ts
7528
+ import { defineMessages as defineMessages6 } from "react-intl";
7529
+ var download_messages_default = defineMessages6({
7530
+ downloadStarted: {
7531
+ id: "dynamicFlows.DownloadFeedback.started",
7532
+ defaultMessage: "Downloading...",
7533
+ description: "Appears in a snackbar when a download starts."
7534
+ },
7535
+ downloadSuccessful: {
7536
+ id: "dynamicFlows.DownloadFeedback.successful",
7537
+ defaultMessage: "Download successful",
7538
+ description: "Appears in a snackbar when a download succeeds."
7539
+ },
7540
+ downloadFailed: {
7541
+ id: "dynamicFlows.DownloadFeedback.failed",
7542
+ defaultMessage: "Download failed",
7543
+ description: "Appears in a snackbar when a download fails."
7544
+ }
7545
+ });
7546
+
7300
7547
  // src/renderers/getSchemaErrorMessageFunction.ts
7301
7548
  function getSchemaErrorMessageFunction(formatMessage, locale) {
7302
7549
  return (validationMessages) => createErrorMessageFunctions(validationMessages != null ? validationMessages : {}, formatMessage, locale);
@@ -7383,6 +7630,15 @@ var createErrorMessageFunctions = (validationMessages, formatMessage, locale) =>
7383
7630
  },
7384
7631
  genericErrorWithRetry() {
7385
7632
  return formatMessage(generic_error_messages_default.genericErrorRetryHint);
7633
+ },
7634
+ downloadStarted() {
7635
+ return formatMessage(download_messages_default.downloadStarted);
7636
+ },
7637
+ downloadFailed() {
7638
+ return formatMessage(download_messages_default.downloadFailed);
7639
+ },
7640
+ downloadSuccessful() {
7641
+ return formatMessage(download_messages_default.downloadSuccessful);
7386
7642
  }
7387
7643
  });
7388
7644
  var formatDateOptions = {
@@ -7478,6 +7734,7 @@ var inputComponentToProps = (component, type) => {
7478
7734
  title,
7479
7735
  tags,
7480
7736
  validationAsyncState,
7737
+ inlineAlert,
7481
7738
  onBlur,
7482
7739
  onFocus
7483
7740
  } = component;
@@ -7497,12 +7754,21 @@ var inputComponentToProps = (component, type) => {
7497
7754
  required,
7498
7755
  title,
7499
7756
  tags,
7500
- validationState: getValidationState(errors, validationAsyncState),
7501
7757
  value: component.getLocalValue(),
7758
+ validationState: getValidationState(errors, validationAsyncState),
7759
+ inlineAlert,
7760
+ fieldLoadingState: getFieldLoadingState(component),
7502
7761
  onBlur: onBlur.bind(component),
7503
7762
  onFocus: onFocus.bind(component)
7504
7763
  };
7505
7764
  };
7765
+ var getFieldLoadingState = (component) => {
7766
+ const { validationAsyncState } = component;
7767
+ if (!validationAsyncState) {
7768
+ return "idle";
7769
+ }
7770
+ return validationAsyncState.loadingState === "pending" ? "validating" : "idle";
7771
+ };
7506
7772
 
7507
7773
  // src/renderers/mappers/booleanInputComponentToProps.ts
7508
7774
  var booleanInputComponentToProps = (component, rendererMapperProps) => {
@@ -7934,13 +8200,10 @@ var paragraphComponentToProps = (component, rendererMapperProps) => __spreadValu
7934
8200
 
7935
8201
  // src/renderers/mappers/persistAsyncComponentToProps.ts
7936
8202
  var persistAsyncComponentToProps = (component, rendererMapperProps) => {
7937
- const props = componentToRendererProps(component.component, rendererMapperProps);
7938
- if ("validationState" in props && component.errors.length > 0) {
7939
- return __spreadProps(__spreadValues({}, props), {
7940
- validationState: { status: "invalid", message: component.errors[0] }
7941
- });
7942
- }
7943
- return props;
8203
+ const { errors, status } = component;
8204
+ const validationState = errors.length > 0 ? { status: "invalid", message: errors[0] } : void 0;
8205
+ const fieldLoadingState = status === "persisting" ? "persisting" : void 0;
8206
+ return __spreadValues(__spreadValues(__spreadValues({}, componentToRendererProps(component.component, rendererMapperProps)), validationState ? { validationState } : {}), fieldLoadingState ? { fieldLoadingState } : {});
7944
8207
  };
7945
8208
 
7946
8209
  // src/renderers/mappers/progressComponentToProps.ts