@wise/dynamic-flow-client 5.13.1 → 5.13.2

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 (413) hide show
  1. package/build/DynamicFlowCore.js +5 -0
  2. package/build/common/errorBoundary/ErrorBoundary.js +26 -0
  3. package/build/common/errorBoundary/ErrorBoundary.test.js +29 -0
  4. package/build/common/errorBoundary/ErrorBoundaryAlert.js +11 -0
  5. package/build/common/makeHttpClient/api-utils.js +3 -0
  6. package/build/common/makeHttpClient/index.js +1 -0
  7. package/build/common/makeHttpClient/makeHttpClient.js +10 -0
  8. package/build/common/makeHttpClient/makeHttpClient.test.js +186 -0
  9. package/build/common/messages/external-confirmation.messages.js +23 -0
  10. package/build/common/messages/file-upload.messages.js +13 -0
  11. package/build/common/messages/generic-error.messages.js +18 -0
  12. package/build/common/messages/help.messages.js +8 -0
  13. package/build/common/messages/multi-file-upload.messages.js +18 -0
  14. package/build/common/messages/multi-select.messages.js +8 -0
  15. package/build/common/messages/paragraph.messages.js +13 -0
  16. package/build/common/messages/repeatable.messages.js +23 -0
  17. package/build/common/messages/search.messages.js +8 -0
  18. package/build/common/messages/validation.array.messages.js +13 -0
  19. package/build/common/messages/validation.messages.js +53 -0
  20. package/build/controller/FlowController.js +378 -0
  21. package/build/controller/executePoll.js +64 -0
  22. package/build/controller/executeRefresh.js +45 -0
  23. package/build/controller/executeRequest.js +80 -0
  24. package/build/controller/executeSubmission.js +70 -0
  25. package/build/controller/getErrorMessage.js +7 -0
  26. package/build/controller/getRequestAbortController.js +13 -0
  27. package/build/controller/getResponseType.js +35 -0
  28. package/build/controller/getSafeHttpClient.js +8 -0
  29. package/build/controller/getStepCounter.js +16 -0
  30. package/build/controller/handleErrorResponse.js +26 -0
  31. package/build/controller/makeSafeHttpClient.js +8 -0
  32. package/build/controller/response-utils.js +72 -0
  33. package/build/controller/response-utils.test.js +52 -0
  34. package/build/domain/components/AlertComponent.js +1 -0
  35. package/build/domain/components/AllOfComponent.js +40 -0
  36. package/build/domain/components/BooleanInputComponent.js +50 -0
  37. package/build/domain/components/BoxComponent.js +3 -0
  38. package/build/domain/components/ButtonComponent.js +1 -0
  39. package/build/domain/components/ColumnsComponent.js +3 -0
  40. package/build/domain/components/ConstComponent.js +18 -0
  41. package/build/domain/components/ContainerComponent.js +3 -0
  42. package/build/domain/components/DateInputComponent.js +75 -0
  43. package/build/domain/components/DecisionComponent.js +1 -0
  44. package/build/domain/components/DividerComponent.js +1 -0
  45. package/build/domain/components/FormComponent.js +3 -0
  46. package/build/domain/components/FormattedValueComponent.js +44 -0
  47. package/build/domain/components/HeadingComponent.js +1 -0
  48. package/build/domain/components/ImageComponent.js +1 -0
  49. package/build/domain/components/InstructionsComponent.js +1 -0
  50. package/build/domain/components/IntegerInputComponent.js +74 -0
  51. package/build/domain/components/ListComponent.js +1 -0
  52. package/build/domain/components/LoadingIndicatorComponent.js +1 -0
  53. package/build/domain/components/MarkdownComponent.js +1 -0
  54. package/build/domain/components/MediaComponent.js +1 -0
  55. package/build/domain/components/ModalComponent.js +16 -0
  56. package/build/domain/components/ModalLayoutComponent.js +3 -0
  57. package/build/domain/components/MoneyInputComponent.js +57 -0
  58. package/build/domain/components/MultiSelectInputComponent.js +81 -0
  59. package/build/domain/components/MultiUploadInputComponent.js +88 -0
  60. package/build/domain/components/NumberInputComponent.js +73 -0
  61. package/build/domain/components/ObjectComponent.js +45 -0
  62. package/build/domain/components/ParagraphComponent.js +1 -0
  63. package/build/domain/components/PersistAsyncComponent.js +92 -0
  64. package/build/domain/components/ProgressComponent.js +1 -0
  65. package/build/domain/components/RepeatableComponent.js +103 -0
  66. package/build/domain/components/ReviewComponent.js +1 -0
  67. package/build/domain/components/RootDomainComponent.js +173 -0
  68. package/build/domain/components/SectionComponent.js +5 -0
  69. package/build/domain/components/SelectInputComponent.js +88 -0
  70. package/build/domain/components/StatusListComponent.js +1 -0
  71. package/build/domain/components/SubflowDomainComponent.js +9 -0
  72. package/build/domain/components/TabsComponent.js +1 -0
  73. package/build/domain/components/TextInputComponent.js +76 -0
  74. package/build/domain/components/TupleComponent.js +41 -0
  75. package/build/domain/components/UploadInputComponent.js +83 -0
  76. package/build/domain/components/UpsellComponent.js +25 -0
  77. package/build/domain/components/searchComponent/SearchComponent.js +92 -0
  78. package/build/domain/components/searchComponent/SearchComponent.test.js +190 -0
  79. package/build/domain/components/step/ExternalConfirmationComponent.js +24 -0
  80. package/build/domain/components/step/StepDomainComponent.js +78 -0
  81. package/build/domain/components/step/ToolbarComponent.js +1 -0
  82. package/build/domain/components/utils/WithUpdate.js +1 -0
  83. package/build/domain/components/utils/component-utils.js +12 -0
  84. package/build/domain/components/utils/debounce.js +34 -0
  85. package/build/domain/components/utils/debounce.test.js +67 -0
  86. package/build/domain/components/utils/file-utils.js +21 -0
  87. package/build/domain/components/utils/file-utils.test.js +27 -0
  88. package/build/domain/components/utils/getRandomId.js +1 -0
  89. package/build/domain/components/utils/isExactLocalValueMatch.js +14 -0
  90. package/build/domain/components/utils/isOrWasValid.js +5 -0
  91. package/build/domain/components/utils/isPartialModelMatch.js +18 -0
  92. package/build/domain/components/utils/isPartialModelMatch.test.js +74 -0
  93. package/build/domain/features/eventNames.js +24 -0
  94. package/build/domain/features/events.js +1 -0
  95. package/build/domain/features/persistAsync/getComponentMultiPersistAsync.js +50 -0
  96. package/build/domain/features/persistAsync/getInitialPersistedState.js +7 -0
  97. package/build/domain/features/persistAsync/getPerformPersistAsync.js +43 -0
  98. package/build/domain/features/persistAsync/getPerformPersistAsync.test.js +139 -0
  99. package/build/domain/features/polling/getStepPolling.js +50 -0
  100. package/build/domain/features/polling/getStepPolling.test.js +115 -0
  101. package/build/domain/features/prefetch/getStepPrefetch.js +43 -0
  102. package/build/domain/features/prefetch/request-cache.js +49 -0
  103. package/build/domain/features/prefetch/request-cache.test.js +70 -0
  104. package/build/domain/features/refreshAfter/getStepRefreshAfter.js +24 -0
  105. package/build/domain/features/refreshAfter/getStepRefreshAfter.test.js +40 -0
  106. package/build/domain/features/schema-on-change/getDebouncedSchemaOnChange.js +50 -0
  107. package/build/domain/features/schema-on-change/getSchemaOnChange.js +34 -0
  108. package/build/domain/features/search/getPerformSearchFunction.js +75 -0
  109. package/build/domain/features/search/getPerformSearchFunction.test.js +301 -0
  110. package/build/domain/features/summary/summary-utils.js +40 -0
  111. package/build/domain/features/summary/summary-utils.test.js +125 -0
  112. package/build/domain/features/utils/http-utils.js +21 -0
  113. package/build/domain/features/utils/response-utils.js +9 -0
  114. package/build/domain/features/validation/spec-utils.js +19 -0
  115. package/build/domain/features/validation/validateStringPattern.js +24 -0
  116. package/build/domain/features/validation/validation-functions.js +6 -0
  117. package/build/domain/features/validation/validation-functions.test.js +108 -0
  118. package/build/domain/features/validation/value-checks.js +125 -0
  119. package/build/domain/features/validation/value-checks.test.js +262 -0
  120. package/build/domain/features/validationAsync/getComponentValidationAsync.js +53 -0
  121. package/build/domain/features/validationAsync/getComponentValidationAsync.test.js +67 -0
  122. package/build/domain/features/validationAsync/getInitialValidationAsyncState.js +5 -0
  123. package/build/domain/features/validationAsync/getPerformValidationAsync.js +45 -0
  124. package/build/domain/features/validationAsync/getPerformValidationAsync.test.js +143 -0
  125. package/build/domain/mappers/layout/alertLayoutToComponent.js +16 -0
  126. package/build/domain/mappers/layout/boxLayoutToComponent.js +13 -0
  127. package/build/domain/mappers/layout/buttonLayoutToComponent.js +77 -0
  128. package/build/domain/mappers/layout/columnsLayoutToComponent.js +13 -0
  129. package/build/domain/mappers/layout/decisionLayoutToComponent.js +22 -0
  130. package/build/domain/mappers/layout/deprecatedListLayoutToComponent.js +30 -0
  131. package/build/domain/mappers/layout/dividerLayoutToComponent.js +2 -0
  132. package/build/domain/mappers/layout/formLayoutToComponent.js +19 -0
  133. package/build/domain/mappers/layout/headingLayoutToComponent.js +12 -0
  134. package/build/domain/mappers/layout/imageLayoutToComponent.js +20 -0
  135. package/build/domain/mappers/layout/infoLayoutToComponent.js +12 -0
  136. package/build/domain/mappers/layout/instructionsLayoutToComponent.js +12 -0
  137. package/build/domain/mappers/layout/listLayoutToComponent.js +39 -0
  138. package/build/domain/mappers/layout/loadingIndicatorLayoutToComponent.js +9 -0
  139. package/build/domain/mappers/layout/markdownLayoutToComponent.js +12 -0
  140. package/build/domain/mappers/layout/mediaLayoutToComponent.js +12 -0
  141. package/build/domain/mappers/layout/modalLayoutToComponent.js +17 -0
  142. package/build/domain/mappers/layout/modalToComponent.js +8 -0
  143. package/build/domain/mappers/layout/paragraphLayoutToComponent.js +12 -0
  144. package/build/domain/mappers/layout/progressLayoutToComponent.js +15 -0
  145. package/build/domain/mappers/layout/reviewLayoutToComponent.js +48 -0
  146. package/build/domain/mappers/layout/searchLayoutToComponent.js +44 -0
  147. package/build/domain/mappers/layout/sectionLayoutToComponent.js +15 -0
  148. package/build/domain/mappers/layout/statusListLayoutToComponent.js +15 -0
  149. package/build/domain/mappers/layout/tabsLayoutToComponent.js +16 -0
  150. package/build/domain/mappers/layout/upsellLayoutToComponent.js +25 -0
  151. package/build/domain/mappers/mapLayoutToComponent.js +81 -0
  152. package/build/domain/mappers/mapSchemaToComponent.js +61 -0
  153. package/build/domain/mappers/mapSchemaToComponent.test.js +112 -0
  154. package/build/domain/mappers/mapStepSchemas.js +15 -0
  155. package/build/domain/mappers/mapStepToComponent.js +133 -0
  156. package/build/domain/mappers/mapStepToComponent.test.js +221 -0
  157. package/build/domain/mappers/mapToolbarToComponent.js +15 -0
  158. package/build/domain/mappers/schema/allOfSchemaToComponent.js +16 -0
  159. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToComponent.js +26 -0
  160. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToMultiSelectComponent.js +55 -0
  161. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToMultiUploadComponent.js +67 -0
  162. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToRepeatableComponent.js +57 -0
  163. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToTupleComponent.js +20 -0
  164. package/build/domain/mappers/schema/blobSchemaToComponent.js +15 -0
  165. package/build/domain/mappers/schema/booleanSchemaToComponent.js +29 -0
  166. package/build/domain/mappers/schema/constSchemaToComponent.js +23 -0
  167. package/build/domain/mappers/schema/integerSchemaToComponent.js +28 -0
  168. package/build/domain/mappers/schema/numberSchemaToComponent.js +26 -0
  169. package/build/domain/mappers/schema/objectSchemaToComponent/assertDisplayOrder.js +23 -0
  170. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToFormattedValueComponent.js +9 -0
  171. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToMoneyInputComponent.js +119 -0
  172. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToMoneyInputComponent.test.js +96 -0
  173. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToObjectComponent.js +31 -0
  174. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToObjectComponent.test.js +99 -0
  175. package/build/domain/mappers/schema/oneOfSchemaToComponent/oneOfSchemaToComponent.js +66 -0
  176. package/build/domain/mappers/schema/oneOfSchemaToComponent/oneOfSchemaToComponent.test.js +225 -0
  177. package/build/domain/mappers/schema/persistAsyncSchemaToComponent.js +29 -0
  178. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToComponent.js +18 -0
  179. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToComponent.test.js +133 -0
  180. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToDateInputComponent.js +48 -0
  181. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToTextInputComponent.js +38 -0
  182. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToUploadInputComponent.js +28 -0
  183. package/build/domain/mappers/schema/tests/test-utils.js +16 -0
  184. package/build/domain/mappers/schema/types.js +1 -0
  185. package/build/domain/mappers/schema/utils/getPerformPersistAsyncFn.js +19 -0
  186. package/build/domain/mappers/schema/utils/getValidationAsyncInitialState.js +23 -0
  187. package/build/domain/mappers/schema/utils/mapCommonSchemaProps.js +16 -0
  188. package/build/domain/mappers/types.js +1 -0
  189. package/build/domain/mappers/utils/FeatureFlags.js +22 -0
  190. package/build/domain/mappers/utils/behavior-utils.js +44 -0
  191. package/build/domain/mappers/utils/call-to-action-utils.js +21 -0
  192. package/build/domain/mappers/utils/getAutocompleteString.js +76 -0
  193. package/build/domain/mappers/utils/getAutocompleteString.test.js +21 -0
  194. package/build/domain/mappers/utils/groupLayoutByPinned.js +38 -0
  195. package/build/domain/mappers/utils/groupLayoutByPinned.test.js +166 -0
  196. package/build/domain/mappers/utils/image.js +9 -0
  197. package/build/domain/mappers/utils/layout-utils.js +11 -0
  198. package/build/domain/mappers/utils/legacy-utils.js +49 -0
  199. package/build/domain/mappers/utils/media-utils.js +14 -0
  200. package/build/domain/mappers/utils/suggestions-utils.js +26 -0
  201. package/build/domain/mappers/utils/suggestions-utils.test.js +36 -0
  202. package/build/domain/mappers/utils/tags-utils.js +1 -0
  203. package/build/domain/mappers/utils/utils.js +35 -0
  204. package/build/domain/types.js +1 -0
  205. package/build/getSubflowCallbacks.js +38 -0
  206. package/build/i18n/index.js +40 -0
  207. package/build/index.js +8 -0
  208. package/build/main.js +17 -5
  209. package/build/main.mjs +17 -5
  210. package/build/renderers/CoreContainerRenderer.js +5 -0
  211. package/build/renderers/CoreRootRenderer.js +12 -0
  212. package/build/renderers/EmptyLoadingStateRenderer.js +5 -0
  213. package/build/renderers/getRenderFunction.js +24 -0
  214. package/build/renderers/getSchemaErrorMessageFunction.js +97 -0
  215. package/build/renderers/mappers/alertComponentToProps.js +2 -0
  216. package/build/renderers/mappers/allOfComponentToProps.js +6 -0
  217. package/build/renderers/mappers/booleanInputComponentToProps.js +5 -0
  218. package/build/renderers/mappers/boxComponentToProps.js +13 -0
  219. package/build/renderers/mappers/buttonComponentToProps.js +4 -0
  220. package/build/renderers/mappers/columnsComponentToProps.js +11 -0
  221. package/build/renderers/mappers/componentToRendererProps.js +164 -0
  222. package/build/renderers/mappers/constComponentToProps.js +5 -0
  223. package/build/renderers/mappers/containerComponentToProps.js +7 -0
  224. package/build/renderers/mappers/dateInputComponentToProps.js +2 -0
  225. package/build/renderers/mappers/decisionComponentToProps.js +16 -0
  226. package/build/renderers/mappers/dividerComponentToProps.js +2 -0
  227. package/build/renderers/mappers/externalComponentToProps.js +3 -0
  228. package/build/renderers/mappers/formComponentToProps.js +12 -0
  229. package/build/renderers/mappers/formattedValueComponentToProps.js +5 -0
  230. package/build/renderers/mappers/headingComponentToProps.js +2 -0
  231. package/build/renderers/mappers/hiddenComponentToProps.js +4 -0
  232. package/build/renderers/mappers/imageComponentToProps.js +2 -0
  233. package/build/renderers/mappers/instructionsComponentToProps.js +2 -0
  234. package/build/renderers/mappers/integerInputComponentToProps.js +2 -0
  235. package/build/renderers/mappers/listComponentToProps.js +2 -0
  236. package/build/renderers/mappers/loadingIndicatorComponentToProps.js +2 -0
  237. package/build/renderers/mappers/markdownComponentToProps.js +2 -0
  238. package/build/renderers/mappers/mediaComponentToProps.js +2 -0
  239. package/build/renderers/mappers/modalComponentToProps.js +11 -0
  240. package/build/renderers/mappers/modalLayoutComponentToProps.js +16 -0
  241. package/build/renderers/mappers/moneyInputComponentToProps.js +36 -0
  242. package/build/renderers/mappers/multiSelectComponentToProps.js +23 -0
  243. package/build/renderers/mappers/multiUploadInputComponentToProps.js +12 -0
  244. package/build/renderers/mappers/numberInputComponentToProps.js +2 -0
  245. package/build/renderers/mappers/objectComponentToProps.js +8 -0
  246. package/build/renderers/mappers/paragraphComponentToProps.js +2 -0
  247. package/build/renderers/mappers/persistAsyncComponentToProps.js +8 -0
  248. package/build/renderers/mappers/progressComponentToProps.js +2 -0
  249. package/build/renderers/mappers/repeatableComponentToProps.js +30 -0
  250. package/build/renderers/mappers/reviewComponentToProps.js +2 -0
  251. package/build/renderers/mappers/rootComponentToProps.js +21 -0
  252. package/build/renderers/mappers/searchComponentToProps.js +57 -0
  253. package/build/renderers/mappers/sectionComponentToProps.js +6 -0
  254. package/build/renderers/mappers/selectInputComponentToProps.js +34 -0
  255. package/build/renderers/mappers/statusListComponentToProps.js +2 -0
  256. package/build/renderers/mappers/subflowComponentToRendererProps.js +4 -0
  257. package/build/renderers/mappers/tabsComponentToProps.js +14 -0
  258. package/build/renderers/mappers/textInputComponentToProps.js +2 -0
  259. package/build/renderers/mappers/tupleComponentToProps.js +8 -0
  260. package/build/renderers/mappers/uploadInputComponentToProps.js +8 -0
  261. package/build/renderers/mappers/upsellComponentToProps.js +2 -0
  262. package/build/renderers/mappers/utils/getValidationState.js +12 -0
  263. package/build/renderers/mappers/utils/inputComponentToProps.js +26 -0
  264. package/build/renderers/mappers/utils/mapErrorsToValidationState.js +9 -0
  265. package/build/renderers/mappers/utils/pick.js +8 -0
  266. package/build/renderers/mappers/utils/selectInputOptionsToProps.js +11 -0
  267. package/build/renderers/stepComponentToProps.js +32 -0
  268. package/build/renderers/utils.js +69 -0
  269. package/build/renderers/utils.test.js +70 -0
  270. package/build/stories/dev-tools/ContainerQueries.story.js +66 -0
  271. package/build/stories/dev-tools/Debugger.story.js +38 -0
  272. package/build/stories/dev-tools/FixtureSelect.story.js +23 -0
  273. package/build/stories/dev-tools/TestServer.story.js +32 -0
  274. package/build/stories/examples/NativeFlow.story.js +80 -0
  275. package/build/stories/examples/Recipients.story.js +568 -0
  276. package/build/stories/spec/behavior/Copy.story.js +71 -0
  277. package/build/stories/spec/behavior/Link.story.js +40 -0
  278. package/build/stories/spec/behavior/Modal.story.js +79 -0
  279. package/build/stories/spec/behavior/Subflow.story.js +267 -0
  280. package/build/stories/spec/layouts/Decision.story.js +241 -0
  281. package/build/stories/spec/layouts/Image.Illustrations.Animated.story.js +37 -0
  282. package/build/stories/spec/layouts/Image.Sizes.story.js +58 -0
  283. package/build/stories/spec/layouts/Modal.story.js +81 -0
  284. package/build/stories/spec/layouts/Search.story.js +325 -0
  285. package/build/stories/spec/layouts/Upsell.story.js +55 -0
  286. package/build/stories/spec/layouts/button/Button.story.js +100 -0
  287. package/build/stories/spec/layouts/button/PinnedButton.story.js +81 -0
  288. package/build/stories/spec/response/ActionResponse.story.js +66 -0
  289. package/build/stories/spec/schemas/MultiSelect.story.js +148 -0
  290. package/build/stories/spec/schemas/Upload.story.js +168 -0
  291. package/build/stories/spec/schemas/const/ConstLayout.story.js +159 -0
  292. package/build/stories/spec/schemas/const/ObjectConst.story.js +94 -0
  293. package/build/stories/spec/schemas/features/PersistAsync.story.js +211 -0
  294. package/build/stories/spec/schemas/features/ValidationAsync.story.js +103 -0
  295. package/build/stories/spec/schemas/object/FormattedValue.story.js +92 -0
  296. package/build/stories/spec/schemas/object/MoneyInput.story.js +240 -0
  297. package/build/stories/spec/schemas/oneOf/OneOfInitialisation.story.js +55 -0
  298. package/build/stories/spec/schemas/oneOf/OneOfWithSingleOption.story.js +114 -0
  299. package/build/stories/spec/step/Controls.story.js +109 -0
  300. package/build/stories/spec/step/DFModal.story.js +58 -0
  301. package/build/stories/spec/step/Footer.story.js +70 -0
  302. package/build/stories/spec/step/Navigation.story.js +20 -0
  303. package/build/stories/spec/step/ScrollToBottom.story.js +103 -0
  304. package/build/stories/spec/step/Tags.story.js +39 -0
  305. package/build/stories/spec/step/ToolBar.story.js +60 -0
  306. package/build/stories/spec/step/features/ErrorHandling.story.js +92 -0
  307. package/build/stories/spec/step/features/External.story.js +91 -0
  308. package/build/stories/spec/step/features/Polling.story.js +108 -0
  309. package/build/stories/spec/step/features/RefreshAfter.story.js +92 -0
  310. package/build/stories/spec/step/features/refresh/Refresh.story.js +258 -0
  311. package/build/stories/spec/step/features/refresh/RefreshWithPersistAsync.story.js +958 -0
  312. package/build/stories/types.js +1 -0
  313. package/build/stories/utils/fixtureHttpClient.js +70 -0
  314. package/build/stories/utils/getBasicStep.js +223 -0
  315. package/build/stories/utils/mockSearchHandler.js +71 -0
  316. package/build/stories/utils/render-utils.js +41 -0
  317. package/build/stories/visual-tests/layouts/NotUsingListItem.story.js +17 -0
  318. package/build/test-utils/DynamicFlowWise.js +37 -0
  319. package/build/test-utils/DynamicFlowWiseModal.js +34 -0
  320. package/build/test-utils/NeptuneProviders.js +11 -0
  321. package/build/test-utils/component-utils.js +5 -0
  322. package/build/test-utils/fetch-utils.js +45 -0
  323. package/build/test-utils/getMergedTestRenderers.js +34 -0
  324. package/build/test-utils/getRandomId.js +1 -0
  325. package/build/test-utils/index.js +3 -0
  326. package/build/test-utils/openLinkInNewTab.js +15 -0
  327. package/build/test-utils/rtl-utils.js +7 -0
  328. package/build/test-utils/step-utils.js +6 -0
  329. package/build/test-utils/wait.js +3 -0
  330. package/build/tests/AlertLayout.test.js +78 -0
  331. package/build/tests/ArrayTuple.test.js +118 -0
  332. package/build/tests/ButtonLayout.test.js +308 -0
  333. package/build/tests/ConstLayout.test.js +95 -0
  334. package/build/tests/DateInput.test.js +163 -0
  335. package/build/tests/DecisionLayout.test.js +146 -0
  336. package/build/tests/DynamicFlow.test.js +147 -0
  337. package/build/tests/External.test.js +169 -0
  338. package/build/tests/Flow.test.js +328 -0
  339. package/build/tests/FormLayout.test.js +28 -0
  340. package/build/tests/FormattedValue.test.js +107 -0
  341. package/build/tests/ImageRenderer.test.js +78 -0
  342. package/build/tests/InitialAction.test.js +179 -0
  343. package/build/tests/InitialStep.test.js +168 -0
  344. package/build/tests/InstructionsLayout.test.js +45 -0
  345. package/build/tests/ListLayout.test.js +168 -0
  346. package/build/tests/Logging.test.js +53 -0
  347. package/build/tests/ModalBehavior.test.js +149 -0
  348. package/build/tests/MoneyInput.test.js +316 -0
  349. package/build/tests/MultiUpload.test.js +293 -0
  350. package/build/tests/NativeBack.test.js +267 -0
  351. package/build/tests/NoOp.test.js +194 -0
  352. package/build/tests/OneOfInitialisation.test.js +571 -0
  353. package/build/tests/PersistAsync.test.js +687 -0
  354. package/build/tests/Polling.test.js +702 -0
  355. package/build/tests/Prefetching.test.js +230 -0
  356. package/build/tests/RefreshAfter.test.js +63 -0
  357. package/build/tests/RefreshOnChange.ResponseHandling.test.js +205 -0
  358. package/build/tests/RefreshOnChange.test.js +233 -0
  359. package/build/tests/RefreshOnChange.with.Segmented.test.js +350 -0
  360. package/build/tests/RefreshOnChange.with.Tabs.test.js +358 -0
  361. package/build/tests/RefreshOnChangePreserve.test.js +224 -0
  362. package/build/tests/RendererProps.test.js +361 -0
  363. package/build/tests/Repeatable.test.js +107 -0
  364. package/build/tests/Rerendering.test.js +67 -0
  365. package/build/tests/ReviewLayout.test.js +274 -0
  366. package/build/tests/SchemaOnChange.test.js +133 -0
  367. package/build/tests/SchemaReferences.test.js +88 -0
  368. package/build/tests/ScrollToBottom.test.js +122 -0
  369. package/build/tests/ScrollToError.test.js +217 -0
  370. package/build/tests/SegmentedControl.test.js +49 -0
  371. package/build/tests/SingleFileUpload.test.js +168 -0
  372. package/build/tests/StatusList.test.js +85 -0
  373. package/build/tests/Subflow.test.js +887 -0
  374. package/build/tests/Submission.ResponseHandling.test.js +557 -0
  375. package/build/tests/Submission.merging.test.js +202 -0
  376. package/build/tests/Submission.test.js +748 -0
  377. package/build/tests/Tags.test.js +475 -0
  378. package/build/tests/Upsell.test.js +154 -0
  379. package/build/tests/ValidationAsync.test.js +295 -0
  380. package/build/tests/legacy/Actions.test.js +158 -0
  381. package/build/tests/legacy/BackButton.test.js +114 -0
  382. package/build/tests/legacy/HiddenSchemas.test.js +246 -0
  383. package/build/tests/legacy/MultiSelect.test.js +501 -0
  384. package/build/tests/legacy/MultipleFileUploadSchema.test.js +350 -0
  385. package/build/tests/legacy/PersistAsync.blob-schema.test.js +224 -0
  386. package/build/tests/legacy/PersistAsync.string-schema.test.js +211 -0
  387. package/build/tests/legacy/RefreshStepOnChange.debouncing.test.js +209 -0
  388. package/build/tests/legacy/RefreshStepOnChange.test.js +424 -0
  389. package/build/tests/legacy/Search.test.js +439 -0
  390. package/build/tests/renderers/MultiSelectInputRendererProps.test.js +58 -0
  391. package/build/tests/renderers/SelectInputRendererProps.test.js +43 -0
  392. package/build/tests/renderers/TextInputRenderer.test.js +51 -0
  393. package/build/tsconfig.types.tsbuildinfo +1 -1
  394. package/build/types/controller/FlowController.d.ts.map +1 -1
  395. package/build/types/domain/features/polling/getStepPolling.d.ts.map +1 -1
  396. package/build/types/stories/utils/render-utils.d.ts +3 -1
  397. package/build/types/stories/utils/render-utils.d.ts.map +1 -1
  398. package/build/types.js +1 -0
  399. package/build/useDynamicFlow.js +105 -0
  400. package/build/useDynamicFlowModal.js +58 -0
  401. package/build/utils/analyse-step.js +14 -0
  402. package/build/utils/component-utils.js +8 -0
  403. package/build/utils/component-utils.test.js +113 -0
  404. package/build/utils/getScrollToTop.js +12 -0
  405. package/build/utils/normalise-flow-id.js +1 -0
  406. package/build/utils/normalise-flow-id.test.js +24 -0
  407. package/build/utils/recursiveMerge.js +40 -0
  408. package/build/utils/recursiveMerge.test.js +93 -0
  409. package/build/utils/type-utils.js +21 -0
  410. package/build/utils/type-validators.js +11 -0
  411. package/build/utils/type-validators.test.js +180 -0
  412. package/build/utils/useStableCallback.js +15 -0
  413. package/package.json +37 -38
@@ -0,0 +1,166 @@
1
+ import { groupLayoutByPinned } from './groupLayoutByPinned';
2
+ describe('groupLayoutByPinned', () => {
3
+ it('should handle empty layouts array', () => {
4
+ const result = groupLayoutByPinned([]);
5
+ expect(result.pinned).toEqual([]);
6
+ expect(result.nonPinned).toEqual([]);
7
+ });
8
+ it('should leave unpinned layouts as is', () => {
9
+ const layouts = [
10
+ { type: 'button' },
11
+ { type: 'heading', text: 'Heading' },
12
+ { type: 'paragraph', text: 'Paragraph' },
13
+ {
14
+ type: 'columns',
15
+ left: [
16
+ { type: 'button' },
17
+ { type: 'heading', text: 'Heading' },
18
+ { type: 'paragraph', text: 'Paragraph' },
19
+ ],
20
+ right: [
21
+ { type: 'button' },
22
+ { type: 'heading', text: 'Heading' },
23
+ { type: 'paragraph', text: 'Paragraph' },
24
+ ],
25
+ },
26
+ ];
27
+ const result = groupLayoutByPinned(layouts);
28
+ expect(result.pinned).toEqual([]);
29
+ expect(result.nonPinned).toEqual(layouts);
30
+ });
31
+ it('should group layouts by pinned', () => {
32
+ const layouts = [
33
+ { type: 'button', pinOrder: 1 },
34
+ { type: 'button', pinOrder: 2 },
35
+ { type: 'button' },
36
+ ];
37
+ const result = groupLayoutByPinned(layouts);
38
+ expect(result.pinned).toEqual([
39
+ { type: 'button', pinOrder: 1 },
40
+ { type: 'button', pinOrder: 2 },
41
+ ]);
42
+ expect(result.nonPinned).toEqual([{ type: 'button' }]);
43
+ });
44
+ it('should group layouts by pinned in nested layout', () => {
45
+ const layouts = [
46
+ {
47
+ type: 'columns',
48
+ left: [
49
+ {
50
+ type: 'button',
51
+ pinOrder: 1,
52
+ },
53
+ {
54
+ type: 'heading',
55
+ text: 'Money for here, there and everywhere',
56
+ },
57
+ {
58
+ type: 'button',
59
+ pinOrder: 2,
60
+ },
61
+ ],
62
+ right: [
63
+ {
64
+ type: 'paragraph',
65
+ text: "Sending money shouldn't cost the earth. That's why we charge you as little as possible when you transfer and exchange money internationally – you can save up to 9x compared to UK high street banks.",
66
+ },
67
+ {
68
+ type: 'button',
69
+ pinOrder: 3,
70
+ },
71
+ ],
72
+ },
73
+ { type: 'button' },
74
+ ];
75
+ const result = groupLayoutByPinned(layouts);
76
+ expect(result.pinned).toEqual([
77
+ { type: 'button', pinOrder: 1 },
78
+ { type: 'button', pinOrder: 2 },
79
+ { type: 'button', pinOrder: 3 },
80
+ ]);
81
+ expect(result.nonPinned).toEqual([
82
+ {
83
+ type: 'columns',
84
+ left: [
85
+ {
86
+ type: 'heading',
87
+ text: 'Money for here, there and everywhere',
88
+ },
89
+ ],
90
+ right: [
91
+ {
92
+ type: 'paragraph',
93
+ text: "Sending money shouldn't cost the earth. That's why we charge you as little as possible when you transfer and exchange money internationally – you can save up to 9x compared to UK high street banks.",
94
+ },
95
+ ],
96
+ },
97
+ { type: 'button' },
98
+ ]);
99
+ });
100
+ it('should handle layouts with child components', () => {
101
+ const layouts = [
102
+ {
103
+ type: 'section',
104
+ title: 'Container',
105
+ components: [
106
+ { type: 'button', pinOrder: 0 },
107
+ { type: 'paragraph', text: 'Some text' },
108
+ { type: 'button', pinOrder: 1 },
109
+ ],
110
+ },
111
+ { type: 'button' },
112
+ ];
113
+ const result = groupLayoutByPinned(layouts);
114
+ expect(result.pinned).toEqual([
115
+ { type: 'button', pinOrder: 0 },
116
+ { type: 'button', pinOrder: 1 },
117
+ ]);
118
+ expect(result.nonPinned).toEqual([
119
+ {
120
+ type: 'section',
121
+ title: 'Container',
122
+ components: [{ type: 'paragraph', text: 'Some text' }],
123
+ },
124
+ { type: 'button' },
125
+ ]);
126
+ });
127
+ it('should handle mixed nested structures', () => {
128
+ const layouts = [
129
+ {
130
+ type: 'columns',
131
+ left: [
132
+ {
133
+ type: 'section',
134
+ title: 'Left Container',
135
+ components: [
136
+ { type: 'button', pinOrder: 1 },
137
+ { type: 'paragraph', text: 'Left text' },
138
+ ],
139
+ },
140
+ ],
141
+ right: [
142
+ { type: 'button', pinOrder: 2 },
143
+ { type: 'paragraph', text: 'Right paragraph' },
144
+ ],
145
+ },
146
+ ];
147
+ const result = groupLayoutByPinned(layouts);
148
+ expect(result.pinned).toEqual([
149
+ { type: 'button', pinOrder: 1 },
150
+ { type: 'button', pinOrder: 2 },
151
+ ]);
152
+ expect(result.nonPinned).toEqual([
153
+ {
154
+ type: 'columns',
155
+ left: [
156
+ {
157
+ type: 'section',
158
+ title: 'Left Container',
159
+ components: [{ type: 'paragraph', text: 'Left text' }],
160
+ },
161
+ ],
162
+ right: [{ type: 'paragraph', text: 'Right paragraph' }],
163
+ },
164
+ ]);
165
+ });
166
+ });
@@ -0,0 +1,9 @@
1
+ export const mapSpecImage = (image) => {
2
+ var _a, _b, _c;
3
+ return image
4
+ ? {
5
+ uri: (_b = (_a = image.uri) !== null && _a !== void 0 ? _a : image.url) !== null && _b !== void 0 ? _b : '',
6
+ accessibilityDescription: (_c = image.accessibilityDescription) !== null && _c !== void 0 ? _c : image.text,
7
+ }
8
+ : undefined;
9
+ };
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Normalizes the margin of the last layout component in the container by removing its margin if it is not explicitly set.
3
+ * @param container The array of layout components.
4
+ * @returns The array of layout components with the last component's margin normalized if needed.
5
+ */
6
+ export const normaliseMarginInLastComponent = (container) => {
7
+ return container.map((component, index) => {
8
+ const shouldRemoveMargin = index === container.length - 1 && component.margin === undefined;
9
+ return shouldRemoveMargin ? Object.assign(Object.assign({}, component), { margin: 'xs' }) : component;
10
+ });
11
+ };
@@ -0,0 +1,49 @@
1
+ export const mapLegacyContext = (context) => {
2
+ switch (context) {
3
+ case 'success':
4
+ return 'positive';
5
+ case 'failure':
6
+ return 'negative';
7
+ case 'info':
8
+ case 'primary':
9
+ return 'neutral';
10
+ default:
11
+ return context;
12
+ }
13
+ };
14
+ export const mapLegacyBias = (bias) => {
15
+ switch (bias) {
16
+ case 'left':
17
+ return 'start';
18
+ case 'right':
19
+ return 'end';
20
+ default:
21
+ return bias;
22
+ }
23
+ };
24
+ export const mapLegacyAlign = (align) => {
25
+ switch (align) {
26
+ case 'left':
27
+ return 'start';
28
+ case 'right':
29
+ return 'end';
30
+ default:
31
+ return align;
32
+ }
33
+ };
34
+ const legacyActionTypeToContext = {
35
+ positive: 'positive',
36
+ negative: 'negative',
37
+ primary: 'neutral',
38
+ secondary: 'neutral',
39
+ link: 'neutral',
40
+ };
41
+ export const mapLegacyActionTypeToContext = (type) => type && type in legacyActionTypeToContext ? legacyActionTypeToContext[type] : 'neutral';
42
+ const legacyActionTypeToControl = {
43
+ primary: 'primary',
44
+ secondary: 'secondary',
45
+ link: 'tertiary',
46
+ positive: 'primary',
47
+ negative: 'primary',
48
+ };
49
+ export const mapLegacyActionTypeToControl = (type) => type && type in legacyActionTypeToControl ? legacyActionTypeToControl[type] : 'secondary';
@@ -0,0 +1,14 @@
1
+ import { mapSpecImage } from './image';
2
+ export const getDomainLayerMedia = ({ icon, image, media }) => {
3
+ if (media) {
4
+ return media;
5
+ }
6
+ if (icon || image) {
7
+ return {
8
+ type: 'legacy',
9
+ icon,
10
+ image: mapSpecImage(image),
11
+ };
12
+ }
13
+ return undefined;
14
+ };
@@ -0,0 +1,26 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { getDomainLayerMedia } from './media-utils';
13
+ import { mapTags } from './tags-utils';
14
+ export const mapStringSchemaSuggestions = (suggestions, logEvent) => {
15
+ if (!suggestions)
16
+ return undefined;
17
+ return {
18
+ values: suggestions.values.map((_a) => {
19
+ var { icon, image, media, value } = _a, rest = __rest(_a, ["icon", "image", "media", "value"]);
20
+ if (typeof value !== 'string') {
21
+ logEvent('warning', `Suggestion values for string schemas must be of type string. Found ${typeof value} instead.`);
22
+ }
23
+ return Object.assign(Object.assign({}, rest), { media: getDomainLayerMedia({ icon, image, media }), value, tags: mapTags(rest) });
24
+ }),
25
+ };
26
+ };
@@ -0,0 +1,36 @@
1
+ import { mapStringSchemaSuggestions } from './suggestions-utils';
2
+ import { vi } from 'vitest';
3
+ describe('mapStringSchemaSuggestions', () => {
4
+ it('logs a warning when the value is a not a string', () => {
5
+ const logEvent = vi.fn();
6
+ const suggestions = {
7
+ values: [{ value: 123, label: 'Number suggestion' }],
8
+ };
9
+ mapStringSchemaSuggestions(suggestions, logEvent);
10
+ expect(logEvent).toHaveBeenCalledWith('warning', 'Suggestion values for string schemas must be of type string. Found number instead.');
11
+ });
12
+ it('logs a warning when the value is null', () => {
13
+ const logEvent = vi.fn();
14
+ const suggestions = {
15
+ values: [{ value: null, label: 'Null suggestion' }],
16
+ };
17
+ mapStringSchemaSuggestions(suggestions, logEvent);
18
+ expect(logEvent).toHaveBeenCalledWith('warning', 'Suggestion values for string schemas must be of type string. Found object instead.');
19
+ });
20
+ it('does not log a warning when the value is a string', () => {
21
+ const logEvent = vi.fn();
22
+ const suggestions = {
23
+ values: [{ value: 'string', label: 'String suggestion' }],
24
+ };
25
+ mapStringSchemaSuggestions(suggestions, logEvent);
26
+ expect(logEvent).not.toHaveBeenCalled();
27
+ });
28
+ it('does not log a warning when the value is an empty string', () => {
29
+ const logEvent = vi.fn();
30
+ const suggestions = {
31
+ values: [{ value: '', label: 'Empty string suggestion' }],
32
+ };
33
+ mapStringSchemaSuggestions(suggestions, logEvent);
34
+ expect(logEvent).not.toHaveBeenCalled();
35
+ });
36
+ });
@@ -0,0 +1 @@
1
+ export const mapTags = ({ tag, tags }) => tags !== null && tags !== void 0 ? tags : (tag != null ? [tag] : undefined);
@@ -0,0 +1,35 @@
1
+ import { getDomainLayerBehavior } from './behavior-utils';
2
+ import { mapLegacyContext } from './legacy-utils';
3
+ export const mapInlineAlert = (alert) => {
4
+ return alert
5
+ ? {
6
+ content: alert.content,
7
+ context: alert.context ? mapLegacyContext(alert.context) : 'neutral',
8
+ }
9
+ : undefined;
10
+ };
11
+ export const mapAdditionalInfo = (info, mapperProps) => {
12
+ const { onBehavior, registerSubmissionBehavior } = mapperProps;
13
+ if (info) {
14
+ const behavior = getDomainLayerBehavior(info, [], registerSubmissionBehavior);
15
+ return {
16
+ text: info.text,
17
+ href: behavior.type === 'link' ? behavior.url : undefined,
18
+ accessibilityDescription: info.accessibilityDescription,
19
+ onClick: behavior.type === 'none'
20
+ ? undefined
21
+ : () => {
22
+ void onBehavior(behavior);
23
+ },
24
+ };
25
+ }
26
+ return undefined;
27
+ };
28
+ export const mapSchemaAlert = (alert) => {
29
+ return alert
30
+ ? {
31
+ content: alert.markdown,
32
+ context: alert.context ? mapLegacyContext(alert.context) : 'neutral',
33
+ }
34
+ : undefined;
35
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,38 @@
1
+ import { recursiveMerge } from './utils/recursiveMerge';
2
+ export const getSubflowCallbacks = ({ behavior, close, restart, onBehavior, onError, onEvent, }) => {
3
+ const { onCompletion: onCompletionBehavior, onError: onErrorBehavior, referrerId, resultKey, } = behavior;
4
+ return {
5
+ onCompletion: (result) => {
6
+ var _a;
7
+ restart();
8
+ if (!onCompletionBehavior) {
9
+ close();
10
+ return;
11
+ }
12
+ if (onCompletionBehavior.type === 'action') {
13
+ const newActionData = recursiveMerge((_a = onCompletionBehavior.action.data) !== null && _a !== void 0 ? _a : null, resultKey ? { [resultKey]: result } : result);
14
+ void onBehavior(Object.assign(Object.assign({}, onCompletionBehavior), { action: Object.assign(Object.assign({}, onCompletionBehavior.action), { data: newActionData }) }));
15
+ return;
16
+ }
17
+ void onBehavior(onCompletionBehavior);
18
+ close();
19
+ },
20
+ onError: (error, status) => {
21
+ if (!onErrorBehavior) {
22
+ onError(error, {}, status);
23
+ close();
24
+ return;
25
+ }
26
+ restart();
27
+ void onBehavior(onErrorBehavior);
28
+ close();
29
+ },
30
+ onEvent: (name, properties) => {
31
+ onEvent(name, Object.assign({ referrerId }, properties));
32
+ },
33
+ onCancellation: () => {
34
+ restart();
35
+ close();
36
+ },
37
+ };
38
+ };
@@ -0,0 +1,40 @@
1
+ import cs from './cs.json';
2
+ import de from './de.json';
3
+ import en from './en.json';
4
+ import es from './es.json';
5
+ import fr from './fr.json';
6
+ import hu from './hu.json';
7
+ import id from './id.json';
8
+ import it from './it.json';
9
+ import ja from './ja.json';
10
+ import nl from './nl.json';
11
+ import pl from './pl.json';
12
+ import pt from './pt.json';
13
+ import ro from './ro.json';
14
+ import ru from './ru.json';
15
+ import th from './th.json';
16
+ import tr from './tr.json';
17
+ import zhCN from './zh_CN.json';
18
+ import zhHK from './zh_HK.json';
19
+ const translations = {
20
+ cs,
21
+ en,
22
+ de,
23
+ es,
24
+ fr,
25
+ hu,
26
+ id,
27
+ it,
28
+ ja,
29
+ nl,
30
+ pl,
31
+ pt,
32
+ ro,
33
+ ru,
34
+ th,
35
+ tr,
36
+ zh: zhCN,
37
+ 'zh-CN': zhCN,
38
+ 'zh-HK': zhHK,
39
+ };
40
+ export default translations;
package/build/index.js ADDED
@@ -0,0 +1,8 @@
1
+ export { makeHttpClient } from './common/makeHttpClient';
2
+ export { default as translations } from './i18n';
3
+ export { findRendererPropsByType } from './renderers/utils';
4
+ export { useDynamicFlow } from './useDynamicFlow';
5
+ export { useDynamicFlowModal } from './useDynamicFlowModal';
6
+ export { DynamicFlowCore as DynamicFlow } from './DynamicFlowCore';
7
+ export { makeRequestCache } from './domain/features/prefetch/request-cache';
8
+ export { eventNames } from './domain/features/eventNames';
package/build/main.js CHANGED
@@ -2650,6 +2650,7 @@ var getStepPolling = ({
2650
2650
  const { interval, delay = interval, maxAttempts, url, onError } = pollingConfig;
2651
2651
  let abortController = new AbortController();
2652
2652
  let intervalRef = null;
2653
+ let hasCompleted = false;
2653
2654
  if (delay == null) {
2654
2655
  throw new Error("Polling configuration must include delay or interval");
2655
2656
  }
@@ -2662,18 +2663,24 @@ var getStepPolling = ({
2662
2663
  const { signal } = abortController;
2663
2664
  onPoll(url, onErrorBehavior, signal).then((result) => {
2664
2665
  if (result) {
2665
- stop();
2666
+ complete();
2666
2667
  return;
2667
2668
  }
2668
2669
  if (attempts >= maxAttempts && !signal.aborted) {
2670
+ complete();
2669
2671
  void onBehavior(onErrorBehavior);
2670
- stop();
2671
2672
  }
2672
2673
  }).catch(() => {
2673
2674
  });
2674
2675
  };
2676
+ const complete = () => {
2677
+ hasCompleted = true;
2678
+ stop();
2679
+ };
2675
2680
  const start = () => {
2676
- attempts = 0;
2681
+ if (hasCompleted) {
2682
+ return;
2683
+ }
2677
2684
  intervalRef = setInterval(poll, delay * 1e3);
2678
2685
  poll();
2679
2686
  };
@@ -2682,7 +2689,7 @@ var getStepPolling = ({
2682
2689
  logEvent("warning", "Attempted to stop polling but it was not started");
2683
2690
  return;
2684
2691
  }
2685
- clearTimeout(intervalRef);
2692
+ clearInterval(intervalRef);
2686
2693
  abortController.abort();
2687
2694
  };
2688
2695
  return { start, stop };
@@ -6821,7 +6828,12 @@ var createFlowController = (props) => {
6821
6828
  const { request, presentation } = launchConfig;
6822
6829
  const callbacks = getSubflowCallbacks({
6823
6830
  behavior,
6824
- close: () => rootComponent.closeSubflow(),
6831
+ close: () => {
6832
+ var _a3;
6833
+ if (((_a3 = rootComponent.subflow) == null ? void 0 : _a3.uid) === component.uid) {
6834
+ rootComponent.closeSubflow();
6835
+ }
6836
+ },
6825
6837
  onBehavior,
6826
6838
  onError: closeWithError,
6827
6839
  onEvent: onEvent != null ? onEvent : noop2,
package/build/main.mjs CHANGED
@@ -2620,6 +2620,7 @@ var getStepPolling = ({
2620
2620
  const { interval, delay = interval, maxAttempts, url, onError } = pollingConfig;
2621
2621
  let abortController = new AbortController();
2622
2622
  let intervalRef = null;
2623
+ let hasCompleted = false;
2623
2624
  if (delay == null) {
2624
2625
  throw new Error("Polling configuration must include delay or interval");
2625
2626
  }
@@ -2632,18 +2633,24 @@ var getStepPolling = ({
2632
2633
  const { signal } = abortController;
2633
2634
  onPoll(url, onErrorBehavior, signal).then((result) => {
2634
2635
  if (result) {
2635
- stop();
2636
+ complete();
2636
2637
  return;
2637
2638
  }
2638
2639
  if (attempts >= maxAttempts && !signal.aborted) {
2640
+ complete();
2639
2641
  void onBehavior(onErrorBehavior);
2640
- stop();
2641
2642
  }
2642
2643
  }).catch(() => {
2643
2644
  });
2644
2645
  };
2646
+ const complete = () => {
2647
+ hasCompleted = true;
2648
+ stop();
2649
+ };
2645
2650
  const start = () => {
2646
- attempts = 0;
2651
+ if (hasCompleted) {
2652
+ return;
2653
+ }
2647
2654
  intervalRef = setInterval(poll, delay * 1e3);
2648
2655
  poll();
2649
2656
  };
@@ -2652,7 +2659,7 @@ var getStepPolling = ({
2652
2659
  logEvent("warning", "Attempted to stop polling but it was not started");
2653
2660
  return;
2654
2661
  }
2655
- clearTimeout(intervalRef);
2662
+ clearInterval(intervalRef);
2656
2663
  abortController.abort();
2657
2664
  };
2658
2665
  return { start, stop };
@@ -6791,7 +6798,12 @@ var createFlowController = (props) => {
6791
6798
  const { request, presentation } = launchConfig;
6792
6799
  const callbacks = getSubflowCallbacks({
6793
6800
  behavior,
6794
- close: () => rootComponent.closeSubflow(),
6801
+ close: () => {
6802
+ var _a3;
6803
+ if (((_a3 = rootComponent.subflow) == null ? void 0 : _a3.uid) === component.uid) {
6804
+ rootComponent.closeSubflow();
6805
+ }
6806
+ },
6795
6807
  onBehavior,
6796
6808
  onError: closeWithError,
6797
6809
  onEvent: onEvent != null ? onEvent : noop2,
@@ -0,0 +1,5 @@
1
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
+ export const CoreContainerRenderer = {
3
+ canRenderType: 'container',
4
+ render: ({ children }) => _jsx(_Fragment, { children: children }),
5
+ };
@@ -0,0 +1,12 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { findRendererPropsByType } from './utils';
3
+ export const CoreRootRenderer = {
4
+ canRenderType: 'root',
5
+ render: ({ children, childrenProps, subflow }) => {
6
+ if ((subflow === null || subflow === void 0 ? void 0 : subflow.presentation.type) === 'push') {
7
+ return _jsx(_Fragment, { children: subflow.children });
8
+ }
9
+ const [stepProps] = findRendererPropsByType(childrenProps, 'step');
10
+ return (_jsxs("div", { id: stepProps === null || stepProps === void 0 ? void 0 : stepProps.id, className: "dynamic-flow-step", children: [children, (subflow === null || subflow === void 0 ? void 0 : subflow.presentation.type) === 'modal' ? subflow.children : undefined] }));
11
+ },
12
+ };
@@ -0,0 +1,5 @@
1
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
+ export const EmptyLoadingStateRenderer = {
3
+ canRenderType: 'loading-state',
4
+ render: () => _jsx(_Fragment, {}),
5
+ };
@@ -0,0 +1,24 @@
1
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
+ export const getRenderFunction = (renderers) => {
3
+ function ComponentRenderer(props) {
4
+ const { type } = props;
5
+ if (type === 'hidden') {
6
+ return null;
7
+ }
8
+ const renderer = renderers.find(({ canRenderType, canRender = () => true }) =>
9
+ // once the type is matched, we know the props are of the correct type
10
+ canRenderType === type && canRender(props));
11
+ if (!renderer) {
12
+ throw new Error(`Could not find a renderer for ${type}`);
13
+ }
14
+ // if renderer defined, we know props are of the correct type
15
+ return renderer.render(props);
16
+ }
17
+ const render = (props) => {
18
+ if (!props) {
19
+ return _jsx(_Fragment, {});
20
+ }
21
+ return _jsx(ComponentRenderer, Object.assign({}, props), props.uid);
22
+ };
23
+ return render;
24
+ };