@smileid/usesmileid 12.0.0-beta01 → 12.0.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 (403) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +701 -89
  3. package/dist/camera/camera_defaults.d.ts +14 -9
  4. package/dist/camera/camera_defaults.d.ts.map +1 -1
  5. package/dist/camera/camera_defaults.js +11 -9
  6. package/dist/camera/camera_defaults.js.map +1 -1
  7. package/dist/camera/orientation_degrees.d.ts +5 -6
  8. package/dist/camera/orientation_degrees.d.ts.map +1 -1
  9. package/dist/camera/orientation_degrees.js +5 -6
  10. package/dist/camera/orientation_degrees.js.map +1 -1
  11. package/dist/core/models/document_capture_mode.d.ts +8 -0
  12. package/dist/core/models/document_capture_mode.d.ts.map +1 -1
  13. package/dist/core/models/document_capture_mode.js +24 -0
  14. package/dist/core/models/document_capture_mode.js.map +1 -1
  15. package/dist/core/models/document_type.d.ts +2 -2
  16. package/dist/core/models/document_type.d.ts.map +1 -1
  17. package/dist/core/models/document_type.js +6 -4
  18. package/dist/core/models/document_type.js.map +1 -1
  19. package/dist/core/models/result.d.ts +9 -8
  20. package/dist/core/models/result.d.ts.map +1 -1
  21. package/dist/core/models/result.js +5 -6
  22. package/dist/core/models/result.js.map +1 -1
  23. package/dist/data/api/interceptors/smile_auth_interceptor.js +1 -1
  24. package/dist/data/api/interceptors/smile_auth_interceptor.js.map +1 -1
  25. package/dist/data/api/interceptors/smile_integrity_interceptor.d.ts +11 -0
  26. package/dist/data/api/interceptors/smile_integrity_interceptor.d.ts.map +1 -1
  27. package/dist/data/api/interceptors/smile_integrity_interceptor.js +13 -0
  28. package/dist/data/api/interceptors/smile_integrity_interceptor.js.map +1 -1
  29. package/dist/data/api/interceptors/smile_request_mac_interceptor.d.ts +8 -0
  30. package/dist/data/api/interceptors/smile_request_mac_interceptor.d.ts.map +1 -1
  31. package/dist/data/api/interceptors/smile_request_mac_interceptor.js +11 -0
  32. package/dist/data/api/interceptors/smile_request_mac_interceptor.js.map +1 -1
  33. package/dist/data/compression/compressible_asset.d.ts +41 -0
  34. package/dist/data/compression/compressible_asset.d.ts.map +1 -0
  35. package/dist/data/compression/compressible_asset.js +34 -0
  36. package/dist/data/compression/compressible_asset.js.map +1 -0
  37. package/dist/data/compression/payload_compression_config.d.ts +36 -0
  38. package/dist/data/compression/payload_compression_config.d.ts.map +1 -0
  39. package/dist/data/compression/payload_compression_config.js +52 -0
  40. package/dist/data/compression/payload_compression_config.js.map +1 -0
  41. package/dist/data/compression/payload_compression_runner.d.ts +29 -0
  42. package/dist/data/compression/payload_compression_runner.d.ts.map +1 -0
  43. package/dist/data/compression/payload_compression_runner.js +55 -0
  44. package/dist/data/compression/payload_compression_runner.js.map +1 -0
  45. package/dist/data/compression/payload_compressor.d.ts +40 -0
  46. package/dist/data/compression/payload_compressor.d.ts.map +1 -0
  47. package/dist/data/compression/payload_compressor.js +126 -0
  48. package/dist/data/compression/payload_compressor.js.map +1 -0
  49. package/dist/data/compression/uri_compressible_asset.d.ts +23 -0
  50. package/dist/data/compression/uri_compressible_asset.d.ts.map +1 -0
  51. package/dist/data/compression/uri_compressible_asset.js +77 -0
  52. package/dist/data/compression/uri_compressible_asset.js.map +1 -0
  53. package/dist/data/dsl/builder/cache_config_builder.d.ts +2 -1
  54. package/dist/data/dsl/builder/cache_config_builder.d.ts.map +1 -1
  55. package/dist/data/dsl/builder/cache_config_builder.js +2 -1
  56. package/dist/data/dsl/builder/cache_config_builder.js.map +1 -1
  57. package/dist/data/dsl/builder/config_builder.d.ts +40 -14
  58. package/dist/data/dsl/builder/config_builder.d.ts.map +1 -1
  59. package/dist/data/dsl/builder/config_builder.js +40 -14
  60. package/dist/data/dsl/builder/config_builder.js.map +1 -1
  61. package/dist/data/dsl/builder/interceptor_config_builder.d.ts +9 -7
  62. package/dist/data/dsl/builder/interceptor_config_builder.d.ts.map +1 -1
  63. package/dist/data/dsl/builder/interceptor_config_builder.js +9 -7
  64. package/dist/data/dsl/builder/interceptor_config_builder.js.map +1 -1
  65. package/dist/data/dsl/builder/retry_config_builder.d.ts +16 -1
  66. package/dist/data/dsl/builder/retry_config_builder.d.ts.map +1 -1
  67. package/dist/data/dsl/builder/retry_config_builder.js +16 -1
  68. package/dist/data/dsl/builder/retry_config_builder.js.map +1 -1
  69. package/dist/data/dsl/builder/timeout_config_builder.d.ts +4 -0
  70. package/dist/data/dsl/builder/timeout_config_builder.d.ts.map +1 -1
  71. package/dist/data/dsl/builder/timeout_config_builder.js +4 -0
  72. package/dist/data/dsl/builder/timeout_config_builder.js.map +1 -1
  73. package/dist/data/dsl/use_smile_id_network_builder.d.ts +17 -0
  74. package/dist/data/dsl/use_smile_id_network_builder.d.ts.map +1 -1
  75. package/dist/data/dsl/use_smile_id_network_builder.js +17 -0
  76. package/dist/data/dsl/use_smile_id_network_builder.js.map +1 -1
  77. package/dist/data/factory/networking_factory.d.ts.map +1 -1
  78. package/dist/data/factory/networking_factory.js +11 -1
  79. package/dist/data/factory/networking_factory.js.map +1 -1
  80. package/dist/data/repository/use_smile_id_repository_impl.d.ts +6 -0
  81. package/dist/data/repository/use_smile_id_repository_impl.d.ts.map +1 -1
  82. package/dist/data/repository/use_smile_id_repository_impl.js +82 -8
  83. package/dist/data/repository/use_smile_id_repository_impl.js.map +1 -1
  84. package/dist/data/security/request_canonicalizer.d.ts.map +1 -1
  85. package/dist/data/security/request_canonicalizer.js +14 -2
  86. package/dist/data/security/request_canonicalizer.js.map +1 -1
  87. package/dist/data/security/security_policy.d.ts +43 -0
  88. package/dist/data/security/security_policy.d.ts.map +1 -0
  89. package/dist/data/security/security_policy.js +61 -0
  90. package/dist/data/security/security_policy.js.map +1 -0
  91. package/dist/data/util/retry_util.d.ts +1 -1
  92. package/dist/data/util/retry_util.d.ts.map +1 -1
  93. package/dist/data/util/retry_util.js +2 -1
  94. package/dist/data/util/retry_util.js.map +1 -1
  95. package/dist/data/util/use_smile_id_token_decoder.d.ts +22 -0
  96. package/dist/data/util/use_smile_id_token_decoder.d.ts.map +1 -1
  97. package/dist/data/util/use_smile_id_token_decoder.js +58 -24
  98. package/dist/data/util/use_smile_id_token_decoder.js.map +1 -1
  99. package/dist/l10n/strings_en.d.ts +2 -1
  100. package/dist/l10n/strings_en.d.ts.map +1 -1
  101. package/dist/l10n/strings_en.js +2 -1
  102. package/dist/l10n/strings_en.js.map +1 -1
  103. package/dist/l10n/use_smile_id_localizations.d.ts +1 -0
  104. package/dist/l10n/use_smile_id_localizations.d.ts.map +1 -1
  105. package/dist/l10n/use_smile_id_localizations.js +3 -0
  106. package/dist/l10n/use_smile_id_localizations.js.map +1 -1
  107. package/dist/metadata/builder_configuration.d.ts +39 -0
  108. package/dist/metadata/builder_configuration.d.ts.map +1 -0
  109. package/dist/metadata/builder_configuration.js +34 -0
  110. package/dist/metadata/builder_configuration.js.map +1 -0
  111. package/dist/metadata/captured_image_properties.d.ts +11 -0
  112. package/dist/metadata/captured_image_properties.d.ts.map +1 -0
  113. package/dist/metadata/captured_image_properties.js +11 -0
  114. package/dist/metadata/captured_image_properties.js.map +1 -0
  115. package/dist/metadata/device_orientation_collector.d.ts +17 -0
  116. package/dist/metadata/device_orientation_collector.d.ts.map +1 -0
  117. package/dist/metadata/device_orientation_collector.js +66 -0
  118. package/dist/metadata/device_orientation_collector.js.map +1 -0
  119. package/dist/metadata/geolocation.d.ts +20 -0
  120. package/dist/metadata/geolocation.d.ts.map +1 -0
  121. package/dist/metadata/geolocation.js +40 -0
  122. package/dist/metadata/geolocation.js.map +1 -0
  123. package/dist/metadata/metadata_configuration_mappers.d.ts +48 -0
  124. package/dist/metadata/metadata_configuration_mappers.d.ts.map +1 -0
  125. package/dist/metadata/metadata_configuration_mappers.js +171 -0
  126. package/dist/metadata/metadata_configuration_mappers.js.map +1 -0
  127. package/dist/metadata/model_configuration.d.ts +41 -0
  128. package/dist/metadata/model_configuration.d.ts.map +1 -0
  129. package/dist/metadata/model_configuration.js +44 -0
  130. package/dist/metadata/model_configuration.js.map +1 -0
  131. package/dist/metadata/optional_native_modules.d.ts +79 -3
  132. package/dist/metadata/optional_native_modules.d.ts.map +1 -1
  133. package/dist/metadata/optional_native_modules.js +108 -3
  134. package/dist/metadata/optional_native_modules.js.map +1 -1
  135. package/dist/metadata/use_smile_id_metadata.d.ts +45 -7
  136. package/dist/metadata/use_smile_id_metadata.d.ts.map +1 -1
  137. package/dist/metadata/use_smile_id_metadata.js +85 -13
  138. package/dist/metadata/use_smile_id_metadata.js.map +1 -1
  139. package/dist/metadata/use_smile_id_metadata_factory.d.ts +37 -0
  140. package/dist/metadata/use_smile_id_metadata_factory.d.ts.map +1 -1
  141. package/dist/metadata/use_smile_id_metadata_factory.js +184 -12
  142. package/dist/metadata/use_smile_id_metadata_factory.js.map +1 -1
  143. package/dist/presentation/assets/svg/document_shimmer_strings.d.ts +14 -0
  144. package/dist/presentation/assets/svg/document_shimmer_strings.d.ts.map +1 -0
  145. package/dist/presentation/assets/svg/document_shimmer_strings.js +14 -0
  146. package/dist/presentation/assets/svg/document_shimmer_strings.js.map +1 -0
  147. package/dist/presentation/assets/svg/instruction_svg_strings.d.ts +12 -4
  148. package/dist/presentation/assets/svg/instruction_svg_strings.d.ts.map +1 -1
  149. package/dist/presentation/assets/svg/instruction_svg_strings.js +19 -8
  150. package/dist/presentation/assets/svg/instruction_svg_strings.js.map +1 -1
  151. package/dist/presentation/components/helpers/enhanced_smart_selfie_animation_frames.d.ts +0 -5
  152. package/dist/presentation/components/helpers/enhanced_smart_selfie_animation_frames.d.ts.map +1 -1
  153. package/dist/presentation/components/helpers/enhanced_smart_selfie_animation_frames.js +0 -5
  154. package/dist/presentation/components/helpers/enhanced_smart_selfie_animation_frames.js.map +1 -1
  155. package/dist/presentation/components/icons/index.d.ts +24 -8
  156. package/dist/presentation/components/icons/index.d.ts.map +1 -1
  157. package/dist/presentation/components/icons/index.js +31 -11
  158. package/dist/presentation/components/icons/index.js.map +1 -1
  159. package/dist/presentation/components/use_smile_id_attribution.d.ts +1 -1
  160. package/dist/presentation/components/use_smile_id_button.d.ts +2 -2
  161. package/dist/presentation/components/use_smile_id_button.js +4 -4
  162. package/dist/presentation/components/use_smile_id_button.js.map +1 -1
  163. package/dist/presentation/components/use_smile_id_capture_content.d.ts +13 -0
  164. package/dist/presentation/components/use_smile_id_capture_content.d.ts.map +1 -1
  165. package/dist/presentation/components/use_smile_id_capture_content.js +15 -9
  166. package/dist/presentation/components/use_smile_id_capture_content.js.map +1 -1
  167. package/dist/presentation/components/use_smile_id_captured_document_image.d.ts +2 -3
  168. package/dist/presentation/components/use_smile_id_captured_document_image.d.ts.map +1 -1
  169. package/dist/presentation/components/use_smile_id_captured_document_image.js +1 -3
  170. package/dist/presentation/components/use_smile_id_captured_document_image.js.map +1 -1
  171. package/dist/presentation/components/use_smile_id_document_capture_controls.d.ts +12 -6
  172. package/dist/presentation/components/use_smile_id_document_capture_controls.d.ts.map +1 -1
  173. package/dist/presentation/components/use_smile_id_document_capture_controls.js +59 -16
  174. package/dist/presentation/components/use_smile_id_document_capture_controls.js.map +1 -1
  175. package/dist/presentation/components/use_smile_id_document_overlay.d.ts +22 -5
  176. package/dist/presentation/components/use_smile_id_document_overlay.d.ts.map +1 -1
  177. package/dist/presentation/components/use_smile_id_document_overlay.js +80 -40
  178. package/dist/presentation/components/use_smile_id_document_overlay.js.map +1 -1
  179. package/dist/presentation/components/use_smile_id_document_shimmer.d.ts +15 -0
  180. package/dist/presentation/components/use_smile_id_document_shimmer.d.ts.map +1 -0
  181. package/dist/presentation/components/use_smile_id_document_shimmer.js +23 -0
  182. package/dist/presentation/components/use_smile_id_document_shimmer.js.map +1 -0
  183. package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_clip.d.ts.map +1 -1
  184. package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_clip.js +1 -3
  185. package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_clip.js.map +1 -1
  186. package/dist/presentation/components/use_smile_id_guideline_thumbnail.d.ts.map +1 -1
  187. package/dist/presentation/components/use_smile_id_guideline_thumbnail.js +84 -1
  188. package/dist/presentation/components/use_smile_id_guideline_thumbnail.js.map +1 -1
  189. package/dist/presentation/components/use_smile_id_instructions_hero.d.ts +3 -1
  190. package/dist/presentation/components/use_smile_id_instructions_hero.d.ts.map +1 -1
  191. package/dist/presentation/components/use_smile_id_instructions_hero.js +18 -3
  192. package/dist/presentation/components/use_smile_id_instructions_hero.js.map +1 -1
  193. package/dist/presentation/components/use_smile_id_oval_border_palette.d.ts.map +1 -1
  194. package/dist/presentation/components/use_smile_id_oval_border_palette.js +7 -3
  195. package/dist/presentation/components/use_smile_id_oval_border_palette.js.map +1 -1
  196. package/dist/presentation/flow/dsl/builder/config_builder.d.ts +12 -0
  197. package/dist/presentation/flow/dsl/builder/config_builder.d.ts.map +1 -1
  198. package/dist/presentation/flow/dsl/builder/config_builder.js +12 -0
  199. package/dist/presentation/flow/dsl/builder/config_builder.js.map +1 -1
  200. package/dist/presentation/flow/dsl/builder/ml_builder.d.ts +13 -4
  201. package/dist/presentation/flow/dsl/builder/ml_builder.d.ts.map +1 -1
  202. package/dist/presentation/flow/dsl/builder/ml_builder.js +3 -2
  203. package/dist/presentation/flow/dsl/builder/ml_builder.js.map +1 -1
  204. package/dist/presentation/flow/dsl/builder/screens_builder.d.ts +111 -10
  205. package/dist/presentation/flow/dsl/builder/screens_builder.d.ts.map +1 -1
  206. package/dist/presentation/flow/dsl/builder/screens_builder.js +111 -10
  207. package/dist/presentation/flow/dsl/builder/screens_builder.js.map +1 -1
  208. package/dist/presentation/flow/dsl/builder/theme_builder.d.ts +15 -2
  209. package/dist/presentation/flow/dsl/builder/theme_builder.d.ts.map +1 -1
  210. package/dist/presentation/flow/dsl/builder/theme_builder.js +15 -2
  211. package/dist/presentation/flow/dsl/builder/theme_builder.js.map +1 -1
  212. package/dist/presentation/flow/dsl/use_smile_id_builder.d.ts +6 -4
  213. package/dist/presentation/flow/dsl/use_smile_id_builder.d.ts.map +1 -1
  214. package/dist/presentation/flow/dsl/use_smile_id_builder.js.map +1 -1
  215. package/dist/presentation/flow/dsl/use_smile_id_flow_builder.d.ts +62 -36
  216. package/dist/presentation/flow/dsl/use_smile_id_flow_builder.d.ts.map +1 -1
  217. package/dist/presentation/flow/dsl/use_smile_id_flow_builder.js +62 -36
  218. package/dist/presentation/flow/dsl/use_smile_id_flow_builder.js.map +1 -1
  219. package/dist/presentation/flow/flow_navigation_manager.d.ts +39 -4
  220. package/dist/presentation/flow/flow_navigation_manager.d.ts.map +1 -1
  221. package/dist/presentation/flow/flow_navigation_manager.js +141 -10
  222. package/dist/presentation/flow/flow_navigation_manager.js.map +1 -1
  223. package/dist/presentation/flow/model/instruction_guideline.d.ts +9 -0
  224. package/dist/presentation/flow/model/instruction_guideline.d.ts.map +1 -1
  225. package/dist/presentation/flow/model/instructions_defaults.d.ts +11 -2
  226. package/dist/presentation/flow/model/instructions_defaults.d.ts.map +1 -1
  227. package/dist/presentation/flow/model/instructions_defaults.js +73 -25
  228. package/dist/presentation/flow/model/instructions_defaults.js.map +1 -1
  229. package/dist/presentation/flow/screen/orchestrated_capture_screen.d.ts.map +1 -1
  230. package/dist/presentation/flow/screen/orchestrated_capture_screen.js +36 -12
  231. package/dist/presentation/flow/screen/orchestrated_capture_screen.js.map +1 -1
  232. package/dist/presentation/flow/screen/orchestrated_instructions_screen.js +1 -1
  233. package/dist/presentation/flow/screen/orchestrated_instructions_screen.js.map +1 -1
  234. package/dist/presentation/flow/screen/orchestrated_preview_screen.d.ts.map +1 -1
  235. package/dist/presentation/flow/screen/orchestrated_preview_screen.js +3 -1
  236. package/dist/presentation/flow/screen/orchestrated_preview_screen.js.map +1 -1
  237. package/dist/presentation/flow/screen/orchestrated_processing_screen.js +3 -3
  238. package/dist/presentation/flow/screen/orchestrated_processing_screen.js.map +1 -1
  239. package/dist/presentation/flow/validation/job_type_validator.d.ts.map +1 -1
  240. package/dist/presentation/flow/validation/job_type_validator.js +14 -0
  241. package/dist/presentation/flow/validation/job_type_validator.js.map +1 -1
  242. package/dist/presentation/screen/helpers/capture_screen_helpers.d.ts.map +1 -1
  243. package/dist/presentation/screen/helpers/capture_screen_helpers.js +1 -0
  244. package/dist/presentation/screen/helpers/capture_screen_helpers.js.map +1 -1
  245. package/dist/presentation/screen/helpers/instructions_screen_helpers.d.ts +1 -0
  246. package/dist/presentation/screen/helpers/instructions_screen_helpers.d.ts.map +1 -1
  247. package/dist/presentation/screen/helpers/instructions_screen_helpers.js +6 -2
  248. package/dist/presentation/screen/helpers/instructions_screen_helpers.js.map +1 -1
  249. package/dist/presentation/screen/helpers/scan_state_to_overlay_state.js +3 -0
  250. package/dist/presentation/screen/helpers/scan_state_to_overlay_state.js.map +1 -1
  251. package/dist/presentation/screen/use_smile_id_capture_screen.d.ts +17 -1
  252. package/dist/presentation/screen/use_smile_id_capture_screen.d.ts.map +1 -1
  253. package/dist/presentation/screen/use_smile_id_capture_screen.js +153 -18
  254. package/dist/presentation/screen/use_smile_id_capture_screen.js.map +1 -1
  255. package/dist/presentation/screen/use_smile_id_document_preview_screen.d.ts +2 -3
  256. package/dist/presentation/screen/use_smile_id_document_preview_screen.d.ts.map +1 -1
  257. package/dist/presentation/screen/use_smile_id_document_preview_screen.js +16 -11
  258. package/dist/presentation/screen/use_smile_id_document_preview_screen.js.map +1 -1
  259. package/dist/presentation/screen/use_smile_id_instructions_screen.d.ts +2 -0
  260. package/dist/presentation/screen/use_smile_id_instructions_screen.d.ts.map +1 -1
  261. package/dist/presentation/screen/use_smile_id_instructions_screen.js +2 -1
  262. package/dist/presentation/screen/use_smile_id_instructions_screen.js.map +1 -1
  263. package/dist/presentation/screen/use_smile_id_preview_screen.d.ts +7 -6
  264. package/dist/presentation/screen/use_smile_id_preview_screen.d.ts.map +1 -1
  265. package/dist/presentation/screen/use_smile_id_preview_screen.js +9 -8
  266. package/dist/presentation/screen/use_smile_id_preview_screen.js.map +1 -1
  267. package/dist/presentation/screen/use_smile_id_processing_screen.d.ts +2 -3
  268. package/dist/presentation/screen/use_smile_id_processing_screen.d.ts.map +1 -1
  269. package/dist/presentation/screen/use_smile_id_processing_screen.js +3 -2
  270. package/dist/presentation/screen/use_smile_id_processing_screen.js.map +1 -1
  271. package/dist/presentation/theme/theme.d.ts +1 -1
  272. package/dist/presentation/theme/theme.d.ts.map +1 -1
  273. package/dist/presentation/theme/theme.js +20 -18
  274. package/dist/presentation/theme/theme.js.map +1 -1
  275. package/dist/presentation/utils/force_max_brightness.d.ts +4 -4
  276. package/package.json +26 -6
  277. package/src/__tests__/react_native_mock.tsx +8 -0
  278. package/src/camera/camera_defaults.ts +11 -9
  279. package/src/camera/orientation_degrees.ts +5 -6
  280. package/src/core/models/__tests__/document_type.test.ts +6 -4
  281. package/src/core/models/document_capture_mode.ts +27 -0
  282. package/src/core/models/document_type.ts +6 -4
  283. package/src/core/models/result.ts +9 -8
  284. package/src/data/api/interceptors/__tests__/smile_integrity_interceptor.test.ts +37 -1
  285. package/src/data/api/interceptors/__tests__/smile_request_mac_interceptor.test.ts +59 -1
  286. package/src/data/api/interceptors/smile_auth_interceptor.ts +1 -1
  287. package/src/data/api/interceptors/smile_integrity_interceptor.ts +20 -0
  288. package/src/data/api/interceptors/smile_request_mac_interceptor.ts +13 -0
  289. package/src/data/compression/__tests__/payload_compressor.test.ts +200 -0
  290. package/src/data/compression/__tests__/payload_compressor_real_jpeg.test.ts +222 -0
  291. package/src/data/compression/compressible_asset.ts +62 -0
  292. package/src/data/compression/payload_compression_config.ts +53 -0
  293. package/src/data/compression/payload_compression_runner.ts +102 -0
  294. package/src/data/compression/payload_compressor.ts +164 -0
  295. package/src/data/compression/uri_compressible_asset.ts +85 -0
  296. package/src/data/dsl/builder/cache_config_builder.ts +3 -1
  297. package/src/data/dsl/builder/config_builder.ts +45 -14
  298. package/src/data/dsl/builder/interceptor_config_builder.ts +9 -7
  299. package/src/data/dsl/builder/retry_config_builder.ts +22 -1
  300. package/src/data/dsl/builder/timeout_config_builder.ts +7 -0
  301. package/src/data/dsl/use_smile_id_network_builder.ts +17 -0
  302. package/src/data/factory/networking_factory.ts +14 -1
  303. package/src/data/repository/__tests__/network_retries.test.ts +117 -0
  304. package/src/data/repository/use_smile_id_repository_impl.ts +96 -9
  305. package/src/data/security/__tests__/security_policy.test.ts +96 -0
  306. package/src/data/security/__tests__/smile_id_crypto_manager.test.ts +18 -0
  307. package/src/data/security/request_canonicalizer.ts +15 -2
  308. package/src/data/security/security_policy.ts +70 -0
  309. package/src/data/util/__tests__/use_smile_id_token_decoder.test.ts +57 -1
  310. package/src/data/util/retry_util.ts +3 -2
  311. package/src/data/util/use_smile_id_token_decoder.ts +76 -28
  312. package/src/l10n/strings_en.ts +2 -1
  313. package/src/l10n/use_smile_id_localizations.ts +3 -0
  314. package/src/metadata/__tests__/device_orientation_collector.test.ts +15 -0
  315. package/src/metadata/__tests__/metadata_configuration_mappers.test.ts +215 -0
  316. package/src/metadata/__tests__/metadata_configuration_objects.test.ts +85 -0
  317. package/src/metadata/__tests__/metadata_device_context.test.ts +147 -0
  318. package/src/metadata/__tests__/metadata_golden_fixture.json +13 -0
  319. package/src/metadata/__tests__/metadata_payload_golden.test.ts +193 -0
  320. package/src/metadata/__tests__/use_smile_id_metadata.test.ts +18 -24
  321. package/src/metadata/builder_configuration.ts +63 -0
  322. package/src/metadata/captured_image_properties.ts +10 -0
  323. package/src/metadata/device_orientation_collector.ts +75 -0
  324. package/src/metadata/geolocation.ts +46 -0
  325. package/src/metadata/metadata_configuration_mappers.ts +234 -0
  326. package/src/metadata/model_configuration.ts +68 -0
  327. package/src/metadata/optional_native_modules.ts +157 -3
  328. package/src/metadata/use_smile_id_metadata.ts +140 -17
  329. package/src/metadata/use_smile_id_metadata_factory.ts +195 -11
  330. package/src/presentation/assets/si_ess_animation_all_directions.json +1300 -286
  331. package/src/presentation/assets/svg/document_shimmer_strings.ts +17 -0
  332. package/src/presentation/assets/svg/instruction_svg_strings.ts +34 -12
  333. package/src/presentation/components/__tests__/enhanced_smart_selfie_animation_frames.test.ts +1 -3
  334. package/src/presentation/components/__tests__/use_smile_id_enhanced_smart_selfie_clip.test.tsx +3 -4
  335. package/src/presentation/components/__tests__/use_smile_id_guideline_thumbnail.test.tsx +34 -1
  336. package/src/presentation/components/__tests__/use_smile_id_instructions_hero.test.tsx +27 -0
  337. package/src/presentation/components/__tests__/use_smile_id_oval_border_palette.test.ts +7 -5
  338. package/src/presentation/components/helpers/enhanced_smart_selfie_animation_frames.ts +0 -6
  339. package/src/presentation/components/icons/index.tsx +65 -18
  340. package/src/presentation/components/use_smile_id_attribution.tsx +1 -1
  341. package/src/presentation/components/use_smile_id_button.tsx +4 -4
  342. package/src/presentation/components/use_smile_id_capture_content.tsx +36 -12
  343. package/src/presentation/components/use_smile_id_captured_document_image.tsx +3 -8
  344. package/src/presentation/components/use_smile_id_document_capture_controls.tsx +103 -39
  345. package/src/presentation/components/use_smile_id_document_overlay.tsx +134 -44
  346. package/src/presentation/components/use_smile_id_document_shimmer.tsx +51 -0
  347. package/src/presentation/components/use_smile_id_enhanced_smart_selfie_clip.tsx +0 -3
  348. package/src/presentation/components/use_smile_id_guideline_thumbnail.tsx +131 -2
  349. package/src/presentation/components/use_smile_id_instructions_hero.tsx +100 -59
  350. package/src/presentation/components/use_smile_id_oval_border_palette.ts +7 -3
  351. package/src/presentation/flow/__tests__/document_flow_navigation.test.ts +200 -1
  352. package/src/presentation/flow/dsl/builder/config_builder.ts +14 -0
  353. package/src/presentation/flow/dsl/builder/ml_builder.ts +13 -4
  354. package/src/presentation/flow/dsl/builder/screens_builder.ts +111 -10
  355. package/src/presentation/flow/dsl/builder/theme_builder.ts +19 -2
  356. package/src/presentation/flow/dsl/use_smile_id_builder.tsx +6 -4
  357. package/src/presentation/flow/dsl/use_smile_id_flow_builder.ts +62 -36
  358. package/src/presentation/flow/flow_navigation_manager.ts +179 -13
  359. package/src/presentation/flow/model/instruction_guideline.ts +6 -0
  360. package/src/presentation/flow/model/instructions_defaults.ts +103 -25
  361. package/src/presentation/flow/screen/orchestrated_capture_screen.tsx +43 -10
  362. package/src/presentation/flow/screen/orchestrated_instructions_screen.tsx +1 -0
  363. package/src/presentation/flow/screen/orchestrated_preview_screen.tsx +4 -2
  364. package/src/presentation/flow/screen/orchestrated_processing_screen.tsx +3 -3
  365. package/src/presentation/flow/validation/__tests__/job_type_validator.test.ts +64 -0
  366. package/src/presentation/flow/validation/job_type_validator.ts +24 -0
  367. package/src/presentation/screen/__tests__/instructions_screen_helpers.test.ts +15 -3
  368. package/src/presentation/screen/__tests__/use_smile_id_capture_screen.test.tsx +6 -4
  369. package/src/presentation/screen/helpers/capture_screen_helpers.ts +1 -0
  370. package/src/presentation/screen/helpers/instructions_screen_helpers.ts +7 -2
  371. package/src/presentation/screen/helpers/scan_state_to_overlay_state.ts +3 -0
  372. package/src/presentation/screen/use_smile_id_capture_screen.tsx +234 -36
  373. package/src/presentation/screen/use_smile_id_document_preview_screen.tsx +32 -22
  374. package/src/presentation/screen/use_smile_id_instructions_screen.tsx +4 -0
  375. package/src/presentation/screen/use_smile_id_preview_screen.tsx +9 -9
  376. package/src/presentation/screen/use_smile_id_processing_screen.tsx +7 -7
  377. package/src/presentation/theme/theme.ts +21 -19
  378. package/src/presentation/utils/force_max_brightness.tsx +4 -4
  379. package/dist/camera/frame_processor_plugin.d.ts +0 -28
  380. package/dist/camera/frame_processor_plugin.d.ts.map +0 -1
  381. package/dist/camera/frame_processor_plugin.js +0 -21
  382. package/dist/camera/frame_processor_plugin.js.map +0 -1
  383. package/dist/camera/use_smile_id_frame_processor.d.ts +0 -38
  384. package/dist/camera/use_smile_id_frame_processor.d.ts.map +0 -1
  385. package/dist/camera/use_smile_id_frame_processor.js +0 -2
  386. package/dist/camera/use_smile_id_frame_processor.js.map +0 -1
  387. package/dist/presentation/components/use_smile_id_document_frame_glyph.d.ts +0 -17
  388. package/dist/presentation/components/use_smile_id_document_frame_glyph.d.ts.map +0 -1
  389. package/dist/presentation/components/use_smile_id_document_frame_glyph.js +0 -17
  390. package/dist/presentation/components/use_smile_id_document_frame_glyph.js.map +0 -1
  391. package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_animation.d.ts +0 -24
  392. package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_animation.d.ts.map +0 -1
  393. package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_animation.js +0 -91
  394. package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_animation.js.map +0 -1
  395. package/dist/presentation/components/use_smile_id_instruction_card.d.ts +0 -31
  396. package/dist/presentation/components/use_smile_id_instruction_card.d.ts.map +0 -1
  397. package/dist/presentation/components/use_smile_id_instruction_card.js +0 -43
  398. package/dist/presentation/components/use_smile_id_instruction_card.js.map +0 -1
  399. package/dist/presentation/screen/helpers/use_document_orientation_lock.d.ts +0 -24
  400. package/dist/presentation/screen/helpers/use_document_orientation_lock.d.ts.map +0 -1
  401. package/dist/presentation/screen/helpers/use_document_orientation_lock.js +0 -47
  402. package/dist/presentation/screen/helpers/use_document_orientation_lock.js.map +0 -1
  403. package/src/presentation/components/use_smile_id_document_frame_glyph.tsx +0 -162
@@ -1,6 +1,8 @@
1
1
  import { Pressable, StyleSheet, Text, View } from "react-native";
2
- import { SafeAreaView } from "react-native-safe-area-context";
3
- import type { DocumentOrientation } from "../../core/models/document_type";
2
+ import {
3
+ SafeAreaView,
4
+ useSafeAreaInsets,
5
+ } from "react-native-safe-area-context";
4
6
  import type { UseSmileIDTheme } from "../theme/theme";
5
7
  import { useUseSmileIDTheme } from "../theme/theme_context";
6
8
  import { UseSmileIDAttribution } from "../components/use_smile_id_attribution";
@@ -13,8 +15,8 @@ import { useUseSmileIDLocalizations } from "../../l10n/use_smile_id_localization
13
15
  export type UseSmileIDDocumentPreviewScreenProps = {
14
16
  /** Local file URI of the captured side being reviewed (front, then back). */
15
17
  readonly capturedDocumentPath?: string;
16
- /** Capture orientation — drives the document image aspect. */
17
- readonly documentOrientation: DocumentOrientation;
18
+ /** Capture-frame aspect ratio (width / height) — drives the document image aspect. */
19
+ readonly documentAspectRatio: number;
18
20
  readonly showAttribution?: boolean;
19
21
  /** Confirm — commit the captured side and advance. */
20
22
  readonly onAccept?: () => void;
@@ -38,9 +40,11 @@ export function UseSmileIDDocumentPreviewScreen(
38
40
  const theme = props.theme ?? themeFromContext;
39
41
  const loc = useUseSmileIDLocalizations();
40
42
  const showAttribution = props.showAttribution ?? true;
43
+ const insets = useSafeAreaInsets();
41
44
 
42
45
  return (
43
46
  <SafeAreaView
47
+ edges={["left", "right", "bottom"]}
44
48
  style={[
45
49
  styles.root,
46
50
  { backgroundColor: theme.colors.captureReviewBackground },
@@ -53,7 +57,7 @@ export function UseSmileIDDocumentPreviewScreen(
53
57
  styles.closeRow,
54
58
  {
55
59
  paddingHorizontal: theme.spacing.medium,
56
- paddingTop: theme.spacing.small,
60
+ paddingTop: insets.top + theme.spacing.small,
57
61
  },
58
62
  ]}
59
63
  >
@@ -64,26 +68,27 @@ export function UseSmileIDDocumentPreviewScreen(
64
68
  testID="si_document_preview_close"
65
69
  style={({ pressed }) => [
66
70
  styles.closeButton,
67
- {
68
- backgroundColor: theme.colors.cardText,
69
- opacity: pressed ? 0.7 : 1,
70
- },
71
+ { opacity: pressed ? 0.7 : 1 },
71
72
  ]}
72
73
  >
73
- <SiOutlineClose size={20} color={theme.colors.cardBackground} />
74
+ <SiOutlineClose size={20} color="#FFFFFF" />
74
75
  </Pressable>
75
76
  </View>
76
77
  ) : null}
77
78
 
78
- <UseSmileIDCapturedDocumentImage
79
- orientation={props.documentOrientation}
80
- {...(props.capturedDocumentPath
81
- ? { uri: props.capturedDocumentPath }
82
- : {})}
83
- imageTestID="si_document_preview_image"
84
- imageAccessibilityLabel={loc.siPreviewAccessibilityImage}
85
- theme={theme}
86
- />
79
+ <View
80
+ style={[styles.imageRegion, { paddingVertical: theme.spacing.medium }]}
81
+ >
82
+ <UseSmileIDCapturedDocumentImage
83
+ aspectRatio={props.documentAspectRatio}
84
+ {...(props.capturedDocumentPath
85
+ ? { uri: props.capturedDocumentPath }
86
+ : {})}
87
+ imageTestID="si_document_preview_image"
88
+ imageAccessibilityLabel={loc.siPreviewAccessibilityImage}
89
+ theme={theme}
90
+ />
91
+ </View>
87
92
 
88
93
  <UseSmileIDCardSurface theme={theme} style={styles.card}>
89
94
  <Text
@@ -119,22 +124,27 @@ export function UseSmileIDDocumentPreviewScreen(
119
124
  </View>
120
125
  </UseSmileIDCardSurface>
121
126
 
122
- {showAttribution ? (
123
- <UseSmileIDAttribution forceLightMode theme={theme} />
124
- ) : null}
127
+ {showAttribution ? <UseSmileIDAttribution theme={theme} /> : null}
125
128
  </SafeAreaView>
126
129
  );
127
130
  }
128
131
 
129
132
  const CLOSE_BUTTON_SIZE = 40;
133
+ /** Warm-grey close-button fill for the document preview chrome. */
134
+ const CLOSE_BUTTON_FILL = "#848282";
130
135
 
131
136
  const styles = StyleSheet.create({
132
137
  root: { flex: 1, overflow: "hidden" },
138
+ // Fills the space between the close row and the card.
139
+ imageRegion: { flex: 1 },
133
140
  closeRow: { flexDirection: "row", justifyContent: "flex-end" },
134
141
  closeButton: {
135
142
  width: CLOSE_BUTTON_SIZE,
136
143
  height: CLOSE_BUTTON_SIZE,
137
144
  borderRadius: CLOSE_BUTTON_SIZE / 2,
145
+ backgroundColor: CLOSE_BUTTON_FILL,
146
+ borderWidth: 1,
147
+ borderColor: "rgba(255,255,255,0.1)",
138
148
  alignItems: "center",
139
149
  justifyContent: "center",
140
150
  },
@@ -33,6 +33,8 @@ export type UseSmileIDInstructionsScreenProps = {
33
33
  readonly showHeroOval?: boolean;
34
34
  /** Animate the ring's rising green progress fill. */
35
35
  readonly showHeroOvalProgress?: boolean;
36
+ /** Present the hero in a document card (document flows) instead of an oval. */
37
+ readonly showCardBackground?: boolean;
36
38
  readonly onContinue?: () => void;
37
39
  readonly onBack?: () => void;
38
40
  readonly theme?: UseSmileIDTheme;
@@ -71,6 +73,7 @@ export function UseSmileIDInstructionsScreen(
71
73
  const showAttribution = props.showAttribution ?? true;
72
74
  const showHeroOval = props.showHeroOval ?? true;
73
75
  const showHeroOvalProgress = props.showHeroOvalProgress ?? true;
76
+ const showCardBackground = props.showCardBackground ?? false;
74
77
  const onContinue = props.onContinue ?? (() => {});
75
78
 
76
79
  return (
@@ -112,6 +115,7 @@ export function UseSmileIDInstructionsScreen(
112
115
  source={heroSource}
113
116
  showOval={showHeroOval}
114
117
  showOvalProgress={showHeroOvalProgress}
118
+ showCardBackground={showCardBackground}
115
119
  theme={theme}
116
120
  />
117
121
 
@@ -37,12 +37,13 @@ export type UseSmileIDPreviewScreenProps = {
37
37
  /**
38
38
  * Preview screen — confirms the captured selfie before submission.
39
39
  *
40
- * - Uniform light page with the captured image clipped to the face
41
- * oval. The oval scales to the leftover height above the card so
42
- * the two never overlap; no scrim is painted.
43
- * - Bottom card (white, rounded, soft upward shadow) with the title
44
- * "Confirm image quality", a caption, and the Retake / Confirm
45
- * tiles.
40
+ * - Uniform page (`captureReviewBackground`, theme-following) with the
41
+ * captured image clipped to the face oval. The oval scales to the
42
+ * leftover height above the card so the two never overlap; no scrim
43
+ * is painted.
44
+ * - Bottom card (theme card surface, rounded, soft upward shadow) with
45
+ * the title "Confirm image quality", a caption, and the Retake /
46
+ * Confirm tiles.
46
47
  * - Attribution sits centered below the card.
47
48
  */
48
49
  export function UseSmileIDPreviewScreen(props: UseSmileIDPreviewScreenProps) {
@@ -79,6 +80,7 @@ export function UseSmileIDPreviewScreen(props: UseSmileIDPreviewScreenProps) {
79
80
 
80
81
  return (
81
82
  <SafeAreaView
83
+ edges={["left", "right", "bottom"]}
82
84
  style={[
83
85
  styles.root,
84
86
  { backgroundColor: theme.colors.captureReviewBackground },
@@ -140,9 +142,7 @@ export function UseSmileIDPreviewScreen(props: UseSmileIDPreviewScreenProps) {
140
142
  </View>
141
143
  </UseSmileIDCardSurface>
142
144
 
143
- {showAttribution ? (
144
- <UseSmileIDAttribution forceLightMode theme={theme} />
145
- ) : null}
145
+ {showAttribution ? <UseSmileIDAttribution theme={theme} /> : null}
146
146
  </SafeAreaView>
147
147
  );
148
148
  }
@@ -3,7 +3,7 @@ import { StyleSheet, View, type LayoutChangeEvent } from "react-native";
3
3
  import { SafeAreaView } from "react-native-safe-area-context";
4
4
  import type { UseSmileIDTheme } from "../theme/theme";
5
5
  import { useUseSmileIDTheme } from "../theme/theme_context";
6
- import type { DocumentOrientation } from "../../core/models/document_type";
6
+ import { defaultFrameAspectRatio } from "../../core/models/document_type";
7
7
  import { UseSmileIDAttribution } from "../components/use_smile_id_attribution";
8
8
  import { UseSmileIDCapturedDocumentImage } from "../components/use_smile_id_captured_document_image";
9
9
  import { UseSmileIDCapturedImageOval } from "../components/use_smile_id_captured_image_oval";
@@ -35,8 +35,8 @@ export type UseSmileIDProcessingScreenProps = {
35
35
  * it (document-job variant).
36
36
  */
37
37
  readonly documentImageUri?: string;
38
- /** Capture orientation for {@link documentImageUri}. Defaults to landscape. */
39
- readonly documentOrientation?: DocumentOrientation;
38
+ /** Capture-frame aspect ratio (width / height) for {@link documentImageUri}. Defaults to landscape. */
39
+ readonly documentAspectRatio?: number;
40
40
  readonly showProgressPercentage?: boolean;
41
41
  readonly showAttribution?: boolean;
42
42
  readonly onContinue?: () => void;
@@ -117,7 +117,9 @@ export function UseSmileIDProcessingScreen(
117
117
  >
118
118
  {hasDocumentImage ? (
119
119
  <UseSmileIDCapturedDocumentImage
120
- orientation={props.documentOrientation ?? "Landscape"}
120
+ aspectRatio={
121
+ props.documentAspectRatio ?? defaultFrameAspectRatio("Landscape")
122
+ }
121
123
  {...(props.documentImageUri ? { uri: props.documentImageUri } : {})}
122
124
  imageTestID="si_processing_document_image"
123
125
  imageAccessibilityLabel={loc.siCdCapturedImage}
@@ -208,9 +210,7 @@ export function UseSmileIDProcessingScreen(
208
210
  ) : null}
209
211
  </UseSmileIDCardSurface>
210
212
 
211
- {showAttribution ? (
212
- <UseSmileIDAttribution forceLightMode theme={theme} />
213
- ) : null}
213
+ {showAttribution ? <UseSmileIDAttribution theme={theme} /> : null}
214
214
  </SafeAreaView>
215
215
  );
216
216
  }
@@ -67,7 +67,7 @@ export type UseSmileIDColors = {
67
67
  previewRejectBorder: string;
68
68
 
69
69
  // --- Capture review (preview + processing page surface) --------
70
- /** Uniform light page behind the capture-review screens. Theme-static. */
70
+ /** Page surface behind the capture-review screens; light in the light theme, dark in the dark theme. */
71
71
  captureReviewBackground: string;
72
72
 
73
73
  // --- Processing / cards ----------------------------------------
@@ -221,7 +221,7 @@ const sharedTypography: UseSmileIDTypography = {
221
221
  cardHeading: {
222
222
  fontFamily: dmSans("800"),
223
223
  fontSize: 20,
224
- lineHeight: 26,
224
+ lineHeight: 25.5,
225
225
  fontWeight: "800",
226
226
  letterSpacing: -0.425,
227
227
  },
@@ -286,7 +286,7 @@ export const defaultLightTheme: UseSmileIDTheme = {
286
286
 
287
287
  background: "#F9FAFB",
288
288
  cardBackground: "#FFFFFF",
289
- instructionCardBackground: "#F9F0E766",
289
+ instructionCardBackground: "#F9F0E7",
290
290
 
291
291
  titleText: "#21232C",
292
292
  cardText: "#5E646E",
@@ -296,11 +296,11 @@ export const defaultLightTheme: UseSmileIDTheme = {
296
296
 
297
297
  stroke: "#EAECF0",
298
298
 
299
- warningFill: "#FEF3C7",
300
- warningIcon: "#FF5805",
301
- warningStroke: "#FFEDD5",
302
- successFill: "#DCFCE7",
303
- successIcon: "#2CC05C",
299
+ warningFill: "#EF43431A", // warning red @10%
300
+ warningIcon: "#EF4343",
301
+ warningStroke: "#EF43434D", // warning red @30%
302
+ successFill: "#00C8531A", // success green @10%
303
+ successIcon: "#00C853",
304
304
 
305
305
  captureOverlayBackground: "#FFFFFFE5",
306
306
  documentOverlayScrim: "#00000066", // black @40% — surround dim outside the frame
@@ -314,8 +314,9 @@ export const defaultLightTheme: UseSmileIDTheme = {
314
314
  ovalWarning: "#EF4343",
315
315
  ovalDirectionalIndicator: "#EF4343",
316
316
 
317
- // Preview/accept/submitting tokens are theme-static (same in dark) so the
318
- // capture review surface reads identically across themes.
317
+ // Preview accept/reject tokens are theme-static (same in dark) so the
318
+ // review affordances read identically across themes; the page surface
319
+ // (`captureReviewBackground`) follows the active theme's background.
319
320
  previewAcceptBackground: "#04B04A1A", // 10% green
320
321
  previewAcceptIcon: "#12B76A",
321
322
  previewAcceptBorder: "#04B04A4D", // 30% green
@@ -328,7 +329,7 @@ export const defaultLightTheme: UseSmileIDTheme = {
328
329
  cardShadow: "#0000001A", // black @10%
329
330
  backButtonBorder: "#FFFFFF1A", // white @10% rim on the dark fill
330
331
 
331
- smileIdYellow: "#F2BD51",
332
+ smileIdYellow: "#FDB515",
332
333
  offBlack: "#2D2B2A",
333
334
  offWhite: "#F9F0E7",
334
335
  },
@@ -358,11 +359,11 @@ export const defaultDarkTheme: UseSmileIDTheme = {
358
359
  // 15% alpha — divider stroke on dark surfaces.
359
360
  stroke: "#EAECF026",
360
361
 
361
- warningFill: "#3B2F12",
362
- warningIcon: "#FF5805",
363
- warningStroke: "#5C3A1A",
364
- successFill: "#163B27",
365
- successIcon: "#2CC05C",
362
+ warningFill: "#EA2D2D",
363
+ warningIcon: "#FFFFFF",
364
+ warningStroke: "#9F0000",
365
+ successFill: "#00E676",
366
+ successIcon: "#FFFFFF",
366
367
 
367
368
  captureOverlayBackground: "#FFFFFFE5",
368
369
  documentOverlayScrim: "#00000066", // black @40% — surround dim outside the frame (identical in dark)
@@ -376,20 +377,21 @@ export const defaultDarkTheme: UseSmileIDTheme = {
376
377
  ovalWarning: "#EF4343",
377
378
  ovalDirectionalIndicator: "#EF4343",
378
379
 
379
- // Theme-static (match light) — the capture review surface stays consistent.
380
+ // Accept/reject affordances are theme-static (match light); the page
381
+ // surface behind them follows the dark background so cards read on-theme.
380
382
  previewAcceptBackground: "#04B04A1A", // 10% green
381
383
  previewAcceptIcon: "#12B76A",
382
384
  previewAcceptBorder: "#04B04A4D", // 30% green
383
385
  previewRejectBackground: "#F8FAFC",
384
386
  previewRejectIcon: "#90A1B9",
385
387
  previewRejectBorder: "#E2E8F0",
386
- captureReviewBackground: "#F8FAFC",
388
+ captureReviewBackground: "#1A1C23",
387
389
 
388
390
  submittingIndicator: "#2CC05C",
389
391
  cardShadow: "#0000001A", // black @10%
390
392
  backButtonBorder: "#0000001A", // black @10% rim on the light fill
391
393
 
392
- smileIdYellow: "#F2BD51",
394
+ smileIdYellow: "#FDB515",
393
395
  offBlack: "#F9F0E7",
394
396
  offWhite: "#2D2B2A",
395
397
  },
@@ -6,10 +6,10 @@ export interface ForceMaxBrightnessProps {
6
6
  /** Target brightness in the range 0.0–1.0. Defaults to 1.0 (max). */
7
7
  readonly brightness?: number;
8
8
  /**
9
- * When false the component is a no-op. Defaults to true. Selfie capture uses
10
- * the front camera with the screen as fill light, so callers enable it for
11
- * the selfie path only; document capture uses the rear camera, where screen
12
- * brightness does not help.
9
+ * When false the component is a no-op. Defaults to true. Every capture
10
+ * screen (selfie and document) mounts this enabled so the preview always
11
+ * runs at full brightness with the screen kept awake for the duration of
12
+ * the capture.
13
13
  */
14
14
  readonly enabled?: boolean;
15
15
  }
@@ -1,28 +0,0 @@
1
- import type { HybridObject } from "react-native-nitro-modules";
2
- import type { Frame } from "react-native-vision-camera";
3
- /**
4
- * A provider's frame-processor Nitro HybridObject. Each provider module
5
- * registers a platform-native implementation (Swift on iOS, Kotlin on
6
- * Android) under its `frameProcessorPluginName`; the SDK resolves it by
7
- * that key with {@link resolveFrameProcessorPlugin}.
8
- *
9
- * `call` runs the provider's scan session on the frame and returns the
10
- * scan-result map serialised as a JSON string — pixels never enter JS.
11
- * Frame-level failures return `{"error":"<reason>"}`; absent optional
12
- * keys are omitted (never `null`). The worklet must `dispose()` the
13
- * frame after the call.
14
- */
15
- export interface UseSmileIDFrameProcessorPlugin extends HybridObject<{}> {
16
- call(frame: Frame, rotation: number): string;
17
- }
18
- /**
19
- * Resolve a provider's frame-processor HybridObject by name, or `null`
20
- * if it isn't registered natively.
21
- *
22
- * VisionCamera v5's `NitroModules.createHybridObject(...)` throws when the
23
- * key is missing (v4's `VisionCameraProxy.initFrameProcessorPlugin`
24
- * returned `null`). The throw is mapped back to `null` here so callers
25
- * keep the v4 report-once-then-no-op behaviour for a missing plugin.
26
- */
27
- export declare function resolveFrameProcessorPlugin(name: string): UseSmileIDFrameProcessorPlugin | null;
28
- //# sourceMappingURL=frame_processor_plugin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"frame_processor_plugin.d.ts","sourceRoot":"","sources":["../../src/camera/frame_processor_plugin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAExD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,8BAA+B,SAAQ,YAAY,CAAC,EAAE,CAAC;IACtE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;CAC9C;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,MAAM,GACX,8BAA8B,GAAG,IAAI,CAUvC"}
@@ -1,21 +0,0 @@
1
- import { NitroModules } from "react-native-nitro-modules";
2
- /**
3
- * Resolve a provider's frame-processor HybridObject by name, or `null`
4
- * if it isn't registered natively.
5
- *
6
- * VisionCamera v5's `NitroModules.createHybridObject(...)` throws when the
7
- * key is missing (v4's `VisionCameraProxy.initFrameProcessorPlugin`
8
- * returned `null`). The throw is mapped back to `null` here so callers
9
- * keep the v4 report-once-then-no-op behaviour for a missing plugin.
10
- */
11
- export function resolveFrameProcessorPlugin(name) {
12
- try {
13
- return NitroModules.createHybridObject(name);
14
- }
15
- catch {
16
- // Not registered natively — the caller surfaces a typed
17
- // FrameProcessorPluginNotRegisteredException once on its own.
18
- return null;
19
- }
20
- }
21
- //# sourceMappingURL=frame_processor_plugin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"frame_processor_plugin.js","sourceRoot":"","sources":["../../src/camera/frame_processor_plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAoB1D;;;;;;;;GAQG;AACH,MAAM,UAAU,2BAA2B,CACzC,IAAY;IAEZ,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,kBAAkB,CACpC,IAAI,CACL,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,wDAAwD;QACxD,8DAA8D;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -1,38 +0,0 @@
1
- import type { HybridObject } from "react-native-nitro-modules";
2
- import type { Frame } from "react-native-vision-camera";
3
- /**
4
- * Shared shape of every provider's native VisionCamera v5 Nitro
5
- * frame-processor HybridObject.
6
- *
7
- * Each provider package (`usesmileid_vision_face`,
8
- * `usesmileid_mlkit_face`, …) ships a Nitro `HybridObject`
9
- * implementation registered — via Nitro autolinking — under the name
10
- * the analyzer exposes as `frameProcessorPluginName`. The camera layer
11
- * resolves it by that name with
12
- * `NitroModules.createHybridObject<UseSmileIDFrameProcessor>(name)`,
13
- * keeping the cross-bridge identifier in the single per-provider
14
- * `identifiers` registry (no second string literal here).
15
- *
16
- * `call` runs the provider's native scan session on the frame and
17
- * returns the scan-result map serialised as JSON — pixels never enter
18
- * the JS runtime. Frame-level failures return `{"error":"<reason>"}`.
19
- * The JSON is parsed and Zod-validated on the JS thread by
20
- * `useSmileIDFrameStream`; absent optional keys are omitted natively
21
- * (never serialised as `null`, which the wire schemas reject).
22
- *
23
- * The platform tag here is only structural — it satisfies the
24
- * `createHybridObject` generic bound. Each provider's own `.nitro.ts`
25
- * spec declares its real (iOS-only or Android-only) platform.
26
- */
27
- export interface UseSmileIDFrameProcessor extends HybridObject<{
28
- ios: "swift";
29
- android: "kotlin";
30
- }> {
31
- /**
32
- * Run the native scan on `frame` with the physical device tilt
33
- * `rotation` (clockwise degrees, `0` = upright portrait). Returns the
34
- * scan-result map as a JSON string.
35
- */
36
- call(frame: Frame, rotation: number): string;
37
- }
38
- //# sourceMappingURL=use_smile_id_frame_processor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use_smile_id_frame_processor.d.ts","sourceRoot":"","sources":["../../src/camera/use_smile_id_frame_processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,WAAW,wBACf,SAAQ,YAAY,CAAC;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAC;IACzD;;;;OAIG;IACH,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;CAC9C"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=use_smile_id_frame_processor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use_smile_id_frame_processor.js","sourceRoot":"","sources":["../../src/camera/use_smile_id_frame_processor.ts"],"names":[],"mappings":""}
@@ -1,17 +0,0 @@
1
- /**
2
- * Translucent in-frame document glyph — the "what to align here" hint shown
3
- * while idle/positioning, hidden once capture begins.
4
- *
5
- * PLACEHOLDER: static card illustration standing in for the per-document-type
6
- * capture Lottie (not finalised). Swap point: replace the body with the resolved
7
- * Lottie for `documentType` + `isLandscape`; the call site and props stay the same.
8
- */
9
- export type UseSmileIDDocumentFrameGlyphProps = {
10
- readonly width: number;
11
- readonly height: number;
12
- /** Landscape (ID card): photo left + lines right. Portrait: header + lines, photo bottom-left. */
13
- readonly isLandscape: boolean;
14
- readonly testID?: string;
15
- };
16
- export declare const UseSmileIDDocumentFrameGlyph: import("react").MemoExoticComponent<(props: UseSmileIDDocumentFrameGlyphProps) => import("react").JSX.Element | null>;
17
- //# sourceMappingURL=use_smile_id_document_frame_glyph.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use_smile_id_document_frame_glyph.d.ts","sourceRoot":"","sources":["../../../src/presentation/components/use_smile_id_document_frame_glyph.tsx"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,MAAM,MAAM,iCAAiC,GAAG;IAC9C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,kGAAkG;IAClG,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAUF,eAAO,MAAM,4BAA4B,8CAE9B,iCAAiC,wCAoI3C,CAAC"}
@@ -1,17 +0,0 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { memo } from "react";
3
- import Svg, { Rect } from "react-native-svg";
4
- /** Translucent white — readable over the dimmed feed without hiding it. */
5
- const GLYPH_COLOR = "#FFFFFF8C"; // white @ ~55%
6
- /** Faint card fill so the skeleton reads as one document card, not loose bars. */
7
- const CARD_FILL = "#FFFFFF26"; // white @ ~15%
8
- const CORNER = 6;
9
- /** Card-fill corner radius — matches the overlay frame's 8px radius. */
10
- const FRAME_FILL_CORNER = 8;
11
- export const UseSmileIDDocumentFrameGlyph = memo(function UseSmileIDDocumentFrameGlyph(props) {
12
- const { width: w, height: h, isLandscape } = props;
13
- if (w <= 0 || h <= 0)
14
- return null;
15
- return (_jsxs(Svg, { width: w, height: h, viewBox: `0 0 ${w} ${h}`, preserveAspectRatio: "none", ...(props.testID !== undefined ? { testID: props.testID } : {}), children: [_jsx(Rect, { x: 0, y: 0, width: w, height: h, rx: FRAME_FILL_CORNER, fill: CARD_FILL }), isLandscape ? (_jsxs(_Fragment, { children: [_jsx(Rect, { x: w * 0.08, y: h * 0.2, width: w * 0.3, height: h * 0.6, rx: CORNER, fill: GLYPH_COLOR }), _jsx(Rect, { x: w * 0.46, y: h * 0.26, width: w * 0.4, height: h * 0.07, rx: CORNER, fill: GLYPH_COLOR }), _jsx(Rect, { x: w * 0.46, y: h * 0.4, width: w * 0.44, height: h * 0.07, rx: CORNER, fill: GLYPH_COLOR }), _jsx(Rect, { x: w * 0.46, y: h * 0.54, width: w * 0.36, height: h * 0.07, rx: CORNER, fill: GLYPH_COLOR }), _jsx(Rect, { x: w * 0.46, y: h * 0.68, width: w * 0.28, height: h * 0.07, rx: CORNER, fill: GLYPH_COLOR })] })) : (_jsxs(_Fragment, { children: [_jsx(Rect, { x: w * 0.1, y: h * 0.12, width: w * 0.8, height: h * 0.08, rx: CORNER, fill: GLYPH_COLOR }), _jsx(Rect, { x: w * 0.1, y: h * 0.26, width: w * 0.6, height: h * 0.05, rx: CORNER, fill: GLYPH_COLOR }), _jsx(Rect, { x: w * 0.1, y: h * 0.36, width: w * 0.65, height: h * 0.05, rx: CORNER, fill: GLYPH_COLOR }), _jsx(Rect, { x: w * 0.1, y: h * 0.56, width: w * 0.3, height: h * 0.28, rx: CORNER, fill: GLYPH_COLOR }), _jsx(Rect, { x: w * 0.46, y: h * 0.6, width: w * 0.44, height: h * 0.05, rx: CORNER, fill: GLYPH_COLOR }), _jsx(Rect, { x: w * 0.46, y: h * 0.7, width: w * 0.4, height: h * 0.05, rx: CORNER, fill: GLYPH_COLOR }), _jsx(Rect, { x: w * 0.46, y: h * 0.8, width: w * 0.3, height: h * 0.05, rx: CORNER, fill: GLYPH_COLOR })] }))] }));
16
- });
17
- //# sourceMappingURL=use_smile_id_document_frame_glyph.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use_smile_id_document_frame_glyph.js","sourceRoot":"","sources":["../../../src/presentation/components/use_smile_id_document_frame_glyph.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAC7B,OAAO,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAkB7C,2EAA2E;AAC3E,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,eAAe;AAChD,kFAAkF;AAClF,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,eAAe;AAC9C,MAAM,MAAM,GAAG,CAAC,CAAC;AACjB,wEAAwE;AACxE,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAC9C,SAAS,4BAA4B,CACnC,KAAwC;IAExC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IACnD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAElC,OAAO,CACL,MAAC,GAAG,IACF,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,EACxB,mBAAmB,EAAC,MAAM,KACtB,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAGhE,KAAC,IAAI,IACH,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,CAAC,EACJ,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,CAAC,EACT,EAAE,EAAE,iBAAiB,EACrB,IAAI,EAAE,SAAS,GACf,EACD,WAAW,CAAC,CAAC,CAAC,CACb,8BAEE,KAAC,IAAI,IACH,CAAC,EAAE,CAAC,GAAG,IAAI,EACX,CAAC,EAAE,CAAC,GAAG,GAAG,EACV,KAAK,EAAE,CAAC,GAAG,GAAG,EACd,MAAM,EAAE,CAAC,GAAG,GAAG,EACf,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,WAAW,GACjB,EAEF,KAAC,IAAI,IACH,CAAC,EAAE,CAAC,GAAG,IAAI,EACX,CAAC,EAAE,CAAC,GAAG,IAAI,EACX,KAAK,EAAE,CAAC,GAAG,GAAG,EACd,MAAM,EAAE,CAAC,GAAG,IAAI,EAChB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,WAAW,GACjB,EACF,KAAC,IAAI,IACH,CAAC,EAAE,CAAC,GAAG,IAAI,EACX,CAAC,EAAE,CAAC,GAAG,GAAG,EACV,KAAK,EAAE,CAAC,GAAG,IAAI,EACf,MAAM,EAAE,CAAC,GAAG,IAAI,EAChB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,WAAW,GACjB,EACF,KAAC,IAAI,IACH,CAAC,EAAE,CAAC,GAAG,IAAI,EACX,CAAC,EAAE,CAAC,GAAG,IAAI,EACX,KAAK,EAAE,CAAC,GAAG,IAAI,EACf,MAAM,EAAE,CAAC,GAAG,IAAI,EAChB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,WAAW,GACjB,EACF,KAAC,IAAI,IACH,CAAC,EAAE,CAAC,GAAG,IAAI,EACX,CAAC,EAAE,CAAC,GAAG,IAAI,EACX,KAAK,EAAE,CAAC,GAAG,IAAI,EACf,MAAM,EAAE,CAAC,GAAG,IAAI,EAChB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,WAAW,GACjB,IACD,CACJ,CAAC,CAAC,CAAC,CACF,8BAEE,KAAC,IAAI,IACH,CAAC,EAAE,CAAC,GAAG,GAAG,EACV,CAAC,EAAE,CAAC,GAAG,IAAI,EACX,KAAK,EAAE,CAAC,GAAG,GAAG,EACd,MAAM,EAAE,CAAC,GAAG,IAAI,EAChB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,WAAW,GACjB,EACF,KAAC,IAAI,IACH,CAAC,EAAE,CAAC,GAAG,GAAG,EACV,CAAC,EAAE,CAAC,GAAG,IAAI,EACX,KAAK,EAAE,CAAC,GAAG,GAAG,EACd,MAAM,EAAE,CAAC,GAAG,IAAI,EAChB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,WAAW,GACjB,EACF,KAAC,IAAI,IACH,CAAC,EAAE,CAAC,GAAG,GAAG,EACV,CAAC,EAAE,CAAC,GAAG,IAAI,EACX,KAAK,EAAE,CAAC,GAAG,IAAI,EACf,MAAM,EAAE,CAAC,GAAG,IAAI,EAChB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,WAAW,GACjB,EAEF,KAAC,IAAI,IACH,CAAC,EAAE,CAAC,GAAG,GAAG,EACV,CAAC,EAAE,CAAC,GAAG,IAAI,EACX,KAAK,EAAE,CAAC,GAAG,GAAG,EACd,MAAM,EAAE,CAAC,GAAG,IAAI,EAChB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,WAAW,GACjB,EACF,KAAC,IAAI,IACH,CAAC,EAAE,CAAC,GAAG,IAAI,EACX,CAAC,EAAE,CAAC,GAAG,GAAG,EACV,KAAK,EAAE,CAAC,GAAG,IAAI,EACf,MAAM,EAAE,CAAC,GAAG,IAAI,EAChB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,WAAW,GACjB,EACF,KAAC,IAAI,IACH,CAAC,EAAE,CAAC,GAAG,IAAI,EACX,CAAC,EAAE,CAAC,GAAG,GAAG,EACV,KAAK,EAAE,CAAC,GAAG,GAAG,EACd,MAAM,EAAE,CAAC,GAAG,IAAI,EAChB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,WAAW,GACjB,EACF,KAAC,IAAI,IACH,CAAC,EAAE,CAAC,GAAG,IAAI,EACX,CAAC,EAAE,CAAC,GAAG,GAAG,EACV,KAAK,EAAE,CAAC,GAAG,GAAG,EACd,MAAM,EAAE,CAAC,GAAG,IAAI,EAChB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,WAAW,GACjB,IACD,CACJ,IACG,CACP,CAAC;AACJ,CAAC,CACF,CAAC"}
@@ -1,24 +0,0 @@
1
- import type { ScanHeadTurnDirection } from "usesmileid_bridge";
2
- import { type UseSmileIDOverlayState as OverlayState } from "../state/use_smile_id_overlay_state";
3
- export type UseSmileIDEnhancedSmartSelfieAnimationProps = {
4
- readonly overlayState: OverlayState;
5
- /** Active head-turn direction from the scan state, null outside a turn. */
6
- readonly direction: ScanHeadTurnDirection | null;
7
- readonly containerWidth: number;
8
- readonly containerHeight: number;
9
- };
10
- /**
11
- * Enhanced Smart Selfie head-turn cue. One composition
12
- * (`si_ess_animation_all_directions`) carries all three turns:
13
- *
14
- * - No active direction while idle / pre-capture → the whole
15
- * composition loops as the pre-turn primer.
16
- * - During a head turn → only that direction's frame sub-range plays,
17
- * ping-ponging until the turn completes.
18
- * - Reduced motion → the clip's final (turned-head) frame holds.
19
- *
20
- * The caller gates rendering to selfie capture with Enhanced Smart
21
- * Selfie enabled.
22
- */
23
- export declare function UseSmileIDEnhancedSmartSelfieAnimation(props: UseSmileIDEnhancedSmartSelfieAnimationProps): import("react").JSX.Element | null;
24
- //# sourceMappingURL=use_smile_id_enhanced_smart_selfie_animation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use_smile_id_enhanced_smart_selfie_animation.d.ts","sourceRoot":"","sources":["../../../src/presentation/components/use_smile_id_enhanced_smart_selfie_animation.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAEL,KAAK,sBAAsB,IAAI,YAAY,EAC5C,MAAM,qCAAqC,CAAC;AAuB7C,MAAM,MAAM,2CAA2C,GAAG;IACxD,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,2EAA2E;IAC3E,QAAQ,CAAC,SAAS,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACjD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,sCAAsC,CACpD,KAAK,EAAE,2CAA2C,sCAkFnD"}
@@ -1,91 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useEffect, useRef } from "react";
3
- import { Animated, Easing, View } from "react-native";
4
- import LottieView from "lottie-react-native";
5
- import { UseSmileIDOverlayState, } from "../state/use_smile_id_overlay_state";
6
- import { useReducedMotion } from "../utils/use_reduced_motion";
7
- import { FaceOvalDefaults } from "./face_oval_defaults";
8
- import { ENHANCED_SMART_SELFIE_FRAME_RATE, ENHANCED_SMART_SELFIE_TOTAL_FRAMES, EnhancedSmartSelfieAnimationFrames, } from "./helpers/enhanced_smart_selfie_animation_frames";
9
- // eslint-disable-next-line @typescript-eslint/no-require-imports
10
- const ALL_DIRECTIONS_ANIMATION = require("../assets/si_ess_animation_all_directions.json");
11
- /** Square box the head-turn cue renders in, centred on the oval. */
12
- const ENHANCED_SMART_SELFIE_ANIMATION_SIZE = 383;
13
- /** Nudge so the composition's face lands on the oval centre. */
14
- const VERTICAL_ALIGNMENT_OFFSET = -15;
15
- // Widens `progress` to accept an Animated.Value (lottie-react-native
16
- // types it as `number`, but the runtime accepts the value) without an
17
- // unsafe cast.
18
- const AnimatedLottieView = Animated.createAnimatedComponent(LottieView);
19
- /**
20
- * Enhanced Smart Selfie head-turn cue. One composition
21
- * (`si_ess_animation_all_directions`) carries all three turns:
22
- *
23
- * - No active direction while idle / pre-capture → the whole
24
- * composition loops as the pre-turn primer.
25
- * - During a head turn → only that direction's frame sub-range plays,
26
- * ping-ponging until the turn completes.
27
- * - Reduced motion → the clip's final (turned-head) frame holds.
28
- *
29
- * The caller gates rendering to selfie capture with Enhanced Smart
30
- * Selfie enabled.
31
- */
32
- export function UseSmileIDEnhancedSmartSelfieAnimation(props) {
33
- const reducedMotion = useReducedMotion();
34
- const progress = useRef(new Animated.Value(0)).current;
35
- const direction = props.direction;
36
- const showFullLoop = direction === null &&
37
- (props.overlayState === UseSmileIDOverlayState.INSTRUCTION ||
38
- props.overlayState === UseSmileIDOverlayState.IDLE);
39
- const visible = direction !== null || showFullLoop;
40
- useEffect(() => {
41
- if (!visible)
42
- return undefined;
43
- const range = direction
44
- ? EnhancedSmartSelfieAnimationFrames[direction]
45
- : { startFrame: 0, endFrame: ENHANCED_SMART_SELFIE_TOTAL_FRAMES };
46
- const startProgress = range.startFrame / ENHANCED_SMART_SELFIE_TOTAL_FRAMES;
47
- const endProgress = range.endFrame / ENHANCED_SMART_SELFIE_TOTAL_FRAMES;
48
- if (reducedMotion) {
49
- progress.setValue(endProgress);
50
- return undefined;
51
- }
52
- const duration = ((range.endFrame - range.startFrame) /
53
- ENHANCED_SMART_SELFIE_FRAME_RATE) *
54
- 1000;
55
- progress.setValue(startProgress);
56
- const forward = Animated.timing(progress, {
57
- toValue: endProgress,
58
- duration,
59
- easing: Easing.linear,
60
- useNativeDriver: false,
61
- });
62
- const animation = direction
63
- ? // Ping-pong the direction's clip so the cue keeps gesturing
64
- // without snapping back to the forward pose.
65
- Animated.loop(Animated.sequence([
66
- forward,
67
- Animated.timing(progress, {
68
- toValue: startProgress,
69
- duration,
70
- easing: Easing.linear,
71
- useNativeDriver: false,
72
- }),
73
- ]))
74
- : Animated.loop(forward);
75
- animation.start();
76
- return () => animation.stop();
77
- }, [visible, direction, reducedMotion, progress]);
78
- if (!visible || props.containerWidth <= 0 || props.containerHeight <= 0) {
79
- return null;
80
- }
81
- const size = ENHANCED_SMART_SELFIE_ANIMATION_SIZE;
82
- const ovalCenterY = props.containerHeight * FaceOvalDefaults.ovalCenterYRatio;
83
- return (_jsx(View, { pointerEvents: "none", style: {
84
- position: "absolute",
85
- left: (props.containerWidth - size) / 2,
86
- top: ovalCenterY - size / 2 + VERTICAL_ALIGNMENT_OFFSET,
87
- width: size,
88
- height: size,
89
- }, testID: "si_ess_direction_animation", children: _jsx(AnimatedLottieView, { source: ALL_DIRECTIONS_ANIMATION, progress: progress, style: { width: "100%", height: "100%" } }) }));
90
- }
91
- //# sourceMappingURL=use_smile_id_enhanced_smart_selfie_animation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use_smile_id_enhanced_smart_selfie_animation.js","sourceRoot":"","sources":["../../../src/presentation/components/use_smile_id_enhanced_smart_selfie_animation.tsx"],"names":[],"mappings":"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"}