@wise/dynamic-flow-client 5.30.0-experimental-18a8b47 → 5.30.0

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 (485) hide show
  1. package/build/DynamicFlowCore.js +5 -0
  2. package/build/common/capabilities/getHttpClientWithCapabilities.js +41 -0
  3. package/build/common/capabilities/getHttpClientWithCapabilities.test.js +106 -0
  4. package/build/common/capabilities/index.js +1 -0
  5. package/build/common/errorBoundary/ErrorBoundary.js +26 -0
  6. package/build/common/errorBoundary/ErrorBoundary.test.js +29 -0
  7. package/build/common/errorBoundary/ErrorBoundaryAlert.js +11 -0
  8. package/build/common/makeHttpClient/api-utils.js +3 -0
  9. package/build/common/makeHttpClient/index.js +1 -0
  10. package/build/common/makeHttpClient/makeHttpClient.js +10 -0
  11. package/build/common/makeHttpClient/makeHttpClient.test.js +186 -0
  12. package/build/common/messages/download.messages.js +18 -0
  13. package/build/common/messages/external-confirmation.messages.js +23 -0
  14. package/build/common/messages/file-upload.messages.js +13 -0
  15. package/build/common/messages/generic-error.messages.js +18 -0
  16. package/build/common/messages/help.messages.js +8 -0
  17. package/build/common/messages/multi-file-upload.messages.js +18 -0
  18. package/build/common/messages/multi-select.messages.js +8 -0
  19. package/build/common/messages/paragraph.messages.js +13 -0
  20. package/build/common/messages/repeatable.messages.js +23 -0
  21. package/build/common/messages/search.messages.js +8 -0
  22. package/build/common/messages/validation.array.messages.js +13 -0
  23. package/build/common/messages/validation.messages.js +53 -0
  24. package/build/controller/FlowController.js +400 -0
  25. package/build/controller/executeDownload.js +86 -0
  26. package/build/controller/executePoll.js +65 -0
  27. package/build/controller/executeRefresh.js +45 -0
  28. package/build/controller/executeRequest.js +93 -0
  29. package/build/controller/executeSubflow.js +71 -0
  30. package/build/controller/executeSubmission.js +68 -0
  31. package/build/controller/getErrorMessage.js +7 -0
  32. package/build/controller/getFilenameFromContentDisposition.js +47 -0
  33. package/build/controller/getFilenameFromContentDisposition.test.js +47 -0
  34. package/build/controller/getRequestAbortController.js +13 -0
  35. package/build/controller/getResponseType.js +35 -0
  36. package/build/controller/getSafeHttpClient.js +8 -0
  37. package/build/controller/getStepCounter.js +16 -0
  38. package/build/controller/handleErrorResponse.js +26 -0
  39. package/build/controller/makeSafeHttpClient.js +8 -0
  40. package/build/controller/response-utils.js +72 -0
  41. package/build/controller/response-utils.test.js +52 -0
  42. package/build/domain/components/AlertComponent.js +2 -0
  43. package/build/domain/components/AllOfComponent.js +47 -0
  44. package/build/domain/components/BooleanInputComponent.js +48 -0
  45. package/build/domain/components/BoxComponent.js +12 -0
  46. package/build/domain/components/ButtonComponent.js +2 -0
  47. package/build/domain/components/ColumnsComponent.js +12 -0
  48. package/build/domain/components/ConstComponent.js +20 -0
  49. package/build/domain/components/ContainerComponent.js +12 -0
  50. package/build/domain/components/DateInputComponent.js +73 -0
  51. package/build/domain/components/DecisionComponent.js +2 -0
  52. package/build/domain/components/DividerComponent.js +2 -0
  53. package/build/domain/components/FormComponent.js +12 -0
  54. package/build/domain/components/FormattedValueComponent.js +47 -0
  55. package/build/domain/components/HeadingComponent.js +2 -0
  56. package/build/domain/components/ImageComponent.js +2 -0
  57. package/build/domain/components/InstructionsComponent.js +2 -0
  58. package/build/domain/components/IntegerInputComponent.js +75 -0
  59. package/build/domain/components/ListComponent.js +2 -0
  60. package/build/domain/components/LoadingIndicatorComponent.js +2 -0
  61. package/build/domain/components/MarkdownComponent.js +2 -0
  62. package/build/domain/components/MediaComponent.js +2 -0
  63. package/build/domain/components/ModalComponent.js +20 -0
  64. package/build/domain/components/ModalLayoutComponent.js +12 -0
  65. package/build/domain/components/MoneyInputComponent.js +56 -0
  66. package/build/domain/components/MultiSelectInputComponent.js +86 -0
  67. package/build/domain/components/MultiUploadInputComponent.js +86 -0
  68. package/build/domain/components/NumberInputComponent.js +74 -0
  69. package/build/domain/components/ObjectComponent.js +54 -0
  70. package/build/domain/components/ParagraphComponent.js +2 -0
  71. package/build/domain/components/PersistAsyncComponent.js +96 -0
  72. package/build/domain/components/ProgressComponent.js +2 -0
  73. package/build/domain/components/RepeatableComponent.js +106 -0
  74. package/build/domain/components/ReviewComponent.js +2 -0
  75. package/build/domain/components/RootDomainComponent.js +193 -0
  76. package/build/domain/components/SectionComponent.js +12 -0
  77. package/build/domain/components/SelectInputComponent.js +96 -0
  78. package/build/domain/components/StatusListComponent.js +2 -0
  79. package/build/domain/components/SubflowComponent.js +19 -0
  80. package/build/domain/components/TabsComponent.js +2 -0
  81. package/build/domain/components/TextInputComponent.js +77 -0
  82. package/build/domain/components/TupleComponent.js +48 -0
  83. package/build/domain/components/UpdatableComponent.js +46 -0
  84. package/build/domain/components/UploadInputComponent.js +78 -0
  85. package/build/domain/components/UpsellComponent.js +26 -0
  86. package/build/domain/components/collectionComponent/CollectionComponent.js +14 -0
  87. package/build/domain/components/collectionComponent/CollectionComponent.test.js +447 -0
  88. package/build/domain/components/collectionComponent/CollectionController.js +138 -0
  89. package/build/domain/components/collectionComponent/CollectionController.test.js +58 -0
  90. package/build/domain/components/collectionComponent/CollectionStack.js +40 -0
  91. package/build/domain/components/collectionComponent/CollectionStack.test.js +173 -0
  92. package/build/domain/components/collectionComponent/CollectionState.js +39 -0
  93. package/build/domain/components/collectionComponent/applyCollectionResponse.js +9 -0
  94. package/build/domain/components/collectionComponent/mergeSections.js +28 -0
  95. package/build/domain/components/collectionComponent/toggleFilterOption.js +15 -0
  96. package/build/domain/components/collectionComponent/types.js +1 -0
  97. package/build/domain/components/searchComponent/SearchComponent.js +91 -0
  98. package/build/domain/components/searchComponent/SearchComponent.test.js +190 -0
  99. package/build/domain/components/step/ExternalConfirmationComponent.js +27 -0
  100. package/build/domain/components/step/StepDomainComponent.js +153 -0
  101. package/build/domain/components/step/ToolbarComponent.js +1 -0
  102. package/build/domain/components/utils/component-utils.js +12 -0
  103. package/build/domain/components/utils/debounce.js +34 -0
  104. package/build/domain/components/utils/debounce.test.js +67 -0
  105. package/build/domain/components/utils/file-utils.js +21 -0
  106. package/build/domain/components/utils/file-utils.test.js +27 -0
  107. package/build/domain/components/utils/getRandomId.js +1 -0
  108. package/build/domain/components/utils/isExactLocalValueMatch.js +14 -0
  109. package/build/domain/components/utils/isOrWasValid.js +5 -0
  110. package/build/domain/components/utils/isPartialModelMatch.js +18 -0
  111. package/build/domain/components/utils/isPartialModelMatch.test.js +74 -0
  112. package/build/domain/features/collection/getPerformCollectionQuery.js +80 -0
  113. package/build/domain/features/collection/getPerformCollectionQuery.test.js +215 -0
  114. package/build/domain/features/delay/getStepDelays.js +37 -0
  115. package/build/domain/features/delay/getStepDelays.test.js +69 -0
  116. package/build/domain/features/domain-event-bus/DomainEventBus.js +24 -0
  117. package/build/domain/features/domain-event-bus/index.js +1 -0
  118. package/build/domain/features/domain-event-bus/types.js +1 -0
  119. package/build/domain/features/eventNames.js +41 -0
  120. package/build/domain/features/events.js +5 -0
  121. package/build/domain/features/persistAsync/getComponentMultiPersistAsync.js +50 -0
  122. package/build/domain/features/persistAsync/getInitialPersistedState.js +7 -0
  123. package/build/domain/features/persistAsync/getPerformPersistAsync.js +43 -0
  124. package/build/domain/features/persistAsync/getPerformPersistAsync.test.js +139 -0
  125. package/build/domain/features/polling/getStepPolling.js +50 -0
  126. package/build/domain/features/polling/getStepPolling.test.js +115 -0
  127. package/build/domain/features/prefetch/getStepPrefetch.js +56 -0
  128. package/build/domain/features/prefetch/request-cache.js +49 -0
  129. package/build/domain/features/prefetch/request-cache.test.js +70 -0
  130. package/build/domain/features/refreshAfter/getStepRefreshAfter.js +24 -0
  131. package/build/domain/features/refreshAfter/getStepRefreshAfter.test.js +40 -0
  132. package/build/domain/features/schema-on-change/getDebouncedSchemaOnChange.js +50 -0
  133. package/build/domain/features/schema-on-change/getSchemaOnChange.js +38 -0
  134. package/build/domain/features/search/getPerformSearchFunction.js +75 -0
  135. package/build/domain/features/search/getPerformSearchFunction.test.js +301 -0
  136. package/build/domain/features/summary/summary-utils.js +37 -0
  137. package/build/domain/features/summary/summary-utils.test.js +125 -0
  138. package/build/domain/features/updatable/getPerformUpdateQuery.js +52 -0
  139. package/build/domain/features/utils/http-utils.js +21 -0
  140. package/build/domain/features/utils/response-utils.js +9 -0
  141. package/build/domain/features/validation/date-availability.js +54 -0
  142. package/build/domain/features/validation/date-availability.test.js +54 -0
  143. package/build/domain/features/validation/getPatternRegExp.js +25 -0
  144. package/build/domain/features/validation/spec-utils.js +23 -0
  145. package/build/domain/features/validation/validation-functions.js +6 -0
  146. package/build/domain/features/validation/validation-functions.test.js +108 -0
  147. package/build/domain/features/validation/value-checks.js +130 -0
  148. package/build/domain/features/validation/value-checks.test.js +297 -0
  149. package/build/domain/features/validationAsync/getComponentValidationAsync.js +57 -0
  150. package/build/domain/features/validationAsync/getComponentValidationAsync.test.js +67 -0
  151. package/build/domain/features/validationAsync/getInitialValidationAsyncState.js +6 -0
  152. package/build/domain/features/validationAsync/getPerformValidationAsync.js +46 -0
  153. package/build/domain/features/validationAsync/getPerformValidationAsync.test.js +162 -0
  154. package/build/domain/handlers/dismissHandler.js +11 -0
  155. package/build/domain/mappers/layout/alertLayoutToComponent.js +18 -0
  156. package/build/domain/mappers/layout/boxLayoutToComponent.js +13 -0
  157. package/build/domain/mappers/layout/buttonLayoutToComponent.js +77 -0
  158. package/build/domain/mappers/layout/collectionLayoutToComponent.js +66 -0
  159. package/build/domain/mappers/layout/columnsLayoutToComponent.js +13 -0
  160. package/build/domain/mappers/layout/decisionLayoutToComponent.js +24 -0
  161. package/build/domain/mappers/layout/deprecatedListLayoutToComponent.js +30 -0
  162. package/build/domain/mappers/layout/dividerLayoutToComponent.js +2 -0
  163. package/build/domain/mappers/layout/formLayoutToComponent.js +19 -0
  164. package/build/domain/mappers/layout/headingLayoutToComponent.js +12 -0
  165. package/build/domain/mappers/layout/imageLayoutToComponent.js +17 -0
  166. package/build/domain/mappers/layout/infoLayoutToComponent.js +12 -0
  167. package/build/domain/mappers/layout/instructionsLayoutToComponent.js +12 -0
  168. package/build/domain/mappers/layout/listLayoutToComponent.js +39 -0
  169. package/build/domain/mappers/layout/loadingIndicatorLayoutToComponent.js +9 -0
  170. package/build/domain/mappers/layout/markdownLayoutToComponent.js +12 -0
  171. package/build/domain/mappers/layout/mediaLayoutToComponent.js +12 -0
  172. package/build/domain/mappers/layout/modalLayoutToComponent.js +17 -0
  173. package/build/domain/mappers/layout/modalToComponent.js +8 -0
  174. package/build/domain/mappers/layout/paragraphLayoutToComponent.js +12 -0
  175. package/build/domain/mappers/layout/progressLayoutToComponent.js +15 -0
  176. package/build/domain/mappers/layout/reviewLayoutToComponent.js +49 -0
  177. package/build/domain/mappers/layout/searchLayoutToComponent.js +44 -0
  178. package/build/domain/mappers/layout/sectionLayoutToComponent.js +16 -0
  179. package/build/domain/mappers/layout/statusListLayoutToComponent.js +15 -0
  180. package/build/domain/mappers/layout/tabsLayoutToComponent.js +16 -0
  181. package/build/domain/mappers/layout/updatableLayoutToComponent.js +39 -0
  182. package/build/domain/mappers/layout/upsellLayoutToComponent.js +18 -0
  183. package/build/domain/mappers/mapLayoutToComponent.js +87 -0
  184. package/build/domain/mappers/mapSchemaToComponent.js +65 -0
  185. package/build/domain/mappers/mapSchemaToComponent.test.js +116 -0
  186. package/build/domain/mappers/mapStepSchemas.js +14 -0
  187. package/build/domain/mappers/mapStepToComponent.js +145 -0
  188. package/build/domain/mappers/mapStepToComponent.test.js +319 -0
  189. package/build/domain/mappers/mapToolbarToComponent.js +15 -0
  190. package/build/domain/mappers/schema/allOfSchemaToComponent.js +17 -0
  191. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToComponent.js +26 -0
  192. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToMultiSelectComponent.js +56 -0
  193. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToMultiUploadComponent.js +66 -0
  194. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToRepeatableComponent.js +58 -0
  195. package/build/domain/mappers/schema/arraySchemaToComponent/arraySchemaToTupleComponent.js +18 -0
  196. package/build/domain/mappers/schema/blobSchemaToComponent.js +15 -0
  197. package/build/domain/mappers/schema/booleanSchemaToComponent.js +29 -0
  198. package/build/domain/mappers/schema/constSchemaToComponent.js +23 -0
  199. package/build/domain/mappers/schema/dateSchemaToComponent.js +56 -0
  200. package/build/domain/mappers/schema/dateSchemaToComponent.test.js +117 -0
  201. package/build/domain/mappers/schema/integerSchemaToComponent.js +28 -0
  202. package/build/domain/mappers/schema/numberSchemaToComponent.js +26 -0
  203. package/build/domain/mappers/schema/objectSchemaToComponent/assertDisplayOrder.js +23 -0
  204. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToFormattedValueComponent.js +9 -0
  205. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToMoneyInputComponent.js +119 -0
  206. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToMoneyInputComponent.test.js +97 -0
  207. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToObjectComponent.js +32 -0
  208. package/build/domain/mappers/schema/objectSchemaToComponent/objectSchemaToObjectComponent.test.js +99 -0
  209. package/build/domain/mappers/schema/oneOfSchemaToComponent/oneOfSchemaToComponent.js +67 -0
  210. package/build/domain/mappers/schema/oneOfSchemaToComponent/oneOfSchemaToComponent.test.js +225 -0
  211. package/build/domain/mappers/schema/persistAsyncSchemaToComponent.js +29 -0
  212. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToComponent.js +18 -0
  213. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToComponent.test.js +133 -0
  214. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToTextInputComponent.js +38 -0
  215. package/build/domain/mappers/schema/stringSchemaToComponent/stringSchemaToUploadInputComponent.js +28 -0
  216. package/build/domain/mappers/schema/tests/test-utils.js +16 -0
  217. package/build/domain/mappers/schema/types.js +1 -0
  218. package/build/domain/mappers/schema/utils/getPerformPersistAsyncFn.js +19 -0
  219. package/build/domain/mappers/schema/utils/getValidationAsyncInitialState.js +23 -0
  220. package/build/domain/mappers/schema/utils/mapCommonSchemaProps.js +16 -0
  221. package/build/domain/mappers/types.js +1 -0
  222. package/build/domain/mappers/utils/FeatureFlags.js +22 -0
  223. package/build/domain/mappers/utils/behavior-utils.js +52 -0
  224. package/build/domain/mappers/utils/call-to-action-utils.js +24 -0
  225. package/build/domain/mappers/utils/getAutocompleteString.js +76 -0
  226. package/build/domain/mappers/utils/getAutocompleteString.test.js +21 -0
  227. package/build/domain/mappers/utils/getHrefWithTracking.js +16 -0
  228. package/build/domain/mappers/utils/groupLayoutByPinned.js +38 -0
  229. package/build/domain/mappers/utils/groupLayoutByPinned.test.js +166 -0
  230. package/build/domain/mappers/utils/image.js +6 -0
  231. package/build/domain/mappers/utils/layout-utils.js +11 -0
  232. package/build/domain/mappers/utils/legacy-utils.js +49 -0
  233. package/build/domain/mappers/utils/media-utils.js +14 -0
  234. package/build/domain/mappers/utils/suggestions-utils.js +26 -0
  235. package/build/domain/mappers/utils/suggestions-utils.test.js +36 -0
  236. package/build/domain/mappers/utils/tags-utils.js +1 -0
  237. package/build/domain/mappers/utils/utils.js +45 -0
  238. package/build/domain/types.js +1 -0
  239. package/build/i18n/index.js +40 -0
  240. package/build/index.js +9 -0
  241. package/build/main.css +114 -15
  242. package/build/main.js +5 -5
  243. package/build/main.mjs +5 -5
  244. package/build/renderers/CoreContainerRenderer.js +5 -0
  245. package/build/renderers/CoreRootRenderer.js +12 -0
  246. package/build/renderers/EmptyLoadingStateRenderer.js +5 -0
  247. package/build/renderers/getRenderFunction.js +24 -0
  248. package/build/renderers/getSchemaErrorMessageFunction.js +111 -0
  249. package/build/renderers/mappers/alertComponentToProps.js +3 -0
  250. package/build/renderers/mappers/allOfComponentToProps.js +6 -0
  251. package/build/renderers/mappers/booleanInputComponentToProps.js +3 -0
  252. package/build/renderers/mappers/boxComponentToProps.js +13 -0
  253. package/build/renderers/mappers/buttonComponentToProps.js +4 -0
  254. package/build/renderers/mappers/collectionComponentToProps.js +54 -0
  255. package/build/renderers/mappers/columnsComponentToProps.js +8 -0
  256. package/build/renderers/mappers/componentToRendererProps.js +168 -0
  257. package/build/renderers/mappers/constComponentToProps.js +5 -0
  258. package/build/renderers/mappers/containerComponentToProps.js +8 -0
  259. package/build/renderers/mappers/dateInputComponentToProps.js +3 -0
  260. package/build/renderers/mappers/decisionComponentToProps.js +16 -0
  261. package/build/renderers/mappers/dividerComponentToProps.js +2 -0
  262. package/build/renderers/mappers/externalComponentToProps.js +4 -0
  263. package/build/renderers/mappers/formComponentToProps.js +8 -0
  264. package/build/renderers/mappers/formattedValueComponentToProps.js +5 -0
  265. package/build/renderers/mappers/headingComponentToProps.js +2 -0
  266. package/build/renderers/mappers/hiddenComponentToProps.js +1 -0
  267. package/build/renderers/mappers/imageComponentToProps.js +2 -0
  268. package/build/renderers/mappers/instructionsComponentToProps.js +2 -0
  269. package/build/renderers/mappers/integerInputComponentToProps.js +3 -0
  270. package/build/renderers/mappers/listComponentToProps.js +3 -0
  271. package/build/renderers/mappers/loadingIndicatorComponentToProps.js +2 -0
  272. package/build/renderers/mappers/markdownComponentToProps.js +2 -0
  273. package/build/renderers/mappers/mediaComponentToProps.js +2 -0
  274. package/build/renderers/mappers/modalComponentToProps.js +8 -0
  275. package/build/renderers/mappers/modalLayoutComponentToProps.js +13 -0
  276. package/build/renderers/mappers/moneyInputComponentToProps.js +36 -0
  277. package/build/renderers/mappers/multiSelectComponentToProps.js +19 -0
  278. package/build/renderers/mappers/multiUploadInputComponentToProps.js +7 -0
  279. package/build/renderers/mappers/numberInputComponentToProps.js +3 -0
  280. package/build/renderers/mappers/objectComponentToProps.js +8 -0
  281. package/build/renderers/mappers/paragraphComponentToProps.js +2 -0
  282. package/build/renderers/mappers/persistAsyncComponentToProps.js +7 -0
  283. package/build/renderers/mappers/progressComponentToProps.js +2 -0
  284. package/build/renderers/mappers/repeatableComponentToProps.js +22 -0
  285. package/build/renderers/mappers/reviewComponentToProps.js +3 -0
  286. package/build/renderers/mappers/rootComponentToProps.js +20 -0
  287. package/build/renderers/mappers/searchComponentToProps.js +45 -0
  288. package/build/renderers/mappers/sectionComponentToProps.js +7 -0
  289. package/build/renderers/mappers/selectInputComponentToProps.js +34 -0
  290. package/build/renderers/mappers/statusListComponentToProps.js +3 -0
  291. package/build/renderers/mappers/subflowComponentToRendererProps.js +26 -0
  292. package/build/renderers/mappers/tabsComponentToProps.js +14 -0
  293. package/build/renderers/mappers/textInputComponentToProps.js +3 -0
  294. package/build/renderers/mappers/tupleComponentToProps.js +8 -0
  295. package/build/renderers/mappers/updatableComponentToProps.js +6 -0
  296. package/build/renderers/mappers/uploadInputComponentToProps.js +5 -0
  297. package/build/renderers/mappers/upsellComponentToProps.js +3 -0
  298. package/build/renderers/mappers/utils/getValidationState.js +12 -0
  299. package/build/renderers/mappers/utils/inputComponentToProps.js +17 -0
  300. package/build/renderers/mappers/utils/mapCallToAction.js +23 -0
  301. package/build/renderers/mappers/utils/mapErrorsToValidationState.js +9 -0
  302. package/build/renderers/mappers/utils/mapRendererLoadingState.js +1 -0
  303. package/build/renderers/mappers/utils/pick.js +8 -0
  304. package/build/renderers/mappers/utils/selectInputOptionsToProps.js +11 -0
  305. package/build/renderers/stepComponentToProps.js +32 -0
  306. package/build/renderers/subflow/getDynamicSubflowRenderer.js +13 -0
  307. package/build/renderers/subflow/getNativeSubflowRenderer.js +26 -0
  308. package/build/renderers/utils.js +82 -0
  309. package/build/renderers/utils.test.js +70 -0
  310. package/build/stories/dev-tools/ContainerQueries.story.js +66 -0
  311. package/build/stories/dev-tools/Debugger.story.js +107 -0
  312. package/build/stories/dev-tools/FixtureSelect.story.js +23 -0
  313. package/build/stories/dev-tools/TestServer.story.js +118 -0
  314. package/build/stories/examples/NativeFlow.story.js +80 -0
  315. package/build/stories/examples/Recipients.story.js +568 -0
  316. package/build/stories/spec/behavior/Copy.story.js +71 -0
  317. package/build/stories/spec/behavior/Download.story.js +254 -0
  318. package/build/stories/spec/behavior/DynamicSubflow.story.js +272 -0
  319. package/build/stories/spec/behavior/Link.story.js +40 -0
  320. package/build/stories/spec/behavior/Modal.story.js +79 -0
  321. package/build/stories/spec/behavior/NativeSubflow.story.js +249 -0
  322. package/build/stories/spec/layouts/Alert.story.js +107 -0
  323. package/build/stories/spec/layouts/Box.Container-Widths.3-sizes.story.js +59 -0
  324. package/build/stories/spec/layouts/Box.Container-Widths.story.js +57 -0
  325. package/build/stories/spec/layouts/Box.Viewport-Widths.story.js +64 -0
  326. package/build/stories/spec/layouts/Collection.story.js +326 -0
  327. package/build/stories/spec/layouts/Decision.story.js +241 -0
  328. package/build/stories/spec/layouts/Image.Illustrations.Animated.story.js +37 -0
  329. package/build/stories/spec/layouts/Image.Sizes.story.js +58 -0
  330. package/build/stories/spec/layouts/List.story.js +60 -0
  331. package/build/stories/spec/layouts/Modal.story.js +81 -0
  332. package/build/stories/spec/layouts/Search.story.js +325 -0
  333. package/build/stories/spec/layouts/Updatable.story.js +135 -0
  334. package/build/stories/spec/layouts/Upsell.story.js +55 -0
  335. package/build/stories/spec/layouts/button/Button.story.js +111 -0
  336. package/build/stories/spec/layouts/button/PinnedButton.story.js +81 -0
  337. package/build/stories/spec/response/ActionResponse.story.js +66 -0
  338. package/build/stories/spec/schemas/InlineAlert.story.js +134 -0
  339. package/build/stories/spec/schemas/MultiSelect.story.js +206 -0
  340. package/build/stories/spec/schemas/Upload.story.js +168 -0
  341. package/build/stories/spec/schemas/const/ConstLayout.story.js +159 -0
  342. package/build/stories/spec/schemas/const/ObjectConst.story.js +94 -0
  343. package/build/stories/spec/schemas/date/DateSchema.story.js +60 -0
  344. package/build/stories/spec/schemas/features/PersistAsync.story.js +230 -0
  345. package/build/stories/spec/schemas/features/ValidationAsync.story.js +137 -0
  346. package/build/stories/spec/schemas/object/FormattedValue.story.js +92 -0
  347. package/build/stories/spec/schemas/object/MoneyInput.story.js +240 -0
  348. package/build/stories/spec/schemas/oneOf/OneOfInitialisation.story.js +55 -0
  349. package/build/stories/spec/schemas/oneOf/OneOfWithSingleOption.story.js +114 -0
  350. package/build/stories/spec/step/Controls.story.js +110 -0
  351. package/build/stories/spec/step/DFModal.story.js +58 -0
  352. package/build/stories/spec/step/Footer.story.js +90 -0
  353. package/build/stories/spec/step/Navigation.story.js +46 -0
  354. package/build/stories/spec/step/ScrollToBottom.story.js +103 -0
  355. package/build/stories/spec/step/Tags.story.js +39 -0
  356. package/build/stories/spec/step/ToolBar.story.js +60 -0
  357. package/build/stories/spec/step/features/ErrorHandling.story.js +92 -0
  358. package/build/stories/spec/step/features/External.story.js +91 -0
  359. package/build/stories/spec/step/features/LongFormError.story.js +88 -0
  360. package/build/stories/spec/step/features/Polling.story.js +108 -0
  361. package/build/stories/spec/step/features/RefreshAfter.story.js +92 -0
  362. package/build/stories/spec/step/features/refresh/Refresh.story.js +260 -0
  363. package/build/stories/spec/step/features/refresh/RefreshWithPersistAsync.story.js +958 -0
  364. package/build/stories/types.js +1 -0
  365. package/build/stories/utils/fixtureHttpClient.js +70 -0
  366. package/build/stories/utils/getBasicStep.js +223 -0
  367. package/build/stories/utils/mockSearchHandler.js +71 -0
  368. package/build/stories/utils/render-utils.js +59 -0
  369. package/build/stories/visual-tests/layouts/NotUsingListItem.story.js +17 -0
  370. package/build/test-utils/DynamicFlowWise.js +41 -0
  371. package/build/test-utils/DynamicFlowWiseModal.js +34 -0
  372. package/build/test-utils/NeptuneProviders.js +11 -0
  373. package/build/test-utils/component-utils.js +5 -0
  374. package/build/test-utils/dummy-native-subflows-handlers/dummySubflowHandlers.js +45 -0
  375. package/build/test-utils/dummy-native-subflows-handlers/geolocationSubflowHandler.js +30 -0
  376. package/build/test-utils/dummy-native-subflows-handlers/index.js +9 -0
  377. package/build/test-utils/dummy-native-subflows-handlers/notificationPermissionSubflowHandler.js +17 -0
  378. package/build/test-utils/fetch-utils.js +47 -0
  379. package/build/test-utils/getMergedTestRenderers.js +36 -0
  380. package/build/test-utils/getRandomId.js +1 -0
  381. package/build/test-utils/index.js +3 -0
  382. package/build/test-utils/mockIntersectionObserver.js +23 -0
  383. package/build/test-utils/openLinkInNewTab.js +15 -0
  384. package/build/test-utils/rtl-utils.js +7 -0
  385. package/build/test-utils/step-utils.js +6 -0
  386. package/build/test-utils/useSnackBar.js +4 -0
  387. package/build/test-utils/wait.js +3 -0
  388. package/build/tests/AlertLayout.test.js +228 -0
  389. package/build/tests/ArrayTuple.test.js +118 -0
  390. package/build/tests/ButtonLayout.test.js +356 -0
  391. package/build/tests/CollectionLayout.test.js +722 -0
  392. package/build/tests/CollectionLayout.v2.test.js +350 -0
  393. package/build/tests/ConstLayout.test.js +95 -0
  394. package/build/tests/DateInput.test.js +190 -0
  395. package/build/tests/DateSchema.test.js +171 -0
  396. package/build/tests/DecisionLayout.test.js +146 -0
  397. package/build/tests/DelayBehavior.test.js +186 -0
  398. package/build/tests/Download.test.js +201 -0
  399. package/build/tests/DynamicFlow.test.js +147 -0
  400. package/build/tests/External.test.js +169 -0
  401. package/build/tests/Flow.test.js +328 -0
  402. package/build/tests/FormLayout.test.js +28 -0
  403. package/build/tests/FormattedValue.test.js +107 -0
  404. package/build/tests/ImageRenderer.test.js +78 -0
  405. package/build/tests/InitialAction.test.js +235 -0
  406. package/build/tests/InitialStep.test.js +168 -0
  407. package/build/tests/InstructionsLayout.test.js +45 -0
  408. package/build/tests/ListLayout.test.js +165 -0
  409. package/build/tests/Logging.test.js +53 -0
  410. package/build/tests/ModalBehavior.test.js +149 -0
  411. package/build/tests/MoneyInput.test.js +313 -0
  412. package/build/tests/MultiUpload.test.js +293 -0
  413. package/build/tests/NativeBack.test.js +267 -0
  414. package/build/tests/NoOp.test.js +194 -0
  415. package/build/tests/OnLoad.test.js +153 -0
  416. package/build/tests/OneOfInitialisation.test.js +571 -0
  417. package/build/tests/PersistAsync.test.js +687 -0
  418. package/build/tests/Polling.test.js +708 -0
  419. package/build/tests/Prefetching.test.js +229 -0
  420. package/build/tests/RefreshAfter.test.js +63 -0
  421. package/build/tests/RefreshOnChange.ResponseHandling.test.js +199 -0
  422. package/build/tests/RefreshOnChange.test.js +233 -0
  423. package/build/tests/RefreshOnChange.with.Segmented.test.js +351 -0
  424. package/build/tests/RefreshOnChange.with.Tabs.test.js +359 -0
  425. package/build/tests/RefreshOnChangePreserve.test.js +221 -0
  426. package/build/tests/RendererProps.test.js +372 -0
  427. package/build/tests/Repeatable.test.js +104 -0
  428. package/build/tests/Rerendering.test.js +67 -0
  429. package/build/tests/ReviewLayout.test.js +271 -0
  430. package/build/tests/SchemaOnChange.test.js +133 -0
  431. package/build/tests/SchemaReferences.test.js +88 -0
  432. package/build/tests/ScrollToBottom.test.js +101 -0
  433. package/build/tests/ScrollToError.test.js +359 -0
  434. package/build/tests/ScrollToTop.test.js +95 -0
  435. package/build/tests/SegmentedControl.test.js +49 -0
  436. package/build/tests/SingleFileUpload.test.js +168 -0
  437. package/build/tests/StatusList.test.js +85 -0
  438. package/build/tests/Subflow.dynamic.test.js +887 -0
  439. package/build/tests/Subflow.native.test.js +448 -0
  440. package/build/tests/Submission.Const.test.js +70 -0
  441. package/build/tests/Submission.ResponseHandling.test.js +557 -0
  442. package/build/tests/Submission.merging.test.js +202 -0
  443. package/build/tests/Submission.test.js +821 -0
  444. package/build/tests/Tags.test.js +466 -0
  445. package/build/tests/UpdatableLayout.test.js +343 -0
  446. package/build/tests/Upsell.test.js +154 -0
  447. package/build/tests/ValidationAsync.test.js +295 -0
  448. package/build/tests/behavior/events.test.js +348 -0
  449. package/build/tests/legacy/Actions.test.js +158 -0
  450. package/build/tests/legacy/BackButton.test.js +114 -0
  451. package/build/tests/legacy/HiddenSchemas.test.js +250 -0
  452. package/build/tests/legacy/MultiSelect.test.js +546 -0
  453. package/build/tests/legacy/MultipleFileUploadSchema.test.js +350 -0
  454. package/build/tests/legacy/PersistAsync.blob-schema.test.js +224 -0
  455. package/build/tests/legacy/PersistAsync.string-schema.test.js +211 -0
  456. package/build/tests/legacy/RefreshStepOnChange.debouncing.test.js +209 -0
  457. package/build/tests/legacy/RefreshStepOnChange.test.js +421 -0
  458. package/build/tests/legacy/Search.test.js +439 -0
  459. package/build/tests/renderers/InlineAlertInSchemas.test.js +82 -0
  460. package/build/tests/renderers/MediaRenderer.test.js +74 -0
  461. package/build/tests/renderers/MultiSelectInputRendererProps.test.js +58 -0
  462. package/build/tests/renderers/SelectInputRendererProps.test.js +43 -0
  463. package/build/tests/renderers/TextInputRenderer.test.js +48 -0
  464. package/build/tsconfig.types.tsbuildinfo +1 -1
  465. package/build/types/domain/components/collectionComponent/CollectionController.d.ts +2 -2
  466. package/build/types/domain/components/collectionComponent/CollectionController.d.ts.map +1 -1
  467. package/build/types/renderers/mappers/collectionComponentToProps.d.ts.map +1 -1
  468. package/build/types.js +1 -0
  469. package/build/useDynamicFlow.js +110 -0
  470. package/build/useDynamicFlowModal.js +58 -0
  471. package/build/utils/analyse-step.js +14 -0
  472. package/build/utils/component-utils.js +8 -0
  473. package/build/utils/component-utils.test.js +113 -0
  474. package/build/utils/getScrollToTop.js +12 -0
  475. package/build/utils/normalise-flow-id.js +1 -0
  476. package/build/utils/normalise-flow-id.test.js +24 -0
  477. package/build/utils/recursiveMerge.js +40 -0
  478. package/build/utils/recursiveMerge.test.js +93 -0
  479. package/build/utils/safe-parse-link.js +14 -0
  480. package/build/utils/safe-parse-link.test.js +19 -0
  481. package/build/utils/type-utils.js +22 -0
  482. package/build/utils/type-validators.js +11 -0
  483. package/build/utils/type-validators.test.js +180 -0
  484. package/build/utils/useStableCallback.js +15 -0
  485. package/package.json +2 -2
@@ -0,0 +1,36 @@
1
+ import { mapSuggestions } from './suggestions-utils';
2
+ import { vi } from 'vitest';
3
+ describe('mapSuggestions', () => {
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
+ mapSuggestions(suggestions, logEvent);
10
+ expect(logEvent).toHaveBeenCalledWith('warning', 'Suggestion values 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
+ mapSuggestions(suggestions, logEvent);
18
+ expect(logEvent).toHaveBeenCalledWith('warning', 'Suggestion values 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
+ mapSuggestions(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
+ mapSuggestions(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,45 @@
1
+ import { getDomainLayerBehavior } from './behavior-utils';
2
+ import { getHrefWithTracking } from './getHrefWithTracking';
3
+ import { mapLegacyContext } from './legacy-utils';
4
+ import { getDomainLayerMedia } from './media-utils';
5
+ export const mapInlineAlert = (alert) => {
6
+ return alert
7
+ ? {
8
+ content: alert.content,
9
+ context: alert.context ? mapLegacyContext(alert.context) : 'neutral',
10
+ media: getDomainLayerMedia({ media: alert.media }),
11
+ }
12
+ : undefined;
13
+ };
14
+ export const mapAdditionalInfo = (info, mapperProps) => {
15
+ const { onBehavior, trackEvent, registerSubmissionBehavior } = mapperProps;
16
+ if (info) {
17
+ const behavior = getDomainLayerBehavior(info, [], registerSubmissionBehavior);
18
+ const isLink = behavior.type === 'link';
19
+ return {
20
+ text: info.text,
21
+ href: isLink ? behavior.url : undefined,
22
+ hrefWithTracking: getHrefWithTracking({
23
+ behavior,
24
+ onBehavior,
25
+ trackEvent,
26
+ }),
27
+ accessibilityDescription: info.accessibilityDescription,
28
+ onClick: behavior.type === 'none'
29
+ ? undefined
30
+ : () => {
31
+ void onBehavior(behavior);
32
+ },
33
+ };
34
+ }
35
+ return undefined;
36
+ };
37
+ export const mapSchemaAlert = (alert) => {
38
+ return alert
39
+ ? {
40
+ content: alert.markdown,
41
+ context: alert.context ? mapLegacyContext(alert.context) : 'neutral',
42
+ media: getDomainLayerMedia({ media: alert.media }),
43
+ }
44
+ : undefined;
45
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -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,9 @@
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 { eventNames } from './domain/features/eventNames';
8
+ export { makeRequestCache } from './domain/features/prefetch/request-cache';
9
+ export { getDynamicSubflowRenderer } from './renderers/subflow/getDynamicSubflowRenderer';
package/build/main.css CHANGED
@@ -97,6 +97,13 @@
97
97
  }
98
98
  }
99
99
 
100
+ .df-filters-container {
101
+ display: flex;
102
+ flex-direction: row;
103
+ gap: 8px;
104
+ flex-wrap: wrap;
105
+ }
106
+
100
107
  /* collapses and expands to the filters' natural height by animating a single grid row */
101
108
  .df-filters-collapsible {
102
109
  display: grid;
@@ -127,37 +134,93 @@
127
134
  }
128
135
  }
129
136
 
130
- .df-filters-container {
131
- display: flex;
132
- flex-direction: row;
133
- gap: 8px;
134
- flex-wrap: wrap;
135
- }
136
-
137
137
  .df-filter-loader .np-chip {
138
- background: linear-gradient(
139
- -45deg,
140
- var(--color-background-neutral) 40%,
141
- var(--color-background-elevated) 50%,
142
- var(--color-background-neutral) 60%
143
- );
138
+ background: linear-gradient(-45deg,
139
+ var(--color-background-neutral) 40%,
140
+ var(--color-background-elevated) 50%,
141
+ var(--color-background-neutral) 60%);
144
142
  background-size: 300%;
145
143
  background-position-x: 100%;
146
144
  animation: shimmer 1s infinite linear;
147
145
  transition: background 200ms;
148
- border-color: var(--color-border-neutral);
149
146
  }
150
147
 
151
- .df-filter-loader .np-chip > * {
148
+ .df-filter-loader .np-chip>* {
152
149
  visibility: hidden;
153
150
  }
154
151
 
152
+ /* v2 filter chips rest on a fainter border, leaving hover and press to Neptune,
153
+ scoped to the v2 filters as v1 shares the df-filters-container class */
154
+ .df-filters-collapsible-content .np-chip:not(:hover, :active) {
155
+ border-color: var(--color-border-overlay);
156
+ }
157
+
158
+ /* selected chips keep the unselected fill, so only their border colour stands out,
159
+ except while loading, when every chip shares the unselected border */
160
+ .df-filters-container:not(.df-filter-loader) .np-chip.df-chip--selected {
161
+ border-color: var(--color-interactive-accent);
162
+ }
163
+
164
+ .np-theme-personal .df-filters-container:not(.df-filter-loader) .np-chip.df-chip--selected:not(.disabled) {
165
+ border-color: var(--color-interactive-primary);
166
+ }
167
+
168
+ /* Neptune's hover and press styles don't depend on a click handler, so chips without one opt out */
169
+ .df-filters-collapsible-content .np-chip.df-chip--static {
170
+ pointer-events: none;
171
+ }
172
+
155
173
  @keyframes shimmer {
156
174
  to {
157
175
  background-position-x: 0%;
158
176
  }
159
177
  }
160
178
 
179
+ /* the hint is stacked over the input by the input group's grid, lined up with the input's text */
180
+ .df-search-hint {
181
+ display: grid;
182
+ grid-template-columns: max-content minmax(0, 1fr);
183
+ align-self: center;
184
+ min-width: 0;
185
+ margin-inline: var(--size-48);
186
+ overflow: hidden;
187
+ pointer-events: none;
188
+ color: var(--color-content-tertiary);
189
+ }
190
+
191
+ /* the prefix can end in a space, which a grid item would otherwise trim */
192
+ .df-search-hint-prefix {
193
+ white-space: pre;
194
+ }
195
+
196
+ /* the words share one clipped line, so they appear to roll past each other */
197
+ .df-search-hint-viewport {
198
+ display: grid;
199
+ overflow: hidden;
200
+ }
201
+
202
+ /* the words still to come wait above the line, the current one sits on it, and past ones drop below */
203
+ .df-search-hint-word {
204
+ grid-area: 1 / 1;
205
+ overflow: hidden;
206
+ text-overflow: ellipsis;
207
+ white-space: nowrap;
208
+ opacity: 0;
209
+ transform: translateY(-100%);
210
+ transition:
211
+ transform 0.5s cubic-bezier(0.35, 0, 0.35, 1),
212
+ opacity 0.8s cubic-bezier(0.35, 0, 0.35, 1);
213
+ }
214
+
215
+ .df-search-hint-word--current {
216
+ opacity: 1;
217
+ transform: none;
218
+ }
219
+
220
+ .df-search-hint-word--past {
221
+ transform: translateY(100%);
222
+ }
223
+
161
224
  .df-columns-renderer-container {
162
225
  display: flex;
163
226
  gap: var(--size-4);
@@ -278,9 +341,45 @@
278
341
  width: 300px;
279
342
  }
280
343
  }
344
+ /**
345
+ * FIXME: .static-spotlight is magic CSS to work around Neptune limitation
346
+ * that a ListItem with Spotlight must have a control
347
+ */
348
+
349
+ /* Hide the dummy button. */
350
+ .static-spotlight .wds-list-item-control {
351
+ display: none;
352
+ }
353
+
354
+ /* Remove the clickable cursor and label interaction. */
355
+ .static-spotlight .wds-list-item-view {
356
+ cursor: revert !important;
357
+ pointer-events: none;
358
+ }
359
+
360
+ /* Preserve real links/buttons in additional info or prompts. */
361
+ .static-spotlight .wds-list-item-additional-info,
362
+ .static-spotlight .wds-list-item-prompt {
363
+ pointer-events: auto;
364
+ }
365
+
366
+ /* Keep the resting background during hover and press. */
367
+ .static-spotlight.wds-list-item-spotlight-active:not(.disabled):not(:disabled):is(:hover, :active) {
368
+ background-color: var(--color-background-neutral);
369
+ }
370
+
371
+ .static-spotlight.wds-list-item-spotlight-inactive:not(.disabled):not(:disabled):is(:hover, :active) {
372
+ background-color: color-mix(
373
+ in srgb,
374
+ var(--color-background-neutral) 25%,
375
+ transparent
376
+ );
377
+ }
378
+
281
379
  .df-markdown> :last-child {
282
380
  margin-bottom: 0px;
283
381
  }
382
+
284
383
  .df-media-layout-avatar {
285
384
  display: flex;
286
385
  }
package/build/main.js CHANGED
@@ -1822,7 +1822,7 @@ var toggleFilterOption = (state, filterIndex, optionIndex) => {
1822
1822
  // src/domain/components/collectionComponent/CollectionController.ts
1823
1823
  var createCollectionController = ({
1824
1824
  stack,
1825
- queryFunction,
1825
+ collectionClient,
1826
1826
  trackEvent
1827
1827
  }) => {
1828
1828
  let requests = /* @__PURE__ */ new Map();
@@ -1868,7 +1868,7 @@ var createCollectionController = ({
1868
1868
  const { analytics, filters, search } = state;
1869
1869
  trackEvent(getEventName(mode, "Triggered"), analytics);
1870
1870
  try {
1871
- const response = await queryFunction({
1871
+ const response = await collectionClient({
1872
1872
  searchParam: search == null ? void 0 : search.param,
1873
1873
  query: search == null ? void 0 : search.query,
1874
1874
  cursor: mode === "pagination" ? state.nextCursor : void 0,
@@ -2148,7 +2148,7 @@ var collectionLayoutToComponent = (uid, { analyticsId, control, initialState, ma
2148
2148
  );
2149
2149
  };
2150
2150
  const mapState = (state) => mapCollectionSpecToDomainState(state, mapperProps, mapLayout);
2151
- const queryFunction = getPerformCollectionQuery(httpClient, baseRequest, mapState);
2151
+ const collectionClient = getPerformCollectionQuery(httpClient, baseRequest, mapState);
2152
2152
  const stack = createCollectionStack(
2153
2153
  uid,
2154
2154
  mapState(__spreadProps(__spreadValues({}, initialState), {
@@ -2156,7 +2156,7 @@ var collectionLayoutToComponent = (uid, { analyticsId, control, initialState, ma
2156
2156
  })),
2157
2157
  onComponentUpdate
2158
2158
  );
2159
- const controller = createCollectionController({ stack, queryFunction, trackEvent });
2159
+ const controller = createCollectionController({ stack, collectionClient, trackEvent });
2160
2160
  const component = createCollectionComponent(
2161
2161
  {
2162
2162
  uid,
@@ -9141,6 +9141,7 @@ var collectionComponentToProps = (component, rendererMapperProps) => {
9141
9141
  const { stack } = component;
9142
9142
  return __spreadProps(__spreadValues(__spreadValues({}, pick(component, "uid", "analyticsId", "type", "control", "margin", "tags", "fork", "pop")), rendererMapperProps), {
9143
9143
  state: mapCollectionState(component, component.getActiveState(), rendererMapperProps),
9144
+ onSearchChange: (query) => component.search(component.getActiveState(), query),
9144
9145
  depth: stack.length - 1
9145
9146
  });
9146
9147
  };
@@ -9160,7 +9161,6 @@ var mapCollectionState = (component, state, rendererMapperProps) => {
9160
9161
  afterSectionsProps,
9161
9162
  afterSections: afterSectionsProps.map(render),
9162
9163
  search: search ? __spreadProps(__spreadValues({}, pick(search, "title", "hint", "hints", "query")), {
9163
- onChange: (query) => component.search(component.getActiveState(), query),
9164
9164
  initialSections: search.initialSections ? mapSections(search.initialSections, rendererMapperProps) : void 0
9165
9165
  }) : void 0
9166
9166
  };
package/build/main.mjs CHANGED
@@ -1791,7 +1791,7 @@ var toggleFilterOption = (state, filterIndex, optionIndex) => {
1791
1791
  // src/domain/components/collectionComponent/CollectionController.ts
1792
1792
  var createCollectionController = ({
1793
1793
  stack,
1794
- queryFunction,
1794
+ collectionClient,
1795
1795
  trackEvent
1796
1796
  }) => {
1797
1797
  let requests = /* @__PURE__ */ new Map();
@@ -1837,7 +1837,7 @@ var createCollectionController = ({
1837
1837
  const { analytics, filters, search } = state;
1838
1838
  trackEvent(getEventName(mode, "Triggered"), analytics);
1839
1839
  try {
1840
- const response = await queryFunction({
1840
+ const response = await collectionClient({
1841
1841
  searchParam: search == null ? void 0 : search.param,
1842
1842
  query: search == null ? void 0 : search.query,
1843
1843
  cursor: mode === "pagination" ? state.nextCursor : void 0,
@@ -2117,7 +2117,7 @@ var collectionLayoutToComponent = (uid, { analyticsId, control, initialState, ma
2117
2117
  );
2118
2118
  };
2119
2119
  const mapState = (state) => mapCollectionSpecToDomainState(state, mapperProps, mapLayout);
2120
- const queryFunction = getPerformCollectionQuery(httpClient, baseRequest, mapState);
2120
+ const collectionClient = getPerformCollectionQuery(httpClient, baseRequest, mapState);
2121
2121
  const stack = createCollectionStack(
2122
2122
  uid,
2123
2123
  mapState(__spreadProps(__spreadValues({}, initialState), {
@@ -2125,7 +2125,7 @@ var collectionLayoutToComponent = (uid, { analyticsId, control, initialState, ma
2125
2125
  })),
2126
2126
  onComponentUpdate
2127
2127
  );
2128
- const controller = createCollectionController({ stack, queryFunction, trackEvent });
2128
+ const controller = createCollectionController({ stack, collectionClient, trackEvent });
2129
2129
  const component = createCollectionComponent(
2130
2130
  {
2131
2131
  uid,
@@ -9112,6 +9112,7 @@ var collectionComponentToProps = (component, rendererMapperProps) => {
9112
9112
  const { stack } = component;
9113
9113
  return __spreadProps(__spreadValues(__spreadValues({}, pick(component, "uid", "analyticsId", "type", "control", "margin", "tags", "fork", "pop")), rendererMapperProps), {
9114
9114
  state: mapCollectionState(component, component.getActiveState(), rendererMapperProps),
9115
+ onSearchChange: (query) => component.search(component.getActiveState(), query),
9115
9116
  depth: stack.length - 1
9116
9117
  });
9117
9118
  };
@@ -9131,7 +9132,6 @@ var mapCollectionState = (component, state, rendererMapperProps) => {
9131
9132
  afterSectionsProps,
9132
9133
  afterSections: afterSectionsProps.map(render),
9133
9134
  search: search ? __spreadProps(__spreadValues({}, pick(search, "title", "hint", "hints", "query")), {
9134
- onChange: (query) => component.search(component.getActiveState(), query),
9135
9135
  initialSections: search.initialSections ? mapSections(search.initialSections, rendererMapperProps) : void 0
9136
9136
  }) : void 0
9137
9137
  };
@@ -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
+ };
@@ -0,0 +1,111 @@
1
+ import { formatDate } from '@transferwise/formatting';
2
+ import errorMessages from '../common/messages/validation.messages';
3
+ import genericErrorMessages from '../common/messages/generic-error.messages';
4
+ import arrayErrorMessages from '../common/messages/validation.array.messages';
5
+ import fileUploadMessages from '../common/messages/file-upload.messages';
6
+ import multiFileUploadMessages from '../common/messages/multi-file-upload.messages';
7
+ import downloadMessages from '../common/messages/download.messages';
8
+ export function getSchemaErrorMessageFunction(formatMessage, locale) {
9
+ return (validationMessages) => createErrorMessageFunctions(validationMessages !== null && validationMessages !== void 0 ? validationMessages : {}, formatMessage, locale);
10
+ }
11
+ const createErrorMessageFunctions = (validationMessages, formatMessage, locale) => ({
12
+ minimum(minimum) {
13
+ var _a;
14
+ return ((_a = validationMessages.minimum) !== null && _a !== void 0 ? _a : formatMessage(errorMessages.minimum, {
15
+ minimum,
16
+ }));
17
+ },
18
+ maximum(maximum) {
19
+ var _a;
20
+ return ((_a = validationMessages.maximum) !== null && _a !== void 0 ? _a : formatMessage(errorMessages.maximum, {
21
+ maximum,
22
+ }));
23
+ },
24
+ minimumDate(minimumDate) {
25
+ var _a;
26
+ return ((_a = validationMessages.minimum) !== null && _a !== void 0 ? _a : formatMessage(errorMessages.minimumDate, {
27
+ minimum: formatDate(new Date(minimumDate), locale, formatDateOptions),
28
+ }));
29
+ },
30
+ maximumDate(maximumDate) {
31
+ var _a;
32
+ return ((_a = validationMessages.maximum) !== null && _a !== void 0 ? _a : formatMessage(errorMessages.maximumDate, {
33
+ maximum: formatDate(new Date(maximumDate), locale, formatDateOptions),
34
+ }));
35
+ },
36
+ invalidDate() {
37
+ var _a;
38
+ return (_a = validationMessages.invalidDate) !== null && _a !== void 0 ? _a : formatMessage(errorMessages.patternDate);
39
+ },
40
+ minLength(minLength) {
41
+ var _a;
42
+ return ((_a = validationMessages.minLength) !== null && _a !== void 0 ? _a : formatMessage(errorMessages.minLength, {
43
+ minLength,
44
+ }));
45
+ },
46
+ maxLength(maxLength) {
47
+ var _a;
48
+ return ((_a = validationMessages.maxLength) !== null && _a !== void 0 ? _a : formatMessage(errorMessages.maxLength, {
49
+ maxLength,
50
+ }));
51
+ },
52
+ minItems(minItems) {
53
+ var _a;
54
+ return ((_a = validationMessages.minItems) !== null && _a !== void 0 ? _a : formatMessage(arrayErrorMessages.minItemsError, {
55
+ minItems,
56
+ }));
57
+ },
58
+ maxItems(maxItems) {
59
+ var _a;
60
+ return ((_a = validationMessages.maxItems) !== null && _a !== void 0 ? _a : formatMessage(arrayErrorMessages.maxItemsError, {
61
+ maxItems,
62
+ }));
63
+ },
64
+ minFiles(minItems) {
65
+ var _a;
66
+ return ((_a = validationMessages.minItems) !== null && _a !== void 0 ? _a : formatMessage(multiFileUploadMessages.minItemsError, {
67
+ minItems,
68
+ }));
69
+ },
70
+ maxFiles(maxItems) {
71
+ var _a;
72
+ return ((_a = validationMessages.maxItems) !== null && _a !== void 0 ? _a : formatMessage(multiFileUploadMessages.maxItemsError, {
73
+ maxItems,
74
+ }));
75
+ },
76
+ maxSize() {
77
+ var _a;
78
+ return (_a = validationMessages.maxSize) !== null && _a !== void 0 ? _a : formatMessage(fileUploadMessages.maxFileSizeError);
79
+ },
80
+ accepts() {
81
+ var _a;
82
+ return (_a = validationMessages.accepts) !== null && _a !== void 0 ? _a : formatMessage(fileUploadMessages.wrongFileTypeError);
83
+ },
84
+ pattern() {
85
+ var _a;
86
+ return (_a = validationMessages.pattern) !== null && _a !== void 0 ? _a : formatMessage(errorMessages.pattern);
87
+ },
88
+ required() {
89
+ var _a;
90
+ return (_a = validationMessages.required) !== null && _a !== void 0 ? _a : formatMessage(errorMessages.required);
91
+ },
92
+ genericError() {
93
+ return formatMessage(genericErrorMessages.genericError);
94
+ },
95
+ genericErrorWithRetry() {
96
+ return formatMessage(genericErrorMessages.genericErrorRetryHint);
97
+ },
98
+ downloadStarted() {
99
+ return formatMessage(downloadMessages.downloadStarted);
100
+ },
101
+ downloadFailed() {
102
+ return formatMessage(downloadMessages.downloadFailed);
103
+ },
104
+ downloadSuccessful() {
105
+ return formatMessage(downloadMessages.downloadSuccessful);
106
+ },
107
+ });
108
+ const formatDateOptions = {
109
+ timeZone: 'UTC',
110
+ dateStyle: 'long',
111
+ };
@@ -0,0 +1,3 @@
1
+ import { mapCallToActionOptional } from './utils/mapCallToAction';
2
+ import { pick } from './utils/pick';
3
+ export const alertComponentToProps = (component, rendererMapperProps) => (Object.assign(Object.assign(Object.assign({}, pick(component, 'uid', 'analyticsId', 'type', 'context', 'control', 'margin', 'markdown', 'media', 'tags', 'title')), { callToAction: mapCallToActionOptional(component.callToAction), onDismiss: component.dismiss, secondaryCallToAction: mapCallToActionOptional(component.secondaryCallToAction) }), rendererMapperProps));
@@ -0,0 +1,6 @@
1
+ import { componentToRendererProps } from './componentToRendererProps';
2
+ import { pick } from './utils/pick';
3
+ export const allOfComponentToProps = (component, rendererMapperProps) => {
4
+ const childrenProps = component.components.map((c) => componentToRendererProps(c, rendererMapperProps));
5
+ return Object.assign(Object.assign(Object.assign({ type: 'form-section' }, pick(component, 'uid', 'analyticsId', 'control', 'description', 'help', 'media', 'tags', 'title')), rendererMapperProps), { children: childrenProps.map(rendererMapperProps.render), childrenProps });
6
+ };
@@ -0,0 +1,3 @@
1
+ import { inputComponentToProps } from './utils/inputComponentToProps';
2
+ import { pick } from './utils/pick';
3
+ export const booleanInputComponentToProps = (component, rendererMapperProps) => { var _a; return (Object.assign(Object.assign(Object.assign(Object.assign({}, inputComponentToProps(component, 'input-checkbox')), rendererMapperProps), pick(component, 'additionalText', 'supportingValues', 'inlineAlert')), { onChange: component.setValue, value: (_a = component.value) !== null && _a !== void 0 ? _a : false })); };
@@ -0,0 +1,13 @@
1
+ import { componentToRendererProps } from './componentToRendererProps';
2
+ import { pick } from './utils/pick';
3
+ export const boxComponentToProps = (component, rendererMapperProps) => {
4
+ const childrenProps = component.components.map((c) => componentToRendererProps(c, rendererMapperProps));
5
+ const { border, control } = component;
6
+ return Object.assign(Object.assign(Object.assign({}, pick(component, 'uid', 'analyticsId', 'type', 'control', 'width', 'margin', 'tags')), rendererMapperProps), { control: mapBoxControl({ border, control }), children: childrenProps.map(rendererMapperProps.render), childrenProps });
7
+ };
8
+ const mapBoxControl = ({ border, control, }) => {
9
+ if (border && control == null) {
10
+ return 'bordered';
11
+ }
12
+ return control;
13
+ };
@@ -0,0 +1,4 @@
1
+ import { pick } from './utils/pick';
2
+ export const buttonComponentToProps = (component, rendererMapperProps) => {
3
+ return Object.assign(Object.assign(Object.assign({ type: 'button' }, pick(component, 'uid', 'analyticsId', 'title', 'control', 'context', 'margin', 'media', 'pinOrder', 'size', 'onClick', 'tags')), { disabled: component.disabled || rendererMapperProps.stepLoadingState !== 'idle' }), rendererMapperProps);
4
+ };