@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.
- package/CHANGELOG.md +15 -0
- package/README.md +701 -89
- package/dist/camera/camera_defaults.d.ts +14 -9
- package/dist/camera/camera_defaults.d.ts.map +1 -1
- package/dist/camera/camera_defaults.js +11 -9
- package/dist/camera/camera_defaults.js.map +1 -1
- package/dist/camera/orientation_degrees.d.ts +5 -6
- package/dist/camera/orientation_degrees.d.ts.map +1 -1
- package/dist/camera/orientation_degrees.js +5 -6
- package/dist/camera/orientation_degrees.js.map +1 -1
- package/dist/core/exception/agent_mode_with_enhanced_liveness_exception.d.ts +11 -0
- package/dist/core/exception/agent_mode_with_enhanced_liveness_exception.d.ts.map +1 -0
- package/dist/core/exception/agent_mode_with_enhanced_liveness_exception.js +17 -0
- package/dist/core/exception/agent_mode_with_enhanced_liveness_exception.js.map +1 -0
- package/dist/core/exception/capture_validation_exceptions.d.ts +1 -0
- package/dist/core/exception/capture_validation_exceptions.d.ts.map +1 -1
- package/dist/core/exception/capture_validation_exceptions.js +1 -0
- package/dist/core/exception/capture_validation_exceptions.js.map +1 -1
- package/dist/core/exception/index.d.ts +1 -0
- package/dist/core/exception/index.d.ts.map +1 -1
- package/dist/core/exception/index.js +1 -0
- package/dist/core/exception/index.js.map +1 -1
- package/dist/core/exception/use_smile_id_error_code.d.ts +1 -0
- package/dist/core/exception/use_smile_id_error_code.d.ts.map +1 -1
- package/dist/core/exception/use_smile_id_error_code.js +1 -0
- package/dist/core/exception/use_smile_id_error_code.js.map +1 -1
- package/dist/core/models/config.d.ts +19 -0
- package/dist/core/models/config.d.ts.map +1 -1
- package/dist/core/models/document_capture_mode.d.ts +8 -0
- package/dist/core/models/document_capture_mode.d.ts.map +1 -1
- package/dist/core/models/document_capture_mode.js +24 -0
- package/dist/core/models/document_capture_mode.js.map +1 -1
- package/dist/core/models/document_type.d.ts +2 -2
- package/dist/core/models/document_type.d.ts.map +1 -1
- package/dist/core/models/document_type.js +7 -5
- package/dist/core/models/document_type.js.map +1 -1
- package/dist/core/models/global_privacy_control.d.ts +36 -0
- package/dist/core/models/global_privacy_control.d.ts.map +1 -0
- package/dist/core/models/global_privacy_control.js +39 -0
- package/dist/core/models/global_privacy_control.js.map +1 -0
- package/dist/core/models/network_config.d.ts +2 -2
- package/dist/core/models/network_config.js +2 -2
- package/dist/core/models/result.d.ts +9 -8
- package/dist/core/models/result.d.ts.map +1 -1
- package/dist/core/models/result.js +5 -6
- package/dist/core/models/result.js.map +1 -1
- package/dist/data/api/interceptors/smile_auth_interceptor.d.ts.map +1 -1
- package/dist/data/api/interceptors/smile_auth_interceptor.js +3 -17
- package/dist/data/api/interceptors/smile_auth_interceptor.js.map +1 -1
- package/dist/data/api/interceptors/smile_integrity_interceptor.d.ts +11 -0
- package/dist/data/api/interceptors/smile_integrity_interceptor.d.ts.map +1 -1
- package/dist/data/api/interceptors/smile_integrity_interceptor.js +13 -0
- package/dist/data/api/interceptors/smile_integrity_interceptor.js.map +1 -1
- package/dist/data/api/interceptors/smile_request_mac_interceptor.d.ts +8 -0
- package/dist/data/api/interceptors/smile_request_mac_interceptor.d.ts.map +1 -1
- package/dist/data/api/interceptors/smile_request_mac_interceptor.js +11 -0
- package/dist/data/api/interceptors/smile_request_mac_interceptor.js.map +1 -1
- package/dist/data/api/smile_id_api.d.ts +1 -1
- package/dist/data/api/smile_id_api.d.ts.map +1 -1
- package/dist/data/compression/compressible_asset.d.ts +41 -0
- package/dist/data/compression/compressible_asset.d.ts.map +1 -0
- package/dist/data/compression/compressible_asset.js +34 -0
- package/dist/data/compression/compressible_asset.js.map +1 -0
- package/dist/data/compression/payload_compression_config.d.ts +36 -0
- package/dist/data/compression/payload_compression_config.d.ts.map +1 -0
- package/dist/data/compression/payload_compression_config.js +52 -0
- package/dist/data/compression/payload_compression_config.js.map +1 -0
- package/dist/data/compression/payload_compression_runner.d.ts +29 -0
- package/dist/data/compression/payload_compression_runner.d.ts.map +1 -0
- package/dist/data/compression/payload_compression_runner.js +55 -0
- package/dist/data/compression/payload_compression_runner.js.map +1 -0
- package/dist/data/compression/payload_compressor.d.ts +40 -0
- package/dist/data/compression/payload_compressor.d.ts.map +1 -0
- package/dist/data/compression/payload_compressor.js +126 -0
- package/dist/data/compression/payload_compressor.js.map +1 -0
- package/dist/data/compression/uri_compressible_asset.d.ts +23 -0
- package/dist/data/compression/uri_compressible_asset.d.ts.map +1 -0
- package/dist/data/compression/uri_compressible_asset.js +77 -0
- package/dist/data/compression/uri_compressible_asset.js.map +1 -0
- package/dist/data/dsl/builder/cache_config_builder.d.ts +2 -1
- package/dist/data/dsl/builder/cache_config_builder.d.ts.map +1 -1
- package/dist/data/dsl/builder/cache_config_builder.js +2 -1
- package/dist/data/dsl/builder/cache_config_builder.js.map +1 -1
- package/dist/data/dsl/builder/config_builder.d.ts +40 -14
- package/dist/data/dsl/builder/config_builder.d.ts.map +1 -1
- package/dist/data/dsl/builder/config_builder.js +40 -14
- package/dist/data/dsl/builder/config_builder.js.map +1 -1
- package/dist/data/dsl/builder/interceptor_config_builder.d.ts +9 -7
- package/dist/data/dsl/builder/interceptor_config_builder.d.ts.map +1 -1
- package/dist/data/dsl/builder/interceptor_config_builder.js +9 -7
- package/dist/data/dsl/builder/interceptor_config_builder.js.map +1 -1
- package/dist/data/dsl/builder/retry_config_builder.d.ts +19 -4
- package/dist/data/dsl/builder/retry_config_builder.d.ts.map +1 -1
- package/dist/data/dsl/builder/retry_config_builder.js +21 -6
- package/dist/data/dsl/builder/retry_config_builder.js.map +1 -1
- package/dist/data/dsl/builder/timeout_config_builder.d.ts +4 -0
- package/dist/data/dsl/builder/timeout_config_builder.d.ts.map +1 -1
- package/dist/data/dsl/builder/timeout_config_builder.js +4 -0
- package/dist/data/dsl/builder/timeout_config_builder.js.map +1 -1
- package/dist/data/dsl/use_smile_id_network_builder.d.ts +17 -0
- package/dist/data/dsl/use_smile_id_network_builder.d.ts.map +1 -1
- package/dist/data/dsl/use_smile_id_network_builder.js +17 -0
- package/dist/data/dsl/use_smile_id_network_builder.js.map +1 -1
- package/dist/data/factory/networking_factory.d.ts.map +1 -1
- package/dist/data/factory/networking_factory.js +11 -1
- package/dist/data/factory/networking_factory.js.map +1 -1
- package/dist/data/repository/use_smile_id_repository_impl.d.ts +6 -0
- package/dist/data/repository/use_smile_id_repository_impl.d.ts.map +1 -1
- package/dist/data/repository/use_smile_id_repository_impl.js +82 -8
- package/dist/data/repository/use_smile_id_repository_impl.js.map +1 -1
- package/dist/data/security/request_canonicalizer.d.ts.map +1 -1
- package/dist/data/security/request_canonicalizer.js +14 -2
- package/dist/data/security/request_canonicalizer.js.map +1 -1
- package/dist/data/security/security_policy.d.ts +43 -0
- package/dist/data/security/security_policy.d.ts.map +1 -0
- package/dist/data/security/security_policy.js +61 -0
- package/dist/data/security/security_policy.js.map +1 -0
- package/dist/data/smile_id_urls.d.ts +1 -1
- package/dist/data/smile_id_urls.js +1 -1
- package/dist/data/smile_id_urls.js.map +1 -1
- package/dist/data/util/retry_util.d.ts +2 -2
- package/dist/data/util/retry_util.d.ts.map +1 -1
- package/dist/data/util/retry_util.js +7 -1
- package/dist/data/util/retry_util.js.map +1 -1
- package/dist/data/util/use_smile_id_token_decoder.d.ts +22 -0
- package/dist/data/util/use_smile_id_token_decoder.d.ts.map +1 -1
- package/dist/data/util/use_smile_id_token_decoder.js +58 -24
- package/dist/data/util/use_smile_id_token_decoder.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/l10n/strings_en.d.ts +2 -1
- package/dist/l10n/strings_en.d.ts.map +1 -1
- package/dist/l10n/strings_en.js +2 -1
- package/dist/l10n/strings_en.js.map +1 -1
- package/dist/l10n/use_smile_id_localizations.d.ts +1 -0
- package/dist/l10n/use_smile_id_localizations.d.ts.map +1 -1
- package/dist/l10n/use_smile_id_localizations.js +3 -0
- package/dist/l10n/use_smile_id_localizations.js.map +1 -1
- package/dist/metadata/builder_configuration.d.ts +44 -0
- package/dist/metadata/builder_configuration.d.ts.map +1 -0
- package/dist/metadata/builder_configuration.js +35 -0
- package/dist/metadata/builder_configuration.js.map +1 -0
- package/dist/metadata/captured_image_properties.d.ts +11 -0
- package/dist/metadata/captured_image_properties.d.ts.map +1 -0
- package/dist/metadata/captured_image_properties.js +11 -0
- package/dist/metadata/captured_image_properties.js.map +1 -0
- package/dist/metadata/device_orientation_collector.d.ts +17 -0
- package/dist/metadata/device_orientation_collector.d.ts.map +1 -0
- package/dist/metadata/device_orientation_collector.js +66 -0
- package/dist/metadata/device_orientation_collector.js.map +1 -0
- package/dist/metadata/geolocation.d.ts +20 -0
- package/dist/metadata/geolocation.d.ts.map +1 -0
- package/dist/metadata/geolocation.js +40 -0
- package/dist/metadata/geolocation.js.map +1 -0
- package/dist/metadata/metadata_configuration_mappers.d.ts +47 -0
- package/dist/metadata/metadata_configuration_mappers.d.ts.map +1 -0
- package/dist/metadata/metadata_configuration_mappers.js +178 -0
- package/dist/metadata/metadata_configuration_mappers.js.map +1 -0
- package/dist/metadata/model_configuration.d.ts +41 -0
- package/dist/metadata/model_configuration.d.ts.map +1 -0
- package/dist/metadata/model_configuration.js +44 -0
- package/dist/metadata/model_configuration.js.map +1 -0
- package/dist/metadata/optional_native_modules.d.ts +79 -3
- package/dist/metadata/optional_native_modules.d.ts.map +1 -1
- package/dist/metadata/optional_native_modules.js +108 -3
- package/dist/metadata/optional_native_modules.js.map +1 -1
- package/dist/metadata/use_smile_id_metadata.d.ts +45 -7
- package/dist/metadata/use_smile_id_metadata.d.ts.map +1 -1
- package/dist/metadata/use_smile_id_metadata.js +85 -13
- package/dist/metadata/use_smile_id_metadata.js.map +1 -1
- package/dist/metadata/use_smile_id_metadata_factory.d.ts +37 -0
- package/dist/metadata/use_smile_id_metadata_factory.d.ts.map +1 -1
- package/dist/metadata/use_smile_id_metadata_factory.js +197 -16
- package/dist/metadata/use_smile_id_metadata_factory.js.map +1 -1
- package/dist/presentation/assets/svg/document_shimmer_strings.d.ts +14 -0
- package/dist/presentation/assets/svg/document_shimmer_strings.d.ts.map +1 -0
- package/dist/presentation/assets/svg/document_shimmer_strings.js +14 -0
- package/dist/presentation/assets/svg/document_shimmer_strings.js.map +1 -0
- package/dist/presentation/assets/svg/instruction_svg_strings.d.ts +12 -4
- package/dist/presentation/assets/svg/instruction_svg_strings.d.ts.map +1 -1
- package/dist/presentation/assets/svg/instruction_svg_strings.js +19 -8
- package/dist/presentation/assets/svg/instruction_svg_strings.js.map +1 -1
- package/dist/presentation/components/helpers/enhanced_smart_selfie_animation_frames.d.ts +0 -5
- package/dist/presentation/components/helpers/enhanced_smart_selfie_animation_frames.d.ts.map +1 -1
- package/dist/presentation/components/helpers/enhanced_smart_selfie_animation_frames.js +0 -5
- package/dist/presentation/components/helpers/enhanced_smart_selfie_animation_frames.js.map +1 -1
- package/dist/presentation/components/icons/index.d.ts +24 -8
- package/dist/presentation/components/icons/index.d.ts.map +1 -1
- package/dist/presentation/components/icons/index.js +31 -11
- package/dist/presentation/components/icons/index.js.map +1 -1
- package/dist/presentation/components/use_smile_id_attribution.d.ts +1 -1
- package/dist/presentation/components/use_smile_id_button.d.ts +2 -2
- package/dist/presentation/components/use_smile_id_button.js +4 -4
- package/dist/presentation/components/use_smile_id_button.js.map +1 -1
- package/dist/presentation/components/use_smile_id_capture_content.d.ts +13 -0
- package/dist/presentation/components/use_smile_id_capture_content.d.ts.map +1 -1
- package/dist/presentation/components/use_smile_id_capture_content.js +15 -9
- package/dist/presentation/components/use_smile_id_capture_content.js.map +1 -1
- package/dist/presentation/components/use_smile_id_captured_document_image.d.ts +2 -3
- package/dist/presentation/components/use_smile_id_captured_document_image.d.ts.map +1 -1
- package/dist/presentation/components/use_smile_id_captured_document_image.js +1 -3
- package/dist/presentation/components/use_smile_id_captured_document_image.js.map +1 -1
- package/dist/presentation/components/use_smile_id_document_capture_controls.d.ts +12 -6
- package/dist/presentation/components/use_smile_id_document_capture_controls.d.ts.map +1 -1
- package/dist/presentation/components/use_smile_id_document_capture_controls.js +59 -16
- package/dist/presentation/components/use_smile_id_document_capture_controls.js.map +1 -1
- package/dist/presentation/components/use_smile_id_document_overlay.d.ts +22 -5
- package/dist/presentation/components/use_smile_id_document_overlay.d.ts.map +1 -1
- package/dist/presentation/components/use_smile_id_document_overlay.js +80 -40
- package/dist/presentation/components/use_smile_id_document_overlay.js.map +1 -1
- package/dist/presentation/components/use_smile_id_document_shimmer.d.ts +15 -0
- package/dist/presentation/components/use_smile_id_document_shimmer.d.ts.map +1 -0
- package/dist/presentation/components/use_smile_id_document_shimmer.js +23 -0
- package/dist/presentation/components/use_smile_id_document_shimmer.js.map +1 -0
- package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_clip.d.ts +5 -2
- package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_clip.d.ts.map +1 -1
- package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_clip.js +9 -6
- package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_clip.js.map +1 -1
- package/dist/presentation/components/use_smile_id_guideline_thumbnail.d.ts.map +1 -1
- package/dist/presentation/components/use_smile_id_guideline_thumbnail.js +84 -1
- package/dist/presentation/components/use_smile_id_guideline_thumbnail.js.map +1 -1
- package/dist/presentation/components/use_smile_id_instructions_hero.d.ts +3 -1
- package/dist/presentation/components/use_smile_id_instructions_hero.d.ts.map +1 -1
- package/dist/presentation/components/use_smile_id_instructions_hero.js +25 -5
- package/dist/presentation/components/use_smile_id_instructions_hero.js.map +1 -1
- package/dist/presentation/components/use_smile_id_oval_border_palette.d.ts.map +1 -1
- package/dist/presentation/components/use_smile_id_oval_border_palette.js +7 -3
- package/dist/presentation/components/use_smile_id_oval_border_palette.js.map +1 -1
- package/dist/presentation/flow/dsl/builder/config_builder.d.ts +28 -0
- package/dist/presentation/flow/dsl/builder/config_builder.d.ts.map +1 -1
- package/dist/presentation/flow/dsl/builder/config_builder.js +30 -0
- package/dist/presentation/flow/dsl/builder/config_builder.js.map +1 -1
- package/dist/presentation/flow/dsl/builder/ml_builder.d.ts +13 -4
- package/dist/presentation/flow/dsl/builder/ml_builder.d.ts.map +1 -1
- package/dist/presentation/flow/dsl/builder/ml_builder.js +3 -2
- package/dist/presentation/flow/dsl/builder/ml_builder.js.map +1 -1
- package/dist/presentation/flow/dsl/builder/screens_builder.d.ts +110 -12
- package/dist/presentation/flow/dsl/builder/screens_builder.d.ts.map +1 -1
- package/dist/presentation/flow/dsl/builder/screens_builder.js +110 -12
- package/dist/presentation/flow/dsl/builder/screens_builder.js.map +1 -1
- package/dist/presentation/flow/dsl/builder/theme_builder.d.ts +15 -2
- package/dist/presentation/flow/dsl/builder/theme_builder.d.ts.map +1 -1
- package/dist/presentation/flow/dsl/builder/theme_builder.js +15 -2
- package/dist/presentation/flow/dsl/builder/theme_builder.js.map +1 -1
- package/dist/presentation/flow/dsl/use_smile_id_builder.d.ts +6 -4
- package/dist/presentation/flow/dsl/use_smile_id_builder.d.ts.map +1 -1
- package/dist/presentation/flow/dsl/use_smile_id_builder.js.map +1 -1
- package/dist/presentation/flow/dsl/use_smile_id_flow_builder.d.ts +62 -36
- package/dist/presentation/flow/dsl/use_smile_id_flow_builder.d.ts.map +1 -1
- package/dist/presentation/flow/dsl/use_smile_id_flow_builder.js +62 -36
- package/dist/presentation/flow/dsl/use_smile_id_flow_builder.js.map +1 -1
- package/dist/presentation/flow/flow_navigation_manager.d.ts +44 -5
- package/dist/presentation/flow/flow_navigation_manager.d.ts.map +1 -1
- package/dist/presentation/flow/flow_navigation_manager.js +148 -11
- package/dist/presentation/flow/flow_navigation_manager.js.map +1 -1
- package/dist/presentation/flow/model/instruction_guideline.d.ts +9 -0
- package/dist/presentation/flow/model/instruction_guideline.d.ts.map +1 -1
- package/dist/presentation/flow/model/instructions_defaults.d.ts +11 -2
- package/dist/presentation/flow/model/instructions_defaults.d.ts.map +1 -1
- package/dist/presentation/flow/model/instructions_defaults.js +74 -26
- package/dist/presentation/flow/model/instructions_defaults.js.map +1 -1
- package/dist/presentation/flow/screen/orchestrated_capture_screen.d.ts.map +1 -1
- package/dist/presentation/flow/screen/orchestrated_capture_screen.js +48 -14
- package/dist/presentation/flow/screen/orchestrated_capture_screen.js.map +1 -1
- package/dist/presentation/flow/screen/orchestrated_consent_screen.d.ts.map +1 -1
- package/dist/presentation/flow/screen/orchestrated_consent_screen.js +3 -1
- package/dist/presentation/flow/screen/orchestrated_consent_screen.js.map +1 -1
- package/dist/presentation/flow/screen/orchestrated_instructions_screen.js +1 -1
- package/dist/presentation/flow/screen/orchestrated_instructions_screen.js.map +1 -1
- package/dist/presentation/flow/screen/orchestrated_preview_screen.d.ts.map +1 -1
- package/dist/presentation/flow/screen/orchestrated_preview_screen.js +3 -9
- package/dist/presentation/flow/screen/orchestrated_preview_screen.js.map +1 -1
- package/dist/presentation/flow/screen/orchestrated_processing_screen.js +3 -3
- package/dist/presentation/flow/screen/orchestrated_processing_screen.js.map +1 -1
- package/dist/presentation/flow/use_smile_id_flow.d.ts.map +1 -1
- package/dist/presentation/flow/use_smile_id_flow.js +10 -4
- package/dist/presentation/flow/use_smile_id_flow.js.map +1 -1
- package/dist/presentation/flow/validation/flow_validator.d.ts.map +1 -1
- package/dist/presentation/flow/validation/flow_validator.js +42 -20
- package/dist/presentation/flow/validation/flow_validator.js.map +1 -1
- package/dist/presentation/flow/validation/job_type_validator.d.ts.map +1 -1
- package/dist/presentation/flow/validation/job_type_validator.js +14 -0
- package/dist/presentation/flow/validation/job_type_validator.js.map +1 -1
- package/dist/presentation/screen/helpers/capture_screen_helpers.d.ts.map +1 -1
- package/dist/presentation/screen/helpers/capture_screen_helpers.js +1 -0
- package/dist/presentation/screen/helpers/capture_screen_helpers.js.map +1 -1
- package/dist/presentation/screen/helpers/capture_ui_state.d.ts +6 -6
- package/dist/presentation/screen/helpers/capture_ui_state.d.ts.map +1 -1
- package/dist/presentation/screen/helpers/capture_ui_state.js +19 -19
- package/dist/presentation/screen/helpers/capture_ui_state.js.map +1 -1
- package/dist/presentation/screen/helpers/ess_turn_haptics.d.ts +2 -2
- package/dist/presentation/screen/helpers/ess_turn_haptics.d.ts.map +1 -1
- package/dist/presentation/screen/helpers/ess_turn_haptics.js +6 -6
- package/dist/presentation/screen/helpers/ess_turn_haptics.js.map +1 -1
- package/dist/presentation/screen/helpers/instructions_screen_helpers.d.ts +1 -0
- package/dist/presentation/screen/helpers/instructions_screen_helpers.d.ts.map +1 -1
- package/dist/presentation/screen/helpers/instructions_screen_helpers.js +6 -2
- package/dist/presentation/screen/helpers/instructions_screen_helpers.js.map +1 -1
- package/dist/presentation/screen/helpers/scan_state_to_overlay_state.d.ts +5 -5
- package/dist/presentation/screen/helpers/scan_state_to_overlay_state.d.ts.map +1 -1
- package/dist/presentation/screen/helpers/scan_state_to_overlay_state.js +14 -11
- package/dist/presentation/screen/helpers/scan_state_to_overlay_state.js.map +1 -1
- package/dist/presentation/screen/helpers/use_capture_orientation_lock.d.ts +13 -3
- package/dist/presentation/screen/helpers/use_capture_orientation_lock.d.ts.map +1 -1
- package/dist/presentation/screen/helpers/use_capture_orientation_lock.js +48 -6
- package/dist/presentation/screen/helpers/use_capture_orientation_lock.js.map +1 -1
- package/dist/presentation/screen/use_smile_id_capture_screen.d.ts +21 -3
- package/dist/presentation/screen/use_smile_id_capture_screen.d.ts.map +1 -1
- package/dist/presentation/screen/use_smile_id_capture_screen.js +188 -32
- package/dist/presentation/screen/use_smile_id_capture_screen.js.map +1 -1
- package/dist/presentation/screen/use_smile_id_consent_screen.d.ts +7 -0
- package/dist/presentation/screen/use_smile_id_consent_screen.d.ts.map +1 -1
- package/dist/presentation/screen/use_smile_id_consent_screen.js +6 -5
- package/dist/presentation/screen/use_smile_id_consent_screen.js.map +1 -1
- package/dist/presentation/screen/use_smile_id_document_back_instructions.d.ts.map +1 -1
- package/dist/presentation/screen/use_smile_id_document_back_instructions.js +5 -13
- package/dist/presentation/screen/use_smile_id_document_back_instructions.js.map +1 -1
- package/dist/presentation/screen/use_smile_id_document_preview_screen.d.ts +2 -3
- package/dist/presentation/screen/use_smile_id_document_preview_screen.d.ts.map +1 -1
- package/dist/presentation/screen/use_smile_id_document_preview_screen.js +17 -12
- package/dist/presentation/screen/use_smile_id_document_preview_screen.js.map +1 -1
- package/dist/presentation/screen/use_smile_id_instructions_screen.d.ts +2 -0
- package/dist/presentation/screen/use_smile_id_instructions_screen.d.ts.map +1 -1
- package/dist/presentation/screen/use_smile_id_instructions_screen.js +2 -1
- package/dist/presentation/screen/use_smile_id_instructions_screen.js.map +1 -1
- package/dist/presentation/screen/use_smile_id_preview_screen.d.ts +7 -26
- package/dist/presentation/screen/use_smile_id_preview_screen.d.ts.map +1 -1
- package/dist/presentation/screen/use_smile_id_preview_screen.js +10 -20
- package/dist/presentation/screen/use_smile_id_preview_screen.js.map +1 -1
- package/dist/presentation/screen/use_smile_id_processing_screen.d.ts +2 -3
- package/dist/presentation/screen/use_smile_id_processing_screen.d.ts.map +1 -1
- package/dist/presentation/screen/use_smile_id_processing_screen.js +4 -3
- package/dist/presentation/screen/use_smile_id_processing_screen.js.map +1 -1
- package/dist/presentation/theme/theme.d.ts +1 -1
- package/dist/presentation/theme/theme.d.ts.map +1 -1
- package/dist/presentation/theme/theme.js +20 -18
- package/dist/presentation/theme/theme.js.map +1 -1
- package/dist/presentation/utils/force_max_brightness.d.ts +4 -4
- package/dist/presentation/utils/locale_utils.d.ts +10 -4
- package/dist/presentation/utils/locale_utils.d.ts.map +1 -1
- package/dist/presentation/utils/locale_utils.js +13 -5
- package/dist/presentation/utils/locale_utils.js.map +1 -1
- package/dist/testing/fake_face_analyzer.d.ts +43 -0
- package/dist/testing/fake_face_analyzer.d.ts.map +1 -0
- package/dist/testing/fake_face_analyzer.js +52 -0
- package/dist/testing/fake_face_analyzer.js.map +1 -0
- package/dist/testing/index.d.ts +5 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +7 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/scenario_expectations.d.ts +28 -0
- package/dist/testing/scenario_expectations.d.ts.map +1 -0
- package/dist/testing/scenario_expectations.js +65 -0
- package/dist/testing/scenario_expectations.js.map +1 -0
- package/dist/testing/scenario_loader.d.ts +11 -0
- package/dist/testing/scenario_loader.d.ts.map +1 -0
- package/dist/testing/scenario_loader.js +64 -0
- package/dist/testing/scenario_loader.js.map +1 -0
- package/dist/testing/scripted_scan_results.d.ts +17 -0
- package/dist/testing/scripted_scan_results.d.ts.map +1 -0
- package/dist/testing/scripted_scan_results.js +52 -0
- package/dist/testing/scripted_scan_results.js.map +1 -0
- package/package.json +34 -7
- package/src/__tests__/dsl.test.ts +51 -1
- package/src/__tests__/react_native_mock.tsx +8 -0
- package/src/__tests__/setup_react_native.ts +17 -2
- package/src/__tests__/snapshots/__snapshots__/screens_structural.test.tsx.snap +5261 -0
- package/src/__tests__/snapshots/screens_structural.test.tsx +230 -0
- package/src/camera/__tests__/use_smile_id_camera_system.test.ts +103 -0
- package/src/camera/camera_defaults.ts +11 -9
- package/src/camera/orientation_degrees.ts +5 -6
- package/src/core/exception/__tests__/builder_validation_exceptions.test.ts +67 -0
- package/src/core/exception/agent_mode_with_enhanced_liveness_exception.ts +20 -0
- package/src/core/exception/capture_validation_exceptions.ts +1 -0
- package/src/core/exception/index.ts +1 -0
- package/src/core/exception/use_smile_id_error_code.ts +1 -0
- package/src/core/models/__tests__/document_type.test.ts +7 -5
- package/src/core/models/__tests__/flow_models.test.ts +26 -0
- package/src/core/models/config.ts +22 -0
- package/src/core/models/document_capture_mode.ts +27 -0
- package/src/core/models/document_type.ts +7 -5
- package/src/core/models/global_privacy_control.ts +45 -0
- package/src/core/models/network_config.ts +2 -2
- package/src/core/models/result.ts +9 -8
- package/src/data/api/__tests__/smile_id_api.test.ts +1 -1
- package/src/data/api/interceptors/__tests__/gzip_interceptor.test.ts +83 -0
- package/src/data/api/interceptors/__tests__/smile_integrity_interceptor.test.ts +37 -1
- package/src/data/api/interceptors/__tests__/smile_request_mac_interceptor.test.ts +59 -1
- package/src/data/api/interceptors/smile_auth_interceptor.ts +3 -18
- package/src/data/api/interceptors/smile_integrity_interceptor.ts +20 -0
- package/src/data/api/interceptors/smile_request_mac_interceptor.ts +13 -0
- package/src/data/compression/__tests__/payload_compressor.test.ts +200 -0
- package/src/data/compression/__tests__/payload_compressor_real_jpeg.test.ts +226 -0
- package/src/data/compression/compressible_asset.ts +62 -0
- package/src/data/compression/payload_compression_config.ts +53 -0
- package/src/data/compression/payload_compression_runner.ts +102 -0
- package/src/data/compression/payload_compressor.ts +164 -0
- package/src/data/compression/uri_compressible_asset.ts +85 -0
- package/src/data/dsl/builder/__tests__/config_builders.test.ts +62 -0
- package/src/data/dsl/builder/cache_config_builder.ts +3 -1
- package/src/data/dsl/builder/config_builder.ts +45 -14
- package/src/data/dsl/builder/interceptor_config_builder.ts +9 -7
- package/src/data/dsl/builder/retry_config_builder.ts +27 -6
- package/src/data/dsl/builder/timeout_config_builder.ts +7 -0
- package/src/data/dsl/use_smile_id_network_builder.ts +17 -0
- package/src/data/factory/__tests__/retry_gzip_mac_composition.test.ts +163 -0
- package/src/data/factory/__tests__/signed_job_submission_headers.test.ts +1 -1
- package/src/data/factory/networking_factory.ts +14 -1
- package/src/data/repository/__tests__/network_retries.test.ts +117 -0
- package/src/data/repository/__tests__/use_smile_id_repository.test.ts +1 -1
- package/src/data/repository/use_smile_id_repository_impl.ts +96 -9
- package/src/data/security/__tests__/request_canonicalizer.test.ts +132 -0
- package/src/data/security/__tests__/security_policy.test.ts +96 -0
- package/src/data/security/__tests__/smile_id_crypto_manager.test.ts +18 -0
- package/src/data/security/request_canonicalizer.ts +15 -2
- package/src/data/security/security_policy.ts +70 -0
- package/src/data/smile_id_urls.ts +1 -1
- package/src/data/util/__tests__/retry_util.test.ts +25 -0
- package/src/data/util/__tests__/use_smile_id_token_decoder.test.ts +57 -1
- package/src/data/util/retry_util.ts +12 -3
- package/src/data/util/use_smile_id_token_decoder.ts +76 -28
- package/src/index.ts +6 -4
- package/src/l10n/strings_en.ts +2 -1
- package/src/l10n/use_smile_id_localizations.ts +3 -0
- package/src/metadata/__tests__/device_orientation_collector.test.ts +15 -0
- package/src/metadata/__tests__/metadata_configuration_mappers.test.ts +254 -0
- package/src/metadata/__tests__/metadata_configuration_objects.test.ts +86 -0
- package/src/metadata/__tests__/metadata_device_context.test.ts +147 -0
- package/src/metadata/__tests__/metadata_device_os_android.test.ts +18 -0
- package/src/metadata/__tests__/metadata_golden_fixture.json +13 -0
- package/src/metadata/__tests__/metadata_payload_golden.test.ts +193 -0
- package/src/metadata/__tests__/use_smile_id_metadata.test.ts +19 -25
- package/src/metadata/builder_configuration.ts +69 -0
- package/src/metadata/captured_image_properties.ts +10 -0
- package/src/metadata/device_orientation_collector.ts +75 -0
- package/src/metadata/geolocation.ts +46 -0
- package/src/metadata/metadata_configuration_mappers.ts +248 -0
- package/src/metadata/model_configuration.ts +68 -0
- package/src/metadata/optional_native_modules.ts +157 -3
- package/src/metadata/use_smile_id_metadata.ts +140 -17
- package/src/metadata/use_smile_id_metadata_factory.ts +211 -16
- package/src/presentation/assets/si_document_green_book_hero_animation.json +1 -4668
- package/src/presentation/assets/si_document_hero_animation.json +1 -4799
- package/src/presentation/assets/si_document_hero_back_animation.json +1 -2039
- package/src/presentation/assets/si_document_passport_hero_animation.json +1 -14491
- package/src/presentation/assets/si_ess_all_directions_hero_animation.json +1 -0
- package/src/presentation/assets/si_ess_animation_all_directions.json +1 -5575
- package/src/presentation/assets/si_selfie_hero_animation.json +1 -1439
- package/src/presentation/assets/si_smile_to_capture_animation.json +1 -1439
- package/src/presentation/assets/svg/document_shimmer_strings.ts +17 -0
- package/src/presentation/assets/svg/instruction_svg_strings.ts +34 -12
- package/src/presentation/components/__tests__/enhanced_smart_selfie_animation_frames.test.ts +1 -3
- package/src/presentation/components/__tests__/use_smile_id_enhanced_smart_selfie_clip.test.tsx +12 -8
- package/src/presentation/components/__tests__/use_smile_id_guideline_thumbnail.test.tsx +34 -1
- package/src/presentation/components/__tests__/use_smile_id_instructions_hero.test.tsx +71 -0
- package/src/presentation/components/__tests__/use_smile_id_oval_border_palette.test.ts +7 -5
- package/src/presentation/components/helpers/enhanced_smart_selfie_animation_frames.ts +0 -6
- package/src/presentation/components/icons/index.tsx +65 -18
- package/src/presentation/components/use_smile_id_attribution.tsx +1 -1
- package/src/presentation/components/use_smile_id_button.tsx +4 -4
- package/src/presentation/components/use_smile_id_capture_content.tsx +36 -12
- package/src/presentation/components/use_smile_id_captured_document_image.tsx +3 -8
- package/src/presentation/components/use_smile_id_document_capture_controls.tsx +103 -39
- package/src/presentation/components/use_smile_id_document_overlay.tsx +134 -44
- package/src/presentation/components/use_smile_id_document_shimmer.tsx +51 -0
- package/src/presentation/components/use_smile_id_enhanced_smart_selfie_clip.tsx +9 -6
- package/src/presentation/components/use_smile_id_guideline_thumbnail.tsx +131 -2
- package/src/presentation/components/use_smile_id_instructions_hero.tsx +111 -60
- package/src/presentation/components/use_smile_id_oval_border_palette.ts +7 -3
- package/src/presentation/flow/__tests__/document_flow_navigation.test.ts +203 -4
- package/src/presentation/flow/__tests__/flow_navigation_manager.test.ts +49 -0
- package/src/presentation/flow/dsl/builder/__tests__/config_builder.test.ts +25 -0
- package/src/presentation/flow/dsl/builder/config_builder.ts +35 -0
- package/src/presentation/flow/dsl/builder/ml_builder.ts +13 -4
- package/src/presentation/flow/dsl/builder/screens_builder.ts +110 -12
- package/src/presentation/flow/dsl/builder/theme_builder.ts +19 -2
- package/src/presentation/flow/dsl/use_smile_id_builder.tsx +6 -4
- package/src/presentation/flow/dsl/use_smile_id_flow_builder.ts +62 -36
- package/src/presentation/flow/flow_navigation_manager.ts +185 -14
- package/src/presentation/flow/model/instruction_guideline.ts +6 -0
- package/src/presentation/flow/model/instructions_defaults.ts +104 -26
- package/src/presentation/flow/screen/orchestrated_capture_screen.tsx +60 -12
- package/src/presentation/flow/screen/orchestrated_consent_screen.tsx +5 -0
- package/src/presentation/flow/screen/orchestrated_instructions_screen.tsx +1 -0
- package/src/presentation/flow/screen/orchestrated_preview_screen.tsx +4 -14
- package/src/presentation/flow/screen/orchestrated_processing_screen.tsx +3 -3
- package/src/presentation/flow/use_smile_id_flow.tsx +11 -4
- package/src/presentation/flow/validation/__tests__/flow_validator.test.ts +61 -1
- package/src/presentation/flow/validation/__tests__/job_type_validator.test.ts +64 -0
- package/src/presentation/flow/validation/flow_validator.ts +55 -26
- package/src/presentation/flow/validation/job_type_validator.ts +24 -0
- package/src/presentation/screen/__tests__/capture_ui_state.test.ts +66 -47
- package/src/presentation/screen/__tests__/ess_turn_haptics.test.ts +15 -11
- package/src/presentation/screen/__tests__/instructions_screen_helpers.test.ts +15 -3
- package/src/presentation/screen/__tests__/scan_state_to_overlay_state.test.ts +47 -27
- package/src/presentation/screen/__tests__/use_smile_id_capture_screen.test.tsx +182 -18
- package/src/presentation/screen/__tests__/use_smile_id_document_back_instructions.test.tsx +1 -1
- package/src/presentation/screen/__tests__/use_smile_id_preview_screen.test.tsx +10 -40
- package/src/presentation/screen/helpers/__tests__/use_capture_orientation_lock.test.tsx +212 -0
- package/src/presentation/screen/helpers/capture_screen_helpers.ts +1 -0
- package/src/presentation/screen/helpers/capture_ui_state.ts +27 -27
- package/src/presentation/screen/helpers/ess_turn_haptics.ts +9 -9
- package/src/presentation/screen/helpers/instructions_screen_helpers.ts +7 -2
- package/src/presentation/screen/helpers/scan_state_to_overlay_state.ts +16 -13
- package/src/presentation/screen/helpers/use_capture_orientation_lock.ts +69 -7
- package/src/presentation/screen/use_smile_id_capture_screen.tsx +280 -54
- package/src/presentation/screen/use_smile_id_consent_screen.tsx +16 -5
- package/src/presentation/screen/use_smile_id_document_back_instructions.tsx +14 -23
- package/src/presentation/screen/use_smile_id_document_preview_screen.tsx +33 -23
- package/src/presentation/screen/use_smile_id_instructions_screen.tsx +4 -0
- package/src/presentation/screen/use_smile_id_preview_screen.tsx +21 -53
- package/src/presentation/screen/use_smile_id_processing_screen.tsx +8 -8
- package/src/presentation/theme/theme.ts +21 -19
- package/src/presentation/utils/__tests__/locale_utils.test.ts +46 -5
- package/src/presentation/utils/force_max_brightness.tsx +4 -4
- package/src/presentation/utils/locale_utils.ts +13 -4
- package/src/testing/__tests__/fake_face_analyzer.test.ts +42 -0
- package/src/testing/__tests__/scenario_expectations.test.ts +110 -0
- package/src/testing/__tests__/scenario_loader.test.ts +64 -0
- package/src/testing/fake_face_analyzer.ts +82 -0
- package/src/testing/index.ts +15 -0
- package/src/testing/scenario_expectations.ts +87 -0
- package/src/testing/scenario_loader.ts +83 -0
- package/src/testing/scripted_scan_results.ts +66 -0
- package/dist/camera/frame_processor_plugin.d.ts +0 -28
- package/dist/camera/frame_processor_plugin.d.ts.map +0 -1
- package/dist/camera/frame_processor_plugin.js +0 -21
- package/dist/camera/frame_processor_plugin.js.map +0 -1
- package/dist/camera/use_smile_id_frame_processor.d.ts +0 -38
- package/dist/camera/use_smile_id_frame_processor.d.ts.map +0 -1
- package/dist/camera/use_smile_id_frame_processor.js +0 -2
- package/dist/camera/use_smile_id_frame_processor.js.map +0 -1
- package/dist/presentation/components/use_smile_id_document_frame_glyph.d.ts +0 -17
- package/dist/presentation/components/use_smile_id_document_frame_glyph.d.ts.map +0 -1
- package/dist/presentation/components/use_smile_id_document_frame_glyph.js +0 -17
- package/dist/presentation/components/use_smile_id_document_frame_glyph.js.map +0 -1
- package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_animation.d.ts +0 -24
- package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_animation.d.ts.map +0 -1
- package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_animation.js +0 -91
- package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_animation.js.map +0 -1
- package/dist/presentation/components/use_smile_id_face_silhouette_overlay.d.ts +0 -15
- package/dist/presentation/components/use_smile_id_face_silhouette_overlay.d.ts.map +0 -1
- package/dist/presentation/components/use_smile_id_face_silhouette_overlay.js +0 -19
- package/dist/presentation/components/use_smile_id_face_silhouette_overlay.js.map +0 -1
- package/dist/presentation/components/use_smile_id_instruction_card.d.ts +0 -31
- package/dist/presentation/components/use_smile_id_instruction_card.d.ts.map +0 -1
- package/dist/presentation/components/use_smile_id_instruction_card.js +0 -43
- package/dist/presentation/components/use_smile_id_instruction_card.js.map +0 -1
- package/dist/presentation/screen/helpers/use_document_orientation_lock.d.ts +0 -24
- package/dist/presentation/screen/helpers/use_document_orientation_lock.d.ts.map +0 -1
- package/dist/presentation/screen/helpers/use_document_orientation_lock.js +0 -47
- package/dist/presentation/screen/helpers/use_document_orientation_lock.js.map +0 -1
- package/src/presentation/components/use_smile_id_document_frame_glyph.tsx +0 -162
- package/src/presentation/components/use_smile_id_face_silhouette_overlay.tsx +0 -27
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Pressable, StyleSheet, View } from "react-native";
|
|
2
|
+
import { SafeAreaView } from "react-native-safe-area-context";
|
|
2
3
|
import { defaultLightTheme } from "../theme/theme";
|
|
3
|
-
import { SiGallery } from "./icons";
|
|
4
|
-
import { UseSmileIDCaptureSpinner } from "./use_smile_id_capture_spinner";
|
|
4
|
+
import { SiGallery, SiOutlineClose } from "./icons";
|
|
5
5
|
|
|
6
6
|
export type UseSmileIDDocumentCaptureControlsProps = {
|
|
7
7
|
/** Manual shutter — taps capture a still through the document pipeline. */
|
|
@@ -9,30 +9,43 @@ export type UseSmileIDDocumentCaptureControlsProps = {
|
|
|
9
9
|
/** Gallery upload — taps open the photo library to import a document. */
|
|
10
10
|
readonly showGallery: boolean;
|
|
11
11
|
/**
|
|
12
|
-
* Landscape
|
|
13
|
-
*
|
|
12
|
+
* Landscape → trailing-edge lane (✕ top, controls centred); portrait →
|
|
13
|
+
* centred bottom row (✕ in the top chrome). From the measured canvas aspect.
|
|
14
14
|
*/
|
|
15
15
|
readonly isLandscape: boolean;
|
|
16
16
|
/** Disables presses (e.g. a delivery is already in flight). */
|
|
17
17
|
readonly enabled: boolean;
|
|
18
|
-
/**
|
|
19
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Close/cancel the whole flow. Rendered at the top of the landscape lane so it
|
|
20
|
+
* shares the shutter's centre-x; in portrait the top chrome renders it instead.
|
|
21
|
+
*/
|
|
22
|
+
readonly onClose?: (() => void) | undefined;
|
|
20
23
|
readonly onManualShutter: () => void;
|
|
21
24
|
readonly onGallery: () => void;
|
|
22
25
|
/** Localized screen-reader label for the shutter (`si_cd_document_capture_shutter`). */
|
|
23
26
|
readonly shutterAccessibilityLabel: string;
|
|
24
27
|
/** Localized screen-reader label for the gallery button (`si_cd_document_gallery`). */
|
|
25
28
|
readonly galleryAccessibilityLabel: string;
|
|
29
|
+
/** Localized screen-reader label for the close button (`si_cd_close`). */
|
|
30
|
+
readonly closeAccessibilityLabel: string;
|
|
26
31
|
};
|
|
27
32
|
|
|
28
|
-
const SHUTTER_SIZE =
|
|
29
|
-
const SHUTTER_INNER_SIZE =
|
|
30
|
-
const GALLERY_SIZE =
|
|
31
|
-
const CONTROL_GAP =
|
|
33
|
+
const SHUTTER_SIZE = 64;
|
|
34
|
+
const SHUTTER_INNER_SIZE = 46;
|
|
35
|
+
const GALLERY_SIZE = 56;
|
|
36
|
+
const CONTROL_GAP = 24;
|
|
37
|
+
const CLOSE_SIZE = 40;
|
|
38
|
+
/** Trailing-edge inset for the landscape lane (spacing.large). */
|
|
39
|
+
const LANE_EDGE = 24;
|
|
40
|
+
/** Bottom inset for the portrait control row above the safe area (spacing.large). */
|
|
41
|
+
const PORTRAIT_ROW_BOTTOM = 24;
|
|
42
|
+
/** Top/bottom inset bounding the ✕ and the centred controls inside the lane. */
|
|
43
|
+
const LANE_VERTICAL_PADDING = 16;
|
|
32
44
|
|
|
33
45
|
/**
|
|
34
|
-
* Document capture controls — manual shutter + gallery upload,
|
|
35
|
-
*
|
|
46
|
+
* Document capture controls — manual shutter + gallery upload, plus the close ✕
|
|
47
|
+
* in landscape (laid out as a trailing-edge lane; portrait is a centred bottom
|
|
48
|
+
* row with the ✕ in the top chrome).
|
|
36
49
|
*/
|
|
37
50
|
export function UseSmileIDDocumentCaptureControls(
|
|
38
51
|
props: UseSmileIDDocumentCaptureControlsProps,
|
|
@@ -40,10 +53,33 @@ export function UseSmileIDDocumentCaptureControls(
|
|
|
40
53
|
// Light-palette forced: overlay is locked to light mode so brand-blue reads over the dim feed.
|
|
41
54
|
const theme = defaultLightTheme;
|
|
42
55
|
|
|
43
|
-
|
|
56
|
+
const controlsVisible = props.showManualShutter || props.showGallery;
|
|
57
|
+
// The lane keeps the ✕ even when shutter/gallery hide (during capture); portrait
|
|
58
|
+
// renders nothing here once the controls are hidden.
|
|
59
|
+
const showCloseInLane = props.isLandscape && props.onClose !== undefined;
|
|
60
|
+
if (!controlsVisible && !showCloseInLane) {
|
|
44
61
|
return null;
|
|
45
62
|
}
|
|
46
63
|
|
|
64
|
+
const closeButton = props.onClose ? (
|
|
65
|
+
<Pressable
|
|
66
|
+
onPress={props.onClose}
|
|
67
|
+
accessibilityRole="button"
|
|
68
|
+
accessibilityLabel={props.closeAccessibilityLabel}
|
|
69
|
+
testID="si_document_close_button"
|
|
70
|
+
style={({ pressed }) => [
|
|
71
|
+
styles.closeButton,
|
|
72
|
+
{
|
|
73
|
+
backgroundColor: theme.colors.offBlack,
|
|
74
|
+
borderColor: theme.colors.backButtonBorder,
|
|
75
|
+
opacity: pressed ? 0.7 : 1,
|
|
76
|
+
},
|
|
77
|
+
]}
|
|
78
|
+
>
|
|
79
|
+
<SiOutlineClose size={20} color={theme.colors.offWhite} />
|
|
80
|
+
</Pressable>
|
|
81
|
+
) : null;
|
|
82
|
+
|
|
47
83
|
const shutter = props.showManualShutter ? (
|
|
48
84
|
<Pressable
|
|
49
85
|
onPress={props.onManualShutter}
|
|
@@ -81,60 +117,88 @@ export function UseSmileIDDocumentCaptureControls(
|
|
|
81
117
|
</Pressable>
|
|
82
118
|
) : null;
|
|
83
119
|
|
|
120
|
+
if (props.isLandscape) {
|
|
121
|
+
// Trailing-edge lane: ✕ at the top, shutter/gallery vertically centred
|
|
122
|
+
// between two flex spacers so the controls hold the lane's vertical centre.
|
|
123
|
+
return (
|
|
124
|
+
<SafeAreaView
|
|
125
|
+
edges={["top", "right", "bottom", "left"]}
|
|
126
|
+
style={styles.landscapeLane}
|
|
127
|
+
pointerEvents="box-none"
|
|
128
|
+
testID="si_document_capture_controls"
|
|
129
|
+
>
|
|
130
|
+
{/* Fixed-width slot keeps the ✕ on the shutter's centre-x even when the
|
|
131
|
+
shutter/gallery hide during capture (matches the native lane width). */}
|
|
132
|
+
<View style={styles.laneSlot}>{closeButton}</View>
|
|
133
|
+
<View style={styles.laneSpacer} />
|
|
134
|
+
{controlsVisible ? (
|
|
135
|
+
<View style={styles.landscapeControls}>
|
|
136
|
+
{shutter}
|
|
137
|
+
{gallery}
|
|
138
|
+
</View>
|
|
139
|
+
) : null}
|
|
140
|
+
<View style={styles.laneSpacer} />
|
|
141
|
+
</SafeAreaView>
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// Portrait: centred bottom row (gallery left of shutter).
|
|
84
146
|
return (
|
|
85
|
-
<
|
|
86
|
-
|
|
147
|
+
<SafeAreaView
|
|
148
|
+
edges={["top", "right", "bottom", "left"]}
|
|
149
|
+
style={styles.portraitRow}
|
|
87
150
|
pointerEvents="box-none"
|
|
88
151
|
testID="si_document_capture_controls"
|
|
89
152
|
>
|
|
90
|
-
{
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
testID="si_document_capture_spinner"
|
|
94
|
-
/>
|
|
95
|
-
) : props.isLandscape ? (
|
|
96
|
-
// Landscape: shutter above gallery (trailing column).
|
|
97
|
-
<>
|
|
98
|
-
{shutter}
|
|
99
|
-
{gallery}
|
|
100
|
-
</>
|
|
101
|
-
) : (
|
|
102
|
-
// Portrait: gallery left of shutter (bottom row).
|
|
103
|
-
<>
|
|
104
|
-
{gallery}
|
|
105
|
-
{shutter}
|
|
106
|
-
</>
|
|
107
|
-
)}
|
|
108
|
-
</View>
|
|
153
|
+
{gallery}
|
|
154
|
+
{shutter}
|
|
155
|
+
</SafeAreaView>
|
|
109
156
|
);
|
|
110
157
|
}
|
|
111
158
|
|
|
112
159
|
const styles = StyleSheet.create({
|
|
113
|
-
|
|
160
|
+
// No fixed width: the lane sizes to its (≤ SHUTTER_SIZE-wide) content so the
|
|
161
|
+
// additive horizontal safe-area inset SHIFTS it inward instead of squeezing the
|
|
162
|
+
// controls (RN is border-box; padding inside a fixed width would clip them).
|
|
163
|
+
landscapeLane: {
|
|
114
164
|
position: "absolute",
|
|
115
165
|
top: 0,
|
|
116
166
|
bottom: 0,
|
|
117
|
-
end:
|
|
167
|
+
end: LANE_EDGE,
|
|
168
|
+
flexDirection: "column",
|
|
169
|
+
alignItems: "center",
|
|
170
|
+
paddingVertical: LANE_VERTICAL_PADDING,
|
|
171
|
+
},
|
|
172
|
+
laneSpacer: { flex: 1 },
|
|
173
|
+
laneSlot: { width: SHUTTER_SIZE, alignItems: "center" },
|
|
174
|
+
landscapeControls: {
|
|
118
175
|
flexDirection: "column",
|
|
119
176
|
alignItems: "center",
|
|
120
|
-
justifyContent: "center",
|
|
121
177
|
gap: CONTROL_GAP,
|
|
122
178
|
},
|
|
123
179
|
portraitRow: {
|
|
124
180
|
position: "absolute",
|
|
125
181
|
start: 0,
|
|
126
182
|
end: 0,
|
|
127
|
-
bottom:
|
|
183
|
+
bottom: PORTRAIT_ROW_BOTTOM,
|
|
128
184
|
flexDirection: "row",
|
|
129
185
|
alignItems: "center",
|
|
130
186
|
justifyContent: "center",
|
|
131
187
|
gap: CONTROL_GAP * 1.6,
|
|
132
188
|
},
|
|
189
|
+
closeButton: {
|
|
190
|
+
width: CLOSE_SIZE,
|
|
191
|
+
height: CLOSE_SIZE,
|
|
192
|
+
borderRadius: CLOSE_SIZE / 2,
|
|
193
|
+
borderWidth: 1,
|
|
194
|
+
alignItems: "center",
|
|
195
|
+
justifyContent: "center",
|
|
196
|
+
},
|
|
133
197
|
shutterOuter: {
|
|
134
198
|
width: SHUTTER_SIZE,
|
|
135
199
|
height: SHUTTER_SIZE,
|
|
136
200
|
borderRadius: SHUTTER_SIZE / 2,
|
|
137
|
-
borderWidth:
|
|
201
|
+
borderWidth: 4,
|
|
138
202
|
borderColor: "#FFFFFF",
|
|
139
203
|
alignItems: "center",
|
|
140
204
|
justifyContent: "center",
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { memo } from "react";
|
|
2
2
|
import { StyleSheet, Text, View } from "react-native";
|
|
3
|
+
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
|
3
4
|
import Svg, { Path } from "react-native-svg";
|
|
4
5
|
import type { UseSmileIDTheme } from "../theme/theme";
|
|
5
6
|
import { useUseSmileIDTheme } from "../theme/theme_context";
|
|
@@ -7,7 +8,10 @@ import {
|
|
|
7
8
|
isDocumentCaptureActive,
|
|
8
9
|
type UseSmileIDOverlayState as OverlayState,
|
|
9
10
|
} from "../state/use_smile_id_overlay_state";
|
|
10
|
-
import {
|
|
11
|
+
import type { DocumentType } from "../../core/models/document_type";
|
|
12
|
+
import { UseSmileIDOvalBorderPalette } from "./use_smile_id_oval_border_palette";
|
|
13
|
+
import { UseSmileIDDocumentShimmer } from "./use_smile_id_document_shimmer";
|
|
14
|
+
import { UseSmileIDCaptureSpinner } from "./use_smile_id_capture_spinner";
|
|
11
15
|
|
|
12
16
|
export type UseSmileIDDocumentOverlayProps = {
|
|
13
17
|
readonly state: OverlayState;
|
|
@@ -15,6 +19,10 @@ export type UseSmileIDDocumentOverlayProps = {
|
|
|
15
19
|
readonly containerHeight: number;
|
|
16
20
|
/** Optional aspect ratio hint — e.g. CR-80 ID card = 1.586. */
|
|
17
21
|
readonly knownIdAspectRatio?: number;
|
|
22
|
+
/** Document type — selects the in-frame shimmer skeleton. */
|
|
23
|
+
readonly documentTypeKind?: DocumentType["kind"];
|
|
24
|
+
/** Generic-document back side — swaps the front skeleton for the back. */
|
|
25
|
+
readonly isBackSide?: boolean;
|
|
18
26
|
/**
|
|
19
27
|
* Coaching copy shown in the dark pill below the frame. Rendered here so it
|
|
20
28
|
* tracks the frame geometry instead of a fixed screen offset.
|
|
@@ -28,50 +36,88 @@ export type UseSmileIDDocumentOverlayProps = {
|
|
|
28
36
|
const CHIP_TOP_GAP = 16;
|
|
29
37
|
|
|
30
38
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
39
|
+
* Frame spans ≤71% of container width, height capped at 61% (re-deriving width
|
|
40
|
+
* from aspect when the cap bites — keeps a wide ID-1 card from overflowing in
|
|
41
|
+
* landscape). One ratio pair drives both orientations.
|
|
34
42
|
*/
|
|
35
|
-
const
|
|
36
|
-
const
|
|
43
|
+
const FRAME_MAX_WIDTH_RATIO = 0.71;
|
|
44
|
+
const FRAME_MAX_HEIGHT_RATIO = 0.61;
|
|
37
45
|
/** Frame corner radius (matches the bordered frame's `borderRadius`). */
|
|
38
|
-
const FRAME_CORNER_RADIUS =
|
|
46
|
+
const FRAME_CORNER_RADIUS = 16;
|
|
47
|
+
/** Guide-rect border thickness; drawn straddling the frame edge (centred stroke, matching the other SDKs). */
|
|
48
|
+
const FRAME_BORDER_WIDTH = 4;
|
|
49
|
+
/** Capture-progress spinner shown beside the frame (landscape) or bottom-centre (portrait). */
|
|
50
|
+
const SPINNER_SIZE = 48;
|
|
51
|
+
/** Portrait spinner gap above the safe-area bottom (spacing.large) — matches the shutter row. */
|
|
52
|
+
const PORTRAIT_SPINNER_BOTTOM_GAP = 24;
|
|
53
|
+
|
|
54
|
+
/** Default document aspect (CR-80 ID-1 card) when no known ratio is supplied. */
|
|
55
|
+
export const DEFAULT_DOCUMENT_ASPECT = 1.586;
|
|
56
|
+
|
|
39
57
|
/**
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
58
|
+
* Centred document guide rectangle (container px) for a document [aspect] and
|
|
59
|
+
* viewport. Single source of truth shared by the overlay (draws the frame) and
|
|
60
|
+
* the capture screen (derives the native crop region), so the saved capture
|
|
61
|
+
* matches the frame the user saw.
|
|
62
|
+
*/
|
|
63
|
+
export function documentGuideRect(
|
|
64
|
+
aspect: number,
|
|
65
|
+
containerWidth: number,
|
|
66
|
+
containerHeight: number,
|
|
67
|
+
): {
|
|
68
|
+
readonly left: number;
|
|
69
|
+
readonly top: number;
|
|
70
|
+
readonly width: number;
|
|
71
|
+
readonly height: number;
|
|
72
|
+
} {
|
|
73
|
+
let width = containerWidth * FRAME_MAX_WIDTH_RATIO;
|
|
74
|
+
let height = width / aspect;
|
|
75
|
+
const maxHeight = containerHeight * FRAME_MAX_HEIGHT_RATIO;
|
|
76
|
+
if (height > maxHeight) {
|
|
77
|
+
height = maxHeight;
|
|
78
|
+
width = height * aspect;
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
left: (containerWidth - width) / 2,
|
|
82
|
+
top: (containerHeight - height) / 2,
|
|
83
|
+
width,
|
|
84
|
+
height,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Faint black tint over the whole live feed (~0.15 inside the frame). Component
|
|
89
|
+
* constant, not a theme colour — the surround dim is the overridable layer.
|
|
43
90
|
*/
|
|
44
91
|
const DOCUMENT_CAMERA_TINT = "#00000026"; // black @15%
|
|
45
92
|
/** Fallback surround dim when the theme omits `documentOverlayScrim`. */
|
|
46
93
|
const DEFAULT_DOCUMENT_OVERLAY_SCRIM = "#00000066"; // black @40%
|
|
47
94
|
|
|
48
95
|
/**
|
|
49
|
-
* Document capture frame — two-layer dim
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* masks rasterize the full-screen layer to a bitmap on the UI thread per invalidation,
|
|
53
|
-
* freezing the camera preview. Respects `knownIdAspectRatio`; the frame stays centred.
|
|
96
|
+
* Document capture frame — two-layer dim + a border that flips to `ovalActive`
|
|
97
|
+
* on `DOCUMENT_READY`. The cutout is one even-odd path, NOT a `<Mask>` (masks
|
|
98
|
+
* rasterize the full-screen layer per invalidation, freezing the preview).
|
|
54
99
|
*/
|
|
55
100
|
export function UseSmileIDDocumentOverlay(
|
|
56
101
|
props: UseSmileIDDocumentOverlayProps,
|
|
57
102
|
) {
|
|
58
103
|
const themeFromContext = useUseSmileIDTheme();
|
|
59
104
|
const theme = props.theme ?? themeFromContext;
|
|
60
|
-
const
|
|
61
|
-
const
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
//
|
|
105
|
+
const insets = useSafeAreaInsets();
|
|
106
|
+
const aspect = props.knownIdAspectRatio ?? DEFAULT_DOCUMENT_ASPECT;
|
|
107
|
+
const isPortrait = aspect < 1;
|
|
108
|
+
const {
|
|
109
|
+
left,
|
|
110
|
+
top,
|
|
111
|
+
width: frameWidth,
|
|
112
|
+
height: frameHeight,
|
|
113
|
+
} = documentGuideRect(aspect, props.containerWidth, props.containerHeight);
|
|
114
|
+
// Three-state border, shared with the selfie oval (UseSmileIDOvalBorderPalette):
|
|
115
|
+
// green once the document is correctly framed (ready / capturing / processing),
|
|
116
|
+
// red while detected but mispositioned (too far / close / off-centre / not
|
|
117
|
+
// steady), neutral while idle.
|
|
71
118
|
const captureActive = isDocumentCaptureActive(props.state);
|
|
72
|
-
const borderColor =
|
|
73
|
-
|
|
74
|
-
: theme.colors.stroke;
|
|
119
|
+
const borderColor =
|
|
120
|
+
theme.colors[UseSmileIDOvalBorderPalette.tokenFor(props.state, false)];
|
|
75
121
|
const surroundColor =
|
|
76
122
|
theme.colors.documentOverlayScrim ?? DEFAULT_DOCUMENT_OVERLAY_SCRIM;
|
|
77
123
|
|
|
@@ -104,37 +150,81 @@ export function UseSmileIDDocumentOverlay(
|
|
|
104
150
|
cornerRadius={FRAME_CORNER_RADIUS}
|
|
105
151
|
color={surroundColor}
|
|
106
152
|
/>
|
|
107
|
-
{/* In-frame document
|
|
153
|
+
{/* In-frame document shimmer — per-type skeleton hint while positioning. */}
|
|
108
154
|
{!captureActive ? (
|
|
109
155
|
<View
|
|
110
156
|
style={{
|
|
157
|
+
// Inset 10% per axis so the shimmer guide never touches the frame edge.
|
|
111
158
|
position: "absolute",
|
|
112
|
-
left,
|
|
113
|
-
top,
|
|
114
|
-
width: frameWidth,
|
|
115
|
-
height: frameHeight,
|
|
159
|
+
left: left + frameWidth * 0.1,
|
|
160
|
+
top: top + frameHeight * 0.1,
|
|
161
|
+
width: frameWidth * 0.8,
|
|
162
|
+
height: frameHeight * 0.8,
|
|
116
163
|
}}
|
|
117
164
|
pointerEvents="none"
|
|
118
165
|
>
|
|
119
|
-
<
|
|
120
|
-
width={frameWidth}
|
|
121
|
-
height={frameHeight}
|
|
122
|
-
|
|
166
|
+
<UseSmileIDDocumentShimmer
|
|
167
|
+
width={frameWidth * 0.8}
|
|
168
|
+
height={frameHeight * 0.8}
|
|
169
|
+
isBackSide={props.isBackSide ?? false}
|
|
170
|
+
{...(props.documentTypeKind !== undefined
|
|
171
|
+
? { documentTypeKind: props.documentTypeKind }
|
|
172
|
+
: {})}
|
|
123
173
|
/>
|
|
124
174
|
</View>
|
|
125
175
|
) : null}
|
|
126
176
|
<View
|
|
127
177
|
style={{
|
|
128
178
|
position: "absolute",
|
|
129
|
-
left,
|
|
130
|
-
top,
|
|
131
|
-
width: frameWidth,
|
|
132
|
-
height: frameHeight,
|
|
133
|
-
borderWidth:
|
|
134
|
-
borderRadius: FRAME_CORNER_RADIUS,
|
|
179
|
+
left: left - FRAME_BORDER_WIDTH / 2,
|
|
180
|
+
top: top - FRAME_BORDER_WIDTH / 2,
|
|
181
|
+
width: frameWidth + FRAME_BORDER_WIDTH,
|
|
182
|
+
height: frameHeight + FRAME_BORDER_WIDTH,
|
|
183
|
+
borderWidth: FRAME_BORDER_WIDTH,
|
|
184
|
+
borderRadius: FRAME_CORNER_RADIUS + FRAME_BORDER_WIDTH / 2,
|
|
135
185
|
borderColor,
|
|
136
186
|
}}
|
|
137
187
|
/>
|
|
188
|
+
{/* Capture-progress spinner: beside the frame in landscape; bottom-centre in portrait
|
|
189
|
+
(e.g. Green Book), where the near-full-width frame leaves no side margin. */}
|
|
190
|
+
{captureActive ? (
|
|
191
|
+
isPortrait ? (
|
|
192
|
+
<View
|
|
193
|
+
style={{
|
|
194
|
+
position: "absolute",
|
|
195
|
+
left: 0,
|
|
196
|
+
right: 0,
|
|
197
|
+
bottom: insets.bottom + PORTRAIT_SPINNER_BOTTOM_GAP,
|
|
198
|
+
alignItems: "center",
|
|
199
|
+
}}
|
|
200
|
+
pointerEvents="none"
|
|
201
|
+
>
|
|
202
|
+
<UseSmileIDCaptureSpinner
|
|
203
|
+
size={SPINNER_SIZE}
|
|
204
|
+
color={theme.colors.ovalActive}
|
|
205
|
+
testID="si_document_capture_spinner"
|
|
206
|
+
/>
|
|
207
|
+
</View>
|
|
208
|
+
) : (
|
|
209
|
+
<View
|
|
210
|
+
style={{
|
|
211
|
+
position: "absolute",
|
|
212
|
+
left:
|
|
213
|
+
left +
|
|
214
|
+
frameWidth +
|
|
215
|
+
(props.containerWidth - (left + frameWidth) - SPINNER_SIZE) / 2,
|
|
216
|
+
top: top + (frameHeight - SPINNER_SIZE) / 2,
|
|
217
|
+
}}
|
|
218
|
+
pointerEvents="none"
|
|
219
|
+
>
|
|
220
|
+
<UseSmileIDCaptureSpinner
|
|
221
|
+
size={SPINNER_SIZE}
|
|
222
|
+
color={theme.colors.ovalActive}
|
|
223
|
+
testID="si_document_capture_spinner"
|
|
224
|
+
/>
|
|
225
|
+
</View>
|
|
226
|
+
)
|
|
227
|
+
) : null}
|
|
138
228
|
{/* Coaching pill, anchored just below the frame (Figma off-black pill). */}
|
|
139
229
|
{props.feedbackText ? (
|
|
140
230
|
<View
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { memo } from "react";
|
|
2
|
+
import { SvgXml } from "react-native-svg";
|
|
3
|
+
import type { DocumentType } from "../../core/models/document_type";
|
|
4
|
+
import {
|
|
5
|
+
SI_DOCUMENT_BACK_SHIMMER,
|
|
6
|
+
SI_DOCUMENT_FRONT_SHIMMER,
|
|
7
|
+
SI_DOCUMENT_GREEN_BOOK_SHIMMER,
|
|
8
|
+
SI_DOCUMENT_PASSPORT_SHIMMER,
|
|
9
|
+
} from "../assets/svg/document_shimmer_strings";
|
|
10
|
+
|
|
11
|
+
/** Translucent in-frame document shimmer — the per-type "align here" skeleton, scaled to fit the capture frame. */
|
|
12
|
+
export type UseSmileIDDocumentShimmerProps = {
|
|
13
|
+
readonly width: number;
|
|
14
|
+
readonly height: number;
|
|
15
|
+
/** Selects the skeleton; the green book and passport ignore `isBackSide`. */
|
|
16
|
+
readonly documentTypeKind?: DocumentType["kind"];
|
|
17
|
+
/** Generic documents only: show the back-side skeleton instead of the front. */
|
|
18
|
+
readonly isBackSide?: boolean;
|
|
19
|
+
readonly testID?: string;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
/** Shimmer skeleton for a document type + side. Only generic documents have front/back; passport and green book ignore the side. */
|
|
23
|
+
export function documentShimmerXml(
|
|
24
|
+
documentTypeKind: DocumentType["kind"] | undefined,
|
|
25
|
+
isBackSide: boolean,
|
|
26
|
+
): string {
|
|
27
|
+
switch (documentTypeKind) {
|
|
28
|
+
case "passport":
|
|
29
|
+
return SI_DOCUMENT_PASSPORT_SHIMMER;
|
|
30
|
+
case "southAfricaGreenBook":
|
|
31
|
+
return SI_DOCUMENT_GREEN_BOOK_SHIMMER;
|
|
32
|
+
default:
|
|
33
|
+
return isBackSide ? SI_DOCUMENT_BACK_SHIMMER : SI_DOCUMENT_FRONT_SHIMMER;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export const UseSmileIDDocumentShimmer = memo(
|
|
38
|
+
function UseSmileIDDocumentShimmer(props: UseSmileIDDocumentShimmerProps) {
|
|
39
|
+
const { width, height, documentTypeKind, isBackSide = false } = props;
|
|
40
|
+
if (width <= 0 || height <= 0) return null;
|
|
41
|
+
// Default preserveAspectRatio (meet) fits the skeleton in the frame, undistorted.
|
|
42
|
+
return (
|
|
43
|
+
<SvgXml
|
|
44
|
+
xml={documentShimmerXml(documentTypeKind, isBackSide)}
|
|
45
|
+
width={width}
|
|
46
|
+
height={height}
|
|
47
|
+
{...(props.testID !== undefined ? { testID: props.testID } : {})}
|
|
48
|
+
/>
|
|
49
|
+
);
|
|
50
|
+
},
|
|
51
|
+
);
|
|
@@ -5,7 +5,6 @@ import type { AnimationObject } from "lottie-react-native";
|
|
|
5
5
|
import { useReducedMotion } from "../utils/use_reduced_motion";
|
|
6
6
|
import { FaceOvalDefaults } from "./face_oval_defaults";
|
|
7
7
|
import {
|
|
8
|
-
ENHANCED_SMART_SELFIE_ANIMATION_OPACITY,
|
|
9
8
|
ENHANCED_SMART_SELFIE_ANIMATION_SPEED,
|
|
10
9
|
ENHANCED_SMART_SELFIE_TOTAL_FRAMES,
|
|
11
10
|
} from "./helpers/enhanced_smart_selfie_animation_frames";
|
|
@@ -14,8 +13,11 @@ import {
|
|
|
14
13
|
export const ESS_ALL_DIRECTIONS_ANIMATION =
|
|
15
14
|
require("../assets/si_ess_animation_all_directions.json") as AnimationObject;
|
|
16
15
|
|
|
17
|
-
/**
|
|
18
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Box width as a multiple of the oval width; the baked arrow tips touch the
|
|
18
|
+
* oval boundary at ≈1.19× — keep this factor below that.
|
|
19
|
+
*/
|
|
20
|
+
export const ENHANCED_SMART_SELFIE_ARROW_FIT = 1.15;
|
|
19
21
|
/** Nudge so the composition's face lands on the oval centre. */
|
|
20
22
|
export const VERTICAL_ALIGNMENT_OFFSET = -15;
|
|
21
23
|
|
|
@@ -47,7 +49,10 @@ export function UseSmileIDEnhancedSmartSelfieClip(
|
|
|
47
49
|
return null;
|
|
48
50
|
}
|
|
49
51
|
|
|
50
|
-
const size =
|
|
52
|
+
const size =
|
|
53
|
+
containerWidth *
|
|
54
|
+
FaceOvalDefaults.ovalWidthRatio *
|
|
55
|
+
ENHANCED_SMART_SELFIE_ARROW_FIT;
|
|
51
56
|
const ovalCenterY = containerHeight * FaceOvalDefaults.ovalCenterYRatio;
|
|
52
57
|
|
|
53
58
|
const containerStyle = {
|
|
@@ -56,8 +61,6 @@ export function UseSmileIDEnhancedSmartSelfieClip(
|
|
|
56
61
|
top: ovalCenterY - size / 2 + VERTICAL_ALIGNMENT_OFFSET,
|
|
57
62
|
width: size,
|
|
58
63
|
height: size,
|
|
59
|
-
// Translucent so the face stays the focal point behind the arrow cue.
|
|
60
|
-
opacity: ENHANCED_SMART_SELFIE_ANIMATION_OPACITY,
|
|
61
64
|
};
|
|
62
65
|
|
|
63
66
|
if (reducedMotion) {
|