@smileid/usesmileid 12.0.0-beta01 → 12.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -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/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 +6 -4
- package/dist/core/models/document_type.js.map +1 -1
- 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.js +1 -1
- 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/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 +16 -1
- package/dist/data/dsl/builder/retry_config_builder.d.ts.map +1 -1
- package/dist/data/dsl/builder/retry_config_builder.js +16 -1
- 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/util/retry_util.d.ts +1 -1
- package/dist/data/util/retry_util.d.ts.map +1 -1
- package/dist/data/util/retry_util.js +2 -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/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 +39 -0
- package/dist/metadata/builder_configuration.d.ts.map +1 -0
- package/dist/metadata/builder_configuration.js +34 -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 +48 -0
- package/dist/metadata/metadata_configuration_mappers.d.ts.map +1 -0
- package/dist/metadata/metadata_configuration_mappers.js +171 -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 +184 -12
- 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.map +1 -1
- package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_clip.js +1 -3
- 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 +18 -3
- 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 +12 -0
- package/dist/presentation/flow/dsl/builder/config_builder.d.ts.map +1 -1
- package/dist/presentation/flow/dsl/builder/config_builder.js +12 -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 +111 -10
- package/dist/presentation/flow/dsl/builder/screens_builder.d.ts.map +1 -1
- package/dist/presentation/flow/dsl/builder/screens_builder.js +111 -10
- 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 +39 -4
- package/dist/presentation/flow/flow_navigation_manager.d.ts.map +1 -1
- package/dist/presentation/flow/flow_navigation_manager.js +141 -10
- 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 +73 -25
- 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 +36 -12
- package/dist/presentation/flow/screen/orchestrated_capture_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 -1
- 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/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/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.js +3 -0
- package/dist/presentation/screen/helpers/scan_state_to_overlay_state.js.map +1 -1
- package/dist/presentation/screen/use_smile_id_capture_screen.d.ts +17 -1
- package/dist/presentation/screen/use_smile_id_capture_screen.d.ts.map +1 -1
- package/dist/presentation/screen/use_smile_id_capture_screen.js +153 -18
- package/dist/presentation/screen/use_smile_id_capture_screen.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 +16 -11
- 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 -6
- package/dist/presentation/screen/use_smile_id_preview_screen.d.ts.map +1 -1
- package/dist/presentation/screen/use_smile_id_preview_screen.js +9 -8
- 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 +3 -2
- 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/package.json +26 -6
- package/src/__tests__/react_native_mock.tsx +8 -0
- package/src/camera/camera_defaults.ts +11 -9
- package/src/camera/orientation_degrees.ts +5 -6
- package/src/core/models/__tests__/document_type.test.ts +6 -4
- package/src/core/models/document_capture_mode.ts +27 -0
- package/src/core/models/document_type.ts +6 -4
- package/src/core/models/result.ts +9 -8
- 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 +1 -1
- 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 +222 -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/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 +22 -1
- 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/networking_factory.ts +14 -1
- package/src/data/repository/__tests__/network_retries.test.ts +117 -0
- package/src/data/repository/use_smile_id_repository_impl.ts +96 -9
- 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/util/__tests__/use_smile_id_token_decoder.test.ts +57 -1
- package/src/data/util/retry_util.ts +3 -2
- package/src/data/util/use_smile_id_token_decoder.ts +76 -28
- 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 +215 -0
- package/src/metadata/__tests__/metadata_configuration_objects.test.ts +85 -0
- package/src/metadata/__tests__/metadata_device_context.test.ts +147 -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 +18 -24
- package/src/metadata/builder_configuration.ts +63 -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 +234 -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 +195 -11
- package/src/presentation/assets/si_ess_animation_all_directions.json +1300 -286
- 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 +3 -4
- 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 +27 -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 +0 -3
- package/src/presentation/components/use_smile_id_guideline_thumbnail.tsx +131 -2
- package/src/presentation/components/use_smile_id_instructions_hero.tsx +100 -59
- package/src/presentation/components/use_smile_id_oval_border_palette.ts +7 -3
- package/src/presentation/flow/__tests__/document_flow_navigation.test.ts +200 -1
- package/src/presentation/flow/dsl/builder/config_builder.ts +14 -0
- package/src/presentation/flow/dsl/builder/ml_builder.ts +13 -4
- package/src/presentation/flow/dsl/builder/screens_builder.ts +111 -10
- 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 +179 -13
- package/src/presentation/flow/model/instruction_guideline.ts +6 -0
- package/src/presentation/flow/model/instructions_defaults.ts +103 -25
- package/src/presentation/flow/screen/orchestrated_capture_screen.tsx +43 -10
- package/src/presentation/flow/screen/orchestrated_instructions_screen.tsx +1 -0
- package/src/presentation/flow/screen/orchestrated_preview_screen.tsx +4 -2
- package/src/presentation/flow/screen/orchestrated_processing_screen.tsx +3 -3
- package/src/presentation/flow/validation/__tests__/job_type_validator.test.ts +64 -0
- package/src/presentation/flow/validation/job_type_validator.ts +24 -0
- package/src/presentation/screen/__tests__/instructions_screen_helpers.test.ts +15 -3
- package/src/presentation/screen/__tests__/use_smile_id_capture_screen.test.tsx +6 -4
- package/src/presentation/screen/helpers/capture_screen_helpers.ts +1 -0
- package/src/presentation/screen/helpers/instructions_screen_helpers.ts +7 -2
- package/src/presentation/screen/helpers/scan_state_to_overlay_state.ts +3 -0
- package/src/presentation/screen/use_smile_id_capture_screen.tsx +234 -36
- package/src/presentation/screen/use_smile_id_document_preview_screen.tsx +32 -22
- package/src/presentation/screen/use_smile_id_instructions_screen.tsx +4 -0
- package/src/presentation/screen/use_smile_id_preview_screen.tsx +9 -9
- package/src/presentation/screen/use_smile_id_processing_screen.tsx +7 -7
- package/src/presentation/theme/theme.ts +21 -19
- package/src/presentation/utils/force_max_brightness.tsx +4 -4
- 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_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
|
@@ -1,22 +1,42 @@
|
|
|
1
|
-
import { jsx as _jsx,
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Pressable, StyleSheet, View } from "react-native";
|
|
3
|
+
import { SafeAreaView } from "react-native-safe-area-context";
|
|
3
4
|
import { defaultLightTheme } from "../theme/theme";
|
|
4
|
-
import { SiGallery } from "./icons";
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
5
|
+
import { SiGallery, SiOutlineClose } from "./icons";
|
|
6
|
+
const SHUTTER_SIZE = 64;
|
|
7
|
+
const SHUTTER_INNER_SIZE = 46;
|
|
8
|
+
const GALLERY_SIZE = 56;
|
|
9
|
+
const CONTROL_GAP = 24;
|
|
10
|
+
const CLOSE_SIZE = 40;
|
|
11
|
+
/** Trailing-edge inset for the landscape lane (spacing.large). */
|
|
12
|
+
const LANE_EDGE = 24;
|
|
13
|
+
/** Bottom inset for the portrait control row above the safe area (spacing.large). */
|
|
14
|
+
const PORTRAIT_ROW_BOTTOM = 24;
|
|
15
|
+
/** Top/bottom inset bounding the ✕ and the centred controls inside the lane. */
|
|
16
|
+
const LANE_VERTICAL_PADDING = 16;
|
|
10
17
|
/**
|
|
11
|
-
* Document capture controls — manual shutter + gallery upload,
|
|
12
|
-
*
|
|
18
|
+
* Document capture controls — manual shutter + gallery upload, plus the close ✕
|
|
19
|
+
* in landscape (laid out as a trailing-edge lane; portrait is a centred bottom
|
|
20
|
+
* row with the ✕ in the top chrome).
|
|
13
21
|
*/
|
|
14
22
|
export function UseSmileIDDocumentCaptureControls(props) {
|
|
15
23
|
// Light-palette forced: overlay is locked to light mode so brand-blue reads over the dim feed.
|
|
16
24
|
const theme = defaultLightTheme;
|
|
17
|
-
|
|
25
|
+
const controlsVisible = props.showManualShutter || props.showGallery;
|
|
26
|
+
// The lane keeps the ✕ even when shutter/gallery hide (during capture); portrait
|
|
27
|
+
// renders nothing here once the controls are hidden.
|
|
28
|
+
const showCloseInLane = props.isLandscape && props.onClose !== undefined;
|
|
29
|
+
if (!controlsVisible && !showCloseInLane) {
|
|
18
30
|
return null;
|
|
19
31
|
}
|
|
32
|
+
const closeButton = props.onClose ? (_jsx(Pressable, { onPress: props.onClose, accessibilityRole: "button", accessibilityLabel: props.closeAccessibilityLabel, testID: "si_document_close_button", style: ({ pressed }) => [
|
|
33
|
+
styles.closeButton,
|
|
34
|
+
{
|
|
35
|
+
backgroundColor: theme.colors.offBlack,
|
|
36
|
+
borderColor: theme.colors.backButtonBorder,
|
|
37
|
+
opacity: pressed ? 0.7 : 1,
|
|
38
|
+
},
|
|
39
|
+
], children: _jsx(SiOutlineClose, { size: 20, color: theme.colors.offWhite }) })) : null;
|
|
20
40
|
const shutter = props.showManualShutter ? (_jsx(Pressable, { onPress: props.onManualShutter, disabled: !props.enabled, accessibilityRole: "button", accessibilityLabel: props.shutterAccessibilityLabel, accessibilityState: { disabled: !props.enabled }, testID: "si_document_manual_shutter", style: ({ pressed }) => [
|
|
21
41
|
styles.shutterOuter,
|
|
22
42
|
{ opacity: pressed || !props.enabled ? 0.6 : 1 },
|
|
@@ -28,34 +48,57 @@ export function UseSmileIDDocumentCaptureControls(props) {
|
|
|
28
48
|
opacity: pressed || !props.enabled ? 0.6 : 1,
|
|
29
49
|
},
|
|
30
50
|
], children: _jsx(SiGallery, { size: 24, color: theme.colors.primaryForeground }) })) : null;
|
|
31
|
-
|
|
51
|
+
if (props.isLandscape) {
|
|
52
|
+
// Trailing-edge lane: ✕ at the top, shutter/gallery vertically centred
|
|
53
|
+
// between two flex spacers so the controls hold the lane's vertical centre.
|
|
54
|
+
return (_jsxs(SafeAreaView, { edges: ["top", "right", "bottom", "left"], style: styles.landscapeLane, pointerEvents: "box-none", testID: "si_document_capture_controls", children: [_jsx(View, { style: styles.laneSlot, children: closeButton }), _jsx(View, { style: styles.laneSpacer }), controlsVisible ? (_jsxs(View, { style: styles.landscapeControls, children: [shutter, gallery] })) : null, _jsx(View, { style: styles.laneSpacer })] }));
|
|
55
|
+
}
|
|
56
|
+
// Portrait: centred bottom row (gallery left of shutter).
|
|
57
|
+
return (_jsxs(SafeAreaView, { edges: ["top", "right", "bottom", "left"], style: styles.portraitRow, pointerEvents: "box-none", testID: "si_document_capture_controls", children: [gallery, shutter] }));
|
|
32
58
|
}
|
|
33
59
|
const styles = StyleSheet.create({
|
|
34
|
-
|
|
60
|
+
// No fixed width: the lane sizes to its (≤ SHUTTER_SIZE-wide) content so the
|
|
61
|
+
// additive horizontal safe-area inset SHIFTS it inward instead of squeezing the
|
|
62
|
+
// controls (RN is border-box; padding inside a fixed width would clip them).
|
|
63
|
+
landscapeLane: {
|
|
35
64
|
position: "absolute",
|
|
36
65
|
top: 0,
|
|
37
66
|
bottom: 0,
|
|
38
|
-
end:
|
|
67
|
+
end: LANE_EDGE,
|
|
68
|
+
flexDirection: "column",
|
|
69
|
+
alignItems: "center",
|
|
70
|
+
paddingVertical: LANE_VERTICAL_PADDING,
|
|
71
|
+
},
|
|
72
|
+
laneSpacer: { flex: 1 },
|
|
73
|
+
laneSlot: { width: SHUTTER_SIZE, alignItems: "center" },
|
|
74
|
+
landscapeControls: {
|
|
39
75
|
flexDirection: "column",
|
|
40
76
|
alignItems: "center",
|
|
41
|
-
justifyContent: "center",
|
|
42
77
|
gap: CONTROL_GAP,
|
|
43
78
|
},
|
|
44
79
|
portraitRow: {
|
|
45
80
|
position: "absolute",
|
|
46
81
|
start: 0,
|
|
47
82
|
end: 0,
|
|
48
|
-
bottom:
|
|
83
|
+
bottom: PORTRAIT_ROW_BOTTOM,
|
|
49
84
|
flexDirection: "row",
|
|
50
85
|
alignItems: "center",
|
|
51
86
|
justifyContent: "center",
|
|
52
87
|
gap: CONTROL_GAP * 1.6,
|
|
53
88
|
},
|
|
89
|
+
closeButton: {
|
|
90
|
+
width: CLOSE_SIZE,
|
|
91
|
+
height: CLOSE_SIZE,
|
|
92
|
+
borderRadius: CLOSE_SIZE / 2,
|
|
93
|
+
borderWidth: 1,
|
|
94
|
+
alignItems: "center",
|
|
95
|
+
justifyContent: "center",
|
|
96
|
+
},
|
|
54
97
|
shutterOuter: {
|
|
55
98
|
width: SHUTTER_SIZE,
|
|
56
99
|
height: SHUTTER_SIZE,
|
|
57
100
|
borderRadius: SHUTTER_SIZE / 2,
|
|
58
|
-
borderWidth:
|
|
101
|
+
borderWidth: 4,
|
|
59
102
|
borderColor: "#FFFFFF",
|
|
60
103
|
alignItems: "center",
|
|
61
104
|
justifyContent: "center",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_smile_id_document_capture_controls.js","sourceRoot":"","sources":["../../../src/presentation/components/use_smile_id_document_capture_controls.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"use_smile_id_document_capture_controls.js","sourceRoot":"","sources":["../../../src/presentation/components/use_smile_id_document_capture_controls.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import type { UseSmileIDTheme } from "../theme/theme";
|
|
2
2
|
import { type UseSmileIDOverlayState as OverlayState } from "../state/use_smile_id_overlay_state";
|
|
3
|
+
import type { DocumentType } from "../../core/models/document_type";
|
|
3
4
|
export type UseSmileIDDocumentOverlayProps = {
|
|
4
5
|
readonly state: OverlayState;
|
|
5
6
|
readonly containerWidth: number;
|
|
6
7
|
readonly containerHeight: number;
|
|
7
8
|
/** Optional aspect ratio hint — e.g. CR-80 ID card = 1.586. */
|
|
8
9
|
readonly knownIdAspectRatio?: number;
|
|
10
|
+
/** Document type — selects the in-frame shimmer skeleton. */
|
|
11
|
+
readonly documentTypeKind?: DocumentType["kind"];
|
|
12
|
+
/** Generic-document back side — swaps the front skeleton for the back. */
|
|
13
|
+
readonly isBackSide?: boolean;
|
|
9
14
|
/**
|
|
10
15
|
* Coaching copy shown in the dark pill below the frame. Rendered here so it
|
|
11
16
|
* tracks the frame geometry instead of a fixed screen offset.
|
|
@@ -14,12 +19,24 @@ export type UseSmileIDDocumentOverlayProps = {
|
|
|
14
19
|
readonly testID?: string;
|
|
15
20
|
readonly theme?: UseSmileIDTheme;
|
|
16
21
|
};
|
|
22
|
+
/** Default document aspect (CR-80 ID-1 card) when no known ratio is supplied. */
|
|
23
|
+
export declare const DEFAULT_DOCUMENT_ASPECT = 1.586;
|
|
17
24
|
/**
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
|
|
25
|
+
* Centred document guide rectangle (container px) for a document [aspect] and
|
|
26
|
+
* viewport. Single source of truth shared by the overlay (draws the frame) and
|
|
27
|
+
* the capture screen (derives the native crop region), so the saved capture
|
|
28
|
+
* matches the frame the user saw.
|
|
29
|
+
*/
|
|
30
|
+
export declare function documentGuideRect(aspect: number, containerWidth: number, containerHeight: number): {
|
|
31
|
+
readonly left: number;
|
|
32
|
+
readonly top: number;
|
|
33
|
+
readonly width: number;
|
|
34
|
+
readonly height: number;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Document capture frame — two-layer dim + a border that flips to `ovalActive`
|
|
38
|
+
* on `DOCUMENT_READY`. The cutout is one even-odd path, NOT a `<Mask>` (masks
|
|
39
|
+
* rasterize the full-screen layer per invalidation, freezing the preview).
|
|
23
40
|
*/
|
|
24
41
|
export declare function UseSmileIDDocumentOverlay(props: UseSmileIDDocumentOverlayProps): import("react").JSX.Element | null;
|
|
25
42
|
//# sourceMappingURL=use_smile_id_document_overlay.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_smile_id_document_overlay.d.ts","sourceRoot":"","sources":["../../../src/presentation/components/use_smile_id_document_overlay.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use_smile_id_document_overlay.d.ts","sourceRoot":"","sources":["../../../src/presentation/components/use_smile_id_document_overlay.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,OAAO,EAEL,KAAK,sBAAsB,IAAI,YAAY,EAC5C,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAKpE,MAAM,MAAM,8BAA8B,GAAG;IAC3C,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,+DAA+D;IAC/D,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,6DAA6D;IAC7D,QAAQ,CAAC,gBAAgB,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IACjD,0EAA0E;IAC1E,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC;CAClC,CAAC;AAqBF,iFAAiF;AACjF,eAAO,MAAM,uBAAuB,QAAQ,CAAC;AAE7C;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,GACtB;IACD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAcA;AASD;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,8BAA8B,sCAmKtC"}
|
|
@@ -1,53 +1,78 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { memo } from "react";
|
|
3
3
|
import { StyleSheet, Text, View } from "react-native";
|
|
4
|
+
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
|
4
5
|
import Svg, { Path } from "react-native-svg";
|
|
5
6
|
import { useUseSmileIDTheme } from "../theme/theme_context";
|
|
6
7
|
import { isDocumentCaptureActive, } from "../state/use_smile_id_overlay_state";
|
|
7
|
-
import {
|
|
8
|
+
import { UseSmileIDOvalBorderPalette } from "./use_smile_id_oval_border_palette";
|
|
9
|
+
import { UseSmileIDDocumentShimmer } from "./use_smile_id_document_shimmer";
|
|
10
|
+
import { UseSmileIDCaptureSpinner } from "./use_smile_id_capture_spinner";
|
|
8
11
|
/** Gap between the frame's bottom edge and the coaching pill (Figma: 16dp). */
|
|
9
12
|
const CHIP_TOP_GAP = 16;
|
|
10
13
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
+
* Frame spans ≤71% of container width, height capped at 61% (re-deriving width
|
|
15
|
+
* from aspect when the cap bites — keeps a wide ID-1 card from overflowing in
|
|
16
|
+
* landscape). One ratio pair drives both orientations.
|
|
14
17
|
*/
|
|
15
|
-
const
|
|
16
|
-
const
|
|
18
|
+
const FRAME_MAX_WIDTH_RATIO = 0.71;
|
|
19
|
+
const FRAME_MAX_HEIGHT_RATIO = 0.61;
|
|
17
20
|
/** Frame corner radius (matches the bordered frame's `borderRadius`). */
|
|
18
|
-
const FRAME_CORNER_RADIUS =
|
|
21
|
+
const FRAME_CORNER_RADIUS = 16;
|
|
22
|
+
/** Guide-rect border thickness; drawn straddling the frame edge (centred stroke, matching the other SDKs). */
|
|
23
|
+
const FRAME_BORDER_WIDTH = 4;
|
|
24
|
+
/** Capture-progress spinner shown beside the frame (landscape) or bottom-centre (portrait). */
|
|
25
|
+
const SPINNER_SIZE = 48;
|
|
26
|
+
/** Portrait spinner gap above the safe-area bottom (spacing.large) — matches the shutter row. */
|
|
27
|
+
const PORTRAIT_SPINNER_BOTTOM_GAP = 24;
|
|
28
|
+
/** Default document aspect (CR-80 ID-1 card) when no known ratio is supplied. */
|
|
29
|
+
export const DEFAULT_DOCUMENT_ASPECT = 1.586;
|
|
19
30
|
/**
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
31
|
+
* Centred document guide rectangle (container px) for a document [aspect] and
|
|
32
|
+
* viewport. Single source of truth shared by the overlay (draws the frame) and
|
|
33
|
+
* the capture screen (derives the native crop region), so the saved capture
|
|
34
|
+
* matches the frame the user saw.
|
|
35
|
+
*/
|
|
36
|
+
export function documentGuideRect(aspect, containerWidth, containerHeight) {
|
|
37
|
+
let width = containerWidth * FRAME_MAX_WIDTH_RATIO;
|
|
38
|
+
let height = width / aspect;
|
|
39
|
+
const maxHeight = containerHeight * FRAME_MAX_HEIGHT_RATIO;
|
|
40
|
+
if (height > maxHeight) {
|
|
41
|
+
height = maxHeight;
|
|
42
|
+
width = height * aspect;
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
left: (containerWidth - width) / 2,
|
|
46
|
+
top: (containerHeight - height) / 2,
|
|
47
|
+
width,
|
|
48
|
+
height,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Faint black tint over the whole live feed (~0.15 inside the frame). Component
|
|
53
|
+
* constant, not a theme colour — the surround dim is the overridable layer.
|
|
23
54
|
*/
|
|
24
55
|
const DOCUMENT_CAMERA_TINT = "#00000026"; // black @15%
|
|
25
56
|
/** Fallback surround dim when the theme omits `documentOverlayScrim`. */
|
|
26
57
|
const DEFAULT_DOCUMENT_OVERLAY_SCRIM = "#00000066"; // black @40%
|
|
27
58
|
/**
|
|
28
|
-
* Document capture frame — two-layer dim
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* masks rasterize the full-screen layer to a bitmap on the UI thread per invalidation,
|
|
32
|
-
* freezing the camera preview. Respects `knownIdAspectRatio`; the frame stays centred.
|
|
59
|
+
* Document capture frame — two-layer dim + a border that flips to `ovalActive`
|
|
60
|
+
* on `DOCUMENT_READY`. The cutout is one even-odd path, NOT a `<Mask>` (masks
|
|
61
|
+
* rasterize the full-screen layer per invalidation, freezing the preview).
|
|
33
62
|
*/
|
|
34
63
|
export function UseSmileIDDocumentOverlay(props) {
|
|
35
64
|
const themeFromContext = useUseSmileIDTheme();
|
|
36
65
|
const theme = props.theme ?? themeFromContext;
|
|
37
|
-
const
|
|
38
|
-
const
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
const top = (props.containerHeight - frameHeight) / 2;
|
|
46
|
-
// Two-state border: neutral light while idle/positioning, green once committing.
|
|
66
|
+
const insets = useSafeAreaInsets();
|
|
67
|
+
const aspect = props.knownIdAspectRatio ?? DEFAULT_DOCUMENT_ASPECT;
|
|
68
|
+
const isPortrait = aspect < 1;
|
|
69
|
+
const { left, top, width: frameWidth, height: frameHeight, } = documentGuideRect(aspect, props.containerWidth, props.containerHeight);
|
|
70
|
+
// Three-state border, shared with the selfie oval (UseSmileIDOvalBorderPalette):
|
|
71
|
+
// green once the document is correctly framed (ready / capturing / processing),
|
|
72
|
+
// red while detected but mispositioned (too far / close / off-centre / not
|
|
73
|
+
// steady), neutral while idle.
|
|
47
74
|
const captureActive = isDocumentCaptureActive(props.state);
|
|
48
|
-
const borderColor =
|
|
49
|
-
? theme.colors.ovalActive
|
|
50
|
-
: theme.colors.stroke;
|
|
75
|
+
const borderColor = theme.colors[UseSmileIDOvalBorderPalette.tokenFor(props.state, false)];
|
|
51
76
|
const surroundColor = theme.colors.documentOverlayScrim ?? DEFAULT_DOCUMENT_OVERLAY_SCRIM;
|
|
52
77
|
if (props.containerWidth <= 0 || props.containerHeight <= 0) {
|
|
53
78
|
return null;
|
|
@@ -56,21 +81,36 @@ export function UseSmileIDDocumentOverlay(props) {
|
|
|
56
81
|
StyleSheet.absoluteFill,
|
|
57
82
|
{ backgroundColor: DOCUMENT_CAMERA_TINT },
|
|
58
83
|
] }), _jsx(DocumentScrimSurround, { containerWidth: props.containerWidth, containerHeight: props.containerHeight, frameLeft: left, frameTop: top, frameWidth: frameWidth, frameHeight: frameHeight, cornerRadius: FRAME_CORNER_RADIUS, color: surroundColor }), !captureActive ? (_jsx(View, { style: {
|
|
84
|
+
// Inset 10% per axis so the shimmer guide never touches the frame edge.
|
|
59
85
|
position: "absolute",
|
|
60
|
-
left,
|
|
61
|
-
top,
|
|
62
|
-
width: frameWidth,
|
|
63
|
-
height: frameHeight,
|
|
64
|
-
}, pointerEvents: "none", children: _jsx(
|
|
86
|
+
left: left + frameWidth * 0.1,
|
|
87
|
+
top: top + frameHeight * 0.1,
|
|
88
|
+
width: frameWidth * 0.8,
|
|
89
|
+
height: frameHeight * 0.8,
|
|
90
|
+
}, pointerEvents: "none", children: _jsx(UseSmileIDDocumentShimmer, { width: frameWidth * 0.8, height: frameHeight * 0.8, isBackSide: props.isBackSide ?? false, ...(props.documentTypeKind !== undefined
|
|
91
|
+
? { documentTypeKind: props.documentTypeKind }
|
|
92
|
+
: {}) }) })) : null, _jsx(View, { style: {
|
|
65
93
|
position: "absolute",
|
|
66
|
-
left,
|
|
67
|
-
top,
|
|
68
|
-
width: frameWidth,
|
|
69
|
-
height: frameHeight,
|
|
70
|
-
borderWidth:
|
|
71
|
-
borderRadius: FRAME_CORNER_RADIUS,
|
|
94
|
+
left: left - FRAME_BORDER_WIDTH / 2,
|
|
95
|
+
top: top - FRAME_BORDER_WIDTH / 2,
|
|
96
|
+
width: frameWidth + FRAME_BORDER_WIDTH,
|
|
97
|
+
height: frameHeight + FRAME_BORDER_WIDTH,
|
|
98
|
+
borderWidth: FRAME_BORDER_WIDTH,
|
|
99
|
+
borderRadius: FRAME_CORNER_RADIUS + FRAME_BORDER_WIDTH / 2,
|
|
72
100
|
borderColor,
|
|
73
|
-
} }),
|
|
101
|
+
} }), captureActive ? (isPortrait ? (_jsx(View, { style: {
|
|
102
|
+
position: "absolute",
|
|
103
|
+
left: 0,
|
|
104
|
+
right: 0,
|
|
105
|
+
bottom: insets.bottom + PORTRAIT_SPINNER_BOTTOM_GAP,
|
|
106
|
+
alignItems: "center",
|
|
107
|
+
}, pointerEvents: "none", children: _jsx(UseSmileIDCaptureSpinner, { size: SPINNER_SIZE, color: theme.colors.ovalActive, testID: "si_document_capture_spinner" }) })) : (_jsx(View, { style: {
|
|
108
|
+
position: "absolute",
|
|
109
|
+
left: left +
|
|
110
|
+
frameWidth +
|
|
111
|
+
(props.containerWidth - (left + frameWidth) - SPINNER_SIZE) / 2,
|
|
112
|
+
top: top + (frameHeight - SPINNER_SIZE) / 2,
|
|
113
|
+
}, pointerEvents: "none", children: _jsx(UseSmileIDCaptureSpinner, { size: SPINNER_SIZE, color: theme.colors.ovalActive, testID: "si_document_capture_spinner" }) }))) : null, props.feedbackText ? (_jsx(View, { style: {
|
|
74
114
|
position: "absolute",
|
|
75
115
|
top: top + frameHeight + CHIP_TOP_GAP,
|
|
76
116
|
start: 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_smile_id_document_overlay.js","sourceRoot":"","sources":["../../../src/presentation/components/use_smile_id_document_overlay.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EACL,uBAAuB,GAExB,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"use_smile_id_document_overlay.js","sourceRoot":"","sources":["../../../src/presentation/components/use_smile_id_document_overlay.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { DocumentType } from "../../core/models/document_type";
|
|
2
|
+
/** Translucent in-frame document shimmer — the per-type "align here" skeleton, scaled to fit the capture frame. */
|
|
3
|
+
export type UseSmileIDDocumentShimmerProps = {
|
|
4
|
+
readonly width: number;
|
|
5
|
+
readonly height: number;
|
|
6
|
+
/** Selects the skeleton; the green book and passport ignore `isBackSide`. */
|
|
7
|
+
readonly documentTypeKind?: DocumentType["kind"];
|
|
8
|
+
/** Generic documents only: show the back-side skeleton instead of the front. */
|
|
9
|
+
readonly isBackSide?: boolean;
|
|
10
|
+
readonly testID?: string;
|
|
11
|
+
};
|
|
12
|
+
/** Shimmer skeleton for a document type + side. Only generic documents have front/back; passport and green book ignore the side. */
|
|
13
|
+
export declare function documentShimmerXml(documentTypeKind: DocumentType["kind"] | undefined, isBackSide: boolean): string;
|
|
14
|
+
export declare const UseSmileIDDocumentShimmer: import("react").MemoExoticComponent<(props: UseSmileIDDocumentShimmerProps) => import("react").JSX.Element | null>;
|
|
15
|
+
//# sourceMappingURL=use_smile_id_document_shimmer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_smile_id_document_shimmer.d.ts","sourceRoot":"","sources":["../../../src/presentation/components/use_smile_id_document_shimmer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAQpE,mHAAmH;AACnH,MAAM,MAAM,8BAA8B,GAAG;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,QAAQ,CAAC,gBAAgB,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IACjD,gFAAgF;IAChF,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,oIAAoI;AACpI,wBAAgB,kBAAkB,CAChC,gBAAgB,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,SAAS,EAClD,UAAU,EAAE,OAAO,GAClB,MAAM,CASR;AAED,eAAO,MAAM,yBAAyB,8CACM,8BAA8B,wCAazE,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { memo } from "react";
|
|
3
|
+
import { SvgXml } from "react-native-svg";
|
|
4
|
+
import { SI_DOCUMENT_BACK_SHIMMER, SI_DOCUMENT_FRONT_SHIMMER, SI_DOCUMENT_GREEN_BOOK_SHIMMER, SI_DOCUMENT_PASSPORT_SHIMMER, } from "../assets/svg/document_shimmer_strings";
|
|
5
|
+
/** Shimmer skeleton for a document type + side. Only generic documents have front/back; passport and green book ignore the side. */
|
|
6
|
+
export function documentShimmerXml(documentTypeKind, isBackSide) {
|
|
7
|
+
switch (documentTypeKind) {
|
|
8
|
+
case "passport":
|
|
9
|
+
return SI_DOCUMENT_PASSPORT_SHIMMER;
|
|
10
|
+
case "southAfricaGreenBook":
|
|
11
|
+
return SI_DOCUMENT_GREEN_BOOK_SHIMMER;
|
|
12
|
+
default:
|
|
13
|
+
return isBackSide ? SI_DOCUMENT_BACK_SHIMMER : SI_DOCUMENT_FRONT_SHIMMER;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export const UseSmileIDDocumentShimmer = memo(function UseSmileIDDocumentShimmer(props) {
|
|
17
|
+
const { width, height, documentTypeKind, isBackSide = false } = props;
|
|
18
|
+
if (width <= 0 || height <= 0)
|
|
19
|
+
return null;
|
|
20
|
+
// Default preserveAspectRatio (meet) fits the skeleton in the frame, undistorted.
|
|
21
|
+
return (_jsx(SvgXml, { xml: documentShimmerXml(documentTypeKind, isBackSide), width: width, height: height, ...(props.testID !== undefined ? { testID: props.testID } : {}) }));
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=use_smile_id_document_shimmer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_smile_id_document_shimmer.js","sourceRoot":"","sources":["../../../src/presentation/components/use_smile_id_document_shimmer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,8BAA8B,EAC9B,4BAA4B,GAC7B,MAAM,wCAAwC,CAAC;AAahD,oIAAoI;AACpI,MAAM,UAAU,kBAAkB,CAChC,gBAAkD,EAClD,UAAmB;IAEnB,QAAQ,gBAAgB,EAAE,CAAC;QACzB,KAAK,UAAU;YACb,OAAO,4BAA4B,CAAC;QACtC,KAAK,sBAAsB;YACzB,OAAO,8BAA8B,CAAC;QACxC;YACE,OAAO,UAAU,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,yBAAyB,CAAC;IAC7E,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAC3C,SAAS,yBAAyB,CAAC,KAAqC;IACtE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,UAAU,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC;IACtE,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,kFAAkF;IAClF,OAAO,CACL,KAAC,MAAM,IACL,GAAG,EAAE,kBAAkB,CAAC,gBAAgB,EAAE,UAAU,CAAC,EACrD,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,KACV,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAChE,CACH,CAAC;AACJ,CAAC,CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_smile_id_enhanced_smart_selfie_clip.d.ts","sourceRoot":"","sources":["../../../src/presentation/components/use_smile_id_enhanced_smart_selfie_clip.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"use_smile_id_enhanced_smart_selfie_clip.d.ts","sourceRoot":"","sources":["../../../src/presentation/components/use_smile_id_enhanced_smart_selfie_clip.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAS3D,eAAO,MAAM,4BAA4B,EACsB,eAAe,CAAC;AAE/E,gFAAgF;AAChF,eAAO,MAAM,oCAAoC,MAAM,CAAC;AACxD,gEAAgE;AAChE,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAE7C,MAAM,MAAM,sCAAsC,GAAG;IACnD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,sCAAsC,sCA0D9C"}
|
|
@@ -4,7 +4,7 @@ import { View } from "react-native";
|
|
|
4
4
|
import LottieView from "lottie-react-native";
|
|
5
5
|
import { useReducedMotion } from "../utils/use_reduced_motion";
|
|
6
6
|
import { FaceOvalDefaults } from "./face_oval_defaults";
|
|
7
|
-
import {
|
|
7
|
+
import { ENHANCED_SMART_SELFIE_ANIMATION_SPEED, ENHANCED_SMART_SELFIE_TOTAL_FRAMES, } from "./helpers/enhanced_smart_selfie_animation_frames";
|
|
8
8
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
9
9
|
export const ESS_ALL_DIRECTIONS_ANIMATION = require("../assets/si_ess_animation_all_directions.json");
|
|
10
10
|
/** Square box the Enhanced Smart Selfie cues render in, centred on the oval. */
|
|
@@ -32,8 +32,6 @@ export function UseSmileIDEnhancedSmartSelfieClip(props) {
|
|
|
32
32
|
top: ovalCenterY - size / 2 + VERTICAL_ALIGNMENT_OFFSET,
|
|
33
33
|
width: size,
|
|
34
34
|
height: size,
|
|
35
|
-
// Translucent so the face stays the focal point behind the arrow cue.
|
|
36
|
-
opacity: ENHANCED_SMART_SELFIE_ANIMATION_OPACITY,
|
|
37
35
|
};
|
|
38
36
|
if (reducedMotion) {
|
|
39
37
|
return (_jsx(View, { pointerEvents: "none", style: containerStyle, testID: props.testID, children: _jsx(LottieView, { source: ESS_ALL_DIRECTIONS_ANIMATION, progress: endFrame / ENHANCED_SMART_SELFIE_TOTAL_FRAMES, autoPlay: false, loop: false, style: { width: "100%", height: "100%" } }) }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_smile_id_enhanced_smart_selfie_clip.js","sourceRoot":"","sources":["../../../src/presentation/components/use_smile_id_enhanced_smart_selfie_clip.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAkC,MAAM,cAAc,CAAC;AACpE,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"use_smile_id_enhanced_smart_selfie_clip.js","sourceRoot":"","sources":["../../../src/presentation/components/use_smile_id_enhanced_smart_selfie_clip.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAkC,MAAM,cAAc,CAAC;AACpE,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,qCAAqC,EACrC,kCAAkC,GACnC,MAAM,kDAAkD,CAAC;AAE1D,iEAAiE;AACjE,MAAM,CAAC,MAAM,4BAA4B,GACvC,OAAO,CAAC,gDAAgD,CAAoB,CAAC;AAE/E,gFAAgF;AAChF,MAAM,CAAC,MAAM,oCAAoC,GAAG,GAAG,CAAC;AACxD,gEAAgE;AAChE,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,EAAE,CAAC;AAY7C;;;;;;GAMG;AACH,MAAM,UAAU,iCAAiC,CAC/C,KAA6C;IAE7C,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IACzC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAE,GACvE,KAAK,CAAC;IAER,IAAI,cAAc,IAAI,CAAC,IAAI,eAAe,IAAI,CAAC,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,oCAAoC,CAAC;IAClD,MAAM,WAAW,GAAG,eAAe,GAAG,gBAAgB,CAAC,gBAAgB,CAAC;IAExE,MAAM,cAAc,GAAG;QACrB,QAAQ,EAAE,UAAmB;QAC7B,IAAI,EAAE,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC;QACjC,GAAG,EAAE,WAAW,GAAG,IAAI,GAAG,CAAC,GAAG,yBAAyB;QACvD,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,IAAI;KACb,CAAC;IAEF,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CACL,KAAC,IAAI,IAAC,aAAa,EAAC,MAAM,EAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,YACpE,KAAC,UAAU,IACT,MAAM,EAAE,4BAA4B,EACpC,QAAQ,EAAE,QAAQ,GAAG,kCAAkC,EACvD,QAAQ,EAAE,KAAK,EACf,IAAI,EAAE,KAAK,EACX,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GACxC,GACG,CACR,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,4EAA4E;QAC5E,OAAO,CACL,KAAC,IAAI,IAAC,aAAa,EAAC,MAAM,EAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,YACpE,KAAC,UAAU,IACT,MAAM,EAAE,4BAA4B,EACpC,QAAQ,QACR,IAAI,QACJ,KAAK,EAAE,qCAAqC,EAC5C,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GACxC,GACG,CACR,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,YAAY,IACX,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,KAAK,CAAC,MAAM,GACpB,CACH,CAAC;AACJ,CAAC;AASD;;;;GAIG;AACH,SAAS,YAAY,CAAC,KAAwB;IAC5C,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IACvC,MAAM,SAAS,GAAG,MAAM,CAAa,IAAI,CAAC,CAAC;IAC3C,2CAA2C;IAC3C,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAEhC,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;QAC1B,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE3B,MAAM,qBAAqB,GAAG,CAAC,WAAoB,EAAE,EAAE;QACrD,IAAI,WAAW;YAAE,OAAO;QACxB,UAAU,CAAC,OAAO,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;QACzC,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,KAAC,IAAI,IACH,aAAa,EAAC,MAAM,EACpB,KAAK,EAAE,KAAK,CAAC,cAAc,EAC3B,MAAM,EAAE,KAAK,CAAC,MAAM,YAEpB,KAAC,UAAU,IACT,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,4BAA4B,EACpC,IAAI,EAAE,KAAK,EACX,QAAQ,EAAE,KAAK,EACf,KAAK,EAAE,qCAAqC,EAC5C,iBAAiB,EAAE,qBAAqB,EACxC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GACxC,GACG,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_smile_id_guideline_thumbnail.d.ts","sourceRoot":"","sources":["../../../src/presentation/components/use_smile_id_guideline_thumbnail.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use_smile_id_guideline_thumbnail.d.ts","sourceRoot":"","sources":["../../../src/presentation/components/use_smile_id_guideline_thumbnail.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAwBhF,MAAM,MAAM,iCAAiC,GAAG;IAC9C,QAAQ,CAAC,SAAS,EAAE,oBAAoB,CAAC;IACzC,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC;CAClC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,EAC3C,SAAS,EACT,KAAK,EAAE,SAAS,GACjB,EAAE,iCAAiC,+BAiJnC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
2
3
|
import { StyleSheet, Text, View } from "react-native";
|
|
3
4
|
import { useUseSmileIDTheme } from "../theme/theme_context";
|
|
4
5
|
import { useUseSmileIDLocalizations } from "../../l10n/use_smile_id_localizations_provider";
|
|
@@ -14,6 +15,14 @@ const BADGE_SIZE = 16;
|
|
|
14
15
|
const BADGE_ICON_SIZE = 14;
|
|
15
16
|
// The badge overhangs the top-end corner of the card.
|
|
16
17
|
const BADGE_OVERHANG = -10;
|
|
18
|
+
// Document card SVGs carry a transparent bleed around the visible card (3px
|
|
19
|
+
// L/R, 2px top, 4px bottom); the tile offsets the SVG by it so the card fills
|
|
20
|
+
// the framed box exactly.
|
|
21
|
+
const DOC_CARD_RADIUS = 4;
|
|
22
|
+
const DOC_BLEED_X = 3;
|
|
23
|
+
const DOC_BLEED_TOP = 2;
|
|
24
|
+
const DOC_BLEED_BOTTOM = 4;
|
|
25
|
+
const DOC_BADGE_OVERHANG = -8;
|
|
17
26
|
/**
|
|
18
27
|
* A capture-guideline tile: a bordered card with the illustration and a status
|
|
19
28
|
* pill, a check/close badge overhanging the top-end corner, and a caption.
|
|
@@ -22,12 +31,51 @@ export function UseSmileIDGuidelineThumbnail({ guideline, theme: themeProp, }) {
|
|
|
22
31
|
const themeFromContext = useUseSmileIDTheme();
|
|
23
32
|
const theme = themeProp ?? themeFromContext;
|
|
24
33
|
const localizations = useUseSmileIDLocalizations();
|
|
34
|
+
// Measured card width — the card scales to its column, so the SVG size and
|
|
35
|
+
// bleed offset scale with it.
|
|
36
|
+
const [measuredCardWidth, setMeasuredCardWidth] = useState(0);
|
|
25
37
|
const allowed = guideline.status === "allowed";
|
|
26
38
|
const Illustration = guideline.image;
|
|
27
39
|
const Badge = allowed ? SiFilledCheckCircle : SiFilledCloseCircle;
|
|
28
40
|
const badgeLabel = allowed
|
|
29
41
|
? localizations.siCdGuidelineAllowed
|
|
30
42
|
: localizations.siCdGuidelineBlocked;
|
|
43
|
+
const caption = guideline.label(localizations);
|
|
44
|
+
// Document tile: one of four equal columns (so all four fit one row); the
|
|
45
|
+
// self-contained card SVG fills the column, framed by a border + shadow with
|
|
46
|
+
// an overhanging badge (no pill).
|
|
47
|
+
if (guideline.card) {
|
|
48
|
+
const { width: figmaCardWidth, height: figmaCardHeight } = guideline.card;
|
|
49
|
+
const scale = measuredCardWidth > 0 ? measuredCardWidth / figmaCardWidth : 0;
|
|
50
|
+
return (_jsxs(View, { style: styles.documentTile, children: [_jsxs(View, { style: [styles.documentCardWrap, { maxWidth: figmaCardWidth }], children: [_jsxs(View, { style: [
|
|
51
|
+
styles.documentCard,
|
|
52
|
+
{
|
|
53
|
+
aspectRatio: figmaCardWidth / figmaCardHeight,
|
|
54
|
+
backgroundColor: theme.colors.cardBackground,
|
|
55
|
+
},
|
|
56
|
+
], onLayout: (event) => {
|
|
57
|
+
const width = event.nativeEvent.layout.width;
|
|
58
|
+
setMeasuredCardWidth((previous) => Math.abs(previous - width) < 0.5 ? previous : width);
|
|
59
|
+
}, children: [scale > 0 ? (_jsx(View, { style: {
|
|
60
|
+
position: "absolute",
|
|
61
|
+
left: -DOC_BLEED_X * scale,
|
|
62
|
+
top: -DOC_BLEED_TOP * scale,
|
|
63
|
+
}, children: _jsx(Illustration, { width: (figmaCardWidth + DOC_BLEED_X * 2) * scale, height: (figmaCardHeight + DOC_BLEED_TOP + DOC_BLEED_BOTTOM) * scale }) })) : null, _jsx(View, { pointerEvents: "none", style: [
|
|
64
|
+
styles.documentCardBorder,
|
|
65
|
+
{ borderColor: theme.colors.stroke },
|
|
66
|
+
] })] }), _jsx(View, { style: [
|
|
67
|
+
styles.badge,
|
|
68
|
+
styles.documentBadge,
|
|
69
|
+
{ backgroundColor: theme.colors.cardBackground },
|
|
70
|
+
], accessibilityRole: "image", accessibilityLabel: badgeLabel, children: _jsx(Badge, { size: BADGE_ICON_SIZE }) })] }), _jsx(Text, { numberOfLines: 1, style: {
|
|
71
|
+
...theme.typography.cardCaption,
|
|
72
|
+
fontSize: 10,
|
|
73
|
+
lineHeight: 12,
|
|
74
|
+
color: theme.colors.cardText,
|
|
75
|
+
textAlign: "center",
|
|
76
|
+
marginTop: theme.spacing.extraSmall,
|
|
77
|
+
}, children: caption })] }));
|
|
78
|
+
}
|
|
31
79
|
return (_jsxs(View, { style: styles.container, children: [_jsxs(View, { children: [_jsxs(View, { style: [
|
|
32
80
|
styles.card,
|
|
33
81
|
{
|
|
@@ -51,7 +99,7 @@ export function UseSmileIDGuidelineThumbnail({ guideline, theme: themeProp, }) {
|
|
|
51
99
|
color: theme.colors.primary,
|
|
52
100
|
textAlign: "center",
|
|
53
101
|
marginTop: theme.spacing.extraSmall,
|
|
54
|
-
}, children:
|
|
102
|
+
}, children: caption })] }));
|
|
55
103
|
}
|
|
56
104
|
const styles = StyleSheet.create({
|
|
57
105
|
container: { alignItems: "center" },
|
|
@@ -92,5 +140,40 @@ const styles = StyleSheet.create({
|
|
|
92
140
|
shadowOffset: { width: 0, height: 1 },
|
|
93
141
|
elevation: 1,
|
|
94
142
|
},
|
|
143
|
+
// One of four equal columns so the document guidelines always fit one row.
|
|
144
|
+
documentTile: {
|
|
145
|
+
width: "25%",
|
|
146
|
+
alignItems: "center",
|
|
147
|
+
paddingHorizontal: 3,
|
|
148
|
+
},
|
|
149
|
+
// Capped at the artwork's natural width (inline maxWidth) so it never grows
|
|
150
|
+
// past its design size on wide screens.
|
|
151
|
+
documentCardWrap: {
|
|
152
|
+
width: "100%",
|
|
153
|
+
alignSelf: "center",
|
|
154
|
+
},
|
|
155
|
+
documentCard: {
|
|
156
|
+
width: "100%",
|
|
157
|
+
borderRadius: DOC_CARD_RADIUS,
|
|
158
|
+
// No `overflow: hidden` — would clip the SVG's bleed and the shadow.
|
|
159
|
+
shadowColor: "#000000",
|
|
160
|
+
shadowOpacity: 0.1,
|
|
161
|
+
shadowRadius: 3,
|
|
162
|
+
shadowOffset: { width: 0, height: 1 },
|
|
163
|
+
elevation: 1,
|
|
164
|
+
},
|
|
165
|
+
documentCardBorder: {
|
|
166
|
+
position: "absolute",
|
|
167
|
+
top: 0,
|
|
168
|
+
bottom: 0,
|
|
169
|
+
start: 0,
|
|
170
|
+
end: 0,
|
|
171
|
+
borderRadius: DOC_CARD_RADIUS,
|
|
172
|
+
borderWidth: 1,
|
|
173
|
+
},
|
|
174
|
+
documentBadge: {
|
|
175
|
+
top: DOC_BADGE_OVERHANG,
|
|
176
|
+
end: DOC_BADGE_OVERHANG,
|
|
177
|
+
},
|
|
95
178
|
});
|
|
96
179
|
//# sourceMappingURL=use_smile_id_guideline_thumbnail.js.map
|