@wise/dynamic-flow-client 3.4.1 → 3.5.0-experimental-6654c72

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 (260) hide show
  1. package/build/common/errorBoundary/ErrorBoundary.js +44 -0
  2. package/build/common/errorBoundary/ErrorBoundaryAlert.js +12 -0
  3. package/build/common/httpClientContext/HttpClientContext.js +35 -0
  4. package/build/common/httpClientContext/index.js +1 -0
  5. package/build/common/makeHttpClient/index.js +1 -0
  6. package/build/common/makeHttpClient/makeHttpClient.js +34 -0
  7. package/build/common/messages/external-confirmation.messages.js +23 -0
  8. package/build/common/messages/generic-error.messages.js +18 -0
  9. package/build/common/messages/help.messages.js +8 -0
  10. package/build/common/messages/multi-file-upload.messages.js +18 -0
  11. package/build/common/messages/multi-select.messages.js +8 -0
  12. package/build/common/messages/paragraph.messages.js +13 -0
  13. package/build/common/messages/repeatable.messages.js +23 -0
  14. package/build/common/messages/validation.array.messages.js +13 -0
  15. package/build/common/messages/validation.messages.js +53 -0
  16. package/build/common/utils/api-utils.js +4 -0
  17. package/build/i18n/index.js +36 -0
  18. package/build/legacy/common/constants/DateMode.js +4 -0
  19. package/build/legacy/common/constants/FeatureName.js +4 -0
  20. package/build/legacy/common/constants/FormControlType.js +21 -0
  21. package/build/legacy/common/constants/MonthFormat.js +4 -0
  22. package/build/legacy/common/constants/Size.js +7 -0
  23. package/build/legacy/common/constants/index.js +4 -0
  24. package/build/legacy/common/contexts/dynamicFlowContexts/DynamicFlowContexts.js +36 -0
  25. package/build/legacy/common/contexts/dynamicFlowContexts/usePendingPromiseCounter.js +13 -0
  26. package/build/legacy/common/contexts/eventsContext/EventsContext.js +38 -0
  27. package/build/legacy/common/contexts/featureContext/FeatureContext.js +22 -0
  28. package/build/legacy/common/contexts/index.js +3 -0
  29. package/build/legacy/common/contexts/logContext/LogContext.js +44 -0
  30. package/build/legacy/common/hooks/index.js +7 -0
  31. package/build/legacy/common/hooks/useDebouncedFunction/useDebouncedFunction.js +9 -0
  32. package/build/legacy/common/hooks/useExternal/useExternal.js +15 -0
  33. package/build/legacy/common/hooks/useExternalStepPolling/useExternalStepPolling.js +70 -0
  34. package/build/legacy/common/hooks/usePersistAsync/usePersistAsync.js +172 -0
  35. package/build/legacy/common/hooks/usePolling/usePolling.js +51 -0
  36. package/build/legacy/common/hooks/usePrevious/usePrevious.js +8 -0
  37. package/build/legacy/common/hooks/useStepPolling/useStepPolling.js +43 -0
  38. package/build/legacy/common/messages.js +8 -0
  39. package/build/legacy/common/utils/api-utils.js +6 -0
  40. package/build/legacy/common/utils/date-utils.js +22 -0
  41. package/build/legacy/common/utils/debounce.js +38 -0
  42. package/build/legacy/common/utils/file-utils.js +45 -0
  43. package/build/legacy/common/utils/id-utils.js +5 -0
  44. package/build/legacy/common/utils/index.js +11 -0
  45. package/build/legacy/common/utils/is-equal.js +21 -0
  46. package/build/legacy/common/utils/misc-utils.js +4 -0
  47. package/build/legacy/common/utils/mobile-utils.js +23 -0
  48. package/build/legacy/common/utils/model-utils.js +33 -0
  49. package/build/legacy/common/utils/schema-utils.js +113 -0
  50. package/build/legacy/common/utils/step-utils.js +32 -0
  51. package/build/legacy/common/validators/index.js +5 -0
  52. package/build/legacy/common/validators/models/model-utils.js +119 -0
  53. package/build/legacy/common/validators/models/model-validators.js +62 -0
  54. package/build/legacy/common/validators/schemas/schema-validators.js +101 -0
  55. package/build/legacy/common/validators/types/type-validators.js +14 -0
  56. package/build/legacy/common/validators/validationFailures/validation-failures.js +139 -0
  57. package/build/legacy/common/validators/validationFailures/validation-failures.utils.js +40 -0
  58. package/build/legacy/common/validators/values/value-validators.js +6 -0
  59. package/build/legacy/dynamic-flow-types.js +1 -0
  60. package/build/legacy/dynamicFlow/BackButton.js +22 -0
  61. package/build/legacy/dynamicFlow/DynamicFlow.js +346 -0
  62. package/build/legacy/dynamicFlow/DynamicFlowStep.js +37 -0
  63. package/build/legacy/dynamicFlow/DynamicFlowTypes.js +1 -0
  64. package/build/legacy/dynamicFlow/index.js +1 -0
  65. package/build/legacy/dynamicFlow/utils/index.js +5 -0
  66. package/build/legacy/dynamicFlow/utils/responseParsers/response-parsers.js +185 -0
  67. package/build/legacy/dynamicFlow/utils/useDebouncedRefresh/useDebouncedRefresh.js +26 -0
  68. package/build/legacy/dynamicFlow/utils/useDynamicFlowState.js +137 -0
  69. package/build/legacy/dynamicFlow/utils/useLoader.js +22 -0
  70. package/build/legacy/formControl/FormControl.js +266 -0
  71. package/build/legacy/formControl/index.js +1 -0
  72. package/build/legacy/formControl/utils/getAutocompleteString.js +80 -0
  73. package/build/legacy/formControl/utils/index.js +2 -0
  74. package/build/legacy/formControl/utils/value-utils.js +108 -0
  75. package/build/legacy/jsonSchemaForm/JsonSchemaForm.js +24 -0
  76. package/build/legacy/jsonSchemaForm/allOfSchema/AllOfSchema.js +50 -0
  77. package/build/legacy/jsonSchemaForm/allOfSchema/index.js +1 -0
  78. package/build/legacy/jsonSchemaForm/arrayTypeSchema/ArraySchema.js +25 -0
  79. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/ArrayListSchema.js +34 -0
  80. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/multiSelectSchema/MultiSelectSchema.js +84 -0
  81. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/multipleFileUploadSchema/MultipleFileUploadSchema.js +141 -0
  82. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/multipleFileUploadSchema/index.js +1 -0
  83. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/multipleFileUploadSchema/utils/index.js +2 -0
  84. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/multipleFileUploadSchema/utils/upload-utils.js +79 -0
  85. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/multipleFileUploadSchema/utils/useFormattedDefaultErrorMessages.js +14 -0
  86. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/repeatableSchema/ItemSummary.js +7 -0
  87. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/repeatableSchema/RepeatableSchema.js +134 -0
  88. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/repeatableSchema/RepeatableSchemaStep.js +85 -0
  89. package/build/legacy/jsonSchemaForm/arrayTypeSchema/arrayListSchema/repeatableSchema/utils/summary-utils.js +135 -0
  90. package/build/legacy/jsonSchemaForm/arrayTypeSchema/index.js +1 -0
  91. package/build/legacy/jsonSchemaForm/basicTypeSchema/BasicTypeSchema.js +111 -0
  92. package/build/legacy/jsonSchemaForm/basicTypeSchema/index.js +1 -0
  93. package/build/legacy/jsonSchemaForm/controlFeedback/ControlFeedback.js +86 -0
  94. package/build/legacy/jsonSchemaForm/controlFeedback/index.js +1 -0
  95. package/build/legacy/jsonSchemaForm/genericSchema/GenericSchema.js +85 -0
  96. package/build/legacy/jsonSchemaForm/genericSchema/index.js +1 -0
  97. package/build/legacy/jsonSchemaForm/help/Help.js +20 -0
  98. package/build/legacy/jsonSchemaForm/help/index.js +1 -0
  99. package/build/legacy/jsonSchemaForm/index.js +1 -0
  100. package/build/legacy/jsonSchemaForm/objectSchema/ObjectSchema.js +77 -0
  101. package/build/legacy/jsonSchemaForm/objectSchema/index.js +1 -0
  102. package/build/legacy/jsonSchemaForm/oneOfSchema/OneOfSchema.js +155 -0
  103. package/build/legacy/jsonSchemaForm/oneOfSchema/index.js +1 -0
  104. package/build/legacy/jsonSchemaForm/oneOfSchema/utils.js +68 -0
  105. package/build/legacy/jsonSchemaForm/persistAsyncSchema/PersistAsyncSchema.js +26 -0
  106. package/build/legacy/jsonSchemaForm/persistAsyncSchema/index.js +1 -0
  107. package/build/legacy/jsonSchemaForm/persistAsyncSchema/persistAsyncBasicSchema/PersistAsyncBasicSchema.js +165 -0
  108. package/build/legacy/jsonSchemaForm/persistAsyncSchema/persistAsyncBasicSchema/index.js +1 -0
  109. package/build/legacy/jsonSchemaForm/persistAsyncSchema/persistAsyncBlobSchema/PersistAsyncBlobSchema.js +131 -0
  110. package/build/legacy/jsonSchemaForm/persistAsyncSchema/persistAsyncBlobSchema/UploadInputAdapter.js +31 -0
  111. package/build/legacy/jsonSchemaForm/persistAsyncSchema/persistAsyncBlobSchema/index.js +1 -0
  112. package/build/legacy/jsonSchemaForm/promotedOneOfSchema/PromotedOneOfSchema.js +72 -0
  113. package/build/legacy/jsonSchemaForm/promotedOneOfSchema/index.js +1 -0
  114. package/build/legacy/jsonSchemaForm/promotedOneOfSchema/promoted-one-of-utils.js +8 -0
  115. package/build/legacy/jsonSchemaForm/promotedOneOfSchema/promotedOneOfControl/PromotedOneOfCheckboxControl.js +27 -0
  116. package/build/legacy/jsonSchemaForm/promotedOneOfSchema/promotedOneOfControl/PromotedOneOfControl.js +31 -0
  117. package/build/legacy/jsonSchemaForm/promotedOneOfSchema/promotedOneOfControl/PromotedOneOfRadioControl.js +32 -0
  118. package/build/legacy/jsonSchemaForm/readOnlySchema/ReadOnlySchema.js +54 -0
  119. package/build/legacy/jsonSchemaForm/readOnlySchema/ReadOnlySchema.messages.js +13 -0
  120. package/build/legacy/jsonSchemaForm/readOnlySchema/index.js +1 -0
  121. package/build/legacy/jsonSchemaForm/schemaFormControl/SchemaFormControl.js +133 -0
  122. package/build/legacy/jsonSchemaForm/schemaFormControl/index.js +1 -0
  123. package/build/legacy/jsonSchemaForm/schemaFormControl/utils/index.js +1 -0
  124. package/build/legacy/jsonSchemaForm/schemaFormControl/utils/mapping-utils.js +107 -0
  125. package/build/legacy/jsonSchemaForm/validationAsyncSchema/ValidationAsyncSchema.js +150 -0
  126. package/build/legacy/jsonSchemaForm/validationAsyncSchema/index.js +1 -0
  127. package/build/legacy/layout/DynamicLayout.js +68 -0
  128. package/build/legacy/layout/alert/DynamicAlert.js +29 -0
  129. package/build/legacy/layout/box/DynamicBox.js +41 -0
  130. package/build/legacy/layout/button/DynamicButton.js +27 -0
  131. package/build/legacy/layout/button/utils.js +45 -0
  132. package/build/legacy/layout/columns/DynamicColumns.js +38 -0
  133. package/build/legacy/layout/decision/DynamicDecision.js +21 -0
  134. package/build/legacy/layout/divider/DynamicDivider.js +9 -0
  135. package/build/legacy/layout/external/DynamicExternal.js +32 -0
  136. package/build/legacy/layout/external/DynamicExternal.messages.js +8 -0
  137. package/build/legacy/layout/form/DynamicForm.js +22 -0
  138. package/build/legacy/layout/heading/DynamicHeading.js +51 -0
  139. package/build/legacy/layout/icon/DynamicIcon.js +17 -0
  140. package/build/legacy/layout/icon/FlagIcon.js +198 -0
  141. package/build/legacy/layout/icon/NamedIcon.js +19 -0
  142. package/build/legacy/layout/image/DynamicImage.js +111 -0
  143. package/build/legacy/layout/index.js +20 -0
  144. package/build/legacy/layout/instructions/DynamicInstructions.js +30 -0
  145. package/build/legacy/layout/list/DynamicStatusList.js +37 -0
  146. package/build/legacy/layout/loadingIndicator/DynamicLoadingIndicator.js +11 -0
  147. package/build/legacy/layout/markdown/DynamicMarkdown.js +23 -0
  148. package/build/legacy/layout/modal/DynamicModal.js +26 -0
  149. package/build/legacy/layout/paragraph/DynamicParagraph.js +46 -0
  150. package/build/legacy/layout/paragraph/useSnackBarIfAvailable.js +9 -0
  151. package/build/legacy/layout/review/DynamicReview.js +58 -0
  152. package/build/legacy/layout/search/DynamicSearch.js +58 -0
  153. package/build/legacy/layout/search/SearchInput.js +17 -0
  154. package/build/legacy/layout/search/SearchResults.js +31 -0
  155. package/build/legacy/layout/search/useSearch.js +137 -0
  156. package/build/legacy/layout/utils/getNavigationOptionMedia.js +28 -0
  157. package/build/legacy/layout/utils/index.js +32 -0
  158. package/build/legacy/step/cameraStep/CameraStep.js +124 -0
  159. package/build/legacy/step/cameraStep/cameraCapture/CameraCapture.js +161 -0
  160. package/build/legacy/step/cameraStep/cameraCapture/CameraCapture.messages.js +58 -0
  161. package/build/legacy/step/cameraStep/cameraCapture/components/bottomBar/BottomBar.js +28 -0
  162. package/build/legacy/step/cameraStep/cameraCapture/components/index.js +3 -0
  163. package/build/legacy/step/cameraStep/cameraCapture/components/orientationLockOverlay/OrientationLockOverlay.js +19 -0
  164. package/build/legacy/step/cameraStep/cameraCapture/components/orientationLockOverlay/OrientationLockOverlay.messages.js +8 -0
  165. package/build/legacy/step/cameraStep/cameraCapture/hooks/useFullScreenOrientationLock.js +60 -0
  166. package/build/legacy/step/cameraStep/cameraCapture/hooks/useVideoConstraints.js +80 -0
  167. package/build/legacy/step/cameraStep/cameraCapture/index.js +1 -0
  168. package/build/legacy/step/cameraStep/cameraCapture/overlay/Overlay.js +77 -0
  169. package/build/legacy/step/cameraStep/cameraCapture/screens/cameraErrorScreen/CameraErrorScreen.js +18 -0
  170. package/build/legacy/step/cameraStep/cameraCapture/screens/index.js +1 -0
  171. package/build/legacy/step/cameraStep/cameraCapture/tracking/index.js +109 -0
  172. package/build/legacy/step/cameraStep/cameraCapture/types/index.js +7 -0
  173. package/build/legacy/step/cameraStep/cameraCapture/utils/index.js +107 -0
  174. package/build/legacy/step/cameraStep/index.js +1 -0
  175. package/build/legacy/step/externalConfirmationStep/ExternalConfirmationStep.js +64 -0
  176. package/build/legacy/step/externalConfirmationStep/index.js +1 -0
  177. package/build/legacy/step/index.js +3 -0
  178. package/build/legacy/step/layoutStep/LayoutStep.js +33 -0
  179. package/build/legacy/step/layoutStep/index.js +1 -0
  180. package/build/legacy/step/layoutStep/utils/index.js +2 -0
  181. package/build/legacy/step/layoutStep/utils/inline-reference-utils.js +105 -0
  182. package/build/legacy/step/layoutStep/utils/layout-utils.js +212 -0
  183. package/build/main.js +4775 -225
  184. package/build/main.min.js +1 -1
  185. package/build/main.mjs +4776 -226
  186. package/build/revamp/domain/components/AlertComponent.js +50 -0
  187. package/build/revamp/domain/components/AllOfComponent.js +72 -0
  188. package/build/revamp/domain/components/BooleanInputComponent.js +108 -0
  189. package/build/revamp/domain/components/BoxComponent.js +65 -0
  190. package/build/revamp/domain/components/ButtonComponent.js +50 -0
  191. package/build/revamp/domain/components/ColumnsComponent.js +74 -0
  192. package/build/revamp/domain/components/ConstComponent.js +50 -0
  193. package/build/revamp/domain/components/ContainerComponent.js +65 -0
  194. package/build/revamp/domain/components/DateInputComponent.js +127 -0
  195. package/build/revamp/domain/components/DecisionComponent.js +50 -0
  196. package/build/revamp/domain/components/DividerComponent.js +50 -0
  197. package/build/revamp/domain/components/FormComponent.js +65 -0
  198. package/build/revamp/domain/components/HeadingComponent.js +50 -0
  199. package/build/revamp/domain/components/ImageComponent.js +50 -0
  200. package/build/revamp/domain/components/InstructionsComponent.js +50 -0
  201. package/build/revamp/domain/components/IntegerInputComponent.js +125 -0
  202. package/build/revamp/domain/components/LoadingIndicatorComponent.js +50 -0
  203. package/build/revamp/domain/components/MarkdownComponent.js +50 -0
  204. package/build/revamp/domain/components/ModalComponent.js +65 -0
  205. package/build/revamp/domain/components/MultiUploadInputComponent.js +190 -0
  206. package/build/revamp/domain/components/NumberInputComponent.js +125 -0
  207. package/build/revamp/domain/components/ObjectComponent.js +104 -0
  208. package/build/revamp/domain/components/ParagraphComponent.js +50 -0
  209. package/build/revamp/domain/components/ReviewComponent.js +50 -0
  210. package/build/revamp/domain/components/SelectInputComponent.js +138 -0
  211. package/build/revamp/domain/components/StatusListComponent.js +50 -0
  212. package/build/revamp/domain/components/StepDomainComponent.js +93 -0
  213. package/build/revamp/domain/components/TextInputComponent.js +125 -0
  214. package/build/revamp/domain/components/UploadInputComponent.js +151 -0
  215. package/build/revamp/domain/components/repeatableComponent/RepeatableComponent.js +148 -0
  216. package/build/revamp/domain/components/searchComponent/SearchComponent.js +108 -0
  217. package/build/revamp/domain/components/utils/component-utils.js +18 -0
  218. package/build/revamp/domain/components/utils/debounce.js +38 -0
  219. package/build/revamp/domain/components/utils/file-utils.js +46 -0
  220. package/build/revamp/domain/components/utils/getComponentForLocalValueKey.js +31 -0
  221. package/build/revamp/domain/components/utils/isPartialLocalValueMatch.js +40 -0
  222. package/build/revamp/domain/features/events.js +1 -0
  223. package/build/revamp/domain/features/persistAsync/getComponentPersistAsync.js +133 -0
  224. package/build/revamp/domain/features/persistAsync/getPerformPersistAsync.js +103 -0
  225. package/build/revamp/domain/features/refresh/getPerformRefresh.js +53 -0
  226. package/build/revamp/domain/features/summary/summary-utils.js +39 -0
  227. package/build/revamp/domain/features/utils/http-utils.js +34 -0
  228. package/build/revamp/domain/features/utils/response-utils.js +9 -0
  229. package/build/revamp/domain/features/validation/validation-functions.js +12 -0
  230. package/build/revamp/domain/features/validation/value-checks.js +111 -0
  231. package/build/revamp/domain/features/validationAsync/getComponentValidationAsync.js +94 -0
  232. package/build/revamp/domain/features/validationAsync/getPerformValidationAsync.js +107 -0
  233. package/build/revamp/domain/mappers/types.js +1 -0
  234. package/build/revamp/domain/types.js +1 -0
  235. package/build/revamp/flow/response-utils.js +88 -0
  236. package/build/revamp/renderers/CoreContainerRenderer.js +8 -0
  237. package/build/revamp/renderers/LoadingContext.js +7 -0
  238. package/build/revamp/renderers/types.js +1 -0
  239. package/build/revamp/types.js +1 -0
  240. package/build/revamp/utils/component-utils.js +86 -0
  241. package/build/revamp/utils/type-utils.js +56 -0
  242. package/build/revamp/utils/type-validators.js +16 -0
  243. package/build/revamp/wise/renderers/AlertRenderer.js +11 -0
  244. package/build/revamp/wise/renderers/BooleanInputRenderer.js +34 -0
  245. package/build/revamp/wise/renderers/BoxRenderer.js +30 -0
  246. package/build/revamp/wise/renderers/ButtonRenderer.js +64 -0
  247. package/build/revamp/wise/renderers/ColumnsRenderer.js +25 -0
  248. package/build/revamp/wise/renderers/components/FieldInput.js +20 -0
  249. package/build/revamp/wise/renderers/components/Help.js +21 -0
  250. package/build/revamp/wise/renderers/components/LabelContentWithHelp.js +6 -0
  251. package/build/revamp/wise/renderers/utils/layout-utils.js +31 -0
  252. package/build/types/legacy/step/externalConfirmationStep/ExternalConfirmationStep.d.ts +1 -1
  253. package/build/types/revamp/domain/components/StepDomainComponent.d.ts +4 -2
  254. package/build/types/revamp/renderers/step/ExternalConfirmationDialog.d.ts +6 -0
  255. package/build/types/revamp/renderers/{StepRenderer.d.ts → step/StepRenderer.d.ts} +1 -1
  256. package/build/types/revamp/renderers/step/useExternal.d.ts +4 -0
  257. package/build/types/revamp/renderers/stepComponentToProps.d.ts +1 -1
  258. package/build/types/revamp/renderers/types.d.ts +3 -0
  259. package/package.json +13 -13
  260. /package/build/types/{legacy/step/externalConfirmationStep/ExternalConfirmationStep.messages.d.ts → common/messages/external-confirmation.messages.d.ts} +0 -0
@@ -0,0 +1,28 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ import { jsx as _jsx } from "react/jsx-runtime";
13
+ import { Avatar, AvatarType } from '@transferwise/components';
14
+ import DynamicIcon from '../icon/DynamicIcon';
15
+ export var getNavigationOptionMedia = function (_a) {
16
+ var icon = _a.icon, image = _a.image;
17
+ if (icon === null || icon === void 0 ? void 0 : icon.name) {
18
+ return (_jsx(Avatar, __assign({ type: AvatarType.ICON }, { children: _jsx(DynamicIcon, { type: icon.name }) })));
19
+ }
20
+ if (icon === null || icon === void 0 ? void 0 : icon.text) {
21
+ return _jsx(Avatar, __assign({ type: AvatarType.INITIALS }, { children: icon.text }));
22
+ }
23
+ if (image === null || image === void 0 ? void 0 : image.url) {
24
+ var url = image.url, text = image.text;
25
+ return _jsx("img", { src: url, alt: text });
26
+ }
27
+ return null;
28
+ };
@@ -0,0 +1,32 @@
1
+ export { getNavigationOptionMedia } from './getNavigationOptionMedia';
2
+ var getMargin = function (size) {
3
+ switch (size) {
4
+ case 'xs':
5
+ return 'm-b-0';
6
+ case 'sm':
7
+ return 'm-b-1';
8
+ case 'md':
9
+ return 'm-b-2';
10
+ case 'lg':
11
+ return 'm-b-3';
12
+ case 'xl':
13
+ return 'm-b-5';
14
+ default:
15
+ return '';
16
+ }
17
+ };
18
+ var getTextAlignment = function (align) {
19
+ switch (align) {
20
+ case 'right':
21
+ return 'text-xs-right';
22
+ case 'center':
23
+ return 'text-xs-center';
24
+ case 'left':
25
+ default:
26
+ return '';
27
+ }
28
+ };
29
+ var getTextAlignmentAndMargin = function (component) {
30
+ return "".concat(getTextAlignment(component.align), " ").concat(getMargin(component.margin));
31
+ };
32
+ export { getMargin, getTextAlignmentAndMargin };
@@ -0,0 +1,124 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ import { jsx as _jsx } from "react/jsx-runtime";
38
+ import { useEffect, useState } from 'react';
39
+ import { useEventDispatcher } from '../../common/contexts';
40
+ import { filterHiddenSchemas, isObjectSchema } from '../../common/utils';
41
+ import CameraCapture from './cameraCapture';
42
+ function blobToBase64(blob) {
43
+ return new Promise(function (resolve, _) {
44
+ // we can safely assume the type of reader.result is string
45
+ // because we're calling reader.readAsDataURL
46
+ // https://developer.mozilla.org/en-US/docs/Web/API/FileReader/result
47
+ var reader = new FileReader();
48
+ reader.onloadend = function () { return resolve(reader.result); };
49
+ reader.readAsDataURL(blob);
50
+ });
51
+ }
52
+ function CameraStep(props) {
53
+ var _this = this;
54
+ var step = props.step, model = props.model, onModelChange = props.onModelChange, onAction = props.onAction;
55
+ var onEvent = useEventDispatcher();
56
+ var objectSchema = getObjectSchema(step);
57
+ var cameraSchema = getCameraSchema(step);
58
+ var action = getFirstAction(step);
59
+ var title = cameraSchema.title, image = cameraSchema.image, cameraConfig = cameraSchema.cameraConfig;
60
+ var _a = cameraConfig || {}, assets = _a.assets, direction = _a.direction, instructions = _a.instructions;
61
+ var _b = assets || {}, overlay = _b.overlay, outline = _b.outline;
62
+ var imageUrl = (image || {}).url;
63
+ var _c = useState(false), captureClicked = _c[0], setCaptureClicked = _c[1];
64
+ // We need to wait for model to update before we call onAction()
65
+ useEffect(function () {
66
+ if (captureClicked) {
67
+ onAction(action);
68
+ }
69
+ }, [model]);
70
+ var handleCapture = function (blob) { return __awaiter(_this, void 0, void 0, function () {
71
+ var $id, newValue, newModel;
72
+ var _a;
73
+ return __generator(this, function (_b) {
74
+ switch (_b.label) {
75
+ case 0:
76
+ $id = cameraSchema.$id;
77
+ if (!blob) return [3 /*break*/, 2];
78
+ return [4 /*yield*/, blobToBase64(blob)];
79
+ case 1:
80
+ newValue = _b.sent();
81
+ newModel = (_a = {}, _a[$id || ''] = newValue, _a);
82
+ setCaptureClicked(true);
83
+ onModelChange({
84
+ model: newModel,
85
+ formSchema: objectSchema,
86
+ triggerModel: newValue,
87
+ triggerSchema: cameraSchema
88
+ });
89
+ _b.label = 2;
90
+ case 2: return [2 /*return*/];
91
+ }
92
+ });
93
+ }); };
94
+ return (_jsx(CameraCapture, { overlay: overlay, outline: outline, title: title, imageUrl: imageUrl, instructions: instructions, direction: direction, onEvent: onEvent, onCapture: function (blob) {
95
+ void handleCapture(blob);
96
+ } }));
97
+ }
98
+ export default CameraStep;
99
+ function getObjectSchema(step) {
100
+ var nonHiddenSchemas = filterHiddenSchemas(step.schemas || []);
101
+ var objectSchema = nonHiddenSchemas[0];
102
+ if (!objectSchema || !isObjectSchema(objectSchema)) {
103
+ throw new Error('The first schema in a camera step is expected to be of type object and have at least one property with a schema...');
104
+ }
105
+ return objectSchema;
106
+ }
107
+ function getCameraSchema(step) {
108
+ var objectSchema = getObjectSchema(step);
109
+ var firstProperty = Object.values(objectSchema.properties)[0];
110
+ if (!firstProperty) {
111
+ throw new Error('The first schema in a camera step is expected to be of type object and have at least one property with a schema...');
112
+ }
113
+ return firstProperty;
114
+ }
115
+ function getFirstAction(step) {
116
+ var _a, _b;
117
+ if (!step.schemas || ((_a = filterHiddenSchemas(step.schemas)) === null || _a === void 0 ? void 0 : _a.length) !== 1) {
118
+ throw new Error('camera step expects 1 non-hidden object schema');
119
+ }
120
+ if (((_b = step === null || step === void 0 ? void 0 : step.actions) === null || _b === void 0 ? void 0 : _b.length) !== 1) {
121
+ throw new Error('camera step expects 1 action');
122
+ }
123
+ return step.actions[0];
124
+ }
@@ -0,0 +1,161 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
49
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
50
+ import { useIntl } from 'react-intl';
51
+ import Webcam from 'react-webcam';
52
+ import { isMobile } from '../../../common/utils/mobile-utils';
53
+ import messages from './CameraCapture.messages';
54
+ import { CaptureBottomBar, ReviewBottomBar, OrientationLockOverlay } from './components';
55
+ import { CameraErrorScreen } from './screens';
56
+ import { useFullScreenOrientationLock } from './hooks/useFullScreenOrientationLock';
57
+ import { useVideoConstraints } from './hooks/useVideoConstraints';
58
+ import Overlay from './overlay/Overlay';
59
+ import { trackCameraFeedStarted, trackCameraError } from './tracking';
60
+ import { CameraMode } from './types';
61
+ import { generateCanvasFromVideo, isSelfieCamera } from './utils';
62
+ function CameraCapture(_a) {
63
+ var _this = this;
64
+ var _b = _a.direction, direction = _b === void 0 ? 'back' : _b, _c = _a.overlay, overlay = _c === void 0 ? '' : _c, _d = _a.outline, outline = _d === void 0 ? '' : _d, _e = _a.imageUrl, imageUrl = _e === void 0 ? '' : _e, _f = _a.title, title = _f === void 0 ? '' : _f, _g = _a.instructions, instructions = _g === void 0 ? '' : _g, _h = _a.showReview, showReview = _h === void 0 ? false : _h, onCapture = _a.onCapture, onEvent = _a.onEvent;
65
+ var _j = useState(CameraMode.CAPTURE), mode = _j[0], setMode = _j[1];
66
+ var _k = useState(), cameraError = _k[0], setCameraError = _k[1];
67
+ var _l = useState(false), isVideoMirrored = _l[0], setIsVideoMirrored = _l[1];
68
+ var _m = useState(false), ready = _m[0], setReady = _m[1];
69
+ var _o = useState(), reviewImage = _o[0], setReviewImage = _o[1];
70
+ var webcamReference = useRef(null);
71
+ var videoConstraints = useVideoConstraints(direction).videoConstraints;
72
+ var shouldLockOrientation = useMemo(function () { return !!(isMobile() && mode === CameraMode.CAPTURE); }, [mode]);
73
+ var _p = useFullScreenOrientationLock(shouldLockOrientation, onEvent), enterFullScreen = _p.enterFullScreen, exitFullScreen = _p.exitFullScreen;
74
+ var intl = useIntl();
75
+ var handleCapture = useCallback(function () { return __awaiter(_this, void 0, void 0, function () {
76
+ var canvas;
77
+ var _a, _b, _c, _d, _e, _f;
78
+ return __generator(this, function (_g) {
79
+ switch (_g.label) {
80
+ case 0:
81
+ if (!(((_a = webcamReference === null || webcamReference === void 0 ? void 0 : webcamReference.current) === null || _a === void 0 ? void 0 : _a.video) && ((_c = (_b = webcamReference === null || webcamReference === void 0 ? void 0 : webcamReference.current) === null || _b === void 0 ? void 0 : _b.video) === null || _c === void 0 ? void 0 : _c.readyState) >= 3)) return [3 /*break*/, 2];
82
+ (_e = (_d = webcamReference === null || webcamReference === void 0 ? void 0 : webcamReference.current) === null || _d === void 0 ? void 0 : _d.video) === null || _e === void 0 ? void 0 : _e.pause();
83
+ return [4 /*yield*/, generateCanvasFromVideo((_f = webcamReference === null || webcamReference === void 0 ? void 0 : webcamReference.current) === null || _f === void 0 ? void 0 : _f.video)];
84
+ case 1:
85
+ canvas = _g.sent();
86
+ canvas === null || canvas === void 0 ? void 0 : canvas.toBlob(function (blob) {
87
+ if (blob) {
88
+ if (showReview) {
89
+ var source = window.URL.createObjectURL(blob);
90
+ setReviewImage({ source: source, blob: blob });
91
+ setMode(CameraMode.REVIEW);
92
+ }
93
+ else {
94
+ onCapture(blob);
95
+ }
96
+ }
97
+ }, 'image/jpeg', 0.92);
98
+ _g.label = 2;
99
+ case 2: return [2 /*return*/];
100
+ }
101
+ });
102
+ }); }, [webcamReference, showReview, setReviewImage, setMode, onCapture, isVideoMirrored]);
103
+ var handleUserMediaError = useCallback(function (error) {
104
+ setMode(CameraMode.ERROR);
105
+ if (error instanceof DOMException) {
106
+ switch (error === null || error === void 0 ? void 0 : error.name) {
107
+ case 'NotAllowedError':
108
+ setCameraError({
109
+ title: intl.formatMessage(messages.noCameraAccessTitle),
110
+ description: intl.formatMessage(messages.noCameraAccessParagraph),
111
+ actionButton: intl.formatMessage(messages.noCameraAccessAction),
112
+ onAction: handleRetryCameraAccess
113
+ });
114
+ trackCameraError('Dynamic Flow - Camera Permission Denied', onEvent, error);
115
+ return;
116
+ case 'NotFoundError':
117
+ case 'OverconstrainedError':
118
+ case 'AbortError':
119
+ case 'NotReadableError':
120
+ setCameraError({
121
+ title: intl.formatMessage(messages.cameraConnectionIssueTitle),
122
+ description: intl.formatMessage(messages.cameraConnectionIssueParagraph),
123
+ actionButton: intl.formatMessage(messages.cameraConnectionIssueAction),
124
+ onAction: handleRetryCameraAccess
125
+ });
126
+ trackCameraError('Dynamic Flow - Camera Not Accessible', onEvent, error);
127
+ return;
128
+ }
129
+ }
130
+ setCameraError({
131
+ title: intl.formatMessage(messages.cameraNotSupportedTitle),
132
+ description: intl.formatMessage(messages.cameraNotSupportedParagraph)
133
+ });
134
+ trackCameraError('Dynamic Flow - Camera Not Supported', onEvent, error);
135
+ }, [intl, onEvent]);
136
+ var handleUserMedia = useCallback(function (stream) {
137
+ enterFullScreen();
138
+ setReady(true);
139
+ setIsVideoMirrored(isSelfieCamera(stream));
140
+ void trackCameraFeedStarted(onEvent, { direction: direction }, stream);
141
+ }, [setIsVideoMirrored, onEvent, direction, enterFullScreen]);
142
+ var handleReviewSubmit = function () {
143
+ onCapture((reviewImage === null || reviewImage === void 0 ? void 0 : reviewImage.blob) || null);
144
+ };
145
+ var handleReviewRetry = function () {
146
+ setMode(CameraMode.CAPTURE);
147
+ setReviewImage(undefined);
148
+ };
149
+ var handleRetryCameraAccess = function () { return setMode(CameraMode.CAPTURE); };
150
+ useEffect(function () {
151
+ if (mode !== CameraMode.CAPTURE) {
152
+ exitFullScreen();
153
+ }
154
+ }, [mode, exitFullScreen]);
155
+ var captureScreen = (_jsxs("div", __assign({ className: "camera-capture" }, { children: [videoConstraints && (_jsx(Webcam, { ref: webcamReference, audio: false, videoConstraints: videoConstraints, mirrored: isVideoMirrored, onUserMediaError: handleUserMediaError, onUserMedia: handleUserMedia })), _jsx(Overlay, { overlay: overlay, outline: outline, imageUrl: imageUrl, title: title, instructions: instructions }), shouldLockOrientation && _jsx(OrientationLockOverlay, {}), ready && (_jsx(CaptureBottomBar, { onCapture: function () {
156
+ void handleCapture();
157
+ } }))] })));
158
+ var reviewScreen = (_jsxs("div", __assign({ className: "camera-capture" }, { children: [_jsx("img", { className: "review-image", src: reviewImage === null || reviewImage === void 0 ? void 0 : reviewImage.source, alt: "" }), _jsx(Overlay, { overlay: overlay, imageUrl: imageUrl, title: title, instructions: instructions, reviewInstructions: intl.formatMessage(messages.reviewInstructions) }), _jsx(ReviewBottomBar, { onSubmit: handleReviewSubmit, onRetry: handleReviewRetry })] })));
159
+ return (_jsxs("section", { children: [mode === CameraMode.CAPTURE && captureScreen, mode === CameraMode.REVIEW && reviewScreen, mode === CameraMode.ERROR && cameraError && _jsx(CameraErrorScreen, __assign({}, cameraError))] }));
160
+ }
161
+ export default CameraCapture;
@@ -0,0 +1,58 @@
1
+ import { defineMessages } from 'react-intl';
2
+ export default defineMessages({
3
+ reviewSubmit: {
4
+ id: 'dynamicFlows.CameraCapture.reviewSubmit',
5
+ defaultMessage: 'Yes, submit',
6
+ description: 'Accept and submit the image taken with the camera'
7
+ },
8
+ reviewRetry: {
9
+ id: 'dynamicFlows.CameraCapture.reviewRetry',
10
+ defaultMessage: 'No, try again',
11
+ description: "Image taken with camera is not good, don't submit, and retake the image"
12
+ },
13
+ reviewInstructions: {
14
+ id: 'dynamicFlows.CameraCapture.reviewInstructions',
15
+ defaultMessage: 'Is your picture clear, readable and complete?',
16
+ description: 'After taking an image with the camera, prompt user to review the image'
17
+ },
18
+ cameraNotSupportedTitle: {
19
+ id: 'dynamicFlows.CameraCapture.CameraNotSupported.title',
20
+ defaultMessage: 'Camera not supported',
21
+ description: 'Title of standalone page prompting that camera is not available on users browser'
22
+ },
23
+ cameraNotSupportedParagraph: {
24
+ id: 'dynamicFlows.CameraCapture.CameraNotSupported.paragraph',
25
+ defaultMessage: "The browser you're using doesn't have support for a camera. Try a different browser, device, or download our mobile app.",
26
+ description: "Further text of standalone page prompting that camera is not available on user's browser"
27
+ },
28
+ noCameraAccessTitle: {
29
+ id: 'dynamicFlows.CameraCapture.NoCameraAccess.title',
30
+ defaultMessage: "We can't access your camera",
31
+ description: 'Title of standalone page prompting missing camera permissions'
32
+ },
33
+ noCameraAccessParagraph: {
34
+ id: 'dynamicFlows.CameraCapture.NoCameraAccess.paragraph',
35
+ defaultMessage: "Enable camera access in your browser's settings to get going again.",
36
+ description: 'Further text of standalone page prompting missing camera permissions'
37
+ },
38
+ noCameraAccessAction: {
39
+ id: 'dynamicFlows.CameraCapture.NoCameraAccess.action',
40
+ defaultMessage: 'Enable camera access',
41
+ description: 'Action to ask for camera permissions again'
42
+ },
43
+ cameraConnectionIssueTitle: {
44
+ id: 'dynamicFlows.CameraCapture.CameraConnectionIssue.title',
45
+ defaultMessage: "We can't access your camera",
46
+ description: 'Title of standalone page prompting that there was an issue connecting to a camera'
47
+ },
48
+ cameraConnectionIssueParagraph: {
49
+ id: 'dynamicFlows.CameraCapture.CameraConnectionIssue.paragraph',
50
+ defaultMessage: "Please check if it is connected and try again.",
51
+ description: 'Further text of standalone page prompting that there was an issue connecting to a camera'
52
+ },
53
+ cameraConnectionIssueAction: {
54
+ id: 'dynamicFlows.CameraCapture.CameraConnectionIssue.action',
55
+ defaultMessage: 'Try again',
56
+ description: 'Action to try using camera again'
57
+ }
58
+ });
@@ -0,0 +1,28 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
+ import { Button, ControlType, Priority, Size } from '@transferwise/components';
14
+ import { useIntl } from 'react-intl';
15
+ import messages from '../../CameraCapture.messages';
16
+ export var CaptureBottomBar = function (_a) {
17
+ var onCapture = _a.onCapture;
18
+ return (_jsx("div", __assign({ className: "bottom-bar" }, { children: _jsx(CaptureButton, { onClick: onCapture }) })));
19
+ };
20
+ export var ReviewBottomBar = function (_a) {
21
+ var onSubmit = _a.onSubmit, onRetry = _a.onRetry;
22
+ var intl = useIntl();
23
+ return (_jsx("div", __assign({ className: "bottom-bar p-x-2" }, { children: _jsx("div", __assign({ className: "row" }, { children: _jsxs("div", __assign({ className: "col-xs-12 col-md-6 col-md-offset-3" }, { children: [_jsx(Button, __assign({ className: "m-b-1", block: true, size: Size.MEDIUM, type: ControlType.ACCENT, onClick: onSubmit }, { children: intl.formatMessage(messages.reviewSubmit) })), _jsx(Button, __assign({ className: "m-b-2", block: true, size: Size.MEDIUM, type: ControlType.ACCENT, priority: Priority.SECONDARY, onClick: onRetry }, { children: intl.formatMessage(messages.reviewRetry) }))] })) })) })));
24
+ };
25
+ var CaptureButton = function (_a) {
26
+ var onClick = _a.onClick;
27
+ return (_jsx("button", __assign({ type: "button", className: "camera-capture-btn m-b-2", "data-testid": "camera-capture-button", onClick: onClick }, { children: _jsx("span", { className: "camera-capture-btn-inner" }) })));
28
+ };
@@ -0,0 +1,3 @@
1
+ export { CaptureBottomBar } from './bottomBar/BottomBar';
2
+ export { ReviewBottomBar } from './bottomBar/BottomBar';
3
+ export { default as OrientationLockOverlay } from './orientationLockOverlay/OrientationLockOverlay';
@@ -0,0 +1,19 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
+ import { useIntl } from 'react-intl';
14
+ import messages from './OrientationLockOverlay.messages';
15
+ function OrientationLockOverlay() {
16
+ var intl = useIntl();
17
+ return (_jsxs("div", __assign({ className: "orientation-lock-overlay" }, { children: [_jsx("img", { className: "m-b-3", src: "https://wise.com/public-resources/assets/camera-guidelines/icon-rotate-phone.svg", width: "96", height: "96", alt: "" }), _jsx("p", __assign({ className: "text-center m-b-0" }, { children: intl.formatMessage(messages.text) }))] })));
18
+ }
19
+ export default OrientationLockOverlay;
@@ -0,0 +1,8 @@
1
+ import { defineMessages } from 'react-intl';
2
+ export default defineMessages({
3
+ text: {
4
+ id: 'dynamicFlows.CameraCapture.rotatePhone.text',
5
+ defaultMessage: 'Rotate your phone to portrait view to take a photo',
6
+ description: 'Prompt the user to rotate their phone from landscape to portrait mode when attempting to take a photo'
7
+ }
8
+ });
@@ -0,0 +1,60 @@
1
+ import { useCallback, useEffect } from 'react';
2
+ import screenfull from 'screenfull';
3
+ import { trackCameraOrientationLandscape, trackCameraOrientationLocked } from '../tracking';
4
+ export var useFullScreenOrientationLock = function (shouldLockOrientation, onEvent) {
5
+ var lockOrientation = useCallback(function () {
6
+ if (window.screen.orientation &&
7
+ 'lock' in window.screen.orientation &&
8
+ typeof window.screen.orientation.lock === 'function') {
9
+ window.screen.orientation
10
+ .lock('portrait')
11
+ .then(function () { return trackCameraOrientationLocked(onEvent); })["catch"](noop);
12
+ }
13
+ }, [onEvent]);
14
+ var unlockOrientation = useCallback(function () { var _a, _b, _c; return (_c = (_b = (_a = window === null || window === void 0 ? void 0 : window.screen) === null || _a === void 0 ? void 0 : _a.orientation) === null || _b === void 0 ? void 0 : _b.unlock) === null || _c === void 0 ? void 0 : _c.call(_b); }, []);
15
+ var enterFullScreen = useCallback(function () {
16
+ setTimeout(function () {
17
+ if (shouldLockOrientation && !screenfull.isFullscreen && screenfull.isEnabled) {
18
+ screenfull
19
+ .request(document.documentElement, { navigationUI: 'show' })
20
+ .then(function () {
21
+ lockOrientation();
22
+ })["catch"](noop);
23
+ }
24
+ }, 100);
25
+ }, [shouldLockOrientation, lockOrientation]);
26
+ var exitFullScreen = useCallback(function () {
27
+ if (screenfull.isFullscreen) {
28
+ screenfull.exit()["catch"](noop);
29
+ }
30
+ unlockOrientation();
31
+ }, [unlockOrientation]);
32
+ var handleOrientationChange = useCallback(function (event) {
33
+ var _a, _b;
34
+ if ((_a = event === null || event === void 0 ? void 0 : event.target) === null || _a === void 0 ? void 0 : _a.type.includes('landscape')) {
35
+ if ((_b = window.screen) === null || _b === void 0 ? void 0 : _b.orientation) {
36
+ trackCameraOrientationLandscape(onEvent);
37
+ }
38
+ }
39
+ }, [onEvent]);
40
+ useEffect(function () {
41
+ var _a, _b;
42
+ if (shouldLockOrientation) {
43
+ (_b = (_a = window.screen) === null || _a === void 0 ? void 0 : _a.orientation) === null || _b === void 0 ? void 0 : _b.addEventListener('change', function (event) {
44
+ return handleOrientationChange(event);
45
+ });
46
+ }
47
+ return function () {
48
+ var _a, _b;
49
+ (_b = (_a = window.screen) === null || _a === void 0 ? void 0 : _a.orientation) === null || _b === void 0 ? void 0 : _b.removeEventListener('change', handleOrientationChange);
50
+ exitFullScreen();
51
+ };
52
+ }, [exitFullScreen, handleOrientationChange, shouldLockOrientation]);
53
+ return {
54
+ enterFullScreen: enterFullScreen,
55
+ exitFullScreen: exitFullScreen
56
+ };
57
+ };
58
+ var noop = function () {
59
+ // no-op
60
+ };
@@ -0,0 +1,80 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ import { useEffect, useState } from 'react';
49
+ import { getAvailableVideoDevices, isMainBackCamera } from '../utils';
50
+ export var useVideoConstraints = function (direction) {
51
+ var _a = useState(), videoConstraints = _a[0], setVideoConstraints = _a[1];
52
+ var defaultVideoConstraints = {
53
+ facingMode: direction === 'front' ? 'user' : 'environment',
54
+ height: { min: 480, max: 1080, ideal: 720 },
55
+ width: { min: 640, max: 1920, ideal: 1280 },
56
+ frameRate: 30,
57
+ aspectRatio: 16 / 9
58
+ };
59
+ useEffect(function () {
60
+ void getVideoConstraints(direction).then(setVideoConstraints);
61
+ }, [direction]);
62
+ var getVideoConstraints = function (direction) { return __awaiter(void 0, void 0, void 0, function () {
63
+ var mainCamera;
64
+ return __generator(this, function (_a) {
65
+ switch (_a.label) {
66
+ case 0:
67
+ if (!(direction === 'back')) return [3 /*break*/, 2];
68
+ return [4 /*yield*/, getAvailableVideoDevices()];
69
+ case 1:
70
+ mainCamera = (_a.sent()).find(isMainBackCamera);
71
+ if (mainCamera === null || mainCamera === void 0 ? void 0 : mainCamera.deviceId) {
72
+ return [2 /*return*/, __assign(__assign({}, defaultVideoConstraints), { deviceId: { exact: mainCamera.deviceId } })];
73
+ }
74
+ _a.label = 2;
75
+ case 2: return [2 /*return*/, defaultVideoConstraints];
76
+ }
77
+ });
78
+ }); };
79
+ return { videoConstraints: videoConstraints };
80
+ };
@@ -0,0 +1 @@
1
+ export { default } from './CameraCapture';