@smileid/usesmileid 12.0.0-beta01 → 12.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (556) hide show
  1. package/CHANGELOG.md +15 -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/exception/agent_mode_with_enhanced_liveness_exception.d.ts +11 -0
  12. package/dist/core/exception/agent_mode_with_enhanced_liveness_exception.d.ts.map +1 -0
  13. package/dist/core/exception/agent_mode_with_enhanced_liveness_exception.js +17 -0
  14. package/dist/core/exception/agent_mode_with_enhanced_liveness_exception.js.map +1 -0
  15. package/dist/core/exception/capture_validation_exceptions.d.ts +1 -0
  16. package/dist/core/exception/capture_validation_exceptions.d.ts.map +1 -1
  17. package/dist/core/exception/capture_validation_exceptions.js +1 -0
  18. package/dist/core/exception/capture_validation_exceptions.js.map +1 -1
  19. package/dist/core/exception/index.d.ts +1 -0
  20. package/dist/core/exception/index.d.ts.map +1 -1
  21. package/dist/core/exception/index.js +1 -0
  22. package/dist/core/exception/index.js.map +1 -1
  23. package/dist/core/exception/use_smile_id_error_code.d.ts +1 -0
  24. package/dist/core/exception/use_smile_id_error_code.d.ts.map +1 -1
  25. package/dist/core/exception/use_smile_id_error_code.js +1 -0
  26. package/dist/core/exception/use_smile_id_error_code.js.map +1 -1
  27. package/dist/core/models/config.d.ts +19 -0
  28. package/dist/core/models/config.d.ts.map +1 -1
  29. package/dist/core/models/document_capture_mode.d.ts +8 -0
  30. package/dist/core/models/document_capture_mode.d.ts.map +1 -1
  31. package/dist/core/models/document_capture_mode.js +24 -0
  32. package/dist/core/models/document_capture_mode.js.map +1 -1
  33. package/dist/core/models/document_type.d.ts +2 -2
  34. package/dist/core/models/document_type.d.ts.map +1 -1
  35. package/dist/core/models/document_type.js +7 -5
  36. package/dist/core/models/document_type.js.map +1 -1
  37. package/dist/core/models/global_privacy_control.d.ts +36 -0
  38. package/dist/core/models/global_privacy_control.d.ts.map +1 -0
  39. package/dist/core/models/global_privacy_control.js +39 -0
  40. package/dist/core/models/global_privacy_control.js.map +1 -0
  41. package/dist/core/models/network_config.d.ts +2 -2
  42. package/dist/core/models/network_config.js +2 -2
  43. package/dist/core/models/result.d.ts +9 -8
  44. package/dist/core/models/result.d.ts.map +1 -1
  45. package/dist/core/models/result.js +5 -6
  46. package/dist/core/models/result.js.map +1 -1
  47. package/dist/data/api/interceptors/smile_auth_interceptor.d.ts.map +1 -1
  48. package/dist/data/api/interceptors/smile_auth_interceptor.js +3 -17
  49. package/dist/data/api/interceptors/smile_auth_interceptor.js.map +1 -1
  50. package/dist/data/api/interceptors/smile_integrity_interceptor.d.ts +11 -0
  51. package/dist/data/api/interceptors/smile_integrity_interceptor.d.ts.map +1 -1
  52. package/dist/data/api/interceptors/smile_integrity_interceptor.js +13 -0
  53. package/dist/data/api/interceptors/smile_integrity_interceptor.js.map +1 -1
  54. package/dist/data/api/interceptors/smile_request_mac_interceptor.d.ts +8 -0
  55. package/dist/data/api/interceptors/smile_request_mac_interceptor.d.ts.map +1 -1
  56. package/dist/data/api/interceptors/smile_request_mac_interceptor.js +11 -0
  57. package/dist/data/api/interceptors/smile_request_mac_interceptor.js.map +1 -1
  58. package/dist/data/api/smile_id_api.d.ts +1 -1
  59. package/dist/data/api/smile_id_api.d.ts.map +1 -1
  60. package/dist/data/compression/compressible_asset.d.ts +41 -0
  61. package/dist/data/compression/compressible_asset.d.ts.map +1 -0
  62. package/dist/data/compression/compressible_asset.js +34 -0
  63. package/dist/data/compression/compressible_asset.js.map +1 -0
  64. package/dist/data/compression/payload_compression_config.d.ts +36 -0
  65. package/dist/data/compression/payload_compression_config.d.ts.map +1 -0
  66. package/dist/data/compression/payload_compression_config.js +52 -0
  67. package/dist/data/compression/payload_compression_config.js.map +1 -0
  68. package/dist/data/compression/payload_compression_runner.d.ts +29 -0
  69. package/dist/data/compression/payload_compression_runner.d.ts.map +1 -0
  70. package/dist/data/compression/payload_compression_runner.js +55 -0
  71. package/dist/data/compression/payload_compression_runner.js.map +1 -0
  72. package/dist/data/compression/payload_compressor.d.ts +40 -0
  73. package/dist/data/compression/payload_compressor.d.ts.map +1 -0
  74. package/dist/data/compression/payload_compressor.js +126 -0
  75. package/dist/data/compression/payload_compressor.js.map +1 -0
  76. package/dist/data/compression/uri_compressible_asset.d.ts +23 -0
  77. package/dist/data/compression/uri_compressible_asset.d.ts.map +1 -0
  78. package/dist/data/compression/uri_compressible_asset.js +77 -0
  79. package/dist/data/compression/uri_compressible_asset.js.map +1 -0
  80. package/dist/data/dsl/builder/cache_config_builder.d.ts +2 -1
  81. package/dist/data/dsl/builder/cache_config_builder.d.ts.map +1 -1
  82. package/dist/data/dsl/builder/cache_config_builder.js +2 -1
  83. package/dist/data/dsl/builder/cache_config_builder.js.map +1 -1
  84. package/dist/data/dsl/builder/config_builder.d.ts +40 -14
  85. package/dist/data/dsl/builder/config_builder.d.ts.map +1 -1
  86. package/dist/data/dsl/builder/config_builder.js +40 -14
  87. package/dist/data/dsl/builder/config_builder.js.map +1 -1
  88. package/dist/data/dsl/builder/interceptor_config_builder.d.ts +9 -7
  89. package/dist/data/dsl/builder/interceptor_config_builder.d.ts.map +1 -1
  90. package/dist/data/dsl/builder/interceptor_config_builder.js +9 -7
  91. package/dist/data/dsl/builder/interceptor_config_builder.js.map +1 -1
  92. package/dist/data/dsl/builder/retry_config_builder.d.ts +19 -4
  93. package/dist/data/dsl/builder/retry_config_builder.d.ts.map +1 -1
  94. package/dist/data/dsl/builder/retry_config_builder.js +21 -6
  95. package/dist/data/dsl/builder/retry_config_builder.js.map +1 -1
  96. package/dist/data/dsl/builder/timeout_config_builder.d.ts +4 -0
  97. package/dist/data/dsl/builder/timeout_config_builder.d.ts.map +1 -1
  98. package/dist/data/dsl/builder/timeout_config_builder.js +4 -0
  99. package/dist/data/dsl/builder/timeout_config_builder.js.map +1 -1
  100. package/dist/data/dsl/use_smile_id_network_builder.d.ts +17 -0
  101. package/dist/data/dsl/use_smile_id_network_builder.d.ts.map +1 -1
  102. package/dist/data/dsl/use_smile_id_network_builder.js +17 -0
  103. package/dist/data/dsl/use_smile_id_network_builder.js.map +1 -1
  104. package/dist/data/factory/networking_factory.d.ts.map +1 -1
  105. package/dist/data/factory/networking_factory.js +11 -1
  106. package/dist/data/factory/networking_factory.js.map +1 -1
  107. package/dist/data/repository/use_smile_id_repository_impl.d.ts +6 -0
  108. package/dist/data/repository/use_smile_id_repository_impl.d.ts.map +1 -1
  109. package/dist/data/repository/use_smile_id_repository_impl.js +82 -8
  110. package/dist/data/repository/use_smile_id_repository_impl.js.map +1 -1
  111. package/dist/data/security/request_canonicalizer.d.ts.map +1 -1
  112. package/dist/data/security/request_canonicalizer.js +14 -2
  113. package/dist/data/security/request_canonicalizer.js.map +1 -1
  114. package/dist/data/security/security_policy.d.ts +43 -0
  115. package/dist/data/security/security_policy.d.ts.map +1 -0
  116. package/dist/data/security/security_policy.js +61 -0
  117. package/dist/data/security/security_policy.js.map +1 -0
  118. package/dist/data/smile_id_urls.d.ts +1 -1
  119. package/dist/data/smile_id_urls.js +1 -1
  120. package/dist/data/smile_id_urls.js.map +1 -1
  121. package/dist/data/util/retry_util.d.ts +2 -2
  122. package/dist/data/util/retry_util.d.ts.map +1 -1
  123. package/dist/data/util/retry_util.js +7 -1
  124. package/dist/data/util/retry_util.js.map +1 -1
  125. package/dist/data/util/use_smile_id_token_decoder.d.ts +22 -0
  126. package/dist/data/util/use_smile_id_token_decoder.d.ts.map +1 -1
  127. package/dist/data/util/use_smile_id_token_decoder.js +58 -24
  128. package/dist/data/util/use_smile_id_token_decoder.js.map +1 -1
  129. package/dist/index.d.ts +2 -2
  130. package/dist/index.d.ts.map +1 -1
  131. package/dist/index.js +2 -2
  132. package/dist/index.js.map +1 -1
  133. package/dist/l10n/strings_en.d.ts +2 -1
  134. package/dist/l10n/strings_en.d.ts.map +1 -1
  135. package/dist/l10n/strings_en.js +2 -1
  136. package/dist/l10n/strings_en.js.map +1 -1
  137. package/dist/l10n/use_smile_id_localizations.d.ts +1 -0
  138. package/dist/l10n/use_smile_id_localizations.d.ts.map +1 -1
  139. package/dist/l10n/use_smile_id_localizations.js +3 -0
  140. package/dist/l10n/use_smile_id_localizations.js.map +1 -1
  141. package/dist/metadata/builder_configuration.d.ts +44 -0
  142. package/dist/metadata/builder_configuration.d.ts.map +1 -0
  143. package/dist/metadata/builder_configuration.js +35 -0
  144. package/dist/metadata/builder_configuration.js.map +1 -0
  145. package/dist/metadata/captured_image_properties.d.ts +11 -0
  146. package/dist/metadata/captured_image_properties.d.ts.map +1 -0
  147. package/dist/metadata/captured_image_properties.js +11 -0
  148. package/dist/metadata/captured_image_properties.js.map +1 -0
  149. package/dist/metadata/device_orientation_collector.d.ts +17 -0
  150. package/dist/metadata/device_orientation_collector.d.ts.map +1 -0
  151. package/dist/metadata/device_orientation_collector.js +66 -0
  152. package/dist/metadata/device_orientation_collector.js.map +1 -0
  153. package/dist/metadata/geolocation.d.ts +20 -0
  154. package/dist/metadata/geolocation.d.ts.map +1 -0
  155. package/dist/metadata/geolocation.js +40 -0
  156. package/dist/metadata/geolocation.js.map +1 -0
  157. package/dist/metadata/metadata_configuration_mappers.d.ts +47 -0
  158. package/dist/metadata/metadata_configuration_mappers.d.ts.map +1 -0
  159. package/dist/metadata/metadata_configuration_mappers.js +178 -0
  160. package/dist/metadata/metadata_configuration_mappers.js.map +1 -0
  161. package/dist/metadata/model_configuration.d.ts +41 -0
  162. package/dist/metadata/model_configuration.d.ts.map +1 -0
  163. package/dist/metadata/model_configuration.js +44 -0
  164. package/dist/metadata/model_configuration.js.map +1 -0
  165. package/dist/metadata/optional_native_modules.d.ts +79 -3
  166. package/dist/metadata/optional_native_modules.d.ts.map +1 -1
  167. package/dist/metadata/optional_native_modules.js +108 -3
  168. package/dist/metadata/optional_native_modules.js.map +1 -1
  169. package/dist/metadata/use_smile_id_metadata.d.ts +45 -7
  170. package/dist/metadata/use_smile_id_metadata.d.ts.map +1 -1
  171. package/dist/metadata/use_smile_id_metadata.js +85 -13
  172. package/dist/metadata/use_smile_id_metadata.js.map +1 -1
  173. package/dist/metadata/use_smile_id_metadata_factory.d.ts +37 -0
  174. package/dist/metadata/use_smile_id_metadata_factory.d.ts.map +1 -1
  175. package/dist/metadata/use_smile_id_metadata_factory.js +197 -16
  176. package/dist/metadata/use_smile_id_metadata_factory.js.map +1 -1
  177. package/dist/presentation/assets/svg/document_shimmer_strings.d.ts +14 -0
  178. package/dist/presentation/assets/svg/document_shimmer_strings.d.ts.map +1 -0
  179. package/dist/presentation/assets/svg/document_shimmer_strings.js +14 -0
  180. package/dist/presentation/assets/svg/document_shimmer_strings.js.map +1 -0
  181. package/dist/presentation/assets/svg/instruction_svg_strings.d.ts +12 -4
  182. package/dist/presentation/assets/svg/instruction_svg_strings.d.ts.map +1 -1
  183. package/dist/presentation/assets/svg/instruction_svg_strings.js +19 -8
  184. package/dist/presentation/assets/svg/instruction_svg_strings.js.map +1 -1
  185. package/dist/presentation/components/helpers/enhanced_smart_selfie_animation_frames.d.ts +0 -5
  186. package/dist/presentation/components/helpers/enhanced_smart_selfie_animation_frames.d.ts.map +1 -1
  187. package/dist/presentation/components/helpers/enhanced_smart_selfie_animation_frames.js +0 -5
  188. package/dist/presentation/components/helpers/enhanced_smart_selfie_animation_frames.js.map +1 -1
  189. package/dist/presentation/components/icons/index.d.ts +24 -8
  190. package/dist/presentation/components/icons/index.d.ts.map +1 -1
  191. package/dist/presentation/components/icons/index.js +31 -11
  192. package/dist/presentation/components/icons/index.js.map +1 -1
  193. package/dist/presentation/components/use_smile_id_attribution.d.ts +1 -1
  194. package/dist/presentation/components/use_smile_id_button.d.ts +2 -2
  195. package/dist/presentation/components/use_smile_id_button.js +4 -4
  196. package/dist/presentation/components/use_smile_id_button.js.map +1 -1
  197. package/dist/presentation/components/use_smile_id_capture_content.d.ts +13 -0
  198. package/dist/presentation/components/use_smile_id_capture_content.d.ts.map +1 -1
  199. package/dist/presentation/components/use_smile_id_capture_content.js +15 -9
  200. package/dist/presentation/components/use_smile_id_capture_content.js.map +1 -1
  201. package/dist/presentation/components/use_smile_id_captured_document_image.d.ts +2 -3
  202. package/dist/presentation/components/use_smile_id_captured_document_image.d.ts.map +1 -1
  203. package/dist/presentation/components/use_smile_id_captured_document_image.js +1 -3
  204. package/dist/presentation/components/use_smile_id_captured_document_image.js.map +1 -1
  205. package/dist/presentation/components/use_smile_id_document_capture_controls.d.ts +12 -6
  206. package/dist/presentation/components/use_smile_id_document_capture_controls.d.ts.map +1 -1
  207. package/dist/presentation/components/use_smile_id_document_capture_controls.js +59 -16
  208. package/dist/presentation/components/use_smile_id_document_capture_controls.js.map +1 -1
  209. package/dist/presentation/components/use_smile_id_document_overlay.d.ts +22 -5
  210. package/dist/presentation/components/use_smile_id_document_overlay.d.ts.map +1 -1
  211. package/dist/presentation/components/use_smile_id_document_overlay.js +80 -40
  212. package/dist/presentation/components/use_smile_id_document_overlay.js.map +1 -1
  213. package/dist/presentation/components/use_smile_id_document_shimmer.d.ts +15 -0
  214. package/dist/presentation/components/use_smile_id_document_shimmer.d.ts.map +1 -0
  215. package/dist/presentation/components/use_smile_id_document_shimmer.js +23 -0
  216. package/dist/presentation/components/use_smile_id_document_shimmer.js.map +1 -0
  217. package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_clip.d.ts +5 -2
  218. package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_clip.d.ts.map +1 -1
  219. package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_clip.js +9 -6
  220. package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_clip.js.map +1 -1
  221. package/dist/presentation/components/use_smile_id_guideline_thumbnail.d.ts.map +1 -1
  222. package/dist/presentation/components/use_smile_id_guideline_thumbnail.js +84 -1
  223. package/dist/presentation/components/use_smile_id_guideline_thumbnail.js.map +1 -1
  224. package/dist/presentation/components/use_smile_id_instructions_hero.d.ts +3 -1
  225. package/dist/presentation/components/use_smile_id_instructions_hero.d.ts.map +1 -1
  226. package/dist/presentation/components/use_smile_id_instructions_hero.js +25 -5
  227. package/dist/presentation/components/use_smile_id_instructions_hero.js.map +1 -1
  228. package/dist/presentation/components/use_smile_id_oval_border_palette.d.ts.map +1 -1
  229. package/dist/presentation/components/use_smile_id_oval_border_palette.js +7 -3
  230. package/dist/presentation/components/use_smile_id_oval_border_palette.js.map +1 -1
  231. package/dist/presentation/flow/dsl/builder/config_builder.d.ts +28 -0
  232. package/dist/presentation/flow/dsl/builder/config_builder.d.ts.map +1 -1
  233. package/dist/presentation/flow/dsl/builder/config_builder.js +30 -0
  234. package/dist/presentation/flow/dsl/builder/config_builder.js.map +1 -1
  235. package/dist/presentation/flow/dsl/builder/ml_builder.d.ts +13 -4
  236. package/dist/presentation/flow/dsl/builder/ml_builder.d.ts.map +1 -1
  237. package/dist/presentation/flow/dsl/builder/ml_builder.js +3 -2
  238. package/dist/presentation/flow/dsl/builder/ml_builder.js.map +1 -1
  239. package/dist/presentation/flow/dsl/builder/screens_builder.d.ts +110 -12
  240. package/dist/presentation/flow/dsl/builder/screens_builder.d.ts.map +1 -1
  241. package/dist/presentation/flow/dsl/builder/screens_builder.js +110 -12
  242. package/dist/presentation/flow/dsl/builder/screens_builder.js.map +1 -1
  243. package/dist/presentation/flow/dsl/builder/theme_builder.d.ts +15 -2
  244. package/dist/presentation/flow/dsl/builder/theme_builder.d.ts.map +1 -1
  245. package/dist/presentation/flow/dsl/builder/theme_builder.js +15 -2
  246. package/dist/presentation/flow/dsl/builder/theme_builder.js.map +1 -1
  247. package/dist/presentation/flow/dsl/use_smile_id_builder.d.ts +6 -4
  248. package/dist/presentation/flow/dsl/use_smile_id_builder.d.ts.map +1 -1
  249. package/dist/presentation/flow/dsl/use_smile_id_builder.js.map +1 -1
  250. package/dist/presentation/flow/dsl/use_smile_id_flow_builder.d.ts +62 -36
  251. package/dist/presentation/flow/dsl/use_smile_id_flow_builder.d.ts.map +1 -1
  252. package/dist/presentation/flow/dsl/use_smile_id_flow_builder.js +62 -36
  253. package/dist/presentation/flow/dsl/use_smile_id_flow_builder.js.map +1 -1
  254. package/dist/presentation/flow/flow_navigation_manager.d.ts +44 -5
  255. package/dist/presentation/flow/flow_navigation_manager.d.ts.map +1 -1
  256. package/dist/presentation/flow/flow_navigation_manager.js +148 -11
  257. package/dist/presentation/flow/flow_navigation_manager.js.map +1 -1
  258. package/dist/presentation/flow/model/instruction_guideline.d.ts +9 -0
  259. package/dist/presentation/flow/model/instruction_guideline.d.ts.map +1 -1
  260. package/dist/presentation/flow/model/instructions_defaults.d.ts +11 -2
  261. package/dist/presentation/flow/model/instructions_defaults.d.ts.map +1 -1
  262. package/dist/presentation/flow/model/instructions_defaults.js +74 -26
  263. package/dist/presentation/flow/model/instructions_defaults.js.map +1 -1
  264. package/dist/presentation/flow/screen/orchestrated_capture_screen.d.ts.map +1 -1
  265. package/dist/presentation/flow/screen/orchestrated_capture_screen.js +48 -14
  266. package/dist/presentation/flow/screen/orchestrated_capture_screen.js.map +1 -1
  267. package/dist/presentation/flow/screen/orchestrated_consent_screen.d.ts.map +1 -1
  268. package/dist/presentation/flow/screen/orchestrated_consent_screen.js +3 -1
  269. package/dist/presentation/flow/screen/orchestrated_consent_screen.js.map +1 -1
  270. package/dist/presentation/flow/screen/orchestrated_instructions_screen.js +1 -1
  271. package/dist/presentation/flow/screen/orchestrated_instructions_screen.js.map +1 -1
  272. package/dist/presentation/flow/screen/orchestrated_preview_screen.d.ts.map +1 -1
  273. package/dist/presentation/flow/screen/orchestrated_preview_screen.js +3 -9
  274. package/dist/presentation/flow/screen/orchestrated_preview_screen.js.map +1 -1
  275. package/dist/presentation/flow/screen/orchestrated_processing_screen.js +3 -3
  276. package/dist/presentation/flow/screen/orchestrated_processing_screen.js.map +1 -1
  277. package/dist/presentation/flow/use_smile_id_flow.d.ts.map +1 -1
  278. package/dist/presentation/flow/use_smile_id_flow.js +10 -4
  279. package/dist/presentation/flow/use_smile_id_flow.js.map +1 -1
  280. package/dist/presentation/flow/validation/flow_validator.d.ts.map +1 -1
  281. package/dist/presentation/flow/validation/flow_validator.js +42 -20
  282. package/dist/presentation/flow/validation/flow_validator.js.map +1 -1
  283. package/dist/presentation/flow/validation/job_type_validator.d.ts.map +1 -1
  284. package/dist/presentation/flow/validation/job_type_validator.js +14 -0
  285. package/dist/presentation/flow/validation/job_type_validator.js.map +1 -1
  286. package/dist/presentation/screen/helpers/capture_screen_helpers.d.ts.map +1 -1
  287. package/dist/presentation/screen/helpers/capture_screen_helpers.js +1 -0
  288. package/dist/presentation/screen/helpers/capture_screen_helpers.js.map +1 -1
  289. package/dist/presentation/screen/helpers/capture_ui_state.d.ts +6 -6
  290. package/dist/presentation/screen/helpers/capture_ui_state.d.ts.map +1 -1
  291. package/dist/presentation/screen/helpers/capture_ui_state.js +19 -19
  292. package/dist/presentation/screen/helpers/capture_ui_state.js.map +1 -1
  293. package/dist/presentation/screen/helpers/ess_turn_haptics.d.ts +2 -2
  294. package/dist/presentation/screen/helpers/ess_turn_haptics.d.ts.map +1 -1
  295. package/dist/presentation/screen/helpers/ess_turn_haptics.js +6 -6
  296. package/dist/presentation/screen/helpers/ess_turn_haptics.js.map +1 -1
  297. package/dist/presentation/screen/helpers/instructions_screen_helpers.d.ts +1 -0
  298. package/dist/presentation/screen/helpers/instructions_screen_helpers.d.ts.map +1 -1
  299. package/dist/presentation/screen/helpers/instructions_screen_helpers.js +6 -2
  300. package/dist/presentation/screen/helpers/instructions_screen_helpers.js.map +1 -1
  301. package/dist/presentation/screen/helpers/scan_state_to_overlay_state.d.ts +5 -5
  302. package/dist/presentation/screen/helpers/scan_state_to_overlay_state.d.ts.map +1 -1
  303. package/dist/presentation/screen/helpers/scan_state_to_overlay_state.js +14 -11
  304. package/dist/presentation/screen/helpers/scan_state_to_overlay_state.js.map +1 -1
  305. package/dist/presentation/screen/helpers/use_capture_orientation_lock.d.ts +13 -3
  306. package/dist/presentation/screen/helpers/use_capture_orientation_lock.d.ts.map +1 -1
  307. package/dist/presentation/screen/helpers/use_capture_orientation_lock.js +48 -6
  308. package/dist/presentation/screen/helpers/use_capture_orientation_lock.js.map +1 -1
  309. package/dist/presentation/screen/use_smile_id_capture_screen.d.ts +21 -3
  310. package/dist/presentation/screen/use_smile_id_capture_screen.d.ts.map +1 -1
  311. package/dist/presentation/screen/use_smile_id_capture_screen.js +188 -32
  312. package/dist/presentation/screen/use_smile_id_capture_screen.js.map +1 -1
  313. package/dist/presentation/screen/use_smile_id_consent_screen.d.ts +7 -0
  314. package/dist/presentation/screen/use_smile_id_consent_screen.d.ts.map +1 -1
  315. package/dist/presentation/screen/use_smile_id_consent_screen.js +6 -5
  316. package/dist/presentation/screen/use_smile_id_consent_screen.js.map +1 -1
  317. package/dist/presentation/screen/use_smile_id_document_back_instructions.d.ts.map +1 -1
  318. package/dist/presentation/screen/use_smile_id_document_back_instructions.js +5 -13
  319. package/dist/presentation/screen/use_smile_id_document_back_instructions.js.map +1 -1
  320. package/dist/presentation/screen/use_smile_id_document_preview_screen.d.ts +2 -3
  321. package/dist/presentation/screen/use_smile_id_document_preview_screen.d.ts.map +1 -1
  322. package/dist/presentation/screen/use_smile_id_document_preview_screen.js +17 -12
  323. package/dist/presentation/screen/use_smile_id_document_preview_screen.js.map +1 -1
  324. package/dist/presentation/screen/use_smile_id_instructions_screen.d.ts +2 -0
  325. package/dist/presentation/screen/use_smile_id_instructions_screen.d.ts.map +1 -1
  326. package/dist/presentation/screen/use_smile_id_instructions_screen.js +2 -1
  327. package/dist/presentation/screen/use_smile_id_instructions_screen.js.map +1 -1
  328. package/dist/presentation/screen/use_smile_id_preview_screen.d.ts +7 -26
  329. package/dist/presentation/screen/use_smile_id_preview_screen.d.ts.map +1 -1
  330. package/dist/presentation/screen/use_smile_id_preview_screen.js +10 -20
  331. package/dist/presentation/screen/use_smile_id_preview_screen.js.map +1 -1
  332. package/dist/presentation/screen/use_smile_id_processing_screen.d.ts +2 -3
  333. package/dist/presentation/screen/use_smile_id_processing_screen.d.ts.map +1 -1
  334. package/dist/presentation/screen/use_smile_id_processing_screen.js +4 -3
  335. package/dist/presentation/screen/use_smile_id_processing_screen.js.map +1 -1
  336. package/dist/presentation/theme/theme.d.ts +1 -1
  337. package/dist/presentation/theme/theme.d.ts.map +1 -1
  338. package/dist/presentation/theme/theme.js +20 -18
  339. package/dist/presentation/theme/theme.js.map +1 -1
  340. package/dist/presentation/utils/force_max_brightness.d.ts +4 -4
  341. package/dist/presentation/utils/locale_utils.d.ts +10 -4
  342. package/dist/presentation/utils/locale_utils.d.ts.map +1 -1
  343. package/dist/presentation/utils/locale_utils.js +13 -5
  344. package/dist/presentation/utils/locale_utils.js.map +1 -1
  345. package/dist/testing/fake_face_analyzer.d.ts +43 -0
  346. package/dist/testing/fake_face_analyzer.d.ts.map +1 -0
  347. package/dist/testing/fake_face_analyzer.js +52 -0
  348. package/dist/testing/fake_face_analyzer.js.map +1 -0
  349. package/dist/testing/index.d.ts +5 -0
  350. package/dist/testing/index.d.ts.map +1 -0
  351. package/dist/testing/index.js +7 -0
  352. package/dist/testing/index.js.map +1 -0
  353. package/dist/testing/scenario_expectations.d.ts +28 -0
  354. package/dist/testing/scenario_expectations.d.ts.map +1 -0
  355. package/dist/testing/scenario_expectations.js +65 -0
  356. package/dist/testing/scenario_expectations.js.map +1 -0
  357. package/dist/testing/scenario_loader.d.ts +11 -0
  358. package/dist/testing/scenario_loader.d.ts.map +1 -0
  359. package/dist/testing/scenario_loader.js +64 -0
  360. package/dist/testing/scenario_loader.js.map +1 -0
  361. package/dist/testing/scripted_scan_results.d.ts +17 -0
  362. package/dist/testing/scripted_scan_results.d.ts.map +1 -0
  363. package/dist/testing/scripted_scan_results.js +52 -0
  364. package/dist/testing/scripted_scan_results.js.map +1 -0
  365. package/package.json +34 -7
  366. package/src/__tests__/dsl.test.ts +51 -1
  367. package/src/__tests__/react_native_mock.tsx +8 -0
  368. package/src/__tests__/setup_react_native.ts +17 -2
  369. package/src/__tests__/snapshots/__snapshots__/screens_structural.test.tsx.snap +5261 -0
  370. package/src/__tests__/snapshots/screens_structural.test.tsx +230 -0
  371. package/src/camera/__tests__/use_smile_id_camera_system.test.ts +103 -0
  372. package/src/camera/camera_defaults.ts +11 -9
  373. package/src/camera/orientation_degrees.ts +5 -6
  374. package/src/core/exception/__tests__/builder_validation_exceptions.test.ts +67 -0
  375. package/src/core/exception/agent_mode_with_enhanced_liveness_exception.ts +20 -0
  376. package/src/core/exception/capture_validation_exceptions.ts +1 -0
  377. package/src/core/exception/index.ts +1 -0
  378. package/src/core/exception/use_smile_id_error_code.ts +1 -0
  379. package/src/core/models/__tests__/document_type.test.ts +7 -5
  380. package/src/core/models/__tests__/flow_models.test.ts +26 -0
  381. package/src/core/models/config.ts +22 -0
  382. package/src/core/models/document_capture_mode.ts +27 -0
  383. package/src/core/models/document_type.ts +7 -5
  384. package/src/core/models/global_privacy_control.ts +45 -0
  385. package/src/core/models/network_config.ts +2 -2
  386. package/src/core/models/result.ts +9 -8
  387. package/src/data/api/__tests__/smile_id_api.test.ts +1 -1
  388. package/src/data/api/interceptors/__tests__/gzip_interceptor.test.ts +83 -0
  389. package/src/data/api/interceptors/__tests__/smile_integrity_interceptor.test.ts +37 -1
  390. package/src/data/api/interceptors/__tests__/smile_request_mac_interceptor.test.ts +59 -1
  391. package/src/data/api/interceptors/smile_auth_interceptor.ts +3 -18
  392. package/src/data/api/interceptors/smile_integrity_interceptor.ts +20 -0
  393. package/src/data/api/interceptors/smile_request_mac_interceptor.ts +13 -0
  394. package/src/data/compression/__tests__/payload_compressor.test.ts +200 -0
  395. package/src/data/compression/__tests__/payload_compressor_real_jpeg.test.ts +226 -0
  396. package/src/data/compression/compressible_asset.ts +62 -0
  397. package/src/data/compression/payload_compression_config.ts +53 -0
  398. package/src/data/compression/payload_compression_runner.ts +102 -0
  399. package/src/data/compression/payload_compressor.ts +164 -0
  400. package/src/data/compression/uri_compressible_asset.ts +85 -0
  401. package/src/data/dsl/builder/__tests__/config_builders.test.ts +62 -0
  402. package/src/data/dsl/builder/cache_config_builder.ts +3 -1
  403. package/src/data/dsl/builder/config_builder.ts +45 -14
  404. package/src/data/dsl/builder/interceptor_config_builder.ts +9 -7
  405. package/src/data/dsl/builder/retry_config_builder.ts +27 -6
  406. package/src/data/dsl/builder/timeout_config_builder.ts +7 -0
  407. package/src/data/dsl/use_smile_id_network_builder.ts +17 -0
  408. package/src/data/factory/__tests__/retry_gzip_mac_composition.test.ts +163 -0
  409. package/src/data/factory/__tests__/signed_job_submission_headers.test.ts +1 -1
  410. package/src/data/factory/networking_factory.ts +14 -1
  411. package/src/data/repository/__tests__/network_retries.test.ts +117 -0
  412. package/src/data/repository/__tests__/use_smile_id_repository.test.ts +1 -1
  413. package/src/data/repository/use_smile_id_repository_impl.ts +96 -9
  414. package/src/data/security/__tests__/request_canonicalizer.test.ts +132 -0
  415. package/src/data/security/__tests__/security_policy.test.ts +96 -0
  416. package/src/data/security/__tests__/smile_id_crypto_manager.test.ts +18 -0
  417. package/src/data/security/request_canonicalizer.ts +15 -2
  418. package/src/data/security/security_policy.ts +70 -0
  419. package/src/data/smile_id_urls.ts +1 -1
  420. package/src/data/util/__tests__/retry_util.test.ts +25 -0
  421. package/src/data/util/__tests__/use_smile_id_token_decoder.test.ts +57 -1
  422. package/src/data/util/retry_util.ts +12 -3
  423. package/src/data/util/use_smile_id_token_decoder.ts +76 -28
  424. package/src/index.ts +6 -4
  425. package/src/l10n/strings_en.ts +2 -1
  426. package/src/l10n/use_smile_id_localizations.ts +3 -0
  427. package/src/metadata/__tests__/device_orientation_collector.test.ts +15 -0
  428. package/src/metadata/__tests__/metadata_configuration_mappers.test.ts +254 -0
  429. package/src/metadata/__tests__/metadata_configuration_objects.test.ts +86 -0
  430. package/src/metadata/__tests__/metadata_device_context.test.ts +147 -0
  431. package/src/metadata/__tests__/metadata_device_os_android.test.ts +18 -0
  432. package/src/metadata/__tests__/metadata_golden_fixture.json +13 -0
  433. package/src/metadata/__tests__/metadata_payload_golden.test.ts +193 -0
  434. package/src/metadata/__tests__/use_smile_id_metadata.test.ts +19 -25
  435. package/src/metadata/builder_configuration.ts +69 -0
  436. package/src/metadata/captured_image_properties.ts +10 -0
  437. package/src/metadata/device_orientation_collector.ts +75 -0
  438. package/src/metadata/geolocation.ts +46 -0
  439. package/src/metadata/metadata_configuration_mappers.ts +248 -0
  440. package/src/metadata/model_configuration.ts +68 -0
  441. package/src/metadata/optional_native_modules.ts +157 -3
  442. package/src/metadata/use_smile_id_metadata.ts +140 -17
  443. package/src/metadata/use_smile_id_metadata_factory.ts +211 -16
  444. package/src/presentation/assets/si_document_green_book_hero_animation.json +1 -4668
  445. package/src/presentation/assets/si_document_hero_animation.json +1 -4799
  446. package/src/presentation/assets/si_document_hero_back_animation.json +1 -2039
  447. package/src/presentation/assets/si_document_passport_hero_animation.json +1 -14491
  448. package/src/presentation/assets/si_ess_all_directions_hero_animation.json +1 -0
  449. package/src/presentation/assets/si_ess_animation_all_directions.json +1 -5575
  450. package/src/presentation/assets/si_selfie_hero_animation.json +1 -1439
  451. package/src/presentation/assets/si_smile_to_capture_animation.json +1 -1439
  452. package/src/presentation/assets/svg/document_shimmer_strings.ts +17 -0
  453. package/src/presentation/assets/svg/instruction_svg_strings.ts +34 -12
  454. package/src/presentation/components/__tests__/enhanced_smart_selfie_animation_frames.test.ts +1 -3
  455. package/src/presentation/components/__tests__/use_smile_id_enhanced_smart_selfie_clip.test.tsx +12 -8
  456. package/src/presentation/components/__tests__/use_smile_id_guideline_thumbnail.test.tsx +34 -1
  457. package/src/presentation/components/__tests__/use_smile_id_instructions_hero.test.tsx +71 -0
  458. package/src/presentation/components/__tests__/use_smile_id_oval_border_palette.test.ts +7 -5
  459. package/src/presentation/components/helpers/enhanced_smart_selfie_animation_frames.ts +0 -6
  460. package/src/presentation/components/icons/index.tsx +65 -18
  461. package/src/presentation/components/use_smile_id_attribution.tsx +1 -1
  462. package/src/presentation/components/use_smile_id_button.tsx +4 -4
  463. package/src/presentation/components/use_smile_id_capture_content.tsx +36 -12
  464. package/src/presentation/components/use_smile_id_captured_document_image.tsx +3 -8
  465. package/src/presentation/components/use_smile_id_document_capture_controls.tsx +103 -39
  466. package/src/presentation/components/use_smile_id_document_overlay.tsx +134 -44
  467. package/src/presentation/components/use_smile_id_document_shimmer.tsx +51 -0
  468. package/src/presentation/components/use_smile_id_enhanced_smart_selfie_clip.tsx +9 -6
  469. package/src/presentation/components/use_smile_id_guideline_thumbnail.tsx +131 -2
  470. package/src/presentation/components/use_smile_id_instructions_hero.tsx +111 -60
  471. package/src/presentation/components/use_smile_id_oval_border_palette.ts +7 -3
  472. package/src/presentation/flow/__tests__/document_flow_navigation.test.ts +203 -4
  473. package/src/presentation/flow/__tests__/flow_navigation_manager.test.ts +49 -0
  474. package/src/presentation/flow/dsl/builder/__tests__/config_builder.test.ts +25 -0
  475. package/src/presentation/flow/dsl/builder/config_builder.ts +35 -0
  476. package/src/presentation/flow/dsl/builder/ml_builder.ts +13 -4
  477. package/src/presentation/flow/dsl/builder/screens_builder.ts +110 -12
  478. package/src/presentation/flow/dsl/builder/theme_builder.ts +19 -2
  479. package/src/presentation/flow/dsl/use_smile_id_builder.tsx +6 -4
  480. package/src/presentation/flow/dsl/use_smile_id_flow_builder.ts +62 -36
  481. package/src/presentation/flow/flow_navigation_manager.ts +185 -14
  482. package/src/presentation/flow/model/instruction_guideline.ts +6 -0
  483. package/src/presentation/flow/model/instructions_defaults.ts +104 -26
  484. package/src/presentation/flow/screen/orchestrated_capture_screen.tsx +60 -12
  485. package/src/presentation/flow/screen/orchestrated_consent_screen.tsx +5 -0
  486. package/src/presentation/flow/screen/orchestrated_instructions_screen.tsx +1 -0
  487. package/src/presentation/flow/screen/orchestrated_preview_screen.tsx +4 -14
  488. package/src/presentation/flow/screen/orchestrated_processing_screen.tsx +3 -3
  489. package/src/presentation/flow/use_smile_id_flow.tsx +11 -4
  490. package/src/presentation/flow/validation/__tests__/flow_validator.test.ts +61 -1
  491. package/src/presentation/flow/validation/__tests__/job_type_validator.test.ts +64 -0
  492. package/src/presentation/flow/validation/flow_validator.ts +55 -26
  493. package/src/presentation/flow/validation/job_type_validator.ts +24 -0
  494. package/src/presentation/screen/__tests__/capture_ui_state.test.ts +66 -47
  495. package/src/presentation/screen/__tests__/ess_turn_haptics.test.ts +15 -11
  496. package/src/presentation/screen/__tests__/instructions_screen_helpers.test.ts +15 -3
  497. package/src/presentation/screen/__tests__/scan_state_to_overlay_state.test.ts +47 -27
  498. package/src/presentation/screen/__tests__/use_smile_id_capture_screen.test.tsx +182 -18
  499. package/src/presentation/screen/__tests__/use_smile_id_document_back_instructions.test.tsx +1 -1
  500. package/src/presentation/screen/__tests__/use_smile_id_preview_screen.test.tsx +10 -40
  501. package/src/presentation/screen/helpers/__tests__/use_capture_orientation_lock.test.tsx +212 -0
  502. package/src/presentation/screen/helpers/capture_screen_helpers.ts +1 -0
  503. package/src/presentation/screen/helpers/capture_ui_state.ts +27 -27
  504. package/src/presentation/screen/helpers/ess_turn_haptics.ts +9 -9
  505. package/src/presentation/screen/helpers/instructions_screen_helpers.ts +7 -2
  506. package/src/presentation/screen/helpers/scan_state_to_overlay_state.ts +16 -13
  507. package/src/presentation/screen/helpers/use_capture_orientation_lock.ts +69 -7
  508. package/src/presentation/screen/use_smile_id_capture_screen.tsx +280 -54
  509. package/src/presentation/screen/use_smile_id_consent_screen.tsx +16 -5
  510. package/src/presentation/screen/use_smile_id_document_back_instructions.tsx +14 -23
  511. package/src/presentation/screen/use_smile_id_document_preview_screen.tsx +33 -23
  512. package/src/presentation/screen/use_smile_id_instructions_screen.tsx +4 -0
  513. package/src/presentation/screen/use_smile_id_preview_screen.tsx +21 -53
  514. package/src/presentation/screen/use_smile_id_processing_screen.tsx +8 -8
  515. package/src/presentation/theme/theme.ts +21 -19
  516. package/src/presentation/utils/__tests__/locale_utils.test.ts +46 -5
  517. package/src/presentation/utils/force_max_brightness.tsx +4 -4
  518. package/src/presentation/utils/locale_utils.ts +13 -4
  519. package/src/testing/__tests__/fake_face_analyzer.test.ts +42 -0
  520. package/src/testing/__tests__/scenario_expectations.test.ts +110 -0
  521. package/src/testing/__tests__/scenario_loader.test.ts +64 -0
  522. package/src/testing/fake_face_analyzer.ts +82 -0
  523. package/src/testing/index.ts +15 -0
  524. package/src/testing/scenario_expectations.ts +87 -0
  525. package/src/testing/scenario_loader.ts +83 -0
  526. package/src/testing/scripted_scan_results.ts +66 -0
  527. package/dist/camera/frame_processor_plugin.d.ts +0 -28
  528. package/dist/camera/frame_processor_plugin.d.ts.map +0 -1
  529. package/dist/camera/frame_processor_plugin.js +0 -21
  530. package/dist/camera/frame_processor_plugin.js.map +0 -1
  531. package/dist/camera/use_smile_id_frame_processor.d.ts +0 -38
  532. package/dist/camera/use_smile_id_frame_processor.d.ts.map +0 -1
  533. package/dist/camera/use_smile_id_frame_processor.js +0 -2
  534. package/dist/camera/use_smile_id_frame_processor.js.map +0 -1
  535. package/dist/presentation/components/use_smile_id_document_frame_glyph.d.ts +0 -17
  536. package/dist/presentation/components/use_smile_id_document_frame_glyph.d.ts.map +0 -1
  537. package/dist/presentation/components/use_smile_id_document_frame_glyph.js +0 -17
  538. package/dist/presentation/components/use_smile_id_document_frame_glyph.js.map +0 -1
  539. package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_animation.d.ts +0 -24
  540. package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_animation.d.ts.map +0 -1
  541. package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_animation.js +0 -91
  542. package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_animation.js.map +0 -1
  543. package/dist/presentation/components/use_smile_id_face_silhouette_overlay.d.ts +0 -15
  544. package/dist/presentation/components/use_smile_id_face_silhouette_overlay.d.ts.map +0 -1
  545. package/dist/presentation/components/use_smile_id_face_silhouette_overlay.js +0 -19
  546. package/dist/presentation/components/use_smile_id_face_silhouette_overlay.js.map +0 -1
  547. package/dist/presentation/components/use_smile_id_instruction_card.d.ts +0 -31
  548. package/dist/presentation/components/use_smile_id_instruction_card.d.ts.map +0 -1
  549. package/dist/presentation/components/use_smile_id_instruction_card.js +0 -43
  550. package/dist/presentation/components/use_smile_id_instruction_card.js.map +0 -1
  551. package/dist/presentation/screen/helpers/use_document_orientation_lock.d.ts +0 -24
  552. package/dist/presentation/screen/helpers/use_document_orientation_lock.d.ts.map +0 -1
  553. package/dist/presentation/screen/helpers/use_document_orientation_lock.js +0 -47
  554. package/dist/presentation/screen/helpers/use_document_orientation_lock.js.map +0 -1
  555. package/src/presentation/components/use_smile_id_document_frame_glyph.tsx +0 -162
  556. package/src/presentation/components/use_smile_id_face_silhouette_overlay.tsx +0 -27
@@ -26,6 +26,7 @@ import { UseSmileIDLearnMoreContent } from "../components/use_smile_id_learn_mor
26
26
  import { UseSmileIDPartnerIcon } from "../components/use_smile_id_partner_icon";
27
27
  import { UseSmileIDRoundedCheckbox } from "../components/use_smile_id_rounded_checkbox";
28
28
  import { useUseSmileIDLocalizations } from "../../l10n/use_smile_id_localizations_provider";
29
+ import { GlobalPrivacyControl } from "../../core/models/global_privacy_control";
29
30
  import { getDefaultConsentState, getDeviceLocale } from "../utils/locale_utils";
30
31
  import {
31
32
  buildConsentRows,
@@ -59,6 +60,12 @@ export type UseSmileIDConsentScreenProps = {
59
60
  readonly showAttribution?: boolean;
60
61
  readonly onAllow?: (info: ConsentInformation) => void;
61
62
  readonly onDeny?: () => void;
63
+ /**
64
+ * Partner-declared consent posture; seeds the checkbox's initial state
65
+ * via `getDefaultConsentState`. Defaults to the universal opt-out
66
+ * baseline (`GlobalPrivacyControl.OptOut`).
67
+ */
68
+ readonly globalPrivacyControl?: GlobalPrivacyControl;
62
69
  readonly theme?: UseSmileIDTheme;
63
70
  /**
64
71
  * Render the bottom-pinned Allow button via a partner-supplied
@@ -107,11 +114,15 @@ export function UseSmileIDConsentScreen(props: UseSmileIDConsentScreenProps) {
107
114
  const loc = useUseSmileIDLocalizations();
108
115
  const showAttribution = props.showAttribution ?? true;
109
116
 
110
- // Locale-aware default: ticked outside the EU (`true`), unticked
111
- // inside (`false`) to honour GDPR opt-in. `getDefaultConsentState()`
112
- // reads the resolved BCP-47 locale and checks the country segment
113
- // against the EU member-state set.
114
- const [consented, setConsented] = useState(() => getDefaultConsentState());
117
+ const globalPrivacyControl =
118
+ props.globalPrivacyControl ?? GlobalPrivacyControl.OptOut;
119
+
120
+ // Posture-aware default: the opt-out baseline starts ticked everywhere;
121
+ // the legacy opt-in posture consults the resolved BCP-47 locale and
122
+ // starts unticked for EU member states (GDPR opt-in).
123
+ const [consented, setConsented] = useState(() =>
124
+ getDefaultConsentState(globalPrivacyControl),
125
+ );
115
126
  const [learnMoreOpen, setLearnMoreOpen] = useState(false);
116
127
 
117
128
  const subtitleParts = composeConsentSubtitleParts(props.partnerName, loc);
@@ -1,7 +1,8 @@
1
- import { Pressable, StyleSheet, Text, View } from "react-native";
1
+ import { StyleSheet, Text, View } from "react-native";
2
2
  import { SafeAreaView } from "react-native-safe-area-context";
3
3
  import type { UseSmileIDTheme } from "../theme/theme";
4
4
  import { useUseSmileIDTheme } from "../theme/theme_context";
5
+ import { UseSmileIDAttribution } from "../components/use_smile_id_attribution";
5
6
  import { UseSmileIDBackButton } from "../components/use_smile_id_back_button";
6
7
  import { UseSmileIDButton } from "../components/use_smile_id_button";
7
8
  import { UseSmileIDInstructionsHero } from "../components/use_smile_id_instructions_hero";
@@ -48,7 +49,7 @@ export function UseSmileIDDocumentBackInstructions(
48
49
  styles.root,
49
50
  {
50
51
  backgroundColor: theme.colors.background,
51
- paddingHorizontal: theme.spacing.large,
52
+ paddingHorizontal: theme.spacing.medium,
52
53
  paddingVertical: theme.spacing.medium,
53
54
  },
54
55
  ]}
@@ -70,12 +71,15 @@ export function UseSmileIDDocumentBackInstructions(
70
71
  ...theme.typography.pageHeading,
71
72
  fontWeight: "800",
72
73
  color: theme.colors.titleText,
74
+ textAlign: "center",
73
75
  }}
74
76
  testID="si_document_back_instructions_title"
75
77
  >
76
78
  {localizations.siDocumentFlipTitle(props.documentTypeDisplayName)}
77
79
  </Text>
78
80
 
81
+ <View style={{ height: theme.spacing.medium }} />
82
+
79
83
  <View style={styles.hero} testID="si_document_back_instructions_hero">
80
84
  <UseSmileIDInstructionsHero
81
85
  source={heroSource}
@@ -98,24 +102,17 @@ export function UseSmileIDDocumentBackInstructions(
98
102
  {allowSkip ? (
99
103
  <>
100
104
  <View style={{ height: theme.spacing.small }} />
101
- <Pressable
102
- onPress={onSkip}
103
- accessibilityRole="button"
105
+ <UseSmileIDButton
106
+ label={localizations.siDocumentSkipBack}
107
+ onClick={onSkip}
108
+ variant="secondary"
109
+ theme={theme}
104
110
  testID="si_document_skip_back_button"
105
- style={styles.skip}
106
- >
107
- <Text
108
- style={{
109
- ...theme.typography.button,
110
- color: theme.colors.primary,
111
- textAlign: "center",
112
- }}
113
- >
114
- {localizations.siDocumentSkipBack}
115
- </Text>
116
- </Pressable>
111
+ />
117
112
  </>
118
113
  ) : null}
114
+ <View style={{ height: theme.spacing.small }} />
115
+ <UseSmileIDAttribution theme={theme} />
119
116
  </View>
120
117
  </SafeAreaView>
121
118
  );
@@ -125,10 +122,4 @@ const styles = StyleSheet.create({
125
122
  root: { flex: 1 },
126
123
  hero: { flex: 1 },
127
124
  bottom: { alignItems: "center" },
128
- skip: {
129
- height: 48,
130
- alignItems: "center",
131
- justifyContent: "center",
132
- alignSelf: "stretch",
133
- },
134
125
  });
@@ -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,12 +40,14 @@ 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
- { backgroundColor: theme.colors.captureReviewBackground },
50
+ { backgroundColor: theme.colors.background },
47
51
  ]}
48
52
  testID="si_document_preview_screen"
49
53
  >
@@ -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
 
@@ -1,4 +1,4 @@
1
- import { useState, type ReactNode } from "react";
1
+ import { useState } from "react";
2
2
  import { StyleSheet, Text, View, type LayoutChangeEvent } from "react-native";
3
3
  import { SafeAreaView } from "react-native-safe-area-context";
4
4
  import type { UseSmileIDTheme } from "../theme/theme";
@@ -16,33 +16,19 @@ export type UseSmileIDPreviewScreenProps = {
16
16
  readonly showAttribution?: boolean;
17
17
  readonly onAccept?: () => void;
18
18
  readonly onReject?: () => void;
19
- /**
20
- * Render the Accept button via a partner-supplied slot.
21
- *
22
- * **Slot contract:** providing *any* slot (continue or cancel)
23
- * replaces the *entire* default confirmation row. If you supply
24
- * `continueButton` and want a Retake control too, supply
25
- * `cancelButton` as well — the default Retake tile does not
26
- * fall through.
27
- */
28
- readonly continueButton?: (props: { onClick: () => void }) => ReactNode;
29
- /**
30
- * Render the Reject (retake) button via a partner-supplied slot.
31
- * See the slot contract note on `continueButton`.
32
- */
33
- readonly cancelButton?: (props: { onClick: () => void }) => ReactNode;
34
19
  readonly theme?: UseSmileIDTheme;
35
20
  };
36
21
 
37
22
  /**
38
23
  * Preview screen — confirms the captured selfie before submission.
39
24
  *
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.
25
+ * - Uniform page (`background`, theme-following) with the
26
+ * captured image clipped to the face oval. The oval scales to the
27
+ * leftover height above the card so the two never overlap; no scrim
28
+ * is painted.
29
+ * - Bottom card (theme card surface, rounded, soft upward shadow) with
30
+ * the title "Confirm image quality", a caption, and the Retake /
31
+ * Confirm tiles.
46
32
  * - Attribution sits centered below the card.
47
33
  */
48
34
  export function UseSmileIDPreviewScreen(props: UseSmileIDPreviewScreenProps) {
@@ -73,15 +59,12 @@ export function UseSmileIDPreviewScreen(props: UseSmileIDPreviewScreenProps) {
73
59
  if (state.canRetake) props.onReject?.();
74
60
  };
75
61
 
76
- const customContinue = props.continueButton;
77
- const customCancel = props.cancelButton;
78
- const hasSlots = Boolean(customContinue || customCancel);
79
-
80
62
  return (
81
63
  <SafeAreaView
64
+ edges={["left", "right", "bottom"]}
82
65
  style={[
83
66
  styles.root,
84
- { backgroundColor: theme.colors.captureReviewBackground },
67
+ { backgroundColor: theme.colors.background },
85
68
  ]}
86
69
  testID="si_preview_screen"
87
70
  onLayout={onScreenLayout}
@@ -120,29 +103,20 @@ export function UseSmileIDPreviewScreen(props: UseSmileIDPreviewScreenProps) {
120
103
  {loc.siPreviewSubtitle}
121
104
  </Text>
122
105
  <View style={{ marginTop: theme.spacing.medium }}>
123
- {hasSlots ? (
124
- <View style={styles.buttonRow}>
125
- {customCancel ? customCancel({ onClick: handleReject }) : null}
126
- {customContinue
127
- ? customContinue({ onClick: handleAccept })
128
- : null}
129
- </View>
130
- ) : (
131
- <UseSmileIDConfirmationButtons
132
- onAccept={handleAccept}
133
- onReject={handleReject}
134
- acceptLabel={loc.siPreviewConfirm}
135
- rejectLabel={loc.siPreviewRetake}
136
- theme={theme}
137
- testID="si_preview_confirmation_buttons"
138
- />
139
- )}
106
+ {/* The confirm/retake buttons are the fixed icon pair and are not
107
+ customisable. */}
108
+ <UseSmileIDConfirmationButtons
109
+ onAccept={handleAccept}
110
+ onReject={handleReject}
111
+ acceptLabel={loc.siPreviewConfirm}
112
+ rejectLabel={loc.siPreviewRetake}
113
+ theme={theme}
114
+ testID="si_preview_confirmation_buttons"
115
+ />
140
116
  </View>
141
117
  </UseSmileIDCardSurface>
142
118
 
143
- {showAttribution ? (
144
- <UseSmileIDAttribution forceLightMode theme={theme} />
145
- ) : null}
119
+ {showAttribution ? <UseSmileIDAttribution theme={theme} /> : null}
146
120
  </SafeAreaView>
147
121
  );
148
122
  }
@@ -150,10 +124,4 @@ export function UseSmileIDPreviewScreen(props: UseSmileIDPreviewScreenProps) {
150
124
  const styles = StyleSheet.create({
151
125
  root: { flex: 1, overflow: "hidden" },
152
126
  card: { alignItems: "center" },
153
- buttonRow: {
154
- flexDirection: "row",
155
- alignSelf: "stretch",
156
- justifyContent: "space-between",
157
- alignItems: "center",
158
- },
159
127
  });
@@ -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;
@@ -110,14 +110,16 @@ export function UseSmileIDProcessingScreen(
110
110
  <SafeAreaView
111
111
  style={[
112
112
  styles.root,
113
- { backgroundColor: theme.colors.captureReviewBackground },
113
+ { backgroundColor: theme.colors.background },
114
114
  ]}
115
115
  testID="si_processing_screen"
116
116
  onLayout={onScreenLayout}
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
  },
@@ -1,37 +1,78 @@
1
1
  import { describe, expect, it } from "vitest";
2
2
 
3
+ import {
4
+ GlobalPrivacyControl,
5
+ globalPrivacyControlFromWire,
6
+ GLOBAL_PRIVACY_CONTROL_WIRE_KEY,
7
+ } from "../../../core/models/global_privacy_control";
3
8
  import { getDefaultConsentState, isDeviceLocaleInEU } from "../locale_utils";
4
9
 
5
10
  describe("locale_utils", () => {
6
11
  it("EU locale (de-DE) is recognised as EU and default consent is false", () => {
7
12
  expect(isDeviceLocaleInEU("de-DE")).toBe(true);
8
- expect(getDefaultConsentState("de-DE")).toBe(false);
13
+ expect(getDefaultConsentState(GlobalPrivacyControl.OptIn, "de-DE")).toBe(
14
+ false,
15
+ );
9
16
  });
10
17
 
11
18
  it("non-EU locale (en-US) is not EU and default consent is true", () => {
12
19
  expect(isDeviceLocaleInEU("en-US")).toBe(false);
13
- expect(getDefaultConsentState("en-US")).toBe(true);
20
+ expect(getDefaultConsentState(GlobalPrivacyControl.OptIn, "en-US")).toBe(
21
+ true,
22
+ );
14
23
  });
15
24
 
16
25
  it("EU locale (fr-FR) is recognised as EU and default consent is false", () => {
17
26
  expect(isDeviceLocaleInEU("fr-FR")).toBe(true);
18
- expect(getDefaultConsentState("fr-FR")).toBe(false);
27
+ expect(getDefaultConsentState(GlobalPrivacyControl.OptIn, "fr-FR")).toBe(
28
+ false,
29
+ );
19
30
  });
20
31
 
21
32
  it("non-EU locale (en-NG) is not EU and default consent is true", () => {
22
33
  expect(isDeviceLocaleInEU("en-NG")).toBe(false);
23
- expect(getDefaultConsentState("en-NG")).toBe(true);
34
+ expect(getDefaultConsentState(GlobalPrivacyControl.OptIn, "en-NG")).toBe(
35
+ true,
36
+ );
24
37
  });
25
38
 
26
39
  it("bare language tag with no region falls back to non-EU", () => {
27
40
  // `"fr"` has no region segment — the BCP-47 split returns
28
41
  // undefined for the country, which never matches the EU set.
29
42
  expect(isDeviceLocaleInEU("fr")).toBe(false);
30
- expect(getDefaultConsentState("fr")).toBe(true);
43
+ expect(getDefaultConsentState(GlobalPrivacyControl.OptIn, "fr")).toBe(true);
31
44
  });
32
45
 
33
46
  it("empty locale string falls back to non-EU", () => {
34
47
  expect(isDeviceLocaleInEU("")).toBe(false);
35
48
  expect(getDefaultConsentState("")).toBe(true);
36
49
  });
50
+
51
+ describe("global privacy control", () => {
52
+ it("default posture forces opt-out even for EU locales", () => {
53
+ expect(getDefaultConsentState()).toBe(true);
54
+ expect(getDefaultConsentState(GlobalPrivacyControl.OptOut, "de-DE")).toBe(
55
+ true,
56
+ );
57
+ expect(getDefaultConsentState(GlobalPrivacyControl.OptOut, "en-NG")).toBe(
58
+ true,
59
+ );
60
+ });
61
+
62
+ it("parses wire values and defaults unknowns to opt-out", () => {
63
+ expect(globalPrivacyControlFromWire("opt-out")).toBe(
64
+ GlobalPrivacyControl.OptOut,
65
+ );
66
+ expect(globalPrivacyControlFromWire("opt-in")).toBe(
67
+ GlobalPrivacyControl.OptIn,
68
+ );
69
+ expect(globalPrivacyControlFromWire(null)).toBe(
70
+ GlobalPrivacyControl.OptOut,
71
+ );
72
+ expect(globalPrivacyControlFromWire("user_settings")).toBe(
73
+ GlobalPrivacyControl.OptOut,
74
+ );
75
+ expect(GLOBAL_PRIVACY_CONTROL_WIRE_KEY).toBe("global_privacy_control");
76
+ });
77
+ });
37
78
  });
@@ -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
  }