@authbridge/web-sdk 1.2.2
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/README.md +333 -0
- package/dist/App.svelte.d.ts +1 -0
- package/dist/ConfigurationProvider.svelte.d.ts +1 -0
- package/dist/Routes.svelte.d.ts +1 -0
- package/dist/authbridge-logo.png +0 -0
- package/dist/authbridge-sdk.js +21677 -0
- package/dist/authbridge-sdk.js.map +1 -0
- package/dist/authbridge-sdk.umd.cjs +75 -0
- package/dist/authbridge-sdk.umd.cjs.map +1 -0
- package/dist/decline.svg +19 -0
- package/dist/dev.d.ts +2 -0
- package/dist/dev.d.ts.map +1 -0
- package/dist/document-photo-back-start.svg +37 -0
- package/dist/final.svg +10 -0
- package/dist/fonts/Avenir-Black.ttf +0 -0
- package/dist/fonts/Avenir-Book.ttf +0 -0
- package/dist/fonts/Avenir-Heavy.ttf +0 -0
- package/dist/fonts/Avenir-Light.ttf +0 -0
- package/dist/fonts/Avenir-Regular.ttf +0 -0
- package/dist/icons/apple-touch-icon.png +0 -0
- package/dist/icons/icon-192.png +0 -0
- package/dist/icons/icon-512.png +0 -0
- package/dist/icons/icon-maskable-512.png +0 -0
- package/dist/images/authbridge-icon.svg +5 -0
- package/dist/images/back-white.svg +3 -0
- package/dist/images/back.svg +3 -0
- package/dist/images/close.svg +4 -0
- package/dist/images/decline.svg +5 -0
- package/dist/images/document-photo-back-start.svg +95 -0
- package/dist/images/drivers-licence-back.svg +100 -0
- package/dist/images/final.svg +4 -0
- package/dist/images/resubmit.svg +5 -0
- package/dist/images/selfie-start.svg +26 -0
- package/dist/images/welcome.svg +70 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.html +610 -0
- package/dist/lib/atoms/Button/Button.svelte.d.ts +1 -0
- package/dist/lib/atoms/Button/Button.test.d.ts +2 -0
- package/dist/lib/atoms/Button/Button.test.d.ts.map +1 -0
- package/dist/lib/atoms/Button/index.d.ts +2 -0
- package/dist/lib/atoms/Button/index.d.ts.map +1 -0
- package/dist/lib/atoms/ButtonWithIcon/ButtonWithIcon.svelte.d.ts +1 -0
- package/dist/lib/atoms/ButtonWithIcon/index.d.ts +2 -0
- package/dist/lib/atoms/ButtonWithIcon/index.d.ts.map +1 -0
- package/dist/lib/atoms/CameraButton/CameraButton.svelte.d.ts +1 -0
- package/dist/lib/atoms/CameraButton/index.d.ts +2 -0
- package/dist/lib/atoms/CameraButton/index.d.ts.map +1 -0
- package/dist/lib/atoms/Container/Container.svelte.d.ts +1 -0
- package/dist/lib/atoms/Container/index.d.ts +2 -0
- package/dist/lib/atoms/Container/index.d.ts.map +1 -0
- package/dist/lib/atoms/DocumentOption/DocumentOption.svelte.d.ts +1 -0
- package/dist/lib/atoms/DocumentOption/index.d.ts +2 -0
- package/dist/lib/atoms/DocumentOption/index.d.ts.map +1 -0
- package/dist/lib/atoms/ErrorText/ErrorText.svelte.d.ts +1 -0
- package/dist/lib/atoms/ErrorText/index.d.ts +1 -0
- package/dist/lib/atoms/ErrorText/index.d.ts.map +1 -0
- package/dist/lib/atoms/FaceOval/FaceOval.svelte.d.ts +1 -0
- package/dist/lib/atoms/FaceOval/index.d.ts +2 -0
- package/dist/lib/atoms/FaceOval/index.d.ts.map +1 -0
- package/dist/lib/atoms/FlyingText/FlyingText.svelte.d.ts +1 -0
- package/dist/lib/atoms/FlyingText/index.d.ts +2 -0
- package/dist/lib/atoms/FlyingText/index.d.ts.map +1 -0
- package/dist/lib/atoms/IconButton/IconButton.svelte.d.ts +1 -0
- package/dist/lib/atoms/IconButton/index.d.ts +2 -0
- package/dist/lib/atoms/IconButton/index.d.ts.map +1 -0
- package/dist/lib/atoms/IconCloseButton/IconCloseButton.svelte.d.ts +1 -0
- package/dist/lib/atoms/IconCloseButton/index.d.ts +2 -0
- package/dist/lib/atoms/IconCloseButton/index.d.ts.map +1 -0
- package/dist/lib/atoms/Icons/Card.svelte.d.ts +1 -0
- package/dist/lib/atoms/Icons/Icon.svelte.d.ts +1 -0
- package/dist/lib/atoms/Icons/License.svelte.d.ts +1 -0
- package/dist/lib/atoms/Icons/Passport.svelte.d.ts +1 -0
- package/dist/lib/atoms/Icons/PassportTwo.svelte.d.ts +1 -0
- package/dist/lib/atoms/Icons/Voter.svelte.d.ts +1 -0
- package/dist/lib/atoms/Image/Image.svelte.d.ts +1 -0
- package/dist/lib/atoms/Image/index.d.ts +2 -0
- package/dist/lib/atoms/Image/index.d.ts.map +1 -0
- package/dist/lib/atoms/Image/types.d.ts +7 -0
- package/dist/lib/atoms/Image/types.d.ts.map +1 -0
- package/dist/lib/atoms/Input/Input.svelte.d.ts +1 -0
- package/dist/lib/atoms/Input/index.d.ts +3 -0
- package/dist/lib/atoms/Input/index.d.ts.map +1 -0
- package/dist/lib/atoms/Input/types.d.ts +6 -0
- package/dist/lib/atoms/Input/types.d.ts.map +1 -0
- package/dist/lib/atoms/ListItem/ListItem.svelte.d.ts +1 -0
- package/dist/lib/atoms/ListItem/index.d.ts +2 -0
- package/dist/lib/atoms/ListItem/index.d.ts.map +1 -0
- package/dist/lib/atoms/Loader/Loader.svelte.d.ts +1 -0
- package/dist/lib/atoms/Loader/index.d.ts +2 -0
- package/dist/lib/atoms/Loader/index.d.ts.map +1 -0
- package/dist/lib/atoms/NextStepButton/Loader/Loader.svelte.d.ts +1 -0
- package/dist/lib/atoms/NextStepButton/Loader/index.d.ts +2 -0
- package/dist/lib/atoms/NextStepButton/Loader/index.d.ts.map +1 -0
- package/dist/lib/atoms/NextStepButton/NextStepButton.svelte.d.ts +1 -0
- package/dist/lib/atoms/NextStepButton/index.d.ts +2 -0
- package/dist/lib/atoms/NextStepButton/index.d.ts.map +1 -0
- package/dist/lib/atoms/Overlay/Overlay.svelte.d.ts +1 -0
- package/dist/lib/atoms/Overlay/index.d.ts +2 -0
- package/dist/lib/atoms/Overlay/index.d.ts.map +1 -0
- package/dist/lib/atoms/Overlay/utils.d.ts +3 -0
- package/dist/lib/atoms/Overlay/utils.d.ts.map +1 -0
- package/dist/lib/atoms/Paragraph/Paragraph.svelte.d.ts +1 -0
- package/dist/lib/atoms/Paragraph/index.d.ts +2 -0
- package/dist/lib/atoms/Paragraph/index.d.ts.map +1 -0
- package/dist/lib/atoms/Photo/Photo.svelte.d.ts +1 -0
- package/dist/lib/atoms/Photo/index.d.ts +2 -0
- package/dist/lib/atoms/Photo/index.d.ts.map +1 -0
- package/dist/lib/atoms/PrivacyLink/PrivacyLink.svelte.d.ts +1 -0
- package/dist/lib/atoms/PrivacyLink/index.d.ts +2 -0
- package/dist/lib/atoms/PrivacyLink/index.d.ts.map +1 -0
- package/dist/lib/atoms/QualityFeedback/QualityFeedback.svelte.d.ts +1 -0
- package/dist/lib/atoms/QualityFeedback/index.d.ts +2 -0
- package/dist/lib/atoms/QualityFeedback/index.d.ts.map +1 -0
- package/dist/lib/atoms/Title/Title.svelte.d.ts +1 -0
- package/dist/lib/atoms/Title/index.d.ts +2 -0
- package/dist/lib/atoms/Title/index.d.ts.map +1 -0
- package/dist/lib/atoms/VideoContainer/VideoContainer.svelte.d.ts +1 -0
- package/dist/lib/atoms/VideoContainer/index.d.ts +2 -0
- package/dist/lib/atoms/VideoContainer/index.d.ts.map +1 -0
- package/dist/lib/atoms/index.d.ts +21 -0
- package/dist/lib/atoms/index.d.ts.map +1 -0
- package/dist/lib/components/LivenessCheck.svelte.d.ts +1 -0
- package/dist/lib/components/LivenessCheck.test.d.ts +2 -0
- package/dist/lib/components/LivenessCheck.test.d.ts.map +1 -0
- package/dist/lib/components/VerificationResult.svelte.d.ts +1 -0
- package/dist/lib/components/VerificationResult.test.d.ts +5 -0
- package/dist/lib/components/VerificationResult.test.d.ts.map +1 -0
- package/dist/lib/configuration/configuration.d.ts +3 -0
- package/dist/lib/configuration/configuration.d.ts.map +1 -0
- package/dist/lib/configuration/translation.json.d.ts +1284 -0
- package/dist/lib/contexts/app-state/index.d.ts +5 -0
- package/dist/lib/contexts/app-state/index.d.ts.map +1 -0
- package/dist/lib/contexts/app-state/stores.d.ts +103 -0
- package/dist/lib/contexts/app-state/stores.d.ts.map +1 -0
- package/dist/lib/contexts/app-state/stores.test.d.ts +6 -0
- package/dist/lib/contexts/app-state/stores.test.d.ts.map +1 -0
- package/dist/lib/contexts/app-state/types.d.ts +72 -0
- package/dist/lib/contexts/app-state/types.d.ts.map +1 -0
- package/dist/lib/contexts/app-state/utils.d.ts +3 -0
- package/dist/lib/contexts/app-state/utils.d.ts.map +1 -0
- package/dist/lib/contexts/configuration/getters.d.ts +10 -0
- package/dist/lib/contexts/configuration/getters.d.ts.map +1 -0
- package/dist/lib/contexts/configuration/index.d.ts +4 -0
- package/dist/lib/contexts/configuration/index.d.ts.map +1 -0
- package/dist/lib/contexts/configuration/store.d.ts +3 -0
- package/dist/lib/contexts/configuration/store.d.ts.map +1 -0
- package/dist/lib/contexts/configuration/types.d.ts +203 -0
- package/dist/lib/contexts/configuration/types.d.ts.map +1 -0
- package/dist/lib/contexts/flows/hooks.d.ts +10 -0
- package/dist/lib/contexts/flows/hooks.d.ts.map +1 -0
- package/dist/lib/contexts/flows/index.d.ts +3 -0
- package/dist/lib/contexts/flows/index.d.ts.map +1 -0
- package/dist/lib/contexts/flows/types.d.ts +13 -0
- package/dist/lib/contexts/flows/types.d.ts.map +1 -0
- package/dist/lib/contexts/navigation/constants.d.ts +12 -0
- package/dist/lib/contexts/navigation/constants.d.ts.map +1 -0
- package/dist/lib/contexts/navigation/hooks.d.ts +6 -0
- package/dist/lib/contexts/navigation/hooks.d.ts.map +1 -0
- package/dist/lib/contexts/navigation/index.d.ts +3 -0
- package/dist/lib/contexts/navigation/index.d.ts.map +1 -0
- package/dist/lib/contexts/navigation/types.d.ts +8 -0
- package/dist/lib/contexts/navigation/types.d.ts.map +1 -0
- package/dist/lib/contexts/translation/T.svelte.d.ts +1 -0
- package/dist/lib/contexts/translation/hooks.d.ts +4 -0
- package/dist/lib/contexts/translation/hooks.d.ts.map +1 -0
- package/dist/lib/contexts/translation/index.d.ts +4 -0
- package/dist/lib/contexts/translation/index.d.ts.map +1 -0
- package/dist/lib/contexts/translation/language-detection.test.d.ts +7 -0
- package/dist/lib/contexts/translation/language-detection.test.d.ts.map +1 -0
- package/dist/lib/contexts/translation/translation.test.d.ts +10 -0
- package/dist/lib/contexts/translation/translation.test.d.ts.map +1 -0
- package/dist/lib/contexts/translation/types.d.ts +4 -0
- package/dist/lib/contexts/translation/types.d.ts.map +1 -0
- package/dist/lib/hooks/createToggle/createToggle.d.ts +5 -0
- package/dist/lib/hooks/createToggle/createToggle.d.ts.map +1 -0
- package/dist/lib/molecules/DocumentOption/DocumentOption.svelte.d.ts +1 -0
- package/dist/lib/molecules/DocumentOption/index.d.ts +3 -0
- package/dist/lib/molecules/DocumentOption/index.d.ts.map +1 -0
- package/dist/lib/molecules/DocumentOption/types.d.ts +7 -0
- package/dist/lib/molecules/DocumentOption/types.d.ts.map +1 -0
- package/dist/lib/molecules/List/List.svelte.d.ts +1 -0
- package/dist/lib/molecules/List/index.d.ts +3 -0
- package/dist/lib/molecules/List/index.d.ts.map +1 -0
- package/dist/lib/molecules/List/types.d.ts +7 -0
- package/dist/lib/molecules/List/types.d.ts.map +1 -0
- package/dist/lib/molecules/List/utils.d.ts +3 -0
- package/dist/lib/molecules/List/utils.d.ts.map +1 -0
- package/dist/lib/molecules/NavigationButtons/NavigationButtons.svelte.d.ts +1 -0
- package/dist/lib/molecules/NavigationButtons/index.d.ts +3 -0
- package/dist/lib/molecules/NavigationButtons/index.d.ts.map +1 -0
- package/dist/lib/molecules/NavigationButtons/types.d.ts +13 -0
- package/dist/lib/molecules/NavigationButtons/types.d.ts.map +1 -0
- package/dist/lib/molecules/index.d.ts +4 -0
- package/dist/lib/molecules/index.d.ts.map +1 -0
- package/dist/lib/organisms/DocumentOptions/DocumentOptions.svelte.d.ts +1 -0
- package/dist/lib/organisms/DocumentOptions/index.d.ts +3 -0
- package/dist/lib/organisms/DocumentOptions/index.d.ts.map +1 -0
- package/dist/lib/organisms/DocumentOptions/types.d.ts +16 -0
- package/dist/lib/organisms/DocumentOptions/types.d.ts.map +1 -0
- package/dist/lib/organisms/DocumentOptions/utils.d.ts +4 -0
- package/dist/lib/organisms/DocumentOptions/utils.d.ts.map +1 -0
- package/dist/lib/organisms/index.d.ts +2 -0
- package/dist/lib/organisms/index.d.ts.map +1 -0
- package/dist/lib/pages/CameraPermissionDenied.svelte.d.ts +1 -0
- package/dist/lib/pages/CheckDocument.svelte.d.ts +1 -0
- package/dist/lib/pages/CheckDocumentPhotoBack.svelte.d.ts +1 -0
- package/dist/lib/pages/CheckSelfie.svelte.d.ts +1 -0
- package/dist/lib/pages/Decline.svelte.d.ts +1 -0
- package/dist/lib/pages/DocumentPhoto.svelte.d.ts +1 -0
- package/dist/lib/pages/DocumentPhoto.test.d.ts +2 -0
- package/dist/lib/pages/DocumentPhoto.test.d.ts.map +1 -0
- package/dist/lib/pages/DocumentPhotoBack.svelte.d.ts +1 -0
- package/dist/lib/pages/DocumentPhotoBackStart.svelte.d.ts +1 -0
- package/dist/lib/pages/DocumentSelect.test.d.ts +2 -0
- package/dist/lib/pages/DocumentSelect.test.d.ts.map +1 -0
- package/dist/lib/pages/DocumentSelection.svelte.d.ts +1 -0
- package/dist/lib/pages/DocumentStart.svelte.d.ts +1 -0
- package/dist/lib/pages/DocumentUpload.svelte.d.ts +1 -0
- package/dist/lib/pages/DocumentUpload.test.d.ts +2 -0
- package/dist/lib/pages/DocumentUpload.test.d.ts.map +1 -0
- package/dist/lib/pages/ErrorPage.svelte.d.ts +1 -0
- package/dist/lib/pages/Final.svelte.d.ts +1 -0
- package/dist/lib/pages/Loading.svelte.d.ts +1 -0
- package/dist/lib/pages/POACapture.svelte.d.ts +1 -0
- package/dist/lib/pages/POAReview.svelte.d.ts +1 -0
- package/dist/lib/pages/POASelect.svelte.d.ts +1 -0
- package/dist/lib/pages/Resubmission.svelte.d.ts +1 -0
- package/dist/lib/pages/ReviewSubmit.svelte.d.ts +1 -0
- package/dist/lib/pages/ReviewSubmit.test.d.ts +2 -0
- package/dist/lib/pages/ReviewSubmit.test.d.ts.map +1 -0
- package/dist/lib/pages/Selfie.svelte.d.ts +1 -0
- package/dist/lib/pages/SelfieCapture.svelte.d.ts +1 -0
- package/dist/lib/pages/SelfieCapture.test.d.ts +2 -0
- package/dist/lib/pages/SelfieCapture.test.d.ts.map +1 -0
- package/dist/lib/pages/SelfieStart.svelte.d.ts +1 -0
- package/dist/lib/pages/SessionExpired.svelte.d.ts +1 -0
- package/dist/lib/pages/UnsupportedBrowser.svelte.d.ts +1 -0
- package/dist/lib/pages/Welcome.svelte.d.ts +1 -0
- package/dist/lib/pages/Welcome.test.d.ts +2 -0
- package/dist/lib/pages/Welcome.test.d.ts.map +1 -0
- package/dist/lib/pages/index.d.ts +26 -0
- package/dist/lib/pages/index.d.ts.map +1 -0
- package/dist/lib/services/analytics.d.ts +8 -0
- package/dist/lib/services/analytics.d.ts.map +1 -0
- package/dist/lib/services/api/liveness.d.ts +33 -0
- package/dist/lib/services/api/liveness.d.ts.map +1 -0
- package/dist/lib/services/api/liveness.test.d.ts +6 -0
- package/dist/lib/services/api/liveness.test.d.ts.map +1 -0
- package/dist/lib/services/api/verification-polling.test.d.ts +6 -0
- package/dist/lib/services/api/verification-polling.test.d.ts.map +1 -0
- package/dist/lib/services/api/verification.d.ts +65 -0
- package/dist/lib/services/api/verification.d.ts.map +1 -0
- package/dist/lib/services/api/verification.test.d.ts +9 -0
- package/dist/lib/services/api/verification.test.d.ts.map +1 -0
- package/dist/lib/services/camera-manager/index.d.ts +2 -0
- package/dist/lib/services/camera-manager/index.d.ts.map +1 -0
- package/dist/lib/services/camera-manager/utils.d.ts +2 -0
- package/dist/lib/services/camera-manager/utils.d.ts.map +1 -0
- package/dist/lib/services/file-validation/index.d.ts +3 -0
- package/dist/lib/services/file-validation/index.d.ts.map +1 -0
- package/dist/lib/services/file-validation/validator.d.ts +27 -0
- package/dist/lib/services/file-validation/validator.d.ts.map +1 -0
- package/dist/lib/services/file-validation/validator.test.d.ts +2 -0
- package/dist/lib/services/file-validation/validator.test.d.ts.map +1 -0
- package/dist/lib/services/flow-event-bus/enums.d.ts +7 -0
- package/dist/lib/services/flow-event-bus/enums.d.ts.map +1 -0
- package/dist/lib/services/flow-event-bus/flow-event-bus.d.ts +3 -0
- package/dist/lib/services/flow-event-bus/flow-event-bus.d.ts.map +1 -0
- package/dist/lib/services/flow-event-bus/interfaces.d.ts +35 -0
- package/dist/lib/services/flow-event-bus/interfaces.d.ts.map +1 -0
- package/dist/lib/services/flow-event-bus/types.d.ts +3 -0
- package/dist/lib/services/flow-event-bus/types.d.ts.map +1 -0
- package/dist/lib/services/http/index.d.ts +7 -0
- package/dist/lib/services/http/index.d.ts.map +1 -0
- package/dist/lib/services/http/types.d.ts +12 -0
- package/dist/lib/services/http/types.d.ts.map +1 -0
- package/dist/lib/services/image-compression/compressor.d.ts +24 -0
- package/dist/lib/services/image-compression/compressor.d.ts.map +1 -0
- package/dist/lib/services/image-compression/compressor.test.d.ts +2 -0
- package/dist/lib/services/image-compression/compressor.test.d.ts.map +1 -0
- package/dist/lib/services/image-compression/index.d.ts +3 -0
- package/dist/lib/services/image-compression/index.d.ts.map +1 -0
- package/dist/lib/services/liveness-detection/detector.d.ts +73 -0
- package/dist/lib/services/liveness-detection/detector.d.ts.map +1 -0
- package/dist/lib/services/liveness-detection/detector.test.d.ts +2 -0
- package/dist/lib/services/liveness-detection/detector.test.d.ts.map +1 -0
- package/dist/lib/services/liveness-detection/index.d.ts +2 -0
- package/dist/lib/services/liveness-detection/index.d.ts.map +1 -0
- package/dist/lib/services/merge-service/index.d.ts +2 -0
- package/dist/lib/services/merge-service/index.d.ts.map +1 -0
- package/dist/lib/services/merge-service/utils.d.ts +4 -0
- package/dist/lib/services/merge-service/utils.d.ts.map +1 -0
- package/dist/lib/services/preload-service/index.d.ts +2 -0
- package/dist/lib/services/preload-service/index.d.ts.map +1 -0
- package/dist/lib/services/preload-service/utils.d.ts +6 -0
- package/dist/lib/services/preload-service/utils.d.ts.map +1 -0
- package/dist/lib/services/session-service/index.d.ts +21 -0
- package/dist/lib/services/session-service/index.d.ts.map +1 -0
- package/dist/lib/services/session-service/session-service.test.d.ts +2 -0
- package/dist/lib/services/session-service/session-service.test.d.ts.map +1 -0
- package/dist/lib/services/theme-manager/index.d.ts +2 -0
- package/dist/lib/services/theme-manager/index.d.ts.map +1 -0
- package/dist/lib/services/theme-manager/utils.d.ts +3 -0
- package/dist/lib/services/theme-manager/utils.d.ts.map +1 -0
- package/dist/lib/stores/branding.d.ts +34 -0
- package/dist/lib/stores/branding.d.ts.map +1 -0
- package/dist/lib/ui-packs/default/theme.d.ts +3 -0
- package/dist/lib/ui-packs/default/theme.d.ts.map +1 -0
- package/dist/lib/ui-packs/future/theme.d.ts +3 -0
- package/dist/lib/ui-packs/future/theme.d.ts.map +1 -0
- package/dist/lib/ui-packs/index.d.ts +7 -0
- package/dist/lib/ui-packs/index.d.ts.map +1 -0
- package/dist/lib/ui-packs/store.d.ts +3 -0
- package/dist/lib/ui-packs/store.d.ts.map +1 -0
- package/dist/lib/ui-packs/utils.d.ts +5 -0
- package/dist/lib/ui-packs/utils.d.ts.map +1 -0
- package/dist/lib/utils/check-connection.d.ts +2 -0
- package/dist/lib/utils/check-connection.d.ts.map +1 -0
- package/dist/lib/utils/configuration-manager.d.ts +19 -0
- package/dist/lib/utils/configuration-manager.d.ts.map +1 -0
- package/dist/lib/utils/css-utils.d.ts +4 -0
- package/dist/lib/utils/css-utils.d.ts.map +1 -0
- package/dist/lib/utils/event-service/constants.d.ts +4 -0
- package/dist/lib/utils/event-service/constants.d.ts.map +1 -0
- package/dist/lib/utils/event-service/index.d.ts +5 -0
- package/dist/lib/utils/event-service/index.d.ts.map +1 -0
- package/dist/lib/utils/event-service/types.d.ts +154 -0
- package/dist/lib/utils/event-service/types.d.ts.map +1 -0
- package/dist/lib/utils/event-service/utils.d.ts +80 -0
- package/dist/lib/utils/event-service/utils.d.ts.map +1 -0
- package/dist/lib/utils/fingerprint.d.ts +19 -0
- package/dist/lib/utils/fingerprint.d.ts.map +1 -0
- package/dist/lib/utils/form-utils.d.ts +5 -0
- package/dist/lib/utils/form-utils.d.ts.map +1 -0
- package/dist/lib/utils/get-config-from-query-params.d.ts +21 -0
- package/dist/lib/utils/get-config-from-query-params.d.ts.map +1 -0
- package/dist/lib/utils/is-mobile.d.ts +2 -0
- package/dist/lib/utils/is-mobile.d.ts.map +1 -0
- package/dist/lib/utils/object-utils.d.ts +3 -0
- package/dist/lib/utils/object-utils.d.ts.map +1 -0
- package/dist/lib/utils/photo-utils.d.ts +27 -0
- package/dist/lib/utils/photo-utils.d.ts.map +1 -0
- package/dist/lib/utils/photo-utils.test.d.ts +2 -0
- package/dist/lib/utils/photo-utils.test.d.ts.map +1 -0
- package/dist/lib/utils/step-manager.d.ts +3 -0
- package/dist/lib/utils/step-manager.d.ts.map +1 -0
- package/dist/lib/utils/string-utils/resolve-string-template.d.ts +2 -0
- package/dist/lib/utils/string-utils/resolve-string-template.d.ts.map +1 -0
- package/dist/lib/utils/string-utils/resolve-string-template.test.d.ts +2 -0
- package/dist/lib/utils/string-utils/resolve-string-template.test.d.ts.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/manifest.json +31 -0
- package/dist/pwa-styles.css +83 -0
- package/dist/pwa-test.html +272 -0
- package/dist/resubmit.svg +18 -0
- package/dist/selfie-start.svg +55 -0
- package/dist/tests-setup.d.ts +2 -0
- package/dist/tests-setup.d.ts.map +1 -0
- package/dist/types/AuthBridgeSDK.d.ts +112 -0
- package/dist/types/AuthBridgeSDK.d.ts.map +1 -0
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/welcome.svg +30 -0
- package/package.json +106 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authbridge-sdk.js","sources":["../../../node_modules/.pnpm/svelte@4.2.20/node_modules/svelte/src/runtime/internal/utils.js","../../../node_modules/.pnpm/svelte@4.2.20/node_modules/svelte/src/runtime/internal/environment.js","../../../node_modules/.pnpm/svelte@4.2.20/node_modules/svelte/src/runtime/internal/loop.js","../../../node_modules/.pnpm/svelte@4.2.20/node_modules/svelte/src/runtime/internal/globals.js","../../../node_modules/.pnpm/svelte@4.2.20/node_modules/svelte/src/runtime/internal/dom.js","../../../node_modules/.pnpm/svelte@4.2.20/node_modules/svelte/src/runtime/internal/style_manager.js","../../../node_modules/.pnpm/svelte@4.2.20/node_modules/svelte/src/runtime/internal/animations.js","../../../node_modules/.pnpm/svelte@4.2.20/node_modules/svelte/src/runtime/internal/lifecycle.js","../../../node_modules/.pnpm/svelte@4.2.20/node_modules/svelte/src/runtime/internal/scheduler.js","../../../node_modules/.pnpm/svelte@4.2.20/node_modules/svelte/src/runtime/internal/transitions.js","../../../node_modules/.pnpm/svelte@4.2.20/node_modules/svelte/src/runtime/internal/each.js","../../../node_modules/.pnpm/svelte@4.2.20/node_modules/svelte/src/runtime/internal/spread.js","../../../node_modules/.pnpm/svelte@4.2.20/node_modules/svelte/src/runtime/internal/Component.js","../../../node_modules/.pnpm/svelte@4.2.20/node_modules/svelte/src/shared/version.js","../../../node_modules/.pnpm/svelte@4.2.20/node_modules/svelte/src/runtime/internal/disclose-version/index.js","../../../node_modules/.pnpm/svelte@4.2.20/node_modules/svelte/src/runtime/easing/index.js","../../../node_modules/.pnpm/svelte@4.2.20/node_modules/svelte/src/runtime/transition/index.js","../../../node_modules/.pnpm/svelte@4.2.20/node_modules/svelte/src/runtime/animate/index.js","../../../node_modules/.pnpm/svelte@4.2.20/node_modules/svelte/src/runtime/store/index.js","../../../node_modules/.pnpm/@zerodevx+svelte-toast@0.8.2/node_modules/@zerodevx/svelte-toast/src/stores.js","../../../node_modules/.pnpm/svelte@4.2.20/node_modules/svelte/src/runtime/motion/utils.js","../../../node_modules/.pnpm/svelte@4.2.20/node_modules/svelte/src/runtime/motion/tweened.js","../../../node_modules/.pnpm/@zerodevx+svelte-toast@0.8.2/node_modules/@zerodevx/svelte-toast/src/ToastItem.svelte","../../../node_modules/.pnpm/@zerodevx+svelte-toast@0.8.2/node_modules/@zerodevx/svelte-toast/src/SvelteToast.svelte","../src/lib/utils/check-connection.ts","../src/lib/contexts/configuration/types.ts","../src/lib/configuration/configuration.ts","../src/lib/contexts/configuration/store.ts","../../../node_modules/.pnpm/deepmerge@4.3.1/node_modules/deepmerge/dist/cjs.js","../src/lib/utils/css-utils.ts","../../../node_modules/.pnpm/jslib-html5-camera-photo@3.3.4/node_modules/jslib-html5-camera-photo/build/index.js","../src/lib/contexts/app-state/stores.ts","../src/lib/contexts/app-state/types.ts","../src/lib/contexts/app-state/utils.ts","../src/lib/ui-packs/default/theme.ts","../src/lib/ui-packs/store.ts","../src/lib/services/merge-service/utils.ts","../src/lib/services/theme-manager/utils.ts","../src/lib/ui-packs/utils.ts","../src/lib/ui-packs/future/theme.ts","../src/lib/ui-packs/index.ts","../src/lib/atoms/Button/Button.svelte","../src/lib/atoms/NextStepButton/Loader/Loader.svelte","../src/lib/atoms/NextStepButton/NextStepButton.svelte","../src/lib/atoms/Title/Title.svelte","../src/lib/atoms/Image/Image.svelte","../src/lib/atoms/Paragraph/Paragraph.svelte","../src/lib/atoms/Container/Container.svelte","../src/lib/atoms/IconButton/IconButton.svelte","../src/lib/atoms/ButtonWithIcon/ButtonWithIcon.svelte","../src/lib/atoms/Loader/Loader.svelte","../src/lib/atoms/Photo/Photo.svelte","../src/lib/atoms/ListItem/ListItem.svelte","../src/lib/atoms/Overlay/utils.ts","../src/lib/atoms/Overlay/Overlay.svelte","../src/lib/atoms/IconCloseButton/IconCloseButton.svelte","../src/lib/atoms/PrivacyLink/PrivacyLink.svelte","../src/lib/contexts/flows/hooks.ts","../src/lib/molecules/List/utils.ts","../src/lib/molecules/List/List.svelte","../src/lib/utils/event-service/types.ts","../src/lib/services/flow-event-bus/enums.ts","../src/lib/services/flow-event-bus/flow-event-bus.ts","../src/lib/utils/event-service/constants.ts","../src/lib/utils/event-service/utils.ts","../src/lib/pages/Welcome.svelte","../src/lib/atoms/Icons/Card.svelte","../src/lib/atoms/Icons/Passport.svelte","../src/lib/atoms/Icons/License.svelte","../src/lib/atoms/Icons/PassportTwo.svelte","../src/lib/atoms/Icons/Voter.svelte","../src/lib/atoms/Icons/Icon.svelte","../../../node_modules/.pnpm/compressorjs@1.2.1/node_modules/compressorjs/dist/compressor.esm.js","../src/lib/utils/photo-utils.ts","../src/lib/hooks/createToggle/createToggle.ts","../src/lib/molecules/DocumentOption/DocumentOption.svelte","../src/lib/services/camera-manager/utils.ts","../src/lib/organisms/DocumentOptions/DocumentOptions.svelte","../src/lib/pages/DocumentSelection.svelte","../src/lib/pages/DocumentStart.svelte","../src/lib/services/image-compression/compressor.ts","../src/lib/pages/DocumentPhoto.svelte","../src/lib/services/file-validation/validator.ts","../src/lib/pages/DocumentUpload.svelte","../src/lib/molecules/NavigationButtons/NavigationButtons.svelte","../src/lib/pages/CheckDocument.svelte","../src/lib/pages/DocumentPhotoBackStart.svelte","../src/lib/pages/DocumentPhotoBack.svelte","../src/lib/pages/CheckDocumentPhotoBack.svelte","../src/lib/services/analytics.ts","../src/lib/pages/Final.svelte","../src/lib/pages/SelfieStart.svelte","../src/lib/utils/is-mobile.ts","../src/lib/atoms/FaceOval/FaceOval.svelte","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js","../src/lib/services/api/verification.ts","../src/lib/components/LivenessCheck.svelte","../src/lib/pages/SelfieCapture.svelte","../src/lib/pages/CheckSelfie.svelte","../src/lib/components/VerificationResult.svelte","../src/lib/pages/ReviewSubmit.svelte","../src/lib/pages/Loading.svelte","../src/lib/atoms/ErrorText/ErrorText.svelte","../src/lib/pages/Resubmission.svelte","../src/lib/pages/Decline.svelte","../src/lib/pages/ErrorPage.svelte","../src/lib/stores/branding.ts","../src/lib/contexts/navigation/constants.ts","../src/lib/contexts/navigation/hooks.ts","../src/lib/services/preload-service/utils.ts","../src/lib/utils/configuration-manager.ts","../src/lib/contexts/translation/hooks.ts","../src/lib/contexts/translation/T.svelte","../src/Routes.svelte","../src/App.svelte","../src/ConfigurationProvider.svelte","../src/lib/utils/get-config-from-query-params.ts","../src/main.ts"],"sourcesContent":["/** @returns {void} */\nexport function noop() {}\n\nexport const identity = (x) => x;\n\n/**\n * @template T\n * @template S\n * @param {T} tar\n * @param {S} src\n * @returns {T & S}\n */\nexport function assign(tar, src) {\n\t// @ts-ignore\n\tfor (const k in src) tar[k] = src[k];\n\treturn /** @type {T & S} */ (tar);\n}\n\n// Adapted from https://github.com/then/is-promise/blob/master/index.js\n// Distributed under MIT License https://github.com/then/is-promise/blob/master/LICENSE\n/**\n * @param {any} value\n * @returns {value is PromiseLike<any>}\n */\nexport function is_promise(value) {\n\treturn (\n\t\t!!value &&\n\t\t(typeof value === 'object' || typeof value === 'function') &&\n\t\ttypeof (/** @type {any} */ (value).then) === 'function'\n\t);\n}\n\n/** @returns {void} */\nexport function add_location(element, file, line, column, char) {\n\telement.__svelte_meta = {\n\t\tloc: { file, line, column, char }\n\t};\n}\n\nexport function run(fn) {\n\treturn fn();\n}\n\nexport function blank_object() {\n\treturn Object.create(null);\n}\n\n/**\n * @param {Function[]} fns\n * @returns {void}\n */\nexport function run_all(fns) {\n\tfns.forEach(run);\n}\n\n/**\n * @param {any} thing\n * @returns {thing is Function}\n */\nexport function is_function(thing) {\n\treturn typeof thing === 'function';\n}\n\n/** @returns {boolean} */\nexport function safe_not_equal(a, b) {\n\treturn a != a ? b == b : a !== b || (a && typeof a === 'object') || typeof a === 'function';\n}\n\nlet src_url_equal_anchor;\n\n/**\n * @param {string} element_src\n * @param {string} url\n * @returns {boolean}\n */\nexport function src_url_equal(element_src, url) {\n\tif (element_src === url) return true;\n\tif (!src_url_equal_anchor) {\n\t\tsrc_url_equal_anchor = document.createElement('a');\n\t}\n\t// This is actually faster than doing URL(..).href\n\tsrc_url_equal_anchor.href = url;\n\treturn element_src === src_url_equal_anchor.href;\n}\n\n/** @param {string} srcset */\nfunction split_srcset(srcset) {\n\treturn srcset.split(',').map((src) => src.trim().split(' ').filter(Boolean));\n}\n\n/**\n * @param {HTMLSourceElement | HTMLImageElement} element_srcset\n * @param {string | undefined | null} srcset\n * @returns {boolean}\n */\nexport function srcset_url_equal(element_srcset, srcset) {\n\tconst element_urls = split_srcset(element_srcset.srcset);\n\tconst urls = split_srcset(srcset || '');\n\n\treturn (\n\t\turls.length === element_urls.length &&\n\t\turls.every(\n\t\t\t([url, width], i) =>\n\t\t\t\twidth === element_urls[i][1] &&\n\t\t\t\t// We need to test both ways because Vite will create an a full URL with\n\t\t\t\t// `new URL(asset, import.meta.url).href` for the client when `base: './'`, and the\n\t\t\t\t// relative URLs inside srcset are not automatically resolved to absolute URLs by\n\t\t\t\t// browsers (in contrast to img.src). This means both SSR and DOM code could\n\t\t\t\t// contain relative or absolute URLs.\n\t\t\t\t(src_url_equal(element_urls[i][0], url) || src_url_equal(url, element_urls[i][0]))\n\t\t)\n\t);\n}\n\n/** @returns {boolean} */\nexport function not_equal(a, b) {\n\treturn a != a ? b == b : a !== b;\n}\n\n/** @returns {boolean} */\nexport function is_empty(obj) {\n\treturn Object.keys(obj).length === 0;\n}\n\n/** @returns {void} */\nexport function validate_store(store, name) {\n\tif (store != null && typeof store.subscribe !== 'function') {\n\t\tthrow new Error(`'${name}' is not a store with a 'subscribe' method`);\n\t}\n}\n\nexport function subscribe(store, ...callbacks) {\n\tif (store == null) {\n\t\tfor (const callback of callbacks) {\n\t\t\tcallback(undefined);\n\t\t}\n\t\treturn noop;\n\t}\n\tconst unsub = store.subscribe(...callbacks);\n\treturn unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\n\n/**\n * Get the current value from a store by subscribing and immediately unsubscribing.\n *\n * https://svelte.dev/docs/svelte-store#get\n * @template T\n * @param {import('../store/public.js').Readable<T>} store\n * @returns {T}\n */\nexport function get_store_value(store) {\n\tlet value;\n\tsubscribe(store, (_) => (value = _))();\n\treturn value;\n}\n\n/** @returns {void} */\nexport function component_subscribe(component, store, callback) {\n\tcomponent.$$.on_destroy.push(subscribe(store, callback));\n}\n\nexport function create_slot(definition, ctx, $$scope, fn) {\n\tif (definition) {\n\t\tconst slot_ctx = get_slot_context(definition, ctx, $$scope, fn);\n\t\treturn definition[0](slot_ctx);\n\t}\n}\n\nfunction get_slot_context(definition, ctx, $$scope, fn) {\n\treturn definition[1] && fn ? assign($$scope.ctx.slice(), definition[1](fn(ctx))) : $$scope.ctx;\n}\n\nexport function get_slot_changes(definition, $$scope, dirty, fn) {\n\tif (definition[2] && fn) {\n\t\tconst lets = definition[2](fn(dirty));\n\t\tif ($$scope.dirty === undefined) {\n\t\t\treturn lets;\n\t\t}\n\t\tif (typeof lets === 'object') {\n\t\t\tconst merged = [];\n\t\t\tconst len = Math.max($$scope.dirty.length, lets.length);\n\t\t\tfor (let i = 0; i < len; i += 1) {\n\t\t\t\tmerged[i] = $$scope.dirty[i] | lets[i];\n\t\t\t}\n\t\t\treturn merged;\n\t\t}\n\t\treturn $$scope.dirty | lets;\n\t}\n\treturn $$scope.dirty;\n}\n\n/** @returns {void} */\nexport function update_slot_base(\n\tslot,\n\tslot_definition,\n\tctx,\n\t$$scope,\n\tslot_changes,\n\tget_slot_context_fn\n) {\n\tif (slot_changes) {\n\t\tconst slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn);\n\t\tslot.p(slot_context, slot_changes);\n\t}\n}\n\n/** @returns {void} */\nexport function update_slot(\n\tslot,\n\tslot_definition,\n\tctx,\n\t$$scope,\n\tdirty,\n\tget_slot_changes_fn,\n\tget_slot_context_fn\n) {\n\tconst slot_changes = get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_fn);\n\tupdate_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn);\n}\n\n/** @returns {any[] | -1} */\nexport function get_all_dirty_from_scope($$scope) {\n\tif ($$scope.ctx.length > 32) {\n\t\tconst dirty = [];\n\t\tconst length = $$scope.ctx.length / 32;\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tdirty[i] = -1;\n\t\t}\n\t\treturn dirty;\n\t}\n\treturn -1;\n}\n\n/** @returns {{}} */\nexport function exclude_internal_props(props) {\n\tconst result = {};\n\tfor (const k in props) if (k[0] !== '$') result[k] = props[k];\n\treturn result;\n}\n\n/** @returns {{}} */\nexport function compute_rest_props(props, keys) {\n\tconst rest = {};\n\tkeys = new Set(keys);\n\tfor (const k in props) if (!keys.has(k) && k[0] !== '$') rest[k] = props[k];\n\treturn rest;\n}\n\n/** @returns {{}} */\nexport function compute_slots(slots) {\n\tconst result = {};\n\tfor (const key in slots) {\n\t\tresult[key] = true;\n\t}\n\treturn result;\n}\n\n/** @returns {(this: any, ...args: any[]) => void} */\nexport function once(fn) {\n\tlet ran = false;\n\treturn function (...args) {\n\t\tif (ran) return;\n\t\tran = true;\n\t\tfn.call(this, ...args);\n\t};\n}\n\nexport function null_to_empty(value) {\n\treturn value == null ? '' : value;\n}\n\nexport function set_store_value(store, ret, value) {\n\tstore.set(value);\n\treturn ret;\n}\n\nexport const has_prop = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);\n\nexport function action_destroyer(action_result) {\n\treturn action_result && is_function(action_result.destroy) ? action_result.destroy : noop;\n}\n\n/** @param {number | string} value\n * @returns {[number, string]}\n */\nexport function split_css_unit(value) {\n\tconst split = typeof value === 'string' && value.match(/^\\s*(-?[\\d.]+)([^\\s]*)\\s*$/);\n\treturn split ? [parseFloat(split[1]), split[2] || 'px'] : [/** @type {number} */ (value), 'px'];\n}\n\nexport const contenteditable_truthy_values = ['', true, 1, 'true', 'contenteditable'];\n","import { noop } from './utils.js';\n\nexport const is_client = typeof window !== 'undefined';\n\n/** @type {() => number} */\nexport let now = is_client ? () => window.performance.now() : () => Date.now();\n\nexport let raf = is_client ? (cb) => requestAnimationFrame(cb) : noop;\n\n// used internally for testing\n/** @returns {void} */\nexport function set_now(fn) {\n\tnow = fn;\n}\n\n/** @returns {void} */\nexport function set_raf(fn) {\n\traf = fn;\n}\n","import { raf } from './environment.js';\n\nconst tasks = new Set();\n\n/**\n * @param {number} now\n * @returns {void}\n */\nfunction run_tasks(now) {\n\ttasks.forEach((task) => {\n\t\tif (!task.c(now)) {\n\t\t\ttasks.delete(task);\n\t\t\ttask.f();\n\t\t}\n\t});\n\tif (tasks.size !== 0) raf(run_tasks);\n}\n\n/**\n * For testing purposes only!\n * @returns {void}\n */\nexport function clear_loops() {\n\ttasks.clear();\n}\n\n/**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\n * @param {import('./private.js').TaskCallback} callback\n * @returns {import('./private.js').Task}\n */\nexport function loop(callback) {\n\t/** @type {import('./private.js').TaskEntry} */\n\tlet task;\n\tif (tasks.size === 0) raf(run_tasks);\n\treturn {\n\t\tpromise: new Promise((fulfill) => {\n\t\t\ttasks.add((task = { c: callback, f: fulfill }));\n\t\t}),\n\t\tabort() {\n\t\t\ttasks.delete(task);\n\t\t}\n\t};\n}\n","/** @type {typeof globalThis} */\nexport const globals =\n\ttypeof window !== 'undefined'\n\t\t? window\n\t\t: typeof globalThis !== 'undefined'\n\t\t? globalThis\n\t\t: // @ts-ignore Node typings have this\n\t\t global;\n","import { contenteditable_truthy_values, has_prop } from './utils.js';\n\nimport { ResizeObserverSingleton } from './ResizeObserverSingleton.js';\n\n// Track which nodes are claimed during hydration. Unclaimed nodes can then be removed from the DOM\n// at the end of hydration without touching the remaining nodes.\nlet is_hydrating = false;\n\n/**\n * @returns {void}\n */\nexport function start_hydrating() {\n\tis_hydrating = true;\n}\n\n/**\n * @returns {void}\n */\nexport function end_hydrating() {\n\tis_hydrating = false;\n}\n\n/**\n * @param {number} low\n * @param {number} high\n * @param {(index: number) => number} key\n * @param {number} value\n * @returns {number}\n */\nfunction upper_bound(low, high, key, value) {\n\t// Return first index of value larger than input value in the range [low, high)\n\twhile (low < high) {\n\t\tconst mid = low + ((high - low) >> 1);\n\t\tif (key(mid) <= value) {\n\t\t\tlow = mid + 1;\n\t\t} else {\n\t\t\thigh = mid;\n\t\t}\n\t}\n\treturn low;\n}\n\n/**\n * @param {NodeEx} target\n * @returns {void}\n */\nfunction init_hydrate(target) {\n\tif (target.hydrate_init) return;\n\ttarget.hydrate_init = true;\n\t// We know that all children have claim_order values since the unclaimed have been detached if target is not <head>\n\n\tlet children = /** @type {ArrayLike<NodeEx2>} */ (target.childNodes);\n\t// If target is <head>, there may be children without claim_order\n\tif (target.nodeName === 'HEAD') {\n\t\tconst my_children = [];\n\t\tfor (let i = 0; i < children.length; i++) {\n\t\t\tconst node = children[i];\n\t\t\tif (node.claim_order !== undefined) {\n\t\t\t\tmy_children.push(node);\n\t\t\t}\n\t\t}\n\t\tchildren = my_children;\n\t}\n\t/*\n\t * Reorder claimed children optimally.\n\t * We can reorder claimed children optimally by finding the longest subsequence of\n\t * nodes that are already claimed in order and only moving the rest. The longest\n\t * subsequence of nodes that are claimed in order can be found by\n\t * computing the longest increasing subsequence of .claim_order values.\n\t *\n\t * This algorithm is optimal in generating the least amount of reorder operations\n\t * possible.\n\t *\n\t * Proof:\n\t * We know that, given a set of reordering operations, the nodes that do not move\n\t * always form an increasing subsequence, since they do not move among each other\n\t * meaning that they must be already ordered among each other. Thus, the maximal\n\t * set of nodes that do not move form a longest increasing subsequence.\n\t */\n\t// Compute longest increasing subsequence\n\t// m: subsequence length j => index k of smallest value that ends an increasing subsequence of length j\n\tconst m = new Int32Array(children.length + 1);\n\t// Predecessor indices + 1\n\tconst p = new Int32Array(children.length);\n\tm[0] = -1;\n\tlet longest = 0;\n\tfor (let i = 0; i < children.length; i++) {\n\t\tconst current = children[i].claim_order;\n\t\t// Find the largest subsequence length such that it ends in a value less than our current value\n\t\t// upper_bound returns first greater value, so we subtract one\n\t\t// with fast path for when we are on the current longest subsequence\n\t\tconst seq_len =\n\t\t\t(longest > 0 && children[m[longest]].claim_order <= current\n\t\t\t\t? longest + 1\n\t\t\t\t: upper_bound(1, longest, (idx) => children[m[idx]].claim_order, current)) - 1;\n\t\tp[i] = m[seq_len] + 1;\n\t\tconst new_len = seq_len + 1;\n\t\t// We can guarantee that current is the smallest value. Otherwise, we would have generated a longer sequence.\n\t\tm[new_len] = i;\n\t\tlongest = Math.max(new_len, longest);\n\t}\n\t// The longest increasing subsequence of nodes (initially reversed)\n\n\t/**\n\t * @type {NodeEx2[]}\n\t */\n\tconst lis = [];\n\t// The rest of the nodes, nodes that will be moved\n\n\t/**\n\t * @type {NodeEx2[]}\n\t */\n\tconst to_move = [];\n\tlet last = children.length - 1;\n\tfor (let cur = m[longest] + 1; cur != 0; cur = p[cur - 1]) {\n\t\tlis.push(children[cur - 1]);\n\t\tfor (; last >= cur; last--) {\n\t\t\tto_move.push(children[last]);\n\t\t}\n\t\tlast--;\n\t}\n\tfor (; last >= 0; last--) {\n\t\tto_move.push(children[last]);\n\t}\n\tlis.reverse();\n\t// We sort the nodes being moved to guarantee that their insertion order matches the claim order\n\tto_move.sort((a, b) => a.claim_order - b.claim_order);\n\t// Finally, we move the nodes\n\tfor (let i = 0, j = 0; i < to_move.length; i++) {\n\t\twhile (j < lis.length && to_move[i].claim_order >= lis[j].claim_order) {\n\t\t\tj++;\n\t\t}\n\t\tconst anchor = j < lis.length ? lis[j] : null;\n\t\ttarget.insertBefore(to_move[i], anchor);\n\t}\n}\n\n/**\n * @param {Node} target\n * @param {Node} node\n * @returns {void}\n */\nexport function append(target, node) {\n\ttarget.appendChild(node);\n}\n\n/**\n * @param {Node} target\n * @param {string} style_sheet_id\n * @param {string} styles\n * @returns {void}\n */\nexport function append_styles(target, style_sheet_id, styles) {\n\tconst append_styles_to = get_root_for_style(target);\n\tif (!append_styles_to.getElementById(style_sheet_id)) {\n\t\tconst style = element('style');\n\t\tstyle.id = style_sheet_id;\n\t\tstyle.textContent = styles;\n\t\tappend_stylesheet(append_styles_to, style);\n\t}\n}\n\n/**\n * @param {Node} node\n * @returns {ShadowRoot | Document}\n */\nexport function get_root_for_style(node) {\n\tif (!node) return document;\n\tconst root = node.getRootNode ? node.getRootNode() : node.ownerDocument;\n\tif (root && /** @type {ShadowRoot} */ (root).host) {\n\t\treturn /** @type {ShadowRoot} */ (root);\n\t}\n\treturn node.ownerDocument;\n}\n\n/**\n * @param {Node} node\n * @returns {CSSStyleSheet}\n */\nexport function append_empty_stylesheet(node) {\n\tconst style_element = element('style');\n\t// For transitions to work without 'style-src: unsafe-inline' Content Security Policy,\n\t// these empty tags need to be allowed with a hash as a workaround until we move to the Web Animations API.\n\t// Using the hash for the empty string (for an empty tag) works in all browsers except Safari.\n\t// So as a workaround for the workaround, when we append empty style tags we set their content to /* empty */.\n\t// The hash 'sha256-9OlNO0DNEeaVzHL4RZwCLsBHA8WBQ8toBp/4F5XV2nc=' will then work even in Safari.\n\tstyle_element.textContent = '/* empty */';\n\tappend_stylesheet(get_root_for_style(node), style_element);\n\treturn style_element.sheet;\n}\n\n/**\n * @param {ShadowRoot | Document} node\n * @param {HTMLStyleElement} style\n * @returns {CSSStyleSheet}\n */\nfunction append_stylesheet(node, style) {\n\tappend(/** @type {Document} */ (node).head || node, style);\n\treturn style.sheet;\n}\n\n/**\n * @param {NodeEx} target\n * @param {NodeEx} node\n * @returns {void}\n */\nexport function append_hydration(target, node) {\n\tif (is_hydrating) {\n\t\tinit_hydrate(target);\n\t\tif (\n\t\t\ttarget.actual_end_child === undefined ||\n\t\t\t(target.actual_end_child !== null && target.actual_end_child.parentNode !== target)\n\t\t) {\n\t\t\ttarget.actual_end_child = target.firstChild;\n\t\t}\n\t\t// Skip nodes of undefined ordering\n\t\twhile (target.actual_end_child !== null && target.actual_end_child.claim_order === undefined) {\n\t\t\ttarget.actual_end_child = target.actual_end_child.nextSibling;\n\t\t}\n\t\tif (node !== target.actual_end_child) {\n\t\t\t// We only insert if the ordering of this node should be modified or the parent node is not target\n\t\t\tif (node.claim_order !== undefined || node.parentNode !== target) {\n\t\t\t\ttarget.insertBefore(node, target.actual_end_child);\n\t\t\t}\n\t\t} else {\n\t\t\ttarget.actual_end_child = node.nextSibling;\n\t\t}\n\t} else if (node.parentNode !== target || node.nextSibling !== null) {\n\t\ttarget.appendChild(node);\n\t}\n}\n\n/**\n * @param {Node} target\n * @param {Node} node\n * @param {Node} [anchor]\n * @returns {void}\n */\nexport function insert(target, node, anchor) {\n\ttarget.insertBefore(node, anchor || null);\n}\n\n/**\n * @param {NodeEx} target\n * @param {NodeEx} node\n * @param {NodeEx} [anchor]\n * @returns {void}\n */\nexport function insert_hydration(target, node, anchor) {\n\tif (is_hydrating && !anchor) {\n\t\tappend_hydration(target, node);\n\t} else if (node.parentNode !== target || node.nextSibling != anchor) {\n\t\ttarget.insertBefore(node, anchor || null);\n\t}\n}\n\n/**\n * @param {Node} node\n * @returns {void}\n */\nexport function detach(node) {\n\tif (node.parentNode) {\n\t\tnode.parentNode.removeChild(node);\n\t}\n}\n\n/**\n * @returns {void} */\nexport function destroy_each(iterations, detaching) {\n\tfor (let i = 0; i < iterations.length; i += 1) {\n\t\tif (iterations[i]) iterations[i].d(detaching);\n\t}\n}\n\n/**\n * @template {keyof HTMLElementTagNameMap} K\n * @param {K} name\n * @returns {HTMLElementTagNameMap[K]}\n */\nexport function element(name) {\n\treturn document.createElement(name);\n}\n\n/**\n * @template {keyof HTMLElementTagNameMap} K\n * @param {K} name\n * @param {string} is\n * @returns {HTMLElementTagNameMap[K]}\n */\nexport function element_is(name, is) {\n\treturn document.createElement(name, { is });\n}\n\n/**\n * @template T\n * @template {keyof T} K\n * @param {T} obj\n * @param {K[]} exclude\n * @returns {Pick<T, Exclude<keyof T, K>>}\n */\nexport function object_without_properties(obj, exclude) {\n\tconst target = /** @type {Pick<T, Exclude<keyof T, K>>} */ ({});\n\tfor (const k in obj) {\n\t\tif (\n\t\t\thas_prop(obj, k) &&\n\t\t\t// @ts-ignore\n\t\t\texclude.indexOf(k) === -1\n\t\t) {\n\t\t\t// @ts-ignore\n\t\t\ttarget[k] = obj[k];\n\t\t}\n\t}\n\treturn target;\n}\n\n/**\n * @template {keyof SVGElementTagNameMap} K\n * @param {K} name\n * @returns {SVGElement}\n */\nexport function svg_element(name) {\n\treturn document.createElementNS('http://www.w3.org/2000/svg', name);\n}\n\n/**\n * @param {string} data\n * @returns {Text}\n */\nexport function text(data) {\n\treturn document.createTextNode(data);\n}\n\n/**\n * @returns {Text} */\nexport function space() {\n\treturn text(' ');\n}\n\n/**\n * @returns {Text} */\nexport function empty() {\n\treturn text('');\n}\n\n/**\n * @param {string} content\n * @returns {Comment}\n */\nexport function comment(content) {\n\treturn document.createComment(content);\n}\n\n/**\n * @param {EventTarget} node\n * @param {string} event\n * @param {EventListenerOrEventListenerObject} handler\n * @param {boolean | AddEventListenerOptions | EventListenerOptions} [options]\n * @returns {() => void}\n */\nexport function listen(node, event, handler, options) {\n\tnode.addEventListener(event, handler, options);\n\treturn () => node.removeEventListener(event, handler, options);\n}\n\n/**\n * @returns {(event: any) => any} */\nexport function prevent_default(fn) {\n\treturn function (event) {\n\t\tevent.preventDefault();\n\t\t// @ts-ignore\n\t\treturn fn.call(this, event);\n\t};\n}\n\n/**\n * @returns {(event: any) => any} */\nexport function stop_propagation(fn) {\n\treturn function (event) {\n\t\tevent.stopPropagation();\n\t\t// @ts-ignore\n\t\treturn fn.call(this, event);\n\t};\n}\n\n/**\n * @returns {(event: any) => any} */\nexport function stop_immediate_propagation(fn) {\n\treturn function (event) {\n\t\tevent.stopImmediatePropagation();\n\t\t// @ts-ignore\n\t\treturn fn.call(this, event);\n\t};\n}\n\n/**\n * @returns {(event: any) => void} */\nexport function self(fn) {\n\treturn function (event) {\n\t\t// @ts-ignore\n\t\tif (event.target === this) fn.call(this, event);\n\t};\n}\n\n/**\n * @returns {(event: any) => void} */\nexport function trusted(fn) {\n\treturn function (event) {\n\t\t// @ts-ignore\n\t\tif (event.isTrusted) fn.call(this, event);\n\t};\n}\n\n/**\n * @param {Element} node\n * @param {string} attribute\n * @param {string} [value]\n * @returns {void}\n */\nexport function attr(node, attribute, value) {\n\tif (value == null) node.removeAttribute(attribute);\n\telse if (node.getAttribute(attribute) !== value) node.setAttribute(attribute, value);\n}\n/**\n * List of attributes that should always be set through the attr method,\n * because updating them through the property setter doesn't work reliably.\n * In the example of `width`/`height`, the problem is that the setter only\n * accepts numeric values, but the attribute can also be set to a string like `50%`.\n * If this list becomes too big, rethink this approach.\n */\nconst always_set_through_set_attribute = ['width', 'height'];\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {{ [x: string]: string }} attributes\n * @returns {void}\n */\nexport function set_attributes(node, attributes) {\n\t// @ts-ignore\n\tconst descriptors = Object.getOwnPropertyDescriptors(node.__proto__);\n\tfor (const key in attributes) {\n\t\tif (attributes[key] == null) {\n\t\t\tnode.removeAttribute(key);\n\t\t} else if (key === 'style') {\n\t\t\tnode.style.cssText = attributes[key];\n\t\t} else if (key === '__value') {\n\t\t\t/** @type {any} */ (node).value = node[key] = attributes[key];\n\t\t} else if (\n\t\t\tdescriptors[key] &&\n\t\t\tdescriptors[key].set &&\n\t\t\talways_set_through_set_attribute.indexOf(key) === -1\n\t\t) {\n\t\t\tnode[key] = attributes[key];\n\t\t} else {\n\t\t\tattr(node, key, attributes[key]);\n\t\t}\n\t}\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {{ [x: string]: string }} attributes\n * @returns {void}\n */\nexport function set_svg_attributes(node, attributes) {\n\tfor (const key in attributes) {\n\t\tattr(node, key, attributes[key]);\n\t}\n}\n\n/**\n * @param {Record<string, unknown>} data_map\n * @returns {void}\n */\nexport function set_custom_element_data_map(node, data_map) {\n\tObject.keys(data_map).forEach((key) => {\n\t\tset_custom_element_data(node, key, data_map[key]);\n\t});\n}\n\n/**\n * @returns {void} */\nexport function set_custom_element_data(node, prop, value) {\n\tconst lower = prop.toLowerCase(); // for backwards compatibility with existing behavior we do lowercase first\n\tif (lower in node) {\n\t\tnode[lower] = typeof node[lower] === 'boolean' && value === '' ? true : value;\n\t} else if (prop in node) {\n\t\tnode[prop] = typeof node[prop] === 'boolean' && value === '' ? true : value;\n\t} else {\n\t\tattr(node, prop, value);\n\t}\n}\n\n/**\n * @param {string} tag\n */\nexport function set_dynamic_element_data(tag) {\n\treturn /-/.test(tag) ? set_custom_element_data_map : set_attributes;\n}\n\n/**\n * @returns {void}\n */\nexport function xlink_attr(node, attribute, value) {\n\tnode.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\n\n/**\n * @param {HTMLElement} node\n * @returns {string}\n */\nexport function get_svelte_dataset(node) {\n\treturn node.dataset.svelteH;\n}\n\n/**\n * @returns {unknown[]} */\nexport function get_binding_group_value(group, __value, checked) {\n\tconst value = new Set();\n\tfor (let i = 0; i < group.length; i += 1) {\n\t\tif (group[i].checked) value.add(group[i].__value);\n\t}\n\tif (!checked) {\n\t\tvalue.delete(__value);\n\t}\n\treturn Array.from(value);\n}\n\n/**\n * @param {HTMLInputElement[]} group\n * @returns {{ p(...inputs: HTMLInputElement[]): void; r(): void; }}\n */\nexport function init_binding_group(group) {\n\t/**\n\t * @type {HTMLInputElement[]} */\n\tlet _inputs;\n\treturn {\n\t\t/* push */ p(...inputs) {\n\t\t\t_inputs = inputs;\n\t\t\t_inputs.forEach((input) => group.push(input));\n\t\t},\n\t\t/* remove */ r() {\n\t\t\t_inputs.forEach((input) => group.splice(group.indexOf(input), 1));\n\t\t}\n\t};\n}\n\n/**\n * @param {number[]} indexes\n * @returns {{ u(new_indexes: number[]): void; p(...inputs: HTMLInputElement[]): void; r: () => void; }}\n */\nexport function init_binding_group_dynamic(group, indexes) {\n\t/**\n\t * @type {HTMLInputElement[]} */\n\tlet _group = get_binding_group(group);\n\n\t/**\n\t * @type {HTMLInputElement[]} */\n\tlet _inputs;\n\n\tfunction get_binding_group(group) {\n\t\tfor (let i = 0; i < indexes.length; i++) {\n\t\t\tgroup = group[indexes[i]] = group[indexes[i]] || [];\n\t\t}\n\t\treturn group;\n\t}\n\n\t/**\n\t * @returns {void} */\n\tfunction push() {\n\t\t_inputs.forEach((input) => _group.push(input));\n\t}\n\n\t/**\n\t * @returns {void} */\n\tfunction remove() {\n\t\t_inputs.forEach((input) => _group.splice(_group.indexOf(input), 1));\n\t}\n\treturn {\n\t\t/* update */ u(new_indexes) {\n\t\t\tindexes = new_indexes;\n\t\t\tconst new_group = get_binding_group(group);\n\t\t\tif (new_group !== _group) {\n\t\t\t\tremove();\n\t\t\t\t_group = new_group;\n\t\t\t\tpush();\n\t\t\t}\n\t\t},\n\t\t/* push */ p(...inputs) {\n\t\t\t_inputs = inputs;\n\t\t\tpush();\n\t\t},\n\t\t/* remove */ r: remove\n\t};\n}\n\n/** @returns {number} */\nexport function to_number(value) {\n\treturn value === '' ? null : +value;\n}\n\n/** @returns {any[]} */\nexport function time_ranges_to_array(ranges) {\n\tconst array = [];\n\tfor (let i = 0; i < ranges.length; i += 1) {\n\t\tarray.push({ start: ranges.start(i), end: ranges.end(i) });\n\t}\n\treturn array;\n}\n\n/**\n * @param {Element} element\n * @returns {ChildNode[]}\n */\nexport function children(element) {\n\treturn Array.from(element.childNodes);\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @returns {void}\n */\nfunction init_claim_info(nodes) {\n\tif (nodes.claim_info === undefined) {\n\t\tnodes.claim_info = { last_index: 0, total_claimed: 0 };\n\t}\n}\n\n/**\n * @template {ChildNodeEx} R\n * @param {ChildNodeArray} nodes\n * @param {(node: ChildNodeEx) => node is R} predicate\n * @param {(node: ChildNodeEx) => ChildNodeEx | undefined} process_node\n * @param {() => R} create_node\n * @param {boolean} dont_update_last_index\n * @returns {R}\n */\nfunction claim_node(nodes, predicate, process_node, create_node, dont_update_last_index = false) {\n\t// Try to find nodes in an order such that we lengthen the longest increasing subsequence\n\tinit_claim_info(nodes);\n\tconst result_node = (() => {\n\t\t// We first try to find an element after the previous one\n\t\tfor (let i = nodes.claim_info.last_index; i < nodes.length; i++) {\n\t\t\tconst node = nodes[i];\n\t\t\tif (predicate(node)) {\n\t\t\t\tconst replacement = process_node(node);\n\t\t\t\tif (replacement === undefined) {\n\t\t\t\t\tnodes.splice(i, 1);\n\t\t\t\t} else {\n\t\t\t\t\tnodes[i] = replacement;\n\t\t\t\t}\n\t\t\t\tif (!dont_update_last_index) {\n\t\t\t\t\tnodes.claim_info.last_index = i;\n\t\t\t\t}\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t\t// Otherwise, we try to find one before\n\t\t// We iterate in reverse so that we don't go too far back\n\t\tfor (let i = nodes.claim_info.last_index - 1; i >= 0; i--) {\n\t\t\tconst node = nodes[i];\n\t\t\tif (predicate(node)) {\n\t\t\t\tconst replacement = process_node(node);\n\t\t\t\tif (replacement === undefined) {\n\t\t\t\t\tnodes.splice(i, 1);\n\t\t\t\t} else {\n\t\t\t\t\tnodes[i] = replacement;\n\t\t\t\t}\n\t\t\t\tif (!dont_update_last_index) {\n\t\t\t\t\tnodes.claim_info.last_index = i;\n\t\t\t\t} else if (replacement === undefined) {\n\t\t\t\t\t// Since we spliced before the last_index, we decrease it\n\t\t\t\t\tnodes.claim_info.last_index--;\n\t\t\t\t}\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t\t// If we can't find any matching node, we create a new one\n\t\treturn create_node();\n\t})();\n\tresult_node.claim_order = nodes.claim_info.total_claimed;\n\tnodes.claim_info.total_claimed += 1;\n\treturn result_node;\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @param {string} name\n * @param {{ [key: string]: boolean }} attributes\n * @param {(name: string) => Element | SVGElement} create_element\n * @returns {Element | SVGElement}\n */\nfunction claim_element_base(nodes, name, attributes, create_element) {\n\treturn claim_node(\n\t\tnodes,\n\t\t/** @returns {node is Element | SVGElement} */\n\t\t(node) => node.nodeName === name,\n\t\t/** @param {Element} node */\n\t\t(node) => {\n\t\t\tconst remove = [];\n\t\t\tfor (let j = 0; j < node.attributes.length; j++) {\n\t\t\t\tconst attribute = node.attributes[j];\n\t\t\t\tif (!attributes[attribute.name]) {\n\t\t\t\t\tremove.push(attribute.name);\n\t\t\t\t}\n\t\t\t}\n\t\t\tremove.forEach((v) => node.removeAttribute(v));\n\t\t\treturn undefined;\n\t\t},\n\t\t() => create_element(name)\n\t);\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @param {string} name\n * @param {{ [key: string]: boolean }} attributes\n * @returns {Element | SVGElement}\n */\nexport function claim_element(nodes, name, attributes) {\n\treturn claim_element_base(nodes, name, attributes, element);\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @param {string} name\n * @param {{ [key: string]: boolean }} attributes\n * @returns {Element | SVGElement}\n */\nexport function claim_svg_element(nodes, name, attributes) {\n\treturn claim_element_base(nodes, name, attributes, svg_element);\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @returns {Text}\n */\nexport function claim_text(nodes, data) {\n\treturn claim_node(\n\t\tnodes,\n\t\t/** @returns {node is Text} */\n\t\t(node) => node.nodeType === 3,\n\t\t/** @param {Text} node */\n\t\t(node) => {\n\t\t\tconst data_str = '' + data;\n\t\t\tif (node.data.startsWith(data_str)) {\n\t\t\t\tif (node.data.length !== data_str.length) {\n\t\t\t\t\treturn node.splitText(data_str.length);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnode.data = data_str;\n\t\t\t}\n\t\t},\n\t\t() => text(data),\n\t\ttrue // Text nodes should not update last index since it is likely not worth it to eliminate an increasing subsequence of actual elements\n\t);\n}\n\n/**\n * @returns {Text} */\nexport function claim_space(nodes) {\n\treturn claim_text(nodes, ' ');\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @returns {Comment}\n */\nexport function claim_comment(nodes, data) {\n\treturn claim_node(\n\t\tnodes,\n\t\t/** @returns {node is Comment} */\n\t\t(node) => node.nodeType === 8,\n\t\t/** @param {Comment} node */\n\t\t(node) => {\n\t\t\tnode.data = '' + data;\n\t\t\treturn undefined;\n\t\t},\n\t\t() => comment(data),\n\t\ttrue\n\t);\n}\n\nfunction get_comment_idx(nodes, text, start) {\n\tfor (let i = start; i < nodes.length; i += 1) {\n\t\tconst node = nodes[i];\n\t\tif (node.nodeType === 8 /* comment node */ && node.textContent.trim() === text) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n}\n\n/**\n * @param {boolean} is_svg\n * @returns {HtmlTagHydration}\n */\nexport function claim_html_tag(nodes, is_svg) {\n\t// find html opening tag\n\tconst start_index = get_comment_idx(nodes, 'HTML_TAG_START', 0);\n\tconst end_index = get_comment_idx(nodes, 'HTML_TAG_END', start_index + 1);\n\tif (start_index === -1 || end_index === -1) {\n\t\treturn new HtmlTagHydration(is_svg);\n\t}\n\n\tinit_claim_info(nodes);\n\tconst html_tag_nodes = nodes.splice(start_index, end_index - start_index + 1);\n\tdetach(html_tag_nodes[0]);\n\tdetach(html_tag_nodes[html_tag_nodes.length - 1]);\n\tconst claimed_nodes = html_tag_nodes.slice(1, html_tag_nodes.length - 1);\n\tif (claimed_nodes.length === 0) {\n\t\treturn new HtmlTagHydration(is_svg);\n\t}\n\tfor (const n of claimed_nodes) {\n\t\tn.claim_order = nodes.claim_info.total_claimed;\n\t\tnodes.claim_info.total_claimed += 1;\n\t}\n\treturn new HtmlTagHydration(is_svg, claimed_nodes);\n}\n\n/**\n * @param {Text} text\n * @param {unknown} data\n * @returns {void}\n */\nexport function set_data(text, data) {\n\tdata = '' + data;\n\tif (text.data === data) return;\n\ttext.data = /** @type {string} */ (data);\n}\n\n/**\n * @param {Text} text\n * @param {unknown} data\n * @returns {void}\n */\nexport function set_data_contenteditable(text, data) {\n\tdata = '' + data;\n\tif (text.wholeText === data) return;\n\ttext.data = /** @type {string} */ (data);\n}\n\n/**\n * @param {Text} text\n * @param {unknown} data\n * @param {string} attr_value\n * @returns {void}\n */\nexport function set_data_maybe_contenteditable(text, data, attr_value) {\n\tif (~contenteditable_truthy_values.indexOf(attr_value)) {\n\t\tset_data_contenteditable(text, data);\n\t} else {\n\t\tset_data(text, data);\n\t}\n}\n\n/**\n * @returns {void} */\nexport function set_input_value(input, value) {\n\tinput.value = value == null ? '' : value;\n}\n\n/**\n * @returns {void} */\nexport function set_input_type(input, type) {\n\ttry {\n\t\tinput.type = type;\n\t} catch (e) {\n\t\t// do nothing\n\t}\n}\n\n/**\n * @returns {void} */\nexport function set_style(node, key, value, important) {\n\tif (value == null) {\n\t\tnode.style.removeProperty(key);\n\t} else {\n\t\tnode.style.setProperty(key, value, important ? 'important' : '');\n\t}\n}\n\n/**\n * @returns {void} */\nexport function select_option(select, value, mounting) {\n\tfor (let i = 0; i < select.options.length; i += 1) {\n\t\tconst option = select.options[i];\n\t\tif (option.__value === value) {\n\t\t\toption.selected = true;\n\t\t\treturn;\n\t\t}\n\t}\n\tif (!mounting || value !== undefined) {\n\t\tselect.selectedIndex = -1; // no option should be selected\n\t}\n}\n\n/**\n * @returns {void} */\nexport function select_options(select, value) {\n\tfor (let i = 0; i < select.options.length; i += 1) {\n\t\tconst option = select.options[i];\n\t\toption.selected = ~value.indexOf(option.__value);\n\t}\n}\n\nexport function select_value(select) {\n\tconst selected_option = select.querySelector(':checked');\n\treturn selected_option && selected_option.__value;\n}\n\nexport function select_multiple_value(select) {\n\treturn [].map.call(select.querySelectorAll(':checked'), (option) => option.__value);\n}\n// unfortunately this can't be a constant as that wouldn't be tree-shakeable\n// so we cache the result instead\n\n/**\n * @type {boolean} */\nlet crossorigin;\n\n/**\n * @returns {boolean} */\nexport function is_crossorigin() {\n\tif (crossorigin === undefined) {\n\t\tcrossorigin = false;\n\t\ttry {\n\t\t\tif (typeof window !== 'undefined' && window.parent) {\n\t\t\t\tvoid window.parent.document;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tcrossorigin = true;\n\t\t}\n\t}\n\treturn crossorigin;\n}\n\n/**\n * @param {HTMLElement} node\n * @param {() => void} fn\n * @returns {() => void}\n */\nexport function add_iframe_resize_listener(node, fn) {\n\tconst computed_style = getComputedStyle(node);\n\tif (computed_style.position === 'static') {\n\t\tnode.style.position = 'relative';\n\t}\n\tconst iframe = element('iframe');\n\tiframe.setAttribute(\n\t\t'style',\n\t\t'display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; ' +\n\t\t\t'overflow: hidden; border: 0; opacity: 0; pointer-events: none; z-index: -1;'\n\t);\n\tiframe.setAttribute('aria-hidden', 'true');\n\tiframe.tabIndex = -1;\n\tconst crossorigin = is_crossorigin();\n\n\t/**\n\t * @type {() => void}\n\t */\n\tlet unsubscribe;\n\tif (crossorigin) {\n\t\tiframe.src = \"data:text/html,<script>onresize=function(){parent.postMessage(0,'*')}</script>\";\n\t\tunsubscribe = listen(\n\t\t\twindow,\n\t\t\t'message',\n\t\t\t/** @param {MessageEvent} event */ (event) => {\n\t\t\t\tif (event.source === iframe.contentWindow) fn();\n\t\t\t}\n\t\t);\n\t} else {\n\t\tiframe.src = 'about:blank';\n\t\tiframe.onload = () => {\n\t\t\tunsubscribe = listen(iframe.contentWindow, 'resize', fn);\n\t\t\t// make sure an initial resize event is fired _after_ the iframe is loaded (which is asynchronous)\n\t\t\t// see https://github.com/sveltejs/svelte/issues/4233\n\t\t\tfn();\n\t\t};\n\t}\n\tappend(node, iframe);\n\treturn () => {\n\t\tif (crossorigin) {\n\t\t\tunsubscribe();\n\t\t} else if (unsubscribe && iframe.contentWindow) {\n\t\t\tunsubscribe();\n\t\t}\n\t\tdetach(iframe);\n\t};\n}\nexport const resize_observer_content_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'content-box'\n});\nexport const resize_observer_border_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'border-box'\n});\nexport const resize_observer_device_pixel_content_box = /* @__PURE__ */ new ResizeObserverSingleton(\n\t{ box: 'device-pixel-content-box' }\n);\nexport { ResizeObserverSingleton };\n\n/**\n * @returns {void} */\nexport function toggle_class(element, name, toggle) {\n\t// The `!!` is required because an `undefined` flag means flipping the current state.\n\telement.classList.toggle(name, !!toggle);\n}\n\n/**\n * @template T\n * @param {string} type\n * @param {T} [detail]\n * @param {{ bubbles?: boolean, cancelable?: boolean }} [options]\n * @returns {CustomEvent<T>}\n */\nexport function custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {\n\treturn new CustomEvent(type, { detail, bubbles, cancelable });\n}\n\n/**\n * @param {string} selector\n * @param {HTMLElement} parent\n * @returns {ChildNodeArray}\n */\nexport function query_selector_all(selector, parent = document.body) {\n\treturn Array.from(parent.querySelectorAll(selector));\n}\n\n/**\n * @param {string} nodeId\n * @param {HTMLElement} head\n * @returns {any[]}\n */\nexport function head_selector(nodeId, head) {\n\tconst result = [];\n\tlet started = 0;\n\tfor (const node of head.childNodes) {\n\t\tif (node.nodeType === 8 /* comment node */) {\n\t\t\tconst comment = node.textContent.trim();\n\t\t\tif (comment === `HEAD_${nodeId}_END`) {\n\t\t\t\tstarted -= 1;\n\t\t\t\tresult.push(node);\n\t\t\t} else if (comment === `HEAD_${nodeId}_START`) {\n\t\t\t\tstarted += 1;\n\t\t\t\tresult.push(node);\n\t\t\t}\n\t\t} else if (started > 0) {\n\t\t\tresult.push(node);\n\t\t}\n\t}\n\treturn result;\n}\n/** */\nexport class HtmlTag {\n\t/**\n\t * @private\n\t * @default false\n\t */\n\tis_svg = false;\n\t/** parent for creating node */\n\te = undefined;\n\t/** html tag nodes */\n\tn = undefined;\n\t/** target */\n\tt = undefined;\n\t/** anchor */\n\ta = undefined;\n\tconstructor(is_svg = false) {\n\t\tthis.is_svg = is_svg;\n\t\tthis.e = this.n = null;\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @returns {void}\n\t */\n\tc(html) {\n\t\tthis.h(html);\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @param {HTMLElement | SVGElement} target\n\t * @param {HTMLElement | SVGElement} anchor\n\t * @returns {void}\n\t */\n\tm(html, target, anchor = null) {\n\t\tif (!this.e) {\n\t\t\tif (this.is_svg)\n\t\t\t\tthis.e = svg_element(/** @type {keyof SVGElementTagNameMap} */ (target.nodeName));\n\t\t\t/** #7364 target for <template> may be provided as #document-fragment(11) */ else\n\t\t\t\tthis.e = element(\n\t\t\t\t\t/** @type {keyof HTMLElementTagNameMap} */ (\n\t\t\t\t\t\ttarget.nodeType === 11 ? 'TEMPLATE' : target.nodeName\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\tthis.t =\n\t\t\t\ttarget.tagName !== 'TEMPLATE'\n\t\t\t\t\t? target\n\t\t\t\t\t: /** @type {HTMLTemplateElement} */ (target).content;\n\t\t\tthis.c(html);\n\t\t}\n\t\tthis.i(anchor);\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @returns {void}\n\t */\n\th(html) {\n\t\tthis.e.innerHTML = html;\n\t\tthis.n = Array.from(\n\t\t\tthis.e.nodeName === 'TEMPLATE' ? this.e.content.childNodes : this.e.childNodes\n\t\t);\n\t}\n\n\t/**\n\t * @returns {void} */\n\ti(anchor) {\n\t\tfor (let i = 0; i < this.n.length; i += 1) {\n\t\t\tinsert(this.t, this.n[i], anchor);\n\t\t}\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @returns {void}\n\t */\n\tp(html) {\n\t\tthis.d();\n\t\tthis.h(html);\n\t\tthis.i(this.a);\n\t}\n\n\t/**\n\t * @returns {void} */\n\td() {\n\t\tthis.n.forEach(detach);\n\t}\n}\n\nexport class HtmlTagHydration extends HtmlTag {\n\t/** @type {Element[]} hydration claimed nodes */\n\tl = undefined;\n\n\tconstructor(is_svg = false, claimed_nodes) {\n\t\tsuper(is_svg);\n\t\tthis.e = this.n = null;\n\t\tthis.l = claimed_nodes;\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @returns {void}\n\t */\n\tc(html) {\n\t\tif (this.l) {\n\t\t\tthis.n = this.l;\n\t\t} else {\n\t\t\tsuper.c(html);\n\t\t}\n\t}\n\n\t/**\n\t * @returns {void} */\n\ti(anchor) {\n\t\tfor (let i = 0; i < this.n.length; i += 1) {\n\t\t\tinsert_hydration(this.t, this.n[i], anchor);\n\t\t}\n\t}\n}\n\n/**\n * @param {NamedNodeMap} attributes\n * @returns {{}}\n */\nexport function attribute_to_object(attributes) {\n\tconst result = {};\n\tfor (const attribute of attributes) {\n\t\tresult[attribute.name] = attribute.value;\n\t}\n\treturn result;\n}\n\nconst escaped = {\n\t'\"': '"',\n\t'&': '&',\n\t'<': '<'\n};\n\nconst regex_attribute_characters_to_escape = /[\"&<]/g;\n\n/**\n * Note that the attribute itself should be surrounded in double quotes\n * @param {any} attribute\n */\nfunction escape_attribute(attribute) {\n\treturn String(attribute).replace(regex_attribute_characters_to_escape, (match) => escaped[match]);\n}\n\n/**\n * @param {Record<string, string>} attributes\n */\nexport function stringify_spread(attributes) {\n\tlet str = ' ';\n\tfor (const key in attributes) {\n\t\tif (attributes[key] != null) {\n\t\t\tstr += `${key}=\"${escape_attribute(attributes[key])}\" `;\n\t\t}\n\t}\n\n\treturn str;\n}\n\n/**\n * @param {HTMLElement} element\n * @returns {{}}\n */\nexport function get_custom_elements_slots(element) {\n\tconst result = {};\n\telement.childNodes.forEach(\n\t\t/** @param {Element} node */ (node) => {\n\t\t\tresult[node.slot || 'default'] = true;\n\t\t}\n\t);\n\treturn result;\n}\n\nexport function construct_svelte_component(component, props) {\n\treturn new component(props);\n}\n\n/**\n * @typedef {Node & {\n * \tclaim_order?: number;\n * \thydrate_init?: true;\n * \tactual_end_child?: NodeEx;\n * \tchildNodes: NodeListOf<NodeEx>;\n * }} NodeEx\n */\n\n/** @typedef {ChildNode & NodeEx} ChildNodeEx */\n\n/** @typedef {NodeEx & { claim_order: number }} NodeEx2 */\n\n/**\n * @typedef {ChildNodeEx[] & {\n * \tclaim_info?: {\n * \t\tlast_index: number;\n * \t\ttotal_claimed: number;\n * \t};\n * }} ChildNodeArray\n */\n","import { append_empty_stylesheet, detach, get_root_for_style } from './dom.js';\nimport { raf } from './environment.js';\n\n// we need to store the information for multiple documents because a Svelte application could also contain iframes\n// https://github.com/sveltejs/svelte/issues/3624\n/** @type {Map<Document | ShadowRoot, import('./private.d.ts').StyleInformation>} */\nconst managed_styles = new Map();\n\nlet active = 0;\n\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\n/**\n * @param {string} str\n * @returns {number}\n */\nfunction hash(str) {\n\tlet hash = 5381;\n\tlet i = str.length;\n\twhile (i--) hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n\treturn hash >>> 0;\n}\n\n/**\n * @param {Document | ShadowRoot} doc\n * @param {Element & ElementCSSInlineStyle} node\n * @returns {{ stylesheet: any; rules: {}; }}\n */\nfunction create_style_information(doc, node) {\n\tconst info = { stylesheet: append_empty_stylesheet(node), rules: {} };\n\tmanaged_styles.set(doc, info);\n\treturn info;\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {number} a\n * @param {number} b\n * @param {number} duration\n * @param {number} delay\n * @param {(t: number) => number} ease\n * @param {(t: number, u: number) => string} fn\n * @param {number} uid\n * @returns {string}\n */\nexport function create_rule(node, a, b, duration, delay, ease, fn, uid = 0) {\n\tconst step = 16.666 / duration;\n\tlet keyframes = '{\\n';\n\tfor (let p = 0; p <= 1; p += step) {\n\t\tconst t = a + (b - a) * ease(p);\n\t\tkeyframes += p * 100 + `%{${fn(t, 1 - t)}}\\n`;\n\t}\n\tconst rule = keyframes + `100% {${fn(b, 1 - b)}}\\n}`;\n\tconst name = `__svelte_${hash(rule)}_${uid}`;\n\tconst doc = get_root_for_style(node);\n\tconst { stylesheet, rules } = managed_styles.get(doc) || create_style_information(doc, node);\n\tif (!rules[name]) {\n\t\trules[name] = true;\n\t\tstylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length);\n\t}\n\tconst animation = node.style.animation || '';\n\tnode.style.animation = `${\n\t\tanimation ? `${animation}, ` : ''\n\t}${name} ${duration}ms linear ${delay}ms 1 both`;\n\tactive += 1;\n\treturn name;\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {string} [name]\n * @returns {void}\n */\nexport function delete_rule(node, name) {\n\tconst previous = (node.style.animation || '').split(', ');\n\tconst next = previous.filter(\n\t\tname\n\t\t\t? (anim) => anim.indexOf(name) < 0 // remove specific animation\n\t\t\t: (anim) => anim.indexOf('__svelte') === -1 // remove all Svelte animations\n\t);\n\tconst deleted = previous.length - next.length;\n\tif (deleted) {\n\t\tnode.style.animation = next.join(', ');\n\t\tactive -= deleted;\n\t\tif (!active) clear_rules();\n\t}\n}\n\n/** @returns {void} */\nexport function clear_rules() {\n\traf(() => {\n\t\tif (active) return;\n\t\tmanaged_styles.forEach((info) => {\n\t\t\tconst { ownerNode } = info.stylesheet;\n\t\t\t// there is no ownerNode if it runs on jsdom.\n\t\t\tif (ownerNode) detach(ownerNode);\n\t\t});\n\t\tmanaged_styles.clear();\n\t});\n}\n","import { identity as linear, noop } from './utils.js';\nimport { now } from './environment.js';\nimport { loop } from './loop.js';\nimport { create_rule, delete_rule } from './style_manager.js';\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {import('./private.js').PositionRect} from\n * @param {import('./private.js').AnimationFn} fn\n */\nexport function create_animation(node, from, fn, params) {\n\tif (!from) return noop;\n\tconst to = node.getBoundingClientRect();\n\tif (\n\t\tfrom.left === to.left &&\n\t\tfrom.right === to.right &&\n\t\tfrom.top === to.top &&\n\t\tfrom.bottom === to.bottom\n\t)\n\t\treturn noop;\n\tconst {\n\t\tdelay = 0,\n\t\tduration = 300,\n\t\teasing = linear,\n\t\t// @ts-ignore todo: should this be separated from destructuring? Or start/end added to public api and documentation?\n\t\tstart: start_time = now() + delay,\n\t\t// @ts-ignore todo:\n\t\tend = start_time + duration,\n\t\ttick = noop,\n\t\tcss\n\t} = fn(node, { from, to }, params);\n\tlet running = true;\n\tlet started = false;\n\tlet name;\n\t/** @returns {void} */\n\tfunction start() {\n\t\tif (css) {\n\t\t\tname = create_rule(node, 0, 1, duration, delay, easing, css);\n\t\t}\n\t\tif (!delay) {\n\t\t\tstarted = true;\n\t\t}\n\t}\n\t/** @returns {void} */\n\tfunction stop() {\n\t\tif (css) delete_rule(node, name);\n\t\trunning = false;\n\t}\n\tloop((now) => {\n\t\tif (!started && now >= start_time) {\n\t\t\tstarted = true;\n\t\t}\n\t\tif (started && now >= end) {\n\t\t\ttick(1, 0);\n\t\t\tstop();\n\t\t}\n\t\tif (!running) {\n\t\t\treturn false;\n\t\t}\n\t\tif (started) {\n\t\t\tconst p = now - start_time;\n\t\t\tconst t = 0 + 1 * easing(p / duration);\n\t\t\ttick(t, 1 - t);\n\t\t}\n\t\treturn true;\n\t});\n\tstart();\n\ttick(0, 1);\n\treturn stop;\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @returns {void}\n */\nexport function fix_position(node) {\n\tconst style = getComputedStyle(node);\n\tif (style.position !== 'absolute' && style.position !== 'fixed') {\n\t\tconst { width, height } = style;\n\t\tconst a = node.getBoundingClientRect();\n\t\tnode.style.position = 'absolute';\n\t\tnode.style.width = width;\n\t\tnode.style.height = height;\n\t\tadd_transform(node, a);\n\t}\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {import('./private.js').PositionRect} a\n * @returns {void}\n */\nexport function add_transform(node, a) {\n\tconst b = node.getBoundingClientRect();\n\tif (a.left !== b.left || a.top !== b.top) {\n\t\tconst style = getComputedStyle(node);\n\t\tconst transform = style.transform === 'none' ? '' : style.transform;\n\t\tnode.style.transform = `${transform} translate(${a.left - b.left}px, ${a.top - b.top}px)`;\n\t}\n}\n","import { custom_event } from './dom.js';\n\nexport let current_component;\n\n/** @returns {void} */\nexport function set_current_component(component) {\n\tcurrent_component = component;\n}\n\nexport function get_current_component() {\n\tif (!current_component) throw new Error('Function called outside component initialization');\n\treturn current_component;\n}\n\n/**\n * Schedules a callback to run immediately before the component is updated after any state change.\n *\n * The first time the callback runs will be before the initial `onMount`\n *\n * https://svelte.dev/docs/svelte#beforeupdate\n * @param {() => any} fn\n * @returns {void}\n */\nexport function beforeUpdate(fn) {\n\tget_current_component().$$.before_update.push(fn);\n}\n\n/**\n * The `onMount` function schedules a callback to run as soon as the component has been mounted to the DOM.\n * It must be called during the component's initialisation (but doesn't need to live *inside* the component;\n * it can be called from an external module).\n *\n * If a function is returned _synchronously_ from `onMount`, it will be called when the component is unmounted.\n *\n * `onMount` does not run inside a [server-side component](https://svelte.dev/docs#run-time-server-side-component-api).\n *\n * https://svelte.dev/docs/svelte#onmount\n * @template T\n * @param {() => import('./private.js').NotFunction<T> | Promise<import('./private.js').NotFunction<T>> | (() => any)} fn\n * @returns {void}\n */\nexport function onMount(fn) {\n\tget_current_component().$$.on_mount.push(fn);\n}\n\n/**\n * Schedules a callback to run immediately after the component has been updated.\n *\n * The first time the callback runs will be after the initial `onMount`\n *\n * https://svelte.dev/docs/svelte#afterupdate\n * @param {() => any} fn\n * @returns {void}\n */\nexport function afterUpdate(fn) {\n\tget_current_component().$$.after_update.push(fn);\n}\n\n/**\n * Schedules a callback to run immediately before the component is unmounted.\n *\n * Out of `onMount`, `beforeUpdate`, `afterUpdate` and `onDestroy`, this is the\n * only one that runs inside a server-side component.\n *\n * https://svelte.dev/docs/svelte#ondestroy\n * @param {() => any} fn\n * @returns {void}\n */\nexport function onDestroy(fn) {\n\tget_current_component().$$.on_destroy.push(fn);\n}\n\n/**\n * Creates an event dispatcher that can be used to dispatch [component events](https://svelte.dev/docs#template-syntax-component-directives-on-eventname).\n * Event dispatchers are functions that can take two arguments: `name` and `detail`.\n *\n * Component events created with `createEventDispatcher` create a\n * [CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent).\n * These events do not [bubble](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events#Event_bubbling_and_capture).\n * The `detail` argument corresponds to the [CustomEvent.detail](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail)\n * property and can contain any type of data.\n *\n * The event dispatcher can be typed to narrow the allowed event names and the type of the `detail` argument:\n * ```ts\n * const dispatch = createEventDispatcher<{\n * loaded: never; // does not take a detail argument\n * change: string; // takes a detail argument of type string, which is required\n * optional: number | null; // takes an optional detail argument of type number\n * }>();\n * ```\n *\n * https://svelte.dev/docs/svelte#createeventdispatcher\n * @template {Record<string, any>} [EventMap=any]\n * @returns {import('./public.js').EventDispatcher<EventMap>}\n */\nexport function createEventDispatcher() {\n\tconst component = get_current_component();\n\treturn (type, detail, { cancelable = false } = {}) => {\n\t\tconst callbacks = component.$$.callbacks[type];\n\t\tif (callbacks) {\n\t\t\t// TODO are there situations where events could be dispatched\n\t\t\t// in a server (non-DOM) environment?\n\t\t\tconst event = custom_event(/** @type {string} */ (type), detail, { cancelable });\n\t\t\tcallbacks.slice().forEach((fn) => {\n\t\t\t\tfn.call(component, event);\n\t\t\t});\n\t\t\treturn !event.defaultPrevented;\n\t\t}\n\t\treturn true;\n\t};\n}\n\n/**\n * Associates an arbitrary `context` object with the current component and the specified `key`\n * and returns that object. The context is then available to children of the component\n * (including slotted content) with `getContext`.\n *\n * Like lifecycle functions, this must be called during component initialisation.\n *\n * https://svelte.dev/docs/svelte#setcontext\n * @template T\n * @param {any} key\n * @param {T} context\n * @returns {T}\n */\nexport function setContext(key, context) {\n\tget_current_component().$$.context.set(key, context);\n\treturn context;\n}\n\n/**\n * Retrieves the context that belongs to the closest parent component with the specified `key`.\n * Must be called during component initialisation.\n *\n * https://svelte.dev/docs/svelte#getcontext\n * @template T\n * @param {any} key\n * @returns {T}\n */\nexport function getContext(key) {\n\treturn get_current_component().$$.context.get(key);\n}\n\n/**\n * Retrieves the whole context map that belongs to the closest parent component.\n * Must be called during component initialisation. Useful, for example, if you\n * programmatically create a component and want to pass the existing context to it.\n *\n * https://svelte.dev/docs/svelte#getallcontexts\n * @template {Map<any, any>} [T=Map<any, any>]\n * @returns {T}\n */\nexport function getAllContexts() {\n\treturn get_current_component().$$.context;\n}\n\n/**\n * Checks whether a given `key` has been set in the context of a parent component.\n * Must be called during component initialisation.\n *\n * https://svelte.dev/docs/svelte#hascontext\n * @param {any} key\n * @returns {boolean}\n */\nexport function hasContext(key) {\n\treturn get_current_component().$$.context.has(key);\n}\n\n// TODO figure out if we still want to support\n// shorthand events, or if we want to implement\n// a real bubbling mechanism\n/**\n * @param component\n * @param event\n * @returns {void}\n */\nexport function bubble(component, event) {\n\tconst callbacks = component.$$.callbacks[event.type];\n\tif (callbacks) {\n\t\t// @ts-ignore\n\t\tcallbacks.slice().forEach((fn) => fn.call(this, event));\n\t}\n}\n","import { run_all } from './utils.js';\nimport { current_component, set_current_component } from './lifecycle.js';\n\nexport const dirty_components = [];\nexport const intros = { enabled: false };\nexport const binding_callbacks = [];\n\nlet render_callbacks = [];\n\nconst flush_callbacks = [];\n\nconst resolved_promise = /* @__PURE__ */ Promise.resolve();\n\nlet update_scheduled = false;\n\n/** @returns {void} */\nexport function schedule_update() {\n\tif (!update_scheduled) {\n\t\tupdate_scheduled = true;\n\t\tresolved_promise.then(flush);\n\t}\n}\n\n/** @returns {Promise<void>} */\nexport function tick() {\n\tschedule_update();\n\treturn resolved_promise;\n}\n\n/** @returns {void} */\nexport function add_render_callback(fn) {\n\trender_callbacks.push(fn);\n}\n\n/** @returns {void} */\nexport function add_flush_callback(fn) {\n\tflush_callbacks.push(fn);\n}\n\n// flush() calls callbacks in this order:\n// 1. All beforeUpdate callbacks, in order: parents before children\n// 2. All bind:this callbacks, in reverse order: children before parents.\n// 3. All afterUpdate callbacks, in order: parents before children. EXCEPT\n// for afterUpdates called during the initial onMount, which are called in\n// reverse order: children before parents.\n// Since callbacks might update component values, which could trigger another\n// call to flush(), the following steps guard against this:\n// 1. During beforeUpdate, any updated components will be added to the\n// dirty_components array and will cause a reentrant call to flush(). Because\n// the flush index is kept outside the function, the reentrant call will pick\n// up where the earlier call left off and go through all dirty components. The\n// current_component value is saved and restored so that the reentrant call will\n// not interfere with the \"parent\" flush() call.\n// 2. bind:this callbacks cannot trigger new flush() calls.\n// 3. During afterUpdate, any updated components will NOT have their afterUpdate\n// callback called a second time; the seen_callbacks set, outside the flush()\n// function, guarantees this behavior.\nconst seen_callbacks = new Set();\n\nlet flushidx = 0; // Do *not* move this inside the flush() function\n\n/** @returns {void} */\nexport function flush() {\n\t// Do not reenter flush while dirty components are updated, as this can\n\t// result in an infinite loop. Instead, let the inner flush handle it.\n\t// Reentrancy is ok afterwards for bindings etc.\n\tif (flushidx !== 0) {\n\t\treturn;\n\t}\n\tconst saved_component = current_component;\n\tdo {\n\t\t// first, call beforeUpdate functions\n\t\t// and update components\n\t\ttry {\n\t\t\twhile (flushidx < dirty_components.length) {\n\t\t\t\tconst component = dirty_components[flushidx];\n\t\t\t\tflushidx++;\n\t\t\t\tset_current_component(component);\n\t\t\t\tupdate(component.$$);\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t// reset dirty state to not end up in a deadlocked state and then rethrow\n\t\t\tdirty_components.length = 0;\n\t\t\tflushidx = 0;\n\t\t\tthrow e;\n\t\t}\n\t\tset_current_component(null);\n\t\tdirty_components.length = 0;\n\t\tflushidx = 0;\n\t\twhile (binding_callbacks.length) binding_callbacks.pop()();\n\t\t// then, once components are updated, call\n\t\t// afterUpdate functions. This may cause\n\t\t// subsequent updates...\n\t\tfor (let i = 0; i < render_callbacks.length; i += 1) {\n\t\t\tconst callback = render_callbacks[i];\n\t\t\tif (!seen_callbacks.has(callback)) {\n\t\t\t\t// ...so guard against infinite loops\n\t\t\t\tseen_callbacks.add(callback);\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t\trender_callbacks.length = 0;\n\t} while (dirty_components.length);\n\twhile (flush_callbacks.length) {\n\t\tflush_callbacks.pop()();\n\t}\n\tupdate_scheduled = false;\n\tseen_callbacks.clear();\n\tset_current_component(saved_component);\n}\n\n/** @returns {void} */\nfunction update($$) {\n\tif ($$.fragment !== null) {\n\t\t$$.update();\n\t\trun_all($$.before_update);\n\t\tconst dirty = $$.dirty;\n\t\t$$.dirty = [-1];\n\t\t$$.fragment && $$.fragment.p($$.ctx, dirty);\n\t\t$$.after_update.forEach(add_render_callback);\n\t}\n}\n\n/**\n * Useful for example to execute remaining `afterUpdate` callbacks before executing `destroy`.\n * @param {Function[]} fns\n * @returns {void}\n */\nexport function flush_render_callbacks(fns) {\n\tconst filtered = [];\n\tconst targets = [];\n\trender_callbacks.forEach((c) => (fns.indexOf(c) === -1 ? filtered.push(c) : targets.push(c)));\n\ttargets.forEach((c) => c());\n\trender_callbacks = filtered;\n}\n","import { identity as linear, is_function, noop, run_all } from './utils.js';\nimport { now } from './environment.js';\nimport { loop } from './loop.js';\nimport { create_rule, delete_rule } from './style_manager.js';\nimport { custom_event } from './dom.js';\nimport { add_render_callback } from './scheduler.js';\n\n/**\n * @type {Promise<void> | null}\n */\nlet promise;\n\n/**\n * @returns {Promise<void>}\n */\nfunction wait() {\n\tif (!promise) {\n\t\tpromise = Promise.resolve();\n\t\tpromise.then(() => {\n\t\t\tpromise = null;\n\t\t});\n\t}\n\treturn promise;\n}\n\n/**\n * @param {Element} node\n * @param {INTRO | OUTRO | boolean} direction\n * @param {'start' | 'end'} kind\n * @returns {void}\n */\nfunction dispatch(node, direction, kind) {\n\tnode.dispatchEvent(custom_event(`${direction ? 'intro' : 'outro'}${kind}`));\n}\n\nconst outroing = new Set();\n\n/**\n * @type {Outro}\n */\nlet outros;\n\n/**\n * @returns {void} */\nexport function group_outros() {\n\toutros = {\n\t\tr: 0,\n\t\tc: [],\n\t\tp: outros // parent group\n\t};\n}\n\n/**\n * @returns {void} */\nexport function check_outros() {\n\tif (!outros.r) {\n\t\trun_all(outros.c);\n\t}\n\toutros = outros.p;\n}\n\n/**\n * @param {import('./private.js').Fragment} block\n * @param {0 | 1} [local]\n * @returns {void}\n */\nexport function transition_in(block, local) {\n\tif (block && block.i) {\n\t\toutroing.delete(block);\n\t\tblock.i(local);\n\t}\n}\n\n/**\n * @param {import('./private.js').Fragment} block\n * @param {0 | 1} local\n * @param {0 | 1} [detach]\n * @param {() => void} [callback]\n * @returns {void}\n */\nexport function transition_out(block, local, detach, callback) {\n\tif (block && block.o) {\n\t\tif (outroing.has(block)) return;\n\t\toutroing.add(block);\n\t\toutros.c.push(() => {\n\t\t\toutroing.delete(block);\n\t\t\tif (callback) {\n\t\t\t\tif (detach) block.d(1);\n\t\t\t\tcallback();\n\t\t\t}\n\t\t});\n\t\tblock.o(local);\n\t} else if (callback) {\n\t\tcallback();\n\t}\n}\n\n/**\n * @type {import('../transition/public.js').TransitionConfig}\n */\nconst null_transition = { duration: 0 };\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {TransitionFn} fn\n * @param {any} params\n * @returns {{ start(): void; invalidate(): void; end(): void; }}\n */\nexport function create_in_transition(node, fn, params) {\n\t/**\n\t * @type {TransitionOptions} */\n\tconst options = { direction: 'in' };\n\tlet config = fn(node, params, options);\n\tlet running = false;\n\tlet animation_name;\n\tlet task;\n\tlet uid = 0;\n\n\t/**\n\t * @returns {void} */\n\tfunction cleanup() {\n\t\tif (animation_name) delete_rule(node, animation_name);\n\t}\n\n\t/**\n\t * @returns {void} */\n\tfunction go() {\n\t\tconst {\n\t\t\tdelay = 0,\n\t\t\tduration = 300,\n\t\t\teasing = linear,\n\t\t\ttick = noop,\n\t\t\tcss\n\t\t} = config || null_transition;\n\t\tif (css) animation_name = create_rule(node, 0, 1, duration, delay, easing, css, uid++);\n\t\ttick(0, 1);\n\t\tconst start_time = now() + delay;\n\t\tconst end_time = start_time + duration;\n\t\tif (task) task.abort();\n\t\trunning = true;\n\t\tadd_render_callback(() => dispatch(node, true, 'start'));\n\t\ttask = loop((now) => {\n\t\t\tif (running) {\n\t\t\t\tif (now >= end_time) {\n\t\t\t\t\ttick(1, 0);\n\t\t\t\t\tdispatch(node, true, 'end');\n\t\t\t\t\tcleanup();\n\t\t\t\t\treturn (running = false);\n\t\t\t\t}\n\t\t\t\tif (now >= start_time) {\n\t\t\t\t\tconst t = easing((now - start_time) / duration);\n\t\t\t\t\ttick(t, 1 - t);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn running;\n\t\t});\n\t}\n\tlet started = false;\n\treturn {\n\t\tstart() {\n\t\t\tif (started) return;\n\t\t\tstarted = true;\n\t\t\tdelete_rule(node);\n\t\t\tif (is_function(config)) {\n\t\t\t\tconfig = config(options);\n\t\t\t\twait().then(go);\n\t\t\t} else {\n\t\t\t\tgo();\n\t\t\t}\n\t\t},\n\t\tinvalidate() {\n\t\t\tstarted = false;\n\t\t},\n\t\tend() {\n\t\t\tif (running) {\n\t\t\t\tcleanup();\n\t\t\t\trunning = false;\n\t\t\t}\n\t\t}\n\t};\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {TransitionFn} fn\n * @param {any} params\n * @returns {{ end(reset: any): void; }}\n */\nexport function create_out_transition(node, fn, params) {\n\t/** @type {TransitionOptions} */\n\tconst options = { direction: 'out' };\n\tlet config = fn(node, params, options);\n\tlet running = true;\n\tlet animation_name;\n\tconst group = outros;\n\tgroup.r += 1;\n\t/** @type {boolean} */\n\tlet original_inert_value;\n\n\t/**\n\t * @returns {void} */\n\tfunction go() {\n\t\tconst {\n\t\t\tdelay = 0,\n\t\t\tduration = 300,\n\t\t\teasing = linear,\n\t\t\ttick = noop,\n\t\t\tcss\n\t\t} = config || null_transition;\n\n\t\tif (css) animation_name = create_rule(node, 1, 0, duration, delay, easing, css);\n\n\t\tconst start_time = now() + delay;\n\t\tconst end_time = start_time + duration;\n\t\tadd_render_callback(() => dispatch(node, false, 'start'));\n\n\t\tif ('inert' in node) {\n\t\t\toriginal_inert_value = /** @type {HTMLElement} */ (node).inert;\n\t\t\tnode.inert = true;\n\t\t}\n\n\t\tloop((now) => {\n\t\t\tif (running) {\n\t\t\t\tif (now >= end_time) {\n\t\t\t\t\ttick(0, 1);\n\t\t\t\t\tdispatch(node, false, 'end');\n\t\t\t\t\tif (!--group.r) {\n\t\t\t\t\t\t// this will result in `end()` being called,\n\t\t\t\t\t\t// so we don't need to clean up here\n\t\t\t\t\t\trun_all(group.c);\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (now >= start_time) {\n\t\t\t\t\tconst t = easing((now - start_time) / duration);\n\t\t\t\t\ttick(1 - t, t);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn running;\n\t\t});\n\t}\n\n\tif (is_function(config)) {\n\t\twait().then(() => {\n\t\t\t// @ts-ignore\n\t\t\tconfig = config(options);\n\t\t\tgo();\n\t\t});\n\t} else {\n\t\tgo();\n\t}\n\n\treturn {\n\t\tend(reset) {\n\t\t\tif (reset && 'inert' in node) {\n\t\t\t\tnode.inert = original_inert_value;\n\t\t\t}\n\t\t\tif (reset && config.tick) {\n\t\t\t\tconfig.tick(1, 0);\n\t\t\t}\n\t\t\tif (running) {\n\t\t\t\tif (animation_name) delete_rule(node, animation_name);\n\t\t\t\trunning = false;\n\t\t\t}\n\t\t}\n\t};\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {TransitionFn} fn\n * @param {any} params\n * @param {boolean} intro\n * @returns {{ run(b: 0 | 1): void; end(): void; }}\n */\nexport function create_bidirectional_transition(node, fn, params, intro) {\n\t/**\n\t * @type {TransitionOptions} */\n\tconst options = { direction: 'both' };\n\tlet config = fn(node, params, options);\n\tlet t = intro ? 0 : 1;\n\n\t/**\n\t * @type {Program | null} */\n\tlet running_program = null;\n\n\t/**\n\t * @type {PendingProgram | null} */\n\tlet pending_program = null;\n\tlet animation_name = null;\n\n\t/** @type {boolean} */\n\tlet original_inert_value;\n\n\t/**\n\t * @returns {void} */\n\tfunction clear_animation() {\n\t\tif (animation_name) delete_rule(node, animation_name);\n\t}\n\n\t/**\n\t * @param {PendingProgram} program\n\t * @param {number} duration\n\t * @returns {Program}\n\t */\n\tfunction init(program, duration) {\n\t\tconst d = /** @type {Program['d']} */ (program.b - t);\n\t\tduration *= Math.abs(d);\n\t\treturn {\n\t\t\ta: t,\n\t\t\tb: program.b,\n\t\t\td,\n\t\t\tduration,\n\t\t\tstart: program.start,\n\t\t\tend: program.start + duration,\n\t\t\tgroup: program.group\n\t\t};\n\t}\n\n\t/**\n\t * @param {INTRO | OUTRO} b\n\t * @returns {void}\n\t */\n\tfunction go(b) {\n\t\tconst {\n\t\t\tdelay = 0,\n\t\t\tduration = 300,\n\t\t\teasing = linear,\n\t\t\ttick = noop,\n\t\t\tcss\n\t\t} = config || null_transition;\n\n\t\t/**\n\t\t * @type {PendingProgram} */\n\t\tconst program = {\n\t\t\tstart: now() + delay,\n\t\t\tb\n\t\t};\n\n\t\tif (!b) {\n\t\t\t// @ts-ignore todo: improve typings\n\t\t\tprogram.group = outros;\n\t\t\toutros.r += 1;\n\t\t}\n\n\t\tif ('inert' in node) {\n\t\t\tif (b) {\n\t\t\t\tif (original_inert_value !== undefined) {\n\t\t\t\t\t// aborted/reversed outro — restore previous inert value\n\t\t\t\t\tnode.inert = original_inert_value;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toriginal_inert_value = /** @type {HTMLElement} */ (node).inert;\n\t\t\t\tnode.inert = true;\n\t\t\t}\n\t\t}\n\n\t\tif (running_program || pending_program) {\n\t\t\tpending_program = program;\n\t\t} else {\n\t\t\t// if this is an intro, and there's a delay, we need to do\n\t\t\t// an initial tick and/or apply CSS animation immediately\n\t\t\tif (css) {\n\t\t\t\tclear_animation();\n\t\t\t\tanimation_name = create_rule(node, t, b, duration, delay, easing, css);\n\t\t\t}\n\t\t\tif (b) tick(0, 1);\n\t\t\trunning_program = init(program, duration);\n\t\t\tadd_render_callback(() => dispatch(node, b, 'start'));\n\t\t\tloop((now) => {\n\t\t\t\tif (pending_program && now > pending_program.start) {\n\t\t\t\t\trunning_program = init(pending_program, duration);\n\t\t\t\t\tpending_program = null;\n\t\t\t\t\tdispatch(node, running_program.b, 'start');\n\t\t\t\t\tif (css) {\n\t\t\t\t\t\tclear_animation();\n\t\t\t\t\t\tanimation_name = create_rule(\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tt,\n\t\t\t\t\t\t\trunning_program.b,\n\t\t\t\t\t\t\trunning_program.duration,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\teasing,\n\t\t\t\t\t\t\tconfig.css\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (running_program) {\n\t\t\t\t\tif (now >= running_program.end) {\n\t\t\t\t\t\ttick((t = running_program.b), 1 - t);\n\t\t\t\t\t\tdispatch(node, running_program.b, 'end');\n\t\t\t\t\t\tif (!pending_program) {\n\t\t\t\t\t\t\t// we're done\n\t\t\t\t\t\t\tif (running_program.b) {\n\t\t\t\t\t\t\t\t// intro — we can tidy up immediately\n\t\t\t\t\t\t\t\tclear_animation();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// outro — needs to be coordinated\n\t\t\t\t\t\t\t\tif (!--running_program.group.r) run_all(running_program.group.c);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\trunning_program = null;\n\t\t\t\t\t} else if (now >= running_program.start) {\n\t\t\t\t\t\tconst p = now - running_program.start;\n\t\t\t\t\t\tt = running_program.a + running_program.d * easing(p / running_program.duration);\n\t\t\t\t\t\ttick(t, 1 - t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn !!(running_program || pending_program);\n\t\t\t});\n\t\t}\n\t}\n\treturn {\n\t\trun(b) {\n\t\t\tif (is_function(config)) {\n\t\t\t\twait().then(() => {\n\t\t\t\t\tconst opts = { direction: b ? 'in' : 'out' };\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tconfig = config(opts);\n\t\t\t\t\tgo(b);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tgo(b);\n\t\t\t}\n\t\t},\n\t\tend() {\n\t\t\tclear_animation();\n\t\t\trunning_program = pending_program = null;\n\t\t}\n\t};\n}\n\n/** @typedef {1} INTRO */\n/** @typedef {0} OUTRO */\n/** @typedef {{ direction: 'in' | 'out' | 'both' }} TransitionOptions */\n/** @typedef {(node: Element, params: any, options: TransitionOptions) => import('../transition/public.js').TransitionConfig} TransitionFn */\n\n/**\n * @typedef {Object} Outro\n * @property {number} r\n * @property {Function[]} c\n * @property {Object} p\n */\n\n/**\n * @typedef {Object} PendingProgram\n * @property {number} start\n * @property {INTRO|OUTRO} b\n * @property {Outro} [group]\n */\n\n/**\n * @typedef {Object} Program\n * @property {number} a\n * @property {INTRO|OUTRO} b\n * @property {1|-1} d\n * @property {number} duration\n * @property {number} start\n * @property {number} end\n * @property {Outro} [group]\n */\n","import { transition_in, transition_out } from './transitions.js';\nimport { run_all } from './utils.js';\n\n// general each functions:\n\nexport function ensure_array_like(array_like_or_iterator) {\n\treturn array_like_or_iterator?.length !== undefined\n\t\t? array_like_or_iterator\n\t\t: Array.from(array_like_or_iterator);\n}\n\n// keyed each functions:\n\n/** @returns {void} */\nexport function destroy_block(block, lookup) {\n\tblock.d(1);\n\tlookup.delete(block.key);\n}\n\n/** @returns {void} */\nexport function outro_and_destroy_block(block, lookup) {\n\ttransition_out(block, 1, 1, () => {\n\t\tlookup.delete(block.key);\n\t});\n}\n\n/** @returns {void} */\nexport function fix_and_destroy_block(block, lookup) {\n\tblock.f();\n\tdestroy_block(block, lookup);\n}\n\n/** @returns {void} */\nexport function fix_and_outro_and_destroy_block(block, lookup) {\n\tblock.f();\n\toutro_and_destroy_block(block, lookup);\n}\n\n/** @returns {any[]} */\nexport function update_keyed_each(\n\told_blocks,\n\tdirty,\n\tget_key,\n\tdynamic,\n\tctx,\n\tlist,\n\tlookup,\n\tnode,\n\tdestroy,\n\tcreate_each_block,\n\tnext,\n\tget_context\n) {\n\tlet o = old_blocks.length;\n\tlet n = list.length;\n\tlet i = o;\n\tconst old_indexes = {};\n\twhile (i--) old_indexes[old_blocks[i].key] = i;\n\tconst new_blocks = [];\n\tconst new_lookup = new Map();\n\tconst deltas = new Map();\n\tconst updates = [];\n\ti = n;\n\twhile (i--) {\n\t\tconst child_ctx = get_context(ctx, list, i);\n\t\tconst key = get_key(child_ctx);\n\t\tlet block = lookup.get(key);\n\t\tif (!block) {\n\t\t\tblock = create_each_block(key, child_ctx);\n\t\t\tblock.c();\n\t\t} else if (dynamic) {\n\t\t\t// defer updates until all the DOM shuffling is done\n\t\t\tupdates.push(() => block.p(child_ctx, dirty));\n\t\t}\n\t\tnew_lookup.set(key, (new_blocks[i] = block));\n\t\tif (key in old_indexes) deltas.set(key, Math.abs(i - old_indexes[key]));\n\t}\n\tconst will_move = new Set();\n\tconst did_move = new Set();\n\t/** @returns {void} */\n\tfunction insert(block) {\n\t\ttransition_in(block, 1);\n\t\tblock.m(node, next);\n\t\tlookup.set(block.key, block);\n\t\tnext = block.first;\n\t\tn--;\n\t}\n\twhile (o && n) {\n\t\tconst new_block = new_blocks[n - 1];\n\t\tconst old_block = old_blocks[o - 1];\n\t\tconst new_key = new_block.key;\n\t\tconst old_key = old_block.key;\n\t\tif (new_block === old_block) {\n\t\t\t// do nothing\n\t\t\tnext = new_block.first;\n\t\t\to--;\n\t\t\tn--;\n\t\t} else if (!new_lookup.has(old_key)) {\n\t\t\t// remove old block\n\t\t\tdestroy(old_block, lookup);\n\t\t\to--;\n\t\t} else if (!lookup.has(new_key) || will_move.has(new_key)) {\n\t\t\tinsert(new_block);\n\t\t} else if (did_move.has(old_key)) {\n\t\t\to--;\n\t\t} else if (deltas.get(new_key) > deltas.get(old_key)) {\n\t\t\tdid_move.add(new_key);\n\t\t\tinsert(new_block);\n\t\t} else {\n\t\t\twill_move.add(old_key);\n\t\t\to--;\n\t\t}\n\t}\n\twhile (o--) {\n\t\tconst old_block = old_blocks[o];\n\t\tif (!new_lookup.has(old_block.key)) destroy(old_block, lookup);\n\t}\n\twhile (n) insert(new_blocks[n - 1]);\n\trun_all(updates);\n\treturn new_blocks;\n}\n\n/** @returns {void} */\nexport function validate_each_keys(ctx, list, get_context, get_key) {\n\tconst keys = new Map();\n\tfor (let i = 0; i < list.length; i++) {\n\t\tconst key = get_key(get_context(ctx, list, i));\n\t\tif (keys.has(key)) {\n\t\t\tlet value = '';\n\t\t\ttry {\n\t\t\t\tvalue = `with value '${String(key)}' `;\n\t\t\t} catch (e) {\n\t\t\t\t// can't stringify\n\t\t\t}\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot have duplicate keys in a keyed each: Keys at index ${keys.get(\n\t\t\t\t\tkey\n\t\t\t\t)} and ${i} ${value}are duplicates`\n\t\t\t);\n\t\t}\n\t\tkeys.set(key, i);\n\t}\n}\n","/** @returns {{}} */\nexport function get_spread_update(levels, updates) {\n\tconst update = {};\n\tconst to_null_out = {};\n\tconst accounted_for = { $$scope: 1 };\n\tlet i = levels.length;\n\twhile (i--) {\n\t\tconst o = levels[i];\n\t\tconst n = updates[i];\n\t\tif (n) {\n\t\t\tfor (const key in o) {\n\t\t\t\tif (!(key in n)) to_null_out[key] = 1;\n\t\t\t}\n\t\t\tfor (const key in n) {\n\t\t\t\tif (!accounted_for[key]) {\n\t\t\t\t\tupdate[key] = n[key];\n\t\t\t\t\taccounted_for[key] = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlevels[i] = n;\n\t\t} else {\n\t\t\tfor (const key in o) {\n\t\t\t\taccounted_for[key] = 1;\n\t\t\t}\n\t\t}\n\t}\n\tfor (const key in to_null_out) {\n\t\tif (!(key in update)) update[key] = undefined;\n\t}\n\treturn update;\n}\n\nexport function get_spread_object(spread_props) {\n\treturn typeof spread_props === 'object' && spread_props !== null ? spread_props : {};\n}\n","import {\n\tadd_render_callback,\n\tflush,\n\tflush_render_callbacks,\n\tschedule_update,\n\tdirty_components\n} from './scheduler.js';\nimport { current_component, set_current_component } from './lifecycle.js';\nimport { blank_object, is_empty, is_function, run, run_all, noop } from './utils.js';\nimport {\n\tchildren,\n\tdetach,\n\tstart_hydrating,\n\tend_hydrating,\n\tget_custom_elements_slots,\n\tinsert,\n\telement,\n\tattr\n} from './dom.js';\nimport { transition_in } from './transitions.js';\n\n/** @returns {void} */\nexport function bind(component, name, callback) {\n\tconst index = component.$$.props[name];\n\tif (index !== undefined) {\n\t\tcomponent.$$.bound[index] = callback;\n\t\tcallback(component.$$.ctx[index]);\n\t}\n}\n\n/** @returns {void} */\nexport function create_component(block) {\n\tblock && block.c();\n}\n\n/** @returns {void} */\nexport function claim_component(block, parent_nodes) {\n\tblock && block.l(parent_nodes);\n}\n\n/** @returns {void} */\nexport function mount_component(component, target, anchor) {\n\tconst { fragment, after_update } = component.$$;\n\tfragment && fragment.m(target, anchor);\n\t// onMount happens before the initial afterUpdate\n\tadd_render_callback(() => {\n\t\tconst new_on_destroy = component.$$.on_mount.map(run).filter(is_function);\n\t\t// if the component was destroyed immediately\n\t\t// it will update the `$$.on_destroy` reference to `null`.\n\t\t// the destructured on_destroy may still reference to the old array\n\t\tif (component.$$.on_destroy) {\n\t\t\tcomponent.$$.on_destroy.push(...new_on_destroy);\n\t\t} else {\n\t\t\t// Edge case - component was destroyed immediately,\n\t\t\t// most likely as a result of a binding initialising\n\t\t\trun_all(new_on_destroy);\n\t\t}\n\t\tcomponent.$$.on_mount = [];\n\t});\n\tafter_update.forEach(add_render_callback);\n}\n\n/** @returns {void} */\nexport function destroy_component(component, detaching) {\n\tconst $$ = component.$$;\n\tif ($$.fragment !== null) {\n\t\tflush_render_callbacks($$.after_update);\n\t\trun_all($$.on_destroy);\n\t\t$$.fragment && $$.fragment.d(detaching);\n\t\t// TODO null out other refs, including component.$$ (but need to\n\t\t// preserve final state?)\n\t\t$$.on_destroy = $$.fragment = null;\n\t\t$$.ctx = [];\n\t}\n}\n\n/** @returns {void} */\nfunction make_dirty(component, i) {\n\tif (component.$$.dirty[0] === -1) {\n\t\tdirty_components.push(component);\n\t\tschedule_update();\n\t\tcomponent.$$.dirty.fill(0);\n\t}\n\tcomponent.$$.dirty[(i / 31) | 0] |= 1 << i % 31;\n}\n\n// TODO: Document the other params\n/**\n * @param {SvelteComponent} component\n * @param {import('./public.js').ComponentConstructorOptions} options\n *\n * @param {import('./utils.js')['not_equal']} not_equal Used to compare props and state values.\n * @param {(target: Element | ShadowRoot) => void} [append_styles] Function that appends styles to the DOM when the component is first initialised.\n * This will be the `add_css` function from the compiled component.\n *\n * @returns {void}\n */\nexport function init(\n\tcomponent,\n\toptions,\n\tinstance,\n\tcreate_fragment,\n\tnot_equal,\n\tprops,\n\tappend_styles = null,\n\tdirty = [-1]\n) {\n\tconst parent_component = current_component;\n\tset_current_component(component);\n\t/** @type {import('./private.js').T$$} */\n\tconst $$ = (component.$$ = {\n\t\tfragment: null,\n\t\tctx: [],\n\t\t// state\n\t\tprops,\n\t\tupdate: noop,\n\t\tnot_equal,\n\t\tbound: blank_object(),\n\t\t// lifecycle\n\t\ton_mount: [],\n\t\ton_destroy: [],\n\t\ton_disconnect: [],\n\t\tbefore_update: [],\n\t\tafter_update: [],\n\t\tcontext: new Map(options.context || (parent_component ? parent_component.$$.context : [])),\n\t\t// everything else\n\t\tcallbacks: blank_object(),\n\t\tdirty,\n\t\tskip_bound: false,\n\t\troot: options.target || parent_component.$$.root\n\t});\n\tappend_styles && append_styles($$.root);\n\tlet ready = false;\n\t$$.ctx = instance\n\t\t? instance(component, options.props || {}, (i, ret, ...rest) => {\n\t\t\t\tconst value = rest.length ? rest[0] : ret;\n\t\t\t\tif ($$.ctx && not_equal($$.ctx[i], ($$.ctx[i] = value))) {\n\t\t\t\t\tif (!$$.skip_bound && $$.bound[i]) $$.bound[i](value);\n\t\t\t\t\tif (ready) make_dirty(component, i);\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t })\n\t\t: [];\n\t$$.update();\n\tready = true;\n\trun_all($$.before_update);\n\t// `false` as a special case of no DOM component\n\t$$.fragment = create_fragment ? create_fragment($$.ctx) : false;\n\tif (options.target) {\n\t\tif (options.hydrate) {\n\t\t\tstart_hydrating();\n\t\t\t// TODO: what is the correct type here?\n\t\t\t// @ts-expect-error\n\t\t\tconst nodes = children(options.target);\n\t\t\t$$.fragment && $$.fragment.l(nodes);\n\t\t\tnodes.forEach(detach);\n\t\t} else {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t$$.fragment && $$.fragment.c();\n\t\t}\n\t\tif (options.intro) transition_in(component.$$.fragment);\n\t\tmount_component(component, options.target, options.anchor);\n\t\tend_hydrating();\n\t\tflush();\n\t}\n\tset_current_component(parent_component);\n}\n\nexport let SvelteElement;\n\nif (typeof HTMLElement === 'function') {\n\tSvelteElement = class extends HTMLElement {\n\t\t/** The Svelte component constructor */\n\t\t$$ctor;\n\t\t/** Slots */\n\t\t$$s;\n\t\t/** The Svelte component instance */\n\t\t$$c;\n\t\t/** Whether or not the custom element is connected */\n\t\t$$cn = false;\n\t\t/** Component props data */\n\t\t$$d = {};\n\t\t/** `true` if currently in the process of reflecting component props back to attributes */\n\t\t$$r = false;\n\t\t/** @type {Record<string, CustomElementPropDefinition>} Props definition (name, reflected, type etc) */\n\t\t$$p_d = {};\n\t\t/** @type {Record<string, Function[]>} Event listeners */\n\t\t$$l = {};\n\t\t/** @type {Map<Function, Function>} Event listener unsubscribe functions */\n\t\t$$l_u = new Map();\n\n\t\tconstructor($$componentCtor, $$slots, use_shadow_dom) {\n\t\t\tsuper();\n\t\t\tthis.$$ctor = $$componentCtor;\n\t\t\tthis.$$s = $$slots;\n\t\t\tif (use_shadow_dom) {\n\t\t\t\tthis.attachShadow({ mode: 'open' });\n\t\t\t}\n\t\t}\n\n\t\taddEventListener(type, listener, options) {\n\t\t\t// We can't determine upfront if the event is a custom event or not, so we have to\n\t\t\t// listen to both. If someone uses a custom event with the same name as a regular\n\t\t\t// browser event, this fires twice - we can't avoid that.\n\t\t\tthis.$$l[type] = this.$$l[type] || [];\n\t\t\tthis.$$l[type].push(listener);\n\t\t\tif (this.$$c) {\n\t\t\t\tconst unsub = this.$$c.$on(type, listener);\n\t\t\t\tthis.$$l_u.set(listener, unsub);\n\t\t\t}\n\t\t\tsuper.addEventListener(type, listener, options);\n\t\t}\n\n\t\tremoveEventListener(type, listener, options) {\n\t\t\tsuper.removeEventListener(type, listener, options);\n\t\t\tif (this.$$c) {\n\t\t\t\tconst unsub = this.$$l_u.get(listener);\n\t\t\t\tif (unsub) {\n\t\t\t\t\tunsub();\n\t\t\t\t\tthis.$$l_u.delete(listener);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.$$l[type]) {\n\t\t\t\tconst idx = this.$$l[type].indexOf(listener);\n\t\t\t\tif (idx >= 0) {\n\t\t\t\t\tthis.$$l[type].splice(idx, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tasync connectedCallback() {\n\t\t\tthis.$$cn = true;\n\t\t\tif (!this.$$c) {\n\t\t\t\t// We wait one tick to let possible child slot elements be created/mounted\n\t\t\t\tawait Promise.resolve();\n\t\t\t\tif (!this.$$cn || this.$$c) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tfunction create_slot(name) {\n\t\t\t\t\treturn () => {\n\t\t\t\t\t\tlet node;\n\t\t\t\t\t\tconst obj = {\n\t\t\t\t\t\t\tc: function create() {\n\t\t\t\t\t\t\t\tnode = element('slot');\n\t\t\t\t\t\t\t\tif (name !== 'default') {\n\t\t\t\t\t\t\t\t\tattr(node, 'name', name);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * @param {HTMLElement} target\n\t\t\t\t\t\t\t * @param {HTMLElement} [anchor]\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tm: function mount(target, anchor) {\n\t\t\t\t\t\t\t\tinsert(target, node, anchor);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\td: function destroy(detaching) {\n\t\t\t\t\t\t\t\tif (detaching) {\n\t\t\t\t\t\t\t\t\tdetach(node);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t\treturn obj;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst $$slots = {};\n\t\t\t\tconst existing_slots = get_custom_elements_slots(this);\n\t\t\t\tfor (const name of this.$$s) {\n\t\t\t\t\tif (name in existing_slots) {\n\t\t\t\t\t\t$$slots[name] = [create_slot(name)];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (const attribute of this.attributes) {\n\t\t\t\t\t// this.$$data takes precedence over this.attributes\n\t\t\t\t\tconst name = this.$$g_p(attribute.name);\n\t\t\t\t\tif (!(name in this.$$d)) {\n\t\t\t\t\t\tthis.$$d[name] = get_custom_element_value(name, attribute.value, this.$$p_d, 'toProp');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Port over props that were set programmatically before ce was initialized\n\t\t\t\tfor (const key in this.$$p_d) {\n\t\t\t\t\tif (!(key in this.$$d) && this[key] !== undefined) {\n\t\t\t\t\t\tthis.$$d[key] = this[key]; // don't transform, these were set through JavaScript\n\t\t\t\t\t\tdelete this[key]; // remove the property that shadows the getter/setter\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.$$c = new this.$$ctor({\n\t\t\t\t\ttarget: this.shadowRoot || this,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\t...this.$$d,\n\t\t\t\t\t\t$$slots,\n\t\t\t\t\t\t$$scope: {\n\t\t\t\t\t\t\tctx: []\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// Reflect component props as attributes\n\t\t\t\tconst reflect_attributes = () => {\n\t\t\t\t\tthis.$$r = true;\n\t\t\t\t\tfor (const key in this.$$p_d) {\n\t\t\t\t\t\tthis.$$d[key] = this.$$c.$$.ctx[this.$$c.$$.props[key]];\n\t\t\t\t\t\tif (this.$$p_d[key].reflect) {\n\t\t\t\t\t\t\tconst attribute_value = get_custom_element_value(\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tthis.$$d[key],\n\t\t\t\t\t\t\t\tthis.$$p_d,\n\t\t\t\t\t\t\t\t'toAttribute'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (attribute_value == null) {\n\t\t\t\t\t\t\t\tthis.removeAttribute(this.$$p_d[key].attribute || key);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.setAttribute(this.$$p_d[key].attribute || key, attribute_value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.$$r = false;\n\t\t\t\t};\n\t\t\t\tthis.$$c.$$.after_update.push(reflect_attributes);\n\t\t\t\treflect_attributes(); // once initially because after_update is added too late for first render\n\n\t\t\t\tfor (const type in this.$$l) {\n\t\t\t\t\tfor (const listener of this.$$l[type]) {\n\t\t\t\t\t\tconst unsub = this.$$c.$on(type, listener);\n\t\t\t\t\t\tthis.$$l_u.set(listener, unsub);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.$$l = {};\n\t\t\t}\n\t\t}\n\n\t\t// We don't need this when working within Svelte code, but for compatibility of people using this outside of Svelte\n\t\t// and setting attributes through setAttribute etc, this is helpful\n\t\tattributeChangedCallback(attr, _oldValue, newValue) {\n\t\t\tif (this.$$r) return;\n\t\t\tattr = this.$$g_p(attr);\n\t\t\tthis.$$d[attr] = get_custom_element_value(attr, newValue, this.$$p_d, 'toProp');\n\t\t\tthis.$$c?.$set({ [attr]: this.$$d[attr] });\n\t\t}\n\n\t\tdisconnectedCallback() {\n\t\t\tthis.$$cn = false;\n\t\t\t// In a microtask, because this could be a move within the DOM\n\t\t\tPromise.resolve().then(() => {\n\t\t\t\tif (!this.$$cn && this.$$c) {\n\t\t\t\t\tthis.$$c.$destroy();\n\t\t\t\t\tthis.$$c = undefined;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t$$g_p(attribute_name) {\n\t\t\treturn (\n\t\t\t\tObject.keys(this.$$p_d).find(\n\t\t\t\t\t(key) =>\n\t\t\t\t\t\tthis.$$p_d[key].attribute === attribute_name ||\n\t\t\t\t\t\t(!this.$$p_d[key].attribute && key.toLowerCase() === attribute_name)\n\t\t\t\t) || attribute_name\n\t\t\t);\n\t\t}\n\t};\n}\n\n/**\n * @param {string} prop\n * @param {any} value\n * @param {Record<string, CustomElementPropDefinition>} props_definition\n * @param {'toAttribute' | 'toProp'} [transform]\n */\nfunction get_custom_element_value(prop, value, props_definition, transform) {\n\tconst type = props_definition[prop]?.type;\n\tvalue = type === 'Boolean' && typeof value !== 'boolean' ? value != null : value;\n\tif (!transform || !props_definition[prop]) {\n\t\treturn value;\n\t} else if (transform === 'toAttribute') {\n\t\tswitch (type) {\n\t\t\tcase 'Object':\n\t\t\tcase 'Array':\n\t\t\t\treturn value == null ? null : JSON.stringify(value);\n\t\t\tcase 'Boolean':\n\t\t\t\treturn value ? '' : null;\n\t\t\tcase 'Number':\n\t\t\t\treturn value == null ? null : value;\n\t\t\tdefault:\n\t\t\t\treturn value;\n\t\t}\n\t} else {\n\t\tswitch (type) {\n\t\t\tcase 'Object':\n\t\t\tcase 'Array':\n\t\t\t\treturn value && JSON.parse(value);\n\t\t\tcase 'Boolean':\n\t\t\t\treturn value; // conversion already handled above\n\t\t\tcase 'Number':\n\t\t\t\treturn value != null ? +value : value;\n\t\t\tdefault:\n\t\t\t\treturn value;\n\t\t}\n\t}\n}\n\n/**\n * @internal\n *\n * Turn a Svelte component into a custom element.\n * @param {import('./public.js').ComponentType} Component A Svelte component constructor\n * @param {Record<string, CustomElementPropDefinition>} props_definition The props to observe\n * @param {string[]} slots The slots to create\n * @param {string[]} accessors Other accessors besides the ones for props the component has\n * @param {boolean} use_shadow_dom Whether to use shadow DOM\n * @param {(ce: new () => HTMLElement) => new () => HTMLElement} [extend]\n */\nexport function create_custom_element(\n\tComponent,\n\tprops_definition,\n\tslots,\n\taccessors,\n\tuse_shadow_dom,\n\textend\n) {\n\tlet Class = class extends SvelteElement {\n\t\tconstructor() {\n\t\t\tsuper(Component, slots, use_shadow_dom);\n\t\t\tthis.$$p_d = props_definition;\n\t\t}\n\t\tstatic get observedAttributes() {\n\t\t\treturn Object.keys(props_definition).map((key) =>\n\t\t\t\t(props_definition[key].attribute || key).toLowerCase()\n\t\t\t);\n\t\t}\n\t};\n\tObject.keys(props_definition).forEach((prop) => {\n\t\tObject.defineProperty(Class.prototype, prop, {\n\t\t\tget() {\n\t\t\t\treturn this.$$c && prop in this.$$c ? this.$$c[prop] : this.$$d[prop];\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tvalue = get_custom_element_value(prop, value, props_definition);\n\t\t\t\tthis.$$d[prop] = value;\n\t\t\t\tthis.$$c?.$set({ [prop]: value });\n\t\t\t}\n\t\t});\n\t});\n\taccessors.forEach((accessor) => {\n\t\tObject.defineProperty(Class.prototype, accessor, {\n\t\t\tget() {\n\t\t\t\treturn this.$$c?.[accessor];\n\t\t\t}\n\t\t});\n\t});\n\tif (extend) {\n\t\t// @ts-expect-error - assigning here is fine\n\t\tClass = extend(Class);\n\t}\n\tComponent.element = /** @type {any} */ (Class);\n\treturn Class;\n}\n\n/**\n * Base class for Svelte components. Used when dev=false.\n *\n * @template {Record<string, any>} [Props=any]\n * @template {Record<string, any>} [Events=any]\n */\nexport class SvelteComponent {\n\t/**\n\t * ### PRIVATE API\n\t *\n\t * Do not use, may change at any time\n\t *\n\t * @type {any}\n\t */\n\t$$ = undefined;\n\t/**\n\t * ### PRIVATE API\n\t *\n\t * Do not use, may change at any time\n\t *\n\t * @type {any}\n\t */\n\t$$set = undefined;\n\n\t/** @returns {void} */\n\t$destroy() {\n\t\tdestroy_component(this, 1);\n\t\tthis.$destroy = noop;\n\t}\n\n\t/**\n\t * @template {Extract<keyof Events, string>} K\n\t * @param {K} type\n\t * @param {((e: Events[K]) => void) | null | undefined} callback\n\t * @returns {() => void}\n\t */\n\t$on(type, callback) {\n\t\tif (!is_function(callback)) {\n\t\t\treturn noop;\n\t\t}\n\t\tconst callbacks = this.$$.callbacks[type] || (this.$$.callbacks[type] = []);\n\t\tcallbacks.push(callback);\n\t\treturn () => {\n\t\t\tconst index = callbacks.indexOf(callback);\n\t\t\tif (index !== -1) callbacks.splice(index, 1);\n\t\t};\n\t}\n\n\t/**\n\t * @param {Partial<Props>} props\n\t * @returns {void}\n\t */\n\t$set(props) {\n\t\tif (this.$$set && !is_empty(props)) {\n\t\t\tthis.$$.skip_bound = true;\n\t\t\tthis.$$set(props);\n\t\t\tthis.$$.skip_bound = false;\n\t\t}\n\t}\n}\n\n/**\n * @typedef {Object} CustomElementPropDefinition\n * @property {string} [attribute]\n * @property {boolean} [reflect]\n * @property {'String'|'Boolean'|'Number'|'Array'|'Object'} [type]\n */\n","// generated during release, do not modify\n\n/**\n * The current version, as set in package.json.\n *\n * https://svelte.dev/docs/svelte-compiler#svelte-version\n * @type {string}\n */\nexport const VERSION = '4.2.20';\nexport const PUBLIC_VERSION = '4';\n","import { PUBLIC_VERSION } from '../../../shared/version.js';\n\nif (typeof window !== 'undefined')\n\t// @ts-ignore\n\t(window.__svelte || (window.__svelte = { v: new Set() })).v.add(PUBLIC_VERSION);\n","/*\nAdapted from https://github.com/mattdesl\nDistributed under MIT License https://github.com/mattdesl/eases/blob/master/LICENSE.md\n*/\nexport { identity as linear } from '../internal/index.js';\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function backInOut(t) {\n\tconst s = 1.70158 * 1.525;\n\tif ((t *= 2) < 1) return 0.5 * (t * t * ((s + 1) * t - s));\n\treturn 0.5 * ((t -= 2) * t * ((s + 1) * t + s) + 2);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function backIn(t) {\n\tconst s = 1.70158;\n\treturn t * t * ((s + 1) * t - s);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function backOut(t) {\n\tconst s = 1.70158;\n\treturn --t * t * ((s + 1) * t + s) + 1;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function bounceOut(t) {\n\tconst a = 4.0 / 11.0;\n\tconst b = 8.0 / 11.0;\n\tconst c = 9.0 / 10.0;\n\tconst ca = 4356.0 / 361.0;\n\tconst cb = 35442.0 / 1805.0;\n\tconst cc = 16061.0 / 1805.0;\n\tconst t2 = t * t;\n\treturn t < a\n\t\t? 7.5625 * t2\n\t\t: t < b\n\t\t? 9.075 * t2 - 9.9 * t + 3.4\n\t\t: t < c\n\t\t? ca * t2 - cb * t + cc\n\t\t: 10.8 * t * t - 20.52 * t + 10.72;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function bounceInOut(t) {\n\treturn t < 0.5 ? 0.5 * (1.0 - bounceOut(1.0 - t * 2.0)) : 0.5 * bounceOut(t * 2.0 - 1.0) + 0.5;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function bounceIn(t) {\n\treturn 1.0 - bounceOut(1.0 - t);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function circInOut(t) {\n\tif ((t *= 2) < 1) return -0.5 * (Math.sqrt(1 - t * t) - 1);\n\treturn 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function circIn(t) {\n\treturn 1.0 - Math.sqrt(1.0 - t * t);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function circOut(t) {\n\treturn Math.sqrt(1 - --t * t);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function cubicInOut(t) {\n\treturn t < 0.5 ? 4.0 * t * t * t : 0.5 * Math.pow(2.0 * t - 2.0, 3.0) + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function cubicIn(t) {\n\treturn t * t * t;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function cubicOut(t) {\n\tconst f = t - 1.0;\n\treturn f * f * f + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function elasticInOut(t) {\n\treturn t < 0.5\n\t\t? 0.5 * Math.sin(((+13.0 * Math.PI) / 2) * 2.0 * t) * Math.pow(2.0, 10.0 * (2.0 * t - 1.0))\n\t\t: 0.5 *\n\t\t\t\tMath.sin(((-13.0 * Math.PI) / 2) * (2.0 * t - 1.0 + 1.0)) *\n\t\t\t\tMath.pow(2.0, -10.0 * (2.0 * t - 1.0)) +\n\t\t\t\t1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function elasticIn(t) {\n\treturn Math.sin((13.0 * t * Math.PI) / 2) * Math.pow(2.0, 10.0 * (t - 1.0));\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function elasticOut(t) {\n\treturn Math.sin((-13.0 * (t + 1.0) * Math.PI) / 2) * Math.pow(2.0, -10.0 * t) + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function expoInOut(t) {\n\treturn t === 0.0 || t === 1.0\n\t\t? t\n\t\t: t < 0.5\n\t\t? +0.5 * Math.pow(2.0, 20.0 * t - 10.0)\n\t\t: -0.5 * Math.pow(2.0, 10.0 - t * 20.0) + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function expoIn(t) {\n\treturn t === 0.0 ? t : Math.pow(2.0, 10.0 * (t - 1.0));\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function expoOut(t) {\n\treturn t === 1.0 ? t : 1.0 - Math.pow(2.0, -10.0 * t);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quadInOut(t) {\n\tt /= 0.5;\n\tif (t < 1) return 0.5 * t * t;\n\tt--;\n\treturn -0.5 * (t * (t - 2) - 1);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quadIn(t) {\n\treturn t * t;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quadOut(t) {\n\treturn -t * (t - 2.0);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quartInOut(t) {\n\treturn t < 0.5 ? +8.0 * Math.pow(t, 4.0) : -8.0 * Math.pow(t - 1.0, 4.0) + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quartIn(t) {\n\treturn Math.pow(t, 4.0);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quartOut(t) {\n\treturn Math.pow(t - 1.0, 3.0) * (1.0 - t) + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quintInOut(t) {\n\tif ((t *= 2) < 1) return 0.5 * t * t * t * t * t;\n\treturn 0.5 * ((t -= 2) * t * t * t * t + 2);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quintIn(t) {\n\treturn t * t * t * t * t;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quintOut(t) {\n\treturn --t * t * t * t * t + 1;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function sineInOut(t) {\n\treturn -0.5 * (Math.cos(Math.PI * t) - 1);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function sineIn(t) {\n\tconst v = Math.cos(t * Math.PI * 0.5);\n\tif (Math.abs(v) < 1e-14) return 1;\n\telse return 1 - v;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function sineOut(t) {\n\treturn Math.sin((t * Math.PI) / 2);\n}\n","import { cubicOut, cubicInOut, linear } from '../easing/index.js';\nimport { assign, split_css_unit, is_function } from '../internal/index.js';\n\n/**\n * Animates a `blur` filter alongside an element's opacity.\n *\n * https://svelte.dev/docs/svelte-transition#blur\n * @param {Element} node\n * @param {import('./public').BlurParams} [params]\n * @returns {import('./public').TransitionConfig}\n */\nexport function blur(\n\tnode,\n\t{ delay = 0, duration = 400, easing = cubicInOut, amount = 5, opacity = 0 } = {}\n) {\n\tconst style = getComputedStyle(node);\n\tconst target_opacity = +style.opacity;\n\tconst f = style.filter === 'none' ? '' : style.filter;\n\tconst od = target_opacity * (1 - opacity);\n\tconst [value, unit] = split_css_unit(amount);\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (_t, u) => `opacity: ${target_opacity - od * u}; filter: ${f} blur(${u * value}${unit});`\n\t};\n}\n\n/**\n * Animates the opacity of an element from 0 to the current opacity for `in` transitions and from the current opacity to 0 for `out` transitions.\n *\n * https://svelte.dev/docs/svelte-transition#fade\n * @param {Element} node\n * @param {import('./public').FadeParams} [params]\n * @returns {import('./public').TransitionConfig}\n */\nexport function fade(node, { delay = 0, duration = 400, easing = linear } = {}) {\n\tconst o = +getComputedStyle(node).opacity;\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (t) => `opacity: ${t * o}`\n\t};\n}\n\n/**\n * Animates the x and y positions and the opacity of an element. `in` transitions animate from the provided values, passed as parameters to the element's default values. `out` transitions animate from the element's default values to the provided values.\n *\n * https://svelte.dev/docs/svelte-transition#fly\n * @param {Element} node\n * @param {import('./public').FlyParams} [params]\n * @returns {import('./public').TransitionConfig}\n */\nexport function fly(\n\tnode,\n\t{ delay = 0, duration = 400, easing = cubicOut, x = 0, y = 0, opacity = 0 } = {}\n) {\n\tconst style = getComputedStyle(node);\n\tconst target_opacity = +style.opacity;\n\tconst transform = style.transform === 'none' ? '' : style.transform;\n\tconst od = target_opacity * (1 - opacity);\n\tconst [xValue, xUnit] = split_css_unit(x);\n\tconst [yValue, yUnit] = split_css_unit(y);\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (t, u) => `\n\t\t\ttransform: ${transform} translate(${(1 - t) * xValue}${xUnit}, ${(1 - t) * yValue}${yUnit});\n\t\t\topacity: ${target_opacity - od * u}`\n\t};\n}\n\n/**\n * Slides an element in and out.\n *\n * https://svelte.dev/docs/svelte-transition#slide\n * @param {Element} node\n * @param {import('./public').SlideParams} [params]\n * @returns {import('./public').TransitionConfig}\n */\nexport function slide(node, { delay = 0, duration = 400, easing = cubicOut, axis = 'y' } = {}) {\n\tconst style = getComputedStyle(node);\n\tconst opacity = +style.opacity;\n\tconst primary_property = axis === 'y' ? 'height' : 'width';\n\tconst primary_property_value = parseFloat(style[primary_property]);\n\tconst secondary_properties = axis === 'y' ? ['top', 'bottom'] : ['left', 'right'];\n\tconst capitalized_secondary_properties = secondary_properties.map(\n\t\t(e) => `${e[0].toUpperCase()}${e.slice(1)}`\n\t);\n\tconst padding_start_value = parseFloat(style[`padding${capitalized_secondary_properties[0]}`]);\n\tconst padding_end_value = parseFloat(style[`padding${capitalized_secondary_properties[1]}`]);\n\tconst margin_start_value = parseFloat(style[`margin${capitalized_secondary_properties[0]}`]);\n\tconst margin_end_value = parseFloat(style[`margin${capitalized_secondary_properties[1]}`]);\n\tconst border_width_start_value = parseFloat(\n\t\tstyle[`border${capitalized_secondary_properties[0]}Width`]\n\t);\n\tconst border_width_end_value = parseFloat(\n\t\tstyle[`border${capitalized_secondary_properties[1]}Width`]\n\t);\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (t) =>\n\t\t\t'overflow: hidden;' +\n\t\t\t`opacity: ${Math.min(t * 20, 1) * opacity};` +\n\t\t\t`${primary_property}: ${t * primary_property_value}px;` +\n\t\t\t`padding-${secondary_properties[0]}: ${t * padding_start_value}px;` +\n\t\t\t`padding-${secondary_properties[1]}: ${t * padding_end_value}px;` +\n\t\t\t`margin-${secondary_properties[0]}: ${t * margin_start_value}px;` +\n\t\t\t`margin-${secondary_properties[1]}: ${t * margin_end_value}px;` +\n\t\t\t`border-${secondary_properties[0]}-width: ${t * border_width_start_value}px;` +\n\t\t\t`border-${secondary_properties[1]}-width: ${t * border_width_end_value}px;`\n\t};\n}\n\n/**\n * Animates the opacity and scale of an element. `in` transitions animate from an element's current (default) values to the provided values, passed as parameters. `out` transitions animate from the provided values to an element's default values.\n *\n * https://svelte.dev/docs/svelte-transition#scale\n * @param {Element} node\n * @param {import('./public').ScaleParams} [params]\n * @returns {import('./public').TransitionConfig}\n */\nexport function scale(\n\tnode,\n\t{ delay = 0, duration = 400, easing = cubicOut, start = 0, opacity = 0 } = {}\n) {\n\tconst style = getComputedStyle(node);\n\tconst target_opacity = +style.opacity;\n\tconst transform = style.transform === 'none' ? '' : style.transform;\n\tconst sd = 1 - start;\n\tconst od = target_opacity * (1 - opacity);\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (_t, u) => `\n\t\t\ttransform: ${transform} scale(${1 - sd * u});\n\t\t\topacity: ${target_opacity - od * u}\n\t\t`\n\t};\n}\n\n/**\n * Animates the stroke of an SVG element, like a snake in a tube. `in` transitions begin with the path invisible and draw the path to the screen over time. `out` transitions start in a visible state and gradually erase the path. `draw` only works with elements that have a `getTotalLength` method, like `<path>` and `<polyline>`.\n *\n * https://svelte.dev/docs/svelte-transition#draw\n * @param {SVGElement & { getTotalLength(): number }} node\n * @param {import('./public').DrawParams} [params]\n * @returns {import('./public').TransitionConfig}\n */\nexport function draw(node, { delay = 0, speed, duration, easing = cubicInOut } = {}) {\n\tlet len = node.getTotalLength();\n\tconst style = getComputedStyle(node);\n\tif (style.strokeLinecap !== 'butt') {\n\t\tlen += parseInt(style.strokeWidth);\n\t}\n\tif (duration === undefined) {\n\t\tif (speed === undefined) {\n\t\t\tduration = 800;\n\t\t} else {\n\t\t\tduration = len / speed;\n\t\t}\n\t} else if (typeof duration === 'function') {\n\t\tduration = duration(len);\n\t}\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (_, u) => `\n\t\t\tstroke-dasharray: ${len};\n\t\t\tstroke-dashoffset: ${u * len};\n\t\t`\n\t};\n}\n\n/**\n * The `crossfade` function creates a pair of [transitions](https://svelte.dev/docs#template-syntax-element-directives-transition-fn) called `send` and `receive`. When an element is 'sent', it looks for a corresponding element being 'received', and generates a transition that transforms the element to its counterpart's position and fades it out. When an element is 'received', the reverse happens. If there is no counterpart, the `fallback` transition is used.\n *\n * https://svelte.dev/docs/svelte-transition#crossfade\n * @param {import('./public').CrossfadeParams & {\n * \tfallback?: (node: Element, params: import('./public').CrossfadeParams, intro: boolean) => import('./public').TransitionConfig;\n * }} params\n * @returns {[(node: any, params: import('./public').CrossfadeParams & { key: any; }) => () => import('./public').TransitionConfig, (node: any, params: import('./public').CrossfadeParams & { key: any; }) => () => import('./public').TransitionConfig]}\n */\nexport function crossfade({ fallback, ...defaults }) {\n\t/** @type {Map<any, Element>} */\n\tconst to_receive = new Map();\n\t/** @type {Map<any, Element>} */\n\tconst to_send = new Map();\n\t/**\n\t * @param {Element} from_node\n\t * @param {Element} node\n\t * @param {import('./public').CrossfadeParams} params\n\t * @returns {import('./public').TransitionConfig}\n\t */\n\tfunction crossfade(from_node, node, params) {\n\t\tconst {\n\t\t\tdelay = 0,\n\t\t\tduration = (d) => Math.sqrt(d) * 30,\n\t\t\teasing = cubicOut\n\t\t} = assign(assign({}, defaults), params);\n\t\tconst from = from_node.getBoundingClientRect();\n\t\tconst to = node.getBoundingClientRect();\n\t\tconst dx = from.left - to.left;\n\t\tconst dy = from.top - to.top;\n\t\tconst dw = from.width / to.width;\n\t\tconst dh = from.height / to.height;\n\t\tconst d = Math.sqrt(dx * dx + dy * dy);\n\t\tconst style = getComputedStyle(node);\n\t\tconst transform = style.transform === 'none' ? '' : style.transform;\n\t\tconst opacity = +style.opacity;\n\t\treturn {\n\t\t\tdelay,\n\t\t\tduration: is_function(duration) ? duration(d) : duration,\n\t\t\teasing,\n\t\t\tcss: (t, u) => `\n\t\t\t\topacity: ${t * opacity};\n\t\t\t\ttransform-origin: top left;\n\t\t\t\ttransform: ${transform} translate(${u * dx}px,${u * dy}px) scale(${t + (1 - t) * dw}, ${\n\t\t\t\tt + (1 - t) * dh\n\t\t\t});\n\t\t\t`\n\t\t};\n\t}\n\n\t/**\n\t * @param {Map<any, Element>} items\n\t * @param {Map<any, Element>} counterparts\n\t * @param {boolean} intro\n\t * @returns {(node: any, params: import('./public').CrossfadeParams & { key: any; }) => () => import('./public').TransitionConfig}\n\t */\n\tfunction transition(items, counterparts, intro) {\n\t\treturn (node, params) => {\n\t\t\titems.set(params.key, node);\n\t\t\treturn () => {\n\t\t\t\tif (counterparts.has(params.key)) {\n\t\t\t\t\tconst other_node = counterparts.get(params.key);\n\t\t\t\t\tcounterparts.delete(params.key);\n\t\t\t\t\treturn crossfade(other_node, node, params);\n\t\t\t\t}\n\t\t\t\t// if the node is disappearing altogether\n\t\t\t\t// (i.e. wasn't claimed by the other list)\n\t\t\t\t// then we need to supply an outro\n\t\t\t\titems.delete(params.key);\n\t\t\t\treturn fallback && fallback(node, params, intro);\n\t\t\t};\n\t\t};\n\t}\n\treturn [transition(to_send, to_receive, false), transition(to_receive, to_send, true)];\n}\n","import { cubicOut } from '../easing/index.js';\nimport { is_function } from '../internal/index.js';\n\n/**\n * The flip function calculates the start and end position of an element and animates between them, translating the x and y values.\n * `flip` stands for [First, Last, Invert, Play](https://aerotwist.com/blog/flip-your-animations/).\n *\n * https://svelte.dev/docs/svelte-animate#flip\n * @param {Element} node\n * @param {{ from: DOMRect; to: DOMRect }} fromTo\n * @param {import('./public.js').FlipParams} params\n * @returns {import('./public.js').AnimationConfig}\n */\nexport function flip(node, { from, to }, params = {}) {\n\tconst style = getComputedStyle(node);\n\tconst transform = style.transform === 'none' ? '' : style.transform;\n\tconst [ox, oy] = style.transformOrigin.split(' ').map(parseFloat);\n\tconst dx = from.left + (from.width * ox) / to.width - (to.left + ox);\n\tconst dy = from.top + (from.height * oy) / to.height - (to.top + oy);\n\tconst { delay = 0, duration = (d) => Math.sqrt(d) * 120, easing = cubicOut } = params;\n\treturn {\n\t\tdelay,\n\t\tduration: is_function(duration) ? duration(Math.sqrt(dx * dx + dy * dy)) : duration,\n\t\teasing,\n\t\tcss: (t, u) => {\n\t\t\tconst x = u * dx;\n\t\t\tconst y = u * dy;\n\t\t\tconst sx = t + (u * from.width) / to.width;\n\t\t\tconst sy = t + (u * from.height) / to.height;\n\t\t\treturn `transform: ${transform} translate(${x}px, ${y}px) scale(${sx}, ${sy});`;\n\t\t}\n\t};\n}\n","import {\n\trun_all,\n\tsubscribe,\n\tnoop,\n\tsafe_not_equal,\n\tis_function,\n\tget_store_value\n} from '../internal/index.js';\n\nconst subscriber_queue = [];\n\n/**\n * Creates a `Readable` store that allows reading by subscription.\n *\n * https://svelte.dev/docs/svelte-store#readable\n * @template T\n * @param {T} [value] initial value\n * @param {import('./public.js').StartStopNotifier<T>} [start]\n * @returns {import('./public.js').Readable<T>}\n */\nexport function readable(value, start) {\n\treturn {\n\t\tsubscribe: writable(value, start).subscribe\n\t};\n}\n\n/**\n * Create a `Writable` store that allows both updating and reading by subscription.\n *\n * https://svelte.dev/docs/svelte-store#writable\n * @template T\n * @param {T} [value] initial value\n * @param {import('./public.js').StartStopNotifier<T>} [start]\n * @returns {import('./public.js').Writable<T>}\n */\nexport function writable(value, start = noop) {\n\t/** @type {import('./public.js').Unsubscriber} */\n\tlet stop;\n\t/** @type {Set<import('./private.js').SubscribeInvalidateTuple<T>>} */\n\tconst subscribers = new Set();\n\t/** @param {T} new_value\n\t * @returns {void}\n\t */\n\tfunction set(new_value) {\n\t\tif (safe_not_equal(value, new_value)) {\n\t\t\tvalue = new_value;\n\t\t\tif (stop) {\n\t\t\t\t// store is ready\n\t\t\t\tconst run_queue = !subscriber_queue.length;\n\t\t\t\tfor (const subscriber of subscribers) {\n\t\t\t\t\tsubscriber[1]();\n\t\t\t\t\tsubscriber_queue.push(subscriber, value);\n\t\t\t\t}\n\t\t\t\tif (run_queue) {\n\t\t\t\t\tfor (let i = 0; i < subscriber_queue.length; i += 2) {\n\t\t\t\t\t\tsubscriber_queue[i][0](subscriber_queue[i + 1]);\n\t\t\t\t\t}\n\t\t\t\t\tsubscriber_queue.length = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {import('./public.js').Updater<T>} fn\n\t * @returns {void}\n\t */\n\tfunction update(fn) {\n\t\tset(fn(value));\n\t}\n\n\t/**\n\t * @param {import('./public.js').Subscriber<T>} run\n\t * @param {import('./private.js').Invalidator<T>} [invalidate]\n\t * @returns {import('./public.js').Unsubscriber}\n\t */\n\tfunction subscribe(run, invalidate = noop) {\n\t\t/** @type {import('./private.js').SubscribeInvalidateTuple<T>} */\n\t\tconst subscriber = [run, invalidate];\n\t\tsubscribers.add(subscriber);\n\t\tif (subscribers.size === 1) {\n\t\t\tstop = start(set, update) || noop;\n\t\t}\n\t\trun(value);\n\t\treturn () => {\n\t\t\tsubscribers.delete(subscriber);\n\t\t\tif (subscribers.size === 0 && stop) {\n\t\t\t\tstop();\n\t\t\t\tstop = null;\n\t\t\t}\n\t\t};\n\t}\n\treturn { set, update, subscribe };\n}\n\n/**\n * Derived value store by synchronizing one or more readable stores and\n * applying an aggregation function over its input values.\n *\n * https://svelte.dev/docs/svelte-store#derived\n * @template {import('./private.js').Stores} S\n * @template T\n * @overload\n * @param {S} stores - input stores\n * @param {(values: import('./private.js').StoresValues<S>, set: (value: T) => void, update: (fn: import('./public.js').Updater<T>) => void) => import('./public.js').Unsubscriber | void} fn - function callback that aggregates the values\n * @param {T} [initial_value] - initial value\n * @returns {import('./public.js').Readable<T>}\n */\n\n/**\n * Derived value store by synchronizing one or more readable stores and\n * applying an aggregation function over its input values.\n *\n * https://svelte.dev/docs/svelte-store#derived\n * @template {import('./private.js').Stores} S\n * @template T\n * @overload\n * @param {S} stores - input stores\n * @param {(values: import('./private.js').StoresValues<S>) => T} fn - function callback that aggregates the values\n * @param {T} [initial_value] - initial value\n * @returns {import('./public.js').Readable<T>}\n */\n\n/**\n * @template {import('./private.js').Stores} S\n * @template T\n * @param {S} stores\n * @param {Function} fn\n * @param {T} [initial_value]\n * @returns {import('./public.js').Readable<T>}\n */\nexport function derived(stores, fn, initial_value) {\n\tconst single = !Array.isArray(stores);\n\t/** @type {Array<import('./public.js').Readable<any>>} */\n\tconst stores_array = single ? [stores] : stores;\n\tif (!stores_array.every(Boolean)) {\n\t\tthrow new Error('derived() expects stores as input, got a falsy value');\n\t}\n\tconst auto = fn.length < 2;\n\treturn readable(initial_value, (set, update) => {\n\t\tlet started = false;\n\t\tconst values = [];\n\t\tlet pending = 0;\n\t\tlet cleanup = noop;\n\t\tconst sync = () => {\n\t\t\tif (pending) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcleanup();\n\t\t\tconst result = fn(single ? values[0] : values, set, update);\n\t\t\tif (auto) {\n\t\t\t\tset(result);\n\t\t\t} else {\n\t\t\t\tcleanup = is_function(result) ? result : noop;\n\t\t\t}\n\t\t};\n\t\tconst unsubscribers = stores_array.map((store, i) =>\n\t\t\tsubscribe(\n\t\t\t\tstore,\n\t\t\t\t(value) => {\n\t\t\t\t\tvalues[i] = value;\n\t\t\t\t\tpending &= ~(1 << i);\n\t\t\t\t\tif (started) {\n\t\t\t\t\t\tsync();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tpending |= 1 << i;\n\t\t\t\t}\n\t\t\t)\n\t\t);\n\t\tstarted = true;\n\t\tsync();\n\t\treturn function stop() {\n\t\t\trun_all(unsubscribers);\n\t\t\tcleanup();\n\t\t\t// We need to set this to false because callbacks can still happen despite having unsubscribed:\n\t\t\t// Callbacks might already be placed in the queue which doesn't know it should no longer\n\t\t\t// invoke this derived store.\n\t\t\tstarted = false;\n\t\t};\n\t});\n}\n\n/**\n * Takes a store and returns a new one derived from the old one that is readable.\n *\n * https://svelte.dev/docs/svelte-store#readonly\n * @template T\n * @param {import('./public.js').Readable<T>} store - store to make readonly\n * @returns {import('./public.js').Readable<T>}\n */\nexport function readonly(store) {\n\treturn {\n\t\tsubscribe: store.subscribe.bind(store)\n\t};\n}\n\nexport { get_store_value as get };\n","import { writable } from 'svelte/store'\n\nconst defaults = {\n duration: 4000,\n initial: 1,\n next: 0,\n pausable: false,\n dismissable: true,\n reversed: false,\n intro: { x: 256 }\n}\n\nconst createToast = () => {\n const { subscribe, update } = writable([])\n let count = 0\n const options = {}\n const _obj = (obj) => obj instanceof Object\n const push = (msg, opts = {}) => {\n const param = { target: 'default', ...(_obj(msg) ? msg : { ...opts, msg }) }\n const conf = options[param.target] || {}\n const entry = {\n ...defaults,\n ...conf,\n ...param,\n theme: { ...conf.theme, ...param.theme },\n classes: [...(conf.classes || []), ...(param.classes || [])],\n id: ++count\n }\n update((n) => (entry.reversed ? [...n, entry] : [entry, ...n]))\n return count\n }\n const pop = (id) => {\n update((n) => {\n if (!n.length || id === 0) return []\n if (_obj(id)) return n.filter((i) => id(i))\n const target = id || Math.max(...n.map((i) => i.id))\n return n.filter((i) => i.id !== target)\n })\n }\n const set = (id, opts = {}) => {\n const param = _obj(id) ? { ...id } : { ...opts, id }\n update((n) => {\n const idx = n.findIndex((i) => i.id === param.id)\n if (idx > -1) {\n n[idx] = { ...n[idx], ...param }\n }\n return n\n })\n }\n const _init = (target = 'default', opts = {}) => {\n options[target] = opts\n return options\n }\n return { subscribe, push, pop, set, _init }\n}\n\nexport const toast = createToast()\n","/**\n * @param {any} obj\n * @returns {boolean}\n */\nexport function is_date(obj) {\n\treturn Object.prototype.toString.call(obj) === '[object Date]';\n}\n","import { writable } from '../store/index.js';\nimport { assign, loop, now } from '../internal/index.js';\nimport { linear } from '../easing/index.js';\nimport { is_date } from './utils.js';\n\n/** @returns {(t: any) => any} */\nfunction get_interpolator(a, b) {\n\tif (a === b || a !== a) return () => a;\n\tconst type = typeof a;\n\tif (type !== typeof b || Array.isArray(a) !== Array.isArray(b)) {\n\t\tthrow new Error('Cannot interpolate values of different type');\n\t}\n\tif (Array.isArray(a)) {\n\t\tconst arr = b.map((bi, i) => {\n\t\t\treturn get_interpolator(a[i], bi);\n\t\t});\n\t\treturn (t) => arr.map((fn) => fn(t));\n\t}\n\tif (type === 'object') {\n\t\tif (!a || !b) throw new Error('Object cannot be null');\n\t\tif (is_date(a) && is_date(b)) {\n\t\t\ta = a.getTime();\n\t\t\tb = b.getTime();\n\t\t\tconst delta = b - a;\n\t\t\treturn (t) => new Date(a + t * delta);\n\t\t}\n\t\tconst keys = Object.keys(b);\n\t\tconst interpolators = {};\n\t\tkeys.forEach((key) => {\n\t\t\tinterpolators[key] = get_interpolator(a[key], b[key]);\n\t\t});\n\t\treturn (t) => {\n\t\t\tconst result = {};\n\t\t\tkeys.forEach((key) => {\n\t\t\t\tresult[key] = interpolators[key](t);\n\t\t\t});\n\t\t\treturn result;\n\t\t};\n\t}\n\tif (type === 'number') {\n\t\tconst delta = b - a;\n\t\treturn (t) => a + t * delta;\n\t}\n\tthrow new Error(`Cannot interpolate ${type} values`);\n}\n\n/**\n * A tweened store in Svelte is a special type of store that provides smooth transitions between state values over time.\n *\n * https://svelte.dev/docs/svelte-motion#tweened\n * @template T\n * @param {T} [value]\n * @param {import('./private.js').TweenedOptions<T>} [defaults]\n * @returns {import('./public.js').Tweened<T>}\n */\nexport function tweened(value, defaults = {}) {\n\tconst store = writable(value);\n\t/** @type {import('../internal/private.js').Task} */\n\tlet task;\n\tlet target_value = value;\n\t/**\n\t * @param {T} new_value\n\t * @param {import('./private.js').TweenedOptions<T>} [opts]\n\t */\n\tfunction set(new_value, opts) {\n\t\tif (value == null) {\n\t\t\tstore.set((value = new_value));\n\t\t\treturn Promise.resolve();\n\t\t}\n\t\ttarget_value = new_value;\n\t\tlet previous_task = task;\n\t\tlet started = false;\n\t\tlet {\n\t\t\tdelay = 0,\n\t\t\tduration = 400,\n\t\t\teasing = linear,\n\t\t\tinterpolate = get_interpolator\n\t\t} = assign(assign({}, defaults), opts);\n\t\tif (duration === 0) {\n\t\t\tif (previous_task) {\n\t\t\t\tprevious_task.abort();\n\t\t\t\tprevious_task = null;\n\t\t\t}\n\t\t\tstore.set((value = target_value));\n\t\t\treturn Promise.resolve();\n\t\t}\n\t\tconst start = now() + delay;\n\t\tlet fn;\n\t\ttask = loop((now) => {\n\t\t\tif (now < start) return true;\n\t\t\tif (!started) {\n\t\t\t\tfn = interpolate(value, new_value);\n\t\t\t\tif (typeof duration === 'function') duration = duration(value, new_value);\n\t\t\t\tstarted = true;\n\t\t\t}\n\t\t\tif (previous_task) {\n\t\t\t\tprevious_task.abort();\n\t\t\t\tprevious_task = null;\n\t\t\t}\n\t\t\tconst elapsed = now - start;\n\t\t\tif (elapsed > /** @type {number} */ (duration)) {\n\t\t\t\tstore.set((value = new_value));\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// @ts-ignore\n\t\t\tstore.set((value = fn(easing(elapsed / duration))));\n\t\t\treturn true;\n\t\t});\n\t\treturn task.promise;\n\t}\n\treturn {\n\t\tset,\n\t\tupdate: (fn, opts) => set(fn(target_value, value), opts),\n\t\tsubscribe: store.subscribe\n\t};\n}\n","<script>\nimport { onMount, onDestroy } from 'svelte'\nimport { tweened } from 'svelte/motion'\nimport { linear } from 'svelte/easing'\nimport { toast } from './stores.js'\n\nexport let item\n\nconst progress = tweened(item.initial, { duration: item.duration, easing: linear })\nconst close = () => toast.pop(item.id)\nconst autoclose = () => {\n if ($progress === 1 || $progress === 0) {\n close()\n }\n}\nlet next = item.initial\nlet prev = next\nlet paused = false\n\n$: if (next !== item.next) {\n next = item.next\n prev = $progress\n paused = false\n progress.set(next).then(autoclose)\n}\n\nconst pause = () => {\n if (!paused && $progress !== next) {\n progress.set($progress, { duration: 0 })\n paused = true\n }\n}\n\nconst resume = () => {\n if (paused) {\n const d = item.duration\n const duration = d - d * (($progress - prev) / (next - prev))\n progress.set(next, { duration }).then(autoclose)\n paused = false\n }\n}\n\nlet componentProps = {}\n$: if (item.component) {\n const { props = {}, sendIdTo } = item.component\n componentProps = { ...props, ...(sendIdTo && { [sendIdTo]: item.id }) }\n}\n\nconst check = (prop, kind = 'undefined') => typeof prop === kind\n// `progress` has been renamed to `next`; shim included for backward compatibility, to remove in next major\n$: if (!check(item.progress)) {\n item.next = item.progress\n}\n\nlet unlisten\nconst listen = (d = document) => {\n if (check(d.hidden)) return\n const handler = () => (d.hidden ? pause() : resume())\n const name = 'visibilitychange'\n d.addEventListener(name, handler)\n unlisten = () => d.removeEventListener(name, handler)\n handler()\n}\n\nonMount(listen)\nonDestroy(() => {\n if (check(item.onpop, 'function')) {\n item.onpop(item.id)\n }\n unlisten && unlisten()\n})\n</script>\n\n<div\n class=\"_toastItem\"\n class:pe={item.pausable}\n on:mouseenter={() => {\n if (item.pausable) pause()\n }}\n on:mouseleave={resume}\n>\n <div role=\"status\" class=\"_toastMsg\" class:pe={item.component}>\n {#if item.component}\n <svelte:component this={item.component.src} {...componentProps} />\n {:else}\n {@html item.msg}\n {/if}\n </div>\n {#if item.dismissable}\n <div\n class=\"_toastBtn pe\"\n role=\"button\"\n tabindex=\"0\"\n on:click={close}\n on:keydown={(e) => {\n if (e instanceof KeyboardEvent && ['Enter', ' '].includes(e.key)) close()\n }}\n />\n {/if}\n <progress class=\"_toastBar\" value={$progress} />\n</div>\n\n<style>\n._toastItem {\n width: var(--toastWidth, 16rem);\n height: var(--toastHeight, auto);\n min-height: var(--toastMinHeight, 3.5rem);\n margin: var(--toastMargin, 0 0 0.5rem 0);\n padding: var(--toastPadding, 0);\n background: var(--toastBackground, rgba(66, 66, 66, 0.9));\n color: var(--toastColor, #fff);\n box-shadow: var(\n --toastBoxShadow,\n 0 4px 6px -1px rgba(0, 0, 0, 0.1),\n 0 2px 4px -1px rgba(0, 0, 0, 0.06)\n );\n border: var(--toastBorder, none);\n border-radius: var(--toastBorderRadius, 0.125rem);\n position: relative;\n display: flex;\n flex-direction: row;\n align-items: center;\n overflow: hidden;\n will-change: transform, opacity;\n -webkit-tap-highlight-color: transparent;\n}\n._toastMsg {\n padding: var(--toastMsgPadding, 0.75rem 0.5rem);\n flex: 1 1 0%;\n}\n.pe,\n._toastMsg :global(a) {\n pointer-events: auto;\n}\n._toastBtn {\n width: var(--toastBtnWidth, 2rem);\n height: var(--toastBtnHeight, 100%);\n cursor: pointer;\n outline: none;\n}\n._toastBtn::after {\n content: var(--toastBtnContent, '✕');\n font: var(--toastBtnFont, 1rem sans-serif);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n._toastBar {\n top: var(--toastBarTop, auto);\n right: var(--toastBarRight, auto);\n bottom: var(--toastBarBottom, 0);\n left: var(--toastBarLeft, 0);\n height: var(--toastBarHeight, 6px);\n width: var(--toastBarWidth, 100%);\n position: absolute;\n display: block;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n border: none;\n background: transparent;\n pointer-events: none;\n}\n._toastBar::-webkit-progress-bar {\n background: transparent;\n}\n/* `--toastProgressBackground` renamed to `--toastBarBackground`; override included for backward compatibility */\n._toastBar::-webkit-progress-value {\n background: var(--toastProgressBackground, var(--toastBarBackground, rgba(33, 150, 243, 0.75)));\n}\n._toastBar::-moz-progress-bar {\n background: var(--toastProgressBackground, var(--toastBarBackground, rgba(33, 150, 243, 0.75)));\n}\n</style>\n","<script>\nimport { fade, fly } from 'svelte/transition'\nimport { flip } from 'svelte/animate'\nimport { toast } from './stores.js'\nimport ToastItem from './ToastItem.svelte'\n\nexport let options = {}\nexport let target = 'default'\n\n$: toast._init(target, options)\n\nlet items\n$: items = $toast.filter((i) => i.target === target)\n\nconst getCss = (theme) => Object.keys(theme).reduce((a, c) => `${a}${c}:${theme[c]};`, '')\n</script>\n\n<ul class=\"_toastContainer\">\n {#each items as item (item.id)}\n <li\n class={item.classes.join(' ')}\n in:fly={item.intro}\n out:fade\n animate:flip={{ duration: 200 }}\n style={getCss(item.theme)}\n >\n <ToastItem {item} />\n </li>\n {/each}\n</ul>\n\n<style>\n._toastContainer {\n top: var(--toastContainerTop, 1.5rem);\n right: var(--toastContainerRight, 2rem);\n bottom: var(--toastContainerBottom, auto);\n left: var(--toastContainerLeft, auto);\n position: fixed;\n margin: 0;\n padding: 0;\n list-style-type: none;\n pointer-events: none;\n z-index: var(--toastContainerZIndex, 9999);\n}\n</style>\n","import { toast } from '@zerodevx/svelte-toast';\n\nexport const initConnectionCheck = (t: (namespace: string, key: string) => string) => {\n window.addEventListener('online', () => {\n toast.push(t('general', 'online'));\n });\n window.addEventListener('offline', () => {\n toast.push(t('general', 'offline'));\n });\n};\n","import type { IList } from '../../molecules/List';\nimport type { INavigationButtons } from '../../molecules/NavigationButtons';\nimport type { IDocumentOptions } from '../../organisms/DocumentOptions';\nimport type { CaptureConfigOption } from 'jslib-html5-camera-photo';\nimport type { IFlow } from '../flows';\nimport type { EndUserInfo, FlowsBackendConfig } from '../../../types/AuthBridgeSDK';\nimport { DocumentType } from '../app-state';\n\nexport enum Steps {\n Welcome = 'welcome',\n DocumentSelection = 'document-selection',\n DocumentStart = 'document-start',\n DocumentPhoto = 'document-photo',\n DocumentUpload = 'document-upload',\n CheckDocument = 'check-document',\n DocumentPhotoBackStart = 'document-photo-back-start',\n DocumentPhotoBack = 'document-photo-back',\n CheckDocumentPhotoBack = 'check-document-photo-back',\n SelfieStart = 'selfie-start',\n Selfie = 'selfie',\n CheckSelfie = 'check-selfie',\n ReviewSubmit = 'review-submit',\n A4DocumentStart = 'a4-document-start',\n A4DocumentPhoto = 'a4-document-photo',\n CheckA4Document = 'check-a4-document',\n Registration = 'registration',\n Final = 'final',\n Loading = 'loading',\n Resubmission = 'resubmission',\n Decline = 'decline',\n Error = 'error',\n}\n\nexport enum Elements {\n Image = 'image',\n Photo = 'photo',\n Title = 'title',\n Paragraph = 'paragraph',\n Button = 'button',\n Input = 'input',\n Container = 'container',\n DocumentOption = 'document-option',\n IconButton = 'icon-button',\n IconCloseButton = 'icon-close-button',\n CameraButton = 'camera-button',\n VideoContainer = 'video-container',\n List = 'list',\n ErrorText = 'error-text',\n Loader = 'loader',\n PrivacyLink = 'privacy-link'\n}\n\nexport interface IOpacityColor {\n color: string;\n opacity: number;\n}\n\ninterface ICSSPropertiesAll {\n margin: string;\n padding: string;\n 'font-family': string;\n 'font-size': string;\n 'font-weight': number;\n 'text-align': string;\n 'line-height': string;\n 'vertical-align': string;\n 'box-shadow': string;\n '-webkit-box-shadow': string;\n width: string;\n height: string;\n background?: string | IOpacityColor;\n color?: string;\n 'border-radius'?: string;\n border: string;\n display: string;\n cursor: string;\n 'align-items': string;\n 'justify-content': string;\n 'flex-direction': string;\n position: string;\n top: string;\n bottom: string;\n left: string;\n right: string;\n 'align-self': string;\n hover: ICSSProperties;\n active: ICSSProperties;\n fill: string;\n 'flex-grow': number;\n 'background-position-y': string;\n outline: string;\n 'z-index': string;\n}\n\nexport type Icons = 'Card' | 'Passport' | 'License' | 'PassportTwo' | 'Voter';\n\ninterface IAttributesAll {\n icon: Icons;\n src: string;\n alt: string;\n width: string | number;\n height: string | number;\n value: string;\n name: string;\n type: string;\n placeholder: string;\n length: number; // mostly for elements with a number of elements\n validate: () => boolean;\n defaultValue: string;\n}\n\nexport type ICSSProperties = Partial<ICSSPropertiesAll>;\nexport type IAttributes = Partial<IAttributesAll>;\n\nexport interface IFormProps {\n persistence: 'session' | 'local';\n action: 'store' | 'api';\n storeKey?: string;\n apiUrl?: string;\n}\n\nexport interface IButton {\n theme: 'primary' | 'secondary';\n}\n\nexport interface IElementProps {\n style?: ICSSProperties;\n attributes?: IAttributes;\n context?: string;\n}\n\nexport interface IElement {\n id?: string;\n props: IElementProps;\n type: Elements;\n elements?: IElement[];\n}\n\nexport interface IStepConfiguration {\n name: Steps;\n style?: ICSSProperties;\n overlayStyle?: ICSSProperties;\n elements: IElement[];\n form?: IFormProps;\n type?: DocumentType;\n id: string;\n namespace?: string;\n cameraConfig?: CaptureConfigOption;\n documentOptions?: DocumentType[];\n}\n\nexport interface IOverlayStyles {\n card?: ICSSProperties;\n passport?: ICSSProperties;\n a4?: ICSSProperties;\n selfie?: ICSSProperties;\n}\n\nexport type TSteps = { [key: string]: IStepConfiguration };\n\nexport interface IAppConfigurationUI {\n container: ICSSProperties;\n button: ICSSProperties;\n buttonWithIcon: ICSSProperties;\n iconButton: ICSSProperties;\n iconCloseButton: ICSSProperties;\n layout: ICSSProperties;\n photo: ICSSProperties;\n title: ICSSProperties;\n paragraph: ICSSProperties;\n documentOptions: IDocumentOptions;\n list: IList;\n navigationButtons: INavigationButtons;\n image: ICSSProperties;\n cameraButton: ICSSProperties;\n videoContainer: ICSSProperties;\n input: ICSSProperties;\n loader: ICSSProperties;\n errorText: ICSSProperties;\n overlay: IOverlayStyles;\n settings: ConfigSettings;\n general: {\n progress: boolean;\n borderRadius: string;\n padding: string;\n colors: {\n primary: string;\n secondary: string;\n text: string;\n danger: string;\n };\n fonts: {\n name: string;\n weight: number[];\n link?: string;\n };\n };\n steps: TSteps;\n}\n\nexport interface IAppConfiguration extends Partial<IAppConfigurationUI> {\n isDevelopment: boolean;\n backendConfig: FlowsBackendConfig;\n endUserInfo: Omit<EndUserInfo, 'dateOfBirth' | 'endUserMetadata'> & {\n token?: string;\n };\n flows: { [key: string]: IFlow };\n defaultLanguage: 'en' | 'es';\n}\n\nexport interface ConfigSettings {\n cameraSettings: CaptureConfigOption;\n selfieCameraSettings: CaptureConfigOption;\n}\n","import type { IAppConfiguration } from '../contexts/configuration';\nimport { Steps } from '../contexts/configuration/types';\n\n// Config prioritiztion:\n// 3. Theme configuration\n// 2. Step configuration\n// 1. Components configuration\n\nconst defaultFlowOrder = [\n Steps.Welcome,\n Steps.DocumentSelection,\n Steps.DocumentPhoto,\n Steps.CheckDocument,\n Steps.DocumentPhotoBackStart,\n Steps.DocumentPhotoBack,\n Steps.CheckDocumentPhotoBack,\n Steps.SelfieStart,\n Steps.Selfie,\n Steps.CheckSelfie,\n Steps.ReviewSubmit,\n Steps.Loading,\n];\n\nexport const configuration: IAppConfiguration = {\n backendConfig: {\n baseUrl: 'https://api.authbridge.io',\n auth: {\n method: 'jwt',\n authorizationHeader: '',\n },\n endpoints: {\n startVerification: '/v2/enduser/verify',\n getVerificationStatus: '/v2/enduser/verify/status/{verificationId}',\n processStepData: '/v2/enduser/verify/partial',\n getConfig: '/v2/clients/{clientId}/config',\n },\n },\n isDevelopment: false,\n defaultLanguage: 'en',\n endUserInfo: {\n id: 'test-id123',\n },\n flows: {\n default: {\n name: 'default',\n stepsOrder: defaultFlowOrder,\n syncFlow: true,\n useFinalQueryParams: true,\n },\n },\n steps: {},\n};\n","import { writable } from 'svelte/store';\nimport type { IAppConfiguration } from './types';\nimport { configuration as defaultConfiguration } from '../../configuration/configuration';\n\nexport const configuration = writable<IAppConfiguration>(defaultConfiguration);\n\nObject.defineProperty(window, 'configStore', {\n get: (): any => {\n return configuration.subscribe(e => console.log(e));\n },\n});\n","'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn Object.propertyIsEnumerable.call(target, symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n","import type { ICSSProperties, IOpacityColor } from '../contexts/configuration';\n\nconst hexTransparencies = {\n 100: 'FF',\n 99: 'FC',\n 98: 'FA',\n 97: 'F7',\n 96: 'F5',\n 95: 'F2',\n 94: 'F0',\n 93: 'ED',\n 92: 'EB',\n 91: 'E8',\n 90: 'E6',\n 89: 'E3',\n 88: 'E0',\n 87: 'DE',\n 86: 'DB',\n 85: 'D9',\n 84: 'D6',\n 83: 'D4',\n 82: 'D1',\n 81: 'CF',\n 80: 'CC',\n 79: 'C9',\n 78: 'C7',\n 77: 'C4',\n 76: 'C2',\n 75: 'BF',\n 74: 'BD',\n 73: 'BA',\n 72: 'B8',\n 71: 'B5',\n 70: 'B3',\n 69: 'B0',\n 68: 'AD',\n 67: 'AB',\n 66: 'A8',\n 65: 'A6',\n 64: 'A3',\n 63: 'A1',\n 62: '9E',\n 61: '9C',\n 60: '99',\n 59: '96',\n 58: '94',\n 57: '91',\n 56: '8F',\n 55: '8C',\n 54: '8A',\n 53: '87',\n 52: '85',\n 51: '82',\n 50: '80',\n 49: '7D',\n 48: '7A',\n 47: '78',\n 46: '75',\n 45: '73',\n 44: '70',\n 43: '6E',\n 42: '6B',\n 41: '69',\n 40: '66',\n 39: '63',\n 38: '61',\n 37: '5E',\n 36: '5C',\n 35: '59',\n 34: '57',\n 33: '54',\n 32: '52',\n 31: '4F',\n 30: '4D',\n 29: '4A',\n 28: '47',\n 27: '45',\n 26: '42',\n 25: '40',\n 24: '3D',\n 23: '3B',\n 22: '38',\n 21: '36',\n 20: '33',\n 19: '30',\n 18: '2E',\n 17: '2B',\n 16: '29',\n 15: '26',\n 14: '24',\n 13: '21',\n 12: '1F',\n 11: '1C',\n 10: '1A',\n 9: '17',\n 8: '14',\n 7: '12',\n 6: '0F',\n 5: '0D',\n 4: '0A',\n 3: '08',\n 2: '05',\n 1: '03',\n 0: '00'\n}\n\nconst cssProperties: (keyof ICSSProperties)[] = [\n 'margin',\n 'padding',\n 'font-family',\n 'font-size',\n 'font-weight',\n 'line-height',\n 'vertical-align',\n 'width',\n 'height',\n 'background',\n 'color',\n 'border-radius',\n 'border',\n 'display',\n 'align-items',\n 'text-align',\n 'justify-content',\n 'cursor',\n 'position',\n 'top',\n 'bottom',\n 'left',\n 'right',\n 'hover',\n 'active',\n 'box-shadow',\n '-webkit-box-shadow',\n 'flex-direction',\n 'align-self',\n 'fill',\n 'flex-grow',\n 'background-position-y',\n 'outline',\n 'z-index',\n];\n\nconst setBackgroundWithOpacity = (style: IOpacityColor, styles: string[], prefix = ''): string[] => {\n if (style.color.includes(\"primary\")) {\n const app = document.getElementById(\"blrn-app\") as HTMLDivElement\n const color = getComputedStyle(app).getPropertyValue('--primary-color');\n const opacityKey = Math.round(style.opacity * 100) as keyof typeof hexTransparencies;\n return [...styles, `--${prefix}background: ${color}${hexTransparencies[opacityKey]};`]\n }\n return styles;\n}\n\nexport const makeStylesFromConfiguration = (\n globalComponentStyles: ICSSProperties = {},\n configStyles: ICSSProperties = {},\n): string => {\n let styles: string[] = [];\n\n const setProperties = (\n globalCss: ICSSProperties,\n localCss: ICSSProperties,\n property: keyof ICSSProperties,\n prefix = '',\n ) => {\n if (localCss && localCss[property]) {\n if (typeof localCss[property] === 'object' && property === 'background') {\n styles = setBackgroundWithOpacity(localCss[property] , styles, prefix);\n return;\n }\n styles.push(`--${prefix}${property}: ${String(localCss[property])};`);\n return;\n }\n if (globalCss && globalCss[property]) {\n if (typeof globalCss[property] === 'object' && property === 'background') {\n styles = setBackgroundWithOpacity(globalCss[property] , styles, prefix);\n return;\n }\n styles.push(`--${prefix}${property}: ${String(globalCss[property])};`);\n return;\n }\n };\n\n cssProperties.map(property => {\n if (property === 'hover') {\n cssProperties.map(hoverProperty => {\n const globalHoverProperties = globalComponentStyles.hover as ICSSProperties;\n const localHoverProperties = configStyles.hover as ICSSProperties;\n setProperties(globalHoverProperties, localHoverProperties, hoverProperty, 'hover-');\n });\n return;\n }\n if (property === 'active') {\n cssProperties.map(property => {\n const globalActiveProperties = globalComponentStyles.active as ICSSProperties;\n const localActiveHoverProperties = configStyles.active as ICSSProperties;\n setProperties(globalActiveProperties, localActiveHoverProperties, property, 'active-');\n });\n return;\n }\n setProperties(globalComponentStyles, configStyles, property);\n });\n\n return styles.join('\\n');\n};\n\nexport const makesLocalStyles = (configStyles: ICSSProperties) => {\n if (!configStyles) return '';\n\n let styles: string[] = [];\n\n const setProperties = (css: ICSSProperties, property: keyof ICSSProperties, prefix = '') => {\n if (!css) return;\n if (typeof css[property] === 'object' && property === 'background') {\n styles = setBackgroundWithOpacity(css[property] , styles, prefix);\n return;\n }\n if (css[property]) styles.push(`--${prefix}${property}: ${String(css[property])};`);\n };\n\n cssProperties.map(property => {\n if (property === 'hover' && configStyles.hover) {\n cssProperties.map(hoverProperty => {\n const cssHoverProperties = configStyles.hover as ICSSProperties;\n setProperties(cssHoverProperties, hoverProperty, 'hover-');\n });\n return;\n }\n if (property === 'active' && configStyles.active) {\n cssProperties.map(property => {\n const cssActiveProperties = configStyles.active as ICSSProperties;\n setProperties(cssActiveProperties, property, 'active-');\n });\n return;\n }\n setProperties(configStyles, property);\n });\n\n return styles.join('\\n');\n};\n","!function(e,t){if(\"object\"===typeof exports&&\"object\"===typeof module)module.exports=t();else if(\"function\"===typeof define&&define.amd)define([],t);else{var n=t();for(var i in n)(\"object\"===typeof exports?exports:e)[i]=n[i]}}(this,function(){return function(e){function t(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,\"a\",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p=\"\",t(t.s=4)}([function(e,t,n){\"use strict\";n.d(t,\"b\",function(){return o}),n.d(t,\"c\",function(){return a});var i=n(1),r=n(7);n.d(t,\"a\",function(){return r.a}),n.d(t,\"d\",function(){return i.b});var o=i.a.FACING_MODES,a=i.a.IMAGE_TYPES},function(e,t,n){\"use strict\";var i=n(6);n.d(t,\"a\",function(){return i.a});var r=n(2);n.d(t,\"b\",function(){return r.a})},function(e,t,n){\"use strict\";function i(e,t){if(!(t>=0&&t<=1))throw new Error(t+\" is invalid imageCompression, choose between: [0, 1]\");if(!l.f.includes(e))throw new Error(e+\" is invalid imageType, choose between: \"+l.f.join(\", \"));return!0}function r(e,t){var n={};try{i(e,t),n.imageType=e,n.imageCompression=t}catch(e){console.error(e),console.error(\"default value of \"+l.c.PNG+\" is used\"),n.imageType=l.c.PNG,n.imageCompression=null}return n}function o(){var e=window.navigator.platform,t=window.navigator.userAgent;return e||t}function a(){return\"ontouchend\"in document}function u(e,t,n){var i=e*parseFloat(n);return{imageWidth:i,imageHeight:t/(e/i)}}function c(e,t,n){return r(t,n).imageType===l.c.JPG?n?e.toDataURL(l.b[l.c.JPG],n):e.toDataURL(l.b[l.c.JPG]):e.toDataURL(l.b[t])}function s(e,t){return e||t}function f(){var e=o();if(/iPad|iPhone|iPod/.test(e))return!0;var t=a();return!(!/Mac/.test(e)||!t)}function d(){return{userAgent:window.navigator.userAgent,platform:window.navigator.platform,_getStringWithPlatform:o(),_getHasTouchEvents:a(),getIsIOS:f()}}t.c=u,t.b=c,t.e=s,t.d=f,t.a=d;var l=n(3)},function(e,t,n){\"use strict\";function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.d(t,\"e\",function(){return o}),n.d(t,\"a\",function(){return a}),n.d(t,\"f\",function(){return u}),n.d(t,\"c\",function(){return c}),n.d(t,\"b\",function(){return s}),n.d(t,\"d\",function(){return f});var r,o=[\"user\",\"environment\"],a={USER:\"user\",ENVIRONMENT:\"environment\"},u=[\"jpg\",\"png\"],c={PNG:\"png\",JPG:\"jpg\"},s=(r={},i(r,\"jpg\",\"image/jpeg\"),i(r,\"png\",\"image/png\"),r),f={audio:!1,video:!0}},function(e,t,n){e.exports=n(5)},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(0);n.d(t,\"FACING_MODES\",function(){return i.b}),n.d(t,\"IMAGE_TYPES\",function(){return i.c}),n.d(t,\"_getDebugPlatformInfo\",function(){return i.d});var r=n(9);n.d(t,\"downloadPhoto\",function(){return r.a}),t.default=i.a},function(e,t,n){\"use strict\";function i(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}n.d(t,\"a\",function(){return u});var r=n(2),o=n(3),a=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),u=function(){function e(){i(this,e)}return a(e,null,[{key:\"getDataUri\",value:function(e,t){var n=t.sizeFactor,i=t.imageType,o=t.imageCompression,a=t.isImageMirror,u=e.videoWidth,c=e.videoHeight,s=Object(r.c)(u,c,n),f=s.imageWidth,d=s.imageHeight,l=document.createElement(\"canvas\");l.width=f,l.height=d;var v=l.getContext(\"2d\");return a&&v.setTransform(-1,0,0,1,l.width,0),v.drawImage(e,0,0,f,d),Object(r.b)(l,i,o)}},{key:\"getWindowURL\",value:function(){return window.URL||window.webkitURL||window.mozURL||window.msURL}},{key:\"getNavigatorMediaDevices\",value:function(){var e=null,t=!(!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia),n=!(!navigator.mozGetUserMedia&&!navigator.webkitGetUserMedia);if(t)e=navigator.mediaDevices;else if(n){var i=navigator.mozGetUserMedia||navigator.webkitGetUserMedia,r={getUserMedia:function(e){return new Promise(function(t,n){i.call(navigator,e,t,n)})}};e=Object.assign(i,r)}return e}},{key:\"isSupportedFacingMode\",value:function(){return e.getNavigatorMediaDevices().getSupportedConstraints().facingMode}},{key:\"getIdealConstraints\",value:function(t,n){if(!Object(r.e)(t,n))return o.d;var i=e.getNavigatorMediaDevices().getSupportedConstraints();if(!i.width||!i.height)return console.error(\"Constraint width or height not supported! fallback to default resolution\"),o.d;var a=void 0,u=void 0;if(t){o.e.includes(t)?a=t:u={exact:t}}return{audio:!1,video:{facingMode:a,deviceId:u,width:n&&n.width,height:n&&n.height}}}},{key:\"getMaxResolutionConstraints\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",n=arguments[1];console.warn(\"getMaxResolutionConstraints() numberOfMaxResolutionTry:\",n);var i=[{width:{min:640}},{width:{min:800}},{width:{min:900}},{width:{min:1024}},{width:{min:1080}},{width:{min:1280}},{width:{min:1920}},{width:{min:2560}},{width:{min:3840}}],o=e.getIdealConstraints(t,{});if(0===n){if(Object(r.d)()){console.warn(\"fallback to iOS constraints\");return e.getIdealConstraints(t,{width:{min:640,ideal:3840},height:{min:480,ideal:2160}})}return o.video.advanced=i,o}if(n<i.length){var a=i.slice(0,-n);return o.video.advanced=a,o}return null}},{key:\"FACING_MODES\",get:function(){return o.a}},{key:\"IMAGE_TYPES\",get:function(){return o.c}}]),e}()},function(e,t,n){\"use strict\";function i(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}n.d(t,\"a\",function(){return c});var r=n(1),o=n(8),a=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),u=r.a.IMAGE_TYPES.PNG,c=function(){function e(t){i(this,e),this.videoElement=t,this.stream=null,this.numberOfMaxResolutionTry=0,this.settings=null,this.cameras=[],this.windowURL=r.a.getWindowURL(),this.mediaDevices=r.a.getNavigatorMediaDevices()}return a(e,[{key:\"_getStreamDevice\",value:function(e,t){var n=this;return new Promise(function(i,o){var a=r.a.getIdealConstraints(e,t);n.mediaDevices.getUserMedia(a).then(function(e){n._gotStream(e),i(e)}).catch(function(e){o(e)})})}},{key:\"_getStreamDeviceMaxResolution\",value:function(e){var t=this,n=r.a.getMaxResolutionConstraints(e,this.numberOfMaxResolutionTry);if(null==n){var i={};return this._getStreamDevice(e,i)}return new Promise(function(i,r){t.mediaDevices.getUserMedia(n).then(function(e){t._gotStream(e),i(e)}).catch(function(n){setTimeout(function(){t.numberOfMaxResolutionTry+=1,t._getStreamDeviceMaxResolution(e).catch(function(){r(n)})},20)})})}},{key:\"_setVideoSrc\",value:function(e){if(\"srcObject\"in this.videoElement)this.videoElement.srcObject=e;else{var t=this.windowURL.createObjectURL(e);this.videoElement.src=t}}},{key:\"_setSettings\",value:function(e){this.settings=null;var t=e&&e.getTracks?e.getTracks():[];t.length>0&&t[0].getSettings&&(this.settings=t[0].getSettings())}},{key:\"_enumerateCamerasPromise\",value:function(){var e=this;return new Promise(function(t,n){var i=[];e.mediaDevices.enumerateDevices().then(function(e){e.forEach(function(e){\"videoinput\"===e.kind&&e.deviceId&&i.push(e)}),t(i)}).catch(function(e){n(e)})})}},{key:\"_gotStream\",value:function(e){this.stream=e,this._setSettings(e),this._setVideoSrc(e)}},{key:\"getCameraSettings\",value:function(){return this.settings}},{key:\"enumerateCameras\",value:function(){var e=this;return this.stream?this._enumerateCamerasPromise():this.stopCamera().then(function(){}).catch(function(){}).then(function(){var t={video:!0};return e.mediaDevices.getUserMedia(t).then(function(e){setTimeout(function(){e.getTracks().forEach(function(e){e.stop()})},20)}).then(function(){}).catch(function(){}).then(function(){return e._enumerateCamerasPromise()})})}},{key:\"startCamera\",value:function(e,t){var n=this;return this.stopCamera().then(function(){}).catch(function(){}).then(function(){return n._getStreamDevice(e,t)})}},{key:\"startCameraMaxResolution\",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\";return this.numberOfMaxResolutionTry=0,this.stopCamera().then(function(){}).catch(function(){}).then(function(){return e._getStreamDeviceMaxResolution(t)})}},{key:\"getDataUri\",value:function(e){var t={sizeFactor:void 0===e.sizeFactor?o.c:e.sizeFactor,imageType:void 0===e.imageType?u:e.imageType,imageCompression:void 0===e.imageCompression?o.a:e.imageCompression,isImageMirror:void 0===e.isImageMirror?o.b:e.isImageMirror};return r.a.getDataUri(this.videoElement,t)}},{key:\"stopCamera\",value:function(){var e=this;return new Promise(function(t,n){e.stream&&(e.stream.getTracks().forEach(function(e){e.stop()}),e.videoElement.src=\"\",e.stream=null,e._setSettings(null),t()),n(Error(\"no stream to stop!\"))})}}]),e}()},function(e,t,n){\"use strict\";n.d(t,\"c\",function(){return i}),n.d(t,\"a\",function(){return r}),n.d(t,\"b\",function(){return o});var i=1,r=null,o=!1},function(e,t,n){\"use strict\";var i=n(10);n.d(t,\"a\",function(){return i.a})},function(e,t,n){\"use strict\";function i(e){for(var t=atob(e.split(\",\")[1]),n=e.split(\",\")[0].split(\":\")[1].split(\";\")[0],i=new ArrayBuffer(t.length),r=new Uint8Array(i),o=0;o<t.length;o++)r[o]=t.charCodeAt(o);return new Blob([i],{type:n})}function r(e,t){return e+=\"\",e.length>=t?e:new Array(t-e.length+1).join(\"0\")+e}function o(e){var t=s.c.PNG;return\"image/jpeg\"===e&&(t=s.c.JPG),t}function a(e,t,n){return e+\"-\"+r(t,4)+\".\"+o(n)}function u(e,t,n){window.URL=window.webkitURL||window.URL;var i=document.createElement(\"a\");i.download=a(t,n,e.type),i.href=window.URL.createObjectURL(e);var r=document.createEvent(\"MouseEvents\");r.initMouseEvent(\"click\",!0,!0,window,1,0,0,0,0,!1,!1,!1,!1,0,null),i.dispatchEvent(r)}function c(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"photo\",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;u(i(e),t,n)}t.a=c;var s=n(0)}])});\n//# sourceMappingURL=index.js.map","import { derived, writable } from 'svelte/store';\nimport { steps } from '../navigation';\nimport type { IAppState, IDocument, IDocumentInfo, ISelectedParams } from './types';\n\n// const STORAGE_SELFIE_KEY = \"selfie\";\n// const STORAGE_DOCUMENTS_KEY = \"documents\";\n// const STORAGE_DOCUMENT_INFO_KEY = \"document-info\";\n\n//selfie uir\n// export const selfieUri = writable<string>(sessionStorage.getItem(STORAGE_SELFIE_KEY) || \"\");\n// selfieUri.subscribe(selfie => {\n// sessionStorage.setItem(STORAGE_SELFIE_KEY, selfie);\n// });\nexport const selfieUri = writable<string>('');\n\n//docs\nexport const documents = writable<IDocument[]>([]);\n// let savedDocs = sessionStorage.getItem(STORAGE_DOCUMENTS_KEY);\n// export const documents = writable<IDocument[]>(savedDocs ? JSON.parse(savedDocs) : []);\n// documents.subscribe(docs => {\n// sessionStorage.setItem(STORAGE_DOCUMENTS_KEY, JSON.stringify(docs));\n// });\n\n//selected docs\nexport const selectedDocumentInfo = writable<IDocumentInfo>();\n// let savedSelectedDocs = sessionStorage.getItem(STORAGE_DOCUMENT_INFO_KEY);\n// export const selectedDocumentInfo = writable<IDocumentInfo>(savedSelectedDocs ? JSON.parse(savedSelectedDocs) : \"\");\n// selectedDocumentInfo.subscribe(docInfo => {\n// sessionStorage.setItem(STORAGE_DOCUMENT_INFO_KEY, JSON.stringify(docInfo));\n// });\n\n// const APP_STATE_KEY = \"appState\";\n\n//reload state from session storage if it exists\n// let savedState = sessionStorage.getItem(APP_STATE_KEY);\n// let savedStateObj;\n// if (savedState) savedStateObj = JSON.parse(savedState);\n\nexport const currentStepIdx = writable<number>(0);\nexport const currentParams = writable<ISelectedParams | null>(null);\nexport const currentRoute = writable<string>();\n\nlet previousPage = 'none';\n\nexport const appState = derived(currentRoute, $currentRoute => {\n const index = steps.findIndex(s => s.name === $currentRoute);\n\n const appState: IAppState = {\n currentStepIdx: index,\n currentPage: $currentRoute,\n previousPage,\n };\n\n previousPage = $currentRoute;\n\n return appState;\n});\n\nexport const currentStepId = writable<string>('welcome');\n\n// Document selection state\nexport type DocumentType = 'omang' | 'passport' | 'driversLicense' | null;\nexport const selectedDocument = writable<DocumentType>(null);\n\nexport function selectDocument(type: DocumentType) {\n selectedDocument.set(type);\n}\n\nexport function clearDocumentSelection() {\n selectedDocument.set(null);\n}\n\n// Document capture metadata for event emission on review confirmation\nexport interface ICaptureMetadata {\n documentType: 'omang' | 'passport' | 'driversLicense';\n side: 'front' | 'back';\n imageSize: number;\n compressionRatio: number;\n captureTime: number;\n cameraResolution: string;\n}\n\n// Document upload metadata for event emission on review confirmation\nexport interface IUploadMetadata {\n documentType: 'omang' | 'passport' | 'driversLicense';\n side: 'front' | 'back';\n fileName: string;\n originalSize: number;\n compressedSize: number;\n compressionRatio: number;\n uploadTime: number;\n uploadMethod: 'button' | 'dragDrop';\n}\n\nexport const pendingCaptureMetadata = writable<ICaptureMetadata | null>(null);\nexport const pendingUploadMetadata = writable<IUploadMetadata | null>(null);\n\nexport function setPendingCaptureMetadata(metadata: ICaptureMetadata) {\n pendingCaptureMetadata.set(metadata);\n}\n\nexport function clearPendingCaptureMetadata() {\n pendingCaptureMetadata.set(null);\n}\n\nexport function setPendingUploadMetadata(metadata: IUploadMetadata) {\n pendingUploadMetadata.set(metadata);\n}\n\nexport function clearPendingUploadMetadata() {\n pendingUploadMetadata.set(null);\n}\n\n// Selfie capture metadata for event emission on review confirmation\nexport interface ISelfieMetadata {\n fileName: string;\n originalSize: number;\n compressedSize: number;\n compressionRatio: number;\n captureTime: number;\n cameraResolution: string;\n livenessChecks: {\n blink: { passed: boolean; attempts: number };\n turnLeft: { passed: boolean; attempts: number };\n turnRight: { passed: boolean; attempts: number };\n };\n totalAttempts: number;\n faceQuality: {\n centered: boolean;\n distance: 'optimal' | 'tooClose' | 'tooFar';\n message: string;\n };\n}\n\nexport const pendingSelfieMetadata = writable<ISelfieMetadata | null>(null);\n\nexport function setPendingSelfieMetadata(metadata: ISelfieMetadata) {\n pendingSelfieMetadata.set(metadata);\n}\n\nexport function clearPendingSelfieMetadata() {\n pendingSelfieMetadata.set(null);\n}\n\n// ============================================\n// LIVENESS SESSION STATE (ADR-R003)\n// AWS Rekognition Face Liveness integration\n// ============================================\n\nexport interface ILivenessSession {\n sessionId: string;\n region: string;\n createdAt: number;\n status: 'pending' | 'in_progress' | 'completed' | 'failed' | 'skipped';\n confidence?: number;\n referenceImageUri?: string;\n}\n\nexport const livenessSession = writable<ILivenessSession | null>(null);\n\nexport function setLivenessSession(session: ILivenessSession | null) {\n livenessSession.set(session);\n}\n\nexport function updateLivenessStatus(\n status: ILivenessSession['status'],\n confidence?: number,\n referenceImageUri?: string\n) {\n livenessSession.update(session => {\n if (!session) return null;\n return {\n ...session,\n status,\n ...(confidence !== undefined && { confidence }),\n ...(referenceImageUri && { referenceImageUri }),\n };\n });\n}\n\nexport function clearLivenessSession() {\n livenessSession.set(null);\n}\n\n/**\n * Get current liveness session ID (for submission)\n * Returns null if no session or session was skipped\n */\nexport function getLivenessSessionId(): string | null {\n let sessionId: string | null = null;\n const unsubscribe = livenessSession.subscribe(session => {\n if (session && session.status !== 'skipped') {\n sessionId = session.sessionId;\n }\n });\n unsubscribe();\n return sessionId;\n}\n\n// ============================================\n// VERIFICATION STATUS STATE (FR-R1.5)\n// Polling result for UI consumption\n// ============================================\n\nexport interface IVerificationStatus {\n verificationId: string;\n status: 'processing' | 'approved' | 'rejected' | 'pending_review' | 'timeout';\n referenceNumber?: string;\n rejectionReason?: string;\n biometricScore?: number;\n livenessConfidence?: number;\n ocrData?: Record<string, unknown>;\n polledAt: number;\n}\n\nexport const verificationStatus = writable<IVerificationStatus | null>(null);\n\nexport function setVerificationStatus(status: IVerificationStatus) {\n verificationStatus.set(status);\n}\n\nexport function clearVerificationStatus() {\n verificationStatus.set(null);\n}\n\n/**\n * Get current verification status (for callbacks)\n */\nexport function getVerificationStatus(): IVerificationStatus | null {\n let status: IVerificationStatus | null = null;\n const unsubscribe = verificationStatus.subscribe(s => {\n status = s;\n });\n unsubscribe();\n return status;\n}\n","import { SvelteComponent } from 'svelte';\nimport { Steps } from '../configuration/types';\n\nexport enum DocumentType {\n PASSPORT = 'passport', // CARD\n DRIVERS_LICENSE = 'drivers_license', // CARD\n RESIDENCE_PERMIT = 'residence_permit', // CARD\n ID_CARD = 'id_card', // CARD - Generic ID\n OMANG = 'omang', // CARD - Botswana National ID\n VOTER_ID = 'voter_id', // CARD\n WORK_PERMIT = 'work_permit', // CARD\n VISA = 'visa', // CARD\n BANK_STATEMENT = 'bank_statement', // A4\n PROOF_OF_BUSINESS_TAX_ID = 'proof_of_business_tax_id', // A4\n OPERATING_LICENSE = 'operating_license', // A4\n BUSINESS_REGISTRATION = 'business_registration', // A4\n SELFIE = 'selfie',\n}\n\nexport enum DocumentVariant {\n A4 = 'a4',\n REGULAR = 'regular',\n}\n\nexport interface IDocumentInfo {\n backSide: boolean;\n variant: DocumentVariant;\n type: DocumentType;\n}\n\nexport type IPageSide = 'front' | 'back';\nexport interface IDocumentPage {\n base64?: string;\n uri?: string;\n side: IPageSide;\n}\n\nexport interface IDocument {\n type: DocumentType;\n metadata: Record<string, string>;\n pages: IDocumentPage[];\n}\n\nexport interface IStoreData {\n docs: IDocument[];\n selectedDocumentInfo?: IDocumentInfo;\n selfie?: string;\n}\n\nexport interface IStep {\n name: Steps;\n id: string;\n component: typeof SvelteComponent;\n}\n\nexport interface IStore {\n currentStepIndex: number;\n data: IStoreData;\n}\n\nexport interface DevMocks {\n resultTime: number | string;\n reasonCode: number;\n code: number;\n idvResult: DecisionStatus;\n}\n\nexport enum DecisionStatus {\n APPROVED = 'approved',\n RESUBMISSION_REQUESTED = 'resubmission_requested',\n DECLINED = 'declined',\n EXPIRED = 'expired',\n ABANDONED = 'abandoned',\n REVIEW = 'review',\n}\n\nexport interface IAppState {\n currentStepIdx: number;\n currentPage: string;\n previousPage: string;\n}\n\nexport type ISelectedParams = Record<string, string | boolean>;\n","import { DocumentType } from './types';\nimport type { IDocument, IPageSide } from './types';\n\nexport const getDocImage = (\n type: DocumentType,\n docs: IDocument[],\n pageSide?: IPageSide,\n): string => {\n const doc = docs.find(d => d.type === type);\n if (!doc) return '';\n const page = doc.pages.find(p => p.side === pageSide) || doc.pages[0];\n if (!page) return '';\n return page.base64 as string;\n};\n","import { IMAGE_TYPES } from 'jslib-html5-camera-photo';\nimport { DocumentType } from '../../contexts/app-state';\nimport { DocumentVariant } from '../../contexts/app-state/types';\nimport { Elements, Steps } from '../../contexts/configuration';\nimport type { IElement, IAppConfigurationUI, TSteps } from '../../contexts/configuration';\n\nconst backIconButton: IElement = {\n type: Elements.IconButton,\n props: {\n attributes: {\n src: '/images/back.svg',\n alt: 'back',\n width: '28px',\n height: '28px',\n },\n style: {\n left: '26px',\n background: 'transparent',\n },\n },\n};\n\nconst closeIconButton: IElement = {\n type: Elements.IconCloseButton,\n props: {\n attributes: {\n src: '/images/close.svg',\n alt: 'back',\n width: '18px',\n height: '18px',\n },\n style: {\n right: '26px',\n background: 'transparent',\n },\n },\n};\n\nconst backWhiteIconButton: IElement = {\n type: Elements.IconButton,\n props: {\n attributes: {\n ...backIconButton.props.attributes,\n src: '/images/back-white.svg',\n },\n style: backIconButton.props.style,\n },\n};\n\nconst stepsTheme: TSteps = {\n [Steps.Welcome]: {\n name: Steps.Welcome,\n id: Steps.Welcome,\n namespace: 'welcome',\n style: {},\n elements: [\n backIconButton,\n closeIconButton,\n {\n type: Elements.Title,\n props: {\n style: {\n 'text-align': 'center',\n padding: '4px 0px 4px',\n 'font-size': '22px',\n 'font-weight': 800,\n color: '#1E293B',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n 'text-align': 'center',\n margin: '0px 0px 12px',\n 'font-size': '14px',\n color: '#64748B',\n },\n context: 'estimatedTime',\n },\n },\n {\n type: Elements.Image,\n props: {\n style: {\n margin: '8px auto',\n 'flex-grow': 0,\n },\n attributes: {\n src: '/images/welcome.svg',\n alt: 'Identity verification illustration',\n width: '180px',\n height: '135px',\n },\n },\n },\n {\n type: Elements.List,\n props: {\n style: {\n margin: '8px 16px',\n 'text-align': 'left',\n },\n },\n },\n {\n type: Elements.Button,\n props: {},\n },\n {\n type: Elements.PrivacyLink,\n props: {\n style: {\n margin: '8px 0px 12px',\n 'text-align': 'center',\n 'font-size': '12px',\n color: '#64748B',\n },\n },\n },\n ],\n },\n [Steps.DocumentStart]: {\n name: Steps.DocumentStart,\n id: Steps.DocumentStart,\n elements: [\n backIconButton,\n closeIconButton,\n {\n type: Elements.Title,\n props: {\n style: {\n 'text-align': 'center',\n padding: '8px 0px 20px',\n 'font-size': '18px',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n 'text-align': 'center',\n margin: '0px',\n 'font-size': '16px',\n },\n context: 'description',\n },\n },\n {\n type: Elements.Image,\n props: {\n style: {\n margin: '8px auto',\n 'flex-grow': 1,\n },\n attributes: {\n src: '/images/welcome.svg',\n alt: 'welcome',\n width: '248px',\n height: '212px',\n },\n },\n },\n {\n type: Elements.Button,\n props: {},\n },\n ],\n },\n [Steps.DocumentSelection]: {\n name: Steps.DocumentSelection,\n id: Steps.DocumentSelection,\n elements: [\n backIconButton,\n closeIconButton,\n {\n type: Elements.Title,\n props: {\n style: {\n padding: '8px 24px 18px',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n margin: '0 20px 30px 20px',\n },\n context: 'description',\n },\n },\n ],\n },\n [Steps.DocumentPhoto]: {\n name: Steps.DocumentPhoto,\n id: Steps.DocumentPhoto,\n elements: [\n backWhiteIconButton,\n {\n type: Elements.Title,\n props: {\n style: {\n color: '#fff',\n 'font-weight': 700,\n 'align-self': 'center',\n padding: '48px 0px 18px 0px',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n margin: '0px 20px 18px 40px',\n color: '#fff',\n 'text-align': 'center',\n },\n },\n },\n {\n type: Elements.VideoContainer,\n props: {\n style: {\n margin: '0px',\n },\n },\n },\n {\n type: Elements.Loader,\n props: {},\n },\n {\n type: Elements.CameraButton,\n props: {\n style: {\n margin: '24px 0px 30px',\n },\n },\n },\n ],\n },\n [Steps.DocumentUpload]: {\n name: Steps.DocumentUpload,\n id: Steps.DocumentUpload,\n namespace: 'document-upload',\n elements: [\n backIconButton,\n closeIconButton,\n {\n type: Elements.Title,\n props: {\n style: {\n 'text-align': 'center',\n padding: '8px 0px 12px',\n 'font-size': '18px',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n 'text-align': 'center',\n margin: '0px 0px 8px',\n 'font-size': '14px',\n color: '#788597',\n },\n },\n },\n ],\n },\n [Steps.CheckDocument]: {\n name: Steps.CheckDocument,\n id: Steps.CheckDocument,\n elements: [\n backIconButton,\n closeIconButton,\n {\n type: Elements.Title,\n props: {\n style: {\n padding: '8px 30px 18px',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n margin: '0px 0px 48px',\n },\n },\n },\n {\n type: Elements.Photo,\n props: {\n style: {\n margin: '0px',\n },\n },\n },\n ],\n },\n [Steps.DocumentPhotoBackStart]: {\n name: Steps.DocumentPhotoBackStart,\n id: Steps.DocumentPhotoBackStart,\n namespace: 'document-photo-back-start',\n style: {},\n elements: [\n backIconButton,\n closeIconButton,\n {\n type: Elements.Title,\n id: 'welcome-title1',\n props: {\n style: {\n padding: '8px 24px 18px',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n margin: '0',\n },\n },\n },\n {\n type: Elements.Image,\n props: {\n style: {\n margin: '8px auto',\n 'flex-grow': 1,\n },\n attributes: {\n src: '/images/document-photo-back-start.svg',\n alt: 'document-photo-back-start',\n width: '260px',\n height: '212px',\n },\n },\n },\n {\n type: Elements.Button,\n props: {\n style: {\n margin: '0px 0px 40px 0px',\n },\n },\n },\n ],\n },\n [Steps.DocumentPhotoBack]: {\n name: Steps.DocumentPhotoBack,\n id: Steps.DocumentPhotoBack,\n namespace: 'document-photo-back',\n elements: [\n backWhiteIconButton,\n {\n type: Elements.Title,\n props: {\n style: {\n color: '#fff',\n 'font-weight': 700,\n 'align-self': 'center',\n padding: '48px 0px 18px 0px',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n margin: '0px 20px 18px 40px',\n color: '#fff',\n },\n },\n },\n {\n type: Elements.Loader,\n props: {},\n },\n {\n type: Elements.VideoContainer,\n props: {\n style: {\n margin: '0px',\n },\n },\n },\n {\n type: Elements.CameraButton,\n props: {\n style: {\n margin: '24px 0px 30px',\n },\n },\n },\n ],\n },\n [Steps.CheckDocumentPhotoBack]: {\n name: Steps.CheckDocumentPhotoBack,\n id: Steps.CheckDocumentPhotoBack,\n elements: [\n backIconButton,\n closeIconButton,\n {\n type: Elements.Title,\n props: {\n style: {\n padding: '8px 24px 18px',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n margin: '0px 0px 48px',\n },\n },\n },\n {\n type: Elements.Photo,\n props: {\n style: {\n margin: '0px',\n },\n },\n },\n ],\n },\n [Steps.SelfieStart]: {\n name: Steps.SelfieStart,\n id: Steps.SelfieStart,\n style: {},\n elements: [\n backIconButton,\n closeIconButton,\n {\n type: Elements.Title,\n props: {\n style: {\n padding: '8px 24px 18px',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n margin: '0',\n },\n },\n },\n {\n type: Elements.Image,\n props: {\n style: {\n margin: '8px auto',\n 'flex-grow': 1,\n },\n attributes: {\n src: '/images/selfie-start.svg',\n alt: 'selfie-start',\n width: '300x',\n height: '300px',\n },\n },\n },\n {\n type: Elements.Button,\n props: {},\n },\n ],\n },\n [Steps.Selfie]: {\n name: Steps.Selfie,\n id: Steps.Selfie,\n elements: [\n backWhiteIconButton,\n {\n type: Elements.Title,\n props: {\n style: {\n color: '#fff',\n 'font-weight': 700,\n 'align-self': 'center',\n padding: '48px 0px 18px 0px',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n margin: '0px 20px 18px 40px',\n color: '#fff',\n },\n },\n },\n {\n type: Elements.Loader,\n props: {},\n },\n {\n type: Elements.VideoContainer,\n props: {\n style: {\n margin: '0px',\n },\n },\n },\n {\n type: Elements.CameraButton,\n props: {\n style: {\n margin: '24px 0px 30px',\n },\n },\n },\n ],\n },\n [Steps.CheckSelfie]: {\n name: Steps.CheckSelfie,\n id: Steps.CheckSelfie,\n elements: [\n backIconButton,\n closeIconButton,\n {\n type: Elements.Title,\n props: {\n style: {\n padding: '8px 24px 18px',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n margin: '0px 0px 48px',\n },\n },\n },\n {\n type: Elements.Photo,\n props: {\n style: {\n margin: '0px',\n },\n },\n },\n ],\n },\n [Steps.ReviewSubmit]: {\n name: Steps.ReviewSubmit,\n id: Steps.ReviewSubmit,\n namespace: 'reviewSubmit',\n elements: [\n backIconButton,\n closeIconButton,\n {\n type: Elements.Title,\n props: {\n style: {\n padding: '8px 24px 18px',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n margin: '0px 0px 24px',\n },\n },\n },\n ],\n },\n [Steps.Loading]: {\n name: Steps.Loading,\n id: Steps.Loading,\n elements: [],\n },\n [Steps.Resubmission]: {\n name: Steps.Resubmission,\n id: Steps.Resubmission,\n elements: [\n closeIconButton,\n {\n type: Elements.Image,\n props: {\n style: {\n margin: '120px 0px 16px',\n 'align-self': 'center',\n },\n attributes: {\n src: '/images/resubmit.svg',\n alt: 'decline',\n width: '80px',\n height: '80px',\n },\n },\n },\n {\n type: Elements.Title,\n props: {\n style: {\n padding: '8px 0px 6px',\n 'text-align': 'center',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n background: 'transparent',\n margin: '0px 0px 48px',\n border: 'none',\n color: '#788597',\n },\n },\n },\n\n {\n type: Elements.ErrorText,\n props: {\n style: {\n background: 'transparent',\n margin: '0px 0px 48px',\n border: 'none',\n color: '#788597',\n },\n },\n },\n {\n type: Elements.Button,\n props: {},\n },\n ],\n },\n [Steps.Decline]: {\n name: Steps.Decline,\n id: Steps.Decline,\n elements: [\n closeIconButton,\n {\n type: Elements.Image,\n props: {\n style: {\n margin: '120px 0px 16px',\n },\n attributes: {\n src: '/images/decline.svg',\n alt: 'decline',\n width: '80px',\n height: '80px',\n },\n },\n },\n {\n type: Elements.Title,\n props: {\n style: {\n padding: '8px 0px 6px',\n 'text-align': 'center',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n background: 'transparent',\n margin: '0px 0px 48px',\n border: 'none',\n color: '#788597',\n },\n },\n },\n\n {\n type: Elements.ErrorText,\n props: {},\n },\n {\n type: Elements.Button,\n props: {},\n },\n ],\n },\n [Steps.Error]: {\n name: Steps.Error,\n id: Steps.Error,\n elements: [\n closeIconButton,\n {\n type: Elements.Image,\n props: {\n style: {\n margin: '120px 0px 16px',\n },\n attributes: {\n src: '/images/decline.svg',\n alt: 'decline',\n width: '80px',\n height: '80px',\n },\n },\n },\n {\n type: Elements.Title,\n props: {\n style: {\n padding: '8px 0px 6px',\n 'text-align': 'center',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n background: 'transparent',\n margin: '0px 0px 48px',\n border: 'none',\n color: '#788597',\n },\n },\n },\n {\n type: Elements.ErrorText,\n props: {\n style: {\n margin: '20px 0px',\n },\n },\n },\n {\n type: Elements.Button,\n props: {},\n },\n ],\n },\n [Steps.Final]: {\n name: Steps.Final,\n id: Steps.Final,\n style: {},\n elements: [\n closeIconButton,\n {\n type: Elements.Image,\n props: {\n style: {\n margin: '170px auto 16px',\n 'align-self': 'center',\n },\n attributes: {\n src: '/images/final.svg',\n alt: 'final',\n width: '80px',\n height: '80px',\n },\n },\n },\n {\n type: Elements.Title,\n props: {\n style: {\n padding: '8px 0px 6px',\n 'text-align': 'none',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n margin: '0px 0px 60px',\n 'text-align': 'center',\n },\n },\n },\n\n {\n type: Elements.Input,\n props: {\n attributes: {\n name: 'first-name',\n type: 'text',\n placeholder: 'placeholder1',\n validate: () => true,\n defaultValue: 'John',\n },\n style: {},\n },\n },\n {\n type: Elements.Input,\n props: {\n attributes: {\n name: 'last-name',\n type: 'text',\n placeholder: 'placeholder2',\n validate: () => true,\n },\n style: {},\n },\n },\n {\n type: Elements.Button,\n props: {},\n },\n ],\n }\n}\n\nexport const uiTheme: IAppConfigurationUI = {\n general: {\n progress: false,\n borderRadius: '16px',\n padding: '16px',\n colors: {\n primary: '#7C3AED',\n secondary: '#0A0F1A',\n text: '#CBD5E1',\n danger: '#EF4444',\n },\n fonts: {\n name: 'Avenir, \"Avenir Next\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n weight: [400, 800],\n link: ''\n },\n },\n photo: {},\n paragraph: {},\n cameraButton: {},\n videoContainer: {},\n input: {},\n loader: {},\n button: {\n 'font-size': '16px',\n padding: '20px 20px',\n width: '100%',\n color: '#fff',\n 'font-weight': 700,\n 'border-radius': '12px',\n 'box-shadow': '0px 6px 9px 5px rgba(124, 58, 237, 0.15)',\n },\n buttonWithIcon: {\n 'font-size': '16px',\n padding: '20px 20px',\n width: '100%',\n color: '#fff',\n 'font-weight': 700,\n 'border-radius': '12px',\n 'box-shadow': '0px 6px 9px 5px rgba(124, 58, 237, 0.15)',\n },\n iconButton: {\n background: '#F2F3F4',\n width: '40px',\n height: '40px',\n position: 'absolute',\n top: '45px',\n right: '32px',\n },\n iconCloseButton: {\n background: '#F2F3F4',\n width: '40px',\n height: '40px',\n position: 'absolute',\n top: '45px',\n right: '32px',\n },\n navigationButtons: {\n props: {\n style: {\n display: 'flex',\n 'flex-direction': 'row',\n margin: '70px 0px 0px',\n padding: '0px',\n },\n },\n backButton: {\n type: 'button',\n props: {\n style: {\n width: '100%',\n margin: '67px 20px 0px 0px',\n padding: '0px',\n 'font-weight': 400,\n background: '#fff',\n color: '#6A6A6A',\n border: '1px solid #BFBFBF',\n 'box-shadow':\n '0px 6px 9px 5px rgba(0,122,255,0);-webkit-box-shadow: 0px 6px 9px 5px rgba(0,122,255,0);',\n },\n },\n },\n nextButton: {\n type: 'button',\n props: {\n style: {\n width: '100%',\n },\n },\n },\n },\n errorText: {\n border: '1px solid #DF2222',\n background: 'rgba(223, 34, 34, 0.2)',\n 'border-radius': '6px',\n padding: '8px',\n },\n settings: {\n cameraSettings: {\n sizeFactor: 1,\n imageType: IMAGE_TYPES.JPG,\n imageCompression: 0,\n isImageMirror: false,\n },\n selfieCameraSettings: {\n sizeFactor: 1,\n imageType: IMAGE_TYPES.JPG,\n imageCompression: 0,\n isImageMirror: true,\n },\n },\n layout: {\n padding: '16px',\n position: 'relative',\n background: 'linear-gradient(180deg, #FFFFFF 0%, #F8FAFC 100%)',\n },\n documentOptions: {\n options: {\n [DocumentType.OMANG]: {\n document: {\n type: DocumentType.OMANG,\n backSide: true,\n variant: DocumentVariant.REGULAR,\n },\n attributes: {\n icon: 'Card',\n width: 40,\n height: 40,\n },\n },\n [DocumentType.PASSPORT]: {\n document: {\n type: DocumentType.PASSPORT,\n backSide: false,\n variant: DocumentVariant.REGULAR,\n },\n attributes: {\n icon: 'PassportTwo',\n width: 40,\n height: 40,\n },\n },\n [DocumentType.DRIVERS_LICENSE]: {\n document: {\n type: DocumentType.DRIVERS_LICENSE,\n backSide: true,\n variant: DocumentVariant.REGULAR,\n },\n attributes: {\n icon: 'License',\n width: 40,\n height: 40,\n },\n },\n },\n props: {},\n descriptionProps: {\n style: {\n 'font-size': '12px',\n color: '#788597',\n margin: '3px 0px 0px 0px',\n hover: {\n color: '#788597',\n },\n active: {\n color: '#788597',\n },\n },\n },\n optionProps: {\n style: {\n background: '#fff',\n margin: '0 0 16px 0px',\n border: '1px solid #E2E8F0',\n 'border-radius': '12px',\n width: '100%',\n padding: '16px 18px',\n 'box-shadow': '0px 4px 12px 0px rgba(0, 0, 0, 0.05)',\n display: 'flex',\n 'text-align': 'left',\n hover: {\n border: '1px solid #7C3AED',\n background: '#FAFAFA',\n },\n active: {\n border: '2px solid #7C3AED',\n background: '#F5F3FF',\n },\n },\n },\n iconContainerProps: {\n style: {\n width: '45px',\n height: '45px',\n margin: '0px 15px 0px 0px',\n padding: '8px',\n background: '#EEF2FF',\n 'border-radius': '10px',\n active: {\n background: '#7C3AED',\n },\n },\n },\n iconProps: {\n style: {\n fill: '#7C3AED',\n active: {\n fill: '#fff',\n },\n },\n },\n titleProps: {\n style: {\n color: '#434345',\n 'text-align': 'left',\n margin: '4px 0px 0px',\n active: {\n color: '#434345',\n },\n },\n },\n },\n overlay: {\n selfie: {\n 'background-position-y': '30%'\n }\n },\n list: {\n titleProps: {},\n listProps: {},\n listElementProps: {},\n },\n container: {\n width: '100%',\n display: 'flex',\n 'justify-content': 'center',\n 'align-items': 'center',\n },\n image: {\n margin: '0px',\n },\n title: {\n 'font-weight': 700,\n 'font-size': '20px',\n 'text-align': 'center',\n color: '#001B39',\n },\n steps: stepsTheme,\n}\n","import { writable } from 'svelte/store';\nimport type { IAppConfigurationUI } from '../contexts/configuration';\nimport { uiTheme } from './default/theme'\n\nexport const uiPack = writable<IAppConfigurationUI>(uiTheme);\n\n","import merge from 'deepmerge';\nimport type { IStepConfiguration } from '../../contexts/configuration';\n\nexport const mergeStepConfig = (\n defaultConfig: IStepConfiguration,\n overrides: IStepConfiguration,\n): IStepConfiguration => {\n const mergedConfig = merge(defaultConfig, overrides);\n console.log(\"mergedConfig\", mergedConfig)\n return {\n ...mergedConfig,\n elements: overrides.elements || defaultConfig.elements,\n namespace: mergedConfig.namespace || mergedConfig.id || mergedConfig.name,\n };\n};\n\nexport const isUrl = (url: string) => {\n try {\n const urlStr = url.startsWith('http://') || url.startsWith('https://') ? url : `https://${url}`;\n new URL(urlStr);\n return true;\n } catch {\n return false;\n }\n}\n","import type { ICSSProperties } from '../../contexts/configuration';\n\nexport const injectPrimaryIntoLayoutGradient = (\n layoutStyles: ICSSProperties,\n primaryColor: string,\n): ICSSProperties => {\n if (typeof layoutStyles.background === 'string' && layoutStyles.background.includes('gradient')) {\n return {\n ...layoutStyles,\n background: `linear-gradient(180deg, #fff 0%, #fff 75%, ${primaryColor} 250%)`,\n };\n }\n return layoutStyles;\n};\n","import type { IAppConfiguration, IAppConfigurationUI, ICSSProperties, IStepConfiguration } from \"../contexts/configuration\";\nimport { mergeStepConfig } from \"../services/merge-service\";\nimport { injectPrimaryIntoLayoutGradient } from '../services/theme-manager';\nimport { makeStylesFromConfiguration } from '../utils/css-utils';\nimport merge from 'deepmerge';\n\nexport const getStepConfiguration = (configuration: IAppConfiguration, uiPack: IAppConfigurationUI, stepId: string) => {\n if (!uiPack.steps[stepId] && configuration.steps && configuration.steps[stepId]) {\n const step = configuration.steps[stepId];\n const uiStep = uiPack.steps[step.id];\n return mergeStepConfig(uiStep, configuration.steps[stepId]);\n }\n return mergeStepConfig(uiPack.steps[stepId], configuration.steps ? configuration.steps[stepId] : {} as IStepConfiguration);\n}\n\nexport const getLayoutStyles = (configuration: IAppConfiguration, uiPack: IAppConfigurationUI, step: IStepConfiguration) => {\n return makeStylesFromConfiguration(\n merge(\n injectPrimaryIntoLayoutGradient(uiPack.layout, configuration.general?.colors?.primary || uiPack.general.colors.primary),\n configuration.layout || {},\n ),\n step.style,\n );\n}\n\nexport const getComponentStyles = (uiPackComponentStyle: ICSSProperties, configurationStyles: ICSSProperties, style: ICSSProperties) => {\n return makeStylesFromConfiguration(\n merge(uiPackComponentStyle, configurationStyles || {}),\n style,\n );\n}\n","import { IMAGE_TYPES } from 'jslib-html5-camera-photo';\nimport { DocumentType } from '../../contexts/app-state';\nimport { DocumentVariant } from '../../contexts/app-state/types';\nimport { Elements, Steps } from '../../contexts/configuration';\nimport type { IElement, IAppConfigurationUI, TSteps } from '../../contexts/configuration';\n\nconst backIconButton: IElement = {\n type: Elements.IconButton,\n props: {\n attributes: {\n src: '/images/back.svg',\n alt: 'back',\n width: '28px',\n height: '28px',\n },\n style: {\n left: '26px',\n background: 'transparent',\n },\n },\n};\n\nconst closeIconButton: IElement = {\n type: Elements.IconCloseButton,\n props: {\n attributes: {\n src: '/images/close.svg',\n alt: 'back',\n width: '18px',\n height: '18px',\n },\n style: {\n right: '26px',\n background: 'transparent',\n },\n },\n};\n\nconst backWhiteIconButton: IElement = {\n type: Elements.IconButton,\n props: {\n attributes: {\n ...backIconButton.props.attributes,\n src: '/images/back-white.svg',\n },\n style: backIconButton.props.style,\n },\n};\n\nconst stepsTheme: TSteps = {\n [Steps.Welcome]: {\n name: Steps.Welcome,\n id: Steps.Welcome,\n namespace: 'welcome',\n elements: [\n backWhiteIconButton,\n closeIconButton,\n {\n type: Elements.Title,\n props: {\n style: {\n padding: '28px 0px 12px',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n 'text-align': 'center',\n margin: '0px 0px 8px',\n 'font-size': '14px',\n color: '#926A90',\n },\n context: 'estimatedTime',\n },\n },\n {\n type: Elements.List,\n props: {\n style: {\n margin: '16px 0px',\n 'text-align': 'left',\n },\n },\n },\n {\n type: Elements.Image,\n props: {\n style: {\n margin: '0px auto 25px',\n 'flex-grow': 1,\n },\n attributes: {\n src: '/images/welcome.svg',\n alt: 'welcome',\n width: '180px',\n height: '180px',\n },\n },\n },\n {\n type: Elements.Button,\n props: {\n style: {\n }\n },\n },\n {\n type: Elements.PrivacyLink,\n props: {\n style: {\n margin: '16px 0px 24px',\n 'text-align': 'center',\n 'font-size': '12px',\n color: '#926A90',\n },\n },\n },\n ],\n },\n [Steps.DocumentSelection]: {\n name: Steps.DocumentSelection,\n id: Steps.DocumentSelection,\n elements: [\n backWhiteIconButton,\n closeIconButton,\n {\n type: Elements.Title,\n props: {\n style: {\n padding: '5px 24px 18px',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n margin: '0 20px 30px 20px',\n },\n context: 'description',\n },\n },\n ],\n },\n [Steps.DocumentPhoto]: {\n name: Steps.DocumentPhoto,\n id: Steps.DocumentPhoto,\n elements: [\n backWhiteIconButton,\n {\n type: Elements.Title,\n props: {\n style: {\n color: '#fff',\n 'font-weight': 700,\n \"font-size\": \"18px\",\n 'align-self': 'center',\n padding: '5px 0px 18px 0px',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n margin: '0px 20px 18px 40px',\n color: '#DDDDDD',\n 'text-align': 'center',\n },\n },\n },\n {\n type: Elements.Loader,\n props: {},\n },\n {\n type: Elements.VideoContainer,\n props: {\n style: {\n margin: '0px',\n },\n },\n },\n {\n type: Elements.CameraButton,\n props: {\n style: {\n margin: '24px 0px 30px',\n },\n },\n },\n ],\n },\n [Steps.CheckDocument]: {\n name: Steps.CheckDocument,\n id: Steps.CheckDocument,\n elements: [\n backWhiteIconButton,\n closeIconButton,\n {\n type: Elements.Title,\n props: {\n style: {\n padding: '8px 30px 18px',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n margin: '0px 0px 48px',\n },\n },\n },\n {\n type: Elements.Photo,\n props: {\n style: {\n margin: '0px',\n },\n },\n },\n ],\n },\n [Steps.DocumentPhotoBackStart]: {\n name: Steps.DocumentPhotoBackStart,\n id: Steps.DocumentPhotoBackStart,\n style: {},\n elements: [\n backWhiteIconButton,\n closeIconButton,\n {\n type: Elements.Title,\n id: 'welcome-title1',\n props: {\n style: {\n padding: '5px 24px 18px',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n margin: '0',\n },\n },\n },\n {\n type: Elements.Image,\n props: {\n style: {\n margin: '8px auto',\n 'flex-grow': 1,\n },\n attributes: {\n src: '/images/document-photo-back-start.svg',\n alt: 'document-photo-back-start',\n width: '260px',\n height: '212px',\n },\n },\n },\n {\n type: Elements.Button,\n props: {\n style: {\n margin: '0px 0px 100px 0px',\n },\n },\n },\n ],\n },\n [Steps.DocumentPhotoBack]: {\n name: Steps.DocumentPhotoBack,\n id: Steps.DocumentPhotoBack,\n elements: [\n backWhiteIconButton,\n {\n type: Elements.Title,\n props: {\n style: {\n color: '#fff',\n 'font-weight': 700,\n 'align-self': 'center',\n padding: '8px 0px 18px 0px',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n margin: '0px 20px 18px 40px',\n color: '#DDDDDD',\n },\n },\n },\n {\n type: Elements.VideoContainer,\n props: {\n style: {\n margin: '0px',\n },\n },\n },\n {\n type: Elements.Loader,\n props: {},\n },\n {\n type: Elements.CameraButton,\n props: {\n style: {\n margin: '24px 0px 30px',\n },\n },\n },\n ],\n },\n [Steps.CheckDocumentPhotoBack]: {\n name: Steps.CheckDocumentPhotoBack,\n id: Steps.CheckDocumentPhotoBack,\n elements: [\n backWhiteIconButton,\n closeIconButton,\n {\n type: Elements.Title,\n props: {\n style: {\n padding: '5px 24px 18px',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n margin: '0px 0px 48px',\n },\n },\n },\n {\n type: Elements.Photo,\n props: {\n style: {\n margin: '0px',\n },\n },\n },\n ],\n },\n [Steps.SelfieStart]: {\n name: Steps.SelfieStart,\n id: Steps.SelfieStart,\n style: {},\n elements: [\n backWhiteIconButton,\n closeIconButton,\n {\n type: Elements.Title,\n props: {\n style: {\n padding: '5px 24px 18px',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n margin: '0',\n },\n },\n },\n {\n type: Elements.Image,\n props: {\n style: {\n margin: '8px auto',\n 'flex-grow': 1,\n },\n attributes: {\n src: '/images/selfie-start.svg',\n alt: 'selfie-start',\n width: '300x',\n height: '300px',\n },\n },\n },\n {\n type: Elements.Button,\n props: {},\n },\n ],\n },\n [Steps.Selfie]: {\n name: Steps.Selfie,\n id: Steps.Selfie,\n elements: [\n backWhiteIconButton,\n {\n type: Elements.Title,\n props: {\n style: {\n color: '#fff',\n 'font-weight': 700,\n 'align-self': 'center',\n padding: '48px 0px 18px 0px',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n margin: '0px 20px 18px 40px',\n color: '#DDDDDD',\n },\n },\n },\n {\n type: Elements.VideoContainer,\n props: {\n style: {\n margin: '0px',\n },\n },\n },\n {\n type: Elements.Loader,\n props: {},\n },\n {\n type: Elements.CameraButton,\n props: {\n style: {\n margin: '24px 0px 30px',\n },\n },\n },\n ],\n },\n [Steps.CheckSelfie]: {\n name: Steps.CheckSelfie,\n id: Steps.CheckSelfie,\n elements: [\n backWhiteIconButton,\n closeIconButton,\n {\n type: Elements.Title,\n props: {\n style: {\n padding: '5px 24px 18px',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n margin: '0px 0px 48px',\n },\n },\n },\n {\n type: Elements.Photo,\n props: {\n style: {\n margin: '0px',\n },\n },\n },\n ],\n },\n [Steps.ReviewSubmit]: {\n name: Steps.ReviewSubmit,\n id: Steps.ReviewSubmit,\n namespace: 'reviewSubmit',\n elements: [\n backWhiteIconButton,\n closeIconButton,\n {\n type: Elements.Title,\n props: {\n style: {\n padding: '5px 24px 18px',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n margin: '0px 0px 24px',\n },\n },\n },\n ],\n },\n [Steps.Loading]: {\n name: Steps.Loading,\n id: Steps.Loading,\n elements: [],\n },\n [Steps.Resubmission]: {\n name: Steps.Resubmission,\n id: Steps.Resubmission,\n elements: [\n closeIconButton,\n {\n type: Elements.Title,\n props: {\n style: {\n padding: '8px 0px 6px',\n 'text-align': 'center',\n },\n },\n },\n {\n type: Elements.Image,\n props: {\n style: {\n margin: '120px 0px 16px',\n 'align-self': 'center',\n },\n attributes: {\n src: '/images/resubmit.svg',\n alt: 'decline',\n width: '80px',\n height: '80px',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n background: 'transparent',\n margin: '0px 0px 48px',\n border: 'none',\n color: '#788597',\n },\n },\n },\n\n {\n type: Elements.ErrorText,\n props: {\n style: {\n background: 'transparent',\n margin: '0px 0px 48px',\n border: 'none',\n color: '#788597',\n },\n },\n },\n {\n type: Elements.Button,\n props: {},\n },\n ],\n },\n [Steps.Decline]: {\n name: Steps.Decline,\n id: Steps.Decline,\n elements: [\n closeIconButton,\n {\n type: Elements.Title,\n props: {\n style: {\n padding: '8px 0px 6px',\n 'text-align': 'center',\n },\n },\n },\n {\n type: Elements.Image,\n props: {\n style: {\n margin: '120px 0px 16px',\n },\n attributes: {\n src: '/images/decline.svg',\n alt: 'decline',\n width: '80px',\n height: '80px',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n background: 'transparent',\n margin: '0px 0px 48px',\n border: 'none',\n color: '#788597',\n },\n },\n },\n\n {\n type: Elements.ErrorText,\n props: {},\n },\n {\n type: Elements.Button,\n props: {},\n },\n ],\n },\n [Steps.Error]: {\n name: Steps.Error,\n id: Steps.Error,\n elements: [\n closeIconButton,\n {\n type: Elements.Title,\n props: {\n style: {\n padding: '8px 0px 6px',\n 'text-align': 'center',\n },\n },\n },\n {\n type: Elements.Image,\n props: {\n style: {\n margin: '120px 0px 16px',\n },\n attributes: {\n src: '/images/decline.svg',\n alt: 'decline',\n width: '80px',\n height: '80px',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n background: 'transparent',\n margin: '0px 0px 48px',\n border: 'none',\n color: '#788597',\n },\n },\n },\n {\n type: Elements.ErrorText,\n props: {\n style: {\n margin: '20px 0px',\n },\n },\n },\n {\n type: Elements.Button,\n props: {},\n },\n ],\n },\n [Steps.Final]: {\n name: Steps.Final,\n id: Steps.Final,\n style: {},\n elements: [\n closeIconButton,\n {\n type: Elements.Title,\n props: {\n style: {\n padding: '8px 0px 6px',\n 'text-align': 'none',\n },\n },\n },\n {\n type: Elements.Image,\n props: {\n style: {\n margin: '170px auto 16px',\n 'align-self': 'center',\n },\n attributes: {\n src: '/images/final.svg',\n alt: 'final',\n width: '80px',\n height: '80px',\n },\n },\n },\n {\n type: Elements.Paragraph,\n props: {\n style: {\n margin: '0px 0px 60px',\n 'text-align': 'center',\n },\n },\n },\n\n {\n type: Elements.Input,\n props: {\n attributes: {\n name: 'first-name',\n type: 'text',\n placeholder: 'placeholder1',\n validate: () => true,\n defaultValue: 'John',\n },\n style: {},\n },\n },\n {\n type: Elements.Input,\n props: {\n attributes: {\n name: 'last-name',\n type: 'text',\n placeholder: 'placeholder2',\n validate: () => true,\n },\n style: {},\n },\n },\n {\n type: Elements.Button,\n props: {},\n },\n ],\n }\n}\n\nexport const uiTheme: IAppConfigurationUI = {\n general: {\n progress: false,\n borderRadius: '16px',\n padding: '24px',\n colors: {\n primary: '#F260FF',\n secondary: '#7000FF',\n text: '#788597',\n danger: 'rgba(173, 0, 0, 0.8);',\n },\n fonts: {\n name: 'IBM Plex Mono',\n weight: [400, 500, 700],\n link: \"https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;700&display=swap\"\n },\n },\n photo: {},\n paragraph: {\n color: \"#926A90\",\n \"font-size\": \"16x\",\n },\n cameraButton: {},\n videoContainer: {},\n input: {},\n loader: {},\n button: {\n 'font-size': '16px',\n padding: '15px 20px',\n width: '100%',\n color: '#fff',\n background: \"linear-gradient(267.68deg, var(--primary-color) 23.95%, var(--secondary-color) 95.08%)\",\n 'font-weight': 700,\n 'border-radius': '100px',\n 'box-shadow': '0px 6px 9px 5px #007AFF1a;-webkit-box-shadow: 0px 6px 9px 5px #007AFF1a;',\n },\n buttonWithIcon: {\n 'font-size': '16px',\n padding: '20px 20px',\n width: '100%',\n color: '#fff',\n 'font-weight': 700,\n 'border-radius': '12px',\n 'box-shadow': '0px 6px 9px 5px #007AFF1a;-webkit-box-shadow: 0px 6px 9px 5px #007AFF1a;',\n },\n iconButton: {\n background: '#F2F3F4',\n width: '40px',\n height: '40px',\n position: 'absolute',\n top: '45px',\n right: '32px',\n },\n iconCloseButton: {\n background: '#F2F3F4',\n width: '40px',\n height: '40px',\n position: 'absolute',\n top: '45px',\n right: '32px',\n },\n navigationButtons: {\n props: {\n style: {\n display: 'flex',\n 'flex-direction': 'column-reverse',\n margin: '70px 0px 0px',\n padding: '0px',\n },\n },\n backButton: {\n type: 'button',\n props: {\n style: {\n width: '100%',\n margin: '32px 0px 0px 0px',\n padding: '15px 20px',\n 'font-weight': 400,\n background: {\n color: \"var(--primary-color)\",\n opacity: 0.2\n },\n color: '#fff',\n border: '1px solid var(--primary-color)',\n 'box-shadow':\n '0px 3px 10px rgba(0, 0, 0, 0.05), 0px 6px 30px rgba(0, 122, 255, 0.1)',\n },\n },\n },\n nextButton: {\n type: 'button',\n props: {\n style: {\n 'font-size': '16px',\n padding: '15px 20px',\n width: '100%',\n color: '#fff',\n 'font-weight': 700,\n 'border-radius': '100px',\n 'box-shadow': '0px 6px 9px 5px #007AFF1a;-webkit-box-shadow: 0px 6px 9px 5px #007AFF1a;',\n },\n },\n },\n },\n errorText: {\n border: '1px solid #DF2222',\n background: 'rgba(223, 34, 34, 0.2)',\n 'border-radius': '6px',\n padding: '8px',\n },\n settings: {\n cameraSettings: {\n sizeFactor: 1,\n imageType: IMAGE_TYPES.JPG,\n imageCompression: 0,\n isImageMirror: false,\n },\n selfieCameraSettings: {\n sizeFactor: 1,\n imageType: IMAGE_TYPES.JPG,\n imageCompression: 0,\n isImageMirror: true,\n },\n },\n layout: {\n padding: '40px',\n position: 'relative',\n background: '#000',\n },\n documentOptions: {\n options: {\n [DocumentType.ID_CARD]: {\n document: {\n type: DocumentType.ID_CARD,\n backSide: true,\n variant: DocumentVariant.REGULAR,\n },\n attributes: {\n icon: 'Card',\n width: 40,\n height: 40,\n },\n },\n [DocumentType.DRIVERS_LICENSE]: {\n document: {\n type: DocumentType.DRIVERS_LICENSE,\n backSide: true,\n variant: DocumentVariant.REGULAR,\n },\n attributes: {\n icon: 'License',\n width: 40,\n height: 40,\n },\n },\n [DocumentType.PASSPORT]: {\n document: {\n type: DocumentType.PASSPORT,\n backSide: false,\n variant: DocumentVariant.REGULAR,\n },\n attributes: {\n icon: 'PassportTwo',\n width: 40,\n height: 40,\n },\n },\n [DocumentType.VOTER_ID]: {\n document: {\n type: DocumentType.VOTER_ID,\n backSide: true,\n variant: DocumentVariant.REGULAR,\n },\n attributes: {\n icon: 'Voter',\n width: 40,\n height: 40,\n },\n },\n },\n props: {},\n descriptionProps: {\n style: {\n 'font-size': '12px',\n color: '#926A90',\n margin: '3px 0px 0px 0px',\n hover: {\n color: '#926A90',\n },\n active: {\n color: '#926A90',\n },\n },\n },\n optionProps: {\n style: {\n background: {\n color: \"var(--primary-color)\",\n opacity: 0.2,\n },\n margin: '0 0 22px 0px',\n border: '1px solid var(--primary-color)',\n 'border-radius': '13px',\n width: '100%',\n padding: '14px 18px',\n 'box-shadow':\n '0px 6px 30px 0px #007AFF1a , 0px 3px 10px 0px #0000000a ;-webkit-box-shadow: 0px 6px 30px 0px #007AFF1a , 0px 3px 10px 0px #0000000a ;',\n display: 'flex',\n 'text-align': 'left',\n hover: {\n border: '1px solid var(--primary-color)',\n background: {\n color: \"var(--primary-color)\",\n opacity: 0.4,\n },\n },\n active: {\n border: '1px solid var(--primary-color)',\n background: {\n color: \"var(--primary-color)\",\n opacity: 0.4,\n },\n },\n },\n },\n iconContainerProps: {\n style: {\n width: '45px',\n height: '45px',\n margin: '0px 15px 0px 0px',\n padding: '0px',\n background: 'transparent',\n hover: {\n background: 'transparent'\n },\n active: {\n background: 'transparent'\n },\n },\n },\n iconProps: {\n style: {\n },\n },\n titleProps: {\n style: {\n color: '#fff',\n 'text-align': 'left',\n margin: '4px 0px 0px',\n hover: {\n color: '#fff'\n },\n active: {\n color: '#fff'\n },\n },\n },\n },\n overlay: {\n selfie: {\n 'background-position-y': '30%'\n }\n },\n list: {\n titleProps: {},\n listProps: {},\n listElementProps: {},\n },\n container: {\n width: '100%',\n display: 'flex',\n 'justify-content': 'center',\n 'align-items': 'center',\n },\n image: {\n margin: '0px',\n },\n title: {\n 'font-weight': 700,\n 'font-size': '27px',\n 'text-align': 'center',\n color: '#fff',\n },\n steps: stepsTheme,\n}\n","export { uiPack } from \"./store\";\nexport { getStepConfiguration, getComponentStyles, getLayoutStyles } from './utils';\nimport { uiTheme as future } from './future/theme';\nimport { uiTheme as blue } from './default/theme';\nexport const packs = { future, default: blue };\n","<script lang=\"ts\">\n import {\n configuration as globalConfiguration,\n } from '../../contexts/configuration';\n import type { IElementProps } from '../../contexts/configuration';\n import { makeStylesFromConfiguration } from '../../utils/css-utils';\n\n import merge from 'deepmerge';\n import { uiPack } from '../../ui-packs';\n\n export let configuration: IElementProps;\n export let isBack = false;\n\n const background = !isBack\n ? $globalConfiguration.button?.background ||\n $uiPack.button.background ||\n $globalConfiguration.general?.colors?.primary ||\n $uiPack.general.colors.primary\n : undefined;\n\n const styleProps = {\n ...configuration?.style,\n background,\n };\n\n const buttonConfiguration = isBack ? configuration?.style : $globalConfiguration.button;\n\n const style = makeStylesFromConfiguration(\n merge($uiPack.button, buttonConfiguration || {}),\n styleProps,\n );\n</script>\n\n<button {style} on:click>\n <slot />\n</button>\n\n<style>\n button {\n cursor: pointer;\n border: var(--border);\n outline: none;\n padding: var(--padding);\n font-size: var(--font-size);\n font-weight: var(--font-weight);\n width: var(--width);\n background: var(--background);\n color: var(--color);\n border-radius: var(--border-radius);\n box-shadow: var(--box-shadow);\n margin: var(--margin);\n }\n</style>\n","<script lang=\"ts\">\n import merge from 'deepmerge';\n import { configuration } from '../../../contexts/configuration';\n import type { ICSSProperties } from '../../../contexts/configuration';\n import { makesLocalStyles } from '../../../utils/css-utils';\n\n const loader = {\n background: $configuration.general.colors.primary,\n };\n\n const styleProps = merge(loader, $configuration.loader ?? {}) as ICSSProperties;\n\n const style = makesLocalStyles(styleProps);\n</script>\n\n<div {style} class=\"loader small\"></div>\n\n<style>\n .loader {\n border-radius: 50%;\n animation: loader-rotate 1s linear infinite;\n }\n\n .small {\n width: 41px;\n height: 41px;\n border: 4px solid #fff;\n border-right-color: transparent;\n }\n\n @keyframes loader-rotate {\n 0% {\n transform: rotate(0);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n</style>\n","<script lang=\"ts\">\n import { goToNextStep } from '../../contexts/navigation';\n import type { IElementProps } from '../../contexts/configuration';\n import { configuration as globalConfiguration } from '../../contexts/configuration';\n import { currentStepId } from '../../contexts/app-state';\n import { makeStylesFromConfiguration } from '../../utils/css-utils';\n import { Loader } from './Loader';\n import merge from 'deepmerge';\n import { uiPack } from '../../ui-packs';\n\n // Note: isDisabled is mutated internally to prevent double-clicks during navigation\n // This is intentional behavior for UX - consider refactoring to use internal state if needed\n export let isDisabled = false;\n export let isLoading = false;\n export let configuration: IElementProps;\n export let skipType: string | undefined = undefined;\n\n const background =\n $globalConfiguration.button?.background ||\n $uiPack.button.background ||\n $globalConfiguration.general?.colors?.primary ||\n $uiPack.general.colors.primary;\n\n const styleProps = {\n ...configuration?.style,\n background,\n };\n\n const style = makeStylesFromConfiguration(\n merge($uiPack.button, $globalConfiguration.button || {}),\n styleProps,\n );\n\n let disabled: boolean;\n const onClick = () => {\n if (disabled) return;\n goToNextStep(currentStepId, $globalConfiguration, $currentStepId, skipType);\n isDisabled = true;\n };\n\n $: disabled = isDisabled || isLoading;\n</script>\n\n<button {style} {disabled} on:click={onClick}>\n {#if isLoading}\n <div class=\"loader-container\">\n <Loader />\n </div>\n {/if}\n <slot />\n</button>\n\n<style>\n button:disabled .loader-container {\n margin-inline-end: 1rem;\n }\n\n button {\n cursor: pointer;\n border: none;\n outline: none;\n padding: var(--padding);\n font-size: var(--font-size);\n font-weight: var(--font-weight);\n width: var(--width);\n background: var(--background);\n color: var(--color);\n border-radius: var(--border-radius);\n box-shadow: var(--box-shadow);\n margin: var(--margin);\n position: var(--position);\n bottom: var(--bottom);\n left: var(--left);\n }\n\n button:disabled {\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: not-allowed;\n opacity: 0.5;\n }\n</style>\n","<script lang=\"ts\">\n import { configuration as globalConfiguration } from '../../contexts/configuration';\n import type { ICSSProperties, IElementProps } from '../../contexts/configuration';\n import { getComponentStyles, uiPack } from '../../ui-packs';\n\n export let configuration: IElementProps;\n const styleProps = configuration.style as ICSSProperties;\n\n const style = getComponentStyles($uiPack.title, $globalConfiguration.title || {}, styleProps);\n</script>\n\n<h1 {style}>\n <slot />\n</h1>\n\n<style>\n h1 {\n font-size: var(--font-size);\n font-weight: var(--font-weight);\n margin: var(--margin);\n padding: var(--padding);\n text-align: var(--text-align);\n color: var(--color);\n align-self: var(--align-self);\n z-index: 2;\n }\n</style>\n","<script lang=\"ts\">\n import { configuration as globalConfiguration } from '../../contexts/configuration';\n import type { ICSSProperties, IElementProps, IAttributes } from '../../contexts/configuration';\n import { getComponentStyles, uiPack } from '../../ui-packs';\n\n export let configuration: IElementProps;\n const styleProps = configuration.style as ICSSProperties;\n const attributes = configuration.attributes as IAttributes;\n const style = getComponentStyles($uiPack.image, $globalConfiguration.image, styleProps);\n</script>\n\n<div {style} height={attributes.height} width={attributes.width} class=\"container\">\n {@html attributes.src}\n</div>\n\n<style>\n .container {\n margin: var(--margin);\n flex-grow: var(--flex-grow, 0);\n text-align: center;\n }\n .container > :global(svg) {\n max-width: 100%;\n }\n</style>\n","<script lang=\"ts\">\n import { configuration as globalConfiguration } from '../../contexts/configuration';\n import type { ICSSProperties, IElementProps } from '../../contexts/configuration';\n import { getComponentStyles, uiPack } from '../../ui-packs';\n\n export let configuration: IElementProps;\n export let active = false;\n\n const styleProps = configuration.style as ICSSProperties;\n\n const style = getComponentStyles($uiPack.paragraph, $globalConfiguration.paragraph || {}, styleProps);\n</script>\n\n<p {style} class:active>\n <slot />\n</p>\n\n<style>\n p {\n transition: all 0.1s ease-in;\n font-size: var(--font-size);\n font-weight: var(--font-weight);\n margin: var(--margin);\n text-align: var(--text-align);\n color: var(--color);\n z-index: 2;\n align-self: var(--align-self);\n }\n p.active {\n color: var(--active-color);\n }\n</style>\n","<script lang=\"ts\">\n import { configuration as globalConfiguration } from '../../contexts/configuration';\n import type { ICSSProperties, IElementProps } from '../../contexts/configuration';\n import { getComponentStyles, uiPack } from '../../ui-packs';\n\n export let configuration: IElementProps;\n export let active = false;\n const styleProps = configuration.style as ICSSProperties;\n\n const style = getComponentStyles($uiPack.container, $globalConfiguration.container, styleProps);\n</script>\n\n<div {style} class=\"container\" class:active>\n <slot />\n</div>\n\n<style>\n .container {\n margin: var(--margin);\n padding: var(--padding);\n width: var(--width);\n min-width: var(--width);\n height: var(--height);\n background: var(--background);\n border-radius: var(--border-radius);\n display: var(--display);\n align-items: var(--align-items);\n justify-content: var(--justify-content);\n transition: all 0.1s ease-in;\n }\n .container.active {\n background: var(--active-background);\n }\n</style>\n","<script lang=\"ts\">\n import { configuration as globalConfiguration } from '../../contexts/configuration';\n import type { IAttributes, ICSSProperties, IElementProps } from '../../contexts/configuration';\n import { getComponentStyles, uiPack } from '../../ui-packs';\n\n export let configuration: IElementProps;\n const styleProps = configuration.style as ICSSProperties;\n const attributes = configuration.attributes as IAttributes;\n\n const style = getComponentStyles($uiPack.iconButton, $globalConfiguration.iconButton, styleProps);\n</script>\n\n<button {style} on:click width={attributes.width} height={attributes.height}>\n {@html attributes.src}\n</button>\n\n<style>\n button {\n cursor: pointer;\n border: none;\n outline: none;\n width: var(--width);\n min-width: var(--width);\n height: var(--height);\n background: var(--background);\n border-radius: var(--border-radius);\n position: var(--position);\n display: var(--display);\n align-items: var(--align-items);\n justify-content: var(--justify-content);\n top: var(--top);\n left: var(--left);\n right: var(--right);\n z-index: 3;\n }\n</style>\n","<script lang=\"ts\">\n import { configuration as globalConfiguration } from '../../contexts/configuration';\n import type { IAttributes, ICSSProperties, IElementProps } from '../../contexts/configuration';\n import { getComponentStyles, uiPack } from '../../ui-packs';\n\n export let configuration: IElementProps;\n const styleProps = configuration.style as ICSSProperties;\n const attributes = configuration.attributes as IAttributes;\n\n const style = getComponentStyles($uiPack.buttonWithIcon, $globalConfiguration.buttonWithIcon, styleProps);\n</script>\n\n<button {style} on:click>\n <slot />\n <img\n src={attributes.src}\n alt={attributes.alt}\n width={attributes.width}\n height={attributes.height}\n />\n</button>\n\n<style>\n button {\n cursor: pointer;\n display: flex;\n justify-content: space-between;\n border: none;\n outline: none;\n padding: var(--padding);\n font-size: var(--font-size);\n width: var(--width);\n background: var(--background);\n color: var(--color);\n border-radius: var(--border-radius);\n }\n</style>\n","<script lang=\"ts\">\n import merge from 'deepmerge';\n import { configuration } from '../../contexts/configuration';\n import type { ICSSProperties } from '../../contexts/configuration';\n import { uiPack } from '../../ui-packs';\n import { makesLocalStyles } from '../../utils/css-utils';\n\n export let size: 'small' | 'medium' = 'medium';\n export let fullPage = true;\n\n const loader = {\n background: $configuration.general?.colors.primary || $uiPack.general.colors.primary,\n };\n\n const styleProps = merge(loader, $configuration.loader || $uiPack.loader) as ICSSProperties;\n\n const style = makesLocalStyles(styleProps);\n</script>\n\n{#if fullPage}\n <div class=\"container\">\n <div class=\"loader-wrapper\">\n <div {style} class:small={size === 'small'} class:medium={size === 'medium'} class=\"loader\"></div>\n </div>\n </div>\n{:else}\n <div class=\"loader-wrapper\">\n <div {style} class:small={size === 'small'} class:medium={size === 'medium'} class=\"loader\"></div>\n </div>\n{/if}\n\n<style>\n .container {\n width: 100%;\n height: 100%;\n top: 0px;\n left: 0px;\n position: absolute;\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: white;\n }\n\n .loader-wrapper {\n position: relative;\n }\n\n .loader {\n position: relative;\n top: 50%;\n margin: -28px auto 0;\n border-radius: 50%;\n animation: loader-rotate 1s linear infinite;\n }\n\n .small {\n width: 41px;\n height: 41px;\n border: 4px solid var(--background);\n border-right-color: transparent;\n }\n\n .medium {\n width: 56px;\n height: 56px;\n border: 8px solid var(--background);\n border-right-color: transparent;\n }\n\n .small::after {\n content: '';\n width: 4px;\n height: 4px;\n background: var(--background);\n border-radius: 50%;\n position: absolute;\n top: 1px;\n left: 27px;\n }\n\n .medium::after {\n content: '';\n width: 8px;\n height: 8px;\n background: var(--background);\n border-radius: 50%;\n position: absolute;\n top: -1px;\n left: 33px;\n }\n\n @keyframes loader-rotate {\n 0% {\n transform: rotate(0);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n</style>\n","<script lang=\"ts\">\n import merge from 'deepmerge';\n import { configuration as globalConfiguration } from '../../contexts/configuration';\n import type { ICSSProperties, IElementProps } from '../../contexts/configuration';\n import { uiPack } from '../../ui-packs';\n import { makeStylesFromConfiguration } from '../../utils/css-utils';\n import Loader from '../Loader/Loader.svelte';\n\n export let configuration: IElementProps;\n export let src: string;\n const styleProps = configuration.style as ICSSProperties;\n\n const defaultStyle = {\n 'border-radius': $globalConfiguration.general?.borderRadius || $uiPack.general.borderRadius,\n };\n\n const style = makeStylesFromConfiguration(\n merge(defaultStyle, $globalConfiguration.photo || {}),\n styleProps,\n );\n</script>\n\n<div class=\"container\">\n {#if src}\n <img {src} alt=\"result\" {style} />\n {:else}\n <Loader size=\"small\" fullPage={false} />\n {/if}\n</div>\n\n<style>\n div.container {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n }\n img {\n border-radius: var(--border-radius);\n margin: var(--margin);\n max-width: 100%;\n max-height: 35vh;\n animation: slide-in-bottom 0.8s linear both;\n }\n @keyframes slide-in-bottom {\n 0% {\n transform: translateY(20px);\n opacity: 0;\n }\n 70% {\n transform: translateY(-5px);\n opacity: 1;\n }\n 100% {\n transform: translateY(0);\n opacity: 1;\n }\n }\n</style>\n","<script lang=\"ts\">\n import type { ICSSProperties, IElementProps } from '../../contexts/configuration';\n import { makesLocalStyles } from '../../utils/css-utils';\n\n export let configuration: IElementProps = { style: {} };\n const styleProps = (configuration?.style || {}) as ICSSProperties;\n\n const style = makesLocalStyles(styleProps);\n</script>\n\n<li {style}>\n <span class=\"checkmark\">✓</span>\n <slot />\n</li>\n\n<style>\n li {\n font-size: var(--font-size, 15px);\n font-weight: var(--font-weight, 500);\n margin: var(--margin, 12px 0);\n text-align: var(--text-align, left);\n color: var(--color, #1E293B);\n z-index: 2;\n display: flex;\n align-items: center;\n gap: 12px;\n list-style: none;\n }\n\n .checkmark {\n color: #10B981; /* Emerald - Brand Guide */\n font-weight: 700;\n font-size: 18px;\n flex-shrink: 0;\n }\n</style>\n","import { DocumentType } from '../../contexts/app-state';\n\nexport const getOverlayDocumentType = (\n documentType: DocumentType,\n): 'card' | 'passport' | 'a4' | 'selfie' => {\n const cardOverlayDocumentTypes = [\n DocumentType.DRIVERS_LICENSE,\n DocumentType.RESIDENCE_PERMIT,\n DocumentType.ID_CARD,\n DocumentType.VOTER_ID,\n DocumentType.WORK_PERMIT,\n DocumentType.VISA,\n DocumentType.OMANG, // Botswana National ID - card format\n ];\n\n if (cardOverlayDocumentTypes.includes(documentType)) {\n return 'card';\n }\n if (documentType === DocumentType.PASSPORT) {\n return 'passport';\n }\n if (documentType === DocumentType.SELFIE) {\n return 'selfie';\n }\n return 'a4';\n};\n","<script lang=\"ts\">\n import { getOverlayDocumentType } from './utils';\n import { DocumentType } from '../../contexts/app-state';\n\n export let type: DocumentType;\n export let isInFrame: boolean = false;\n\n const overlayType = getOverlayDocumentType(type);\n</script>\n\n<div class=\"overlay-container\">\n <!-- Dark overlay with cutout -->\n <svg class=\"overlay-svg\" viewBox=\"0 0 100 100\" preserveAspectRatio=\"none\">\n <defs>\n <mask id=\"frameMask-{overlayType}\">\n <rect width=\"100%\" height=\"100%\" fill=\"white\"/>\n {#if overlayType === 'card'}\n <rect x=\"10\" y=\"30\" width=\"80\" height=\"40\" rx=\"3\" fill=\"black\"/>\n {:else if overlayType === 'passport'}\n <rect x=\"20\" y=\"15\" width=\"60\" height=\"70\" rx=\"3\" fill=\"black\"/>\n {:else if overlayType === 'selfie'}\n <ellipse cx=\"50\" cy=\"45\" rx=\"30\" ry=\"38\" fill=\"black\"/>\n {:else}\n <rect x=\"15\" y=\"15\" width=\"70\" height=\"70\" rx=\"2\" fill=\"black\"/>\n {/if}\n </mask>\n </defs>\n <rect width=\"100%\" height=\"100%\" fill=\"rgba(0,0,0,0.6)\" mask=\"url(#frameMask-{overlayType})\"/>\n </svg>\n\n <!-- Frame border with corners -->\n <div class=\"frame {overlayType}\" class:in-frame={isInFrame}>\n <div class=\"corner top-left\" class:active={isInFrame}></div>\n <div class=\"corner top-right\" class:active={isInFrame}></div>\n <div class=\"corner bottom-left\" class:active={isInFrame}></div>\n <div class=\"corner bottom-right\" class:active={isInFrame}></div>\n\n <!-- Instruction text inside frame -->\n {#if !isInFrame}\n <div class=\"frame-hint\">\n Position card within frame\n </div>\n {:else}\n <div class=\"frame-hint ready\">\n Hold steady...\n </div>\n {/if}\n </div>\n</div>\n\n<style>\n .overlay-container {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 10;\n }\n\n .overlay-svg {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n .frame {\n position: absolute;\n border: 2px solid rgba(255, 255, 255, 0.4);\n transition: all 0.3s ease;\n }\n\n .frame.in-frame {\n border-color: #10B981;\n box-shadow: 0 0 20px rgba(16, 185, 129, 0.3);\n }\n\n /* Card frame - ID card aspect ratio 85.6mm × 53.98mm = 1.586:1 */\n .frame.card {\n top: 30%;\n left: 10%;\n width: 80%;\n height: 40%;\n border-radius: 12px;\n }\n\n /* Passport frame - taller aspect ratio */\n .frame.passport {\n top: 15%;\n left: 20%;\n width: 60%;\n height: 70%;\n border-radius: 8px;\n }\n\n /* Selfie frame - oval */\n .frame.selfie {\n top: 7%;\n left: 20%;\n width: 60%;\n height: 76%;\n border-radius: 50%;\n }\n\n /* A4 frame */\n .frame.a4 {\n top: 15%;\n left: 15%;\n width: 70%;\n height: 70%;\n border-radius: 4px;\n }\n\n /* Corner indicators */\n .corner {\n position: absolute;\n width: 24px;\n height: 24px;\n border-color: rgba(255, 255, 255, 0.6);\n border-style: solid;\n transition: all 0.3s ease;\n }\n\n .corner.active {\n border-color: #10B981;\n }\n\n .corner.top-left {\n top: -2px;\n left: -2px;\n border-width: 4px 0 0 4px;\n border-radius: 12px 0 0 0;\n }\n\n .corner.top-right {\n top: -2px;\n right: -2px;\n border-width: 4px 4px 0 0;\n border-radius: 0 12px 0 0;\n }\n\n .corner.bottom-left {\n bottom: -2px;\n left: -2px;\n border-width: 0 0 4px 4px;\n border-radius: 0 0 0 12px;\n }\n\n .corner.bottom-right {\n bottom: -2px;\n right: -2px;\n border-width: 0 4px 4px 0;\n border-radius: 0 0 12px 0;\n }\n\n /* Hide corners for selfie (oval shape) */\n .frame.selfie .corner {\n display: none;\n }\n\n /* Frame hint text */\n .frame-hint {\n position: absolute;\n bottom: -40px;\n left: 50%;\n transform: translateX(-50%);\n color: rgba(255, 255, 255, 0.8);\n font-size: 14px;\n font-weight: 500;\n white-space: nowrap;\n text-shadow: 0 1px 3px rgba(0, 0, 0, 0.5);\n }\n\n .frame-hint.ready {\n color: #10B981;\n }\n</style>\n","<script lang=\"ts\">\n import { configuration as globalConfiguration } from '../../contexts/configuration';\n import type { IAttributes, ICSSProperties, IElementProps } from '../../contexts/configuration';\n import { getComponentStyles, uiPack } from '../../ui-packs';\n\n export let configuration: IElementProps;\n const styleProps = configuration.style as ICSSProperties;\n const attributes = configuration.attributes as IAttributes;\n\n const style = getComponentStyles($uiPack.iconCloseButton, $globalConfiguration.iconCloseButton, styleProps);\n</script>\n\n<button {style} on:click>\n {@html attributes.src}\n</button>\n\n<style>\n button {\n cursor: pointer;\n border: none;\n outline: none;\n width: var(--width);\n min-width: var(--width);\n height: var(--height);\n background: var(--background);\n border-radius: var(--border-radius);\n position: var(--position);\n display: var(--display);\n align-items: var(--align-items);\n justify-content: var(--justify-content);\n top: var(--top);\n left: var(--left);\n right: var(--right);\n z-index: 3;\n }\n</style>\n","<script lang=\"ts\">\n import { T } from '../../contexts/translation';\n import { uiPack } from '../../ui-packs';\n\n export let configuration = {};\n export let namespace = 'welcome';\n export let url = '';\n\n const style = Object.entries(configuration?.style || {})\n .map(([key, value]) => `${key}: ${value}`)\n .join('; ');\n\n const handleClick = (e: MouseEvent) => {\n e.preventDefault();\n window.open(url, '_blank', 'noopener,noreferrer');\n };\n</script>\n\n<p class=\"privacy-text\" {style}>\n <T key=\"privacyPolicy\" {namespace} />\n <a href={url} on:click={handleClick} class=\"privacy-link\" target=\"_blank\" rel=\"noopener noreferrer\">\n <T key=\"privacyPolicyLink\" {namespace} />\n </a>\n</p>\n\n<style>\n .privacy-text {\n margin: 16px 0px 24px;\n text-align: center;\n font-size: 12px;\n color: #788597;\n }\n\n .privacy-link {\n color: var(--primary-color, #75AADB);\n text-decoration: underline;\n cursor: pointer;\n margin-left: 4px;\n }\n\n .privacy-link:hover {\n opacity: 0.8;\n }\n</style>\n","import type { IAppConfiguration } from '../configuration';\nimport type { IFlow } from './types';\n\nconst FLOW_STORE_KEY = 'flow';\n\nexport const setFlowName = (flows: { [key: string]: IFlow }, name: string | null) => {\n if (name && flows[name]) return sessionStorage.setItem(FLOW_STORE_KEY, name);\n\n const savedFlow = sessionStorage.getItem(FLOW_STORE_KEY);\n\n if (!savedFlow || !flows[savedFlow]) sessionStorage.setItem(FLOW_STORE_KEY, 'default');\n};\n\nexport const getFlowName = (): string => sessionStorage.getItem(FLOW_STORE_KEY) || 'default';\n\nexport const getFlowOrders = (configuration: IAppConfiguration) => {\n const flowName = sessionStorage.getItem(FLOW_STORE_KEY);\n if (!flowName) {\n return new Error(\"Flow name wasn't provided\");\n }\n const flowConfiguration = configuration.flows[flowName];\n if (!flowConfiguration) {\n return new Error(`Flow configuration doesn't exist for the name: ${flowName}`);\n }\n return flowConfiguration.stepsOrder;\n};\n\nexport const getFlowConfig = (configuration: IAppConfiguration): IFlow => {\n const flowName = sessionStorage.getItem(FLOW_STORE_KEY);\n if (!flowName) {\n throw new Error(\"Flow name wasn't provided\");\n }\n const flowConfiguration = configuration.flows[flowName];\n if (!flowConfiguration) {\n throw new Error(`Flow configuration doesn't exist for the name: ${flowName}`);\n }\n return flowConfiguration;\n};\n\nexport const isNativeCamera = (configuration: IAppConfiguration): boolean => {\n const flowName = sessionStorage.getItem(FLOW_STORE_KEY) as string;\n const flowConfiguration = configuration.flows[flowName];\n return !!flowConfiguration?.nativeCamera;\n};\n","import type { Languages, TranslationType } from '../../contexts/translation';\nimport { texts } from '../../utils/configuration-manager';\n\nexport const getListLength = <\n TLanguage extends Languages,\n TNamespace extends keyof TranslationType[TLanguage],\n>(\n language: TLanguage,\n namespace: TNamespace,\n) => {\n const langTexts = texts[language];\n if (!langTexts) return 0;\n\n const list = langTexts[namespace];\n if (!list || typeof list !== 'object') return 0;\n\n return Object.keys(list as Record<PropertyKey, unknown>).length - 1;\n};\n","<script lang=\"ts\">\n import { ListItem, Title } from '../../atoms';\n import { configuration as globalConfiguration } from '../../contexts/configuration';\n import type { ICSSProperties, IElementProps } from '../../contexts/configuration';\n import { getFlowName } from '../../contexts/flows';\n import { currentLanguage, T } from '../../contexts/translation';\n import type { TranslationType } from '../../contexts/translation';\n import { makeStylesFromConfiguration } from '../../utils/css-utils';\n import { getListLength } from './utils';\n import { uiPack } from '../../ui-packs';\n\n export let configuration: IElementProps;\n\n const globalListProps = $globalConfiguration.list?.listProps as IElementProps || $uiPack.list?.listProps || { style: {} };\n const globalListStyles = (globalListProps?.style || {}) as ICSSProperties;\n const titleProps = $globalConfiguration.list?.titleProps as IElementProps || $uiPack.list?.titleProps || { style: {} };\n const listElementProps = $globalConfiguration.list?.listElementProps as IElementProps || $uiPack.list?.listElementProps || { style: {} };\n\n const style = makeStylesFromConfiguration(globalListStyles, configuration?.style);\n\n const flowId = getFlowName();\n // Use list-welcome as the default namespace since it exists in translations\n const listNamespace = 'list-welcome' as keyof TranslationType[typeof $currentLanguage];\n\n // Get list length, default to 0 if not found\n const listLength = getListLength($currentLanguage, listNamespace);\n const listItems = new Array(Math.max(0, listLength)).fill(null);\n</script>\n\n<div {style} class=\"container\">\n {#if listLength > 0}\n <Title configuration={titleProps}>\n <T key=\"title\" namespace=\"list-welcome\" />\n </Title>\n <ul class=\"list\">\n {#each listItems as item, index}\n <ListItem configuration={listElementProps}>\n <T key={`item-${index + 1}`} namespace=\"list-welcome\" />\n </ListItem>\n {/each}\n </ul>\n {/if}\n</div>\n\n<style>\n .container {\n margin: var(--margin);\n padding: var(--padding);\n align-items: var(--align-items);\n text-align: var(--text-align);\n justify-content: var(--justify-content);\n }\n\n .list {\n list-style: none;\n padding: 0;\n margin: 0;\n }\n</style>\n","import type { DecisionStatus } from '../../contexts/app-state/types';\n\nexport enum EEventTypes {\n SYNC_FLOW_COMPLETE = 'sync_flow_complete',\n VERIFICATION_UPDATE = 'verification_update',\n NAVIGATION_UPDATE = 'navigation_update',\n BUTTON_CLICK = 'button_click',\n VERIFICATION_STARTED = 'verification.started',\n VERIFICATION_ERROR = 'verification.error',\n DOCUMENT_SELECTED = 'document.selected',\n DOCUMENT_CAPTURED = 'document.captured',\n DOCUMENT_UPLOADED = 'document.uploaded',\n SELFIE_CAPTURED = 'selfie.captured',\n}\n\nexport enum EActionNames {\n CLOSE = 'close',\n START_VERIFICATION = 'start_verification',\n}\n\nexport enum EVerificationStatuses {\n COMPLETED = 'completed',\n PENDING = 'pending',\n ERROR = 'error',\n DATA_COLLECTION = 'data_collection',\n}\n\nexport enum EVerificationErrorCodes {\n SESSION_EXPIRED = 'SESSION_EXPIRED',\n SESSION_INVALID = 'SESSION_INVALID',\n INITIALIZATION_FAILED = 'INITIALIZATION_FAILED',\n}\n\nexport interface ISendDocumentsResponse {\n status: 'success' | 'fail';\n}\n\nexport interface IDocumentVerificationResponse {\n status: EVerificationStatuses;\n idvResult?: DecisionStatus;\n code?: number;\n reasonCode?: number;\n verificationId?: string;\n referenceNumber?: string;\n}\n\nexport interface IVerificationStartedEvent {\n type: EEventTypes.VERIFICATION_STARTED;\n timestamp: string;\n sessionId: string;\n metadata: {\n clientId?: string;\n sdkVersion: string;\n userAgent: string;\n };\n}\n\nexport interface IVerificationErrorEvent {\n type: EEventTypes.VERIFICATION_ERROR;\n timestamp: string;\n sessionId: string | null;\n error: {\n code: EVerificationErrorCodes;\n message: string;\n };\n}\n\nexport interface IDocumentSelectedEvent {\n type: EEventTypes.DOCUMENT_SELECTED;\n timestamp: string;\n sessionId: string;\n data: {\n documentType: 'omang' | 'passport' | 'driversLicense';\n };\n metadata: {\n clientId?: string;\n sdkVersion: string;\n userAgent: string;\n };\n}\n\nexport interface IDocumentCapturedEvent {\n type: EEventTypes.DOCUMENT_CAPTURED;\n timestamp: string;\n sessionId: string;\n data: {\n documentType: 'omang' | 'passport' | 'driversLicense';\n side: 'front' | 'back';\n imageSize: number;\n compressionRatio: number;\n captureTime: number;\n };\n metadata: {\n clientId?: string;\n sdkVersion: string;\n userAgent: string;\n cameraResolution: string;\n };\n}\n\nexport interface IDocumentUploadedEvent {\n type: EEventTypes.DOCUMENT_UPLOADED;\n timestamp: string;\n sessionId: string;\n data: {\n documentType: 'omang' | 'passport' | 'driversLicense';\n side: 'front' | 'back';\n fileName: string;\n originalSize: number;\n compressedSize: number;\n compressionRatio: number;\n uploadTime: number;\n };\n metadata: {\n clientId?: string;\n sdkVersion: string;\n userAgent: string;\n uploadMethod: 'button' | 'dragDrop';\n };\n}\n\nexport interface ISelfieCapturedEvent {\n type: EEventTypes.SELFIE_CAPTURED;\n timestamp: string;\n sessionId: string;\n data: {\n fileName: string;\n originalSize: number;\n compressedSize: number;\n compressionRatio: number;\n captureTime: number;\n cameraResolution: string;\n livenessChecks: {\n blink: { passed: boolean; attempts: number };\n turnLeft: { passed: boolean; attempts: number };\n turnRight: { passed: boolean; attempts: number };\n };\n totalAttempts: number;\n faceQuality: {\n centered: boolean;\n distance: 'optimal' | 'tooClose' | 'tooFar';\n lighting: 'good' | 'poor';\n };\n };\n metadata: {\n clientId?: string;\n sdkVersion: string;\n userAgent: string;\n deviceType: 'mobile' | 'desktop';\n };\n}\n\nexport interface IOuterEvent {\n eventName: string;\n config: Record<string, string>;\n shouldExit: boolean;\n}\n","export enum EFlowEvent {\n FLOW_COMPLETE = 'FLOW_COMPLETE',\n FLOW_EXIT = 'FLOW_EXIT',\n FLOW_ERROR = 'FLOW_ERROR',\n FLOW_NAVIGATION_UPDATE = 'FLOW_NAVIGATION_UPDATE',\n}\n","import { getFlowConfig } from '../../contexts/flows/hooks';\nimport { get } from 'svelte/store';\nimport { configuration } from '../../contexts/configuration';\nimport type { IFlowEventBus } from './interfaces';\nimport { EFlowEvent } from './enums';\n\nexport const flowEventBus: IFlowEventBus = ({ type, payload }) => {\n const { callbacks } = getFlowConfig(get(configuration));\n\n switch (type) {\n case EFlowEvent.FLOW_COMPLETE:\n callbacks?.onFlowComplete?.(payload);\n break;\n case EFlowEvent.FLOW_EXIT:\n callbacks?.onFlowExit?.(payload);\n break;\n case EFlowEvent.FLOW_ERROR:\n callbacks?.onFlowError?.(payload);\n break;\n case EFlowEvent.FLOW_NAVIGATION_UPDATE:\n callbacks?.onFlowNavigationUpdate?.(payload);\n break;\n default:\n // JSON.stringify assumes the passed type could be anything, like this type should display correctly in the console.\n throw new Error(`Unknown flow event type ${JSON.stringify(type)}`);\n }\n};\n","// Event name constant for SDK communication\n// Changed from 'blrn_event' to 'authbridge_event' in v2.0\nexport const AUTHBRIDGE_EVENT = 'authbridge_event';\n\n// Backwards compatibility - will be removed in v3.0\n/** @deprecated Use AUTHBRIDGE_EVENT instead */\nexport const BALLERINE_EVENT = AUTHBRIDGE_EVENT;\n","import { appState } from '../../contexts/app-state';\nimport type { IAppState } from '../../contexts/app-state';\nimport { currentLanguage } from '../../contexts/translation';\nimport type { Languages } from '../../contexts/translation';\nimport {\n EActionNames,\n EEventTypes,\n EVerificationErrorCodes,\n} from './types';\nimport type {\n IDocumentVerificationResponse,\n IOuterEvent,\n IVerificationStartedEvent,\n IVerificationErrorEvent,\n IDocumentSelectedEvent,\n IDocumentCapturedEvent,\n IDocumentUploadedEvent,\n ISelfieCapturedEvent,\n} from './types';\nimport { get } from 'svelte/store';\nimport { flowEventBus } from '../../services/flow-event-bus/flow-event-bus';\nimport { EFlowEvent } from '../../services/flow-event-bus/enums';\nimport { AUTHBRIDGE_EVENT } from './constants';\nimport type { IEventOptions } from '../../services/flow-event-bus/interfaces';\n\n// SDK version for event metadata\n// Note: Hardcoded to avoid build-time import issues with package.json in Vite/Svelte\n// Keep in sync with package.json version when releasing\nconst SDK_VERSION = '1.2.0';\n\n// Get the parent origin for secure postMessage communication\n// Falls back to '*' only in development mode\nconst getTargetOrigin = (): string => {\n // In production, use the configured parent origin or document referrer\n if (window.__blrn_is_prod) {\n // Try to get origin from context or referrer\n const configuredOrigin = window.__blrn_context?.parentOrigin;\n if (configuredOrigin) {\n return configuredOrigin;\n }\n // Fall back to referrer origin if available\n if (document.referrer) {\n try {\n const url = new URL(document.referrer);\n return url.origin;\n } catch {\n // Invalid referrer URL\n }\n }\n }\n // In development or when origin cannot be determined, use '*'\n // This is acceptable for development but logged as a warning\n if (!window.__blrn_is_prod) {\n console.warn('[AuthBridge SDK] Using wildcard origin for postMessage in development mode');\n }\n return '*';\n};\n\nconst outerScopeContext = window.__blrn_context;\nconst isProd = window.__blrn_is_prod;\nconst endpoint =\n outerScopeContext && outerScopeContext.debug !== undefined\n ? '/upload-docs'\n : '/v2/enduser/verify';\nconst local = outerScopeContext && outerScopeContext.local !== undefined;\nconst baseUrl = local ? 'http://localhost:3001' : window.__blrn_api_url;\nconst docTypeMapping = {\n documentBack: 'document-back',\n documentFront: 'document-front',\n selfie: 'face',\n};\n\nexport const subscribe = () => {\n window.addEventListener('message', e => {\n // Verify origin in production mode\n if (window.__blrn_is_prod) {\n const expectedOrigin = window.__blrn_context?.parentOrigin;\n if (expectedOrigin && e.origin !== expectedOrigin) {\n console.warn(`[AuthBridge SDK] Ignoring message from unexpected origin: ${e.origin}`);\n return;\n }\n }\n\n const event = e.data as IOuterEvent;\n if (event.eventName === 'blrn_set_lang') {\n const language = event.config.lang as Languages;\n currentLanguage.set(language);\n }\n });\n};\n\nexport const sendIframeEvent = (eventOptions: IEventOptions) => {\n const targetOrigin = getTargetOrigin();\n window.parent.postMessage(eventOptions, targetOrigin); // iframe\n};\n\nexport const sendFlowCompleteEvent = (verificationResponse: IDocumentVerificationResponse) => {\n const { status, idvResult } = verificationResponse;\n const payload = { status, idvResult };\n const eventOptions = {\n eventName: AUTHBRIDGE_EVENT,\n eventType: EEventTypes.SYNC_FLOW_COMPLETE,\n shouldExit: true,\n payload,\n };\n\n sendIframeEvent(eventOptions);\n // Should finalize the signature on the callbacks interface\n flowEventBus({\n type: EFlowEvent.FLOW_COMPLETE,\n payload: eventOptions,\n });\n};\n\nexport const sendVerificationUpdateEvent = (\n details: IDocumentVerificationResponse,\n shouldExit = false,\n) => {\n const eventOptions = {\n eventName: AUTHBRIDGE_EVENT,\n eventType: EEventTypes.VERIFICATION_UPDATE,\n shouldExit,\n details,\n };\n sendIframeEvent(eventOptions);\n};\n\nexport const sendNavigationUpdateEvent = () => {\n const as = get(appState);\n\n const eventOptions = {\n eventName: AUTHBRIDGE_EVENT,\n eventType: EEventTypes.NAVIGATION_UPDATE,\n details: {\n currentIdx: as.currentStepIdx,\n // Note: currentPage and previousPage are correctly typed as string in IAppState\n // They represent page/step names, not numeric indices\n currentPage: as.currentPage,\n previousPage: as.previousPage,\n },\n };\n sendIframeEvent(eventOptions);\n flowEventBus({\n type: EFlowEvent.FLOW_NAVIGATION_UPDATE,\n payload: eventOptions,\n });\n};\n\nexport const sendButtonClickEvent = (\n actionName: EActionNames,\n status: IDocumentVerificationResponse,\n as: IAppState,\n shouldExit = false,\n) => {\n const eventOptions = {\n eventName: AUTHBRIDGE_EVENT,\n eventType: EEventTypes.BUTTON_CLICK,\n shouldExit,\n details: {\n actionName,\n currentIdx: as.currentStepIdx,\n currentPage: as.currentPage,\n status,\n },\n };\n\n sendIframeEvent(eventOptions);\n};\n\n/**\n * Emits a verification.started event when user clicks \"Start Verification\"\n * @param sessionId - The current session ID\n * @param clientId - Optional client ID\n */\nexport const sendVerificationStartedEvent = (\n sessionId: string,\n clientId?: string,\n) => {\n const event: IVerificationStartedEvent = {\n type: EEventTypes.VERIFICATION_STARTED,\n timestamp: new Date().toISOString(),\n sessionId,\n metadata: {\n clientId,\n sdkVersion: SDK_VERSION,\n userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : 'unknown',\n },\n };\n\n const eventOptions = {\n eventName: AUTHBRIDGE_EVENT,\n eventType: EEventTypes.VERIFICATION_STARTED,\n shouldExit: false,\n payload: event,\n };\n\n sendIframeEvent(eventOptions);\n};\n\n/**\n * Emits a verification.error event when initialization fails\n * @param errorCode - The error code\n * @param message - Human-readable error message\n * @param sessionId - The session ID (may be null if session was invalid)\n */\nexport const sendVerificationErrorEvent = (\n errorCode: EVerificationErrorCodes,\n message: string,\n sessionId: string | null = null,\n) => {\n const event: IVerificationErrorEvent = {\n type: EEventTypes.VERIFICATION_ERROR,\n timestamp: new Date().toISOString(),\n sessionId,\n error: {\n code: errorCode,\n message,\n },\n };\n\n const eventOptions = {\n eventName: AUTHBRIDGE_EVENT,\n eventType: EEventTypes.VERIFICATION_ERROR,\n shouldExit: false,\n payload: event,\n };\n\n sendIframeEvent(eventOptions);\n\n // Also emit via flow event bus for error handling\n flowEventBus({\n type: EFlowEvent.FLOW_ERROR,\n payload: eventOptions,\n });\n};\n\n/**\n * Emits a document.selected event when user selects a document type\n * @param documentType - The selected document type\n */\nexport const sendDocumentSelectedEvent = (\n documentType: 'omang' | 'passport' | 'driversLicense',\n) => {\n const sessionId = window.__blrn_context?.endUserInfo?.id || 'unknown';\n const clientId = window.__blrn_context?.backendConfig?.auth?.clientId;\n\n const event: IDocumentSelectedEvent = {\n type: EEventTypes.DOCUMENT_SELECTED,\n timestamp: new Date().toISOString(),\n sessionId,\n data: {\n documentType,\n },\n metadata: {\n clientId,\n sdkVersion: SDK_VERSION,\n userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : 'unknown',\n },\n };\n\n const eventOptions = {\n eventName: AUTHBRIDGE_EVENT,\n eventType: EEventTypes.DOCUMENT_SELECTED,\n shouldExit: false,\n payload: event,\n };\n\n sendIframeEvent(eventOptions);\n};\n\n/**\n * Emits a document.captured event when user captures a document photo\n * @param documentType - The document type being captured\n * @param side - Which side of the document (front or back)\n * @param imageSize - Size of the compressed image in bytes\n * @param compressionRatio - Ratio of original size to compressed size\n * @param captureTime - Time taken to capture and compress in milliseconds\n * @param cameraResolution - Camera resolution used (e.g., \"1920x1080\")\n */\nexport const sendDocumentCapturedEvent = (\n documentType: 'omang' | 'passport' | 'driversLicense',\n side: 'front' | 'back',\n imageSize: number,\n compressionRatio: number,\n captureTime: number,\n cameraResolution: string,\n) => {\n const sessionId = window.__blrn_context?.endUserInfo?.id || 'unknown';\n const clientId = window.__blrn_context?.backendConfig?.auth?.clientId;\n\n const event: IDocumentCapturedEvent = {\n type: EEventTypes.DOCUMENT_CAPTURED,\n timestamp: new Date().toISOString(),\n sessionId,\n data: {\n documentType,\n side,\n imageSize,\n compressionRatio,\n captureTime,\n },\n metadata: {\n clientId,\n sdkVersion: SDK_VERSION,\n userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : 'unknown',\n cameraResolution,\n },\n };\n\n const eventOptions = {\n eventName: AUTHBRIDGE_EVENT,\n eventType: EEventTypes.DOCUMENT_CAPTURED,\n shouldExit: false,\n payload: event,\n };\n\n sendIframeEvent(eventOptions);\n};\n\n/**\n * Emits a document.uploaded event when user uploads a document file\n * @param documentType - The document type being uploaded\n * @param side - Which side of the document (front or back)\n * @param fileName - Name of the uploaded file\n * @param originalSize - Original file size in bytes\n * @param compressedSize - Compressed file size in bytes\n * @param compressionRatio - Ratio of original size to compressed size\n * @param uploadTime - Time taken to upload and compress in milliseconds\n * @param uploadMethod - How the file was uploaded (button or dragDrop)\n */\nexport const sendDocumentUploadedEvent = (\n documentType: 'omang' | 'passport' | 'driversLicense',\n side: 'front' | 'back',\n fileName: string,\n originalSize: number,\n compressedSize: number,\n compressionRatio: number,\n uploadTime: number,\n uploadMethod: 'button' | 'dragDrop',\n) => {\n const sessionId = window.__blrn_context?.endUserInfo?.id || 'unknown';\n const clientId = window.__blrn_context?.backendConfig?.auth?.clientId;\n\n const event: IDocumentUploadedEvent = {\n type: EEventTypes.DOCUMENT_UPLOADED,\n timestamp: new Date().toISOString(),\n sessionId,\n data: {\n documentType,\n side,\n fileName,\n originalSize,\n compressedSize,\n compressionRatio,\n uploadTime,\n },\n metadata: {\n clientId,\n sdkVersion: SDK_VERSION,\n userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : 'unknown',\n uploadMethod,\n },\n };\n\n const eventOptions = {\n eventName: AUTHBRIDGE_EVENT,\n eventType: EEventTypes.DOCUMENT_UPLOADED,\n shouldExit: false,\n payload: event,\n };\n\n sendIframeEvent(eventOptions);\n};\n\n/**\n * Send selfie.captured event\n * @param fileName - Name of the selfie file\n * @param originalSize - Original file size in bytes\n * @param compressedSize - Compressed file size in bytes\n * @param compressionRatio - Ratio of original size to compressed size\n * @param captureTime - Time taken to capture and compress in milliseconds\n * @param cameraResolution - Camera resolution used (e.g., \"1920x1080\")\n * @param livenessChecks - Results of liveness detection checks\n * @param totalAttempts - Total number of capture attempts\n * @param faceQuality - Face quality metrics\n */\nexport const sendSelfieCapturedEvent = (\n fileName: string,\n originalSize: number,\n compressedSize: number,\n compressionRatio: number,\n captureTime: number,\n cameraResolution: string,\n livenessChecks: {\n blink: { passed: boolean; attempts: number };\n turnLeft: { passed: boolean; attempts: number };\n turnRight: { passed: boolean; attempts: number };\n },\n totalAttempts: number,\n faceQuality: {\n centered: boolean;\n distance: 'optimal' | 'tooClose' | 'tooFar';\n message: string;\n },\n) => {\n const sessionId = window.__blrn_context?.endUserInfo?.id || 'unknown';\n const clientId = window.__blrn_context?.backendConfig?.auth?.clientId;\n const deviceType =\n typeof window !== 'undefined' && window.innerWidth < 768 ? 'mobile' : 'desktop';\n\n const event: ISelfieCapturedEvent = {\n type: EEventTypes.SELFIE_CAPTURED,\n timestamp: new Date().toISOString(),\n sessionId,\n data: {\n fileName,\n originalSize,\n compressedSize,\n compressionRatio,\n captureTime,\n cameraResolution,\n livenessChecks,\n totalAttempts,\n faceQuality: {\n centered: faceQuality.centered,\n distance: faceQuality.distance,\n lighting: 'good', // Placeholder - would be calculated from video analysis\n },\n },\n metadata: {\n clientId,\n sdkVersion: SDK_VERSION,\n userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : 'unknown',\n deviceType,\n },\n };\n\n const eventOptions = {\n eventName: AUTHBRIDGE_EVENT,\n eventType: EEventTypes.SELFIE_CAPTURED,\n shouldExit: false,\n payload: event,\n };\n\n sendIframeEvent(eventOptions);\n};\n","<script lang=\"ts\">\n import { IconButton, IconCloseButton, Image, Paragraph, Title, PrivacyLink } from '../atoms';\n import { configuration } from '../contexts/configuration';\n import { Elements } from '../contexts/configuration/types';\n import List from '../molecules/List/List.svelte';\n import { T } from '../contexts/translation';\n import { sendButtonClickEvent, sendVerificationStartedEvent } from '../utils/event-service/utils';\n import { appState } from '../contexts/app-state';\n import { preloadNextStepByCurrent } from '../services/preload-service';\n import { EActionNames, EVerificationStatuses } from '../utils/event-service';\n import { getLayoutStyles, getStepConfiguration, uiPack } from '../ui-packs';\n import { getFlowConfig } from '../contexts/flows/hooks';\n import { t } from '../contexts/translation/hooks';\n import { goToNextStep } from '../contexts/navigation';\n import { currentStepId } from '../contexts/app-state';\n\n export let stepId;\n\n const step = getStepConfiguration($configuration, $uiPack, stepId);\n const flow = getFlowConfig($configuration);\n const style = getLayoutStyles($configuration, $uiPack, step);\n\n const stepNamespace = step.namespace!;\n\n preloadNextStepByCurrent($configuration, configuration, stepId, $uiPack);\n\n // Handle Start Verification button click\n const handleStartVerification = () => {\n // Emit verification.started event (AC5)\n const sessionId = $configuration.endUserInfo?.id || 'unknown';\n sendVerificationStartedEvent(sessionId, undefined);\n goToNextStep(currentStepId, $configuration, stepId);\n };\n\n // Get privacy policy URL from translation or config\n const privacyPolicyUrl = t('privacyPolicyUrl', stepNamespace) || 'https://authbridge.io/privacy';\n</script>\n\n<div class=\"container\" {style}>\n {#each step.elements as element}\n {#if element.type === Elements.IconButton && flow.firstScreenBackButton}\n <div>\n <IconButton\n configuration={element.props}\n on:click={() => {\n sendButtonClickEvent(\n EActionNames.CLOSE,\n { status: EVerificationStatuses.DATA_COLLECTION },\n $appState,\n true,\n );\n }}\n />\n </div>\n {/if}\n {#if element.type === Elements.IconCloseButton && flow.showCloseButton}\n <IconCloseButton\n configuration={element.props}\n on:click={() => {\n sendButtonClickEvent(\n EActionNames.CLOSE,\n { status: EVerificationStatuses.DATA_COLLECTION },\n $appState,\n true,\n );\n }}\n />\n {/if}\n {/each}\n\n <div class=\"content\">\n {#each step.elements as element}\n {#if element.type === Elements.Title}\n <Title configuration={element.props}>\n <T key=\"title\" namespace={stepNamespace} />\n </Title>\n {/if}\n {#if element.type === Elements.Paragraph}\n <Paragraph configuration={element.props}>\n <T key={element.props.context || 'description'} namespace={stepNamespace} />\n </Paragraph>\n {/if}\n {#if element.type === Elements.Image}\n <div class=\"illustration\">\n <Image configuration={element.props} />\n </div>\n {/if}\n {#if element.type === Elements.List}\n <List configuration={element.props} />\n {/if}\n {/each}\n </div>\n\n <div class=\"footer\">\n <button class=\"start-button\" on:click={handleStartVerification}>\n <img src=\"/images/authbridge-icon.svg\" alt=\"\" class=\"button-icon\" />\n <span><T key=\"button\" namespace={stepNamespace} /></span>\n </button>\n\n {#each step.elements as element}\n {#if element.type === Elements.PrivacyLink}\n <PrivacyLink configuration={element.props} namespace={stepNamespace} url={privacyPolicyUrl} />\n {/if}\n {/each}\n </div>\n</div>\n\n<style>\n .container {\n display: flex;\n flex-direction: column;\n height: 100%;\n max-height: 100vh;\n max-height: 100dvh;\n padding: 12px 16px;\n position: var(--position);\n background: var(--background);\n line-height: var(--line-height);\n text-align: center;\n box-sizing: border-box;\n overflow: hidden;\n }\n\n .content {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 0;\n gap: 4px;\n overflow: hidden;\n }\n\n .content :global(h1),\n .content :global(h2) {\n margin: 0;\n padding: 4px 0 !important;\n }\n\n .content :global(p) {\n margin: 0 0 4px 0 !important;\n }\n\n .content :global(ul) {\n margin: 4px 0 !important;\n padding-left: 0;\n }\n\n .illustration {\n margin: 4px 0;\n flex-shrink: 1;\n min-height: 0;\n }\n\n .illustration :global(img) {\n max-height: 120px;\n width: auto;\n object-fit: contain;\n }\n\n .footer {\n flex-shrink: 0;\n padding: 8px 0 4px;\n }\n\n .start-button {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n width: 100%;\n padding: 14px 20px;\n background: #7C3AED;\n color: #fff;\n border: none;\n border-radius: 12px;\n font-size: 16px;\n font-weight: 600;\n cursor: pointer;\n box-shadow: 0px 6px 9px 5px rgba(124, 58, 237, 0.15);\n transition: all 0.2s;\n font-family: inherit;\n }\n\n .start-button:hover {\n background: #6D28D9;\n }\n\n .start-button:active {\n transform: scale(0.98);\n }\n\n .button-icon {\n width: 20px;\n height: 20px;\n filter: brightness(0) invert(1);\n }\n\n /* Small screens */\n @media (max-height: 667px) {\n .container {\n padding: 8px 12px;\n }\n\n .illustration :global(img) {\n max-height: 100px;\n }\n\n .content :global(ul) {\n font-size: 13px;\n }\n\n .start-button {\n padding: 12px 16px;\n font-size: 15px;\n }\n }\n\n /* Very small screens (iPhone SE, etc) */\n @media (max-height: 568px) {\n .illustration :global(img) {\n max-height: 80px;\n }\n\n .content :global(h1),\n .content :global(h2) {\n font-size: 18px !important;\n }\n\n .start-button {\n padding: 10px 14px;\n }\n }\n</style>\n","<svg width=\"41\" height=\"41\" viewBox=\"0 0 41 41\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"3\" y=\"3\" width=\"35\" height=\"35\" rx=\"17.5\" fill=\"var(--primary-color)\" />\n <rect\n x=\"3\"\n y=\"3\"\n width=\"35\"\n height=\"35\"\n rx=\"17.5\"\n stroke=\"var(--primary-color)\"\n stroke-opacity=\"0.2\"\n stroke-width=\"5\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M12.8167 16.8333C12.8167 15.3973 13.9807 14.2333 15.4167 14.2333H25.5833C27.0193 14.2333 28.1833 15.3973 28.1833 16.8333V24.1666C28.1833 25.6026 27.0193 26.7666 25.5833 26.7666H15.4167C13.9807 26.7666 12.8167 25.6026 12.8167 24.1666V16.8333ZM15.4167 15.4333C14.6435 15.4333 14.0167 16.0601 14.0167 16.8333V24.1666C14.0167 24.9398 14.6435 25.5666 15.4167 25.5666H25.5833C26.3565 25.5666 26.9833 24.9398 26.9833 24.1666V16.8333C26.9833 16.0601 26.3565 15.4333 25.5833 15.4333H15.4167ZM16.0042 19.4374C16.0042 18.3237 16.907 17.4208 18.0208 17.4208C19.1346 17.4208 20.0375 18.3237 20.0375 19.4374C20.0375 19.9311 19.8601 20.3834 19.5656 20.7339C20.2785 21.2254 20.7458 22.0477 20.7458 22.9791C20.7458 23.3105 20.4772 23.5791 20.1458 23.5791C19.8144 23.5791 19.5458 23.3105 19.5458 22.9791C19.5458 22.1369 18.8631 21.4541 18.0208 21.4541C17.1786 21.4541 16.4958 22.1369 16.4958 22.9791C16.4958 23.3105 16.2272 23.5791 15.8958 23.5791C15.5644 23.5791 15.2958 23.3105 15.2958 22.9791C15.2958 22.0477 15.7631 21.2254 16.4761 20.7339C16.1815 20.3834 16.0042 19.9311 16.0042 19.4374ZM18.0208 18.6208C17.5698 18.6208 17.2042 18.9864 17.2042 19.4374C17.2042 19.8885 17.5698 20.2541 18.0208 20.2541C18.4719 20.2541 18.8375 19.8885 18.8375 19.4374C18.8375 18.9864 18.4719 18.6208 18.0208 18.6208ZM21.3166 19.0833C21.3166 18.7519 21.5853 18.4833 21.9166 18.4833H24.75C25.0814 18.4833 25.35 18.7519 25.35 19.0833C25.35 19.4146 25.0814 19.6833 24.75 19.6833H21.9166C21.5853 19.6833 21.3166 19.4146 21.3166 19.0833ZM22.625 21.3166C22.2936 21.3166 22.025 21.5852 22.025 21.9166C22.025 22.248 22.2936 22.5166 22.625 22.5166H24.75C25.0814 22.5166 25.35 22.248 25.35 21.9166C25.35 21.5852 25.0814 21.3166 24.75 21.3166H22.625Z\"\n fill=\"white\"\n />\n</svg>\n","<svg width=\"41\" height=\"41\" viewBox=\"0 0 41 41\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"3\" y=\"3\" width=\"35\" height=\"35\" rx=\"17.5\" fill=\"var(--primary-color)\" />\n <rect\n x=\"3\"\n y=\"3\"\n width=\"35\"\n height=\"35\"\n rx=\"17.5\"\n stroke=\"var(--primary-color)\"\n stroke-opacity=\"0.2\"\n stroke-width=\"5\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M16 13H25C26.1046 13 27 13.8954 27 15V26C27 27.1046 26.1046 28 25 28H16C14.8954 28 14 27.1046 14 26V15C14 13.8954 14.8954 13 16 13ZM13 15C13 13.3431 14.3431 12 16 12H25C26.6569 12 28 13.3431 28 15V26C28 27.6569 26.6569 29 25 29H16C14.3431 29 13 27.6569 13 26V15ZM19.3626 17.7811C19.5921 17.3986 19.8307 17.1657 20.05 17.0363V20.05H18.7152C18.7773 19.1333 19.0253 18.3432 19.3626 17.7811ZM19.0297 16.7251C18.3606 17.4506 17.8964 18.6568 17.8134 20.05H16.4747C16.6429 18.5288 17.6535 17.2615 19.0297 16.7251ZM19.0297 24.2749C18.3606 23.5494 17.8964 22.3432 17.8134 20.95H16.4747C16.6429 22.4712 17.6535 23.7385 19.0297 24.2749ZM19.3626 23.2189C19.5921 23.6014 19.8307 23.8343 20.05 23.9637V20.95H18.7152C18.7773 21.8667 19.0253 22.6568 19.3626 23.2189ZM24.5253 20.95C24.3571 22.4711 23.3465 23.7384 21.9704 24.2748C22.6395 23.5493 23.1037 22.3431 23.1867 20.95H24.5253ZM21.6375 23.2189C21.9748 22.6568 22.2228 21.8667 22.2849 20.95H20.95L20.95 23.9638C21.1693 23.8344 21.408 23.6015 21.6375 23.2189ZM24.5253 20.05H23.1867C23.1037 18.6569 22.6395 17.4507 21.9704 16.7252C23.3465 17.2616 24.3571 18.5289 24.5253 20.05ZM21.6375 17.7811C21.408 17.3985 21.1693 17.1656 20.95 17.0362L20.95 20.05H22.2849C22.2228 19.1333 21.9748 18.3432 21.6375 17.7811ZM20.5 15.55C17.7662 15.55 15.55 17.7662 15.55 20.5C15.55 23.2338 17.7662 25.45 20.5 25.45C23.2338 25.45 25.45 23.2338 25.45 20.5C25.45 17.7662 23.2338 15.55 20.5 15.55Z\"\n fill=\"white\"\n />\n</svg>\n","<svg width=\"41\" height=\"41\" viewBox=\"0 0 41 41\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"3\" y=\"3\" width=\"35\" height=\"35\" rx=\"17.5\" fill=\"var(--primary-color)\" />\n <rect\n x=\"3\"\n y=\"3\"\n width=\"35\"\n height=\"35\"\n rx=\"17.5\"\n stroke=\"var(--primary-color)\"\n stroke-opacity=\"0.2\"\n stroke-width=\"5\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15.6655 15.7143C15.7693 15.2691 16.1661 14.9542 16.6232 14.9542H24.4164C24.8769 14.9542 25.2758 15.2737 25.3761 15.7232C25.3785 15.7336 25.3811 15.7439 25.3839 15.7542L26.2568 18.8707C26.3024 19.0337 26.4148 19.1699 26.5662 19.2456L26.8354 19.3802C27.4368 19.6809 27.8166 20.2955 27.8166 20.9678V23.8542C27.8166 24.1786 27.5536 24.4417 27.2291 24.4417H26.4387C26.1073 24.4417 25.8387 24.7103 25.8387 25.0417V25.4375C25.8387 25.9806 25.3984 26.4208 24.8554 26.4208C24.3107 26.4208 23.8708 25.9803 23.8708 25.4375V25.0417C23.8708 24.7103 23.6021 24.4417 23.2708 24.4417H17.7291C17.3977 24.4417 17.1291 24.7103 17.1291 25.0417V25.4376C17.1291 25.9806 16.6889 26.4208 16.1459 26.4208C15.6029 26.4208 15.1627 25.9806 15.1627 25.4376V25.0417C15.1627 24.7103 14.894 24.4417 14.5627 24.4417H13.7708C13.4463 24.4417 13.1833 24.1786 13.1833 23.8542V20.9684C13.1833 20.2959 13.5634 19.6811 14.165 19.3805L14.435 19.2457C14.5844 19.171 14.6959 19.0375 14.7428 18.8771L15.6571 15.7463C15.6602 15.7357 15.663 15.725 15.6655 15.7143ZM16.6232 13.7542C15.6142 13.7542 14.7376 14.4453 14.501 15.4245L13.6643 18.2892L13.6287 18.307C12.6204 18.8108 11.9833 19.8412 11.9833 20.9684V23.8542C11.9833 24.8414 12.7836 25.6417 13.7708 25.6417H13.9721C14.075 26.7517 15.0089 27.6208 16.1459 27.6208C17.2828 27.6208 18.2168 26.7517 18.3197 25.6417H22.6802C22.7832 26.752 23.7175 27.6208 24.8554 27.6208C25.9923 27.6208 26.9263 26.7518 27.0293 25.6417H27.2291C28.2163 25.6417 29.0166 24.8414 29.0166 23.8542V20.9678C29.0166 19.841 28.38 18.8109 27.3721 18.3069L27.3406 18.2912L26.5435 15.4448C26.3145 14.4558 25.4331 13.7542 24.4164 13.7542H16.6232ZM17.3332 22.0729C17.3332 22.6194 16.8901 23.0625 16.3436 23.0625C15.7971 23.0625 15.354 22.6194 15.354 22.0729C15.354 21.5264 15.7971 21.0833 16.3436 21.0833C16.8901 21.0833 17.3332 21.5264 17.3332 22.0729ZM24.6561 23.0625C25.2026 23.0625 25.6457 22.6194 25.6457 22.0729C25.6457 21.5264 25.2026 21.0833 24.6561 21.0833C24.1096 21.0833 23.6665 21.5264 23.6665 22.0729C23.6665 22.6194 24.1096 23.0625 24.6561 23.0625ZM16.9375 18.5042C16.6061 18.5042 16.3375 18.7728 16.3375 19.1042C16.3375 19.4355 16.6061 19.7042 16.9375 19.7042H24.0625C24.3939 19.7042 24.6625 19.4355 24.6625 19.1042C24.6625 18.7728 24.3939 18.5042 24.0625 18.5042H16.9375Z\"\n fill=\"white\"\n />\n</svg>\n","<svg width=\"41\" height=\"41\" viewBox=\"0 0 41 41\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"3\" y=\"3\" width=\"35\" height=\"35\" rx=\"17.5\" fill=\"var(--primary-color)\" />\n <rect\n x=\"3\"\n y=\"3\"\n width=\"35\"\n height=\"35\"\n rx=\"17.5\"\n stroke=\"var(--primary-color)\"\n stroke-opacity=\"0.2\"\n stroke-width=\"5\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M16 13H25C26.1046 13 27 13.8954 27 15V26C27 27.1046 26.1046 28 25 28H16C14.8954 28 14 27.1046 14 26V15C14 13.8954 14.8954 13 16 13ZM13 15C13 13.3431 14.3431 12 16 12H25C26.6569 12 28 13.3431 28 15V26C28 27.6569 26.6569 29 25 29H16C14.3431 29 13 27.6569 13 26V15ZM19.3626 17.7811C19.5921 17.3986 19.8307 17.1657 20.05 17.0363V20.05H18.7152C18.7773 19.1333 19.0253 18.3432 19.3626 17.7811ZM19.0297 16.7251C18.3606 17.4506 17.8964 18.6568 17.8134 20.05H16.4747C16.6429 18.5288 17.6535 17.2615 19.0297 16.7251ZM19.0297 24.2749C18.3606 23.5494 17.8964 22.3432 17.8134 20.95H16.4747C16.6429 22.4712 17.6535 23.7385 19.0297 24.2749ZM19.3626 23.2189C19.5921 23.6014 19.8307 23.8343 20.05 23.9637V20.95H18.7152C18.7773 21.8667 19.0253 22.6568 19.3626 23.2189ZM24.5253 20.95C24.3571 22.4711 23.3465 23.7384 21.9704 24.2748C22.6395 23.5493 23.1037 22.3431 23.1867 20.95H24.5253ZM21.6375 23.2189C21.9748 22.6568 22.2228 21.8667 22.2849 20.95H20.95L20.95 23.9638C21.1693 23.8344 21.408 23.6015 21.6375 23.2189ZM24.5253 20.05H23.1867C23.1037 18.6569 22.6395 17.4507 21.9704 16.7252C23.3465 17.2616 24.3571 18.5289 24.5253 20.05ZM21.6375 17.7811C21.408 17.3985 21.1693 17.1656 20.95 17.0362L20.95 20.05H22.2849C22.2228 19.1333 21.9748 18.3432 21.6375 17.7811ZM20.5 15.55C17.7662 15.55 15.55 17.7662 15.55 20.5C15.55 23.2338 17.7662 25.45 20.5 25.45C23.2338 25.45 25.45 23.2338 25.45 20.5C25.45 17.7662 23.2338 15.55 20.5 15.55Z\"\n fill=\"white\"\n />\n</svg>\n","<svg width=\"41\" height=\"41\" viewBox=\"0 0 41 41\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"3\" y=\"3\" width=\"35\" height=\"35\" rx=\"17.5\" fill=\"var(--primary-color)\" />\n <rect\n x=\"3\"\n y=\"3\"\n width=\"35\"\n height=\"35\"\n rx=\"17.5\"\n stroke=\"var(--primary-color)\"\n stroke-opacity=\"0.2\"\n stroke-width=\"5\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M12.825 17.0589C12.8195 17.1427 12.8167 17.2273 12.8167 17.3125V23.6875C12.8167 25.7793 14.5124 27.475 16.6042 27.475H24.3959C26.4876 27.475 28.1834 25.7793 28.1834 23.6875V17.3125C28.1834 17.2272 28.1805 17.1425 28.175 17.0586C28.1805 17.026 28.1833 16.9925 28.1833 16.9583C28.1833 16.8782 28.1676 16.8018 28.1391 16.7319C27.8598 14.9158 26.2902 13.525 24.3959 13.525H16.6042C14.7099 13.525 13.1405 14.9156 12.8609 16.7316C12.8324 16.8016 12.8167 16.8781 12.8167 16.9583C12.8167 16.9926 12.8195 17.0262 12.825 17.0589ZM14.0167 17.5583V23.6875C14.0167 25.1165 15.1752 26.275 16.6042 26.275H24.3959C25.8249 26.275 26.9834 25.1165 26.9834 23.6875V17.5583H14.0167ZM26.8017 16.3583C26.4219 15.4015 25.4879 14.725 24.3959 14.725H16.6042C15.5121 14.725 14.5781 15.4015 14.1983 16.3583H26.8017ZM18.4834 20.5C18.4834 20.1686 18.752 19.9 19.0834 19.9H24.75C25.0814 19.9 25.35 20.1686 25.35 20.5C25.35 20.8314 25.0814 21.1 24.75 21.1H19.0834C18.752 21.1 18.4834 20.8314 18.4834 20.5ZM19.0834 22.7333C18.752 22.7333 18.4834 23.002 18.4834 23.3333C18.4834 23.6647 18.752 23.9333 19.0834 23.9333H24.75C25.0814 23.9333 25.35 23.6647 25.35 23.3333C25.35 23.002 25.0814 22.7333 24.75 22.7333H19.0834ZM15.6499 20.5C15.6499 20.1686 15.9186 19.9 16.2499 19.9H16.9583C17.2896 19.9 17.5583 20.1686 17.5583 20.5C17.5583 20.8314 17.2896 21.1 16.9583 21.1H16.2499C15.9186 21.1 15.6499 20.8314 15.6499 20.5ZM16.2499 22.7333C15.9186 22.7333 15.6499 23.002 15.6499 23.3333C15.6499 23.6647 15.9186 23.9333 16.2499 23.9333H16.9583C17.2896 23.9333 17.5583 23.6647 17.5583 23.3333C17.5583 23.002 17.2896 22.7333 16.9583 22.7333H16.2499Z\"\n fill=\"white\"\n />\n</svg>\n","<script lang=\"ts\">\n import Card from './Card.svelte';\n import Passport from './Passport.svelte';\n import License from './License.svelte';\n import PassportTwo from './PassportTwo.svelte';\n import Voter from './Voter.svelte';\n import { makesLocalStyles } from '../../utils/css-utils';\n\n import type { SvelteComponent } from 'svelte';\n import type { Icons } from '../../contexts/configuration/types';\n import type { ICSSProperties, IElementProps } from '../../contexts/configuration';\n\n let icons: Record<Icons, typeof SvelteComponent> = {\n Card,\n Passport,\n License,\n PassportTwo,\n Voter,\n };\n\n export let name: Icons = 'Card';\n export let width: number | string = 16;\n export let height: number | string = 16;\n export let active = false;\n export let configuration: IElementProps;\n\n const style = makesLocalStyles(configuration.style as ICSSProperties);\n const icon = icons[name];\n</script>\n\n<div {style} class=\"icon\" class:active style:width=\"{width}px\" style:height=\"{height}px\">\n <svelte:component this={icon} />\n</div>\n\n<style>\n .icon {\n display: flex;\n align-items: center;\n justify-content: center;\n fill: var(--fill);\n color: var(--fill);\n }\n .icon :global(svg) {\n width: 100%;\n height: 100%;\n }\n .icon.active {\n fill: var(--active-fill);\n color: var(--active-fill);\n }\n</style>\n","/*!\n * Compressor.js v1.2.1\n * https://fengyuanchen.github.io/compressorjs\n *\n * Copyright 2018-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2023-02-28T14:09:41.732Z\n */\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n return target;\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\nfunction _defineProperty(obj, key, value) {\n key = _toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _toPrimitive(input, hint) {\n if (typeof input !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (typeof res !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}\nfunction _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n return typeof key === \"symbol\" ? key : String(key);\n}\n\nvar canvasToBlob = {exports: {}};\n\n/*\n * JavaScript Canvas to Blob\n * https://github.com/blueimp/JavaScript-Canvas-to-Blob\n *\n * Copyright 2012, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on stackoverflow user Stoive's code snippet:\n * http://stackoverflow.com/q/4998908\n */\n(function (module) {\n if (typeof window === 'undefined') {\n return;\n }\n (function (window) {\n\n var CanvasPrototype = window.HTMLCanvasElement && window.HTMLCanvasElement.prototype;\n var hasBlobConstructor = window.Blob && function () {\n try {\n return Boolean(new Blob());\n } catch (e) {\n return false;\n }\n }();\n var hasArrayBufferViewSupport = hasBlobConstructor && window.Uint8Array && function () {\n try {\n return new Blob([new Uint8Array(100)]).size === 100;\n } catch (e) {\n return false;\n }\n }();\n var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;\n var dataURIPattern = /^data:((.*?)(;charset=.*?)?)(;base64)?,/;\n var dataURLtoBlob = (hasBlobConstructor || BlobBuilder) && window.atob && window.ArrayBuffer && window.Uint8Array && function (dataURI) {\n var matches, mediaType, isBase64, dataString, byteString, arrayBuffer, intArray, i, bb;\n // Parse the dataURI components as per RFC 2397\n matches = dataURI.match(dataURIPattern);\n if (!matches) {\n throw new Error('invalid data URI');\n }\n // Default to text/plain;charset=US-ASCII\n mediaType = matches[2] ? matches[1] : 'text/plain' + (matches[3] || ';charset=US-ASCII');\n isBase64 = !!matches[4];\n dataString = dataURI.slice(matches[0].length);\n if (isBase64) {\n // Convert base64 to raw binary data held in a string:\n byteString = atob(dataString);\n } else {\n // Convert base64/URLEncoded data component to raw binary:\n byteString = decodeURIComponent(dataString);\n }\n // Write the bytes of the string to an ArrayBuffer:\n arrayBuffer = new ArrayBuffer(byteString.length);\n intArray = new Uint8Array(arrayBuffer);\n for (i = 0; i < byteString.length; i += 1) {\n intArray[i] = byteString.charCodeAt(i);\n }\n // Write the ArrayBuffer (or ArrayBufferView) to a blob:\n if (hasBlobConstructor) {\n return new Blob([hasArrayBufferViewSupport ? intArray : arrayBuffer], {\n type: mediaType\n });\n }\n bb = new BlobBuilder();\n bb.append(arrayBuffer);\n return bb.getBlob(mediaType);\n };\n if (window.HTMLCanvasElement && !CanvasPrototype.toBlob) {\n if (CanvasPrototype.mozGetAsFile) {\n CanvasPrototype.toBlob = function (callback, type, quality) {\n var self = this;\n setTimeout(function () {\n if (quality && CanvasPrototype.toDataURL && dataURLtoBlob) {\n callback(dataURLtoBlob(self.toDataURL(type, quality)));\n } else {\n callback(self.mozGetAsFile('blob', type));\n }\n });\n };\n } else if (CanvasPrototype.toDataURL && dataURLtoBlob) {\n if (CanvasPrototype.msToBlob) {\n CanvasPrototype.toBlob = function (callback, type, quality) {\n var self = this;\n setTimeout(function () {\n if ((type && type !== 'image/png' || quality) && CanvasPrototype.toDataURL && dataURLtoBlob) {\n callback(dataURLtoBlob(self.toDataURL(type, quality)));\n } else {\n callback(self.msToBlob(type));\n }\n });\n };\n } else {\n CanvasPrototype.toBlob = function (callback, type, quality) {\n var self = this;\n setTimeout(function () {\n callback(dataURLtoBlob(self.toDataURL(type, quality)));\n });\n };\n }\n }\n }\n if (module.exports) {\n module.exports = dataURLtoBlob;\n } else {\n window.dataURLtoBlob = dataURLtoBlob;\n }\n })(window);\n})(canvasToBlob);\nvar toBlob = canvasToBlob.exports;\n\nvar isBlob = function isBlob(value) {\n if (typeof Blob === 'undefined') {\n return false;\n }\n return value instanceof Blob || Object.prototype.toString.call(value) === '[object Blob]';\n};\n\nvar DEFAULTS = {\n /**\n * Indicates if output the original image instead of the compressed one\n * when the size of the compressed image is greater than the original one's\n * @type {boolean}\n */\n strict: true,\n /**\n * Indicates if read the image's Exif Orientation information,\n * and then rotate or flip the image automatically.\n * @type {boolean}\n */\n checkOrientation: true,\n /**\n * Indicates if retain the image's Exif information after compressed.\n * @type {boolean}\n */\n retainExif: false,\n /**\n * The max width of the output image.\n * @type {number}\n */\n maxWidth: Infinity,\n /**\n * The max height of the output image.\n * @type {number}\n */\n maxHeight: Infinity,\n /**\n * The min width of the output image.\n * @type {number}\n */\n minWidth: 0,\n /**\n * The min height of the output image.\n * @type {number}\n */\n minHeight: 0,\n /**\n * The width of the output image.\n * If not specified, the natural width of the source image will be used.\n * @type {number}\n */\n width: undefined,\n /**\n * The height of the output image.\n * If not specified, the natural height of the source image will be used.\n * @type {number}\n */\n height: undefined,\n /**\n * Sets how the size of the image should be resized to the container\n * specified by the `width` and `height` options.\n * @type {string}\n */\n resize: 'none',\n /**\n * The quality of the output image.\n * It must be a number between `0` and `1`,\n * and only available for `image/jpeg` and `image/webp` images.\n * Check out {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob canvas.toBlob}.\n * @type {number}\n */\n quality: 0.8,\n /**\n * The mime type of the output image.\n * By default, the original mime type of the source image file will be used.\n * @type {string}\n */\n mimeType: 'auto',\n /**\n * Files whose file type is included in this list,\n * and whose file size exceeds the `convertSize` value will be converted to JPEGs.\n * @type {string|Array}\n */\n convertTypes: ['image/png'],\n /**\n * PNG files over this size (5 MB by default) will be converted to JPEGs.\n * To disable this, just set the value to `Infinity`.\n * @type {number}\n */\n convertSize: 5000000,\n /**\n * The hook function to execute before draw the image into the canvas for compression.\n * @type {Function}\n * @param {CanvasRenderingContext2D} context - The 2d rendering context of the canvas.\n * @param {HTMLCanvasElement} canvas - The canvas for compression.\n * @example\n * function (context, canvas) {\n * context.fillStyle = '#fff';\n * }\n */\n beforeDraw: null,\n /**\n * The hook function to execute after drew the image into the canvas for compression.\n * @type {Function}\n * @param {CanvasRenderingContext2D} context - The 2d rendering context of the canvas.\n * @param {HTMLCanvasElement} canvas - The canvas for compression.\n * @example\n * function (context, canvas) {\n * context.filter = 'grayscale(100%)';\n * }\n */\n drew: null,\n /**\n * The hook function to execute when success to compress the image.\n * @type {Function}\n * @param {File} file - The compressed image File object.\n * @example\n * function (file) {\n * console.log(file);\n * }\n */\n success: null,\n /**\n * The hook function to execute when fail to compress the image.\n * @type {Function}\n * @param {Error} err - An Error object.\n * @example\n * function (err) {\n * console.log(err.message);\n * }\n */\n error: null\n};\n\nvar IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\nvar WINDOW = IS_BROWSER ? window : {};\n\n/**\n * Check if the given value is a positive number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a positive number, else `false`.\n */\nvar isPositiveNumber = function isPositiveNumber(value) {\n return value > 0 && value < Infinity;\n};\nvar slice = Array.prototype.slice;\n\n/**\n * Convert array-like or iterable object to an array.\n * @param {*} value - The value to convert.\n * @returns {Array} Returns a new array.\n */\nfunction toArray(value) {\n return Array.from ? Array.from(value) : slice.call(value);\n}\nvar REGEXP_IMAGE_TYPE = /^image\\/.+$/;\n\n/**\n * Check if the given value is a mime type of image.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given is a mime type of image, else `false`.\n */\nfunction isImageType(value) {\n return REGEXP_IMAGE_TYPE.test(value);\n}\n\n/**\n * Convert image type to extension.\n * @param {string} value - The image type to convert.\n * @returns {boolean} Returns the image extension.\n */\nfunction imageTypeToExtension(value) {\n var extension = isImageType(value) ? value.substr(6) : '';\n if (extension === 'jpeg') {\n extension = 'jpg';\n }\n return \".\".concat(extension);\n}\nvar fromCharCode = String.fromCharCode;\n\n/**\n * Get string from char code in data view.\n * @param {DataView} dataView - The data view for read.\n * @param {number} start - The start index.\n * @param {number} length - The read length.\n * @returns {string} The read result.\n */\nfunction getStringFromCharCode(dataView, start, length) {\n var str = '';\n var i;\n length += start;\n for (i = start; i < length; i += 1) {\n str += fromCharCode(dataView.getUint8(i));\n }\n return str;\n}\nvar btoa = WINDOW.btoa;\n\n/**\n * Transform array buffer to Data URL.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.\n * @param {string} mimeType - The mime type of the Data URL.\n * @returns {string} The result Data URL.\n */\nfunction arrayBufferToDataURL(arrayBuffer, mimeType) {\n var chunks = [];\n var chunkSize = 8192;\n var uint8 = new Uint8Array(arrayBuffer);\n while (uint8.length > 0) {\n // XXX: Babel's `toConsumableArray` helper will throw error in IE or Safari 9\n // eslint-disable-next-line prefer-spread\n chunks.push(fromCharCode.apply(null, toArray(uint8.subarray(0, chunkSize))));\n uint8 = uint8.subarray(chunkSize);\n }\n return \"data:\".concat(mimeType, \";base64,\").concat(btoa(chunks.join('')));\n}\n\n/**\n * Get orientation value from given array buffer.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to read.\n * @returns {number} The read orientation value.\n */\nfunction resetAndGetOrientation(arrayBuffer) {\n var dataView = new DataView(arrayBuffer);\n var orientation;\n\n // Ignores range error when the image does not have correct Exif information\n try {\n var littleEndian;\n var app1Start;\n var ifdStart;\n\n // Only handle JPEG image (start by 0xFFD8)\n if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) {\n var length = dataView.byteLength;\n var offset = 2;\n while (offset + 1 < length) {\n if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) {\n app1Start = offset;\n break;\n }\n offset += 1;\n }\n }\n if (app1Start) {\n var exifIDCode = app1Start + 4;\n var tiffOffset = app1Start + 10;\n if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') {\n var endianness = dataView.getUint16(tiffOffset);\n littleEndian = endianness === 0x4949;\n if (littleEndian || endianness === 0x4D4D /* bigEndian */) {\n if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) {\n var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian);\n if (firstIFDOffset >= 0x00000008) {\n ifdStart = tiffOffset + firstIFDOffset;\n }\n }\n }\n }\n }\n if (ifdStart) {\n var _length = dataView.getUint16(ifdStart, littleEndian);\n var _offset;\n var i;\n for (i = 0; i < _length; i += 1) {\n _offset = ifdStart + i * 12 + 2;\n if (dataView.getUint16(_offset, littleEndian) === 0x0112 /* Orientation */) {\n // 8 is the offset of the current tag's value\n _offset += 8;\n\n // Get the original orientation value\n orientation = dataView.getUint16(_offset, littleEndian);\n\n // Override the orientation with its default value\n dataView.setUint16(_offset, 1, littleEndian);\n break;\n }\n }\n }\n } catch (e) {\n orientation = 1;\n }\n return orientation;\n}\n\n/**\n * Parse Exif Orientation value.\n * @param {number} orientation - The orientation to parse.\n * @returns {Object} The parsed result.\n */\nfunction parseOrientation(orientation) {\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n switch (orientation) {\n // Flip horizontal\n case 2:\n scaleX = -1;\n break;\n\n // Rotate left 180°\n case 3:\n rotate = -180;\n break;\n\n // Flip vertical\n case 4:\n scaleY = -1;\n break;\n\n // Flip vertical and rotate right 90°\n case 5:\n rotate = 90;\n scaleY = -1;\n break;\n\n // Rotate right 90°\n case 6:\n rotate = 90;\n break;\n\n // Flip horizontal and rotate right 90°\n case 7:\n rotate = 90;\n scaleX = -1;\n break;\n\n // Rotate left 90°\n case 8:\n rotate = -90;\n break;\n }\n return {\n rotate: rotate,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\nvar REGEXP_DECIMALS = /\\.\\d*(?:0|9){12}\\d*$/;\n\n/**\n * Normalize decimal number.\n * Check out {@link https://0.30000000000000004.com/}\n * @param {number} value - The value to normalize.\n * @param {number} [times=100000000000] - The times for normalizing.\n * @returns {number} Returns the normalized number.\n */\nfunction normalizeDecimalNumber(value) {\n var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000;\n return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value;\n}\n\n/**\n * Get the max sizes in a rectangle under the given aspect ratio.\n * @param {Object} data - The original sizes.\n * @param {string} [type='contain'] - The adjust type.\n * @returns {Object} The result sizes.\n */\nfunction getAdjustedSizes(_ref) {\n var aspectRatio = _ref.aspectRatio,\n height = _ref.height,\n width = _ref.width;\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'none';\n var isValidWidth = isPositiveNumber(width);\n var isValidHeight = isPositiveNumber(height);\n if (isValidWidth && isValidHeight) {\n var adjustedWidth = height * aspectRatio;\n if ((type === 'contain' || type === 'none') && adjustedWidth > width || type === 'cover' && adjustedWidth < width) {\n height = width / aspectRatio;\n } else {\n width = height * aspectRatio;\n }\n } else if (isValidWidth) {\n height = width / aspectRatio;\n } else if (isValidHeight) {\n width = height * aspectRatio;\n }\n return {\n width: width,\n height: height\n };\n}\n\n/**\n * Get Exif information from the given array buffer.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to read.\n * @returns {Array} The read Exif information.\n */\nfunction getExif(arrayBuffer) {\n var array = toArray(new Uint8Array(arrayBuffer));\n var length = array.length;\n var segments = [];\n var start = 0;\n while (start + 3 < length) {\n var value = array[start];\n var next = array[start + 1];\n\n // SOS (Start of Scan)\n if (value === 0xFF && next === 0xDA) {\n break;\n }\n\n // SOI (Start of Image)\n if (value === 0xFF && next === 0xD8) {\n start += 2;\n } else {\n var offset = array[start + 2] * 256 + array[start + 3];\n var end = start + offset + 2;\n var segment = array.slice(start, end);\n segments.push(segment);\n start = end;\n }\n }\n return segments.reduce(function (exifArray, current) {\n if (current[0] === 0xFF && current[1] === 0xE1) {\n return exifArray.concat(current);\n }\n return exifArray;\n }, []);\n}\n\n/**\n * Insert Exif information into the given array buffer.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.\n * @param {Array} exifArray - The Exif information to insert.\n * @returns {ArrayBuffer} The transformed array buffer.\n */\nfunction insertExif(arrayBuffer, exifArray) {\n var array = toArray(new Uint8Array(arrayBuffer));\n if (array[2] !== 0xFF || array[3] !== 0xE0) {\n return arrayBuffer;\n }\n var app0Length = array[4] * 256 + array[5];\n var newArrayBuffer = [0xFF, 0xD8].concat(exifArray, array.slice(4 + app0Length));\n return new Uint8Array(newArrayBuffer);\n}\n\nvar ArrayBuffer$1 = WINDOW.ArrayBuffer,\n FileReader = WINDOW.FileReader;\nvar URL = WINDOW.URL || WINDOW.webkitURL;\nvar REGEXP_EXTENSION = /\\.\\w+$/;\nvar AnotherCompressor = WINDOW.Compressor;\n\n/**\n * Creates a new image compressor.\n * @class\n */\nvar Compressor = /*#__PURE__*/function () {\n /**\n * The constructor of Compressor.\n * @param {File|Blob} file - The target image file for compressing.\n * @param {Object} [options] - The options for compressing.\n */\n function Compressor(file, options) {\n _classCallCheck(this, Compressor);\n this.file = file;\n this.exif = [];\n this.image = new Image();\n this.options = _objectSpread2(_objectSpread2({}, DEFAULTS), options);\n this.aborted = false;\n this.result = null;\n this.init();\n }\n _createClass(Compressor, [{\n key: \"init\",\n value: function init() {\n var _this = this;\n var file = this.file,\n options = this.options;\n if (!isBlob(file)) {\n this.fail(new Error('The first argument must be a File or Blob object.'));\n return;\n }\n var mimeType = file.type;\n if (!isImageType(mimeType)) {\n this.fail(new Error('The first argument must be an image File or Blob object.'));\n return;\n }\n if (!URL || !FileReader) {\n this.fail(new Error('The current browser does not support image compression.'));\n return;\n }\n if (!ArrayBuffer$1) {\n options.checkOrientation = false;\n options.retainExif = false;\n }\n var isJPEGImage = mimeType === 'image/jpeg';\n var checkOrientation = isJPEGImage && options.checkOrientation;\n var retainExif = isJPEGImage && options.retainExif;\n if (URL && !checkOrientation && !retainExif) {\n this.load({\n url: URL.createObjectURL(file)\n });\n } else {\n var reader = new FileReader();\n this.reader = reader;\n reader.onload = function (_ref) {\n var target = _ref.target;\n var result = target.result;\n var data = {};\n var orientation = 1;\n if (checkOrientation) {\n // Reset the orientation value to its default value 1\n // as some iOS browsers will render image with its orientation\n orientation = resetAndGetOrientation(result);\n if (orientation > 1) {\n _extends(data, parseOrientation(orientation));\n }\n }\n if (retainExif) {\n _this.exif = getExif(result);\n }\n if (checkOrientation || retainExif) {\n if (!URL\n\n // Generate a new URL with the default orientation value 1.\n || orientation > 1) {\n data.url = arrayBufferToDataURL(result, mimeType);\n } else {\n data.url = URL.createObjectURL(file);\n }\n } else {\n data.url = result;\n }\n _this.load(data);\n };\n reader.onabort = function () {\n _this.fail(new Error('Aborted to read the image with FileReader.'));\n };\n reader.onerror = function () {\n _this.fail(new Error('Failed to read the image with FileReader.'));\n };\n reader.onloadend = function () {\n _this.reader = null;\n };\n if (checkOrientation || retainExif) {\n reader.readAsArrayBuffer(file);\n } else {\n reader.readAsDataURL(file);\n }\n }\n }\n }, {\n key: \"load\",\n value: function load(data) {\n var _this2 = this;\n var file = this.file,\n image = this.image;\n image.onload = function () {\n _this2.draw(_objectSpread2(_objectSpread2({}, data), {}, {\n naturalWidth: image.naturalWidth,\n naturalHeight: image.naturalHeight\n }));\n };\n image.onabort = function () {\n _this2.fail(new Error('Aborted to load the image.'));\n };\n image.onerror = function () {\n _this2.fail(new Error('Failed to load the image.'));\n };\n\n // Match all browsers that use WebKit as the layout engine in iOS devices,\n // such as Safari for iOS, Chrome for iOS, and in-app browsers.\n if (WINDOW.navigator && /(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(WINDOW.navigator.userAgent)) {\n // Fix the `The operation is insecure` error (#57)\n image.crossOrigin = 'anonymous';\n }\n image.alt = file.name;\n image.src = data.url;\n }\n }, {\n key: \"draw\",\n value: function draw(_ref2) {\n var _this3 = this;\n var naturalWidth = _ref2.naturalWidth,\n naturalHeight = _ref2.naturalHeight,\n _ref2$rotate = _ref2.rotate,\n rotate = _ref2$rotate === void 0 ? 0 : _ref2$rotate,\n _ref2$scaleX = _ref2.scaleX,\n scaleX = _ref2$scaleX === void 0 ? 1 : _ref2$scaleX,\n _ref2$scaleY = _ref2.scaleY,\n scaleY = _ref2$scaleY === void 0 ? 1 : _ref2$scaleY;\n var file = this.file,\n image = this.image,\n options = this.options;\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n var is90DegreesRotated = Math.abs(rotate) % 180 === 90;\n var resizable = (options.resize === 'contain' || options.resize === 'cover') && isPositiveNumber(options.width) && isPositiveNumber(options.height);\n var maxWidth = Math.max(options.maxWidth, 0) || Infinity;\n var maxHeight = Math.max(options.maxHeight, 0) || Infinity;\n var minWidth = Math.max(options.minWidth, 0) || 0;\n var minHeight = Math.max(options.minHeight, 0) || 0;\n var aspectRatio = naturalWidth / naturalHeight;\n var width = options.width,\n height = options.height;\n if (is90DegreesRotated) {\n var _ref3 = [maxHeight, maxWidth];\n maxWidth = _ref3[0];\n maxHeight = _ref3[1];\n var _ref4 = [minHeight, minWidth];\n minWidth = _ref4[0];\n minHeight = _ref4[1];\n var _ref5 = [height, width];\n width = _ref5[0];\n height = _ref5[1];\n }\n if (resizable) {\n aspectRatio = width / height;\n }\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: maxWidth,\n height: maxHeight\n }, 'contain');\n maxWidth = _getAdjustedSizes.width;\n maxHeight = _getAdjustedSizes.height;\n var _getAdjustedSizes2 = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n minWidth = _getAdjustedSizes2.width;\n minHeight = _getAdjustedSizes2.height;\n if (resizable) {\n var _getAdjustedSizes3 = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: width,\n height: height\n }, options.resize);\n width = _getAdjustedSizes3.width;\n height = _getAdjustedSizes3.height;\n } else {\n var _getAdjustedSizes4 = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: width,\n height: height\n });\n var _getAdjustedSizes4$wi = _getAdjustedSizes4.width;\n width = _getAdjustedSizes4$wi === void 0 ? naturalWidth : _getAdjustedSizes4$wi;\n var _getAdjustedSizes4$he = _getAdjustedSizes4.height;\n height = _getAdjustedSizes4$he === void 0 ? naturalHeight : _getAdjustedSizes4$he;\n }\n width = Math.floor(normalizeDecimalNumber(Math.min(Math.max(width, minWidth), maxWidth)));\n height = Math.floor(normalizeDecimalNumber(Math.min(Math.max(height, minHeight), maxHeight)));\n var destX = -width / 2;\n var destY = -height / 2;\n var destWidth = width;\n var destHeight = height;\n var params = [];\n if (resizable) {\n var srcX = 0;\n var srcY = 0;\n var srcWidth = naturalWidth;\n var srcHeight = naturalHeight;\n var _getAdjustedSizes5 = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: naturalWidth,\n height: naturalHeight\n }, {\n contain: 'cover',\n cover: 'contain'\n }[options.resize]);\n srcWidth = _getAdjustedSizes5.width;\n srcHeight = _getAdjustedSizes5.height;\n srcX = (naturalWidth - srcWidth) / 2;\n srcY = (naturalHeight - srcHeight) / 2;\n params.push(srcX, srcY, srcWidth, srcHeight);\n }\n params.push(destX, destY, destWidth, destHeight);\n if (is90DegreesRotated) {\n var _ref6 = [height, width];\n width = _ref6[0];\n height = _ref6[1];\n }\n canvas.width = width;\n canvas.height = height;\n if (!isImageType(options.mimeType)) {\n options.mimeType = file.type;\n }\n var fillStyle = 'transparent';\n\n // Converts PNG files over the `convertSize` to JPEGs.\n if (file.size > options.convertSize && options.convertTypes.indexOf(options.mimeType) >= 0) {\n options.mimeType = 'image/jpeg';\n }\n var isJPEGImage = options.mimeType === 'image/jpeg';\n if (isJPEGImage) {\n fillStyle = '#fff';\n }\n\n // Override the default fill color (#000, black)\n context.fillStyle = fillStyle;\n context.fillRect(0, 0, width, height);\n if (options.beforeDraw) {\n options.beforeDraw.call(this, context, canvas);\n }\n if (this.aborted) {\n return;\n }\n context.save();\n context.translate(width / 2, height / 2);\n context.rotate(rotate * Math.PI / 180);\n context.scale(scaleX, scaleY);\n context.drawImage.apply(context, [image].concat(params));\n context.restore();\n if (options.drew) {\n options.drew.call(this, context, canvas);\n }\n if (this.aborted) {\n return;\n }\n var callback = function callback(blob) {\n if (!_this3.aborted) {\n var done = function done(result) {\n return _this3.done({\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n result: result\n });\n };\n if (blob && isJPEGImage && options.retainExif && _this3.exif && _this3.exif.length > 0) {\n var next = function next(arrayBuffer) {\n return done(toBlob(arrayBufferToDataURL(insertExif(arrayBuffer, _this3.exif), options.mimeType)));\n };\n if (blob.arrayBuffer) {\n blob.arrayBuffer().then(next).catch(function () {\n _this3.fail(new Error('Failed to read the compressed image with Blob.arrayBuffer().'));\n });\n } else {\n var reader = new FileReader();\n _this3.reader = reader;\n reader.onload = function (_ref7) {\n var target = _ref7.target;\n next(target.result);\n };\n reader.onabort = function () {\n _this3.fail(new Error('Aborted to read the compressed image with FileReader.'));\n };\n reader.onerror = function () {\n _this3.fail(new Error('Failed to read the compressed image with FileReader.'));\n };\n reader.onloadend = function () {\n _this3.reader = null;\n };\n reader.readAsArrayBuffer(blob);\n }\n } else {\n done(blob);\n }\n }\n };\n if (canvas.toBlob) {\n canvas.toBlob(callback, options.mimeType, options.quality);\n } else {\n callback(toBlob(canvas.toDataURL(options.mimeType, options.quality)));\n }\n }\n }, {\n key: \"done\",\n value: function done(_ref8) {\n var naturalWidth = _ref8.naturalWidth,\n naturalHeight = _ref8.naturalHeight,\n result = _ref8.result;\n var file = this.file,\n image = this.image,\n options = this.options;\n if (URL && image.src.indexOf('blob:') === 0) {\n URL.revokeObjectURL(image.src);\n }\n if (result) {\n // Returns original file if the result is greater than it and without size related options\n if (options.strict && !options.retainExif && result.size > file.size && options.mimeType === file.type && !(options.width > naturalWidth || options.height > naturalHeight || options.minWidth > naturalWidth || options.minHeight > naturalHeight || options.maxWidth < naturalWidth || options.maxHeight < naturalHeight)) {\n result = file;\n } else {\n var date = new Date();\n result.lastModified = date.getTime();\n result.lastModifiedDate = date;\n result.name = file.name;\n\n // Convert the extension to match its type\n if (result.name && result.type !== file.type) {\n result.name = result.name.replace(REGEXP_EXTENSION, imageTypeToExtension(result.type));\n }\n }\n } else {\n // Returns original file if the result is null in some cases.\n result = file;\n }\n this.result = result;\n if (options.success) {\n options.success.call(this, result);\n }\n }\n }, {\n key: \"fail\",\n value: function fail(err) {\n var options = this.options;\n if (options.error) {\n options.error.call(this, err);\n } else {\n throw err;\n }\n }\n }, {\n key: \"abort\",\n value: function abort() {\n if (!this.aborted) {\n this.aborted = true;\n if (this.reader) {\n this.reader.abort();\n } else if (!this.image.complete) {\n this.image.onload = null;\n this.image.onabort();\n } else {\n this.fail(new Error('The compression process has been aborted.'));\n }\n }\n }\n\n /**\n * Get the no conflict compressor class.\n * @returns {Compressor} The compressor class.\n */\n }], [{\n key: \"noConflict\",\n value: function noConflict() {\n window.Compressor = AnotherCompressor;\n return Compressor;\n }\n\n /**\n * Change the default options.\n * @param {Object} options - The new default options.\n */\n }, {\n key: \"setDefaults\",\n value: function setDefaults(options) {\n _extends(DEFAULTS, options);\n }\n }]);\n return Compressor;\n}();\n\nexport { Compressor as default };\n","import type { IAppConfiguration, IAppConfigurationUI } from '../contexts/configuration';\nimport { DocumentType } from '../contexts/app-state';\nimport type { IDocument, IDocumentPage } from '../contexts/app-state';\nimport Compressor from 'compressorjs';\nimport merge from 'deepmerge';\n\nexport type FileEventTarget = EventTarget & { files: FileList };\nexport interface ICameraEvent extends Event {\n currentTarget: EventTarget & HTMLInputElement;\n}\n\nexport const nativeCameraHandler = (e: ICameraEvent): Promise<string> => {\n return new Promise((resolve, reject) => {\n if (!e.target) {\n return reject('Event target is missing');\n }\n const target = e.target as FileEventTarget;\n const image = target.files[0];\n const reader1 = new FileReader();\n reader1.readAsDataURL(image);\n\n reader1.onload = e => {\n const image = e.target?.result;\n };\n new Compressor(image, {\n quality: 0.6,\n success(result) {\n const reader = new FileReader();\n reader.readAsDataURL(result);\n reader.onload = e => {\n const image = e.target?.result;\n resolve(image as string);\n };\n },\n error(err) {\n return reject(err.message);\n },\n });\n });\n};\n\nexport const clearDocs = (\n type: DocumentType,\n configuration: IAppConfiguration,\n uiPack: IAppConfigurationUI,\n documents: IDocument[],\n): IDocument[] => {\n const documentOptionsConfiguration = merge(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n uiPack.documentOptions || {},\n configuration.documentOptions || {},\n );\n const { options } = documentOptionsConfiguration;\n const isFromOptions = Object.keys(options).find(t => t === type);\n if (isFromOptions) {\n return documents.filter(d => !Object.keys(options).find(t => t === d.type));\n }\n return documents.filter(d => type !== d.type);\n};\n\nexport const addDocument = (\n type: DocumentType,\n base64: string,\n configuration: IAppConfiguration,\n uiPack: IAppConfigurationUI,\n documents: IDocument[],\n document: IDocument,\n): IDocument[] => {\n const clearedDocuments = clearDocs(type, configuration, uiPack, documents);\n return [\n ...clearedDocuments,\n {\n ...document,\n pages: [{ side: 'front', base64 }],\n },\n ];\n};\n\nconst getUpdatedPages = (base64: string, doc: IDocument): IDocumentPage[] => {\n const existingPage = doc.pages.find(p => p.side === 'back');\n if (existingPage) {\n return doc.pages.map(page => {\n if (page.side === 'back') {\n return {\n ...page,\n base64,\n side: 'back',\n };\n }\n return page;\n });\n }\n return [...doc.pages, { base64, side: 'back' }];\n};\n\nexport const updateDocument = (\n type: DocumentType,\n base64: string,\n documents: IDocument[],\n): IDocument[] => {\n return documents.map(doc => {\n if (doc.type === type) {\n const newPagesState = getUpdatedPages(base64, doc);\n return { ...doc, pages: newPagesState };\n }\n return doc;\n });\n};\n\n/**\n * Quality feedback types for real-time camera analysis\n */\nexport interface QualityFeedback {\n lighting: 'tooDark' | 'tooBright' | 'good';\n blur: 'tooBlurry' | 'moveCloser' | 'good';\n glare: 'detected' | 'good';\n}\n\n/**\n * Analyze image quality from video stream for real-time feedback\n * @param videoElement - HTMLVideoElement with active camera stream\n * @returns QualityFeedback object with lighting, blur, and glare status\n */\nexport function analyzeImageQuality(videoElement: HTMLVideoElement): QualityFeedback {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n return { lighting: 'good', blur: 'good', glare: 'good' };\n }\n\n canvas.width = videoElement.videoWidth;\n canvas.height = videoElement.videoHeight;\n ctx.drawImage(videoElement, 0, 0);\n\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const data = imageData.data;\n\n // Analyze lighting (average brightness)\n let totalBrightness = 0;\n for (let i = 0; i < data.length; i += 4) {\n const r = data[i];\n const g = data[i + 1];\n const b = data[i + 2];\n totalBrightness += (r + g + b) / 3;\n }\n const avgBrightness = totalBrightness / (data.length / 4);\n\n let lighting: QualityFeedback['lighting'] = 'good';\n if (avgBrightness < 50) lighting = 'tooDark';\n if (avgBrightness > 200) lighting = 'tooBright';\n\n // Analyze blur (Laplacian variance)\n const blurScore = calculateLaplacianVariance(imageData);\n let blur: QualityFeedback['blur'] = 'good';\n if (blurScore < 100) blur = 'tooBlurry';\n\n // Analyze glare (detect bright spots)\n const glareDetected = detectGlare(data, avgBrightness);\n const glare: QualityFeedback['glare'] = glareDetected ? 'detected' : 'good';\n\n return { lighting, blur, glare };\n}\n\n/**\n * Calculate Laplacian variance for blur detection\n * Higher variance = sharper image\n */\nfunction calculateLaplacianVariance(imageData: ImageData): number {\n const { data, width, height } = imageData;\n const gray = new Float32Array(width * height);\n\n // Convert to grayscale\n for (let i = 0; i < data.length; i += 4) {\n const idx = i / 4;\n gray[idx] = (data[i] + data[i + 1] + data[i + 2]) / 3;\n }\n\n // Apply Laplacian operator\n let sum = 0;\n let sumSq = 0;\n let count = 0;\n\n for (let y = 1; y < height - 1; y++) {\n for (let x = 1; x < width - 1; x++) {\n const idx = y * width + x;\n const laplacian =\n -gray[idx - width - 1] -\n gray[idx - width] -\n gray[idx - width + 1] -\n gray[idx - 1] +\n 8 * gray[idx] -\n gray[idx + 1] -\n gray[idx + width - 1] -\n gray[idx + width] -\n gray[idx + width + 1];\n\n sum += laplacian;\n sumSq += laplacian * laplacian;\n count++;\n }\n }\n\n const mean = sum / count;\n const variance = sumSq / count - mean * mean;\n\n return variance;\n}\n\n/**\n * Detect glare by finding bright spots significantly above average\n */\nfunction detectGlare(data: Uint8ClampedArray, avgBrightness: number): boolean {\n let brightPixelCount = 0;\n const threshold = avgBrightness + 50;\n\n for (let i = 0; i < data.length; i += 4) {\n const brightness = (data[i] + data[i + 1] + data[i + 2]) / 3;\n if (brightness > threshold) brightPixelCount++;\n }\n\n const brightPixelRatio = brightPixelCount / (data.length / 4);\n return brightPixelRatio > 0.1; // More than 10% bright pixels\n}\n","import { writable } from 'svelte/store';\n\nexport const createToggle = (initialState = false) => {\n const { subscribe, update } = writable(initialState);\n const toggle = (nextState?: boolean) =>\n update(prevState => (typeof nextState === 'boolean' ? nextState : !prevState));\n const toggleOn = () => toggle(true);\n const toggleOff = () => toggle(false);\n\n return [{ subscribe, update }, toggle, toggleOn, toggleOff] as const;\n};\n","<script lang=\"ts\">\n import { createEventDispatcher } from 'svelte';\n import { Container } from '../../atoms';\n import Paragraph from '../../atoms/Paragraph/Paragraph.svelte';\n import { configuration as globalConfiguration } from '../../contexts/configuration';\n import type { IAttributes, ICSSProperties } from '../../contexts/configuration';\n import type { IDocumentInfo } from '../../contexts/app-state';\n import { T } from '../../contexts/translation';\n import type { IDocumentOptions } from '../../organisms/DocumentOptions';\n import { makesLocalStyles } from '../../utils/css-utils';\n import Icon from '../../atoms/Icons/Icon.svelte';\n import { nativeCameraHandler } from '../../utils/photo-utils';\n import type { ICameraEvent } from '../../utils/photo-utils';\n import { isNativeCamera } from '../../contexts/flows/hooks';\n import { createToggle } from '../../hooks/createToggle/createToggle';\n\n export let configuration: IDocumentOptions;\n export let active: boolean;\n export let attributes: IAttributes;\n export let document: IDocumentInfo;\n\n const [isDisabled, , toggleOnIsDisabled] = createToggle();\n\n const dispatch = createEventDispatcher();\n const handleSelect = () => {\n if ($isDisabled) return;\n\n dispatch('selectOption', document.type);\n toggleOnIsDisabled();\n };\n\n const handler = async (e: ICameraEvent) => {\n if (!e.target) return;\n const image = await nativeCameraHandler(e);\n dispatch('photoTake', { image, type: document.type });\n };\n\n const style = makesLocalStyles(configuration.optionProps.style as ICSSProperties);\n</script>\n\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<button\n type=\"button\"\n {style}\n class=\"document-option\"\n class:disabled={$isDisabled}\n class:active\n on:click={handleSelect}\n on:keydown={(e) => e.key === 'Enter' && handleSelect()}\n aria-pressed={active}\n aria-label={`Select ${document.type} document`}\n>\n {#if isNativeCamera($globalConfiguration)}\n <input\n class=\"camera-input\"\n type=\"file\"\n accept=\"image/*\"\n capture=\"environment\"\n on:change={handler}\n />\n {/if}\n <Container configuration={configuration.iconContainerProps} active={active}>\n <Icon\n name={attributes.icon}\n width={attributes.width}\n height={attributes.height}\n configuration={configuration.iconProps}\n active={active}\n />\n </Container>\n <div class=\"text-container\">\n <Paragraph configuration={configuration.titleProps} active={active}>\n <T key={`${document.type}-title`} namespace=\"document-options\" />\n </Paragraph>\n {#if configuration.descriptionProps}\n <Paragraph configuration={configuration.descriptionProps} active={active}>\n <T key={`${document.type}-description`} namespace=\"document-options\" />\n </Paragraph>\n {/if}\n </div>\n</button>\n\n<style>\n .document-option {\n cursor: pointer;\n border-radius: var(--border-radius);\n padding: var(--padding);\n margin: var(--margin);\n width: var(--width);\n border: var(--border);\n display: var(--display);\n text-align: var(--text-align);\n background: var(--background);\n transition: all 0.1s ease-in;\n user-select: none;\n position: relative;\n font-family: inherit;\n font-size: inherit;\n }\n .document-option:hover {\n background: var(--hover-background);\n border: var(--hover-border);\n }\n .document-option:focus {\n outline: 2px solid var(--hover-border);\n outline-offset: 2px;\n }\n .document-option:active {\n background: var(--hover-background);\n border: var(--hover-border);\n }\n .document-option.active {\n background: var(--hover-background);\n border: var(--hover-border);\n }\n .camera-input {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0px;\n left: 0px;\n z-index: 3;\n opacity: 0;\n }\n\n .disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n</style>\n","import { toast } from '@zerodevx/svelte-toast';\nimport { t } from '../../contexts/translation/hooks';\n\nexport const checkIsCameraAvailable = async (): Promise<boolean> => {\n // Check if we're in a secure context (HTTPS or localhost)\n const isSecureContext = window.isSecureContext ||\n window.location.hostname === 'localhost' ||\n window.location.hostname === '127.0.0.1';\n\n if (!isSecureContext) {\n console.warn('[Camera] Not in secure context - camera may not be available on HTTP');\n // Still return true to allow navigation - the capture page will handle the error\n return true;\n }\n\n // Check if mediaDevices API is available\n if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {\n console.error('[Camera] mediaDevices API not available');\n toast.push(t('general', 'errorCameraAccess'));\n return false;\n }\n\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ video: true });\n if (stream) {\n stream.getTracks().forEach(track => track.stop());\n }\n console.log('[Camera] Camera access granted');\n return true;\n } catch (error) {\n console.error('[Camera] Error accessing camera:', error);\n // Don't show toast here - let the capture page handle it with better UX\n // toast.push(t('general', 'errorCameraAccess'));\n // Return true to allow navigation - the capture page will show proper error UI\n return true;\n }\n};\n","<script lang=\"ts\">\n import { configuration } from '../../contexts/configuration';\n import type { IStepConfiguration } from '../../contexts/configuration';\n import DocumentOption from '../../molecules/DocumentOption/DocumentOption.svelte';\n import { goToNextStep } from '../../contexts/navigation';\n import type { DocumentType, IDocument, IDocumentInfo } from '../../contexts/app-state';\n import { currentStepId, documents, selectedDocumentInfo } from '../../contexts/app-state/stores';\n import { addDocument } from '../../utils/photo-utils';\n import { isNativeCamera } from '../../contexts/flows/hooks';\n import type { IDocumentOption } from '../../molecules/DocumentOption';\n import merge from 'deepmerge';\n import { checkIsCameraAvailable } from '../../services/camera-manager';\n import { uiPack } from '../../ui-packs';\n\n export let step: IStepConfiguration;\n const ducumentOptions: IDocumentOption[] = [];\n\n const documentOptionsConfiguration = merge($uiPack.documentOptions, $configuration.documentOptions || {});\n\n Object.keys(documentOptionsConfiguration.options).forEach((key: string) => {\n const type = key as DocumentType;\n const option = documentOptionsConfiguration.options[type] as IDocumentOption;\n ducumentOptions.push(option);\n });\n\n const handleSelectOption = async ({ detail }: { detail: string }) => {\n if (isNativeCamera($configuration)) return;\n const type = detail as DocumentType;\n const option = documentOptionsConfiguration.options[type];\n $selectedDocumentInfo = option?.document as IDocumentInfo;\n const isCameraAvailable = await checkIsCameraAvailable();\n if (!isCameraAvailable) return;\n goToNextStep(currentStepId, $configuration, $currentStepId);\n };\n\n const handleTakePhoto = async ({ detail }: { detail: { image: string; type: DocumentType } }) => {\n const option = documentOptionsConfiguration.options[detail.type];\n const document: IDocument = { type: detail.type, metadata: {}, pages: [] };\n const newDocumentsState: IDocument[] = addDocument(\n document.type,\n detail.image,\n $configuration,\n $uiPack,\n $documents,\n document,\n );\n $selectedDocumentInfo = option?.document as IDocumentInfo;\n $documents = newDocumentsState;\n goToNextStep(currentStepId, $configuration, $currentStepId);\n };\n</script>\n\n<div class=\"document-options\">\n {#each ducumentOptions as documentOption}\n <DocumentOption\n on:selectOption={handleSelectOption}\n on:photoTake={handleTakePhoto}\n configuration={documentOptionsConfiguration}\n attributes={documentOption.attributes}\n document={documentOption.document}\n active={$selectedDocumentInfo?.type === documentOption.document.type}\n />\n {/each}\n</div>\n","<script lang=\"ts\">\n import { T } from '../contexts/translation';\n import { Image, Title, Paragraph, IconButton, IconCloseButton } from '../atoms';\n import { configuration } from '../contexts/configuration';\n import { Elements } from '../contexts/configuration';\n import { DocumentOptions } from '../organisms';\n import { goToPrevStep } from '../contexts/navigation';\n import { preloadNextStepByCurrent } from '../services/preload-service';\n import { currentStepId, appState } from '../contexts/app-state';\n import {\n EActionNames,\n sendButtonClickEvent,\n EVerificationStatuses,\n } from '../utils/event-service';\n import { getLayoutStyles, getStepConfiguration, uiPack } from '../ui-packs';\n import { getFlowConfig } from '../contexts/flows/hooks';\n\n export let stepId;\n\n const step = getStepConfiguration($configuration, $uiPack, stepId);\n const flow = getFlowConfig($configuration);\n const style = getLayoutStyles($configuration, $uiPack, step);\n\n const stepNamespace = step.namespace!;\n\n preloadNextStepByCurrent($configuration, configuration, stepId, $uiPack);\n</script>\n\n<div class=\"container\" {style}>\n {#each step.elements as element}\n {#if element.type === Elements.IconButton}\n <IconButton\n configuration={element.props}\n on:click={() => goToPrevStep(currentStepId, $configuration, $currentStepId)}\n />\n {/if}\n {#if element.type === Elements.IconCloseButton && flow.showCloseButton}\n <IconCloseButton\n configuration={element.props}\n on:click={() => {\n sendButtonClickEvent(\n EActionNames.CLOSE,\n { status: EVerificationStatuses.DATA_COLLECTION },\n $appState,\n true,\n );\n }}\n />\n {/if}\n {#if element.type === Elements.Image}\n <Image configuration={element.props} />\n {/if}\n {#if element.type === Elements.Title}\n <Title configuration={element.props}>\n <T key=\"title\" namespace={stepNamespace} />\n </Title>\n {/if}\n {#if element.type === Elements.Paragraph}\n <Paragraph configuration={element.props}>\n <T key={element.props.context || 'description'} namespace={stepNamespace} />\n </Paragraph>\n {/if}\n {/each}\n <DocumentOptions {step} />\n</div>\n\n<style>\n .container {\n position: var(--position);\n padding: var(--padding);\n text-align: center;\n background: var(--background);\n height: 100%;\n }\n</style>\n","<script lang=\"ts\">\n import { T } from '../contexts/translation';\n import { Image, Button, Title, Paragraph, IconButton, IconCloseButton } from '../atoms';\n import { configuration } from '../contexts/configuration';\n import { goToNextStep, goToPrevStep } from '../contexts/navigation/hooks';\n import { Elements } from '../contexts/configuration/types';\n import { currentStepId, DocumentType } from '../contexts/app-state';\n import type { IDocument } from '../contexts/app-state';\n import { getFlowConfig, isNativeCamera } from '../contexts/flows/hooks';\n import { addDocument, nativeCameraHandler } from '../utils/photo-utils';\n import type { ICameraEvent } from '../utils/photo-utils';\n import { appState, documents, selectedDocumentInfo } from '../contexts/app-state/stores';\n import {\n EActionNames,\n sendButtonClickEvent,\n EVerificationStatuses,\n } from '../utils/event-service';\n import { checkIsCameraAvailable } from '../services/camera-manager';\n import { getLayoutStyles, getStepConfiguration, uiPack } from '../ui-packs';\n\n export let stepId;\n\n const step = getStepConfiguration($configuration, $uiPack, stepId);\n const flow = getFlowConfig($configuration);\n const style = getLayoutStyles($configuration, $uiPack, step);\n\n const documentType =\n (($configuration.steps && $configuration.steps[$currentStepId].type) as DocumentType || $uiPack.steps[$currentStepId].type as DocumentType) || $selectedDocumentInfo.type;\n\n $: {\n if (!documentType) goToPrevStep(currentStepId, $configuration, $currentStepId);\n }\n const stepNamespace = `${step.namespace}.${documentType}`;\n\n const handleGoToNextStep = async () => {\n const isCameraAvailable = await checkIsCameraAvailable();\n if (!isCameraAvailable) return;\n goToNextStep(currentStepId, $configuration, $currentStepId);\n };\n\n const handler = async (e: ICameraEvent) => {\n if (!e.target) return;\n const image = await nativeCameraHandler(e);\n if (!documentType) {\n throw Error(\"document context wasn't provided\");\n }\n const document: IDocument = { type: documentType, metadata: {}, pages: [] };\n const newDocumentsState: IDocument[] = addDocument(\n document.type,\n image,\n $configuration,\n $uiPack,\n $documents,\n document,\n );\n $documents = newDocumentsState;\n goToNextStep(currentStepId, $configuration, $currentStepId);\n };\n</script>\n\n<div class=\"container\" {style}>\n {#each step.elements as element}\n {#if element.type === Elements.IconButton}\n <IconButton\n configuration={element.props}\n on:click={() => goToPrevStep(currentStepId, $configuration, $currentStepId)}\n />\n {/if}\n {#if element.type === Elements.IconCloseButton && flow.showCloseButton}\n <IconCloseButton\n configuration={element.props}\n on:click={() => {\n sendButtonClickEvent(\n EActionNames.CLOSE,\n { status: EVerificationStatuses.DATA_COLLECTION },\n $appState,\n true,\n );\n }}\n />\n {/if}\n {#if element.type === Elements.Image}\n <Image configuration={element.props} />\n {/if}\n {#if element.type === Elements.Title}\n <Title configuration={element.props}>\n <T key={'title'} namespace={stepNamespace} />\n </Title>\n {/if}\n {#if element.type === Elements.Paragraph}\n <Paragraph configuration={element.props}>\n <T key={'description'} namespace={stepNamespace} />\n </Paragraph>\n {/if}\n {#if element.type === Elements.Button}\n <div class=\"button-container\">\n {#if isNativeCamera($configuration)}\n <input\n class=\"camera-input\"\n type=\"file\"\n accept=\"image/*\"\n capture=\"environment\"\n on:change={handler}\n />\n {/if}\n <Button on:click={handleGoToNextStep} configuration={element.props}>\n <T key={'button'} namespace={stepNamespace} />\n </Button>\n </div>\n {/if}\n {/each}\n</div>\n\n<style>\n .container {\n height: 100%;\n padding: var(--padding);\n position: var(--position);\n background: var(--background);\n text-align: center;\n }\n .button-container {\n position: relative;\n }\n .camera-input {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0px;\n left: 0px;\n z-index: 3;\n opacity: 0;\n cursor: pointer;\n }\n</style>\n","import Compressor from 'compressorjs';\n\nexport interface CompressionOptions {\n quality?: number;\n maxWidth?: number;\n maxHeight?: number;\n}\n\nexport interface CompressionResult {\n blob: Blob;\n base64: string;\n compressionRatio: number;\n}\n\n/**\n * Compress an image using CompressorJS\n * @param file - Image file or blob to compress\n * @param options - Compression options (quality, maxWidth, maxHeight)\n * @returns Promise with compressed blob, base64 string, and compression ratio\n */\nexport async function compressImage(\n file: File | Blob,\n options: CompressionOptions = {}\n): Promise<CompressionResult> {\n const { quality = 0.85, maxWidth = 1920, maxHeight = 1080 } = options;\n const originalSize = file.size;\n\n return new Promise((resolve, reject) => {\n new Compressor(file, {\n quality,\n maxWidth,\n maxHeight,\n mimeType: 'image/jpeg',\n success(result: Blob) {\n const reader = new FileReader();\n reader.onloadend = () => {\n resolve({\n blob: result,\n base64: reader.result as string,\n compressionRatio: originalSize / result.size,\n });\n };\n reader.onerror = reject;\n reader.readAsDataURL(result);\n },\n error(err: Error) {\n reject(err);\n },\n });\n });\n}\n\n/**\n * Validate that an image blob is under 1MB\n * @param blob - Image blob to validate\n * @returns true if blob size is <= 1MB\n */\nexport function validateImageSize(blob: Blob): boolean {\n const MAX_SIZE = 1024 * 1024; // 1MB\n return blob.size <= MAX_SIZE;\n}\n","<script lang=\"ts\">\n import CameraPhoto, { FACING_MODES } from 'jslib-html5-camera-photo';\n import { T } from '../contexts/translation';\n import { configuration } from '../contexts/configuration';\n import { onDestroy, tick } from 'svelte';\n import {\n IconButton,\n IconCloseButton,\n Overlay,\n Paragraph,\n Loader,\n } from '../atoms';\n import { Elements, Steps } from '../contexts/configuration/types';\n import { DocumentType, appState } from '../contexts/app-state';\n import type { IDocument } from '../contexts/app-state';\n import { goToNextStep, goToPrevStep } from '../contexts/navigation';\n import Title from '../atoms/Title/Title.svelte';\n import { documents, currentStepId, selectedDocumentInfo } from '../contexts/app-state/stores';\n import merge from 'deepmerge';\n import { preloadNextStepByCurrent } from '../services/preload-service';\n import {\n EActionNames,\n EVerificationStatuses,\n sendButtonClickEvent,\n } from '../utils/event-service';\n import { getLayoutStyles, getStepConfiguration, uiPack } from '../ui-packs';\n import { createToggle } from '../hooks/createToggle/createToggle';\n import { compressImage } from '../services/image-compression';\n import { setPendingCaptureMetadata } from '../contexts/app-state/stores';\n\n export let stepId;\n\n let video: HTMLVideoElement | null = null;\n let cameraPhoto: CameraPhoto | undefined = undefined;\n let cameraError: string | null = null;\n let isCompressing = false;\n let cameraInitialized = false;\n let initAttempted = false;\n let cardDetected = false;\n let autoCaptureTimer: number | null = null;\n let autoCaptureCountdown = 0;\n\n const step = getStepConfiguration($configuration, $uiPack, stepId);\n const style = getLayoutStyles($configuration, $uiPack, step);\n\n const [isDisabled, , toggleOnIsDisabled, toggleOffIsDisabled] = createToggle();\n\n const documentOptionsConfiguration = merge(\n $uiPack.documentOptions,\n $configuration.documentOptions || {},\n );\n\n const documentType =\n (($configuration.steps && $configuration.steps[$currentStepId].type) as DocumentType) ||\n ($uiPack.steps[$currentStepId].type as DocumentType) ||\n $selectedDocumentInfo.type;\n\n let stream: MediaStream | undefined;\n const stepNamespace = `${step.namespace}.${documentType}`;\n\n $: {\n if (!documentType) goToPrevStep(currentStepId, $configuration, $currentStepId);\n }\n\n // Reactive statement to initialize camera when video element becomes available\n $: if (video && !cameraInitialized && !initAttempted && !cameraError) {\n initAttempted = true;\n initializeCamera();\n }\n\n async function initializeCamera() {\n await tick();\n\n if (!video) {\n console.error('[DocumentPhoto] Video element not found after tick');\n cameraError = 'Video element not initialized';\n return;\n }\n\n console.log('[DocumentPhoto] Initializing camera with video element:', video);\n\n // Check if we're in a secure context\n const isSecureContext = window.isSecureContext ||\n window.location.hostname === 'localhost' ||\n window.location.hostname === '127.0.0.1';\n\n if (!isSecureContext) {\n console.warn('[DocumentPhoto] Not in secure context - camera requires HTTPS');\n cameraError = 'HTTPS_REQUIRED';\n return;\n }\n\n if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {\n console.error('[DocumentPhoto] mediaDevices API not available');\n cameraError = 'Camera not supported on this device or browser';\n return;\n }\n\n try {\n cameraPhoto = new CameraPhoto(video);\n console.log('[DocumentPhoto] CameraPhoto instance created, starting camera...');\n\n const cameraStream = await cameraPhoto.startCamera(FACING_MODES.ENVIRONMENT, {\n width: 1920,\n height: 1080,\n });\n\n console.log('[DocumentPhoto] Camera stream started successfully');\n stream = cameraStream;\n cameraError = null;\n cameraInitialized = true;\n\n // Start simulated card detection after camera initializes\n // In production, this would use TensorFlow.js or similar for real edge detection\n startCardDetection();\n } catch (error) {\n console.error('[DocumentPhoto] Camera error:', error);\n cameraError = (error as Error).message || 'Camera access denied';\n }\n }\n\n function startCardDetection() {\n // Simulate card detection after 2 seconds of stable camera\n // In production, analyze video frames for card edges\n setTimeout(() => {\n if (stream && !$isDisabled) {\n cardDetected = true;\n startAutoCapture();\n }\n }, 2000);\n }\n\n function startAutoCapture() {\n // Start 2-second countdown for auto-capture\n autoCaptureCountdown = 2;\n\n const countdownInterval = setInterval(() => {\n autoCaptureCountdown -= 0.1;\n if (autoCaptureCountdown <= 0) {\n clearInterval(countdownInterval);\n if (cardDetected && !$isDisabled && stream) {\n handleTakePhoto();\n }\n }\n }, 100);\n\n autoCaptureTimer = countdownInterval as unknown as number;\n }\n\n function cancelAutoCapture() {\n if (autoCaptureTimer) {\n clearInterval(autoCaptureTimer);\n autoCaptureTimer = null;\n }\n autoCaptureCountdown = 0;\n cardDetected = false;\n }\n\n onDestroy(() => {\n cameraPhoto?.stopCamera();\n cancelAutoCapture();\n });\n\n const clearDocs = (type: DocumentType): IDocument[] => {\n const { options } = documentOptionsConfiguration;\n const isFromOptions = Object.keys(options).find(key => key === type);\n if (isFromOptions) {\n return $documents.filter(d => !Object.keys(options).find(key => key === d.type));\n }\n return $documents.filter(d => type !== d.type);\n };\n\n const addDocument = (type: DocumentType, base64: string, document: IDocument): IDocument[] => {\n const clearedDocuments = clearDocs(type);\n return [\n ...clearedDocuments,\n {\n ...document,\n pages: [{ side: 'front', base64 }],\n },\n ];\n };\n\n const handleTakePhoto = async () => {\n console.log('[DocumentPhoto] handleTakePhoto called', {\n cameraPhoto: !!cameraPhoto,\n video: !!video,\n isDisabled: $isDisabled,\n stream: !!stream,\n cameraInitialized\n });\n\n cancelAutoCapture();\n\n if (!cameraPhoto || !video || $isDisabled) {\n console.warn('[DocumentPhoto] Cannot take photo - missing requirements');\n return;\n }\n\n if (!stream) {\n console.warn('[DocumentPhoto] Cannot take photo - no stream');\n return;\n }\n\n toggleOnIsDisabled();\n isCompressing = true;\n const captureStartTime = Date.now();\n\n try {\n console.log('[DocumentPhoto] Getting data URI...');\n const base64 = cameraPhoto.getDataUri(\n $configuration.settings?.cameraSettings || $uiPack.settings.cameraSettings,\n );\n console.log('[DocumentPhoto] Got data URI, length:', base64.length);\n\n const response = await fetch(base64);\n const blob = await response.blob();\n\n const compressed = await compressImage(blob, {\n quality: 0.85,\n maxWidth: 1920,\n maxHeight: 1080,\n });\n\n const captureTime = Date.now() - captureStartTime;\n const cameraResolution = `${video.videoWidth}x${video.videoHeight}`;\n\n if (documentType) {\n const document = { type: documentType, pages: [], metadata: {} };\n $documents = addDocument(document.type, compressed.base64, document);\n\n setPendingCaptureMetadata({\n documentType: documentType as 'omang' | 'passport' | 'driversLicense',\n side: 'front',\n imageSize: compressed.blob.size,\n compressionRatio: compressed.compressionRatio,\n captureTime,\n cameraResolution,\n });\n\n console.log('[DocumentPhoto] Photo captured, navigating to next step');\n return goToNextStep(currentStepId, $configuration, $currentStepId);\n }\n return goToPrevStep(currentStepId, $configuration, $currentStepId);\n } catch (error) {\n console.error('[DocumentPhoto] Image capture/compression failed:', error);\n toggleOffIsDisabled();\n } finally {\n isCompressing = false;\n }\n };\n\n const handleTryAgain = async () => {\n console.log('[DocumentPhoto] handleTryAgain called');\n cameraError = null;\n initAttempted = false;\n cameraInitialized = false;\n stream = undefined;\n cardDetected = false;\n cancelAutoCapture();\n\n await tick();\n\n if (video) {\n await initializeCamera();\n }\n };\n\n const handleUploadInstead = () => {\n console.log('[DocumentPhoto] handleUploadInstead called');\n currentStepId.set(Steps.DocumentUpload);\n };\n\n preloadNextStepByCurrent($configuration, configuration, $currentStepId, $uiPack);\n</script>\n\n<div class=\"container\" {style}>\n {#if cameraError}\n <!-- Camera Permission Error State -->\n <div class=\"error-container\">\n <div class=\"error-content\">\n {#if cameraError === 'HTTPS_REQUIRED'}\n <div class=\"error-icon\">\n <svg width=\"64\" height=\"64\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"5\" y=\"11\" width=\"14\" height=\"10\" rx=\"2\" stroke=\"#F59E0B\" stroke-width=\"2\"/>\n <path d=\"M8 11V7C8 4.79086 9.79086 3 12 3C14.2091 3 16 4.79086 16 7V11\" stroke=\"#F59E0B\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n <circle cx=\"12\" cy=\"16\" r=\"1.5\" fill=\"#F59E0B\"/>\n </svg>\n </div>\n <h2 class=\"error-title\">Secure Connection Required</h2>\n <p class=\"error-description\">\n Camera access requires a secure HTTPS connection. Please access this page using HTTPS or use the upload option instead.\n </p>\n {:else}\n <div class=\"error-icon\">\n <svg width=\"64\" height=\"64\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M23 19C23 19.5304 22.7893 20.0391 22.4142 20.4142C22.0391 20.7893 21.5304 21 21 21H3C2.46957 21 1.96086 20.7893 1.58579 20.4142C1.21071 20.0391 1 19.5304 1 19V8C1 7.46957 1.21071 6.96086 1.58579 6.58579C1.96086 6.21071 2.46957 6 3 6H7L9 3H15L17 6H21C21.5304 6 22.0391 6.21071 22.4142 6.58579C22.7893 6.96086 23 7.46957 23 8V19Z\" stroke=\"#7C3AED\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <circle cx=\"12\" cy=\"13\" r=\"4\" stroke=\"#7C3AED\" stroke-width=\"2\"/>\n </svg>\n </div>\n <h2 class=\"error-title\">Camera Access Required</h2>\n <p class=\"error-description\">\n Please allow camera access in your browser settings to capture your document, or use the upload option.\n </p>\n {/if}\n <div class=\"error-actions\">\n <button class=\"btn-try-again\" on:click={handleTryAgain} type=\"button\">\n Try Again\n </button>\n <button class=\"btn-upload\" on:click={handleUploadInstead} type=\"button\">\n Upload Instead\n </button>\n </div>\n </div>\n </div>\n {:else}\n <!-- Normal Camera View -->\n {#each step.elements as element}\n {#if element.type === Elements.IconButton}\n <IconButton\n configuration={element.props}\n on:click={() => goToPrevStep(currentStepId, $configuration, $currentStepId)}\n />\n {/if}\n {#if element.type === Elements.IconCloseButton}\n <IconCloseButton\n configuration={element.props}\n on:click={() => {\n sendButtonClickEvent(\n EActionNames.CLOSE,\n { status: EVerificationStatuses.DATA_COLLECTION },\n $appState,\n true,\n );\n }}\n />\n {/if}\n {/each}\n\n <div class=\"header\">\n {#each step.elements as element}\n {#if element.type === Elements.Title}\n <Title configuration={element.props}>\n <T key={'title'} namespace={stepNamespace} />\n </Title>\n {/if}\n {#if element.type === Elements.Paragraph}\n <Paragraph configuration={element.props}>\n <T key={'description'} namespace={stepNamespace} />\n </Paragraph>\n {/if}\n {/each}\n </div>\n\n <div class=\"camera-view\">\n <!-- Video element -->\n <video bind:this={video} autoplay playsinline class=\"camera-video\">\n <track kind=\"captions\" />\n </video>\n\n <!-- Overlay with card frame -->\n {#if documentType}\n <div class=\"overlay-wrapper\">\n <Overlay type={documentType} isInFrame={cardDetected} />\n </div>\n {/if}\n\n <!-- Auto-capture countdown -->\n {#if cardDetected && autoCaptureCountdown > 0}\n <div class=\"auto-capture-indicator\">\n <div class=\"countdown-ring\">\n <svg viewBox=\"0 0 100 100\">\n <circle cx=\"50\" cy=\"50\" r=\"45\" fill=\"none\" stroke=\"rgba(255,255,255,0.2)\" stroke-width=\"6\"/>\n <circle\n cx=\"50\" cy=\"50\" r=\"45\"\n fill=\"none\"\n stroke=\"#10B981\"\n stroke-width=\"6\"\n stroke-linecap=\"round\"\n stroke-dasharray=\"283\"\n stroke-dashoffset={283 * (1 - autoCaptureCountdown / 2)}\n transform=\"rotate(-90 50 50)\"\n />\n </svg>\n <span class=\"countdown-text\">{Math.ceil(autoCaptureCountdown)}</span>\n </div>\n </div>\n {/if}\n\n <!-- Loader when no stream -->\n {#if stream === undefined || isCompressing}\n <div class=\"loader-overlay\">\n <Loader />\n </div>\n {/if}\n </div>\n\n <!-- Capture Button - Always visible when camera is ready -->\n {#if stream && !isCompressing}\n <div class=\"capture-button-container\">\n <button\n class=\"capture-button\"\n on:click={handleTakePhoto}\n disabled={$isDisabled || isCompressing}\n type=\"button\"\n aria-label=\"Capture photo\"\n >\n <span class=\"capture-button-inner\"></span>\n </button>\n </div>\n {/if}\n {/if}\n</div>\n\n<style>\n .container {\n height: 100%;\n max-height: 100vh;\n max-height: 100dvh;\n position: var(--position);\n background: #1a1a2e;\n text-align: center;\n display: flex;\n flex-direction: column;\n align-items: center;\n overflow: hidden;\n box-sizing: border-box;\n }\n\n .header {\n text-align: center;\n z-index: 10;\n padding: 8px 16px;\n flex-shrink: 0;\n }\n\n .header :global(h1),\n .header :global(h2) {\n color: #fff !important;\n font-size: 18px !important;\n margin: 0 !important;\n padding: 4px 0 !important;\n }\n\n .header :global(p) {\n color: rgba(255, 255, 255, 0.8) !important;\n font-size: 13px !important;\n margin: 0 !important;\n }\n\n .camera-view {\n flex: 1;\n position: relative;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 0;\n }\n\n .camera-video {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n z-index: 1;\n }\n\n .overlay-wrapper {\n position: relative;\n z-index: 10;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n }\n\n .loader-overlay {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(0, 0, 0, 0.5);\n z-index: 20;\n }\n\n .auto-capture-indicator {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: 15;\n pointer-events: none;\n }\n\n .countdown-ring {\n position: relative;\n width: 80px;\n height: 80px;\n }\n\n .countdown-ring svg {\n width: 100%;\n height: 100%;\n }\n\n .countdown-text {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 28px;\n font-weight: 700;\n color: #fff;\n text-shadow: 0 2px 4px rgba(0, 0, 0, 0.5);\n }\n\n .capture-button-container {\n position: relative;\n z-index: 100;\n padding: 16px 0 24px;\n flex-shrink: 0;\n }\n\n .capture-button {\n width: 72px;\n height: 72px;\n border-radius: 50%;\n border: 4px solid #fff;\n background: transparent;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n -webkit-tap-highlight-color: transparent;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);\n }\n\n .capture-button:active {\n transform: scale(0.95);\n }\n\n .capture-button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .capture-button-inner {\n width: 56px;\n height: 56px;\n border-radius: 50%;\n background: #fff;\n transition: transform 0.1s ease;\n }\n\n .capture-button:active .capture-button-inner {\n transform: scale(0.9);\n }\n\n /* Camera Permission Error Styles */\n .error-container {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n padding: 24px;\n background: #7C3AED;\n }\n\n .error-content {\n max-width: 400px;\n text-align: center;\n padding: 32px 24px;\n background: #fff;\n border-radius: 16px;\n box-shadow: 0 4px 24px rgba(0, 0, 0, 0.15);\n }\n\n .error-icon {\n margin-bottom: 20px;\n }\n\n .error-title {\n font-size: 20px;\n font-weight: 600;\n color: #1E293B;\n margin-bottom: 12px;\n font-family: var(--font-family, 'Avenir', sans-serif);\n }\n\n .error-description {\n font-size: 14px;\n color: #64748B;\n margin-bottom: 24px;\n line-height: 1.6;\n font-family: var(--font-family, 'Avenir', sans-serif);\n }\n\n .error-actions {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .btn-try-again,\n .btn-upload {\n padding: 14px 24px;\n border-radius: 8px;\n font-size: 16px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s;\n border: none;\n min-height: 48px;\n width: 100%;\n font-family: var(--font-family, 'Avenir', sans-serif);\n }\n\n .btn-try-again {\n background: #7C3AED;\n color: #fff;\n }\n\n .btn-try-again:hover {\n background: #6D28D9;\n }\n\n .btn-upload {\n background: transparent;\n color: #7C3AED;\n border: 2px solid #7C3AED;\n }\n\n .btn-upload:hover {\n background: rgba(124, 58, 237, 0.1);\n }\n\n /* Small screens */\n @media (max-height: 667px) {\n .capture-button {\n width: 64px;\n height: 64px;\n }\n\n .capture-button-inner {\n width: 48px;\n height: 48px;\n }\n\n .capture-button-container {\n padding: 12px 0 16px;\n }\n }\n</style>\n","export interface ValidationResult {\n valid: boolean;\n error?: {\n code: 'FILE_TOO_LARGE' | 'INVALID_FILE_TYPE' | 'IMAGE_TOO_SMALL' | 'FILE_CORRUPTED';\n message: string;\n };\n}\n\nexport interface FileValidationOptions {\n maxSize: number; // bytes\n acceptedTypes: string[];\n minWidth: number;\n minHeight: number;\n}\n\nconst DEFAULT_OPTIONS: FileValidationOptions = {\n maxSize: 10 * 1024 * 1024, // 10MB\n acceptedTypes: ['image/jpeg', 'image/png', 'application/pdf'],\n minWidth: 640,\n minHeight: 480,\n};\n\n/**\n * Validate a file for upload\n * @param file - File to validate\n * @param options - Validation options\n * @returns Promise with validation result\n */\nexport async function validateFile(\n file: File,\n options: Partial<FileValidationOptions> = {},\n): Promise<ValidationResult> {\n const opts = { ...DEFAULT_OPTIONS, ...options };\n\n // Check file size\n if (file.size > opts.maxSize) {\n return {\n valid: false,\n error: {\n code: 'FILE_TOO_LARGE',\n message: `File too large (maximum ${opts.maxSize / 1024 / 1024}MB)`,\n },\n };\n }\n\n // Check file type\n if (!opts.acceptedTypes.includes(file.type)) {\n return {\n valid: false,\n error: {\n code: 'INVALID_FILE_TYPE',\n message: 'Invalid file type (JPG, PNG, or PDF only)',\n },\n };\n }\n\n // Check image dimensions (for images only)\n if (file.type.startsWith('image/')) {\n try {\n const dimensions = await getImageDimensions(file);\n if (dimensions.width < opts.minWidth || dimensions.height < opts.minHeight) {\n return {\n valid: false,\n error: {\n code: 'IMAGE_TOO_SMALL',\n message: `Image quality too low (minimum ${opts.minWidth}x${opts.minHeight} pixels)`,\n },\n };\n }\n } catch (error) {\n return {\n valid: false,\n error: {\n code: 'FILE_CORRUPTED',\n message: 'File appears corrupted. Please try a different file.',\n },\n };\n }\n }\n\n // Validate PDF files for corruption by checking magic bytes\n if (file.type === 'application/pdf') {\n try {\n const isValidPdf = await validatePdfFile(file);\n if (!isValidPdf) {\n return {\n valid: false,\n error: {\n code: 'FILE_CORRUPTED',\n message: 'File appears corrupted. Please try a different file.',\n },\n };\n }\n } catch (error) {\n // In test environments (jsdom), FileReader may not work correctly\n // In production browsers, this will properly validate PDF magic bytes\n // For now, if validation throws, we'll accept the PDF based on MIME type\n console.warn('PDF validation failed, accepting based on MIME type:', error);\n }\n }\n\n return { valid: true };\n}\n\n/**\n * Validate PDF file by checking magic bytes\n * @param file - PDF file to validate\n * @returns Promise<boolean> - true if valid PDF\n */\nasync function validatePdfFile(file: File): Promise<boolean> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = (e) => {\n try {\n const arrayBuffer = e.target?.result as ArrayBuffer;\n if (!arrayBuffer || arrayBuffer.byteLength < 5) {\n resolve(false);\n return;\n }\n const bytes = new Uint8Array(arrayBuffer);\n // PDF magic bytes: %PDF- (0x25 0x50 0x44 0x46 0x2D)\n const isPdf =\n bytes.length >= 5 &&\n bytes[0] === 0x25 && // %\n bytes[1] === 0x50 && // P\n bytes[2] === 0x44 && // D\n bytes[3] === 0x46 && // F\n bytes[4] === 0x2D; // -\n resolve(isPdf);\n } catch (error) {\n reject(error);\n }\n };\n\n reader.onerror = () => reject(new Error('Failed to read PDF file'));\n\n // Read the entire file (small files) or first chunk for validation\n // Using full file read for better jsdom compatibility\n reader.readAsArrayBuffer(file);\n });\n}\n\n/**\n * Get image dimensions from a file\n * @param file - Image file\n * @returns Promise with width and height\n */\nasync function getImageDimensions(file: File): Promise<{ width: number; height: number }> {\n return new Promise((resolve, reject) => {\n const img = new Image();\n const url = URL.createObjectURL(file);\n\n img.onload = () => {\n URL.revokeObjectURL(url);\n resolve({ width: img.width, height: img.height });\n };\n\n img.onerror = () => {\n URL.revokeObjectURL(url);\n reject(new Error('Failed to load image'));\n };\n\n img.src = url;\n });\n}\n\n/**\n * Format file size for display\n * @param bytes - File size in bytes\n * @returns Formatted string (e.g., \"1.5 MB\")\n */\nexport function formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / 1024 / 1024).toFixed(1)} MB`;\n}\n","<script lang=\"ts\">\n import { T } from '../contexts/translation';\n import { configuration } from '../contexts/configuration';\n import { onMount } from 'svelte';\n import { Title, IconButton, Paragraph, IconCloseButton, Loader } from '../atoms';\n import { Elements } from '../contexts/configuration/types';\n import { DocumentType, appState } from '../contexts/app-state';\n import type { IDocument } from '../contexts/app-state';\n import { goToNextStep, goToPrevStep } from '../contexts/navigation';\n import { documents, currentStepId, selectedDocumentInfo } from '../contexts/app-state/stores';\n import { setPendingUploadMetadata } from '../contexts/app-state/stores';\n import {\n EActionNames,\n EVerificationStatuses,\n sendButtonClickEvent,\n } from '../utils/event-service';\n import { getLayoutStyles, getStepConfiguration, uiPack } from '../ui-packs';\n import { validateFile, formatFileSize } from '../services/file-validation';\n import { compressImage } from '../services/image-compression';\n\n export let stepId;\n\n const step = getStepConfiguration($configuration, $uiPack, stepId);\n const style = getLayoutStyles($configuration, $uiPack, step);\n\n const documentType =\n (($configuration.steps && $configuration.steps[$currentStepId].type) as DocumentType) ||\n ($uiPack.steps[$currentStepId].type as DocumentType) ||\n $selectedDocumentInfo.type;\n\n const stepNamespace = `document-upload.${documentType}`;\n\n let fileInput: HTMLInputElement;\n let selectedFile: File | null = null;\n let fileName: string = '';\n let fileSize: string = '';\n let errorMessage: string = '';\n let isProcessing = false;\n let isDragging = false;\n\n $: {\n if (!documentType) goToPrevStep(currentStepId, $configuration, $currentStepId);\n }\n\n const clearDocs = (type: DocumentType): IDocument[] => {\n const { options } = $configuration.documentOptions || $uiPack.documentOptions;\n const isFromOptions = Object.keys(options).find(key => key === type);\n if (isFromOptions) {\n return $documents.filter(d => !Object.keys(options).find(key => key === d.type));\n }\n return $documents.filter(d => type !== d.type);\n };\n\n const addDocument = (type: DocumentType, base64: string, document: IDocument): IDocument[] => {\n const clearedDocuments = clearDocs(type);\n return [\n ...clearedDocuments,\n {\n ...document,\n pages: [{ side: 'front', base64 }],\n },\n ];\n };\n\n const handleFileSelect = async (file: File, method: 'button' | 'dragDrop') => {\n errorMessage = '';\n selectedFile = file;\n fileName = file.name;\n fileSize = formatFileSize(file.size);\n\n // Validate file\n const validation = await validateFile(file);\n if (!validation.valid) {\n errorMessage = validation.error?.message || 'Invalid file';\n selectedFile = null;\n fileName = '';\n fileSize = '';\n return;\n }\n\n // Process upload\n await processUpload(file, method);\n };\n\n const processUpload = async (file: File, method: 'button' | 'dragDrop') => {\n isProcessing = true;\n const uploadStartTime = Date.now();\n\n try {\n // Convert file to blob for compression\n const blob = file.slice(0, file.size, file.type);\n\n // Compress image\n const compressed = await compressImage(blob, {\n quality: 0.85,\n maxWidth: 1920,\n maxHeight: 1080,\n });\n\n const uploadTime = Date.now() - uploadStartTime;\n\n if (documentType) {\n const document = { type: documentType, pages: [], metadata: {} };\n $documents = addDocument(document.type, compressed.base64, document);\n\n // Store upload metadata for event emission on review confirmation (AC5)\n setPendingUploadMetadata({\n documentType: documentType as 'omang' | 'passport' | 'driversLicense',\n side: 'front',\n fileName: file.name,\n originalSize: file.size,\n compressedSize: compressed.blob.size,\n compressionRatio: compressed.compressionRatio,\n uploadTime,\n uploadMethod: method,\n });\n\n return goToNextStep(currentStepId, $configuration, $currentStepId);\n }\n return goToPrevStep(currentStepId, $configuration, $currentStepId);\n } catch (error) {\n console.error('Upload/compression failed:', error);\n // Use translation key for error message - fallback to English if translation fails\n errorMessage = $configuration?.translations?.['document-upload']?.errors?.uploadFailed || 'Upload failed. Please try again.';\n } finally {\n isProcessing = false;\n }\n };\n\n const handleFileInputChange = (e: Event) => {\n const input = e.target as HTMLInputElement;\n const files = input.files;\n if (files && files.length > 0) {\n handleFileSelect(files[0], 'button');\n }\n };\n\n const handleDragEnter = (e: DragEvent) => {\n e.preventDefault();\n isDragging = true;\n };\n\n const handleDragLeave = (e: DragEvent) => {\n e.preventDefault();\n isDragging = false;\n };\n\n const handleDragOver = (e: DragEvent) => {\n e.preventDefault();\n };\n\n const handleDrop = (e: DragEvent) => {\n e.preventDefault();\n isDragging = false;\n\n const files = e.dataTransfer?.files;\n if (files && files.length > 0) {\n handleFileSelect(files[0], 'dragDrop');\n }\n };\n\n const handleUploadClick = () => {\n fileInput?.click();\n };\n</script>\n\n<div class=\"container\" {style}>\n {#each step.elements as element}\n {#if element.type === Elements.IconButton}\n <IconButton\n configuration={element.props}\n on:click={() => goToPrevStep(currentStepId, $configuration, $currentStepId)}\n />\n {/if}\n {#if element.type === Elements.IconCloseButton}\n <IconCloseButton\n configuration={element.props}\n on:click={() => {\n sendButtonClickEvent(\n EActionNames.CLOSE,\n { status: EVerificationStatuses.DATA_COLLECTION },\n $appState,\n true,\n );\n }}\n />\n {/if}\n {/each}\n\n <div class=\"header\">\n {#each step.elements as element}\n {#if element.type === Elements.Title}\n <Title configuration={element.props}>\n <T key={'title'} namespace={stepNamespace} />\n </Title>\n {/if}\n {#if element.type === Elements.Paragraph}\n <Paragraph configuration={element.props}>\n <T key={'description'} namespace={stepNamespace} />\n </Paragraph>\n {/if}\n {/each}\n </div>\n\n {#if isProcessing}\n <Loader />\n <p class=\"processing-text\">\n <T key={'processing'} namespace=\"document-upload\" />\n </p>\n {:else}\n <div\n class=\"upload-zone\"\n class:dragging={isDragging}\n on:dragenter={handleDragEnter}\n on:dragleave={handleDragLeave}\n on:dragover={handleDragOver}\n on:drop={handleDrop}\n on:click={handleUploadClick}\n role=\"button\"\n tabindex=\"0\"\n aria-label=\"Upload document. Click or drag and drop a file here.\"\n on:keydown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleUploadClick();\n }\n }}\n >\n <input\n type=\"file\"\n accept=\"image/jpeg,image/png,application/pdf\"\n bind:this={fileInput}\n on:change={handleFileInputChange}\n style=\"display: none;\"\n />\n\n <div class=\"upload-icon\">📄</div>\n <p class=\"upload-text\">\n <T key={'dragDropZone'} namespace=\"document-upload\" />\n </p>\n\n {#if fileName}\n <p class=\"file-info\">\n {fileName} ({fileSize})\n </p>\n {/if}\n\n {#if errorMessage}\n <p class=\"error-message\">{errorMessage}</p>\n {/if}\n </div>\n\n <button class=\"upload-button\" on:click={handleUploadClick}>\n <T key={'uploadButton'} namespace=\"document-upload\" />\n </button>\n {/if}\n</div>\n\n<style>\n .container {\n height: 100%;\n position: var(--position);\n background: var(--background);\n text-align: center;\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 24px;\n }\n\n .header {\n text-align: center;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n margin-bottom: 32px;\n }\n\n .upload-zone {\n border: 2px dashed #75aadb;\n border-radius: 12px;\n padding: 48px 32px;\n margin: 24px 0;\n cursor: pointer;\n transition: all 0.2s ease;\n background: #fff;\n width: 100%;\n max-width: 500px;\n }\n\n .upload-zone:hover {\n border-color: #5a8fc4;\n background: rgba(117, 170, 219, 0.05);\n }\n\n .upload-zone.dragging {\n border-color: #5a8fc4;\n background: rgba(117, 170, 219, 0.1);\n transform: scale(1.02);\n }\n\n .upload-zone:focus {\n outline: 2px solid #75aadb;\n outline-offset: 2px;\n }\n\n .upload-icon {\n font-size: 48px;\n margin-bottom: 16px;\n }\n\n .upload-text {\n font-size: 16px;\n color: #6b7280;\n margin: 0;\n }\n\n .file-info {\n font-size: 14px;\n color: #10b981;\n margin-top: 12px;\n font-weight: 500;\n }\n\n .error-message {\n font-size: 14px;\n color: #ef4444;\n margin-top: 12px;\n padding: 8px 12px;\n background: rgba(239, 68, 68, 0.1);\n border-radius: 6px;\n }\n\n .upload-button {\n padding: 14px 32px;\n background: #75aadb;\n color: #fff;\n border: none;\n border-radius: 8px;\n font-size: 16px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s;\n min-height: 48px;\n width: 100%;\n max-width: 500px;\n }\n\n .upload-button:hover {\n background: #5a8fc4;\n }\n\n .upload-button:focus {\n outline: 2px solid #75aadb;\n outline-offset: 2px;\n }\n\n .processing-text {\n font-size: 16px;\n color: #6b7280;\n margin-top: 16px;\n }\n\n @media (max-width: 768px) {\n .upload-zone {\n padding: 32px 24px;\n }\n\n .upload-icon {\n font-size: 36px;\n }\n\n .upload-text {\n font-size: 14px;\n }\n\n .upload-button {\n font-size: 14px;\n min-height: 44px;\n }\n }\n\n /* Dark theme support */\n @media (prefers-color-scheme: dark) {\n .upload-zone {\n background: #1f2937;\n border-color: #93c5fd;\n }\n\n .upload-zone:hover {\n border-color: #60a5fa;\n background: rgba(147, 197, 253, 0.1);\n }\n\n .upload-text {\n color: #d1d5db;\n }\n\n .file-info {\n color: #34d399;\n }\n\n .processing-text {\n color: #d1d5db;\n }\n }\n</style>\n","<script lang=\"ts\">\n import { Button, ButtonWithIcon, IconButton, NextStepButton } from '../../atoms';\n import { configuration as globalConfiguration } from '../../contexts/configuration';\n import type { ICSSProperties } from '../../contexts/configuration';\n import { goToNextStep, goToPrevStep } from '../../contexts/navigation';\n import { T } from '../../contexts/translation';\n import { makesLocalStyles } from '../../utils/css-utils';\n import { currentStepId } from '../../contexts/app-state';\n import merge from 'deepmerge';\n import { uiPack } from '../../ui-packs';\n\n const { navigationButtons: userConfiguration } = $globalConfiguration;\n\n const configuration = userConfiguration\n ? merge($uiPack.navigationButtons, userConfiguration)\n : $uiPack.navigationButtons;\n\n export let skipBackSide = false;\n\n const style = makesLocalStyles(configuration.props.style as ICSSProperties);\n\n const skipType = skipBackSide ? 'back-side' : undefined;\n</script>\n\n<div {style} class=\"navigation-buttons\">\n {#if configuration.backButton.type === 'button'}\n <Button\n isBack\n configuration={configuration.backButton.props}\n on:click={() => goToPrevStep(currentStepId, $globalConfiguration, $currentStepId, skipType)}\n >\n <T key=\"back\" namespace=\"navigation-buttons\" />\n </Button>\n {:else if configuration.backButton.type === 'iconButton'}\n <IconButton\n configuration={configuration.backButton.props}\n on:click={() => goToPrevStep(currentStepId, $globalConfiguration, $currentStepId, skipType)}\n />\n {:else}\n <ButtonWithIcon\n configuration={configuration.backButton.props}\n on:click={() => goToPrevStep(currentStepId, $globalConfiguration, $currentStepId, skipType)}\n >\n <T key=\"back\" namespace=\"navigation-buttons\" />\n </ButtonWithIcon>\n {/if}\n {#if configuration.nextButton.type === 'button'}\n <NextStepButton configuration={configuration.nextButton.props} {skipType}>\n <T key=\"next\" namespace=\"navigation-buttons\" />\n </NextStepButton>\n {:else if configuration.nextButton.type === 'iconButton'}\n <IconButton\n configuration={configuration.nextButton.props}\n on:click={() => goToNextStep(currentStepId, $globalConfiguration, $currentStepId, skipType)}\n />\n {:else}\n <ButtonWithIcon\n configuration={configuration.nextButton.props}\n on:click={() => goToNextStep(currentStepId, $globalConfiguration, $currentStepId, skipType)}\n >\n <T key=\"next\" namespace=\"navigation-buttons\" />\n </ButtonWithIcon>\n {/if}\n</div>\n\n<style>\n .navigation-buttons {\n display: var(--display);\n padding: var(--padding);\n position: var(--position);\n bottom: var(--bottom);\n left: var(--left);\n width: var(--width);\n box-shadow: var(--box-shadow);\n justify-content: var(--justify-content);\n align-items: var(--align-items);\n flex-direction: var(--flex-direction);\n }\n</style>\n","<script lang=\"ts\">\n import { T } from '../contexts/translation';\n import { Title, IconButton, Photo, Paragraph, IconCloseButton } from '../atoms';\n import { configuration } from '../contexts/configuration';\n import { Elements } from '../contexts/configuration/types';\n import { goToPrevStep, goToNextStep } from '../contexts/navigation';\n import { DocumentType, getDocImage, appState } from '../contexts/app-state';\n import { NavigationButtons } from '../molecules';\n import { documents, currentStepId, selectedDocumentInfo, pendingCaptureMetadata, pendingUploadMetadata, pendingSelfieMetadata, clearPendingCaptureMetadata, clearPendingUploadMetadata, clearPendingSelfieMetadata } from '../contexts/app-state/stores';\n import { preloadNextStepByCurrent } from '../services/preload-service';\n import {\n EActionNames,\n sendButtonClickEvent,\n sendDocumentCapturedEvent,\n sendDocumentUploadedEvent,\n sendSelfieCapturedEvent,\n EVerificationStatuses,\n } from '../utils/event-service';\n import { getLayoutStyles, getStepConfiguration, uiPack } from '../ui-packs';\n import { getFlowConfig } from '../contexts/flows/hooks';\n import { get } from 'svelte/store';\n\n export let stepId;\n\n const step = getStepConfiguration($configuration, $uiPack, stepId);\n const flow = getFlowConfig($configuration);\n const style = getLayoutStyles($configuration, $uiPack, step);\n\n const stepNamespace = step.namespace!;\n const documentType =\n (($configuration.steps && $configuration.steps[$currentStepId].type) as DocumentType || $uiPack.steps[$currentStepId].type as DocumentType) || $selectedDocumentInfo.type;\n\n\n let image = '';\n let skipBackSide = false;\n\n $: {\n if (!documentType) {\n goToPrevStep(currentStepId, $configuration, $currentStepId);\n }\n if (documentType) {\n image = getDocImage(documentType, $documents);\n }\n if ($selectedDocumentInfo && !$selectedDocumentInfo.backSide) {\n skipBackSide = true;\n }\n preloadNextStepByCurrent(\n $configuration,\n configuration,\n $currentStepId,\n $uiPack,\n skipBackSide ? 'back-side' : undefined,\n );\n }\n\n // Handle Continue button click - emit document.captured, document.uploaded, or selfie.captured event per AC5\n const handleContinue = () => {\n const captureMetadata = get(pendingCaptureMetadata);\n const uploadMetadata = get(pendingUploadMetadata);\n const selfieMetadata = get(pendingSelfieMetadata);\n\n if (captureMetadata) {\n // Emit document.captured event when user confirms the capture\n sendDocumentCapturedEvent(\n captureMetadata.documentType,\n captureMetadata.side,\n captureMetadata.imageSize,\n captureMetadata.compressionRatio,\n captureMetadata.captureTime,\n captureMetadata.cameraResolution,\n );\n\n // Clear the pending metadata\n clearPendingCaptureMetadata();\n } else if (uploadMetadata) {\n // Emit document.uploaded event when user confirms the upload\n sendDocumentUploadedEvent(\n uploadMetadata.documentType,\n uploadMetadata.side,\n uploadMetadata.fileName,\n uploadMetadata.originalSize,\n uploadMetadata.compressedSize,\n uploadMetadata.compressionRatio,\n uploadMetadata.uploadTime,\n uploadMetadata.uploadMethod,\n );\n\n // Clear the pending metadata\n clearPendingUploadMetadata();\n } else if (selfieMetadata) {\n // Emit selfie.captured event when user confirms the selfie\n sendSelfieCapturedEvent(\n selfieMetadata.fileName,\n selfieMetadata.originalSize,\n selfieMetadata.compressedSize,\n selfieMetadata.compressionRatio,\n selfieMetadata.captureTime,\n selfieMetadata.cameraResolution,\n selfieMetadata.livenessChecks,\n selfieMetadata.totalAttempts,\n selfieMetadata.faceQuality,\n );\n\n // Clear the pending metadata\n clearPendingSelfieMetadata();\n }\n\n // Navigate to next step\n const skipType = skipBackSide ? 'back-side' : undefined;\n goToNextStep(currentStepId, $configuration, $currentStepId, skipType);\n };\n</script>\n\n<div class=\"container\" {style}>\n {#each step.elements as element}\n {#if element.type === Elements.IconButton}\n <IconButton\n configuration={element.props}\n on:click={() => goToPrevStep(currentStepId, $configuration, $currentStepId)}\n />\n {/if}\n {#if element.type === Elements.IconCloseButton && flow.showCloseButton}\n <IconCloseButton\n configuration={element.props}\n on:click={() => {\n sendButtonClickEvent(\n EActionNames.CLOSE,\n { status: EVerificationStatuses.DATA_COLLECTION },\n $appState,\n true,\n );\n }}\n />\n {/if}\n {#if element.type === Elements.Title}\n <Title configuration={element.props}>\n <T key={'title'} namespace={stepNamespace} />\n </Title>\n {/if}\n {#if element.type === Elements.Paragraph}\n <Paragraph configuration={element.props}>\n <T key={'description'} namespace={stepNamespace} />\n </Paragraph>\n {/if}\n {#if element.type === Elements.Photo}\n <Photo configuration={element.props} src={image} />\n {/if}\n {/each}\n <div class=\"navigation-buttons\">\n <button class=\"btn-retake\" on:click={() => goToPrevStep(currentStepId, $configuration, $currentStepId)}>\n <T key={'retake'} namespace={stepNamespace} />\n </button>\n <button class=\"btn-continue\" on:click={handleContinue}>\n <T key={'continue'} namespace={stepNamespace} />\n </button>\n </div>\n</div>\n\n<style>\n .container {\n padding: var(--padding);\n position: var(--position);\n background: var(--background);\n text-align: center;\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n\n .navigation-buttons {\n display: flex;\n gap: 12px;\n padding: 16px;\n margin-top: auto;\n }\n\n .btn-retake,\n .btn-continue {\n flex: 1;\n padding: 14px 24px;\n border-radius: 8px;\n font-size: 16px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s;\n border: none;\n min-height: 48px;\n }\n\n .btn-retake {\n background: transparent;\n color: #7C3AED;\n border: 2px solid #7C3AED;\n }\n\n .btn-retake:hover {\n background: rgba(124, 58, 237, 0.1);\n }\n\n .btn-continue {\n background: #7C3AED;\n color: #fff;\n }\n\n .btn-continue:hover {\n background: #6D28D9;\n }\n\n @media (max-width: 576px) {\n .navigation-buttons {\n flex-direction: column;\n }\n\n .btn-retake,\n .btn-continue {\n font-size: 14px;\n min-height: 44px;\n }\n }\n\n /* Dark theme support */\n @media (prefers-color-scheme: dark) {\n .btn-retake {\n color: #A78BFA;\n border-color: #A78BFA;\n }\n\n .btn-retake:hover {\n background: rgba(167, 139, 250, 0.1);\n }\n }\n</style>\n","<script lang=\"ts\">\n import { T } from '../contexts/translation';\n import { Button, Title, Paragraph, IconButton, IconCloseButton } from '../atoms';\n import { configuration } from '../contexts/configuration';\n import { goToNextStep, goToPrevStep } from '../contexts/navigation';\n import { Elements } from '../contexts/configuration/types';\n import { nativeCameraHandler, updateDocument } from '../utils/photo-utils';\n import type { ICameraEvent } from '../utils/photo-utils';\n import { currentStepId, appState, DocumentType } from '../contexts/app-state';\n import type { IDocument, IDocumentInfo } from '../contexts/app-state';\n import { isNativeCamera } from '../contexts/flows';\n import { documents, selectedDocumentInfo } from '../contexts/app-state/stores';\n import { preloadNextStepByCurrent } from '../services/preload-service';\n import {\n EActionNames,\n sendButtonClickEvent,\n EVerificationStatuses,\n } from '../utils/event-service';\n import { getLayoutStyles, getStepConfiguration, uiPack } from '../ui-packs';\n import { getFlowConfig } from '../contexts/flows/hooks';\n\n export let stepId;\n\n const step = getStepConfiguration($configuration, $uiPack, stepId);\n const flow = getFlowConfig($configuration);\n const style = getLayoutStyles($configuration, $uiPack, step);\n\n let documentInfo: IDocumentInfo | undefined = undefined;\n let document: IDocument | undefined;\n\n $: {\n documentInfo = step.documentInfo || $selectedDocumentInfo;\n if (!documentInfo) goToPrevStep(currentStepId, $configuration, $currentStepId);\n document = $documents.find(d => d.type === documentInfo?.type);\n if (!document) goToPrevStep(currentStepId, $configuration, $currentStepId);\n }\n\n // Get the correct illustration based on document type\n $: illustrationSrc = getIllustrationForDocType(documentInfo?.type);\n\n function getIllustrationForDocType(docType: DocumentType | undefined): string {\n switch (docType) {\n case DocumentType.DRIVERS_LICENSE:\n return '/images/drivers-licence-back.svg';\n case DocumentType.OMANG:\n default:\n return '/images/document-photo-back-start.svg';\n }\n }\n\n // Get namespace based on document type for translations\n $: stepNamespace = getNamespaceForDocType(documentInfo?.type);\n\n function getNamespaceForDocType(docType: DocumentType | undefined): string {\n switch (docType) {\n case DocumentType.DRIVERS_LICENSE:\n return 'document-photo-back-start.driversLicense';\n case DocumentType.OMANG:\n return 'document-photo-back-start.omang';\n default:\n return 'document-photo-back-start';\n }\n }\n\n const handler = async (e: ICameraEvent) => {\n const image = await nativeCameraHandler(e);\n if (!documentInfo) {\n throw Error(\"document context wasn't provided\");\n }\n if (!document) return;\n const newDocumentsState = updateDocument(document.type, image, $documents);\n $documents = newDocumentsState;\n goToNextStep(currentStepId, $configuration, $currentStepId);\n };\n\n preloadNextStepByCurrent($configuration, configuration, $currentStepId, $uiPack);\n</script>\n\n<div class=\"container\" {style}>\n {#each step.elements as element}\n {#if element.type === Elements.IconButton}\n <IconButton\n configuration={element.props}\n on:click={() => goToPrevStep(currentStepId, $configuration, $currentStepId)}\n />\n {/if}\n {#if element.type === Elements.IconCloseButton && flow.showCloseButton}\n <IconCloseButton\n configuration={element.props}\n on:click={() => {\n sendButtonClickEvent(\n EActionNames.CLOSE,\n { status: EVerificationStatuses.DATA_COLLECTION },\n $appState,\n true,\n );\n }}\n />\n {/if}\n {/each}\n\n <div class=\"content\">\n {#each step.elements as element}\n {#if element.type === Elements.Title}\n <Title configuration={element.props}>\n <T key=\"title\" namespace={stepNamespace} />\n </Title>\n {/if}\n {#if element.type === Elements.Paragraph}\n <Paragraph configuration={element.props}>\n <T key=\"description\" namespace={stepNamespace} />\n </Paragraph>\n {/if}\n {/each}\n\n <div class=\"illustration\">\n <img src={illustrationSrc} alt=\"Document back side\" />\n </div>\n </div>\n\n <div class=\"button-container\">\n {#if isNativeCamera($configuration)}\n <input\n class=\"camera-input\"\n type=\"file\"\n accept=\"image/*\"\n capture=\"environment\"\n on:change={handler}\n />\n {/if}\n <Button\n on:click={() => goToNextStep(currentStepId, $configuration, $currentStepId)}\n configuration={{}}\n >\n <T key=\"button\" namespace={stepNamespace} />\n </Button>\n </div>\n</div>\n\n<style>\n .container {\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: var(--padding);\n position: var(--position);\n background: var(--background);\n text-align: center;\n box-sizing: border-box;\n }\n\n .content {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 8px 0;\n }\n\n .illustration {\n margin: 16px 0;\n }\n\n .illustration img {\n max-width: 220px;\n height: auto;\n }\n\n .button-container {\n position: relative;\n margin-top: auto;\n padding: 12px 0;\n }\n\n .camera-input {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0px;\n left: 0px;\n z-index: 3;\n opacity: 0;\n }\n</style>\n","<script lang=\"ts\">\n import CameraPhoto, { FACING_MODES } from 'jslib-html5-camera-photo';\n import { T } from '../contexts/translation';\n import { configuration } from '../contexts/configuration';\n import { onDestroy, tick } from 'svelte';\n import {\n IconButton,\n IconCloseButton,\n Overlay,\n Paragraph,\n Title,\n Loader,\n } from '../atoms';\n import { Elements, Steps } from '../contexts/configuration/types';\n import { goToNextStep, goToPrevStep } from '../contexts/navigation';\n import { currentStepId, DocumentType, appState } from '../contexts/app-state';\n import { documents, selectedDocumentInfo } from '../contexts/app-state/stores';\n import { updateDocument } from '../utils/photo-utils';\n import { createToggle } from '../hooks/createToggle/createToggle';\n import { preloadNextStepByCurrent } from '../services/preload-service';\n import { getLayoutStyles, getStepConfiguration, uiPack } from '../ui-packs';\n import {\n EActionNames,\n EVerificationStatuses,\n sendButtonClickEvent,\n } from '../utils/event-service';\n import { compressImage } from '../services/image-compression';\n\n export let stepId;\n\n let video: HTMLVideoElement | null = null;\n let cameraPhoto: CameraPhoto | undefined = undefined;\n let cameraError: string | null = null;\n let isCompressing = false;\n let cameraInitialized = false;\n let initAttempted = false;\n let cardDetected = false;\n let autoCaptureTimer: ReturnType<typeof setInterval> | null = null;\n let autoCaptureCountdown = 0;\n\n const step = getStepConfiguration($configuration, $uiPack, stepId);\n const style = getLayoutStyles($configuration, $uiPack, step);\n\n const [isDisabled, , toggleOnIsDisabled, toggleOffIsDisabled] = createToggle();\n\n const documentType =\n ($uiPack.steps[$currentStepId].type as DocumentType || ($configuration.steps && $configuration.steps[$currentStepId].type) as DocumentType) || $selectedDocumentInfo.type;\n\n let stream: MediaStream | undefined;\n const stepNamespace = `document-photo-back.${documentType}`;\n\n $: {\n if (!documentType) goToPrevStep(currentStepId, $configuration, $currentStepId);\n }\n\n // Reactive statement to initialize camera when video element becomes available\n $: if (video && !cameraInitialized && !initAttempted && !cameraError) {\n initAttempted = true;\n initializeCamera();\n }\n\n async function initializeCamera() {\n await tick();\n\n if (!video) {\n console.error('[DocumentPhotoBack] Video element not found after tick');\n cameraError = 'Video element not initialized';\n return;\n }\n\n console.log('[DocumentPhotoBack] Initializing camera with video element:', video);\n\n // Check if we're in a secure context\n const isSecureContext = window.isSecureContext ||\n window.location.hostname === 'localhost' ||\n window.location.hostname === '127.0.0.1';\n\n if (!isSecureContext) {\n console.warn('[DocumentPhotoBack] Not in secure context - camera requires HTTPS');\n cameraError = 'HTTPS_REQUIRED';\n return;\n }\n\n if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {\n console.error('[DocumentPhotoBack] mediaDevices API not available');\n cameraError = 'Camera not supported on this device or browser';\n return;\n }\n\n try {\n cameraPhoto = new CameraPhoto(video);\n console.log('[DocumentPhotoBack] CameraPhoto instance created, starting camera...');\n\n const cameraStream = await cameraPhoto.startCamera(FACING_MODES.ENVIRONMENT, {\n width: 1920,\n height: 1080,\n });\n\n console.log('[DocumentPhotoBack] Camera stream started successfully');\n stream = cameraStream;\n cameraError = null;\n cameraInitialized = true;\n\n // Start simulated card detection after camera initializes\n startCardDetection();\n } catch (error) {\n console.error('[DocumentPhotoBack] Camera error:', error);\n cameraError = (error as Error).message || 'Camera access denied';\n }\n }\n\n function startCardDetection() {\n // Simulate card detection after 2 seconds of stable camera\n // In production, analyze video frames for card edges\n setTimeout(() => {\n if (stream && !$isDisabled) {\n cardDetected = true;\n startAutoCapture();\n }\n }, 2000);\n }\n\n function startAutoCapture() {\n // Start 2-second countdown for auto-capture\n autoCaptureCountdown = 2;\n\n const countdownInterval = setInterval(() => {\n autoCaptureCountdown -= 0.1;\n if (autoCaptureCountdown <= 0) {\n clearInterval(countdownInterval);\n if (cardDetected && !$isDisabled && stream) {\n handleTakePhoto();\n }\n }\n }, 100);\n\n autoCaptureTimer = countdownInterval;\n }\n\n function cancelAutoCapture() {\n if (autoCaptureTimer) {\n clearInterval(autoCaptureTimer);\n autoCaptureTimer = null;\n }\n autoCaptureCountdown = 0;\n cardDetected = false;\n }\n\n onDestroy(() => {\n cameraPhoto?.stopCamera();\n cancelAutoCapture();\n });\n\n const handleTakePhoto = async () => {\n console.log('[DocumentPhotoBack] handleTakePhoto called', {\n cameraPhoto: !!cameraPhoto,\n video: !!video,\n isDisabled: $isDisabled,\n stream: !!stream,\n cameraInitialized\n });\n\n cancelAutoCapture();\n\n const document = $documents.find(d => d.type === documentType);\n if (!cameraPhoto || !document || !video || $isDisabled) {\n console.warn('[DocumentPhotoBack] Cannot take photo - missing requirements');\n return;\n }\n\n if (!stream) {\n console.warn('[DocumentPhotoBack] Cannot take photo - no stream');\n return;\n }\n\n toggleOnIsDisabled();\n isCompressing = true;\n\n try {\n console.log('[DocumentPhotoBack] Getting data URI...');\n const base64 = cameraPhoto.getDataUri(\n $configuration.settings?.cameraSettings || $uiPack.settings.cameraSettings,\n );\n console.log('[DocumentPhotoBack] Got data URI, length:', base64.length);\n\n const response = await fetch(base64);\n const blob = await response.blob();\n\n const compressed = await compressImage(blob, {\n quality: 0.85,\n maxWidth: 1920,\n maxHeight: 1080,\n });\n\n const newDocumentsState = updateDocument(document.type, compressed.base64, $documents);\n $documents = newDocumentsState;\n\n console.log('[DocumentPhotoBack] Photo captured, navigating to next step');\n goToNextStep(currentStepId, $configuration, $currentStepId);\n } catch (error) {\n console.error('[DocumentPhotoBack] Image capture/compression failed:', error);\n toggleOffIsDisabled();\n } finally {\n isCompressing = false;\n }\n };\n\n const handleTryAgain = async () => {\n console.log('[DocumentPhotoBack] handleTryAgain called');\n cameraError = null;\n initAttempted = false;\n cameraInitialized = false;\n stream = undefined;\n cardDetected = false;\n cancelAutoCapture();\n\n await tick();\n\n if (video) {\n await initializeCamera();\n }\n };\n\n const handleUploadInstead = () => {\n console.log('[DocumentPhotoBack] handleUploadInstead called');\n currentStepId.set(Steps.DocumentUpload);\n };\n\n preloadNextStepByCurrent($configuration, configuration, $currentStepId, $uiPack);\n</script>\n\n<div class=\"container\" {style}>\n {#if cameraError}\n <!-- Camera Permission Error State -->\n <div class=\"error-container\">\n <div class=\"error-content\">\n {#if cameraError === 'HTTPS_REQUIRED'}\n <div class=\"error-icon\">\n <svg width=\"64\" height=\"64\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"5\" y=\"11\" width=\"14\" height=\"10\" rx=\"2\" stroke=\"#F59E0B\" stroke-width=\"2\"/>\n <path d=\"M8 11V7C8 4.79086 9.79086 3 12 3C14.2091 3 16 4.79086 16 7V11\" stroke=\"#F59E0B\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n <circle cx=\"12\" cy=\"16\" r=\"1.5\" fill=\"#F59E0B\"/>\n </svg>\n </div>\n <h2 class=\"error-title\">Secure Connection Required</h2>\n <p class=\"error-description\">\n Camera access requires a secure HTTPS connection. Please access this page using HTTPS or use the upload option instead.\n </p>\n {:else}\n <div class=\"error-icon\">\n <svg width=\"64\" height=\"64\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M23 19C23 19.5304 22.7893 20.0391 22.4142 20.4142C22.0391 20.7893 21.5304 21 21 21H3C2.46957 21 1.96086 20.7893 1.58579 20.4142C1.21071 20.0391 1 19.5304 1 19V8C1 7.46957 1.21071 6.96086 1.58579 6.58579C1.96086 6.21071 2.46957 6 3 6H7L9 3H15L17 6H21C21.5304 6 22.0391 6.21071 22.4142 6.58579C22.7893 6.96086 23 7.46957 23 8V19Z\" stroke=\"#7C3AED\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <circle cx=\"12\" cy=\"13\" r=\"4\" stroke=\"#7C3AED\" stroke-width=\"2\"/>\n </svg>\n </div>\n <h2 class=\"error-title\">Camera Access Required</h2>\n <p class=\"error-description\">\n Please allow camera access in your browser settings to capture your document, or use the upload option.\n </p>\n {/if}\n <div class=\"error-actions\">\n <button class=\"btn-try-again\" on:click={handleTryAgain} type=\"button\">\n Try Again\n </button>\n <button class=\"btn-upload\" on:click={handleUploadInstead} type=\"button\">\n Upload Instead\n </button>\n </div>\n </div>\n </div>\n {:else}\n <!-- Normal Camera View -->\n {#each step.elements as element}\n {#if element.type === Elements.IconButton}\n <IconButton\n configuration={element.props}\n on:click={() => goToPrevStep(currentStepId, $configuration, $currentStepId)}\n />\n {/if}\n {#if element.type === Elements.IconCloseButton}\n <IconCloseButton\n configuration={element.props}\n on:click={() => {\n sendButtonClickEvent(\n EActionNames.CLOSE,\n { status: EVerificationStatuses.DATA_COLLECTION },\n $appState,\n true,\n );\n }}\n />\n {/if}\n {/each}\n\n <div class=\"header\">\n {#each step.elements as element}\n {#if element.type === Elements.Title}\n <Title configuration={element.props}>\n <T key={'title'} namespace={stepNamespace} />\n </Title>\n {/if}\n {#if element.type === Elements.Paragraph}\n <Paragraph configuration={element.props}>\n <T key={'description'} namespace={stepNamespace} />\n </Paragraph>\n {/if}\n {/each}\n </div>\n\n <div class=\"camera-view\">\n <!-- Video element -->\n <video bind:this={video} autoplay playsinline class=\"camera-video\">\n <track kind=\"captions\" />\n </video>\n\n <!-- Overlay with card frame -->\n {#if documentType}\n <div class=\"overlay-wrapper\">\n <Overlay type={documentType} isInFrame={cardDetected} />\n </div>\n {/if}\n\n <!-- Auto-capture countdown -->\n {#if cardDetected && autoCaptureCountdown > 0}\n <div class=\"auto-capture-indicator\">\n <div class=\"countdown-ring\">\n <svg viewBox=\"0 0 100 100\">\n <circle cx=\"50\" cy=\"50\" r=\"45\" fill=\"none\" stroke=\"rgba(255,255,255,0.2)\" stroke-width=\"6\"/>\n <circle\n cx=\"50\" cy=\"50\" r=\"45\"\n fill=\"none\"\n stroke=\"#10B981\"\n stroke-width=\"6\"\n stroke-linecap=\"round\"\n stroke-dasharray=\"283\"\n stroke-dashoffset={283 * (1 - autoCaptureCountdown / 2)}\n transform=\"rotate(-90 50 50)\"\n />\n </svg>\n <span class=\"countdown-text\">{Math.ceil(autoCaptureCountdown)}</span>\n </div>\n </div>\n {/if}\n\n <!-- Loader when no stream -->\n {#if stream === undefined || isCompressing}\n <div class=\"loader-overlay\">\n <Loader />\n </div>\n {/if}\n </div>\n\n <!-- Capture Button - Always visible when camera is ready -->\n {#if stream && !isCompressing}\n <div class=\"capture-button-container\">\n <button\n class=\"capture-button\"\n on:click={handleTakePhoto}\n disabled={$isDisabled || isCompressing}\n type=\"button\"\n aria-label=\"Capture photo\"\n >\n <span class=\"capture-button-inner\"></span>\n </button>\n </div>\n {/if}\n {/if}\n</div>\n\n<style>\n .container {\n height: 100%;\n max-height: 100vh;\n max-height: 100dvh;\n position: var(--position);\n background: #1a1a2e;\n text-align: center;\n display: flex;\n flex-direction: column;\n align-items: center;\n overflow: hidden;\n box-sizing: border-box;\n }\n\n .header {\n text-align: center;\n z-index: 10;\n padding: 8px 16px;\n flex-shrink: 0;\n }\n\n .header :global(h1),\n .header :global(h2) {\n color: #fff !important;\n font-size: 18px !important;\n margin: 0 !important;\n padding: 4px 0 !important;\n }\n\n .header :global(p) {\n color: rgba(255, 255, 255, 0.8) !important;\n font-size: 13px !important;\n margin: 0 !important;\n }\n\n .camera-view {\n flex: 1;\n position: relative;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 0;\n }\n\n .camera-video {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n z-index: 1;\n }\n\n .overlay-wrapper {\n position: relative;\n z-index: 10;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n }\n\n .loader-overlay {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(0, 0, 0, 0.5);\n z-index: 20;\n }\n\n .auto-capture-indicator {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: 15;\n pointer-events: none;\n }\n\n .countdown-ring {\n position: relative;\n width: 80px;\n height: 80px;\n }\n\n .countdown-ring svg {\n width: 100%;\n height: 100%;\n }\n\n .countdown-text {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 28px;\n font-weight: 700;\n color: #fff;\n text-shadow: 0 2px 4px rgba(0, 0, 0, 0.5);\n }\n\n .capture-button-container {\n position: relative;\n z-index: 100;\n padding: 16px 0 24px;\n flex-shrink: 0;\n }\n\n .capture-button {\n width: 72px;\n height: 72px;\n border-radius: 50%;\n border: 4px solid #fff;\n background: transparent;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n -webkit-tap-highlight-color: transparent;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);\n }\n\n .capture-button:active {\n transform: scale(0.95);\n }\n\n .capture-button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .capture-button-inner {\n width: 56px;\n height: 56px;\n border-radius: 50%;\n background: #fff;\n transition: transform 0.1s ease;\n }\n\n .capture-button:active .capture-button-inner {\n transform: scale(0.9);\n }\n\n /* Camera Permission Error Styles */\n .error-container {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n padding: 24px;\n background: #7C3AED;\n }\n\n .error-content {\n max-width: 400px;\n text-align: center;\n padding: 32px 24px;\n background: #fff;\n border-radius: 16px;\n box-shadow: 0 4px 24px rgba(0, 0, 0, 0.15);\n }\n\n .error-icon {\n margin-bottom: 20px;\n }\n\n .error-title {\n font-size: 20px;\n font-weight: 600;\n color: #1E293B;\n margin-bottom: 12px;\n font-family: var(--font-family, 'Avenir', sans-serif);\n }\n\n .error-description {\n font-size: 14px;\n color: #64748B;\n margin-bottom: 24px;\n line-height: 1.6;\n font-family: var(--font-family, 'Avenir', sans-serif);\n }\n\n .error-actions {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .btn-try-again,\n .btn-upload {\n padding: 14px 24px;\n border-radius: 8px;\n font-size: 16px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s;\n border: none;\n min-height: 48px;\n width: 100%;\n font-family: var(--font-family, 'Avenir', sans-serif);\n }\n\n .btn-try-again {\n background: #7C3AED;\n color: #fff;\n }\n\n .btn-try-again:hover {\n background: #6D28D9;\n }\n\n .btn-upload {\n background: transparent;\n color: #7C3AED;\n border: 2px solid #7C3AED;\n }\n\n .btn-upload:hover {\n background: rgba(124, 58, 237, 0.1);\n }\n\n /* Small screens */\n @media (max-height: 667px) {\n .capture-button {\n width: 64px;\n height: 64px;\n }\n\n .capture-button-inner {\n width: 48px;\n height: 48px;\n }\n\n .capture-button-container {\n padding: 12px 0 16px;\n }\n }\n</style>\n","<script lang=\"ts\">\n import { T } from '../contexts/translation';\n import { Title, IconButton, Photo, Paragraph, IconCloseButton } from '../atoms';\n import { configuration } from '../contexts/configuration';\n import { Elements } from '../contexts/configuration/types';\n import { goToPrevStep } from '../contexts/navigation';\n import { getDocImage } from '../contexts/app-state';\n import type { IDocumentInfo } from '../contexts/app-state';\n import { NavigationButtons } from '../molecules';\n import { getLayoutStyles, getStepConfiguration, uiPack } from '../ui-packs';\n import { preloadNextStepByCurrent } from '../services/preload-service';\n import { documents, selectedDocumentInfo, currentStepId, appState } from '../contexts/app-state';\n import {\n EActionNames,\n sendButtonClickEvent,\n EVerificationStatuses,\n } from '../utils/event-service';\n import { getFlowConfig } from '../contexts/flows/hooks';\n\n export let stepId;\n\n const step = getStepConfiguration($configuration, $uiPack, stepId);\n const flow = getFlowConfig($configuration);\n const style = getLayoutStyles($configuration, $uiPack, step);\n\n const stepNamespace = step.namespace!;\n\n let image: string;\n let documentInfo: IDocumentInfo | undefined = undefined;\n\n $: {\n documentInfo = step.documentInfo || $selectedDocumentInfo;\n if ($documents.length === 0 || !documentInfo) {\n goToPrevStep(currentStepId, $configuration, $currentStepId);\n }\n if (documentInfo) {\n image = getDocImage(documentInfo.type, $documents, 'back');\n }\n }\n\n preloadNextStepByCurrent($configuration, configuration, $currentStepId, $uiPack);\n</script>\n\n<div class=\"container\" {style}>\n {#each step.elements as element}\n {#if element.type === Elements.IconButton}\n <IconButton\n configuration={element.props}\n on:click={() => goToPrevStep(currentStepId, $configuration, $currentStepId)}\n />\n {/if}\n {#if element.type === Elements.IconCloseButton && flow.showCloseButton}\n <IconCloseButton\n configuration={element.props}\n on:click={() => {\n sendButtonClickEvent(\n EActionNames.CLOSE,\n { status: EVerificationStatuses.DATA_COLLECTION },\n $appState,\n true,\n );\n }}\n />\n {/if}\n {#if element.type === Elements.Title}\n <Title configuration={element.props}>\n <T key=\"title\" namespace={stepNamespace} />\n </Title>\n {/if}\n {#if element.type === Elements.Paragraph}\n <Paragraph configuration={element.props}>\n <T key=\"description\" namespace={stepNamespace} />\n </Paragraph>\n {/if}\n {#if element.type === Elements.Photo}\n <Photo configuration={element.props} src={image} />\n {/if}\n {/each}\n <NavigationButtons />\n</div>\n\n<style>\n .container {\n padding: var(--padding);\n position: var(--position);\n background: var(--background);\n text-align: center;\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n</style>\n","export const flowStart = () => {\n return;\n};\n\nexport const visitedPage = (pathname: string, search: string) => {\n return;\n};\n\nexport const flowApproved = () => {\n return;\n};\n\nexport const flowDeclined = () => {\n return;\n};\n\nexport const flowResubmission = () => {\n return;\n};\n\nexport const flowUploadLoader = () => {\n return;\n};\n\nexport const flowError = () => {\n return;\n};\n","<script lang=\"ts\">\n import { onDestroy } from 'svelte';\n import { T } from '../contexts/translation';\n import { Image, Button, Title, Paragraph, IconButton, IconCloseButton } from '../atoms';\n import { configuration } from '../contexts/configuration';\n import { appState, currentParams } from '../contexts/app-state';\n import { Elements } from '../contexts/configuration/types';\n import { flowApproved } from '../services/analytics';\n import {\n EActionNames,\n sendButtonClickEvent,\n sendFlowCompleteEvent,\n EVerificationStatuses,\n } from '../utils/event-service';\n import { DecisionStatus } from '../contexts/app-state/types';\n import { getLayoutStyles, getStepConfiguration, uiPack } from '../ui-packs';\n import { getFlowConfig } from '../contexts/flows/hooks';\n\n export let stepId;\n\n const step = getStepConfiguration($configuration, $uiPack, stepId);\n const flow = getFlowConfig($configuration);\n const style = getLayoutStyles($configuration, $uiPack, step);\n\n const stepNamespace = step.namespace!;\n\n flowApproved();\n\n const handleClose = () => {\n sendFlowCompleteEvent({\n status: EVerificationStatuses.COMPLETED,\n idvResult: DecisionStatus.APPROVED,\n });\n };\n\n onDestroy(() => {\n $currentParams = null;\n });\n</script>\n\n<div class=\"container\" {style}>\n {#each step.elements as element}\n {#if element.type === Elements.IconButton}\n <IconButton configuration={element.props} />\n {/if}\n {#if element.type === Elements.IconCloseButton && flow.showCloseButton}\n <IconCloseButton\n configuration={element.props}\n on:click={() => {\n sendButtonClickEvent(\n EActionNames.CLOSE,\n { status: EVerificationStatuses.DATA_COLLECTION },\n $appState,\n true,\n );\n }}\n />\n {/if}\n {#if element.type === Elements.Image}\n <Image configuration={element.props} />\n {/if}\n {#if element.type === Elements.Title}\n <Title configuration={element.props}>\n <T key=\"title\" namespace={stepNamespace} />\n </Title>\n {/if}\n {#if element.type === Elements.Paragraph}\n <Paragraph configuration={element.props}>\n <T key={element.props.context || 'description'} namespace={stepNamespace} />\n </Paragraph>\n {/if}\n {#if element.type === Elements.Button}\n <Button on:click={handleClose} configuration={element.props}>\n <T key=\"button\" namespace={stepNamespace} />\n </Button>\n {/if}\n {/each}\n</div>\n\n<style>\n .container {\n display: flex;\n flex-direction: column;\n padding: var(--padding);\n position: relative;\n background: var(--background);\n text-align: center;\n height: 100%;\n }\n</style>\n","<script lang=\"ts\">\n import { T } from '../contexts/translation';\n import { IconButton, IconCloseButton, Image, NextStepButton, Paragraph, Title } from '../atoms';\n import { configuration } from '../contexts/configuration';\n import { goToNextStep, goToPrevStep } from '../contexts/navigation/hooks';\n import { Elements, Steps } from '../contexts/configuration/types';\n import { nativeCameraHandler } from '../utils/photo-utils';\n import type { ICameraEvent } from '../utils/photo-utils';\n import { getFlowConfig, isNativeCamera } from '../contexts/flows/hooks';\n import { preloadNextStepByCurrent } from '../services/preload-service';\n import {\n selectedDocumentInfo,\n selfieUri,\n currentStepId,\n appState,\n } from '../contexts/app-state/stores';\n import {\n EActionNames,\n EVerificationStatuses,\n sendButtonClickEvent,\n } from '../utils/event-service';\n import { getLayoutStyles, getStepConfiguration, uiPack } from '../ui-packs';\n import { createToggle } from '../hooks/createToggle/createToggle';\n\n export let stepId;\n\n const step = getStepConfiguration($configuration, $uiPack, stepId);\n const flow = getFlowConfig($configuration);\n const style = getLayoutStyles($configuration, $uiPack, step);\n\n const stepNamespace = step.namespace!;\n\n let skipBackSide = false;\n\n $: {\n if ($selectedDocumentInfo && !$selectedDocumentInfo.backSide) {\n skipBackSide = true;\n }\n }\n\n const [isDisabled, , toggleOnIsDisabled] = createToggle();\n const handler = async (e: ICameraEvent) => {\n if (!e.target || $isDisabled) return;\n $selfieUri = await nativeCameraHandler(e);\n goToNextStep(currentStepId, $configuration, $currentStepId);\n toggleOnIsDisabled();\n };\n\n preloadNextStepByCurrent($configuration, configuration, $currentStepId, $uiPack);\n</script>\n\n<div class=\"container\" {style}>\n {#each step.elements as element}\n {#if element.type === Elements.IconButton}\n <IconButton\n configuration={element.props}\n on:click={() =>\n goToPrevStep(\n currentStepId,\n $configuration,\n $currentStepId,\n skipBackSide ? 'back-side' : undefined,\n )}\n />\n {/if}\n {#if element.type === Elements.IconCloseButton && flow.showCloseButton}\n <IconCloseButton\n configuration={element.props}\n on:click={() => {\n sendButtonClickEvent(\n EActionNames.CLOSE,\n { status: EVerificationStatuses.DATA_COLLECTION },\n $appState,\n true,\n );\n }}\n />\n {/if}\n {#if element.type === Elements.Image}\n <Image configuration={element.props} />\n {/if}\n {#if element.type === Elements.Title}\n <Title configuration={element.props}>\n <T key=\"title\" namespace={stepNamespace} />\n </Title>\n {/if}\n {#if element.type === Elements.Paragraph}\n <Paragraph configuration={element.props}>\n <T key={element.props.context || 'description'} namespace={stepNamespace} />\n </Paragraph>\n {/if}\n {#if element.type === Elements.Button}\n <div class=\"button-container\">\n {#if isNativeCamera($configuration)}\n <input\n class=\"camera-input\"\n type=\"file\"\n accept=\"image/*\"\n capture=\"user\"\n on:change={handler}\n />\n {/if}\n <NextStepButton configuration={element.props} disabled={$isDisabled}>\n <T key=\"button\" namespace={stepNamespace} />\n </NextStepButton>\n </div>\n {/if}\n {/each}\n</div>\n\n<style>\n .container {\n display: flex;\n flex-direction: column;\n padding: var(--padding);\n position: var(--position);\n text-align: center;\n height: 100%;\n background: var(--background);\n }\n .button-container {\n position: relative;\n }\n .camera-input {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0px;\n left: 0px;\n z-index: 3;\n opacity: 0;\n cursor: pointer;\n }\n</style>\n","export const isMobile = () => {\n const toMatch = [\n /Android/i,\n /webOS/i,\n /iPhone/i,\n /iPad/i,\n /iPod/i,\n /BlackBerry/i,\n /Windows Phone/i,\n ];\n\n return toMatch.some(toMatchItem => {\n return navigator.userAgent.match(toMatchItem);\n });\n};\n","<script lang=\"ts\">\n export let width = 280;\n export let height = 360;\n export let borderColor = '#75aadb';\n export let borderWidth = 3;\n</script>\n\n<div\n class=\"face-oval\"\n style=\"width: {width}px; height: {height}px; border: {borderWidth}px solid {borderColor};\"\n aria-hidden=\"true\"\n data-testid=\"face-oval\"\n></div>\n\n<style>\n .face-oval {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n border-radius: 50%;\n pointer-events: none;\n }\n\n /* Responsive design */\n @media (max-width: 768px) {\n .face-oval {\n width: 240px;\n height: 320px;\n }\n }\n\n /* Dark theme support */\n @media (prefers-color-scheme: dark) {\n .face-oval {\n border-color: #93c5fd;\n }\n }\n</style>\n","export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n","import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n","import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n","export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","/**\n * Verification API Service\n * Handles submission of verification data to backend\n *\n * Architecture: ADR-R002 SDK-Backend API Integration\n * - Creates verification case\n * - Uploads documents with base64\n * - Includes livenessSessionId for AWS Rekognition validation\n * - Polls for verification result (FR-R1.5)\n */\n\nimport { z } from 'zod';\nimport { getLivenessSessionId, setVerificationStatus, clearVerificationStatus } from '../../contexts/app-state/stores';\nimport type { IVerificationStatus } from '../../contexts/app-state/stores';\n\n// Debug mode for verbose logging\nconst DEBUG = typeof import.meta !== 'undefined' && import.meta.env?.VITE_DEBUG === 'true';\n\n/**\n * Fetch with retry logic for network failures\n * Retries only on network errors (TypeError: Failed to fetch), not HTTP 4xx/5xx\n *\n * @param url - Request URL\n * @param options - Fetch options\n * @param maxRetries - Max retry attempts (default: 3)\n * @param timeout - Request timeout in ms (default: 30000)\n */\nasync function fetchWithRetry(\n url: string,\n options: RequestInit,\n maxRetries = 3,\n timeout = 30000\n): Promise<Response> {\n const delays = [1000, 2000, 4000]; // Exponential backoff: 1s, 2s, 4s\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt < maxRetries; attempt++) {\n try {\n // Add timeout using AbortController\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n const response = await fetch(url, {\n ...options,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n // Don't retry on HTTP errors (4xx, 5xx) - only network failures\n return response;\n } catch (error) {\n // Network error (TypeError: Failed to fetch) or timeout (AbortError)\n lastError = error instanceof Error ? error : new Error('Unknown error');\n\n // Only retry on network errors, not on abort/timeout\n const isNetworkError = error instanceof TypeError ||\n (error instanceof Error && error.name === 'AbortError');\n\n if (isNetworkError && attempt < maxRetries - 1) {\n const delay = delays[attempt];\n if (DEBUG) {\n console.warn(\n `[SDK] Network error, retrying in ${delay}ms (attempt ${attempt + 1}/${maxRetries}):`,\n lastError.message\n );\n }\n await new Promise(resolve => setTimeout(resolve, delay));\n } else {\n // Don't retry - throw immediately\n throw lastError;\n }\n }\n }\n\n throw lastError || new Error('Network request failed after retries');\n}\n\nexport interface SubmitVerificationRequest {\n documentFront: string; // base64 data URI\n documentBack?: string | null;\n selfie: string;\n documentType: string;\n sessionId: string;\n livenessSessionId?: string | null; // AWS Rekognition session ID\n}\n\nexport interface SubmitVerificationResponse {\n verificationId: string;\n referenceNumber: string;\n status: string;\n}\n\n/**\n * Window context schema for validation (TD-003)\n * Validates all values read from window to prevent XSS\n */\nconst WindowContextSchema = z.object({\n apiUrl: z.string().url().optional().default(''),\n clientId: z.string().optional(),\n useMockApi: z.boolean().optional(),\n sessionToken: z.string().optional(),\n});\n\n/**\n * Safely extract and validate window context values\n * Returns validated config or defaults\n */\nexport function getValidatedBackendConfig(): {\n backendUrl: string;\n clientId: string | undefined;\n useMockApi: boolean;\n sessionToken: string | undefined;\n} {\n const defaultApiUrl = import.meta.env?.VITE_API_URL || '';\n const envUseMock = import.meta.env?.VITE_USE_MOCK_API;\n\n try {\n // Extract raw values from window\n const win = typeof window !== 'undefined' ? (window as unknown as Record<string, unknown>) : undefined;\n const rawApiUrl = win?.__blrn_api_url;\n const rawContext = win?.__blrn_context as Record<string, unknown> | undefined;\n const rawUseMock = win?.__blrn_use_mock_api;\n\n // Validate with Zod\n const validated = WindowContextSchema.parse({\n apiUrl: typeof rawApiUrl === 'string' ? rawApiUrl : undefined,\n clientId: typeof rawContext?.backendConfig === 'object' && rawContext.backendConfig !== null\n ? ((rawContext.backendConfig as Record<string, unknown>).auth as Record<string, unknown> | undefined)?.clientId as string | undefined\n : undefined,\n useMockApi: typeof rawUseMock === 'boolean' ? rawUseMock : undefined,\n sessionToken: typeof rawContext?.sessionToken === 'string' ? rawContext.sessionToken : undefined,\n });\n\n const backendUrl = validated.apiUrl || defaultApiUrl;\n\n // Check environment variable for mock mode\n const useMockApi = envUseMock === 'true' || envUseMock === true ||\n (validated.useMockApi !== false && !backendUrl);\n\n return {\n backendUrl,\n clientId: validated.clientId,\n useMockApi,\n sessionToken: validated.sessionToken,\n };\n } catch {\n // On validation failure, return safe defaults\n return {\n backendUrl: defaultApiUrl,\n clientId: undefined,\n useMockApi: !defaultApiUrl,\n sessionToken: undefined,\n };\n }\n}\n\n/**\n * Submit verification to backend\n *\n * Architecture: ADR-R002 SDK-Backend API Integration\n * 1. Create verification case\n * 2. Upload document front\n * 3. Upload document back (if provided)\n * 4. Upload selfie with livenessSessionId\n * 5. Poll for result (FR-R1.5)\n */\nexport async function submitVerification(\n request: SubmitVerificationRequest\n): Promise<SubmitVerificationResponse> {\n const { backendUrl, clientId, useMockApi, sessionToken } = getValidatedBackendConfig();\n\n // Get liveness session ID from store if not provided\n const livenessSessionId = request.livenessSessionId ?? getLivenessSessionId();\n\n // Clear previous verification status (AC12)\n clearVerificationStatus();\n\n // Mock mode for development (AC11 - skip polling)\n if (useMockApi) {\n if (DEBUG) console.warn('[SDK] Running in mock mode - no backend integration');\n await new Promise(resolve => setTimeout(resolve, 1000));\n return {\n verificationId: 'ver_mock_' + Date.now(),\n referenceNumber: 'REF-MOCK-' + String(Date.now()).slice(-6),\n status: 'approved', // Mock always succeeds\n };\n }\n\n try {\n // Step 1: Create verification case\n if (DEBUG) console.log('[SDK] Creating verification case...');\n const createResponse = await fetchWithRetry(`${backendUrl}/api/v1/verifications`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(sessionToken && { Authorization: `Bearer ${sessionToken}` }),\n ...(clientId && { 'X-Client-ID': clientId }),\n },\n body: JSON.stringify({\n documentType: request.documentType,\n source: 'web_sdk',\n }),\n });\n\n if (!createResponse.ok) {\n const error = await createResponse.json().catch(() => ({}));\n throw new Error(error.message || `Failed to create verification: ${createResponse.status}`);\n }\n\n const createData = await createResponse.json();\n const verificationId = createData.data?.verificationId || createData.verificationId;\n const verificationToken = createData.data?.sessionToken || sessionToken;\n\n if (DEBUG) console.log('[SDK] Verification created:', verificationId);\n\n // Step 2: Upload document front\n if (DEBUG) console.log('[SDK] Uploading document front...');\n await uploadDocument(backendUrl, verificationId, verificationToken, 'document_front', request.documentFront);\n\n // Step 3: Upload document back (if provided)\n if (request.documentBack) {\n if (DEBUG) console.log('[SDK] Uploading document back...');\n await uploadDocument(backendUrl, verificationId, verificationToken, 'document_back', request.documentBack);\n }\n\n // Step 4: Upload selfie WITH liveness session ID\n if (DEBUG) console.log('[SDK] Uploading selfie with liveness session:', livenessSessionId || 'none');\n await uploadDocument(backendUrl, verificationId, verificationToken, 'selfie', request.selfie, {\n livenessSessionId: livenessSessionId || undefined,\n });\n\n // Step 5: Poll for result (FR-R1.5)\n const referenceNumber = `REF-${new Date().getFullYear()}-${verificationId.slice(-6).toUpperCase()}`;\n\n if (DEBUG) console.log('[SDK] Polling for verification result...');\n const pollResult = await pollVerificationStatus(verificationId, verificationToken);\n\n // Update store with final status (AC9) - map terminal status correctly\n const storeStatus: IVerificationStatus['status'] =\n pollResult.status === 'approved' ? 'approved' :\n pollResult.status === 'rejected' ? 'rejected' :\n pollResult.status === 'pending_review' ? 'pending_review' :\n 'processing';\n\n setVerificationStatus({\n verificationId,\n status: storeStatus,\n referenceNumber,\n rejectionReason: pollResult.rejectionReason,\n biometricScore: pollResult.biometricScore,\n livenessConfidence: pollResult.livenessConfidence,\n ocrData: pollResult.ocrData,\n polledAt: Date.now(),\n });\n\n if (DEBUG) console.log('[SDK] Verification complete:', verificationId, pollResult.status);\n\n return {\n verificationId,\n referenceNumber,\n status: pollResult.status,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n if (DEBUG) console.error('[SDK] Verification submission failed:', message);\n throw new Error(`Verification submission failed: ${message}`);\n }\n}\n\n/**\n * Upload document to verification case\n */\nasync function uploadDocument(\n backendUrl: string,\n verificationId: string,\n sessionToken: string | undefined,\n documentType: 'document_front' | 'document_back' | 'selfie',\n imageData: string,\n metadata?: { livenessSessionId?: string }\n): Promise<void> {\n const response = await fetchWithRetry(\n `${backendUrl}/api/v1/verifications/${verificationId}/documents`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(sessionToken && { Authorization: `Bearer ${sessionToken}` }),\n },\n body: JSON.stringify({\n documentType,\n imageData,\n metadata: {\n ...metadata,\n uploadedAt: new Date().toISOString(),\n source: 'web_sdk',\n },\n }),\n }\n );\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.message || `Failed to upload ${documentType}: ${response.status}`);\n }\n}\n\n// ============================================\n// VERIFICATION STATUS POLLING (FR-R1.5)\n// ============================================\n\nexport interface VerificationStatusResponse {\n verificationId: string;\n status: 'created' | 'documents_uploading' | 'processing' | 'approved' | 'rejected' | 'pending_review';\n ocrData?: Record<string, unknown>;\n biometricScore?: number;\n livenessConfidence?: number;\n rejectionReason?: string;\n}\n\n// Export constants for testing\nexport const BACKOFF_DELAYS = [1000, 2000, 4000, 8000, 16000, 30000];\nexport const MAX_POLL_TIME_MS = 60000;\nexport const TERMINAL_STATES = ['approved', 'rejected', 'pending_review'];\n\n/**\n * Poll verification status with exponential backoff\n * Handles network errors gracefully with silent retry\n *\n * @param verificationId - Verification case ID\n * @param sessionToken - Session token for authorization\n * @returns Final status or timeout status\n */\nexport async function pollVerificationStatus(\n verificationId: string,\n sessionToken: string | undefined\n): Promise<VerificationStatusResponse> {\n const { backendUrl } = getValidatedBackendConfig();\n const startTime = Date.now();\n let attempt = 0;\n\n while (Date.now() - startTime < MAX_POLL_TIME_MS) {\n try {\n const response = await fetch(\n `${backendUrl}/api/v1/verifications/${verificationId}`,\n {\n method: 'GET',\n headers: {\n ...(sessionToken && { Authorization: `Bearer ${sessionToken}` }),\n },\n }\n );\n\n if (!response.ok) {\n if (DEBUG) console.warn(`[SDK] Poll returned ${response.status}, continuing...`);\n } else {\n const data = await response.json();\n const status = data.data?.status || data.status;\n\n if (TERMINAL_STATES.includes(status)) {\n if (DEBUG) console.log(`[SDK] Verification ${verificationId} reached terminal state: ${status}`);\n return {\n verificationId,\n status,\n ocrData: data.data?.ocrData,\n biometricScore: data.data?.biometricScore,\n livenessConfidence: data.data?.livenessConfidence,\n rejectionReason: data.data?.rejectionReason,\n };\n }\n\n if (DEBUG) console.log(`[SDK] Verification ${verificationId} status: ${status}, continuing...`);\n }\n } catch (error) {\n // Network error or invalid JSON - continue silently (AC8)\n if (DEBUG) console.warn('[SDK] Poll error, continuing...', error instanceof Error ? error.message : 'Unknown');\n }\n\n // Exponential backoff\n const delay = BACKOFF_DELAYS[Math.min(attempt, BACKOFF_DELAYS.length - 1)];\n\n if (Date.now() - startTime + delay >= MAX_POLL_TIME_MS) {\n break; // Would exceed timeout\n }\n\n await new Promise(resolve => setTimeout(resolve, delay));\n attempt++;\n }\n\n // Timeout - return pending_review (AC3)\n if (DEBUG) console.warn(`[SDK] Polling timeout after ${MAX_POLL_TIME_MS}ms`);\n return {\n verificationId,\n status: 'pending_review',\n };\n}\n","<script lang=\"ts\">\n /**\n * LivenessCheck Component - AWS Rekognition Face Liveness Integration\n *\n * Architecture: ADR-R003 Cross-Region Liveness\n * - Creates liveness session via backend (eu-west-1)\n * - Uses FaceLivenessDetector from @aws-amplify/ui-react-liveness\n * - Captures reference image on success\n * - Stores sessionId for backend validation\n *\n * NOTE: This component uses a simplified approach without the full\n * Amplify UI React dependency. It creates the session and uses\n * native camera capture with face positioning guidance.\n *\n * For full AWS Rekognition streaming, consider:\n * - @aws-amplify/ui-react-liveness (React)\n * - Custom WebSocket to Rekognition Streaming API\n */\n import { onMount, onDestroy, createEventDispatcher } from 'svelte';\n import { createLivenessSession } from '../services/api/liveness';\n import {\n setLivenessSession,\n updateLivenessStatus,\n clearLivenessSession,\n } from '../contexts/app-state/stores';\n import { Loader } from '../atoms';\n\n const dispatch = createEventDispatcher<{\n complete: { sessionId: string; referenceImage: string };\n error: { message: string; code: string };\n skip: void;\n }>();\n\n // Component state\n let videoElement: HTMLVideoElement;\n let canvasElement: HTMLCanvasElement;\n let stream: MediaStream | null = null;\n let sessionId: string | null = null;\n let status: 'initializing' | 'ready' | 'checking' | 'success' | 'failed' | 'error' = 'initializing';\n let errorMessage = '';\n let progress = 0;\n let instruction = 'Initializing camera...';\n\n // Face detection state\n let faceDetected = false;\n let facePosition = { x: 0.5, y: 0.5, size: 0 };\n let holdStartTime: number | null = null;\n const HOLD_DURATION_MS = 2000;\n\n // Retry counter and directional hints\n let retryCount = 0;\n let directionalHint: string | null = null;\n const MAX_RETRY_ATTEMPTS = 3;\n\n // Animation frame ID for cleanup\n let animationFrameId: number | null = null;\n\n onMount(async () => {\n try {\n // Step 1: Create liveness session via backend\n instruction = 'Creating secure session...';\n const session = await createLivenessSession();\n sessionId = session.sessionId;\n\n setLivenessSession({\n sessionId: session.sessionId,\n region: session.region,\n createdAt: Date.now(),\n status: 'pending',\n });\n\n // Step 2: Initialize camera\n instruction = 'Starting camera...';\n await initializeCamera();\n\n status = 'ready';\n instruction = 'Position your face in the oval';\n updateLivenessStatus('in_progress');\n\n // Step 3: Start face detection loop\n startFaceDetection();\n } catch (error) {\n status = 'error';\n errorMessage = error instanceof Error ? error.message : 'Failed to initialize';\n updateLivenessStatus('failed');\n dispatch('error', { message: errorMessage, code: 'INIT_FAILED' });\n }\n });\n\n onDestroy(() => {\n stopCamera();\n if (animationFrameId) {\n cancelAnimationFrame(animationFrameId);\n }\n });\n\n async function initializeCamera() {\n try {\n stream = await navigator.mediaDevices.getUserMedia({\n video: {\n facingMode: 'user',\n width: { ideal: 1280 },\n height: { ideal: 720 },\n },\n audio: false,\n });\n\n if (videoElement) {\n videoElement.srcObject = stream;\n await videoElement.play();\n }\n } catch (error) {\n throw new Error('Camera access denied. Please allow camera access.');\n }\n }\n\n function stopCamera() {\n if (stream) {\n stream.getTracks().forEach(track => track.stop());\n stream = null;\n }\n }\n\n function startFaceDetection() {\n // Simple face detection using canvas brightness analysis\n // In production, this would use MediaPipe or TensorFlow.js for accurate detection\n const detectLoop = () => {\n if (status !== 'ready' && status !== 'checking') return;\n\n if (videoElement && canvasElement) {\n const ctx = canvasElement.getContext('2d');\n if (ctx) {\n // Sample center region for face detection\n canvasElement.width = 100;\n canvasElement.height = 100;\n ctx.drawImage(\n videoElement,\n videoElement.videoWidth * 0.3,\n videoElement.videoHeight * 0.2,\n videoElement.videoWidth * 0.4,\n videoElement.videoHeight * 0.5,\n 0, 0, 100, 100\n );\n\n const imageData = ctx.getImageData(0, 0, 100, 100);\n const data = imageData.data;\n\n // Calculate average brightness and variance\n let totalBrightness = 0;\n let skinTonePixels = 0;\n\n for (let i = 0; i < data.length; i += 4) {\n const r = data[i];\n const g = data[i + 1];\n const b = data[i + 2];\n const brightness = (r + g + b) / 3;\n totalBrightness += brightness;\n\n // Simple skin tone detection (very basic)\n if (r > 60 && g > 40 && b > 20 && r > g && g > b) {\n skinTonePixels++;\n }\n }\n\n const avgBrightness = totalBrightness / (data.length / 4);\n const skinToneRatio = skinTonePixels / (data.length / 4);\n\n // Detect face based on skin tone presence and brightness\n faceDetected = skinToneRatio > 0.15 && avgBrightness > 50 && avgBrightness < 220;\n\n if (faceDetected) {\n // Simulate face position (centered)\n facePosition = {\n x: 0.5,\n y: 0.5,\n size: 0.4,\n };\n }\n\n // Update directional hint\n directionalHint = getDirectionalHint();\n }\n }\n\n updatePhase();\n animationFrameId = requestAnimationFrame(detectLoop);\n };\n\n animationFrameId = requestAnimationFrame(detectLoop);\n }\n\n function updatePhase() {\n if (status === 'success' || status === 'error') return;\n\n if (faceDetected) {\n if (status === 'ready') {\n status = 'checking';\n holdStartTime = Date.now();\n instruction = 'Hold still...';\n } else if (status === 'checking' && holdStartTime) {\n const elapsed = Date.now() - holdStartTime;\n progress = Math.min(100, (elapsed / HOLD_DURATION_MS) * 100);\n\n if (elapsed >= HOLD_DURATION_MS) {\n handleSuccess();\n }\n }\n } else {\n // Face lost - reset\n if (status === 'checking') {\n status = 'ready';\n holdStartTime = null;\n progress = 0;\n instruction = 'Position your face in the oval';\n }\n }\n }\n\n async function handleSuccess() {\n status = 'success';\n instruction = 'Verification complete!';\n progress = 100;\n\n // Capture high-quality reference frame\n const referenceImage = captureFrame();\n\n // Update store with success\n updateLivenessStatus('completed', 95, referenceImage);\n\n // Small delay for visual feedback\n setTimeout(() => {\n dispatch('complete', {\n sessionId: sessionId!,\n referenceImage,\n });\n }, 500);\n }\n\n function captureFrame(): string {\n if (!videoElement || !canvasElement) return '';\n\n const ctx = canvasElement.getContext('2d');\n if (!ctx) return '';\n\n // Capture full resolution\n canvasElement.width = videoElement.videoWidth;\n canvasElement.height = videoElement.videoHeight;\n\n // Mirror the image (front camera)\n ctx.translate(canvasElement.width, 0);\n ctx.scale(-1, 1);\n ctx.drawImage(videoElement, 0, 0);\n\n return canvasElement.toDataURL('image/jpeg', 0.92);\n }\n\n function handleRetry() {\n retryCount++;\n\n if (retryCount >= MAX_RETRY_ATTEMPTS) {\n status = 'failed';\n instruction = 'Multiple attempts failed';\n return;\n }\n\n status = 'ready';\n holdStartTime = null;\n progress = 0;\n errorMessage = '';\n instruction = 'Position your face in the oval';\n updateLivenessStatus('in_progress');\n startFaceDetection();\n }\n\n function getDirectionalHint(): string | null {\n if (!faceDetected) return null;\n\n const { x, y, size } = facePosition;\n const centerX = 0.5;\n const centerY = 0.45; // Slightly above center for face oval\n const tolerance = 0.1;\n const sizeMin = 0.3;\n const sizeMax = 0.5;\n\n // Priority: size > vertical > horizontal\n if (size < sizeMin) return 'Move closer';\n if (size > sizeMax) return 'Move back';\n if (y < centerY - tolerance) return 'Move down';\n if (y > centerY + tolerance) return 'Move up';\n if (x < centerX - tolerance) return 'Move right'; // Mirrored camera\n if (x > centerX + tolerance) return 'Move left'; // Mirrored camera\n return null; // Centered - ready for hold phase\n }\n\n function handleSkip() {\n // Clear session and mark as skipped\n setLivenessSession({\n sessionId: sessionId || 'skipped',\n region: 'eu-west-1',\n createdAt: Date.now(),\n status: 'skipped',\n });\n dispatch('skip');\n }\n\n // Border color based on state\n $: borderColor = status === 'success'\n ? '#10B981' // emerald\n : status === 'checking'\n ? '#7C3AED' // ultraviolet\n : faceDetected\n ? '#06B6D4' // cyan\n : '#F59E0B'; // amber\n</script>\n\n<div class=\"liveness-container\" data-testid=\"liveness-check\">\n {#if status === 'initializing'}\n <div class=\"loading-state\" data-testid=\"liveness-loading\">\n <Loader />\n <p>{instruction}</p>\n </div>\n {:else if status === 'error'}\n <div class=\"error-state\" data-testid=\"liveness-error\">\n <div class=\"error-icon\">⚠️</div>\n <h3>Verification Failed</h3>\n <p data-testid=\"liveness-error-message\">{errorMessage}</p>\n <div class=\"error-actions\">\n <button class=\"btn-retry\" on:click={handleRetry} data-testid=\"liveness-retry-button\">\n Try Again\n </button>\n <button class=\"btn-skip\" on:click={handleSkip} data-testid=\"liveness-skip-button-error\">\n Skip for Now\n </button>\n </div>\n <p class=\"skip-warning\" data-testid=\"liveness-skip-warning\">Skipping will require manual review</p>\n </div>\n {:else if status === 'failed'}\n <div class=\"error-state\" data-testid=\"liveness-error\">\n <div class=\"error-icon\">⚠️</div>\n <h3>Multiple Attempts Failed</h3>\n <p data-testid=\"liveness-error-message\">We couldn't verify your liveness after {MAX_RETRY_ATTEMPTS} attempts.</p>\n <div class=\"error-actions\">\n <button class=\"btn-retry\" on:click={() => { retryCount = 0; handleRetry(); }} data-testid=\"liveness-retry-button\">\n Try One More Time\n </button>\n <button class=\"btn-skip\" on:click={handleSkip} data-testid=\"liveness-skip-button-failed\">\n Skip and Continue\n </button>\n </div>\n <p class=\"skip-warning\" data-testid=\"liveness-skip-warning\">Skipping will require manual review</p>\n </div>\n {:else}\n <div class=\"camera-view\" data-testid=\"liveness-camera\">\n <!-- Video element -->\n <video\n bind:this={videoElement}\n autoplay\n playsinline\n muted\n class=\"video-feed\"\n data-testid=\"liveness-video\"\n >\n <track kind=\"captions\" />\n </video>\n\n <!-- Hidden canvas for frame capture -->\n <canvas bind:this={canvasElement} class=\"hidden-canvas\"></canvas>\n\n <!-- Face guide overlay -->\n <div class=\"face-guide\" data-testid=\"liveness-face-guide\">\n <svg viewBox=\"0 0 300 400\" class=\"guide-svg\">\n <defs>\n <mask id=\"faceMask\">\n <rect width=\"100%\" height=\"100%\" fill=\"white\"/>\n <ellipse cx=\"150\" cy=\"180\" rx=\"100\" ry=\"130\" fill=\"black\"/>\n </mask>\n </defs>\n <rect width=\"100%\" height=\"100%\" fill=\"rgba(0,0,0,0.6)\" mask=\"url(#faceMask)\"/>\n <ellipse\n cx=\"150\" cy=\"180\" rx=\"100\" ry=\"130\"\n fill=\"none\"\n stroke={borderColor}\n stroke-width={faceDetected ? 4 : 2}\n stroke-dasharray={faceDetected ? 'none' : '10 5'}\n class=\"face-oval\"\n class:face-oval--searching={!faceDetected}\n class:face-oval--positioned={faceDetected && status === 'ready'}\n class:face-oval--verifying={status === 'checking'}\n class:face-oval--success={status === 'success'}\n />\n </svg>\n\n <!-- Progress ring (during hold phase) -->\n {#if status === 'checking'}\n <svg class=\"progress-ring\" viewBox=\"0 0 100 100\" data-testid=\"liveness-progress-ring\">\n <defs>\n <linearGradient id=\"progress-gradient\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">\n <stop offset=\"0%\" stop-color=\"#7C3AED\" />\n <stop offset=\"100%\" stop-color=\"#06B6D4\" />\n </linearGradient>\n </defs>\n <circle\n cx=\"50\" cy=\"50\" r=\"45\"\n fill=\"none\"\n stroke=\"rgba(51, 65, 85, 0.3)\"\n stroke-width=\"6\"\n />\n <circle\n cx=\"50\" cy=\"50\" r=\"45\"\n fill=\"none\"\n stroke=\"url(#progress-gradient)\"\n stroke-width=\"6\"\n stroke-linecap=\"round\"\n stroke-dasharray={`${progress * 2.83} 283`}\n transform=\"rotate(-90 50 50)\"\n class=\"progress-circle\"\n style=\"filter: drop-shadow(0 0 8px rgba(124, 58, 237, 0.5));\"\n />\n </svg>\n {/if}\n\n <!-- Success checkmark with expanding ring -->\n {#if status === 'success'}\n <div class=\"success-overlay\" data-testid=\"liveness-success-icon\">\n <div class=\"success-ring\"></div>\n <div class=\"success-icon\">✓</div>\n </div>\n {/if}\n </div>\n\n <!-- Directional hint -->\n {#if directionalHint && status === 'ready'}\n <div class=\"directional-hint\" data-testid=\"liveness-directional-hint\">\n <span class=\"hint-arrow\">→</span>\n <span class=\"hint-text\">{directionalHint}</span>\n </div>\n {/if}\n\n <!-- Instructions overlay -->\n <div class=\"instructions-overlay\">\n <p class=\"instruction-text\" data-testid=\"liveness-instruction\" aria-live=\"polite\">{instruction}</p>\n </div>\n\n <!-- Skip button (always visible) -->\n <button\n class=\"btn-skip-corner\"\n on:click={handleSkip}\n data-testid=\"liveness-skip-button\"\n aria-label=\"Skip liveness check\"\n >\n Skip\n </button>\n </div>\n {/if}\n</div>\n\n<style>\n .liveness-container {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: #000;\n z-index: 100;\n\n /* CSS custom properties for colors */\n --liveness-detecting: #F59E0B;\n --liveness-positioned: #06B6D4;\n --liveness-verifying: #7C3AED;\n --liveness-success: #10B981;\n --liveness-failed: #EF4444;\n\n /* Glow variants */\n --liveness-glow-detecting: rgba(245, 158, 11, 0.4);\n --liveness-glow-positioned: rgba(6, 182, 212, 0.4);\n --liveness-glow-verifying: rgba(124, 58, 237, 0.5);\n --liveness-glow-success: rgba(16, 185, 129, 0.5);\n }\n\n .loading-state,\n .error-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: #fff;\n padding: 24px;\n text-align: center;\n }\n\n .error-icon {\n font-size: 48px;\n margin-bottom: 16px;\n }\n\n .error-state h3 {\n margin: 0 0 8px 0;\n font-size: 20px;\n }\n\n .error-state p {\n margin: 0 0 24px 0;\n color: rgba(255, 255, 255, 0.7);\n }\n\n .error-actions {\n display: flex;\n gap: 12px;\n }\n\n .btn-retry,\n .btn-skip {\n padding: 12px 24px;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n border: none;\n transition: all 0.2s;\n }\n\n .btn-retry {\n background: #7C3AED;\n color: #fff;\n }\n\n .btn-retry:hover {\n background: #6D28D9;\n }\n\n .btn-skip {\n background: transparent;\n color: #fff;\n border: 1px solid rgba(255, 255, 255, 0.3);\n }\n\n .btn-skip:hover {\n background: rgba(255, 255, 255, 0.1);\n }\n\n .skip-warning {\n font-size: 12px;\n color: #F59E0B;\n margin-top: 16px;\n }\n\n .camera-view {\n position: relative;\n width: 100%;\n height: 100%;\n }\n\n .video-feed {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n transform: scaleX(-1);\n }\n\n .hidden-canvas {\n display: none;\n }\n\n .face-guide {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n pointer-events: none;\n }\n\n .guide-svg {\n width: 80%;\n max-width: 300px;\n height: auto;\n }\n\n .face-oval {\n transition: stroke 0.3s ease, stroke-width 0.3s ease, filter 0.3s ease;\n }\n\n .face-oval--searching {\n animation: face-guide-pulse 1.5s ease-in-out infinite;\n }\n\n .face-oval--positioned {\n filter: drop-shadow(0 0 30px var(--liveness-glow-positioned));\n }\n\n .face-oval--verifying {\n filter: drop-shadow(0 0 30px var(--liveness-glow-verifying));\n }\n\n .face-oval--success {\n filter: drop-shadow(0 0 30px var(--liveness-glow-success));\n }\n\n /* Pulsing animation for searching state */\n @keyframes face-guide-pulse {\n 0%, 100% {\n filter: drop-shadow(0 0 20px var(--liveness-glow-detecting));\n }\n 50% {\n filter: drop-shadow(0 0 40px var(--liveness-glow-detecting));\n }\n }\n\n .directional-hint {\n position: absolute;\n top: 30%;\n left: 50%;\n transform: translateX(-50%);\n background: rgba(15, 23, 42, 0.95);\n color: #fff;\n padding: 12px 20px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 16px;\n font-weight: 500;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5);\n animation: hintFadeIn 0.3s ease-out;\n }\n\n .hint-arrow {\n font-size: 20px;\n animation: hintArrowBounce 1s ease-in-out infinite;\n }\n\n @keyframes hintFadeIn {\n from {\n opacity: 0;\n transform: translateX(-50%) translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateX(-50%) translateY(0);\n }\n }\n\n @keyframes hintArrowBounce {\n 0%, 100% {\n transform: translateX(0);\n }\n 50% {\n transform: translateX(4px);\n }\n }\n\n .progress-ring {\n position: absolute;\n width: 120px;\n height: 120px;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n\n .progress-circle {\n transition: stroke-dasharray 0.1s linear;\n }\n\n .success-overlay {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n\n .success-ring {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 100px;\n height: 100px;\n border: 3px solid var(--liveness-success);\n border-radius: 50%;\n animation: success-ring-expand 0.8s ease-out forwards;\n }\n\n .success-icon {\n position: relative;\n width: 80px;\n height: 80px;\n background: var(--liveness-success);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 40px;\n color: #fff;\n box-shadow: 0 0 40px var(--liveness-glow-success);\n animation: success-burst 0.6s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;\n }\n\n @keyframes success-burst {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n 50% {\n transform: scale(1.2);\n opacity: 1;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n }\n\n @keyframes success-ring-expand {\n 0% {\n transform: translate(-50%, -50%) scale(0.8);\n opacity: 1;\n }\n 100% {\n transform: translate(-50%, -50%) scale(2);\n opacity: 0;\n }\n }\n\n .instructions-overlay {\n position: absolute;\n bottom: 120px;\n left: 0;\n right: 0;\n text-align: center;\n padding: 0 24px;\n }\n\n .instruction-text {\n color: #fff;\n font-size: 18px;\n font-weight: 500;\n text-shadow: 0 2px 8px rgba(0, 0, 0, 0.8);\n margin: 0;\n }\n\n .btn-skip-corner {\n position: absolute;\n bottom: 40px;\n right: 24px;\n padding: 8px 16px;\n background: rgba(0, 0, 0, 0.5);\n color: rgba(255, 255, 255, 0.7);\n border: 1px solid rgba(255, 255, 255, 0.2);\n border-radius: 6px;\n font-size: 14px;\n cursor: pointer;\n transition: all 0.2s;\n }\n\n .btn-skip-corner:hover {\n background: rgba(0, 0, 0, 0.7);\n color: #fff;\n }\n</style>\n","<script lang=\"ts\">\n /**\n * Selfie Capture Page with AWS Rekognition Face Liveness\n *\n * Architecture: ADR-R003 Cross-Region Liveness\n * - Uses LivenessCheck component for AWS Rekognition integration\n * - Stores livenessSessionId for backend validation\n * - Falls back to simple capture if liveness is skipped\n */\n import { onMount, onDestroy } from 'svelte';\n import { T } from '../contexts/translation';\n import { configuration } from '../contexts/configuration';\n import { currentStepId, selfieUri } from '../contexts/app-state/stores';\n import { goToPrevStep, goToNextStep } from '../contexts/navigation';\n import { getLayoutStyles, getStepConfiguration, uiPack } from '../ui-packs';\n import { Elements } from '../contexts/configuration/types';\n import { IconButton, IconCloseButton, Title, Paragraph, Loader } from '../atoms';\n import { FaceOval } from '../atoms/FaceOval';\n import {\n EActionNames,\n EVerificationStatuses,\n sendButtonClickEvent,\n } from '../utils/event-service';\n import { appState } from '../contexts/app-state';\n import { compressImage } from '../services/image-compression';\n import {\n setPendingSelfieMetadata,\n setLivenessSession,\n } from '../contexts/app-state/stores';\n import LivenessCheck from '../components/LivenessCheck.svelte';\n\n export let stepId: string;\n\n let showLiveness = true;\n let livenessSkipped = false;\n let livenessError: { message: string; code: string } | null = null;\n let showSkipWarning = false;\n let fallbackVideoElement: HTMLVideoElement;\n let fallbackCanvasElement: HTMLCanvasElement;\n let fallbackStream: MediaStream | undefined;\n let fallbackCameraError: string | null = null;\n let fallbackCameraInitializing = false;\n let isCapturing = false;\n\n const step = getStepConfiguration($configuration, $uiPack, stepId);\n const style = getLayoutStyles($configuration, $uiPack, step);\n const stepNamespace = `${step.namespace}.selfie`;\n\n /**\n * Handle successful liveness check\n */\n function handleLivenessComplete(event: CustomEvent<{ sessionId: string; referenceImage: string }>) {\n const { sessionId, referenceImage } = event.detail;\n\n // Store the reference image as selfie\n $selfieUri = referenceImage;\n\n // Store complete metadata for event emission\n setPendingSelfieMetadata({\n fileName: `selfie_liveness_${Date.now()}.jpg`,\n originalSize: Math.round(referenceImage.length * 0.75),\n compressedSize: Math.round(referenceImage.length * 0.75),\n compressionRatio: 1,\n captureTime: Date.now(),\n cameraResolution: '1280x720',\n livenessChecks: {\n blink: { passed: true, attempts: 1 },\n turnLeft: { passed: true, attempts: 1 },\n turnRight: { passed: true, attempts: 1 },\n },\n totalAttempts: 1,\n faceQuality: {\n centered: true,\n distance: 'optimal',\n message: 'Liveness verified',\n },\n });\n\n goToNextStep(currentStepId, $configuration, $currentStepId);\n }\n\n function handleLivenessError(event: CustomEvent<{ message: string; code: string }>) {\n console.error('[SelfieCapture] Liveness error:', event.detail);\n livenessError = event.detail;\n }\n\n function handleRetry() {\n livenessError = null;\n // LivenessCheck component will restart automatically when error is cleared\n }\n\n function handleLivenessSkip() {\n showSkipWarning = true;\n }\n\n function confirmSkip() {\n console.warn('[SelfieCapture] Liveness skipped - manual review required');\n livenessSkipped = true;\n showLiveness = false;\n showSkipWarning = false;\n\n setLivenessSession({\n sessionId: 'skipped',\n region: 'eu-west-1',\n createdAt: Date.now(),\n status: 'skipped',\n });\n\n initializeFallbackCamera();\n }\n\n function cancelSkip() {\n showSkipWarning = false;\n }\n\n async function initializeFallbackCamera() {\n fallbackCameraInitializing = true;\n fallbackCameraError = null;\n\n try {\n fallbackStream = await navigator.mediaDevices.getUserMedia({\n video: { facingMode: 'user', width: { ideal: 1280 }, height: { ideal: 720 } },\n });\n\n if (fallbackVideoElement) {\n fallbackVideoElement.srcObject = fallbackStream;\n await fallbackVideoElement.play();\n }\n } catch (error) {\n fallbackCameraError = error instanceof Error ? error.message : 'Camera access denied';\n } finally {\n fallbackCameraInitializing = false;\n }\n }\n\n async function handleFallbackCapture() {\n if (!fallbackVideoElement || !fallbackCanvasElement || isCapturing) return;\n isCapturing = true;\n const captureStartTime = Date.now();\n\n try {\n const context = fallbackCanvasElement.getContext('2d');\n if (!context) throw new Error('Canvas context not available');\n\n fallbackCanvasElement.width = fallbackVideoElement.videoWidth;\n fallbackCanvasElement.height = fallbackVideoElement.videoHeight;\n context.translate(fallbackCanvasElement.width, 0);\n context.scale(-1, 1);\n context.drawImage(fallbackVideoElement, 0, 0);\n\n const blob = await new Promise<Blob>((resolve, reject) => {\n fallbackCanvasElement.toBlob(\n blob => blob ? resolve(blob) : reject(new Error('Failed to create blob')),\n 'image/jpeg',\n 0.92,\n );\n });\n\n const compressed = await compressImage(blob, {\n quality: 0.85,\n maxWidth: 1920,\n maxHeight: 1080,\n });\n\n const reader = new FileReader();\n const dataUrl = await new Promise<string>((resolve, reject) => {\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = reject;\n reader.readAsDataURL(compressed.blob);\n });\n\n $selfieUri = dataUrl;\n\n setPendingSelfieMetadata({\n fileName: `selfie_fallback_${Date.now()}.jpg`,\n originalSize: blob.size,\n compressedSize: compressed.blob.size,\n compressionRatio: compressed.compressionRatio,\n captureTime: Date.now() - captureStartTime,\n cameraResolution: `${fallbackVideoElement.videoWidth}x${fallbackVideoElement.videoHeight}`,\n livenessChecks: {\n blink: { passed: false, attempts: 0 },\n turnLeft: { passed: false, attempts: 0 },\n turnRight: { passed: false, attempts: 0 },\n },\n totalAttempts: 0,\n faceQuality: {\n centered: true,\n distance: 'optimal',\n message: 'Liveness skipped - manual review required',\n },\n });\n\n goToNextStep(currentStepId, $configuration, $currentStepId);\n } catch (error) {\n fallbackCameraError = error instanceof Error ? error.message : 'Capture failed';\n } finally {\n isCapturing = false;\n }\n }\n\n function handleBack() {\n goToPrevStep(currentStepId, $configuration, $currentStepId);\n }\n\n function handleClose() {\n sendButtonClickEvent(\n EActionNames.CLOSE,\n { status: EVerificationStatuses.DATA_COLLECTION },\n $appState,\n true,\n );\n }\n\n onDestroy(() => {\n if (fallbackStream) {\n fallbackStream.getTracks().forEach(track => track.stop());\n }\n });\n</script>\n\n<div class=\"selfie-page\" {style}>\n {#if showSkipWarning}\n <div class=\"modal-overlay\" data-testid=\"selfie-skip-modal\">\n <div class=\"modal-content\">\n <h3>Skip Liveness Check?</h3>\n <p>Skipping the liveness check means:</p>\n <ul>\n <li>Your verification will require manual review</li>\n <li>Processing may take up to 24 hours</li>\n <li>Additional documentation may be requested</li>\n </ul>\n <div class=\"modal-actions\">\n <button class=\"btn-primary\" on:click={cancelSkip}>Go Back to Liveness</button>\n <button class=\"btn-secondary\" on:click={confirmSkip}>Skip Anyway</button>\n </div>\n </div>\n </div>\n {/if}\n\n {#if showLiveness}\n <div class=\"header-overlay\">\n {#each step.elements as element}\n {#if element.type === Elements.IconButton}\n <IconButton\n configuration={{...element.props, style: {...element.props.style, background: 'rgba(0,0,0,0.3)'}}}\n on:click={handleBack}\n />\n {/if}\n {#if element.type === Elements.IconCloseButton}\n <IconCloseButton\n configuration={{...element.props, style: {...element.props.style, background: 'rgba(0,0,0,0.3)'}}}\n on:click={handleClose}\n />\n {/if}\n {/each}\n </div>\n\n {#if livenessError}\n <div class=\"error-overlay\">\n <div class=\"error-card\">\n <div class=\"error-icon\">⚠️</div>\n <h3 class=\"error-title\">Verification Failed</h3>\n <p class=\"error-message\">{livenessError.message}</p>\n <div class=\"error-actions\">\n <button class=\"btn-retry\" on:click={handleRetry}>Try Again</button>\n <button class=\"btn-skip\" on:click={handleLivenessSkip}>Skip for Now</button>\n </div>\n </div>\n </div>\n {/if}\n\n <LivenessCheck\n on:complete={handleLivenessComplete}\n on:error={handleLivenessError}\n on:skip={handleLivenessSkip}\n />\n {:else}\n <div class=\"fallback-capture\" data-testid=\"selfie-fallback-camera\">\n {#each step.elements as element}\n {#if element.type === Elements.IconButton}\n <IconButton configuration={element.props} on:click={handleBack} />\n {/if}\n {#if element.type === Elements.IconCloseButton}\n <IconCloseButton configuration={element.props} on:click={handleClose} />\n {/if}\n {/each}\n\n <div class=\"header\">\n <Title configuration={step.elements.find(e => e.type === Elements.Title)?.props || {}}>\n <T key={'title'} namespace={stepNamespace} />\n </Title>\n <Paragraph configuration={step.elements.find(e => e.type === Elements.Paragraph)?.props || {}}>\n <T key={'description'} namespace={stepNamespace} />\n </Paragraph>\n </div>\n\n {#if fallbackCameraError}\n <div class=\"error-container\">\n <p class=\"error-message\">{fallbackCameraError}</p>\n <button class=\"btn-retry-fallback\" on:click={initializeFallbackCamera}>Try Again</button>\n </div>\n {:else}\n <div class=\"video-container\">\n {#if !fallbackStream}\n <Loader />\n {:else}\n <video bind:this={fallbackVideoElement} autoplay playsinline class=\"video\" aria-label=\"Selfie camera preview\">\n <track kind=\"captions\" />\n </video>\n <FaceOval />\n {/if}\n </div>\n\n <div class=\"warning-banner\">\n <span class=\"warning-icon\">⚠️</span>\n <span>Liveness skipped - Your verification will require manual review</span>\n </div>\n\n <button class=\"btn-capture\" on:click={handleFallbackCapture} disabled={!fallbackStream || isCapturing} data-testid=\"selfie-capture-button\">\n {isCapturing ? 'Processing...' : 'Capture Selfie'}\n </button>\n {/if}\n\n <canvas bind:this={fallbackCanvasElement} style=\"display: none;\"></canvas>\n </div>\n {/if}\n</div>\n\n<style>\n .selfie-page {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: #000;\n }\n\n .header-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n padding: 16px;\n padding-top: max(16px, env(safe-area-inset-top));\n z-index: 200;\n display: flex;\n justify-content: space-between;\n }\n\n .error-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.9);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 300;\n }\n\n .error-card {\n background: #1E293B;\n border-radius: 16px;\n padding: 32px 24px;\n max-width: 360px;\n width: 90%;\n text-align: center;\n }\n\n .error-icon {\n font-size: 48px;\n margin-bottom: 16px;\n }\n\n .error-title {\n color: #F1F5F9;\n font-size: 20px;\n font-weight: 600;\n margin: 0 0 8px 0;\n }\n\n .error-message {\n color: #CBD5E1;\n font-size: 14px;\n margin: 0 0 24px 0;\n }\n\n .error-actions {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .btn-retry {\n padding: 14px 24px;\n border-radius: 8px;\n font-size: 16px;\n font-weight: 600;\n background: #7C3AED;\n color: #fff;\n border: none;\n cursor: pointer;\n }\n\n .btn-retry:hover {\n background: #6D28D9;\n }\n\n .btn-skip {\n padding: 14px 24px;\n border-radius: 8px;\n font-size: 16px;\n font-weight: 600;\n background: transparent;\n color: #CBD5E1;\n border: 1px solid rgba(255, 255, 255, 0.3);\n cursor: pointer;\n }\n\n .btn-skip:hover {\n background: rgba(255, 255, 255, 0.1);\n }\n\n .modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.8);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 400;\n }\n\n .modal-content {\n background: #0F172A;\n border-radius: 16px;\n padding: 32px 24px;\n max-width: 400px;\n width: 90%;\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);\n }\n\n .modal-content h3 {\n color: #F1F5F9;\n font-size: 20px;\n font-weight: 600;\n margin: 0 0 12px 0;\n }\n\n .modal-content p {\n color: #CBD5E1;\n font-size: 14px;\n margin: 0 0 16px 0;\n }\n\n .modal-content ul {\n color: #CBD5E1;\n font-size: 14px;\n margin: 0 0 24px 16px;\n }\n\n .modal-actions {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .btn-primary {\n padding: 14px 24px;\n border-radius: 8px;\n font-size: 16px;\n font-weight: 600;\n background: #7C3AED;\n color: #fff;\n border: none;\n cursor: pointer;\n }\n\n .btn-primary:hover {\n background: #6D28D9;\n }\n\n .btn-secondary {\n padding: 14px 24px;\n border-radius: 8px;\n font-size: 16px;\n font-weight: 600;\n background: transparent;\n color: #CBD5E1;\n border: 1px solid rgba(255, 255, 255, 0.3);\n cursor: pointer;\n }\n\n .btn-secondary:hover {\n background: rgba(255, 255, 255, 0.1);\n }\n\n .fallback-capture {\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 24px;\n background: var(--background, #fff);\n }\n\n .header {\n text-align: center;\n margin-bottom: 16px;\n }\n\n .video-container {\n position: relative;\n width: 100%;\n max-width: 400px;\n aspect-ratio: 3 / 4;\n border-radius: 16px;\n overflow: hidden;\n background: #000;\n }\n\n .video {\n width: 100%;\n height: 100%;\n object-fit: cover;\n transform: scaleX(-1);\n }\n\n .warning-banner {\n display: flex;\n align-items: center;\n gap: 8px;\n background: #fef3c7;\n color: #92400e;\n padding: 12px 16px;\n border-radius: 8px;\n margin: 16px 0;\n font-size: 14px;\n max-width: 400px;\n width: 100%;\n }\n\n .warning-icon {\n font-size: 16px;\n }\n\n .btn-capture {\n padding: 16px 32px;\n border-radius: 8px;\n font-size: 16px;\n font-weight: 600;\n background: #75aadb;\n color: #fff;\n border: none;\n cursor: pointer;\n transition: all 0.2s;\n min-height: 44px;\n min-width: 200px;\n }\n\n .btn-capture:hover:not(:disabled) {\n background: #5a8fc4;\n }\n\n .btn-capture:disabled {\n background: #d1d5db;\n cursor: not-allowed;\n }\n\n .error-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n padding: 24px;\n }\n\n .error-container .error-message {\n color: #dc2626;\n font-size: 14px;\n }\n\n .btn-retry-fallback {\n padding: 12px 24px;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n background: #ef4444;\n color: #fff;\n border: none;\n cursor: pointer;\n }\n\n .btn-retry-fallback:hover {\n background: #dc2626;\n }\n</style>\n","<script lang=\"ts\">\n import { T } from '../contexts/translation';\n import { Title, IconButton, IconCloseButton } from '../atoms';\n import { configuration } from '../contexts/configuration';\n import { Elements } from '../contexts/configuration/types';\n import { goToPrevStep } from '../contexts/navigation';\n import Paragraph from '../atoms/Paragraph/Paragraph.svelte';\n import NavigationButtons from '../molecules/NavigationButtons/NavigationButtons.svelte';\n import Photo from '../atoms/Photo/Photo.svelte';\n import { selfieUri, currentStepId, appState } from '../contexts/app-state';\n import {\n EActionNames,\n sendButtonClickEvent,\n EVerificationStatuses,\n } from '../utils/event-service';\n import { getLayoutStyles, getStepConfiguration, uiPack } from '../ui-packs';\n import { getFlowConfig } from '../contexts/flows/hooks';\n\n export let stepId;\n\n const step = getStepConfiguration($configuration, $uiPack, stepId);\n const flow = getFlowConfig($configuration);\n const style = getLayoutStyles($configuration, $uiPack, step);\n\n const stepNamespace = step.namespace!;\n\n</script>\n\n<div class=\"container\" {style}>\n {#each step.elements as element}\n {#if element.type === Elements.Photo}\n <Photo src={$selfieUri} configuration={element.props} />\n {/if}\n {#if element.type === Elements.IconButton}\n <IconButton\n configuration={element.props}\n on:click={() => goToPrevStep(currentStepId, $configuration, $currentStepId)}\n />\n {/if}\n {#if element.type === Elements.IconCloseButton && flow.showCloseButton}\n <IconCloseButton\n configuration={element.props}\n on:click={() => {\n sendButtonClickEvent(\n EActionNames.CLOSE,\n { status: EVerificationStatuses.DATA_COLLECTION },\n $appState,\n true,\n );\n }}\n />\n {/if}\n {#if element.type === Elements.Title}\n <Title configuration={element.props}>\n <T key=\"title\" namespace={stepNamespace} />\n </Title>\n {/if}\n {#if element.type === Elements.Paragraph}\n <Paragraph configuration={element.props}>\n <T key=\"description\" namespace={stepNamespace} />\n </Paragraph>\n {/if}\n {/each}\n <NavigationButtons />\n</div>\n\n<style>\n .container {\n padding: var(--padding);\n position: var(--position);\n background: var(--background);\n text-align: center;\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n</style>\n","<script lang=\"ts\">\n import { createEventDispatcher, onMount } from 'svelte';\n import { verificationStatus } from '../contexts/app-state/stores';\n import { Loader } from '../atoms';\n\n const dispatch = createEventDispatcher<{\n complete: { verificationId: string; status: string; referenceNumber?: string };\n retry: void;\n }>();\n\n $: status = $verificationStatus;\n\n // Track if we've already dispatched to prevent duplicate events\n let hasDispatched = false;\n\n $: if (status && ['approved', 'rejected', 'pending_review'].includes(status.status) && !hasDispatched) {\n hasDispatched = true;\n dispatch('complete', {\n verificationId: status.verificationId,\n status: status.status,\n referenceNumber: status.referenceNumber,\n });\n }\n\n function handleRetry() {\n hasDispatched = false; // Reset on retry\n dispatch('retry');\n }\n</script>\n\n<div class=\"verification-result\" data-testid=\"verification-result\">\n {#if !status || status.status === 'processing'}\n <div class=\"result-processing\" data-testid=\"result-processing\">\n <Loader />\n <h2>Processing your verification...</h2>\n <p>This usually takes less than a minute.</p>\n </div>\n\n {:else if status.status === 'approved'}\n <div class=\"result-approved\" data-testid=\"result-approved\">\n <div class=\"success-icon\">✓</div>\n <h2>Verification Approved!</h2>\n <p>Your identity has been verified successfully.</p>\n {#if status.referenceNumber}\n <p class=\"reference\">Reference: <strong>{status.referenceNumber}</strong></p>\n {/if}\n </div>\n\n {:else if status.status === 'rejected'}\n <div class=\"result-rejected\" data-testid=\"result-rejected\">\n <div class=\"error-icon\">✕</div>\n <h2>Verification Failed</h2>\n {#if status.rejectionReason}\n <p class=\"reason\">{status.rejectionReason}</p>\n {:else}\n <p>We couldn't verify your identity. Please try again.</p>\n {/if}\n <button class=\"btn-retry\" on:click={handleRetry} data-testid=\"retry-button\">\n Try Again\n </button>\n </div>\n\n {:else if status.status === 'pending_review'}\n <div class=\"result-pending\" data-testid=\"result-pending\">\n <div class=\"pending-icon\">⏳</div>\n <h2>Under Review</h2>\n <p>Your verification requires manual review.</p>\n <p class=\"timeline\">This typically takes up to 24 hours.</p>\n {#if status.referenceNumber}\n <p class=\"reference\">Reference: <strong>{status.referenceNumber}</strong></p>\n {/if}\n </div>\n {/if}\n</div>\n\n<style>\n .verification-result {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 400px;\n padding: 32px;\n text-align: center;\n }\n\n .result-processing,\n .result-approved,\n .result-rejected,\n .result-pending {\n max-width: 400px;\n }\n\n h2 {\n margin: 16px 0 8px 0;\n font-size: 24px;\n font-weight: 600;\n color: #1a1a1a;\n }\n\n p {\n margin: 8px 0;\n font-size: 16px;\n color: #666;\n line-height: 1.5;\n }\n\n .success-icon,\n .error-icon,\n .pending-icon {\n width: 80px;\n height: 80px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 48px;\n margin: 0 auto 16px;\n }\n\n .success-icon {\n background: #10B981;\n color: #fff;\n }\n\n .error-icon {\n background: #EF4444;\n color: #fff;\n }\n\n .pending-icon {\n background: #F59E0B;\n color: #fff;\n }\n\n .reference {\n margin-top: 16px;\n padding: 12px;\n background: #F3F4F6;\n border-radius: 8px;\n font-size: 14px;\n color: #374151;\n }\n\n .reference strong {\n font-weight: 600;\n color: #1F2937;\n }\n\n .reason {\n color: #DC2626;\n font-weight: 500;\n }\n\n .timeline {\n font-size: 14px;\n color: #9CA3AF;\n }\n\n .btn-retry {\n margin-top: 24px;\n padding: 12px 32px;\n background: #7C3AED;\n color: #fff;\n border: none;\n border-radius: 8px;\n font-size: 16px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.2s;\n }\n\n .btn-retry:hover {\n background: #6D28D9;\n }\n\n .btn-retry:active {\n background: #5B21B6;\n }\n</style>\n","<script lang=\"ts\">\n import { T } from '../contexts/translation';\n import { Title, IconButton, IconCloseButton, Paragraph } from '../atoms';\n import { configuration } from '../contexts/configuration';\n import { Elements } from '../contexts/configuration/types';\n import { goToPrevStep, goToNextStep } from '../contexts/navigation';\n import { documents, selfieUri, currentStepId, selectedDocumentInfo, appState, verificationStatus, clearVerificationStatus, getLivenessSessionId } from '../contexts/app-state/stores';\n import {\n EActionNames,\n sendButtonClickEvent,\n sendFlowCompleteEvent,\n EVerificationStatuses,\n } from '../utils/event-service';\n import { DecisionStatus } from '../contexts/app-state/types';\n import { getLayoutStyles, getStepConfiguration, uiPack } from '../ui-packs';\n import { getFlowConfig } from '../contexts/flows/hooks';\n import { submitVerification } from '../services/api/verification';\n import VerificationResult from '../components/VerificationResult.svelte';\n\n export let stepId;\n\n const step = getStepConfiguration($configuration, $uiPack, stepId);\n const flow = getFlowConfig($configuration);\n const style = getLayoutStyles($configuration, $uiPack, step);\n\n const stepNamespace = step.namespace!;\n\n let isSubmitting = false;\n let submissionError = '';\n let fullScreenImage: string | null = null;\n let showExitConfirmation = false;\n let showResult = false;\n\n // Collect all images for review\n let images: Array<{ label: string; src: string; type: string }> = [];\n\n // Get document images from the documents array\n function getDocumentImage(side: 'front' | 'back'): string | null {\n const docs = $documents;\n if (!Array.isArray(docs) || docs.length === 0) return null;\n\n for (const doc of docs) {\n if (doc.pages) {\n const page = doc.pages.find(p => p.side === side);\n if (page) return page.uri || page.base64 || null;\n }\n }\n return null;\n }\n\n $: {\n images = [];\n\n const frontImage = getDocumentImage('front');\n const backImage = getDocumentImage('back');\n\n // Add document front\n if (frontImage) {\n images.push({\n label: 'documentFront',\n src: frontImage,\n type: 'document-front'\n });\n }\n\n // Add document back (if applicable)\n if (backImage && $selectedDocumentInfo?.backSide !== false) {\n images.push({\n label: 'documentBack',\n src: backImage,\n type: 'document-back'\n });\n }\n\n // Add selfie\n if ($selfieUri) {\n images.push({\n label: 'selfie',\n src: $selfieUri,\n type: 'selfie'\n });\n }\n }\n\n const handleSubmit = async () => {\n isSubmitting = true;\n submissionError = '';\n\n try {\n // Get session ID from window context (safely typed)\n const win = window as unknown as Record<string, unknown>;\n const context = win.__blrn_context as Record<string, unknown> | undefined;\n const endUserInfo = context?.endUserInfo as Record<string, unknown> | undefined;\n const sessionId = (endUserInfo?.id as string) || 'session_' + Date.now();\n\n const frontImage = getDocumentImage('front');\n const backImage = getDocumentImage('back');\n const livenessSessionId = getLivenessSessionId();\n\n // Submit verification to backend\n const result = await submitVerification({\n documentFront: frontImage || '',\n documentBack: backImage,\n selfie: $selfieUri || '',\n documentType: $selectedDocumentInfo?.type || 'omang',\n sessionId,\n livenessSessionId,\n });\n\n // Show verification result component\n showResult = true;\n isSubmitting = false;\n\n // Emit flow complete event with verification details\n sendFlowCompleteEvent({\n status: EVerificationStatuses.COMPLETED,\n idvResult: DecisionStatus.REVIEW,\n verificationId: result.verificationId,\n referenceNumber: result.referenceNumber,\n });\n } catch (error) {\n console.error('Submission failed:', error);\n\n // Determine error type and set appropriate translation key\n if (error instanceof Error) {\n if (error.message.includes('network') || error.message.includes('fetch')) {\n submissionError = 'networkError';\n } else if (error.message.includes('server') || error.message.includes('500')) {\n submissionError = 'serverError';\n } else {\n submissionError = 'submissionFailed';\n }\n } else {\n submissionError = 'submissionFailed';\n }\n isSubmitting = false;\n }\n };\n\n const handleResultComplete = (event: CustomEvent<{ verificationId: string; status: string; referenceNumber?: string }>) => {\n // Navigate to next step (Final) when verification completes\n goToNextStep(currentStepId, $configuration, $currentStepId);\n };\n\n const handleResultRetry = () => {\n // Reset state for retry\n showResult = false;\n clearVerificationStatus();\n };\n\n const handleEdit = (imageType: string) => {\n // Navigate back to specific capture step based on image type\n if (imageType === 'document-front') {\n currentStepId.set('check-document');\n } else if (imageType === 'document-back') {\n currentStepId.set('check-document-photo-back');\n } else if (imageType === 'selfie') {\n currentStepId.set('check-selfie');\n }\n };\n\n const handleImageClick = (src: string) => {\n fullScreenImage = src;\n };\n\n const closeFullScreen = () => {\n fullScreenImage = null;\n };\n\n const handleClose = () => {\n showExitConfirmation = true;\n };\n\n const confirmExit = () => {\n sendButtonClickEvent(\n EActionNames.CLOSE,\n { status: EVerificationStatuses.DATA_COLLECTION },\n $appState,\n true,\n );\n showExitConfirmation = false;\n };\n\n const cancelExit = () => {\n showExitConfirmation = false;\n };\n\n const handleBack = () => {\n goToPrevStep(currentStepId, $configuration, $currentStepId);\n };\n</script>\n\n<div class=\"container\" {style}>\n {#if showResult}\n <VerificationResult\n on:complete={handleResultComplete}\n on:retry={handleResultRetry}\n />\n {:else}\n {#each step.elements as element}\n {#if element.type === Elements.IconButton}\n <IconButton\n configuration={element.props}\n on:click={handleBack}\n />\n {/if}\n {#if element.type === Elements.IconCloseButton && flow.showCloseButton}\n <IconCloseButton\n configuration={element.props}\n on:click={handleClose}\n />\n {/if}\n {#if element.type === Elements.Title}\n <Title configuration={element.props}>\n <T key=\"title\" namespace={stepNamespace} />\n </Title>\n {/if}\n {#if element.type === Elements.Paragraph}\n <Paragraph configuration={element.props}>\n <T key=\"description\" namespace={stepNamespace} />\n </Paragraph>\n {/if}\n {/each}\n\n <div class=\"images-grid\">\n {#each images as image}\n <div class=\"image-card\">\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <button\n type=\"button\"\n class=\"image-wrapper\"\n on:click={() => handleImageClick(image.src)}\n on:keydown={(e) => e.key === 'Enter' && handleImageClick(image.src)}\n aria-label={`View ${image.label} full screen`}\n >\n <img src={image.src} alt={image.label} />\n </button>\n <div class=\"image-footer\">\n <div class=\"image-label\">\n <T key={`labels.${image.label}`} namespace={stepNamespace} />\n </div>\n <button\n class=\"btn-edit\"\n on:click={() => handleEdit(image.type)}\n aria-label={`Edit ${image.label}`}\n >\n <T key=\"buttons.edit\" namespace={stepNamespace} />\n </button>\n </div>\n </div>\n {/each}\n </div>\n\n {#if submissionError}\n <div class=\"error-message\" role=\"alert\" aria-live=\"polite\">\n <p><T key={`errors.${submissionError}`} namespace={stepNamespace} /></p>\n <button on:click={handleSubmit} disabled={isSubmitting} class=\"btn-retry\">\n <T key=\"errors.retry\" namespace={stepNamespace} />\n </button>\n </div>\n {/if}\n\n <button\n class=\"btn-submit\"\n on:click={handleSubmit}\n disabled={isSubmitting || images.length === 0}\n aria-label=\"Submit verification\"\n >\n {#if isSubmitting}\n <T key=\"loading.message\" namespace={stepNamespace} />\n {:else}\n <T key=\"buttons.submit\" namespace={stepNamespace} />\n {/if}\n </button>\n {/if}\n</div>\n\n{#if fullScreenImage}\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <div\n class=\"fullscreen-viewer\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Full screen image viewer\"\n on:click={closeFullScreen}\n on:keydown={(e) => e.key === 'Escape' && closeFullScreen()}\n >\n <button class=\"close-button\" on:click={closeFullScreen} aria-label=\"Close full screen\">\n <T key=\"fullScreen.close\" namespace={stepNamespace} />\n </button>\n <img src={fullScreenImage} alt=\"Full screen view\" />\n </div>\n{/if}\n\n{#if showExitConfirmation}\n <div class=\"confirmation-dialog\">\n <div class=\"dialog-content\">\n <h3><T key=\"confirmation.title\" namespace={stepNamespace} /></h3>\n <p><T key=\"confirmation.message\" namespace={stepNamespace} /></p>\n <div class=\"dialog-buttons\">\n <button on:click={cancelExit}>\n <T key=\"confirmation.cancel\" namespace={stepNamespace} />\n </button>\n <button on:click={confirmExit} class=\"btn-danger\">\n <T key=\"confirmation.confirm\" namespace={stepNamespace} />\n </button>\n </div>\n </div>\n </div>\n{/if}\n\n<style>\n .container {\n padding: var(--padding);\n position: var(--position);\n background: var(--background);\n text-align: center;\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n\n .images-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 16px;\n margin: 24px 0;\n flex-grow: 1;\n overflow-y: auto;\n }\n\n @media (max-width: 768px) {\n .images-grid {\n grid-template-columns: 1fr;\n }\n }\n\n .image-card {\n border: 2px solid #e5e7eb;\n border-radius: 8px;\n overflow: hidden;\n transition: all 0.2s;\n background: #fff;\n display: flex;\n flex-direction: column;\n }\n\n .image-card:hover {\n border-color: #7C3AED;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n }\n\n .image-wrapper {\n cursor: pointer;\n flex-grow: 1;\n background: transparent;\n border: none;\n padding: 0;\n width: 100%;\n }\n\n .image-card img {\n width: 100%;\n height: 200px;\n object-fit: cover;\n display: block;\n }\n\n .image-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px;\n background: #f9fafb;\n border-top: 1px solid #e5e7eb;\n }\n\n .image-label {\n font-size: 14px;\n font-weight: 500;\n color: #374151;\n flex-grow: 1;\n }\n\n .btn-edit {\n padding: 6px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s;\n border: 1px solid #7C3AED;\n background: transparent;\n color: #7C3AED;\n min-height: 32px;\n }\n\n .btn-edit:hover {\n background: rgba(124, 58, 237, 0.1);\n }\n\n .btn-submit {\n width: 100%;\n padding: 14px 24px;\n border-radius: 8px;\n font-size: 16px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s;\n border: none;\n min-height: 48px;\n background: #7C3AED;\n color: #fff;\n margin-top: auto;\n }\n\n .btn-submit:hover:not(:disabled) {\n background: #6D28D9;\n }\n\n .btn-submit:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .error-message {\n background: #fee2e2;\n border: 1px solid #ef4444;\n border-radius: 8px;\n padding: 12px;\n margin: 16px 0;\n color: #991b1b;\n }\n\n .btn-retry {\n margin-top: 8px;\n padding: 8px 16px;\n border-radius: 6px;\n border: none;\n background: #ef4444;\n color: white;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n }\n\n .btn-retry:hover:not(:disabled) {\n background: #dc2626;\n }\n\n .fullscreen-viewer {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.9);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n cursor: pointer;\n }\n\n .fullscreen-viewer img {\n max-width: 90%;\n max-height: 90%;\n object-fit: contain;\n }\n\n .close-button {\n position: absolute;\n top: 20px;\n right: 20px;\n background: rgba(255, 255, 255, 0.9);\n border: none;\n border-radius: 8px;\n padding: 12px 24px;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n z-index: 1001;\n }\n\n .close-button:hover {\n background: white;\n }\n\n .confirmation-dialog {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n }\n\n .dialog-content {\n background: white;\n border-radius: 12px;\n padding: 24px;\n max-width: 400px;\n width: 90%;\n }\n\n .dialog-content h3 {\n margin: 0 0 12px 0;\n font-size: 18px;\n font-weight: 600;\n color: #111827;\n }\n\n .dialog-content p {\n margin: 0 0 20px 0;\n font-size: 14px;\n color: #6b7280;\n }\n\n .dialog-buttons {\n display: flex;\n gap: 12px;\n }\n\n .dialog-buttons button {\n flex: 1;\n padding: 12px;\n border-radius: 8px;\n border: none;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n background: #f3f4f6;\n color: #374151;\n }\n\n .dialog-buttons button:hover {\n background: #e5e7eb;\n }\n\n .btn-danger {\n background: #ef4444 !important;\n color: white !important;\n }\n\n .btn-danger:hover {\n background: #dc2626 !important;\n }\n\n /* Dark theme support */\n @media (prefers-color-scheme: dark) {\n .image-card {\n background: #1f2937;\n border-color: #374151;\n }\n\n .image-footer {\n background: #111827;\n border-top-color: #374151;\n }\n\n .image-label {\n color: #f3f4f6;\n }\n\n .btn-edit {\n color: #A78BFA;\n border-color: #A78BFA;\n }\n\n .btn-edit:hover {\n background: rgba(167, 139, 250, 0.1);\n }\n\n .dialog-content {\n background: #1f2937;\n color: #f3f4f6;\n }\n\n .dialog-content h3 {\n color: #f9fafb;\n }\n\n .dialog-content p {\n color: #d1d5db;\n }\n\n .dialog-buttons button {\n background: #374151;\n color: #f3f4f6;\n }\n\n .dialog-buttons button:hover {\n background: #4b5563;\n }\n\n .error-message {\n background: #7f1d1d;\n border-color: #991b1b;\n color: #fecaca;\n }\n }\n\n /* Accessibility */\n @media (max-width: 576px) {\n .btn-submit {\n font-size: 14px;\n min-height: 44px;\n }\n\n .image-card img {\n height: auto;\n min-height: 150px;\n }\n }\n</style>\n","<script lang=\"ts\">\n import { toast } from '@zerodevx/svelte-toast';\n import { Loader } from '../atoms';\n import { configuration } from '../contexts/configuration';\n import {\n currentParams,\n currentStepId,\n documents,\n selectedDocumentInfo,\n selfieUri,\n } from '../contexts/app-state';\n import type { ISelectedParams, IStoreData } from '../contexts/app-state';\n import { sendVerificationUpdateEvent } from '../utils/event-service';\n import { EVerificationStatuses } from '../utils/event-service/types';\n import type { ISendDocumentsResponse } from '../utils/event-service/types';\n import { onDestroy, onMount } from 'svelte';\n import { t } from '../contexts/translation/hooks';\n import { flowUploadLoader } from '../services/analytics';\n import { getFlowConfig } from '../contexts/flows/hooks';\n import { generateParams, getVerificationStatus, verifyDocuments } from '../services/http';\n import { DecisionStatus } from '../contexts/app-state/types';\n import { preloadStepById } from '../services/preload-service';\n import { getLayoutStyles, getStepConfiguration, uiPack } from '../ui-packs';\n import { submitVerification } from '../services/api/verification';\n flowUploadLoader();\n\n const WAITING_TIME = 1000 * 60 * 3; // 3 minutes\n\n export let stepId;\n\n const step = getStepConfiguration($configuration, $uiPack, stepId);\n const style = getLayoutStyles($configuration, $uiPack, step);\n\n let timeout: ReturnType<typeof setTimeout>;\n let veryficationTimeout: ReturnType<typeof setTimeout>;\n let showText = true;\n let statusMessage = 'This may take a few seconds';\n let progressStage = 0;\n\n const broofa = () => {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = (Math.random() * 16) | 0,\n v = c == 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n };\n\n const endUserId = $configuration.endUserInfo.id || broofa();\n\n // Progress messages to show during verification\n const progressMessages = [\n 'This may take a few seconds',\n 'Uploading your documents...',\n 'Analyzing document...',\n 'Verifying identity...',\n 'Almost done...',\n ];\n\n function updateProgress() {\n if (progressStage < progressMessages.length - 1) {\n progressStage++;\n statusMessage = progressMessages[progressStage];\n }\n }\n\n const checkStatus = async (data: ISendDocumentsResponse) => {\n try {\n const response = await getVerificationStatus(endUserId);\n if (response.status === EVerificationStatuses.PENDING) {\n veryficationTimeout = setTimeout(() => checkStatus(data), 2000);\n return;\n }\n const params = generateParams(response);\n sendVerificationUpdateEvent(response, response.idvResult === DecisionStatus.APPROVED);\n\n showText = false;\n if (\n response.idvResult === DecisionStatus.DECLINED ||\n response.idvResult === DecisionStatus.REVIEW\n ) {\n $currentParams = params;\n await preloadStepById($configuration, configuration, 'decline', $uiPack);\n $currentStepId = 'decline';\n }\n if (response.idvResult === DecisionStatus.RESUBMISSION_REQUESTED) {\n $currentParams = params;\n await preloadStepById($configuration, configuration, 'resubmission', $uiPack);\n $currentStepId = 'resubmission';\n }\n if (response.idvResult === DecisionStatus.APPROVED) {\n $currentParams = params;\n await preloadStepById($configuration, configuration, 'final', $uiPack);\n $currentStepId = 'final';\n }\n } catch (error) {\n toast.push(t('general', 'errorDocumentVerification'));\n veryficationTimeout = setTimeout(() => checkStatus(data), 2000);\n }\n };\n\n const makeRequest = async (data: IStoreData) => {\n // Start progress updates\n const progressInterval = setInterval(updateProgress, 1500);\n\n try {\n // Try the new submitVerification API first\n const sessionId = $configuration.endUserInfo?.id || endUserId;\n\n // Get document data from stores\n const docFront = data.docs?.[0]?.pages?.[0]?.base64 || '';\n const docBack = data.docs?.[0]?.pages?.[1]?.base64 || null;\n\n const result = await submitVerification({\n documentFront: docFront,\n documentBack: docBack,\n selfie: data.selfie || '',\n documentType: data.selectedDocumentInfo?.type || 'omang',\n sessionId,\n });\n\n clearInterval(progressInterval);\n\n // Check if we're in mock mode (verificationId starts with 'ver_')\n const isMockMode = result.verificationId.startsWith('ver_');\n\n if (isMockMode) {\n // In mock mode, simulate a successful verification after a short delay\n statusMessage = \"We're verifying your documents\";\n await new Promise(resolve => setTimeout(resolve, 2000));\n\n showText = false;\n $currentParams = {\n verificationId: result.verificationId,\n referenceNumber: result.referenceNumber,\n } as ISelectedParams;\n await preloadStepById($configuration, configuration, 'final', $uiPack);\n $currentStepId = 'final';\n return;\n }\n\n // Real API mode - check status\n const flowConfig = getFlowConfig($configuration);\n if (flowConfig.syncFlow) {\n checkStatus({ verificationId: result.verificationId, status: 'success' } as ISendDocumentsResponse);\n return;\n }\n\n showText = false;\n await preloadStepById($configuration, configuration, 'final', $uiPack);\n $currentStepId = 'final';\n } catch (error) {\n clearInterval(progressInterval);\n\n // Fallback to legacy verifyDocuments if submitVerification fails\n try {\n const res = await verifyDocuments(data, endUserId, $configuration);\n const flowConfig = getFlowConfig($configuration);\n if (flowConfig.syncFlow) {\n checkStatus(res);\n return;\n }\n showText = false;\n await preloadStepById($configuration, configuration, 'final', $uiPack);\n $currentStepId = 'final';\n } catch (legacyError) {\n toast.push(t('general', 'errorDocuments'));\n console.error('Error sending documents', legacyError);\n $currentParams = { message: legacyError } as ISelectedParams;\n await preloadStepById($configuration, configuration, 'error', $uiPack);\n $currentStepId = 'error';\n }\n }\n };\n\n onMount(() => {\n const data: IStoreData = {\n docs: $documents,\n selectedDocumentInfo: $selectedDocumentInfo,\n selfie: $selfieUri,\n };\n makeRequest(data);\n timeout = setTimeout(async () => {\n showText = false;\n await preloadStepById($configuration, configuration, 'decline', $uiPack);\n $currentStepId = 'decline';\n }, WAITING_TIME);\n });\n\n onDestroy(() => {\n if (timeout) {\n clearTimeout(timeout);\n }\n if (veryficationTimeout) {\n clearTimeout(veryficationTimeout);\n }\n });\n</script>\n\n<div class=\"container\" {style}>\n {#if showText}\n <div class=\"text-container\">\n <p class=\"status-message\">{statusMessage}</p>\n </div>\n {/if}\n <Loader />\n</div>\n\n<style>\n .container {\n padding: var(--padding);\n position: relative;\n background: var(--background);\n text-align: center;\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n }\n\n .text-container {\n position: absolute;\n top: 40%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: 100;\n width: 80%;\n max-width: 300px;\n }\n\n .status-message {\n font-size: 16px;\n font-weight: 500;\n color: #1E293B;\n margin: 0;\n text-align: center;\n }\n</style>\n","<script lang=\"ts\">\n import { configuration as globalConfiguration } from '../../contexts/configuration';\n import type { ICSSProperties, IElementProps } from '../../contexts/configuration';\n import { getComponentStyles, uiPack } from '../../ui-packs';\n\n export let configuration: IElementProps;\n\n const styleProps = configuration.style as ICSSProperties;\n\n const style = getComponentStyles($uiPack.errorText, $globalConfiguration.errorText, styleProps);\n</script>\n\n<div {style}>\n <slot />\n</div>\n\n<style>\n div {\n background: var(--background);\n border: var(--border);\n color: var(--color);\n border-radius: var(--border-radius);\n padding: var(--padding);\n margin: var(--margin);\n font-size: var(--font-size);\n text-align: var(--text-align);\n }\n</style>\n","<script lang=\"ts\">\n import { T } from '../contexts/translation';\n import { Image, Button, Title, IconCloseButton } from '../atoms';\n import { configuration, Steps } from '../contexts/configuration';\n import { currentStepId, currentParams, appState } from '../contexts/app-state';\n import { Elements } from '../contexts/configuration/types';\n import ErrorText from '../atoms/ErrorText/ErrorText.svelte';\n import { flowResubmission } from '../services/analytics';\n import { onDestroy } from 'svelte';\n import {\n EActionNames,\n sendButtonClickEvent,\n EVerificationStatuses,\n } from '../utils/event-service';\n import { getLayoutStyles, getStepConfiguration, uiPack } from '../ui-packs';\n import { getFlowConfig } from '../contexts/flows/hooks';\n\n export let stepId;\n\n const step = getStepConfiguration($configuration, $uiPack, stepId);\n const flow = getFlowConfig($configuration);\n const style = getLayoutStyles($configuration, $uiPack, step);\n\n const stepNamespace = step.namespace!;\n const hasDocumentSelection = !!($configuration.steps && $configuration.steps[Steps.DocumentSelection]) && !!$uiPack.steps[Steps.DocumentSelection];\n\n\n const reasonCode = $currentParams ? $currentParams.reasonCode : null;\n\n const handleNavigate = () => {\n if (hasDocumentSelection) {\n $currentStepId = 'select-document';\n return;\n }\n $currentStepId = 'document-start';\n };\n\n onDestroy(() => {\n $currentParams = null;\n });\n\n flowResubmission();\n</script>\n\n<div class=\"container\" {style}>\n {#each step.elements as element}\n {#if element.type === Elements.Image}\n <Image configuration={element.props} />\n {/if}\n {#if element.type === Elements.IconCloseButton && flow.showCloseButton}\n <IconCloseButton\n configuration={element.props}\n on:click={() => {\n sendButtonClickEvent(\n EActionNames.CLOSE,\n { status: EVerificationStatuses.DATA_COLLECTION },\n $appState,\n true,\n );\n }}\n />\n {/if}\n {#if element.type === Elements.Title}\n <Title configuration={element.props}>\n <T key={`${reasonCode}-title`} namespace={stepNamespace} />\n </Title>\n {/if}\n {#if element.type === Elements.ErrorText}\n <ErrorText configuration={element.props}>\n <T key={`${reasonCode}-description`} namespace={stepNamespace} />\n </ErrorText>\n {/if}\n {#if element.type === Elements.Button}\n <Button configuration={element.props} on:click={handleNavigate}>\n <T key={`${reasonCode}-button`} namespace={stepNamespace} />\n </Button>\n {/if}\n {/each}\n</div>\n\n<style>\n .container {\n padding: var(--padding);\n position: relative;\n background: var(--background);\n text-align: center;\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n</style>\n","<script lang=\"ts\">\n import { onDestroy } from 'svelte';\n import { T } from '../contexts/translation';\n import { Image, Button, Title, IconCloseButton } from '../atoms';\n import { configuration } from '../contexts/configuration';\n import { Elements } from '../contexts/configuration/types';\n import ErrorText from '../atoms/ErrorText/ErrorText.svelte';\n import {\n EActionNames,\n sendButtonClickEvent,\n sendFlowCompleteEvent,\n EVerificationStatuses,\n } from '../utils/event-service';\n import { flowDeclined } from '../services/analytics';\n import { currentParams, appState } from '../contexts/app-state';\n import { DecisionStatus } from '../contexts/app-state/types';\n import { getLayoutStyles, getStepConfiguration, uiPack } from '../ui-packs';\n import { getFlowConfig } from '../contexts/flows/hooks';\n\n export let stepId;\n\n const step = getStepConfiguration($configuration, $uiPack, stepId);\n const flow = getFlowConfig($configuration);\n const style = getLayoutStyles($configuration, $uiPack, step);\n\n const stepNamespace = step.namespace!;\n\n const handleClose = () => {\n sendFlowCompleteEvent({\n status: EVerificationStatuses.COMPLETED,\n idvResult: DecisionStatus.DECLINED,\n });\n };\n\n onDestroy(() => {\n $currentParams = null;\n });\n\n flowDeclined();\n</script>\n\n<div class=\"container\" {style}>\n {#each step.elements as element}\n {#if element.type === Elements.IconCloseButton && flow.showCloseButton}\n <IconCloseButton\n configuration={element.props}\n on:click={() => {\n sendButtonClickEvent(\n EActionNames.CLOSE,\n { status: EVerificationStatuses.DATA_COLLECTION },\n $appState,\n true,\n );\n }}\n />\n {/if}\n {#if element.type === Elements.Image}\n <Image configuration={element.props} />\n {/if}\n {#if element.type === Elements.Title}\n <Title configuration={element.props}>\n <T key=\"title\" namespace={stepNamespace} />\n </Title>\n {/if}\n {#if element.type === Elements.ErrorText}\n <ErrorText configuration={element.props}>\n <T key=\"description\" namespace={stepNamespace} />\n </ErrorText>\n {/if}\n {#if element.type === Elements.Button}\n <Button configuration={element.props} on:click={handleClose}>\n <T key=\"button\" namespace={stepNamespace} />\n </Button>\n {/if}\n {/each}\n</div>\n\n<style>\n .container {\n padding: var(--padding);\n position: relative;\n background: var(--background);\n text-align: center;\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n</style>\n","<script lang=\"ts\">\n import { T } from '../contexts/translation';\n import { onDestroy } from 'svelte';\n import { Image, Button, Title, IconCloseButton } from '../atoms';\n import { configuration } from '../contexts/configuration';\n import { appState, currentParams } from '../contexts/app-state';\n import { Elements } from '../contexts/configuration/types';\n import ErrorText from '../atoms/ErrorText/ErrorText.svelte';\n import {\n EActionNames,\n sendButtonClickEvent,\n sendFlowCompleteEvent,\n EVerificationStatuses,\n } from '../utils/event-service';\n import { flowError } from '../services/analytics';\n import { DecisionStatus } from '../contexts/app-state/types';\n import { getLayoutStyles, getStepConfiguration, uiPack } from '../ui-packs';\n import { getFlowConfig } from '../contexts/flows/hooks';\n\n export let stepId;\n\n const step = getStepConfiguration($configuration, $uiPack, stepId);\n const flow = getFlowConfig($configuration);\n const style = getLayoutStyles($configuration, $uiPack, step);\n\n const stepNamespace = step.namespace!;\n const message = $currentParams ? $currentParams.message : '';\n\n const handleClose = () => {\n sendFlowCompleteEvent({\n status: EVerificationStatuses.ERROR,\n idvResult: DecisionStatus.DECLINED,\n });\n };\n\n flowError();\n\n onDestroy(() => {\n $currentParams = null;\n });\n</script>\n\n<div class=\"container\" {style}>\n {#each step.elements as element}\n {#if element.type === Elements.Image}\n <Image configuration={element.props} />\n {/if}\n {#if element.type === Elements.IconCloseButton && flow.showCloseButton}\n <IconCloseButton\n configuration={element.props}\n on:click={() => {\n sendButtonClickEvent(\n EActionNames.CLOSE,\n { status: EVerificationStatuses.DATA_COLLECTION },\n $appState,\n true,\n );\n }}\n />\n {/if}\n {#if element.type === Elements.Title}\n <Title configuration={element.props}>\n <T key=\"title\" namespace={stepNamespace} />\n </Title>\n {/if}\n {#if element.type === Elements.ErrorText}\n <ErrorText configuration={element.props}>\n {#if message}\n {message}\n {:else}\n <T key=\"description\" namespace={stepNamespace} />\n {/if}\n </ErrorText>\n {/if}\n {#if element.type === Elements.Button}\n <Button configuration={element.props} on:click={handleClose}>\n <T key=\"button\" namespace={stepNamespace} />\n </Button>\n {/if}\n {/each}\n</div>\n\n<style>\n .container {\n padding: var(--padding);\n position: relative;\n background: var(--background);\n text-align: center;\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n</style>\n","/**\n * Branding Store - Svelte Store Pattern\n * Story 9.2: White-Label Configuration\n */\n\nimport { writable, get } from 'svelte/store';\n\ninterface BrandingConfig {\n logoUrl?: string;\n primaryColor: string;\n fontFamily: string;\n backgroundColor: string;\n}\n\nconst defaultBranding: BrandingConfig = {\n primaryColor: '#7C3AED', // Ultraviolet - AuthBridge brand\n fontFamily: \"'Avenir', -apple-system, BlinkMacSystemFont, sans-serif\",\n backgroundColor: '#0A0F1A', // Obsidian - Dark theme\n};\n\n// Svelte writable store\nconst brandingStore = writable<BrandingConfig>(defaultBranding);\n\n/**\n * Branding store with Svelte store pattern\n * Provides reactive branding configuration and CSS variable injection\n */\nexport const branding = {\n /**\n * Get current branding configuration (reactive)\n */\n get current() {\n return get(brandingStore);\n },\n\n /**\n * Subscribe to branding changes\n */\n subscribe: brandingStore.subscribe,\n\n /**\n * Update branding configuration and inject CSS variables\n */\n set(config: Partial<BrandingConfig>) {\n const merged = { ...defaultBranding, ...config };\n brandingStore.set(merged);\n\n // Inject CSS variables into document root\n if (typeof document !== 'undefined') {\n document.documentElement.style.setProperty('--ab-primary-color', merged.primaryColor);\n document.documentElement.style.setProperty('--ab-font-family', merged.fontFamily);\n document.documentElement.style.setProperty('--ab-bg-color', merged.backgroundColor);\n\n // Derived hover color (darker shade)\n const hoverColor = darkenColor(merged.primaryColor, 10);\n document.documentElement.style.setProperty('--ab-primary-hover', hoverColor);\n }\n },\n\n /**\n * Reset to default branding\n */\n reset() {\n this.set(defaultBranding);\n }\n};\n\n/**\n * Darken a hex color by a percentage\n */\nfunction darkenColor(hex: string, percent: number): string {\n // Remove # if present\n const color = hex.replace('#', '');\n\n // Parse RGB\n const r = parseInt(color.substring(0, 2), 16);\n const g = parseInt(color.substring(2, 4), 16);\n const b = parseInt(color.substring(4, 6), 16);\n\n // Darken\n const factor = 1 - percent / 100;\n const newR = Math.round(r * factor);\n const newG = Math.round(g * factor);\n const newB = Math.round(b * factor);\n\n // Convert back to hex\n return `#${newR.toString(16).padStart(2, '0')}${newG.toString(16).padStart(2, '0')}${newB.toString(16).padStart(2, '0')}`;\n}\n","import { Steps } from '../configuration';\nimport {\n Welcome,\n DocumentSelection,\n DocumentStart,\n DocumentPhoto,\n DocumentUpload,\n CheckDocument,\n DocumentPhotoBack,\n CheckDocumentPhotoBack,\n SelfieStart,\n SelfieCapture,\n CheckSelfie,\n ReviewSubmit,\n Final,\n DocumentPhotoBackStart,\n Loading,\n Resubmission,\n Decline,\n ErrorPage,\n} from '../../pages';\n\nexport const steps = [\n { name: Steps.Welcome, component: Welcome },\n { name: Steps.DocumentSelection, component: DocumentSelection },\n { name: Steps.DocumentStart, component: DocumentStart },\n { name: Steps.DocumentPhoto, component: DocumentPhoto },\n { name: Steps.DocumentUpload, component: DocumentUpload },\n { name: Steps.CheckDocument, component: CheckDocument },\n {\n name: Steps.DocumentPhotoBackStart,\n component: DocumentPhotoBackStart,\n type: 'back-side',\n },\n {\n name: Steps.DocumentPhotoBack,\n component: DocumentPhotoBack,\n type: 'back-side',\n },\n {\n name: Steps.CheckDocumentPhotoBack,\n component: CheckDocumentPhotoBack,\n type: 'back-side',\n },\n { name: Steps.SelfieStart, component: SelfieStart },\n { name: Steps.Selfie, component: SelfieCapture },\n { name: Steps.CheckSelfie, component: CheckSelfie },\n { name: Steps.ReviewSubmit, component: ReviewSubmit },\n { name: Steps.Loading, component: Loading },\n {\n name: Steps.Resubmission,\n component: Resubmission,\n type: 'no-flow-part',\n },\n { name: Steps.Decline, component: Decline, type: 'no-flow-part' },\n { name: Steps.Error, component: ErrorPage, type: 'no-flow-part' },\n { name: Steps.Final, component: Final, type: 'no-flow-part' },\n];\n","import type { IAppConfiguration } from '../configuration';\nimport { steps } from './constants';\nimport { getFlowOrders } from '../flows/hooks';\nimport type { Writable } from 'svelte/store';\n\nconst filterOutByType = (flowIds: string[], configuration: IAppConfiguration, type?: string) => {\n if (!type) return flowIds;\n return flowIds.filter(id => {\n const stepConfiguration = configuration.steps?.[id];\n if (!stepConfiguration) return false;\n const step = steps.find(s => s.name === stepConfiguration.name);\n return step?.type !== type;\n });\n};\n\nexport const getNextStepId = (\n globalConfiguration: IAppConfiguration,\n currentStepId: string,\n skipType?: string,\n) => {\n const stepsOrder = getFlowOrders(globalConfiguration) as string[];\n const filteredFlows = filterOutByType(stepsOrder, globalConfiguration, skipType);\n const currentFlowIndex = filteredFlows.findIndex(i => i === currentStepId);\n if (currentFlowIndex === filteredFlows.length) {\n throw Error(\"Next step doesn't exist\");\n }\n return filteredFlows[currentFlowIndex + 1];\n};\n\nexport const goToNextStep = (\n currentStepIdStore: Writable<string>,\n globalConfiguration: IAppConfiguration,\n currentStepId: string,\n skipType?: string,\n) => {\n const stepsOrder = getFlowOrders(globalConfiguration);\n\n if (stepsOrder instanceof Error) {\n console.error('[Navigation] Error getting flow orders:', stepsOrder.message);\n return;\n }\n\n const nextStepId = getNextStepId(globalConfiguration, currentStepId, skipType);\n currentStepIdStore.set(nextStepId);\n};\n\nexport const goToPrevStep = (\n currentStepIdStore: Writable<string>,\n globalConfiguration: IAppConfiguration,\n currentStepId: string,\n skipType?: string,\n) => {\n const flows = getFlowOrders(globalConfiguration) as string[];\n const filteredFlows = filterOutByType(flows, globalConfiguration, skipType);\n const currentFlowIndex = filteredFlows.findIndex(i => i === currentStepId);\n if (currentFlowIndex === 0) {\n throw Error('Error moving step back, this is the first step');\n }\n currentStepIdStore.set(filteredFlows[currentFlowIndex - 1]);\n};\n","import merge from 'deepmerge';\nimport type { Writable } from 'svelte/store';\nimport type { IAppConfiguration, IAppConfigurationUI, IStepConfiguration } from '../../contexts/configuration';\nimport { getNextStepId } from '../../contexts/navigation';\n\nconst preloadByExtension = async (src: string): Promise<string> => {\n if (src.includes('</svg>')) return src;\n const extension = src.split('.').pop();\n let svg: string | undefined;\n\n if (extension === 'svg') {\n const response = await fetch(src);\n\n svg = await response.text();\n }\n\n return new Promise((resolve, reject) => {\n if (svg) return resolve(svg);\n\n const img = new Image();\n img.onload = () => resolve(img.src);\n img.onerror = reject;\n img.src = src;\n });\n};\n\nexport const preloadStepImages = async (step: IStepConfiguration, uiPack: IAppConfigurationUI): Promise<IStepConfiguration> => {\n const defaultStepKey = Object.keys(uiPack.steps).find(\n s => s === step.name,\n ) as string;\n const defaultStep = uiPack.steps[defaultStepKey];\n const mergedStep = merge(defaultStep, step);\n // Elements are not deep-merged to preserve step-specific element configurations\n // This is intentional - step.elements should fully override defaultStep.elements when provided\n mergedStep.elements = step.elements || defaultStep.elements;\n const elements = [];\n for (let index = 0; index < mergedStep.elements.length; index++) {\n const element = mergedStep.elements[index];\n if (element.props.attributes?.src) {\n const src = await preloadByExtension(element.props.attributes?.src);\n elements.push({\n ...element,\n props: {\n ...element.props,\n attributes: {\n ...element.props.attributes,\n src,\n },\n },\n });\n } else {\n elements.push(element);\n }\n }\n return {\n ...step,\n elements,\n };\n};\n\n// To prevent preload twice\nconst preloadedSteps: Record<string, boolean> = {};\n\nexport const preloadNextStepByCurrent = async (\n globalConfiguration: IAppConfiguration,\n configuration: Writable<IAppConfiguration>,\n currentStepId: string,\n uiPack: IAppConfigurationUI,\n skipType?: string,\n) => {\n const nextStepId = getNextStepId(globalConfiguration, currentStepId, skipType);\n if (preloadedSteps[nextStepId]) return;\n const step = globalConfiguration.steps ? globalConfiguration.steps[nextStepId] : uiPack.steps[nextStepId];\n const updatedStep = await preloadStepImages(step, uiPack);\n const updatedConfiguration = {\n ...globalConfiguration,\n steps: {\n ...globalConfiguration.steps,\n [nextStepId]: updatedStep,\n },\n };\n configuration.set(updatedConfiguration);\n preloadedSteps[nextStepId] = true;\n};\n\nexport const preloadStepById = async (\n globalConfiguration: IAppConfiguration,\n configuration: Writable<IAppConfiguration>,\n currentStepId: string,\n uiPack: IAppConfigurationUI,\n) => {\n if (preloadedSteps[currentStepId]) return;\n const step = uiPack.steps[currentStepId];\n const updatedStep = await preloadStepImages(step, uiPack);\n const updatedConfiguration = {\n ...globalConfiguration,\n steps: {\n ...globalConfiguration.steps,\n [currentStepId]: updatedStep,\n },\n };\n configuration.set(updatedConfiguration);\n preloadedSteps[currentStepId] = true;\n};\n","/**\n * Configuration Manager\n * TD-006: Refactored to remove file-level eslint-disable directives\n * Added proper typing throughout\n */\nimport mergeObj from 'deepmerge';\nimport translation from '../configuration/translation.json';\nimport type { TranslationType } from '../contexts/translation';\nimport {\n configuration,\n Steps,\n} from '../contexts/configuration';\nimport type { IAppConfiguration, IStepConfiguration } from '../contexts/configuration';\nimport type { FlowsEventsConfig, FlowsInitOptions, FlowsTranslations } from '../../types/AuthBridgeSDK';\nimport type { IFlow } from '../contexts/flows';\nimport type { IDocumentOptionItem } from '../organisms/DocumentOptions/types';\nimport { AnyRecord } from '../../types';\nimport { preloadStepImages } from '../services/preload-service/utils';\nimport { packs, uiPack } from '../ui-packs';\nimport { isUrl } from '../services/merge-service';\n\n/**\n * Type for recursive partial objects\n */\ntype RecursivePartial<T> = {\n [P in keyof T]?: T[P] extends object ? RecursivePartial<T[P]> : T[P];\n};\n\n/**\n * Type for keyBy result\n */\ntype KeyedObject<T> = Record<string, T>;\n\n/**\n * Convert array to object keyed by specified property\n * TD-006: Added proper typing\n */\nfunction keyBy<T extends Record<string, unknown>>(\n array: T[] | undefined,\n key: string | ((item: T) => string)\n): KeyedObject<T> {\n if (!array) return {};\n return array.reduce<KeyedObject<T>>((result, item) => {\n const calculatedKey = typeof key === 'function' ? key(item) : String(item[key] ?? '');\n result[calculatedKey] = item;\n return result;\n }, {});\n}\n\n/**\n * Convert collection to object keyed by specified property\n */\nfunction toObjByKey<T extends Record<string, unknown>>(\n collection: T[] | Record<string, T> | undefined,\n key: string | ((item: T) => string)\n): KeyedObject<T> {\n if (!collection) return {};\n const items = Array.isArray(collection) ? collection : Object.values(collection);\n return keyBy(items, key);\n}\n\nexport let texts: TranslationType = translation;\n\nexport const updateConfiguration = async (\n configOverrides: RecursivePartial<FlowsInitOptions>\n): Promise<void> => {\n let configurationResult: IAppConfiguration | undefined = undefined;\n let uiTheme = packs.default;\n\n configuration.update(currentConfig => {\n const mergedConfig = mergeConfig(currentConfig, configOverrides);\n configurationResult = mergedConfig;\n return mergedConfig;\n });\n\n const config = configurationResult as unknown as IAppConfiguration;\n const pack = configOverrides.uiConfig?.uiPack ;\n\n if (pack && isUrl(pack)) {\n const packConfigResponse = await fetch(pack);\n const packConfig = await packConfigResponse.json();\n uiPack.set(packConfig);\n } else if (pack && Object.keys(packs).includes(pack)) {\n const packName = pack as keyof typeof packs;\n uiPack.set(packs[packName]);\n uiTheme = packs[packName];\n }\n\n if (config.steps) {\n config.steps[Steps.Welcome] = await preloadStepImages(config.steps[Steps.Welcome], uiTheme);\n }\n configuration.update(() => config);\n};\n\nexport const updateTranslations = async (translations: FlowsTranslations): Promise<void> => {\n if (translations.overrides) {\n texts = mergeObj(texts, translations.overrides) as TranslationType;\n }\n if (translations.remoteUrl) {\n try {\n const response = await fetch(translations.remoteUrl);\n const overrides = (await response.json()) as TranslationType;\n texts = mergeObj(texts, overrides) as TranslationType;\n } catch {\n // TD-009: Silent failure for translation fetch - graceful degradation\n }\n }\n};\n\nexport const mergeConfig = (\n originalConfig: IAppConfiguration,\n overrides: RecursivePartial<FlowsInitOptions>\n): IAppConfiguration => {\n const adaptedOverrides = v1adapter(overrides, originalConfig);\n const newConfig: IAppConfiguration = mergeObj(originalConfig, adaptedOverrides) as IAppConfiguration;\n\n if (\n newConfig.steps &&\n newConfig.steps[Steps.DocumentSelection] &&\n newConfig.steps[Steps.DocumentSelection].documentOptions &&\n newConfig.documentOptions\n ) {\n const documentOptions = newConfig.steps[Steps.DocumentSelection].documentOptions?.reduce(\n (docOpts, docType) => {\n if (newConfig.documentOptions?.options[docType]) {\n docOpts[docType] = newConfig.documentOptions.options[docType];\n }\n return docOpts;\n },\n {} as IDocumentOptionItem\n );\n\n if (documentOptions) {\n newConfig.documentOptions.options = documentOptions;\n }\n }\n return newConfig;\n};\n\n/**\n * Calculate step ID from step configuration\n */\nconst calculateStepId = (step: RecursivePartial<IStepConfiguration>): string => {\n if (!step.id || step.id === step.name) {\n return `${step.name ?? ''}${step.type ? '-' + step.type : ''}`;\n }\n return step.id;\n};\n\n/**\n * Adapt v1 config format to internal format\n * TD-006: Refactored with proper typing\n */\nconst v1adapter = (\n config: RecursivePartial<FlowsInitOptions>,\n originalConfig: IAppConfiguration\n): AnyRecord => {\n const { uiConfig = {}, endUserInfo = {}, backendConfig = {} } = config;\n const { flows = {}, general, components } = uiConfig;\n\n const newFlows: Record<string, IFlow> = {};\n let flowSteps: Record<string, RecursivePartial<IStepConfiguration>> = {};\n\n for (const [flowName, flow] of Object.entries(flows)) {\n if (flow) {\n const { steps, ...flowConfig } = flow;\n newFlows[flowName] = {\n name: flowName,\n ...flowConfig,\n } as IFlow;\n\n if (steps) {\n newFlows[flowName].stepsOrder = steps\n .filter((s): s is NonNullable<typeof s> => s != null)\n .map(s => calculateStepId(s as RecursivePartial<IStepConfiguration>))\n .filter((v): v is string => typeof v === 'string');\n }\n\n const stepsConfig = toObjByKey(\n steps?.filter((s): s is NonNullable<typeof s> => s != null) as Array<Record<string, unknown>>,\n (s) => calculateStepId(s as RecursivePartial<IStepConfiguration>)\n );\n flowSteps = { ...flowSteps, ...stepsConfig };\n }\n }\n\n return {\n endUserInfo,\n backendConfig,\n flows: newFlows,\n steps: flowSteps,\n general: general || originalConfig.general,\n ...components,\n };\n};\n\n/**\n * @description Updates the configuration Svelte store callbacks object of a given flow by name.\n */\nexport const setFlowCallbacks = async (\n flowName: string,\n callbacks: FlowsEventsConfig\n): Promise<void> => {\n return updateConfiguration({\n uiConfig: {\n flows: {\n [flowName]: {\n callbacks,\n },\n },\n },\n });\n};\n","import { writable } from 'svelte/store';\nimport type { Languages } from './types';\nimport { texts } from '../../utils/configuration-manager';\n\nexport const currentLanguage = writable<Languages>('en');\n\nlet language: string;\n\ncurrentLanguage.subscribe(lang => {\n language = lang;\n});\n\nexport const t = (namespace: string, key: string): string => {\n let path = `${language}.${namespace}.${key}`;\n\n let text = get(texts, path);\n if (!text) {\n const namespacePath = namespace.split('.');\n namespacePath.pop(); // Remove last key for fallback\n path = `${language}.${namespacePath.join('.')}.${key}`;\n text = get(texts, path);\n // TD-009: Removed console.log - missing translations are handled gracefully\n }\n return text || 'Missing translation: ' + path;\n};\n\n/**\n * Safely traverse nested object by dot-separated path\n * TD-005: Added proper typing to remove @ts-ignore\n */\nconst get = (obj: Record<string, unknown>, path: string): string => {\n const result = path.split('.').reduce<unknown>((res, key) => {\n if (res && typeof res === 'object' && key in res) {\n return (res as Record<string, unknown>)[key];\n }\n return undefined;\n }, obj);\n return typeof result === 'string' ? result : '';\n};\n","<script lang=\"ts\">\n import { t } from './hooks';\n import { currentLanguage } from './hooks';\n\n export let namespace: string;\n export let key: string;\n let text: string;\n\n currentLanguage.subscribe(() => {\n text = t(namespace, key);\n });\n</script>\n\n{text}\n","<script lang=\"ts\">\n import { fly } from 'svelte/transition';\n import { steps } from './lib/contexts/navigation';\n import { configuration } from './lib/contexts/configuration';\n import { sendNavigationUpdateEvent } from './lib/utils/event-service';\n import { visitedPage } from './lib/services/analytics';\n import { currentStepId, currentStepIdx, currentParams } from './lib/contexts/app-state';\n\n // Safely get step IDs, defaulting to empty array if steps is undefined\n $: configurationStepIds = $configuration.steps ? Object.keys($configuration.steps) : [];\n\n let stepId: string | undefined;\n let step: typeof steps[number] | undefined;\n let initialized = false;\n\n // Initialize step ONLY ONCE when configuration first becomes available\n $: if (configurationStepIds.length > 0 && !initialized) {\n initialized = true;\n stepId = configurationStepIds[0];\n const stepConfig = $configuration.steps?.[stepId];\n if (stepConfig) {\n step = steps.find(s => s.name === stepConfig.name);\n }\n }\n\n // React to currentStepId changes for navigation\n $: {\n if (initialized && $currentStepId) {\n const configurationStepId = configurationStepIds.find((key: string) => key === $currentStepId);\n \n if (configurationStepId && configurationStepId !== stepId) {\n stepId = configurationStepId;\n const stepConfig = $configuration.steps?.[stepId];\n if (stepConfig) {\n step = steps.find(s => s.name === stepConfig.name);\n }\n const newStepIndex = configurationStepIds.indexOf(stepId);\n if (newStepIndex !== $currentStepIdx) {\n sendNavigationUpdateEvent();\n visitedPage($currentStepId, $currentParams ? $currentParams.toString() : '');\n }\n } else if (!configurationStepId) {\n // Step not in configuration, use step name directly\n step = steps.find(s => s.name === $currentStepId);\n }\n } else if (!initialized && $currentStepId) {\n // Fallback before initialization: use currentStepId directly\n step = steps.find(s => s.name === $currentStepId);\n }\n }\n</script>\n\n{#if step}\n {#key step.component}\n <div\n class=\"container\"\n in:fly={{ x: -50, duration: 250, delay: 300 }}\n out:fly={{ x: -50, duration: 250 }}\n >\n <svelte:component this={step.component} {stepId} />\n </div>\n {/key}\n{/if}\n\n<style>\n .container {\n height: 100%;\n }\n</style>\n","<script lang=\"ts\">\n import { SvelteToast } from '@zerodevx/svelte-toast';\n import { initConnectionCheck } from './lib/utils/check-connection';\n import { configuration } from './lib/contexts/configuration';\n import { currentLanguage } from './lib/contexts/translation';\n import type { Languages } from './lib/contexts/translation';\n import { subscribe } from './lib/utils/event-service';\n import Routes from './Routes.svelte';\n import { t } from './lib/contexts/translation/hooks';\n import { setFlowName } from './lib/contexts/flows';\n import { uiPack } from './lib/ui-packs';\n import { validateAndReportSession } from './lib/services/session-service';\n import { branding } from './lib/stores/branding';\n import { onMount } from 'svelte';\n\n subscribe();\n initConnectionCheck(t);\n\n const urlParams = new URLSearchParams(window.location.search);\n\n // const flowName = urlParams.get(\"b_fid\");\n export let flowName;\n setFlowName($configuration.flows, flowName);\n\n $currentLanguage =\n ($configuration.endUserInfo.language as Languages) || $configuration.defaultLanguage;\n\n // Browser language detection for Setswana (AC2)\n if (!$configuration.endUserInfo.language) {\n const browserLang = navigator.language.toLowerCase();\n if (browserLang.startsWith('tn') || browserLang === 'tsn') {\n $currentLanguage = 'tn';\n }\n }\n\n // Update document lang attribute for accessibility (Story 8.3)\n $: document.documentElement.lang = $currentLanguage;\n\n // Story 9.2: Apply branding from configuration or use defaults\n $: {\n const configBranding = ($configuration as any).branding;\n if (configBranding) {\n branding.set(configBranding);\n }\n }\n\n // Story 9.2: Use branding CSS variables with fallback to existing config\n const style = `\n --font-family: ${$configuration.general?.fonts?.name || $uiPack.general.fonts.name};\n --primary-color: ${$configuration.general?.colors?.primary || $uiPack.general.colors.primary};\n --secondary-color: ${\n $configuration.general?.colors?.secondary || $uiPack.general.colors.secondary\n };\n --ab-primary-color: var(--primary-color);\n --ab-font-family: var(--font-family);\n --ab-bg-color: #FFFFFF;\n `;\n\n // Validate session token on initialization (AC6)\n onMount(() => {\n const sessionToken = $configuration.endUserInfo?.id;\n const isValid = validateAndReportSession(sessionToken, sessionToken || null);\n\n if (!isValid) {\n console.error('Session validation failed - invalid or expired token');\n // Error event already emitted by validateAndReportSession\n }\n });\n</script>\n\n<svelte:head>\n {#if $configuration.general?.fonts?.link || $uiPack.general.fonts.link}\n <link\n href={$configuration.general?.fonts?.link || $uiPack.general.fonts.link}\n rel=\"stylesheet\"\n />\n {/if}\n</svelte:head>\n\n<main {style} id=\"blrn-app\">\n <!-- <button on:click={handle}>Change</button> -->\n <Routes />\n <SvelteToast\n options={{\n theme: {\n '--toastBackground':\n $configuration.general?.colors?.primary || $uiPack.general.colors.primary,\n '--toastBarBackground':\n $configuration.general?.colors?.primary || $uiPack.general.colors.primary,\n },\n }}\n />\n</main>\n\n<style>\n main {\n max-width: 500px;\n width: 100%;\n margin: 0 auto;\n height: 100%;\n overflow-y: auto;\n overflow-x: hidden;\n }\n\n :global(html, body, #app) {\n height: 100%;\n overflow: hidden;\n }\n\n :global(html, body, p, div, input) {\n box-sizing: border-box;\n }\n\n :global(body) {\n margin: 0px;\n }\n\n :global(p, div, body, button) {\n font-family: var(--font-family);\n }\n\n /* Mobile viewport fix */\n @supports (-webkit-touch-callout: none) {\n :global(html, body, #app) {\n height: -webkit-fill-available;\n }\n main {\n height: -webkit-fill-available;\n }\n }\n</style>\n","<script lang=\"ts\">\n import { onMount } from 'svelte';\n import App from './App.svelte';\n import { AUTHBRIDGE_EVENT } from './lib/utils/event-service';\n import type { IOuterEvent } from './lib/utils/event-service/types';\n import { isMobile } from './lib/utils/is-mobile';\n\n let loading = false;\n let modalOpened = true;\n let mounted = true;\n\n onMount(async () => {\n const loader = document.getElementById('authbridge-loader') as HTMLDivElement;\n if (loader) loader.style.display = 'none';\n // Backwards compatibility for old loader ID\n const oldLoader = document.getElementById('blrn-loader') as HTMLDivElement;\n if (oldLoader) oldLoader.style.display = 'none';\n });\n export let flowName: string;\n\n export let useModal = false;\n\n window.addEventListener(\n 'message',\n e => {\n const event = e.data as IOuterEvent;\n if (event.eventName !== AUTHBRIDGE_EVENT) return;\n if (event.shouldExit) {\n modalOpened = false;\n mounted = false;\n }\n },\n false,\n );\n</script>\n\n{#if !isMobile() && useModal}\n {#if !loading && modalOpened}\n <div class=\"background\">\n <div class=\"content \">\n <App {flowName} />\n </div>\n </div>\n {/if}\n{:else if !loading}\n {#if mounted}\n <App {flowName} />\n {/if}\n{/if}\n\n<style>\n .background {\n z-index: 9999;\n position: fixed;\n top: 0px;\n left: 0px;\n overflow: hidden;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.6);\n display: flex;\n align-items: center;\n justify-content: center;\n }\n .content {\n width: 415px;\n height: 660px;\n box-shadow: 0px 20px 40px rgba(0, 0, 0, 0.05);\n border-radius: 35px;\n overflow: hidden;\n }\n</style>\n","/**\n * Query parameter configuration schema\n */\ninterface QueryParamsConfig {\n flowName?: string;\n clientId?: string;\n id?: string;\n token?: string;\n firstName?: string;\n lastName?: string;\n phone?: string;\n email?: string;\n language?: string;\n type?: string;\n}\n\n/**\n * Type guard to check if a key is a valid QueryParamsConfig key\n */\nfunction isValidConfigKey(key: string): key is keyof QueryParamsConfig {\n const validKeys: Array<keyof QueryParamsConfig> = [\n 'flowName', 'clientId', 'id', 'token', 'firstName',\n 'lastName', 'phone', 'email', 'language', 'type'\n ];\n return validKeys.includes(key as keyof QueryParamsConfig);\n}\n\n/**\n * @description Gets config specific query params as an object - see -docs url here-\n */\nexport const getConfigFromQueryParams = (): QueryParamsConfig => {\n // Make sure non-unrelated query params are passed to the config\n const {\n b_uid,\n b_cid,\n b_t,\n b_fn,\n b_ln,\n b_fid,\n b_ph,\n b_em,\n b_lang,\n b_eut,\n // /?b_uid=&b_cid= --> { b_uid: '', b_cid: '' };\n } = Object.fromEntries(new URLSearchParams(window.location.search));\n\n const queryParamsMapping: Record<string, string | undefined> = {\n flowName: b_fid,\n clientId: b_cid,\n id: b_uid,\n token: b_t,\n firstName: b_fn,\n lastName: b_ln,\n phone: b_ph,\n email: b_em,\n language: b_lang,\n type: b_eut,\n };\n\n // Make sure no empty strings are passed to the config\n const result: QueryParamsConfig = {};\n\n for (const [key, value] of Object.entries(queryParamsMapping)) {\n if (value && isValidConfigKey(key)) {\n result[key] = value;\n }\n }\n\n return result;\n};\n","import ConfigurationProvider from './ConfigurationProvider.svelte';\nimport type { AuthBridgeSDKFlows, FlowsInitOptions } from './types/AuthBridgeSDK';\nimport {\n setFlowCallbacks,\n updateConfiguration,\n updateTranslations,\n} from './lib/utils/configuration-manager';\nimport { getConfigFromQueryParams } from './lib/utils/get-config-from-query-params';\n\nexport const flows: AuthBridgeSDKFlows = {\n // Use the b_fid query param as the default flowName, fallback to the passed flowName arg.\n // Optional args/args with default values should probably be last.\n // Async due to setFlowCallbacks using updateConfiguration, which is async.\n async mount(flowName = getConfigFromQueryParams().flowName, elementId, config) {\n const hostElement = document.getElementById(elementId);\n if (hostElement) {\n hostElement.innerHTML = `<div class=\"loader-container\" id=\"blrn-loader\">\n <div class=\"loader\"></div>\n </div>\n `;\n } else {\n console.error('AuthBridgeSDK: Could not find element with id', elementId);\n }\n\n new ConfigurationProvider({\n target: document.getElementById(elementId) as HTMLElement,\n props: {\n flowName,\n },\n });\n\n // Merge the passed in callbacks into the Svelte configuration store of the specified flow.\n if (!config.callbacks || !flowName) return;\n\n await setFlowCallbacks(flowName, config.callbacks);\n },\n openModal(flowName, config) {\n const hostElement = document.querySelector('body');\n if (hostElement) {\n hostElement.innerHTML = `<div class=\"loader-container\" id=\"blrn-loader\">\n <div class=\"loader\"></div>\n </div>\n `;\n } else {\n console.error('AuthBridgeSDK: Could not find element body');\n }\n\n new ConfigurationProvider({\n target: hostElement as HTMLElement,\n props: {\n flowName,\n useModal: true,\n },\n });\n },\n init: config => {\n return new Promise((resolve, reject) => {\n console.log(\n 'AuthBridgeSDK: Initializing with version: ',\n __APP_VERSION__,\n config,\n );\n const { translations, ...restConfig } = config;\n // Extract config from query params\n const {\n clientId: _clientId,\n flowName: _flowName,\n ...endUserInfo\n } = getConfigFromQueryParams();\n // Merge the two config objects\n const mergedConfig = {\n ...restConfig,\n endUserInfo: {\n ...restConfig.endUserInfo,\n ...endUserInfo,\n },\n };\n const configPromise = updateConfiguration(mergedConfig);\n const translationsPromise = config.translations\n ? updateTranslations(config.translations)\n : undefined;\n Promise.all([configPromise, translationsPromise])\n .then(() => resolve())\n .catch(reject);\n });\n },\n setConfig: function (config: FlowsInitOptions): Promise<void> {\n throw new Error('Function not implemented.');\n },\n};\n"],"names":["noop","identity","x","assign","tar","src","k","run","fn","blank_object","run_all","fns","is_function","thing","safe_not_equal","a","b","src_url_equal_anchor","src_url_equal","element_src","url","is_empty","obj","subscribe","store","callbacks","callback","unsub","get_store_value","value","_","component_subscribe","component","create_slot","definition","ctx","$$scope","slot_ctx","get_slot_context","get_slot_changes","dirty","lets","merged","len","i","update_slot_base","slot","slot_definition","slot_changes","get_slot_context_fn","slot_context","get_all_dirty_from_scope","length","null_to_empty","set_store_value","ret","split_css_unit","split","is_client","now","raf","cb","tasks","run_tasks","task","loop","fulfill","globals","append","target","node","append_styles","style_sheet_id","styles","append_styles_to","get_root_for_style","style","element","append_stylesheet","root","append_empty_stylesheet","style_element","insert","anchor","detach","destroy_each","iterations","detaching","name","svg_element","text","data","space","empty","listen","event","handler","options","attr","attribute","children","set_data","set_style","key","important","toggle_class","toggle","custom_event","type","detail","bubbles","cancelable","HtmlTag","is_svg","__publicField","html","construct_svelte_component","props","managed_styles","active","hash","str","create_style_information","doc","info","create_rule","duration","delay","ease","uid","step","keyframes","p","t","rule","stylesheet","rules","animation","delete_rule","previous","next","anim","deleted","clear_rules","ownerNode","create_animation","from","params","to","easing","linear","start_time","end","tick","css","running","started","start","stop","fix_position","width","height","add_transform","transform","current_component","set_current_component","get_current_component","onDestroy","createEventDispatcher","bubble","dirty_components","binding_callbacks","render_callbacks","flush_callbacks","resolved_promise","update_scheduled","schedule_update","flush","add_render_callback","seen_callbacks","flushidx","saved_component","update","$$","flush_render_callbacks","filtered","targets","c","promise","wait","dispatch","direction","kind","outroing","outros","group_outros","check_outros","transition_in","block","local","transition_out","null_transition","create_in_transition","config","animation_name","cleanup","go","end_time","create_out_transition","group","original_inert_value","reset","ensure_array_like","array_like_or_iterator","outro_and_destroy_block","lookup","fix_and_outro_and_destroy_block","update_keyed_each","old_blocks","get_key","dynamic","list","destroy","create_each_block","get_context","o","n","old_indexes","new_blocks","new_lookup","deltas","updates","child_ctx","will_move","did_move","new_block","old_block","new_key","old_key","get_spread_update","levels","to_null_out","accounted_for","get_spread_object","spread_props","create_component","mount_component","fragment","after_update","new_on_destroy","destroy_component","make_dirty","init","instance","create_fragment","not_equal","parent_component","ready","rest","nodes","SvelteComponent","index","PUBLIC_VERSION","cubicOut","f","fade","fly","y","opacity","target_opacity","od","xValue","xUnit","yValue","yUnit","u","flip","ox","oy","dx","dy","d","sx","sy","subscriber_queue","readable","writable","subscribers","set","new_value","run_queue","subscriber","invalidate","derived","stores","initial_value","single","stores_array","auto","values","pending","sync","result","unsubscribers","defaults","createToast","count","_obj","msg","opts","param","conf","entry","id","idx","toast","is_date","get_interpolator","arr","bi","delta","keys","interpolators","tweened","target_value","previous_task","interpolate","elapsed","raw_value","html_tag","div","if_block1","create_if_block","div0","div1","progress_1","item","$$props","progress","close","autoclose","$progress","prev","paused","pause","resume","componentProps","check","prop","e","$$invalidate","sendIdTo","li","li_class_value","current","stop_animation","rect","li_intro","ul","items","getCss","theme","$toast","initConnectionCheck","Steps","Elements","defaultFlowOrder","configuration","defaultConfiguration","isMergeableObject","isNonNullObject","isSpecial","stringValue","isReactElement","canUseSymbol","REACT_ELEMENT_TYPE","emptyTarget","val","cloneUnlessOtherwiseSpecified","deepmerge","defaultArrayMerge","source","getMergeFunction","customMerge","getEnumerableOwnPropertySymbols","symbol","getKeys","propertyIsOnObject","object","property","propertyIsUnsafe","mergeObject","destination","sourceIsArray","targetIsArray","sourceAndTargetTypesMatch","array","deepmerge_1","cjs","hexTransparencies","cssProperties","setBackgroundWithOpacity","prefix","app","color","opacityKey","makeStylesFromConfiguration","globalComponentStyles","configStyles","setProperties","globalCss","localCss","hoverProperty","globalHoverProperties","localHoverProperties","globalActiveProperties","localActiveHoverProperties","makesLocalStyles","cssHoverProperties","cssActiveProperties","module","this","r","l","s","v","selfieUri","documents","selectedDocumentInfo","currentStepIdx","currentParams","currentRoute","previousPage","appState","$currentRoute","steps","currentStepId","pendingCaptureMetadata","pendingUploadMetadata","setPendingCaptureMetadata","metadata","clearPendingCaptureMetadata","setPendingUploadMetadata","clearPendingUploadMetadata","pendingSelfieMetadata","setPendingSelfieMetadata","clearPendingSelfieMetadata","livenessSession","setLivenessSession","session","updateLivenessStatus","status","confidence","referenceImageUri","getLivenessSessionId","sessionId","verificationStatus","setVerificationStatus","clearVerificationStatus","DocumentType","DocumentVariant","DecisionStatus","getDocImage","docs","pageSide","page","backIconButton","closeIconButton","backWhiteIconButton","stepsTheme","uiTheme","IMAGE_TYPES","uiPack","mergeStepConfig","defaultConfig","overrides","mergedConfig","merge","isUrl","urlStr","injectPrimaryIntoLayoutGradient","layoutStyles","primaryColor","getStepConfiguration","stepId","uiStep","getLayoutStyles","_b","_a","getComponentStyles","uiPackComponentStyle","configurationStyles","packs","future","blue","button","isBack","background","$globalConfiguration","$uiPack","_c","styleProps","buttonConfiguration","loader","$configuration","isDisabled","isLoading","skipType","disabled","onClick","goToNextStep","$currentStepId","h1","attributes","img","img_src_value","div2","size","fullPage","defaultStyle","span","getOverlayDocumentType","documentType","ellipse","create_if_block_1","create_if_block_2","create_if_block_3","div5","svg","defs","mask","rect0","rect1","div4","div3","isInFrame","overlayType","namespace","handleClick","FLOW_STORE_KEY","setFlowName","flows","savedFlow","getFlowName","getFlowOrders","flowName","flowConfiguration","getFlowConfig","isNativeCamera","getListLength","language","langTexts","texts","each_blocks","if_block","listNamespace","globalListProps","globalListStyles","titleProps","_d","listElementProps","_e","_f","listLength","$currentLanguage","listItems","EEventTypes","EActionNames","EVerificationStatuses","EFlowEvent","flowEventBus","payload","get","AUTHBRIDGE_EVENT","SDK_VERSION","getTargetOrigin","configuredOrigin","outerScopeContext","expectedOrigin","currentLanguage","sendIframeEvent","eventOptions","targetOrigin","sendFlowCompleteEvent","verificationResponse","idvResult","sendNavigationUpdateEvent","as","sendButtonClickEvent","actionName","shouldExit","sendVerificationStartedEvent","clientId","sendDocumentCapturedEvent","side","imageSize","compressionRatio","captureTime","cameraResolution","sendDocumentUploadedEvent","fileName","originalSize","compressedSize","uploadTime","uploadMethod","sendSelfieCapturedEvent","livenessChecks","totalAttempts","faceQuality","deviceType","create_if_block_6","create_if_block_5","if_block0","create_if_block_4","if_block2","if_block3","each_value_2","each_value_1","each_value","each_blocks_2","each_blocks_1","flow","stepNamespace","preloadNextStepByCurrent","handleStartVerification","privacyPolicyUrl","$appState","path","icons","Card","Passport","License","PassportTwo","Voter","icon","ownKeys","enumerableOnly","symbols","sym","_objectSpread2","_defineProperty","_classCallCheck","Constructor","_defineProperties","descriptor","_toPropertyKey","_createClass","protoProps","staticProps","_extends","_toPrimitive","input","hint","prim","res","arg","canvasToBlob","window","CanvasPrototype","hasBlobConstructor","hasArrayBufferViewSupport","BlobBuilder","dataURIPattern","dataURLtoBlob","dataURI","matches","mediaType","isBase64","dataString","byteString","arrayBuffer","intArray","bb","quality","self","toBlob","isBlob","DEFAULTS","IS_BROWSER","WINDOW","isPositiveNumber","slice","toArray","REGEXP_IMAGE_TYPE","isImageType","imageTypeToExtension","extension","fromCharCode","getStringFromCharCode","dataView","btoa","arrayBufferToDataURL","mimeType","chunks","chunkSize","uint8","resetAndGetOrientation","orientation","littleEndian","app1Start","ifdStart","offset","exifIDCode","tiffOffset","endianness","firstIFDOffset","_length","_offset","parseOrientation","rotate","scaleX","scaleY","REGEXP_DECIMALS","normalizeDecimalNumber","times","getAdjustedSizes","_ref","aspectRatio","isValidWidth","isValidHeight","adjustedWidth","getExif","segments","segment","exifArray","insertExif","app0Length","newArrayBuffer","ArrayBuffer$1","FileReader","URL","REGEXP_EXTENSION","AnotherCompressor","Compressor","file","_this","isJPEGImage","checkOrientation","retainExif","reader","_this2","image","_ref2","_this3","naturalWidth","naturalHeight","_ref2$rotate","_ref2$scaleX","_ref2$scaleY","canvas","context","is90DegreesRotated","resizable","maxWidth","maxHeight","minWidth","minHeight","_ref3","_ref4","_ref5","_getAdjustedSizes","_getAdjustedSizes2","_getAdjustedSizes3","_getAdjustedSizes4","_getAdjustedSizes4$wi","_getAdjustedSizes4$he","destX","destY","destWidth","destHeight","srcX","srcY","srcWidth","srcHeight","_getAdjustedSizes5","_ref6","fillStyle","blob","done","_ref7","_ref8","date","err","nativeCameraHandler","resolve","reject","reader1","clearDocs","documentOptionsConfiguration","addDocument","base64","document","getUpdatedPages","updateDocument","newPagesState","createToggle","initialState","nextState","prevState","icon_changes","t_changes","paragraph_changes","show_if","button_aria_label_value","container_changes","toggleOnIsDisabled","handleSelect","$isDisabled","keydown_handler","checkIsCameraAvailable","stream","track","error","documentoption_changes","ducumentOptions","option","handleSelectOption","$selectedDocumentInfo","handleTakePhoto","newDocumentsState","$documents","if_block4","click_handler","goToPrevStep","if_block5","handleGoToNextStep","compressImage","video_1","button0","button1","create_if_block_9","create_if_block_8","create_if_block_7","circle1","circle1_stroke_dashoffset_value","circle0","t1","t1_value","button_disabled_value","h2","video","cameraPhoto","cameraError","isCompressing","cameraInitialized","initAttempted","cardDetected","autoCaptureTimer","autoCaptureCountdown","toggleOffIsDisabled","initializeCamera","CameraPhoto","cameraStream","FACING_MODES","startCardDetection","startAutoCapture","countdownInterval","cancelAutoCapture","captureStartTime","compressed","handleTryAgain","handleUploadInstead","$$value","DEFAULT_OPTIONS","validateFile","dimensions","getImageDimensions","validatePdfFile","bytes","isPdf","formatFileSize","fileInput","fileSize","errorMessage","isProcessing","isDragging","handleFileSelect","method","validation","processUpload","uploadStartTime","handleFileInputChange","files","handleDragEnter","handleDragLeave","handleDragOver","handleDrop","handleUploadClick","userConfiguration","skipBackSide","click_handler_1","click_handler_2","click_handler_3","click_handler_4","handleContinue","captureMetadata","uploadMetadata","selfieMetadata","documentInfo","getIllustrationForDocType","docType","getNamespaceForDocType","illustrationSrc","visitedPage","pathname","search","handleClose","$currentParams","$selfieUri","isMobile","toMatchItem","borderColor","borderWidth","util","assertIs","_arg","assertNever","_x","validKeys","checker","joinValues","separator","objectUtil","first","second","ZodParsedType","getParsedType","ZodIssueCode","ZodError","issues","sub","subs","actualProto","_mapper","mapper","issue","fieldErrors","processError","curr","el","formErrors","firstEl","errorMap","_ctx","message","overrideErrorMap","defaultErrorMap","getErrorMap","makeIssue","errorMaps","issueData","fullPath","fullIssue","maps","m","map","addIssueToContext","overrideMap","ParseStatus","results","arrayValue","INVALID","pairs","syncPairs","pair","finalObject","DIRTY","OK","isAborted","isDirty","isValid","isAsync","errorUtil","ParseInputLazyPath","parent","handleResult","processCreateParams","invalid_type_error","required_error","description","iss","ZodType","maybeAsyncResult","getIssueProperties","setError","refinementData","refinement","ZodEffects","ZodFirstPartyTypeKind","def","ZodOptional","ZodNullable","ZodArray","ZodPromise","ZodUnion","incoming","ZodIntersection","defaultValueFunc","ZodDefault","ZodBranded","catchValueFunc","ZodCatch","This","ZodPipeline","ZodReadonly","cuidRegex","cuid2Regex","ulidRegex","uuidRegex","nanoidRegex","jwtRegex","durationRegex","emailRegex","_emojiRegex","emojiRegex","ipv4Regex","ipv4CidrRegex","ipv6Regex","ipv6CidrRegex","base64Regex","base64urlRegex","dateRegexSource","dateRegex","timeRegexSource","args","secondsRegexSource","secondsQuantifier","timeRegex","datetimeRegex","regex","isValidIP","ip","version","isValidJWT","jwt","alg","header","decoded","isValidCidr","ZodString","tooBig","tooSmall","minLength","maxLength","ch","min","max","floatSafeRemainder","valDecCount","stepDecCount","decCount","valInt","stepInt","ZodNumber","inclusive","ZodBigInt","ZodBoolean","ZodDate","minDate","maxDate","ZodSymbol","ZodUndefined","ZodNull","ZodAny","ZodUnknown","ZodNever","ZodVoid","schema","deepPartialify","ZodObject","newShape","fieldSchema","ZodTuple","shape","shapeKeys","extraKeys","keyValidator","unknownKeys","catchall","defaultError","augmentation","merging","newField","createZodEnum","handleResults","unionErrors","childCtx","types","mergeValues","aType","bType","bKeys","sharedKeys","newObj","sharedValue","newArray","itemA","itemB","handleParsed","parsedLeft","parsedRight","left","right","itemIndex","schemas","ZodMap","keyType","valueType","finalMap","ZodSet","finalizeSet","elements","parsedSet","minSize","maxSize","ZodLazy","getter","ZodLiteral","ZodEnum","expectedValues","enumValues","newDef","opt","ZodNativeEnum","nativeEnumValues","promisified","effect","checkCtx","processed","executeRefinement","acc","inner","base","preprocess","newCtx","ZodNaN","inResult","freeze","stringType","booleanType","objectType","DEBUG","__vite_import_meta_env__","fetchWithRetry","maxRetries","timeout","delays","lastError","attempt","controller","timeoutId","response","WindowContextSchema","z.object","z.string","z.boolean","getValidatedBackendConfig","defaultApiUrl","envUseMock","win","rawApiUrl","rawContext","rawUseMock","validated","backendUrl","useMockApi","submitVerification","request","sessionToken","livenessSessionId","createResponse","createData","verificationId","verificationToken","uploadDocument","referenceNumber","pollResult","pollVerificationStatus","storeStatus","imageData","BACKOFF_DELAYS","MAX_POLL_TIME_MS","TERMINAL_STATES","startTime","ellipse1","ellipse0","MAX_RETRY_ATTEMPTS","h3","p0","p1","circle1_stroke_dasharray_value","linearGradient","stop0","stop1","span0","span1","HOLD_DURATION_MS","videoElement","canvasElement","instruction","faceDetected","facePosition","holdStartTime","retryCount","directionalHint","animationFrameId","startFaceDetection","detectLoop","totalBrightness","skinTonePixels","g","brightness","avgBrightness","skinToneRatio","getDirectionalHint","updatePhase","handleSuccess","referenceImage","captureFrame","handleRetry","centerX","centerY","tolerance","sizeMin","sizeMax","handleSkip","t5","t5_value","t4_value","t4","showLiveness","livenessError","showSkipWarning","fallbackVideoElement","fallbackCanvasElement","fallbackStream","fallbackCameraError","isCapturing","handleLivenessComplete","handleLivenessError","handleLivenessSkip","confirmSkip","initializeFallbackCamera","cancelSkip","handleFallbackCapture","dataUrl","handleBack","func","func_1","strong","t_value","hasDispatched","$verificationStatus","img_alt_value","button0_aria_label_value","button1_aria_label_value","t1_changes","isSubmitting","submissionError","fullScreenImage","showExitConfirmation","showResult","images","getDocumentImage","handleSubmit","endUserInfo","frontImage","backImage","handleResultComplete","handleResultRetry","handleEdit","imageType","handleImageClick","closeFullScreen","confirmExit","cancelExit","keydown_handler_1","showText","statusMessage","broofa","hasDocumentSelection","reasonCode","handleNavigate","defaultBranding","brandingStore","branding","hoverColor","darkenColor","hex","percent","factor","newR","newG","newB","Welcome","DocumentSelection","DocumentStart","DocumentPhoto","DocumentUpload","CheckDocument","DocumentPhotoBackStart","DocumentPhotoBack","CheckDocumentPhotoBack","SelfieStart","SelfieCapture","CheckSelfie","ReviewSubmit","Loading","Resubmission","Decline","ErrorPage","Final","filterOutByType","flowIds","stepConfiguration","getNextStepId","globalConfiguration","stepsOrder","filteredFlows","currentFlowIndex","currentStepIdStore","nextStepId","preloadByExtension","preloadStepImages","defaultStepKey","defaultStep","mergedStep","preloadedSteps","updatedStep","updatedConfiguration","keyBy","calculatedKey","toObjByKey","collection","translation","updateConfiguration","configOverrides","configurationResult","currentConfig","mergeConfig","pack","packConfig","packName","updateTranslations","translations","mergeObj","originalConfig","adaptedOverrides","v1adapter","newConfig","documentOptions","docOpts","calculateStepId","uiConfig","backendConfig","general","components","newFlows","flowSteps","flowConfig","stepsConfig","setFlowCallbacks","lang","namespacePath","previous_key","switch_value","div_outro","initialized","configurationStepIds","stepConfig","configurationStepId","$currentStepIdx","link","link_href_value","main","browserLang","configBranding","modalOpened","mounted","useModal","isValidConfigKey","getConfigFromQueryParams","b_uid","b_cid","b_t","b_fn","b_ln","b_fid","b_ph","b_em","b_lang","b_eut","queryParamsMapping","elementId","hostElement","ConfigurationProvider","restConfig","_clientId","_flowName","configPromise","translationsPromise"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,28,30,72,94,95,96,97,98,99,100]}
|