@smileid/web-components 11.4.5 → 11.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/dist/esm/{DocumentCaptureScreens-D2G0NOQr.js → DocumentCaptureScreens-ucJDu5nH.js} +555 -2470
  2. package/dist/esm/DocumentCaptureScreens-ucJDu5nH.js.map +1 -0
  3. package/dist/esm/{EndUserConsent-uHfA3txP.js → EndUserConsent-CsiwoThZ.js} +3 -3
  4. package/dist/esm/{EndUserConsent-uHfA3txP.js.map → EndUserConsent-CsiwoThZ.js.map} +1 -1
  5. package/dist/esm/{Navigation-Bb7MPLE8.js → Navigation-Xg565kcu.js} +28 -22
  6. package/dist/esm/Navigation-Xg565kcu.js.map +1 -0
  7. package/dist/esm/SelfieCaptureScreens-D3KuMzZA.js +11471 -0
  8. package/dist/esm/SelfieCaptureScreens-D3KuMzZA.js.map +1 -0
  9. package/dist/esm/{TotpConsent-Depzg0ti.js → TotpConsent-CRtmtudl.js} +2 -2
  10. package/dist/esm/{TotpConsent-Depzg0ti.js.map → TotpConsent-CRtmtudl.js.map} +1 -1
  11. package/dist/esm/combobox.js +1 -1
  12. package/dist/esm/document.js +1 -1
  13. package/dist/esm/end-user-consent.js +1 -1
  14. package/dist/esm/index-CUwa6MPI.js +1363 -0
  15. package/dist/esm/{index-C4RTMbgw.js.map → index-CUwa6MPI.js.map} +1 -1
  16. package/dist/esm/localisation.js +1 -1
  17. package/dist/esm/main.js +6 -6
  18. package/dist/esm/navigation.js +1 -1
  19. package/dist/esm/package-BmVbDNny.js +2535 -0
  20. package/dist/esm/package-BmVbDNny.js.map +1 -0
  21. package/dist/esm/selfie.js +1 -1
  22. package/dist/esm/smart-camera-web.js +67 -37
  23. package/dist/esm/smart-camera-web.js.map +1 -1
  24. package/dist/esm/totp-consent.js +1 -1
  25. package/dist/smart-camera-web.js +877 -122
  26. package/dist/smart-camera-web.js.map +1 -1
  27. package/dist/types/main.d.ts +11 -0
  28. package/lib/components/navigation/src/Navigation.js +27 -8
  29. package/lib/components/selfie/src/SelfieCaptureScreens.js +56 -8
  30. package/lib/components/selfie/src/enhanced-smartselfie-capture/EnhancedSmartSelfieCapture.tsx +684 -0
  31. package/lib/components/selfie/src/enhanced-smartselfie-capture/EnhancedSmartSelfieConsent.tsx +71 -0
  32. package/lib/components/selfie/src/enhanced-smartselfie-capture/EnhancedSmartSelfieSubmission.tsx +181 -0
  33. package/lib/components/selfie/src/enhanced-smartselfie-capture/OvalProgress.tsx +87 -0
  34. package/lib/components/selfie/src/enhanced-smartselfie-capture/assets/Icon.svg +8 -0
  35. package/lib/components/selfie/src/enhanced-smartselfie-capture/assets/accessories.svg +77 -0
  36. package/lib/components/selfie/src/enhanced-smartselfie-capture/assets/active_liveness_animation.lottie +0 -0
  37. package/lib/components/selfie/src/enhanced-smartselfie-capture/assets/device.svg +12 -0
  38. package/lib/components/selfie/src/enhanced-smartselfie-capture/assets/device_orientation.lottie +0 -0
  39. package/lib/components/selfie/src/enhanced-smartselfie-capture/assets/good.svg +52 -0
  40. package/lib/components/selfie/src/enhanced-smartselfie-capture/assets/id-card.svg +9 -0
  41. package/lib/components/selfie/src/enhanced-smartselfie-capture/assets/illustrations.tsx +852 -0
  42. package/lib/components/selfie/src/enhanced-smartselfie-capture/assets/instructions-img.svg +3 -0
  43. package/lib/components/selfie/src/enhanced-smartselfie-capture/assets/multiple-faces.svg +69 -0
  44. package/lib/components/selfie/src/enhanced-smartselfie-capture/assets/person.svg +6 -0
  45. package/lib/components/selfie/src/enhanced-smartselfie-capture/assets/phone.svg +8 -0
  46. package/lib/components/selfie/src/enhanced-smartselfie-capture/assets/poor-lighting.svg +53 -0
  47. package/lib/components/selfie/src/enhanced-smartselfie-capture/assets/too_dark_animation.lottie +0 -0
  48. package/lib/components/selfie/src/enhanced-smartselfie-capture/components/ActiveLivenessOverlay.tsx +226 -0
  49. package/lib/components/selfie/src/enhanced-smartselfie-capture/components/AlertDisplay.tsx +38 -0
  50. package/lib/components/selfie/src/enhanced-smartselfie-capture/components/BackNavigation.tsx +45 -0
  51. package/lib/components/selfie/src/enhanced-smartselfie-capture/components/CameraPreview.tsx +96 -0
  52. package/lib/components/selfie/src/enhanced-smartselfie-capture/components/CaptureControls.tsx +97 -0
  53. package/lib/components/selfie/src/enhanced-smartselfie-capture/components/CaptureGuidelines.tsx +374 -0
  54. package/lib/components/selfie/src/enhanced-smartselfie-capture/components/ConsentView.tsx +460 -0
  55. package/lib/components/selfie/src/enhanced-smartselfie-capture/components/SubmissionView.tsx +426 -0
  56. package/lib/components/selfie/src/enhanced-smartselfie-capture/components/index.ts +3 -0
  57. package/lib/components/selfie/src/enhanced-smartselfie-capture/constants.ts +23 -0
  58. package/lib/components/selfie/src/enhanced-smartselfie-capture/hooks/index.ts +2 -0
  59. package/lib/components/selfie/src/enhanced-smartselfie-capture/hooks/useCamera.ts +238 -0
  60. package/lib/components/selfie/src/enhanced-smartselfie-capture/hooks/useFaceCapture.ts +1075 -0
  61. package/lib/components/selfie/src/enhanced-smartselfie-capture/index.ts +1 -0
  62. package/lib/components/selfie/src/enhanced-smartselfie-capture/utils/alertMessages.ts +20 -0
  63. package/lib/components/selfie/src/enhanced-smartselfie-capture/utils/canvas.ts +108 -0
  64. package/lib/components/selfie/src/enhanced-smartselfie-capture/utils/faceDetection.ts +545 -0
  65. package/lib/components/selfie/src/enhanced-smartselfie-capture/utils/imageCapture.ts +66 -0
  66. package/lib/components/selfie/src/enhanced-smartselfie-capture/utils/imageQuality.ts +151 -0
  67. package/lib/components/selfie/src/enhanced-smartselfie-capture/utils/index.ts +5 -0
  68. package/lib/components/selfie/src/enhanced-smartselfie-capture/utils/mediapipeManager.ts +215 -0
  69. package/lib/components/selfie/src/selfie-capture-wrapper/SelfieCaptureWrapper.tsx +24 -1
  70. package/lib/components/selfie/src/smartselfie-capture/SmartSelfieCapture.tsx +2 -2
  71. package/lib/components/selfie/src/smartselfie-capture/hooks/useFaceCapture.ts +15 -7
  72. package/lib/components/selfie/src/smartselfie-capture/utils/canvas.ts +4 -6
  73. package/lib/components/signature-pad/package.json +1 -1
  74. package/lib/components/smart-camera-web/src/SmartCameraWeb.js +64 -7
  75. package/lib/domain/localisation/index.js +2 -2
  76. package/package.json +2 -2
  77. package/dist/esm/DocumentCaptureScreens-D2G0NOQr.js.map +0 -1
  78. package/dist/esm/Navigation-Bb7MPLE8.js.map +0 -1
  79. package/dist/esm/SelfieCaptureScreens-Dr7VzON7.js +0 -7651
  80. package/dist/esm/SelfieCaptureScreens-Dr7VzON7.js.map +0 -1
  81. package/dist/esm/index-C4RTMbgw.js +0 -1360
  82. package/dist/esm/package-D6YrpMcO.js +0 -565
  83. package/dist/esm/package-D6YrpMcO.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocumentCaptureScreens-ucJDu5nH.js","sources":["../../lib/components/document/src/document-capture/DocumentCapture.js","../../lib/components/document/src/document-capture-review/DocumentCaptureReview.js","../../lib/domain/file-upload/src/SmartFileUpload.js","../../lib/components/document/src/document-capture-instructions/DocumentCaptureInstructions.js","../../lib/components/document/src/document-capture-instructions/DocumentCaptureInstructions.tsx","../../lib/components/document/src/DocumentCaptureScreens.js"],"sourcesContent":["import SmartCamera from '../../../../domain/camera/src/SmartCamera';\nimport styles from '../../../../styles/src/styles';\nimport '../../../navigation/src';\nimport { t, getDirection } from '../../../../domain/localisation';\nimport { JPEG_QUALITY } from '../../../../domain/constants/src/Constants';\n\nfunction hasMoreThanNColors(data, n = 16) {\n const colors = new Set();\n for (let i = 0; i < Math.min(data.length, 10000); i += 4) {\n // eslint-disable-next-line no-bitwise\n colors.add((data[i] << 16) | (data[i + 1] << 8) | data[i + 2]);\n if (colors.size > n) {\n return true;\n }\n }\n return false;\n}\n\nfunction templateString() {\n return `\n <style>\n .visually-hidden {\n border: 0;\n clip: rect(1px 1px 1px 1px);\n clip: rect(1px, 1px, 1px, 1px);\n height: auto;\n margin: 0;\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n width: 1px;\n }\n\n .mobile-camera-screen video {\n display: block;\n object-fit: cover;\n object-position: center;\n width: 100%;\n }\n\n .id-video.mobile-camera-screen {\n display: flex;\n align-items: stretch;\n justify-content: center;\n max-height: 300px;\n height: 15rem;\n width: 100%;\n overflow: visible;\n margin: 0 auto;\n }\n\n @media (max-width: 600px) {\n .section {\n width: 99%;\n height: 100vh;\n justify-content: center;\n }\n }\n\n\n\n #document-capture-screen,\n #back-of-document-capture-screen {\n display: flex;\n flex-direction: column;\n max-block-size: 100%;\n max-inline-size: 40ch;\n padding: 1rem;\n }\n\n #document-capture-screen header p {\n margin-block: 0 !important;\n }\n\n .padding-bottom-2 {\n padding-bottom: 2rem;\n }\n @media (min-width: 600px) {\n video {\n object-fit: contain;\n -webkit-tap-highlight-color: transparent;\n content: normal;\n }\n\n .id-video {\n width: 99%;\n text-align: center;\n position: relative;\n overflow: hidden;\n }\n\n .id-video-container {\n margin: auto;\n padding: 0px;\n }\n }\n .id-video-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n .id-video {\n width: 100%;\n text-align: center;\n position: relative;\n background: white;\n }\n .video-overlay {\n position: absolute;\n border-style: solid;\n border-color: rgba(0, 0, 0, 0.48);\n box-sizing: border-box;\n inset: 0px;\n }\n\n .video-overlay .inner-border {\n position: absolute;\n border-width: 0.25rem;\n border-color: #9394ab;\n border-style: solid;\n border-radius: 0.25rem;\n inset: -1px;\n }\n canvas {\n width: 100%;\n border-width: 0.25rem;\n border-color: #9394ab;\n border-style: solid;\n border-radius: 0.25rem;\n }\n\n .description {\n align-self: center;\n padding-bottom: 1.75rem;\n }\n .reset-margin-block {\n margin-block: 0;\n }\n .align-items-center {\n align-items: center;\n }\n .id-side {\n padding-bottom: 0.5rem;\n }\n\n .circle-progress {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 10rem;\n }\n\n .portrait .sticky {\n position: -webkit-sticky; /* Safari */\n position: sticky;\n bottom: 0;\n }\n .video-footer {\n background-color: rgba(255, 255, 255, 0.17);\n padding-top: 10px;\n }\n </style>\n ${styles(this.themeColor)}\n <div id='document-capture-screen' class='flow center flex-column' dir='${this.direction}'>\n ${this.showNavigation ? `<smileid-navigation theme-color='${this.themeColor}' show-navigation ${this.hideBack ? 'hide-back' : ''}></smileid-navigation>` : ''}\n <h2 class='text-base font-bold title-color'>${this.documentName}</h2>\n <div class=\"circle-progress\" id=\"loader\">\n ${this.cameraError ? '' : '<p class=\"spinner\"></p>'}\n ${this.cameraError ? `<p style=\"--flow-space: 4rem\" class='color-red | center'>${this.cameraError}</p>` : `<p style=\"--flow-space: 4rem\">${t('document.capture.checkingPermissions')}</p>`}\n </div>\n <div class='section | flow ${this.isPortraitCaptureView ? 'portrait' : 'landscape'}' ${this.cameraError ? 'hidden' : ''}>\n <div class='id-video-container'>\n <div class='id-video ${this.isPortraitCaptureView ? 'portrait' : 'landscape'}' hidden>\n </div>\n <div class='video-footer sticky'>\n <h2 class='text-base font-bold title-color reset-margin-block id-side'>${this.title}</h2>\n <h4 class='text-base font-normal title-color description reset-margin-block'>${t('document.capture.instructionText')}</h4>\n <div class='actions' hidden>\n <button id='capture-id-image' class='button icon-btn | center' type='button'>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"70\" height=\"70\" viewBox=\"0 0 70 70\" fill=\"none\" aria-hidden=\"true\" focusable=\"false\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M35 70C54.33 70 70 54.33 70 35C70 15.67 54.33 0 35 0C15.67 0 0 15.67 0 35C0 54.33 15.67 70 35 70ZM61 35C61 49.3594 49.3594 61 35 61C20.6406 61 9 49.3594 9 35C9 20.6406 20.6406 9 35 9C49.3594 9 61 20.6406 61 35ZM65 35C65 51.5685 51.5685 65 35 65C18.4315 65 5 51.5685 5 35C5 18.4315 18.4315 5 35 5C51.5685 5 65 18.4315 65 35Z\" fill=\"${this.themeColor}\"/>\n </svg>\n <span class='visually-hidden'>${t('document.capture.captureButton')}</span>\n </button>\n </div>\n ${this.hideAttribution ? '' : '<powered-by-smile-id></powered-by-smile-id>'}\n </div>\n </div>\n </div>\n </div>\n `;\n}\n\nconst documentCaptureScale = 0.6;\n\nclass DocumentCapture extends HTMLElement {\n constructor() {\n super();\n this.templateString = templateString.bind(this);\n this.render = () => this.templateString();\n\n this.attachShadow({ mode: 'open' });\n this.IdSides = {\n back: 'Back',\n front: 'Front',\n };\n }\n\n connectedCallback() {\n const template = document.createElement('template');\n template.innerHTML = this.render();\n this.shadowRoot.innerHTML = '';\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n this.setUpEventListeners();\n }\n\n async getUserMedia() {\n if (SmartCamera.stream) {\n return;\n }\n if (!this.hasAttribute('data-camera-error')) return;\n\n try {\n await SmartCamera.getMedia({\n audio: false,\n video: {\n ...SmartCamera.environmentOptions,\n aspectRatio: { ideal: 16 / 9 },\n },\n });\n } catch (error) {\n console.error(error.constraint);\n console.error(error.message);\n }\n\n this.handleIDStream(SmartCamera.stream);\n }\n\n _captureIDImage() {\n const imageDetails = this._drawIDImage();\n this._stopIDVideoStream();\n\n this.dispatchEvent(\n new CustomEvent('document-capture.publish', {\n detail: {\n ...imageDetails,\n },\n }),\n );\n }\n\n _drawIDImage(video = this._IDVideo) {\n const canvas = document.createElement('canvas');\n if (this.isPortraitCaptureView) {\n canvas.width = video.videoWidth;\n canvas.height = (canvas.width * 16) / 9;\n\n const previewCanvas = document.createElement('canvas');\n previewCanvas.width = canvas.width;\n previewCanvas.height = canvas.height;\n\n this.updatePortraitId(canvas, video, 1, 1);\n this.updatePortraitId(previewCanvas, video);\n const image = canvas.toDataURL('image/jpeg', JPEG_QUALITY);\n const previewImage = previewCanvas.toDataURL('image/jpeg', JPEG_QUALITY);\n return {\n image,\n originalHeight: canvas.height,\n originalWidth: canvas.width,\n previewImage,\n ...this.idCardRegion,\n };\n }\n\n canvas.width = 2240;\n canvas.height = 1260;\n\n const height = canvas.width / (video.videoWidth / video.videoHeight);\n canvas.height = height;\n\n const previewCanvas = document.createElement('canvas');\n previewCanvas.height = canvas.height;\n previewCanvas.width = canvas.width;\n const isPortrait = video.videoWidth < video.videoHeight;\n if (isPortrait) {\n const intermediateCanvas = document.createElement('canvas');\n previewCanvas.height = canvas.width / 1.75;\n canvas.width = 2240;\n canvas.height = canvas.width / 1.77;\n this._capturePortraitToLandscapeImage(intermediateCanvas, video);\n this._drawLandscapeImageFromCanvas(canvas, intermediateCanvas, 1, 1);\n this._drawLandscapeImageFromCanvas(previewCanvas, intermediateCanvas);\n } else {\n this._drawLandscapeImage(canvas, video, 1, 1);\n this._drawLandscapeImage(previewCanvas, video);\n }\n const image = canvas.toDataURL('image/jpeg', JPEG_QUALITY);\n\n const previewImage = previewCanvas.toDataURL('image/jpeg', JPEG_QUALITY);\n return {\n image,\n originalHeight: canvas.height,\n originalWidth: canvas.width,\n previewImage,\n ...this.idCardRegion,\n };\n }\n\n _drawImage(canvas, enableImageTests = true, video = SmartCamera.stream) {\n this.resetErrorMessage();\n const context = canvas.getContext('2d');\n\n context.drawImage(\n video,\n 0,\n 0,\n video.videoWidth,\n video.videoHeight,\n 0,\n 0,\n canvas.width,\n canvas.height,\n );\n\n if (enableImageTests) {\n const imageData = context.getImageData(0, 0, canvas.width, canvas.height);\n\n const hasEnoughColors = hasMoreThanNColors(imageData.data);\n\n if (hasEnoughColors) {\n return context;\n }\n throw new Error(\n 'Unable to capture webcam images - Please try another device',\n );\n } else {\n return context;\n }\n }\n\n handleIDStream(stream) {\n try {\n const videoExists = this.shadowRoot.querySelector('canvas');\n if (videoExists) {\n // remove canvas\n videoExists.remove();\n }\n let video = null;\n let canvas = null;\n video = document.createElement('video');\n canvas = document.createElement('canvas');\n const videoContainer = this.shadowRoot.querySelector(\n '.id-video-container',\n );\n\n video.muted = true;\n video.setAttribute('muted', 'true');\n\n video.autoplay = true;\n video.playsInline = true;\n if ('srcObject' in video) {\n video.srcObject = stream;\n } else {\n video.src = window.URL.createObjectURL(stream);\n }\n\n canvas.width = videoContainer.clientWidth;\n canvas.height = (videoContainer.clientWidth * 9) / 16;\n if (this.isPortraitCaptureView) {\n canvas.height = (videoContainer.clientWidth * 16) / 9;\n }\n\n video.onloadedmetadata = () => {\n video.play();\n\n this.shadowRoot.querySelector('#loader').hidden = true;\n this.shadowRoot.querySelector('.id-video').hidden = false;\n this.shadowRoot.querySelector('.actions').hidden = false;\n if (!videoExists) {\n videoContainer.prepend(canvas);\n }\n };\n\n const onVideoStart = () => {\n if (video.paused || video.ended) return;\n video.removeEventListener('playing', onVideoStart);\n const aspectRatio = video.videoWidth / video.videoHeight;\n const portrait = aspectRatio < 1;\n if (this.isPortraitCaptureView) {\n this.updatePortraitId(canvas, video);\n requestAnimationFrame(onVideoStart);\n return;\n }\n\n if (portrait) {\n videoContainer.classList.add('mobile-camera-screen');\n const intermediateCanvas = document.createElement('canvas');\n this._capturePortraitToLandscapeImage(intermediateCanvas, video);\n this._drawLandscapeImageFromCanvas(canvas, intermediateCanvas);\n } else {\n this._drawLandscapeImage(canvas, video);\n }\n requestAnimationFrame(onVideoStart);\n };\n\n video.addEventListener('playing', onVideoStart);\n\n this._IDStream = stream;\n this._IDVideo = video;\n } catch (error) {\n this.setAttribute(\n 'data-camera-error',\n SmartCamera.handleCameraError(error),\n );\n if (error.name !== 'AbortError') {\n console.error(error);\n }\n SmartCamera.stopMedia();\n }\n }\n\n _drawLandscapeImage(\n canvas,\n video = this._IDVideo,\n scaleHeight = documentCaptureScale,\n scaleWidth = documentCaptureScale,\n ) {\n const heightScaleFactor = this.height\n ? this.height / video.videoHeight\n : scaleHeight;\n const widthScaleFactor = this.width\n ? this.width / video.videoWidth\n : scaleWidth;\n const scaleHeightOffset = (1 - scaleHeight) / 2;\n const scaleWidthOffset = (1 - scaleWidth) / 2;\n const width = video.videoWidth * widthScaleFactor;\n const height = video.videoHeight * heightScaleFactor;\n const startX = video.videoWidth * scaleWidthOffset;\n const startY = video.videoHeight * scaleHeightOffset;\n\n canvas\n .getContext('2d')\n .drawImage(\n video,\n startX,\n startY,\n width,\n height,\n 0,\n 0,\n canvas.width,\n canvas.height,\n );\n }\n\n _capturePortraitToLandscapeImage(canvas, video = this._IDVideo) {\n const { videoHeight, videoWidth } = video;\n const cropWidth = videoWidth;\n const cropHeight = (videoWidth * 9) / 16; // convert to landscape aspect ratio\n const startX = 0;\n const startY = (videoHeight - cropHeight) / 2;\n\n canvas.width = cropWidth;\n canvas.height = cropHeight;\n\n canvas\n .getContext('2d')\n .drawImage(\n video,\n startX,\n startY,\n cropWidth,\n cropHeight,\n 0,\n 0,\n canvas.width,\n canvas.height,\n );\n }\n\n _drawLandscapeImageFromCanvas(\n canvas,\n sourceCanvas,\n scaleHeight = documentCaptureScale,\n scaleWidth = documentCaptureScale,\n ) {\n const heightScaleFactor = this.height\n ? this.height / sourceCanvas.height\n : scaleHeight;\n const widthScaleFactor = this.width\n ? this.width / sourceCanvas.width\n : scaleWidth;\n const scaleHeightOffset = (1 - scaleHeight) / 2;\n const scaleWidthOffset = (1 - scaleWidth) / 2;\n const width = sourceCanvas.width * widthScaleFactor;\n const height = sourceCanvas.height * heightScaleFactor;\n const startX = sourceCanvas.width * scaleWidthOffset;\n const startY = sourceCanvas.height * scaleHeightOffset;\n\n canvas\n .getContext('2d')\n .drawImage(\n sourceCanvas,\n startX,\n startY,\n width,\n height,\n 0,\n 0,\n canvas.width,\n canvas.height,\n );\n }\n\n _drawPortraitToLandscapeImage(canvas, video = this._IDVideo) {\n const { videoHeight, videoWidth } = video;\n const cropWidth = 600;\n const cropHeight = 400;\n\n canvas.width = cropWidth;\n canvas.height = cropHeight;\n\n const startX = (videoWidth - cropWidth) / 2;\n const startY = (videoHeight - cropHeight) / 2;\n\n canvas\n .getContext('2d')\n .drawImage(\n video,\n startX,\n startY,\n cropWidth,\n cropHeight,\n 0,\n 0,\n canvas.width,\n canvas.height,\n );\n }\n\n updatePortraitId(\n destinationCanvas,\n video = this._IDVideo,\n scaleHeight = documentCaptureScale,\n scaleWidth = documentCaptureScale,\n ) {\n const { videoWidth, videoHeight } = video;\n\n if (videoWidth && videoHeight) {\n const intermediateCanvas = document.createElement('canvas');\n const aspectRatio = 9 / 16;\n let cropWidth;\n let cropHeight;\n let offsetX;\n let offsetY;\n\n if (videoWidth / videoHeight > aspectRatio) {\n // we scale the canvas to portrait aspect ratio\n cropHeight = videoHeight;\n cropWidth = cropHeight * aspectRatio;\n offsetX = (videoWidth - cropWidth) / 2;\n offsetY = 0;\n } else {\n // video already has portrait aspect ratio\n cropWidth = videoWidth;\n cropHeight = cropWidth;\n offsetX = 0;\n offsetY = 0;\n }\n\n intermediateCanvas.height = cropHeight;\n intermediateCanvas.width = cropWidth;\n // draw the video frame onto the intermediate canvas\n intermediateCanvas\n .getContext('2d')\n .drawImage(\n video,\n offsetX,\n offsetY,\n cropWidth,\n cropHeight,\n 0,\n 0,\n intermediateCanvas.width,\n intermediateCanvas.height,\n );\n\n // draw the intermediate canvas onto the destination canvas\n // we scale image based on the scaleHeight and scaleWidth\n const heightScaleFactor = this.height\n ? this.height / cropWidth\n : scaleHeight;\n const widthScaleFactor = this.width\n ? this.width / cropHeight\n : scaleWidth;\n const scaleHeightOffset = (1 - scaleHeight) / 2;\n const scaleWidthOffset = (1 - scaleWidth) / 2;\n const width = cropWidth * widthScaleFactor;\n const height = cropHeight * heightScaleFactor;\n const startX = cropWidth * scaleWidthOffset;\n const startY = cropHeight * scaleHeightOffset;\n destinationCanvas\n .getContext('2d')\n .drawImage(\n intermediateCanvas,\n startX,\n startY,\n width,\n height,\n 0,\n 0,\n destinationCanvas.width,\n destinationCanvas.height,\n );\n }\n }\n\n _stopIDVideoStream(stream = this._IDStream) {\n stream.getTracks().forEach((track) => track.stop());\n }\n\n setUpEventListeners() {\n this.captureIDImage = this.shadowRoot.querySelector('#capture-id-image');\n this.navigation = this.shadowRoot.querySelector('smileid-navigation');\n\n if (SmartCamera.stream) {\n this.handleIDStream(SmartCamera.stream);\n }\n\n this.navigation?.addEventListener('navigation.back', () => {\n this.handleBackEvents();\n });\n\n this.navigation?.addEventListener('navigation.close', () => {\n this.handleCloseEvents();\n });\n\n this.captureIDImage.addEventListener('click', () => {\n this._captureIDImage();\n });\n\n this.getUserMedia();\n }\n\n get hideBack() {\n return this.hasAttribute('hide-back-to-host');\n }\n\n get showNavigation() {\n return this.hasAttribute('show-navigation');\n }\n\n get themeColor() {\n return this.getAttribute('theme-color') || '#001096';\n }\n\n get hideAttribution() {\n return this.hasAttribute('hide-attribution');\n }\n\n get documentCaptureModes() {\n return this.getAttribute('document-capture-modes') || 'camera';\n }\n\n get supportBothCaptureModes() {\n const value = this.documentCaptureModes;\n return value.includes('camera') && value.includes('upload');\n }\n\n get title() {\n return (\n this.getAttribute('title') ||\n `${this.IdSides[this.sideOfId]} of ${this.documentName}`\n );\n }\n\n get height() {\n return this.getAttribute('height');\n }\n\n get width() {\n return this.getAttribute('width');\n }\n\n get hidden() {\n return this.getAttribute('hidden');\n }\n\n get sideOfId() {\n return (this.getAttribute('side-of-id') || 'front').toLowerCase();\n }\n\n get isFrontOfId() {\n return this.sideOfId === 'front';\n }\n\n get isBackOfId() {\n return !this.isFrontOfId;\n }\n\n get direction() {\n return this.getAttribute('dir') || getDirection() || 'ltr';\n }\n\n get documentType() {\n return this.getAttribute('document-type') || '';\n }\n\n get documentName() {\n return this.getAttribute('document-name') || t('document.name.default');\n }\n\n get isPortraitCaptureView() {\n return this.getAttribute('document-type') === 'GREEN_BOOK';\n }\n\n get cameraError() {\n return this.getAttribute('data-camera-error');\n }\n\n static get observedAttributes() {\n return [\n 'data-camera-error',\n 'data-camera-ready',\n 'document-name',\n 'document-type',\n 'hidden',\n 'hide-back-to-host',\n 'show-navigation',\n 'title',\n ];\n }\n\n attributeChangedCallback(name) {\n switch (name) {\n case 'data-camera-error':\n case 'data-camera-ready':\n case 'document-name':\n case 'document-type':\n case 'hidden':\n case 'title':\n this.connectedCallback();\n break;\n default:\n break;\n }\n }\n\n handleBackEvents() {\n this.dispatchEvent(new CustomEvent('document-capture.cancelled'));\n SmartCamera.stopMedia();\n }\n\n handleCloseEvents() {\n this.dispatchEvent(new CustomEvent('document-capture.close'));\n SmartCamera.stopMedia();\n }\n}\n\nif ('customElements' in window && !customElements.get('document-capture')) {\n window.customElements.define('document-capture', DocumentCapture);\n}\n\nexport default DocumentCapture;\n","import styles from '../../../../styles/src/styles';\nimport '../../../navigation/src';\nimport { t, getDirection } from '../../../../domain/localisation';\n\nfunction templateString() {\n return `\n <style>\n .retake-photo.button[data-variant~=\"ghost\"] {\n color: #FF5805;\n }\n\n\n @media (max-width: 600px) {\n .id-camera-screen {\n width: 100%;\n height: 100vh;\n }\n \n .section {\n width: 100%;\n justify-content: center;\n }\n }\n \n .id-image-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 1.75rem;\n }\n\n .id-image {\n width: 100%;\n text-align: center;\n position: relative;\n background: white;\n }\n img {\n height: 100%;\n min-height: 100px;\n width: 98%;\n }\n\n .action-buttons {\n width: 80%;\n }\n\n\n .icon-btn {\n appearance: none;\n background: none;\n border: none;\n color: hsl(0deg 0% 94%);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px 8px;\n }\n .justify-right {\n justify-content: end !important;\n }\n .nav {\n display: flex;\n justify-content: space-between;\n }\n\n .back-wrapper {\n display: flex;\n align-items: center;\n }\n\n .back-button-text {\n font-size: 11px;\n line-height: 11px;\n color: rgb(21, 31, 114);\n }\n\n\n\n .tips,\n .powered-by {\n align-items: center;\n border-radius: 0.25rem;\n color: #4e6577;\n display: flex;\n justify-content: center;\n letter-spacing: 0.075em;\n }\n\n .powered-by {\n box-shadow: 0px 2.57415px 2.57415px rgba(0, 0, 0, 0.06);\n display: inline-flex;\n font-size: 0.5rem;\n }\n\n .tips {\n margin-left: auto;\n margin-right: auto;\n max-width: 17rem;\n }\n\n .tips > * + *,\n .powered-by > * + * {\n display: inline-block;\n margin-left: 0.5em;\n }\n\n .powered-by .company {\n color: #18406d;\n font-weight: 700;\n letter-spacing: 0.15rem;\n }\n\n .logo-mark {\n background-color: #004071;\n display: inline-block;\n padding: 0.25em 0.5em;\n }\n\n .logo-mark svg {\n height: auto;\n justify-self: center;\n width: 0.75em;\n }\n \n #document-capture-review-screen {\n display: flex;\n flex-direction: column;\n max-block-size: 100%;\n max-inline-size: 40ch;\n padding: 1rem;\n }\n\n #document-capture-review-screen .id-image-container.landscape {\n height: auto;\n }\n\n #document-capture-review-screen header p {\n margin-block: 0 !important;\n }\n\n .description {\n color: var(--neutral-off-black, #2D2B2A);\n text-align: center;\n\n /* p */\n font-family: DM Sans;\n font-size: 0.875rem;\n font-style: normal;\n font-weight: 400;\n line-height: 18px;\n }\n\n .padding-bottom-2 {\n padding-bottom: 2rem;\n }\n img {\n border-width: 0.25rem;\n border-color: #9394ab;\n border-style: solid;\n border-radius: 0.25rem;\n }\n\n .instructions-wrapper {\n display: inline-flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 2rem;\n margin-block-start: 2rem;\n margin-block-end: 4rem;\n }\n .instructions {\n display: flex;\n align-items: center;\n text-align: initial;\n }\n\n .instructions svg {\n flex-shrink: 0;\n margin-inline-end: 2rem;\n }\n\n .instructions p {\n margin-block: 0;\n }\n\n .instruction-body {\n font-size: 0.75rem;\n }\n\n h1 {\n color: var(--web-digital-blue, #001096);\n text-align: center;\n\n /* h1 */\n font-size: 1.25rem;\n font-style: normal;\n font-weight: 700;\n line-height: 36px; /* 150% */\n }\n\n .p2 {\n font-size: 1rem;\n font-style: normal;\n font-weight: 500;\n line-height: 1rem;\n }\n\n .instruction-header {\n color: var(--web-digital-blue, #001096);\n }\n\n .h2 {\n font-size: 1rem;\n font-style: normal;\n font-weight: 700;\n line-height: 1.5rem;\n }\n </style>\n ${styles(this.themeColor)}\n <div id='document-capture-review-screen' class='flow center' dir='${this.direction}'>\n ${this.showNavigation ? `<smileid-navigation show-navigation hide-back></smileid-navigation>` : ''}\n <h1 class=\"header-title title-color\">\n ${t('document.review.question')}\n </h1>\n <p class=\"description\">${t('document.review.description')}</p>\n <div class='section | flow'>\n <div class='id-image-container'>\n <div class='id-image'>\n <div class='video-overlay'></div>\n ${this.imageSrc ? `<img alt='your ID card' id='document-capture-review-image' src='${this.imageSrc}' />` : ''}\n </div>\n <div class='flow action-buttons'>\n <button data-variant='solid full-width' class='button' type='button' id='select-id-image'>\n ${t('document.review.acceptButton')}\n </button>\n <button data-variant='ghost full-width' class='button retake-photo' type='button' id='re-capture-id-image'>\n ${t('document.review.retakeButton')}\n </button>\n </div>\n </div>\n\n ${\n this.hideAttribution\n ? ''\n : `\n <powered-by-smile-id></powered-by-smile-id>\n `\n }\n </div>\n </div>\n `;\n}\n\nclass IdReview extends HTMLElement {\n constructor() {\n super();\n this.templateString = templateString.bind(this);\n this.render = () => this.templateString();\n\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n const template = document.createElement('template');\n template.innerHTML = this.render();\n this.shadowRoot.innerHTML = '';\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n this.setUpEventListeners();\n }\n\n static get observedAttributes() {\n return ['hide-back-to-host', 'show-navigation', 'data-image'];\n }\n\n get hideBack() {\n return this.hasAttribute('hide-back-to-host');\n }\n\n get showNavigation() {\n return this.hasAttribute('show-navigation');\n }\n\n get themeColor() {\n return this.getAttribute('theme-color') || '#001096';\n }\n\n get hideAttribution() {\n return this.hasAttribute('hide-attribution');\n }\n\n get imageSrc() {\n return this.getAttribute('data-image');\n }\n\n get title() {\n return this.getAttribute('title') || t('document.title.front');\n }\n\n get direction() {\n return this.getAttribute('dir') || getDirection() || 'ltr';\n }\n\n handleBackEvents() {\n this.dispatchEvent(new CustomEvent('document-capture-review.cancelled'));\n }\n\n handleCloseEvents() {\n this.dispatchEvent(new CustomEvent('document-capture-review.close'));\n }\n\n attributeChangedCallback(name) {\n switch (name) {\n case 'data-image':\n case 'hide-back-to-host':\n case 'show-navigation':\n this.shadowRoot.innerHTML = this.render();\n this.setUpEventListeners();\n break;\n default:\n break;\n }\n }\n\n setUpEventListeners() {\n this.selectIDImage = this.shadowRoot.querySelector('#select-id-image');\n this.reCaptureIDImage = this.shadowRoot.querySelector(\n '#re-capture-id-image',\n );\n this.navigation = this.shadowRoot.querySelector('smileid-navigation');\n this.navigation?.addEventListener('navigation.back', () => {\n this.handleBackEvents();\n });\n\n this.navigation?.addEventListener('navigation.close', () => {\n this.handleCloseEvents();\n });\n\n this.selectIDImage.addEventListener('click', () => {\n this.dispatchEvent(\n new CustomEvent('document-capture-review.accepted', {\n detail: {},\n }),\n );\n });\n this.reCaptureIDImage.addEventListener('click', () => {\n this.dispatchEvent(\n new CustomEvent('document-capture-review.rejected', {\n detail: {},\n }),\n );\n });\n }\n}\n\nif (\n 'customElements' in window &&\n !customElements.get('document-capture-review')\n) {\n window.customElements.define('document-capture-review', IdReview);\n}\n\nexport default IdReview;\n","import { t, tHtml } from '../../localisation';\n\nclass SmartFileUpload {\n static memoryLimit = 10240000;\n\n static supportedTypes = ['image/jpeg', 'image/png'];\n\n static getHumanSize(numberOfBytes) {\n // Approximate to the closest prefixed unit\n const units = ['B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n const exponent = Math.min(\n Math.floor(Math.log(numberOfBytes) / Math.log(1024)),\n units.length - 1,\n );\n const approx = numberOfBytes / 1024 ** exponent;\n const output =\n exponent === 0\n ? `${numberOfBytes} bytes`\n : `${approx.toFixed(0)} ${units[exponent]}`;\n\n return output;\n }\n\n static getData(file) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = (e) => {\n resolve(e.target.result);\n };\n reader.onerror = () => {\n reject(new Error(t('fileUpload.error.readingFile')));\n };\n reader.readAsDataURL(file);\n });\n }\n\n static async retrieve(files) {\n if (files.length > 1) {\n throw new Error(t('fileUpload.error.multipleFiles'));\n }\n\n const file = files[0];\n\n if (!SmartFileUpload.supportedTypes.includes(file.type)) {\n throw new Error(t('fileUpload.error.unsupportedFormat'));\n }\n\n if (file.size > SmartFileUpload.memoryLimit) {\n throw new Error(\n tHtml('fileUpload.error.fileTooLarge', {\n filename: file.name,\n size: SmartFileUpload.getHumanSize(SmartFileUpload.memoryLimit),\n }),\n );\n }\n\n const imageAsDataUrl = await SmartFileUpload.getData(file);\n\n return imageAsDataUrl;\n }\n}\n\nexport default SmartFileUpload;\n","import SmartFileUpload from '../../../../domain/file-upload/src/SmartFileUpload';\nimport styles from '../../../../styles/src/styles';\nimport '../../../navigation/src';\nimport { t, escapeHtml, getDirection } from '../../../../domain/localisation';\n\nfunction frontDocumentIcon() {\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"173\" height=\"103\" viewBox=\"0 0 173 103\" fill=\"none\">\n <path d=\"M15.3799 21.2759C15.3799 16.8576 18.9616 13.2759 23.3799 13.2759H64.2764C68.6947 13.2759 72.2764 16.8576 72.2764 21.2759V73.5517C72.2764 77.97 68.6947 81.5517 64.2764 81.5517H23.3799C18.9616 81.5517 15.3799 77.97 15.3799 73.5517V21.2759Z\" fill=\"#F6C969\"/>\n <g filter=\"url(#filter0_d_1281_4127)\">\n <path d=\"M60.2117 80.8741C60.2117 80.8741 49.3661 81.5134 44.1952 81.5134C39.0242 81.5134 28.1787 80.8741 28.1787 80.8741C28.1787 80.8741 34.6256 78.4515 35.3307 76.8701C35.7001 76.0962 35.8344 73.2362 35.9015 70.578C35.9687 67.9199 35.9015 65.5646 35.9015 65.5646L44.1952 65.6992L52.4888 65.5646C52.4888 65.5646 52.3881 72.0921 52.7575 75.3223C52.7813 75.8503 52.8832 76.372 53.0597 76.8701C53.7984 78.4515 60.2117 80.8741 60.2117 80.8741Z\" fill=\"url(#paint0_linear_1281_4127)\"/>\n <path d=\"M31.3688 47.126C31.3688 47.126 29.1191 46.3184 28.4812 46.6549C27.8432 46.9914 26.8695 48.6737 27.0038 50.6589C27.0373 51.1636 27.4403 53.6872 29.1527 54.9321C29.6564 55.2686 30.1265 56.951 31.2345 57.1865C32.3426 57.422 32.5105 56.6818 32.5105 56.6818L31.3688 47.126Z\" fill=\"url(#paint1_linear_1281_4127)\"/>\n <path style=\"mix-blend-mode:multiply\" opacity=\"0.6\" d=\"M31.906 51.6683C31.906 51.6683 30.6637 47.7652 28.9848 48.3035C27.3059 48.8419 27.8767 51.6009 27.8767 51.6009C27.8767 51.6009 28.2461 49.0438 29.7571 49.8849C30.5629 50.2887 29.2534 51.029 29.2534 52.072C29.2534 53.1151 30.16 54.36 30.4622 53.6871C30.7644 53.0142 30.9659 50.6252 31.906 51.6683Z\" fill=\"url(#paint2_linear_1281_4127)\"/>\n <path style=\"mix-blend-mode:multiply\" opacity=\"0.6\" d=\"M30.462 53.687C30.7306 52.7785 30.932 51.399 31.4357 51.5335C31.5749 51.5809 31.6986 51.6655 31.7933 51.7781C31.888 51.8908 31.9501 52.0273 31.973 52.1729L31.8386 51.1971C31.8386 51.1971 30.8985 49.683 29.7568 50.9952\" fill=\"url(#paint3_linear_1281_4127)\"/>\n <path d=\"M57.3575 47.126C57.3575 47.126 59.6407 46.3184 60.2787 46.6549C60.9167 46.9914 61.8568 48.6737 61.7561 50.6589C61.7225 51.1636 61.286 53.6872 59.5736 54.9321C59.1035 55.2686 58.5998 56.951 57.4918 57.1865C56.3837 57.422 56.2158 56.6818 56.2158 56.6818L57.3575 47.126Z\" fill=\"url(#paint4_linear_1281_4127)\"/>\n <path style=\"mix-blend-mode:multiply\" opacity=\"0.6\" d=\"M56.8203 51.6683C56.8203 51.6683 58.0627 47.7652 59.7415 48.3035C61.4204 48.8419 60.8832 51.6009 60.8832 51.6009C60.8832 51.6009 60.5138 49.0438 58.9693 49.8849C58.1634 50.2887 59.4729 51.029 59.4729 52.072C59.4729 53.1151 58.5663 54.36 58.2641 53.6871C57.9619 53.0142 57.7605 50.6252 56.8203 51.6683Z\" fill=\"url(#paint5_linear_1281_4127)\"/>\n <path style=\"mix-blend-mode:multiply\" opacity=\"0.6\" d=\"M58.264 56.749C58.1297 56.9509 57.0552 57.5229 56.4844 56.9509C55.9135 56.3789 56.6858 52.7113 56.753 52.173C56.753 52.173 56.5515 56.177 56.8201 56.3452C56.4172 56.1097 58.2304 56.7826 58.264 56.749Z\" fill=\"url(#paint6_linear_1281_4127)\"/>\n <path d=\"M64.4757 81.9845H23.9141L32.5771 78.6534L33.5508 75.457C34.2424 75.3865 34.938 75.364 35.6326 75.3897L35.4312 76.5673C35.4312 76.5673 37.6473 78.8553 44.1949 78.8553C50.0038 78.8553 52.9586 76.5673 52.9586 76.5673L52.7908 75.5243V75.3897C53.4854 75.364 54.181 75.3865 54.8725 75.457L55.8463 78.6534L64.4757 81.9845Z\" fill=\"#151F72\"/>\n <path style=\"mix-blend-mode:multiply\" opacity=\"0.6\" d=\"M33.5509 75.4568C33.383 75.9951 37.7817 79.8309 44.0607 79.8309C48.0849 79.8356 51.9521 78.2662 54.839 75.4568L55.8128 78.6533C55.8128 78.6533 48.7615 81.5133 43.7249 81.5133C38.6883 81.5133 32.5771 78.6533 32.5771 78.6533L33.5509 75.4568Z\" fill=\"url(#paint7_linear_1281_4127)\"/>\n <path d=\"M56.115 37.1326C51.4478 29.6629 38.8898 29.4947 33.2487 35.854C27.6077 42.2133 30.8983 45.1406 31.1334 54.6292C31.3348 60.0464 31.5699 63.613 35.0955 66.6076C36.1386 67.4711 37.2258 68.2797 38.3525 69.0302C43.7249 73.0679 51.4813 69.5349 53.5296 66.473C57.2231 63.6467 56.8537 60.7866 57.2902 54.7301C57.626 46.8903 60.0436 43.2227 56.115 37.1326Z\" fill=\"url(#paint8_linear_1281_4127)\"/>\n </g>\n <g filter=\"url(#filter1_d_1281_4127)\">\n <mask id=\"path-12-inside-1_1281_4127\" fill=\"white\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M18 0C10.268 0 4 6.26801 4 14V80.8276C4 88.5596 10.268 94.8276 18 94.8276H155C162.732 94.8276 169 88.5596 169 80.8276V14C169 6.26801 162.732 0 155 0H18ZM23.7858 14.4876C19.3676 14.4876 15.7858 18.0693 15.7858 22.4876V72.3401C15.7858 76.7584 19.3676 80.3401 23.7858 80.3401H62.7858C67.2041 80.3401 70.7858 76.7584 70.7858 72.3401V22.4876C70.7858 18.0693 67.2041 14.4876 62.7858 14.4876H23.7858Z\"/>\n </mask>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M18 0C10.268 0 4 6.26801 4 14V80.8276C4 88.5596 10.268 94.8276 18 94.8276H155C162.732 94.8276 169 88.5596 169 80.8276V14C169 6.26801 162.732 0 155 0H18ZM23.7858 14.4876C19.3676 14.4876 15.7858 18.0693 15.7858 22.4876V72.3401C15.7858 76.7584 19.3676 80.3401 23.7858 80.3401H62.7858C67.2041 80.3401 70.7858 76.7584 70.7858 72.3401V22.4876C70.7858 18.0693 67.2041 14.4876 62.7858 14.4876H23.7858Z\" fill=\"#F9F0E7\"/>\n <path d=\"M5.5 14C5.5 7.09644 11.0964 1.5 18 1.5V-1.5C9.43959 -1.5 2.5 5.43958 2.5 14H5.5ZM5.5 80.8276V14H2.5V80.8276H5.5ZM18 93.3276C11.0964 93.3276 5.5 87.7311 5.5 80.8276H2.5C2.5 89.388 9.43958 96.3276 18 96.3276V93.3276ZM155 93.3276H18V96.3276H155V93.3276ZM167.5 80.8276C167.5 87.7311 161.904 93.3276 155 93.3276V96.3276C163.56 96.3276 170.5 89.388 170.5 80.8276H167.5ZM167.5 14V80.8276H170.5V14H167.5ZM155 1.5C161.904 1.5 167.5 7.09644 167.5 14H170.5C170.5 5.43959 163.56 -1.5 155 -1.5V1.5ZM18 1.5H155V-1.5H18V1.5ZM17.2858 22.4876C17.2858 18.8977 20.196 15.9876 23.7858 15.9876V12.9876C18.5391 12.9876 14.2858 17.2409 14.2858 22.4876H17.2858ZM17.2858 72.3401V22.4876H14.2858V72.3401H17.2858ZM23.7858 78.8401C20.196 78.8401 17.2858 75.9299 17.2858 72.3401H14.2858C14.2858 77.5868 18.5391 81.8401 23.7858 81.8401V78.8401ZM62.7858 78.8401H23.7858V81.8401H62.7858V78.8401ZM69.2858 72.3401C69.2858 75.9299 66.3757 78.8401 62.7858 78.8401V81.8401C68.0325 81.8401 72.2858 77.5868 72.2858 72.3401H69.2858ZM69.2858 22.4876V72.3401H72.2858V22.4876H69.2858ZM62.7858 15.9876C66.3757 15.9876 69.2858 18.8977 69.2858 22.4876H72.2858C72.2858 17.2409 68.0325 12.9876 62.7858 12.9876V15.9876ZM23.7858 15.9876H62.7858V12.9876H23.7858V15.9876Z\" fill=\"#001096\" mask=\"url(#path-12-inside-1_1281_4127)\"/>\n </g>\n <rect x=\"86.501\" y=\"23.7069\" width=\"64.8214\" height=\"1.42241\" rx=\"0.711207\" fill=\"#2D2B2A\"/>\n <rect x=\"86.501\" y=\"34.2433\" width=\"64.8214\" height=\"1.42241\" rx=\"0.711207\" fill=\"#2D2B2A\"/>\n <rect x=\"86.501\" y=\"44.1212\" width=\"32.7381\" height=\"1.42241\" rx=\"0.711207\" fill=\"#2D2B2A\"/>\n <rect x=\"27.5713\" y=\"86.2667\" width=\"32.7381\" height=\"2.63621\" rx=\"1.3181\" fill=\"#DBDBC4\"/>\n <defs>\n <filter id=\"filter0_d_1281_4127\" x=\"19.9141\" y=\"31.2932\" width=\"48.5615\" height=\"58.6913\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n <feOffset dy=\"4\"/>\n <feGaussianBlur stdDeviation=\"2\"/>\n <feComposite in2=\"hardAlpha\" operator=\"out\"/>\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0\"/>\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_1281_4127\"/>\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_1281_4127\" result=\"shape\"/>\n </filter>\n <filter id=\"filter1_d_1281_4127\" x=\"0\" y=\"0\" width=\"173\" height=\"102.828\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n <feOffset dy=\"4\"/>\n <feGaussianBlur stdDeviation=\"2\"/>\n <feComposite in2=\"hardAlpha\" operator=\"out\"/>\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0\"/>\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_1281_4127\"/>\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_1281_4127\" result=\"shape\"/>\n </filter>\n <linearGradient id=\"paint0_linear_1281_4127\" x1=\"44.1986\" y1=\"81.4966\" x2=\"44.1986\" y2=\"65.578\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#FFB09A\"/>\n <stop offset=\"0.21\" stop-color=\"#FF9B8D\"/>\n <stop offset=\"0.47\" stop-color=\"#FF8781\"/>\n <stop offset=\"0.74\" stop-color=\"#FF7B79\"/>\n <stop offset=\"1\" stop-color=\"#FF7777\"/>\n </linearGradient>\n <linearGradient id=\"paint1_linear_1281_4127\" x1=\"29.7538\" y1=\"57.2504\" x2=\"29.7538\" y2=\"46.5708\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#FFB09A\"/>\n <stop offset=\"0.21\" stop-color=\"#FF9B8D\"/>\n <stop offset=\"0.47\" stop-color=\"#FF8781\"/>\n <stop offset=\"0.74\" stop-color=\"#FF7B79\"/>\n <stop offset=\"1\" stop-color=\"#FF7777\"/>\n </linearGradient>\n <linearGradient id=\"paint2_linear_1281_4127\" x1=\"29.888\" y1=\"53.8755\" x2=\"29.888\" y2=\"48.2632\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#FFE7D8\"/>\n <stop offset=\"0.29\" stop-color=\"#FABDC9\"/>\n <stop offset=\"0.59\" stop-color=\"#F597BB\"/>\n <stop offset=\"0.84\" stop-color=\"#F280B3\"/>\n <stop offset=\"0.99\" stop-color=\"#F177B0\"/>\n </linearGradient>\n <linearGradient id=\"paint3_linear_1281_4127\" x1=\"30.8683\" y1=\"53.6937\" x2=\"30.8683\" y2=\"50.4636\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#FFE7D8\"/>\n <stop offset=\"0.99\" stop-color=\"#CE77F1\"/>\n </linearGradient>\n <linearGradient id=\"paint4_linear_1281_4127\" x1=\"58.9759\" y1=\"57.2504\" x2=\"58.9759\" y2=\"46.5708\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#FFB09A\"/>\n <stop offset=\"0.21\" stop-color=\"#FF9B8D\"/>\n <stop offset=\"0.47\" stop-color=\"#FF8781\"/>\n <stop offset=\"0.74\" stop-color=\"#FF7B79\"/>\n <stop offset=\"1\" stop-color=\"#FF7777\"/>\n </linearGradient>\n <linearGradient id=\"paint5_linear_1281_4127\" x1=\"58.845\" y1=\"53.8755\" x2=\"58.845\" y2=\"48.2632\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#FFE7D8\"/>\n <stop offset=\"0.29\" stop-color=\"#FABDC9\"/>\n <stop offset=\"0.59\" stop-color=\"#F597BB\"/>\n <stop offset=\"0.84\" stop-color=\"#F280B3\"/>\n <stop offset=\"0.99\" stop-color=\"#F177B0\"/>\n </linearGradient>\n <linearGradient id=\"paint6_linear_1281_4127\" x1=\"54.5402\" y1=\"54.6965\" x2=\"59.1672\" y2=\"54.6965\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#FFE7D8\"/>\n <stop offset=\"0.29\" stop-color=\"#FABDC9\"/>\n <stop offset=\"0.59\" stop-color=\"#F597BB\"/>\n <stop offset=\"0.84\" stop-color=\"#F280B3\"/>\n <stop offset=\"0.99\" stop-color=\"#F177B0\"/>\n </linearGradient>\n <linearGradient id=\"paint7_linear_1281_4127\" x1=\"44.195\" y1=\"75.4635\" x2=\"44.195\" y2=\"81.4965\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#151F72\"/>\n <stop offset=\"0.19\" stop-color=\"#151F72\"/>\n <stop offset=\"0.54\" stop-color=\"#7FCBF5\"/>\n <stop offset=\"0.82\" stop-color=\"#C574EC\"/>\n <stop offset=\"0.99\" stop-color=\"#FBD1EE\"/>\n </linearGradient>\n <linearGradient id=\"paint8_linear_1281_4127\" x1=\"30.0589\" y1=\"51.0693\" x2=\"58.3379\" y2=\"51.0693\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#FFB09A\"/>\n <stop offset=\"0.06\" stop-color=\"#FF9B89\"/>\n <stop offset=\"0.13\" stop-color=\"#FF8A7B\"/>\n <stop offset=\"0.23\" stop-color=\"#FF7F71\"/>\n <stop offset=\"0.36\" stop-color=\"#FF786C\"/>\n <stop offset=\"0.71\" stop-color=\"#FF766A\"/>\n </linearGradient>\n </defs>\n</svg>`;\n}\n\nfunction backDocumentIcon() {\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"182\" height=\"108\" viewBox=\"0 0 182 108\" fill=\"none\">\n <path d=\"M143 68C143 65.7909 144.791 64 147 64H164C166.209 64 168 65.7909 168 68V89C168 91.2091 166.209 93 164 93H147C144.791 93 143 91.2091 143 89V68Z\" fill=\"#F6C969\"/>\n <g filter=\"url(#filter0_d_1281_4284)\">\n <mask id=\"path-2-inside-1_1281_4284\" fill=\"white\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M18 0C10.268 0 4 6.26801 4 14V86C4 93.732 10.268 100 18 100H164C171.732 100 178 93.732 178 86V14C178 6.26801 171.732 0 164 0H18ZM148 67C145.791 67 144 68.7909 144 71V85C144 87.2091 145.791 89 148 89H162C164.209 89 166 87.2091 166 85V71C166 68.7909 164.209 67 162 67H148Z\"/>\n </mask>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M18 0C10.268 0 4 6.26801 4 14V86C4 93.732 10.268 100 18 100H164C171.732 100 178 93.732 178 86V14C178 6.26801 171.732 0 164 0H18ZM148 67C145.791 67 144 68.7909 144 71V85C144 87.2091 145.791 89 148 89H162C164.209 89 166 87.2091 166 85V71C166 68.7909 164.209 67 162 67H148Z\" fill=\"#F9F0E7\"/>\n <path d=\"M5.5 14C5.5 7.09644 11.0964 1.5 18 1.5V-1.5C9.43959 -1.5 2.5 5.43959 2.5 14H5.5ZM5.5 86V14H2.5V86H5.5ZM18 98.5C11.0964 98.5 5.5 92.9036 5.5 86H2.5C2.5 94.5604 9.43959 101.5 18 101.5V98.5ZM164 98.5H18V101.5H164V98.5ZM176.5 86C176.5 92.9036 170.904 98.5 164 98.5V101.5C172.56 101.5 179.5 94.5604 179.5 86H176.5ZM176.5 14V86H179.5V14H176.5ZM164 1.5C170.904 1.5 176.5 7.09644 176.5 14H179.5C179.5 5.43959 172.56 -1.5 164 -1.5V1.5ZM18 1.5H164V-1.5H18V1.5ZM145.5 71C145.5 69.6193 146.619 68.5 148 68.5V65.5C144.962 65.5 142.5 67.9624 142.5 71H145.5ZM145.5 85V71H142.5V85H145.5ZM148 87.5C146.619 87.5 145.5 86.3807 145.5 85H142.5C142.5 88.0376 144.962 90.5 148 90.5V87.5ZM162 87.5H148V90.5H162V87.5ZM164.5 85C164.5 86.3807 163.381 87.5 162 87.5V90.5C165.038 90.5 167.5 88.0376 167.5 85H164.5ZM164.5 71V85H167.5V71H164.5ZM162 68.5C163.381 68.5 164.5 69.6193 164.5 71H167.5C167.5 67.9624 165.038 65.5 162 65.5V68.5ZM148 68.5H162V65.5H148V68.5Z\" fill=\"#001096\" mask=\"url(#path-2-inside-1_1281_4284)\"/>\n </g>\n <rect x=\"134\" y=\"10\" width=\"3\" height=\"9\" rx=\"0.5\" fill=\"#DBDBC4\"/>\n <rect x=\"148.733\" y=\"10\" width=\"2\" height=\"9\" rx=\"0.5\" fill=\"#DBDBC4\"/>\n <rect x=\"154\" y=\"10\" width=\"2\" height=\"9\" rx=\"0.5\" fill=\"#DBDBC4\"/>\n <rect x=\"166\" y=\"10\" width=\"1.3\" height=\"9\" rx=\"0.5\" fill=\"#DBDBC4\"/>\n <rect x=\"157\" y=\"10\" width=\"2\" height=\"9\" rx=\"0.5\" fill=\"#DBDBC4\"/>\n <rect x=\"141.8\" y=\"10\" width=\"5\" height=\"9\" rx=\"0.5\" fill=\"#DBDBC4\"/>\n <rect x=\"161\" y=\"10\" width=\"4\" height=\"9\" rx=\"0.5\" fill=\"#DBDBC4\"/>\n <rect x=\"137.767\" y=\"10\" width=\"1\" height=\"9\" rx=\"0.5\" fill=\"#DBDBC4\"/>\n <rect x=\"151.2\" y=\"10\" width=\"1\" height=\"9\" rx=\"0.5\" fill=\"#DBDBC4\"/>\n <rect x=\"20.25\" y=\"32.25\" width=\"98.5\" height=\"0.5\" rx=\"0.25\" fill=\"#2D2B2A\" stroke=\"#2D2B2A\" stroke-width=\"0.5\"/>\n <rect x=\"20.25\" y=\"41.75\" width=\"98.5\" height=\"0.5\" rx=\"0.25\" fill=\"#2D2B2A\" stroke=\"#2D2B2A\" stroke-width=\"0.5\"/>\n <rect x=\"20.25\" y=\"51.25\" width=\"49.5\" height=\"0.5\" rx=\"0.25\" fill=\"#2D2B2A\" stroke=\"#2D2B2A\" stroke-width=\"0.5\"/>\n <rect x=\"20.25\" y=\"75.25\" width=\"49.5\" height=\"0.5\" rx=\"0.25\" fill=\"#2D2B2A\" stroke=\"#2D2B2A\" stroke-width=\"0.5\"/>\n <rect x=\"20.25\" y=\"84.75\" width=\"49.5\" height=\"0.5\" rx=\"0.25\" fill=\"#2D2B2A\" stroke=\"#2D2B2A\" stroke-width=\"0.5\"/>\n <defs>\n <filter id=\"filter0_d_1281_4284\" x=\"0\" y=\"0\" width=\"182\" height=\"108\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n <feOffset dy=\"4\"/>\n <feGaussianBlur stdDeviation=\"2\"/>\n <feComposite in2=\"hardAlpha\" operator=\"out\"/>\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0\"/>\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_1281_4284\"/>\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_1281_4284\" result=\"shape\"/>\n </filter>\n </defs>\n</svg>`;\n}\n\nfunction templateString() {\n return `\n <style>\n h1 {\n font-size: 1.25rem;\n }\n\n .controls {\n width: 100%;\n margin-top: 1rem;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n }\n\n .content-root {\n height: 100%;\n display: flex;\n align-items: center;\n flex-direction: column;\n }\n\n .content-header, .content-body, .content-footer {\n width: 100%;\n }\n\n .content-body {\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-between;\n }\n \n .content-body header {\n margin-top: 1rem;\n }\n </style>\n <div id=\"document-capture-instructions-screen\" class=\"flow center\" dir=\"${this.direction}\">\n <div class=\"content-root\">\n <div class=\"content-header\">\n ${this.showNavigation ? `<smileid-navigation theme-color='${this.themeColor}' show-navigation ${this.hideBack ? 'hide-back' : ''}></smileid-navigation>` : ''}\n </div>\n <div class=\"content-body\">\n <header>\n ${this.isFrontOfId ? frontDocumentIcon() : backDocumentIcon()}\n <h1 class='title-color font-bold'>${escapeHtml(this.title)}</h1>\n <p class=\"description text-sm font-normal\">\n ${t('document.instructions.description')}\n </p>\n <p class=\"description padding-bottom-2\">\n ${t('document.instructions.followInstructions')}\n </p>\n </header>\n <div class=\"instructions-wrapper\">\n <div class=\"instructions\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"38\"\n height=\"38\"\n viewBox=\"0 0 38 38\"\n fill=\"none\"\n >\n <g clip-path=\"url(#clip0_604_670)\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M31.8569 19C31.8569 21.5428 31.1029 24.0285 29.6902 26.1428C28.2774 28.2571 26.2695 29.9049 23.9203 30.878C21.571 31.8511 18.986 32.1057 16.492 31.6096C13.9981 31.1136 11.7072 29.8891 9.90919 28.091C8.11115 26.293 6.88668 24.0022 6.3906 21.5082C5.89452 19.0143 6.14913 16.4292 7.12222 14.08C8.09531 11.7307 9.74318 9.72279 11.8574 8.31008C13.9717 6.89737 16.4574 6.14334 19.0002 6.14334C22.41 6.14334 25.6802 7.49788 28.0913 9.90897C30.5024 12.3201 31.8569 15.5902 31.8569 19Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M19.6064 4.5419H18.394L18.9912 0L19.6064 4.5419Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M26.7541 6.77667L25.7046 6.17048L28.4913 2.54239L26.7541 6.77667Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M31.8298 12.2957L31.2236 11.2462L35.4489 9.49097L31.8298 12.2957Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M33.4674 19.6062V18.3938L38.0003 18.9909L33.4674 19.6062Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M31.2236 26.7538L31.8298 25.7043L35.4579 28.491L31.2236 26.7538Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M25.7046 31.8295L26.7541 31.2233L28.5094 35.4486L25.7046 31.8295Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M18.394 33.4671H19.6064L19.0093 38L18.394 33.4671Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M11.2464 31.2233L12.2959 31.8295L9.50928 35.4576L11.2464 31.2233Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M6.17068 25.7043L6.77687 26.7538L2.55164 28.509L6.17068 25.7043Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M4.54215 18.3938V19.6062L0.000244141 19.009L4.54215 18.3938Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M6.77689 11.2462L6.1707 12.2957L2.5426 9.50903L6.77689 11.2462Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M12.296 6.17047L11.2464 6.77666L9.49121 2.55142L12.296 6.17047Z\"\n fill=\"${this.themeColor}\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_604_670\">\n <rect\n width=\"38\"\n height=\"38\"\n fill=\"white\"\n transform=\"translate(0.000244141)\"\n />\n </clipPath>\n </defs>\n </svg>\n <div class=\"instruction\">\n <p class=\"instruction-header font-bold text-base\">${t('document.instructions.goodLight.header')}</p>\n <p class=\"instruction-body text-xs font-medium\">\n ${t('document.instructions.goodLight.body')}\n </p>\n </div>\n </div>\n <div class=\"instructions\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"38\"\n height=\"36\"\n viewBox=\"0 0 38 36\"\n fill=\"none\"\n >\n <g clip-path=\"url(#clip0_604_672)\">\n <path\n d=\"M36.7211 12.6391H1.22537C1.06275 13.0909 0.910962 13.5427 0.77002 14.0055H37.1764C37.0463 13.5427 36.8946 13.0909 36.7211 12.6391Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M37.3716 14.7438H0.574875C0.466458 15.1625 0.379725 15.5813 0.303833 16.011H37.6426C37.5667 15.5813 37.48 15.1625 37.3716 14.7438Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M37.7727 16.8485H0.173703C0.119494 17.2342 0.0869685 17.6198 0.0544434 18.0055H37.892C37.8594 17.6198 37.8269 17.2342 37.7727 16.8485Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M37.9462 19.4711C37.9462 19.2948 37.9462 19.1295 37.9353 18.9532H0.0110865C0.000244802 19.1295 0.000244141 19.2948 0.000244141 19.4711C0.000244141 19.6474 0.000244802 19.8347 0.0110865 20.011H37.9353C37.9462 19.8347 37.9462 19.6474 37.9462 19.4711Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M37.8811 21.0579H0.0653076C0.086991 21.3774 0.119515 21.697 0.162882 22.0055H37.7836C37.8269 21.697 37.8595 21.3774 37.8811 21.0579Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M37.5992 23.1625H0.347168C0.401376 23.449 0.466426 23.7245 0.531477 24H37.4149C37.48 23.7245 37.545 23.449 37.5992 23.1625Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M37.0788 25.2672H0.867554C0.954287 25.5096 1.03018 25.7631 1.11691 26.0055H36.8295C36.9162 25.7631 37.0029 25.5096 37.0788 25.2672Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M36.2874 27.3719H1.65906L1.95178 28H35.9947L36.2874 27.3719Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M35.2032 29.4766H2.75403C2.84799 29.6529 2.95641 29.8292 3.07928 30.0055H34.878L35.2032 29.4766Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M33.7396 31.5813H4.20679L4.54288 32H33.4035L33.7396 31.5813Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M31.7989 33.6859H6.14746L6.49439 33.9945H31.452L31.7989 33.6859Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M29.0993 35.7906H8.84705L9.18314 36H28.7632L29.0993 35.7906Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M34.2384 8.01102C33.8914 7.53719 33.5228 7.07438 33.1325 6.63361C29.8258 2.60055 24.6977 0 18.9407 0C12.891 0 7.53525 2.86501 4.25021 7.26171H4.28274C4.08759 7.51515 3.89244 7.75757 3.70813 8.01102H34.2384Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M34.531 8.44077H3.41533C3.06839 8.94765 2.74314 9.47658 2.43958 10.0165H35.5068C35.2124 9.47215 34.8866 8.94597 34.531 8.44077Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M35.7887 10.5344H2.15776C1.9084 11.0193 1.68072 11.5151 1.47473 12.011H36.4717C36.2657 11.5151 36.0381 11.0193 35.7887 10.5344Z\"\n fill=\"${this.themeColor}\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_604_672\">\n <rect\n width=\"37.9459\"\n height=\"36\"\n fill=\"white\"\n transform=\"translate(0.000244141)\"\n />\n </clipPath>\n </defs>\n </svg>\n <div>\n <p class=\"instruction-header font-bold text-base\">${t('document.instructions.clearImage.header')}</p>\n <p class=\"instruction-body text-xs font-medium\">\n ${t('document.instructions.clearImage.body')}\n </p>\n </div>\n </div>\n <div id=\"error\" class='color-red'>\n </div>\n </div>\n <div class='controls'>\n ${\n this.supportBothCaptureModes || this.documentCaptureModes === 'camera'\n ? `\n <button data-variant='solid full-width' class='button' type='button' id='take-photo'>\n ${t('document.instructions.takePhotoButton')}\n </button>\n `\n : ''\n }\n ${\n this.supportBothCaptureModes || this.documentCaptureModes === 'upload'\n ? `\n <label id='upload-photo-label' data-variant='${\n this.supportBothCaptureModes ? 'outline' : 'solid'\n }' class='button'>\n <input type='file' hidden onclick='this.value=null;' id='upload-photo' name='document' accept='image/png, image/jpeg' />\n <span>${t('document.instructions.uploadPhotoButton')}</span>\n </label>\n `\n : ''\n }\n</div>\n${\n this.hideAttribution\n ? ''\n : `\n <div class=\"content-footer\">\n <powered-by-smile-id></powered-by-smile-id>\n </div>\n `\n}\n </div>\n </div>\n</div>\n ${styles(this.themeColor)}\n `;\n}\n\nclass DocumentInstruction extends HTMLElement {\n constructor() {\n super();\n this.templateString = templateString.bind(this);\n this.render = () => this.templateString();\n\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n const template = document.createElement('template');\n template.innerHTML = this.render();\n\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n\n this.navigation = this.shadowRoot.querySelector('smileid-navigation');\n this.takeDocumentPhotoButton = this.shadowRoot.querySelector('#take-photo');\n this.uploadDocumentPhotoButton =\n this.shadowRoot.querySelector('#upload-photo');\n\n this.navigation?.addEventListener('navigation.back', () => {\n this.handleBackEvents();\n });\n\n this.navigation?.addEventListener('navigation.close', () => {\n this.handleCloseEvents();\n });\n\n if (this.takeDocumentPhotoButton) {\n this.takeDocumentPhotoButton.addEventListener('click', () => {\n this.dispatchEvent(\n new CustomEvent('document-capture-instructions.capture'),\n );\n });\n }\n\n if (this.uploadDocumentPhotoButton) {\n this.uploadDocumentPhotoButton.addEventListener(\n 'change',\n async (event) => {\n this.shadowRoot.querySelector('#error').innerHTML = '';\n try {\n const { files } = event.target;\n\n // validate file, and convert file to data url\n const fileData = await SmartFileUpload.retrieve(files);\n\n this.dispatchEvent(\n new CustomEvent('document-capture-instructions.upload', {\n detail: { image: fileData, previewImage: fileData },\n }),\n );\n } catch (error) {\n this.shadowRoot.querySelector('#error').innerHTML = error.message;\n }\n },\n );\n }\n }\n\n get hideBack() {\n return this.hasAttribute('hide-back-to-host');\n }\n\n get showNavigation() {\n return this.hasAttribute('show-navigation');\n }\n\n get themeColor() {\n return this.getAttribute('theme-color') || '#001096';\n }\n\n get hideAttribution() {\n return this.hasAttribute('hide-attribution');\n }\n\n get documentCaptureModes() {\n return this.getAttribute('document-capture-modes') || 'camera';\n }\n\n get supportBothCaptureModes() {\n const value = this.documentCaptureModes;\n return value.includes('camera') && value.includes('upload');\n }\n\n get title() {\n return this.getAttribute('title') || t('document.title.front');\n }\n\n get sideOfId() {\n return (this.getAttribute('side-of-id') || 'front').toLowerCase();\n }\n\n get isFrontOfId() {\n return this.sideOfId === 'front';\n }\n\n get isBackOfId() {\n return !this.isFrontOfId;\n }\n\n get direction() {\n return this.getAttribute('dir') || getDirection() || 'ltr';\n }\n\n handleBackEvents() {\n this.dispatchEvent(\n new CustomEvent('document-capture-instructions.cancelled'),\n );\n }\n\n handleCloseEvents() {\n this.dispatchEvent(new CustomEvent('document-capture-instructions.close'));\n }\n}\n\nif (\n 'customElements' in window &&\n !customElements.get('document-capture-instructions')\n) {\n window.customElements.define(\n 'document-capture-instructions',\n DocumentInstruction,\n );\n}\n\nexport default DocumentInstruction;\n","import type { FunctionComponent } from 'preact';\nimport { useEffect, useRef, useState } from 'preact/hooks';\nimport register from 'preact-custom-element';\nimport { DotLottie } from '@lottiefiles/dotlottie-web';\nimport { getBoolProp } from '../../../../utils/props';\nimport { getDirection, t } from '../../../../domain/localisation';\n\n// ── Visual assets ────────────────────────────────────────────────────────────\nconst HERO_ID_CARD_LOTTIE_URL = new URL(\n '../assets/lottie/taking photo of ID.lottie',\n import.meta.url,\n).href;\n\nconst HERO_PASSPORT_LOTTIE_URL = new URL(\n '../assets/lottie/taking photo of passport 2.lottie',\n import.meta.url,\n).href;\n\nconst HERO_GREENBOOK_LOTTIE_URL = new URL(\n '../assets/lottie/taking photo of green book passport.lottie',\n import.meta.url,\n).href;\n\nconst HERO_IMAGE_FALLBACK_URL =\n 'https://www.figma.com/api/mcp/asset/be898e16-cf3f-4c91-86ed-fbd2aa436e49';\n\ntype DocumentVariant = 'id-card' | 'passport' | 'greenbook';\ntype GuidelineKey = 'good' | 'not-cropped' | 'not-blurry' | 'not-reflective';\n\ninterface HeroAssetConfig {\n animationSrc: string;\n fallbackAlt: string;\n fallbackSrc: string;\n}\n\nconst HERO_ASSETS: Record<DocumentVariant, HeroAssetConfig> = {\n 'id-card': {\n animationSrc: HERO_ID_CARD_LOTTIE_URL,\n fallbackAlt: 'Phone capturing an ID card on a desk',\n fallbackSrc: HERO_IMAGE_FALLBACK_URL,\n },\n passport: {\n animationSrc: HERO_PASSPORT_LOTTIE_URL,\n fallbackAlt: 'Phone capturing a passport on a desk',\n fallbackSrc: HERO_IMAGE_FALLBACK_URL,\n },\n greenbook: {\n animationSrc: HERO_GREENBOOK_LOTTIE_URL,\n fallbackAlt: 'Phone capturing a green book passport on a desk',\n fallbackSrc: HERO_IMAGE_FALLBACK_URL,\n },\n};\n\nconst GUIDELINE_ICONS: Record<DocumentVariant, Record<GuidelineKey, string>> = {\n 'id-card': {\n good: new URL(\n '../assets/icons/guidelines/id-card/good.svg',\n import.meta.url,\n ).href,\n 'not-cropped': new URL(\n '../assets/icons/guidelines/id-card/not-cropped.svg',\n import.meta.url,\n ).href,\n 'not-blurry': new URL(\n '../assets/icons/guidelines/id-card/not-blurry.svg',\n import.meta.url,\n ).href,\n 'not-reflective': new URL(\n '../assets/icons/guidelines/id-card/not-reflective.svg',\n import.meta.url,\n ).href,\n },\n passport: {\n good: new URL(\n '../assets/icons/guidelines/passport/good.svg',\n import.meta.url,\n ).href,\n 'not-cropped': new URL(\n '../assets/icons/guidelines/passport/not-cropped.svg',\n import.meta.url,\n ).href,\n 'not-blurry': new URL(\n '../assets/icons/guidelines/passport/not-blurry.svg',\n import.meta.url,\n ).href,\n 'not-reflective': new URL(\n '../assets/icons/guidelines/passport/not-reflective.svg',\n import.meta.url,\n ).href,\n },\n greenbook: {\n good: new URL(\n '../assets/icons/guidelines/greenbook/good.svg',\n import.meta.url,\n ).href,\n 'not-cropped': new URL(\n '../assets/icons/guidelines/greenbook/not-cropped.svg',\n import.meta.url,\n ).href,\n 'not-blurry': new URL(\n '../assets/icons/guidelines/greenbook/not-blurry.svg',\n import.meta.url,\n ).href,\n 'not-reflective': new URL(\n '../assets/icons/guidelines/greenbook/not-reflective.svg',\n import.meta.url,\n ).href,\n },\n};\n\nfunction getDocumentVariant(idType: string): DocumentVariant {\n const normalized = idType.trim().toLowerCase();\n\n if (\n normalized.includes('greenbook') ||\n (normalized.includes('green') && normalized.includes('book'))\n ) {\n return 'greenbook';\n }\n\n if (normalized.includes('passport')) {\n return 'passport';\n }\n\n return 'id-card';\n}\n\nfunction getTextDirection(dir?: string): 'ltr' | 'rtl' | 'auto' {\n if (dir === 'rtl' || dir === 'ltr' || dir === 'auto') {\n return dir;\n }\n\n return getDirection() === 'rtl' ? 'rtl' : 'ltr';\n}\n\ninterface HeroLottieProps {\n animationSrc: string;\n fallbackSrc: string;\n fallbackAlt: string;\n}\n\nfunction HeroLottie({\n animationSrc,\n fallbackSrc,\n fallbackAlt,\n}: HeroLottieProps) {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const [hasError, setHasError] = useState(false);\n\n useEffect(() => {\n setHasError(false);\n\n if (!canvasRef.current) {\n return undefined;\n }\n\n let isMounted = true;\n const animation = new DotLottie({\n autoplay: true,\n canvas: canvasRef.current,\n loop: true,\n layout: {\n align: [0.5, 0.5],\n fit: 'cover',\n },\n renderConfig: {\n autoResize: true,\n devicePixelRatio: window.devicePixelRatio || 1,\n },\n src: animationSrc,\n });\n\n animation.addEventListener('loadError', () => {\n if (isMounted) {\n setHasError(true);\n }\n });\n\n animation.addEventListener('renderError', () => {\n if (isMounted) {\n setHasError(true);\n }\n });\n\n return () => {\n isMounted = false;\n animation.destroy();\n };\n }, [animationSrc]);\n\n return (\n <div class=\"doc-instr-hero-media\">\n <img\n class=\"doc-instr-hero-img\"\n src={fallbackSrc}\n alt={fallbackAlt}\n loading=\"eager\"\n decoding=\"async\"\n />\n {!hasError && (\n <canvas\n ref={canvasRef}\n class=\"doc-instr-hero-canvas\"\n aria-hidden=\"true\"\n />\n )}\n </div>\n );\n}\n\n// ── Inline SVG helpers ───────────────────────────────────────────────────────\n\nfunction BackArrowIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M19 12H5M5 12L12 19M5 12L12 5\"\n stroke=\"white\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction ArrowRightIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4.167 10h11.666M10 4.167L15.833 10 10 15.833\"\n stroke=\"white\"\n stroke-width=\"1.667\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction GuidelinesIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M8.00001 14.6668C11.6819 14.6668 14.6667 11.6821 14.6667 8.00016C14.6667 4.31826 11.6819 1.3335 8.00001 1.3335C4.31811 1.3335 1.33334 4.31826 1.33334 8.00016C1.33334 11.6821 4.31811 14.6668 8.00001 14.6668Z\"\n stroke=\"#151F72\"\n stroke-width=\"1.33333\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M6 7.99984L7.33333 9.33317L10 6.6665\"\n stroke=\"#151F72\"\n stroke-width=\"1.33333\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction GuidelineThumbnail({ src, label }: { src: string; label: string }) {\n return (\n <img\n class=\"doc-instr-guide-thumb\"\n src={src}\n alt={label}\n loading=\"lazy\"\n decoding=\"async\"\n />\n );\n}\n\ninterface GuidelineItem {\n key: GuidelineKey;\n label: string;\n}\n\n// ── SmileID attribution SVG (inline to avoid external web component dep) ────\nfunction PoweredBySmileIdLogo() {\n return (\n <svg\n viewBox=\"0 0 90 9\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-label=\"Powered by SmileID\"\n style={{ width: '90px', height: '9px' }}\n >\n <path\n d=\"M0.544 7V1.4H2.616C3.064 1.4 3.43467 1.47467 3.728 1.624C4.02133 1.77333 4.24 1.97867 4.384 2.24C4.528 2.50133 4.6 2.79467 4.6 3.12C4.6 3.42933 4.53067 3.71467 4.392 3.976C4.25333 4.232 4.03733 4.44 3.744 4.6C3.45067 4.75467 3.07467 4.832 2.616 4.832H1.568V7H0.544ZM1.568 4H2.552C2.90933 4 3.16533 3.92267 3.32 3.768C3.48 3.608 3.56 3.392 3.56 3.12C3.56 2.84267 3.48 2.62667 3.32 2.472C3.16533 2.312 2.90933 2.232 2.552 2.232H1.568V4ZM7.08025 7.096C6.69625 7.096 6.34958 7.008 6.04025 6.832C5.73625 6.656 5.49358 6.41333 5.31225 6.104C5.13625 5.78933 5.04825 5.42667 5.04825 5.016C5.04825 4.60533 5.13892 4.24533 5.32025 3.936C5.50158 3.62133 5.74425 3.376 6.04825 3.2C6.35758 3.024 6.70425 2.936 7.08825 2.936C7.46692 2.936 7.80825 3.024 8.11225 3.2C8.42158 3.376 8.66425 3.62133 8.84025 3.936C9.02158 4.24533 9.11225 4.60533 9.11225 5.016C9.11225 5.42667 9.02158 5.78933 8.84025 6.104C8.66425 6.41333 8.42158 6.656 8.11225 6.832C7.80292 7.008 7.45892 7.096 7.08025 7.096ZM7.08025 6.208C7.34692 6.208 7.57892 6.10933 7.77625 5.912C7.97358 5.70933 8.07225 5.41067 8.07225 5.016C8.07225 4.62133 7.97358 4.32533 7.77625 4.128C7.57892 3.92533 7.34958 3.824 7.08825 3.824C6.81625 3.824 6.58158 3.92533 6.38425 4.128C6.19225 4.32533 6.09625 4.62133 6.38425 5.912C6.58158 6.10933 6.81358 6.208 7.08025 6.208ZM10.6632 7L9.50319 3.032H10.5192L11.2072 5.888L12.0072 3.032H13.1432L13.9432 5.888L14.6392 3.032H15.6552L14.4872 7H13.4232L12.5752 4.032L11.7272 7H10.6632ZM18.0886 7.096C17.6886 7.096 17.334 7.01067 17.0246 6.84C16.7153 6.66933 16.4726 6.42933 16.2966 6.12C16.1206 5.81067 16.0326 5.45333 16.0326 5.048C16.0326 4.63733 16.118 4.272 16.2886 3.952C16.4646 3.632 16.7046 3.384 17.0086 3.208C17.318 3.02667 17.6806 2.936 18.0966 2.936C18.486 2.936 18.83 3.02133 19.1286 3.192C19.4273 3.36267 19.6593 3.59733 19.8246 3.896C19.9953 4.18933 20.0806 4.51733 20.0806 4.88C20.0806 4.93867 20.078 5 20.0726 5.064C20.0726 5.128 20.07 5.19467 20.0646 5.264H17.0486C17.07 5.57333 17.1766 5.816 17.3686 5.992C17.566 6.168 17.8033 6.256 18.0806 6.256C18.2886 6.256 18.462 6.21067 18.6006 6.12C18.7446 6.024 18.8513 5.90133 18.9206 5.752H19.9606C19.886 6.00267 19.7606 6.232 19.5846 6.44C19.414 6.64267 19.2006 6.80267 18.9446 6.92C18.694 7.03733 18.4086 7.096 18.0886 7.096ZM18.0966 3.768C17.846 3.768 17.6246 3.84 17.4326 3.984C17.2406 4.12267 17.118 4.336 17.0646 4.624H19.0406C19.0246 4.36267 18.9286 4.15467 18.7526 4C18.5766 3.84533 18.358 3.768 18.0966 3.768ZM20.9419 7V3.032H21.8539L21.9499 3.776C22.0939 3.52 22.2885 3.31733 22.5339 3.168C22.7845 3.01333 23.0779 2.936 23.4139 2.936V4.016H23.1259C22.9019 4.016 22.7019 4.05067 22.5259 4.12C22.3499 4.18933 22.2112 4.30933 22.1099 4.48C22.0139 4.65067 21.9659 4.888 21.9659 5.192V7H20.9419ZM25.9714 7.096C25.5714 7.096 25.2168 7.01067 24.9074 6.84C24.5981 6.66933 24.3554 6.42933 24.1794 6.12C24.0034 5.81067 23.9154 5.45333 23.9154 5.048C23.9154 4.63733 24.0008 4.272 24.1714 3.952C24.3474 3.632 24.5874 3.384 24.8914 3.208C25.2008 3.02667 25.5634 2.936 25.9794 2.936C26.3688 2.936 26.7128 3.02133 27.0114 3.192C27.3101 3.36267 27.5421 3.59733 27.7074 3.896C27.8781 4.18933 27.9634 4.51733 27.9634 4.88C27.9634 4.93867 27.9608 5 27.9554 5.064C27.9554 5.128 27.9528 5.19467 27.9474 5.264H24.9314C24.9528 5.57333 25.0594 5.816 25.2514 5.992C25.4488 6.168 25.6861 6.256 25.9634 6.256C26.1714 6.256 26.3448 6.21067 26.4834 6.12C26.6274 6.024 26.7341 5.90133 26.8034 5.752H27.8434C27.7688 6.00267 27.6434 6.232 27.4674 6.44C27.2968 6.64267 27.0834 6.80267 26.8274 6.92C26.5768 7.03733 26.2914 7.096 25.9714 7.096ZM25.9794 3.768C25.7288 3.768 25.5074 3.84 25.3154 3.984C25.1234 4.12267 25.0008 4.336 24.9474 4.624H26.9234C26.9074 4.36267 26.8114 4.15467 26.6354 4C26.4594 3.84533 26.2408 3.768 25.9794 3.768ZM30.6487 7.096C30.2754 7.096 29.942 7.00533 29.6487 6.824C29.3554 6.64267 29.1234 6.39467 28.9527 6.08C28.782 5.76533 28.6967 5.408 28.6967 5.008C28.6967 4.608 28.782 4.25333 28.9527 3.944C29.1234 3.62933 29.3554 3.384 29.6487 3.208C29.942 3.02667 30.2754 2.936 30.6487 2.936C30.9474 2.936 31.2087 2.992 31.4327 3.104C31.6567 3.216 31.838 3.37333 31.9767 3.576V1.24H33.0007V7H32.0887L31.9767 6.432C31.8487 6.608 31.678 6.76267 31.4647 6.896C31.2567 7.02933 30.9847 7.096 30.6487 7.096ZM30.8647 6.2C31.1954 6.2 31.4647 6.09067 31.6727 5.872C31.886 5.648 31.9927 5.36267 31.9927 5.016C31.9927 4.66933 31.886 4.38667 31.6727 4.168C31.4647 3.944 31.1954 3.832 30.8647 3.832C30.5394 3.832 30.27 3.94133 30.0567 4.16C29.8434 4.37867 29.7367 4.66133 29.7367 5.008C29.7367 5.35467 29.8434 5.64 30.0567 5.864C30.27 6.088 30.5394 6.2 30.8647 6.2ZM38.3017 7.096C38.003 7.096 37.7417 7.04 37.5177 6.928C37.2937 6.816 37.1124 6.65867 36.9737 6.456L36.8617 7H35.9497V1.24H36.9737V3.6C37.1017 3.424 37.2697 3.26933 37.4777 3.136C37.691 3.00267 37.9657 2.936 38.3017 2.936C38.675 2.936 39.0084 3.02667 39.3017 3.208C39.595 3.38933 39.827 3.63733 39.9977 3.952C40.1684 4.26667 40.2537 4.624 40.2537 5.024C40.2537 5.424 40.1684 5.78133 39.9977 6.096C39.827 6.40533 39.595 6.65067 39.3017 6.832C39.0084 7.008 38.675 7.096 38.3017 7.096ZM38.0857 6.2C38.411 6.2 38.6804 6.09067 38.8937 5.872C39.107 5.65333 39.2137 5.37067 39.2137 5.024C39.2137 4.67733 39.107 4.392 38.8937 4.168C38.6804 3.944 38.411 3.832 38.0857 3.832C37.755 3.832 37.483 3.944 37.2697 4.168C37.0617 4.38667 36.9577 4.66933 36.9577 5.016C36.9577 5.36267 37.0617 5.648 37.2697 5.872C37.483 6.09067 37.755 6.2 38.0857 6.2ZM41.3051 8.76L42.2251 6.736H41.9851L40.4411 3.032H41.5531L42.6651 5.824L43.8251 3.032H44.9131L42.3931 8.76H41.3051Z\"\n fill=\"#001096\"\n />\n <g clip-path=\"url(#clip0_du_1)\">\n <path\n d=\"M58.5141 6.02913C58.5644 6.37005 58.8092 6.77098 59.4839 6.77098C60.0578 6.77098 60.336 6.56623 60.336 6.23338C60.336 5.90053 60.142 5.75579 59.788 5.71292L58.5988 5.58482C57.5612 5.47387 56.9539 4.86819 56.9539 3.87872C56.9539 2.77779 57.7801 2.04401 59.4335 2.04401C61.2135 2.04401 61.9221 2.88874 61.9894 3.88679H60.3195C60.2687 3.51157 59.965 3.27253 59.442 3.27253C58.9783 3.27253 58.6577 3.44349 58.6577 3.75062C58.6577 3.99774 58.8097 4.18534 59.2141 4.21964L60.1844 4.30486C61.4918 4.41582 62.0397 5.04672 62.0397 6.0962C62.0397 7.21377 61.3477 7.999 59.4504 7.999C57.5532 7.999 56.9534 7.02667 56.8691 6.02862H58.5141V6.02913Z\"\n fill=\"#001096\"\n />\n <path\n d=\"M70.1965 5.28736V7.85484H68.5431V5.56019C68.5431 5.09925 68.3746 4.80069 67.9194 4.80069C67.4212 4.80069 67.2108 5.11639 67.2108 5.78159V7.85484H65.5824V5.56019C65.5824 5.09925 65.4133 4.80069 64.9581 4.80069C64.4605 4.80069 64.2496 5.11639 64.2496 5.78159V7.85484H62.5967V3.58932H64.2496V4.24644C64.5113 3.75171 64.9581 3.45265 65.6586 3.45265C66.3592 3.45265 66.8309 3.7855 67.0587 4.35689C67.3285 3.80265 67.7842 3.45265 68.5351 3.45265C69.6735 3.45265 70.197 4.16928 70.197 5.28736H70.1965Z\"\n fill=\"#001096\"\n />\n <path\n d=\"M70.9785 3.8535V2.18118H72.6319V3.8535H70.9785ZM70.9785 7.85476V4.2504H72.6319V7.85476H70.9785Z\"\n fill=\"#001096\"\n />\n <path\n d=\"M73.4121 7.85475V2.18167H75.065V7.85525H73.4121V7.85475Z\"\n fill=\"#001096\"\n />\n <path\n d=\"M78.7264 6.53958H80.3579C80.1968 7.3243 79.5696 7.99151 78.0179 7.99151C76.2294 7.99151 75.6221 6.8568 75.6221 5.71351C75.6221 4.48499 76.3391 3.45265 78.0179 3.45265C79.8653 3.45265 80.3629 4.59594 80.3629 5.77302C80.3629 5.91776 80.3539 6.05443 80.3374 6.13966H77.2336C77.3178 6.68583 77.5881 6.89059 78.0518 6.89059C78.3729 6.89059 78.6083 6.73526 78.7269 6.53908L78.7264 6.53958ZM77.2416 5.21877H78.8022C78.7519 4.77497 78.5404 4.52785 78.0428 4.52785C77.5791 4.52785 77.3348 4.70689 77.2416 5.21877Z\"\n fill=\"#001096\"\n />\n <path\n d=\"M83.5907 7.85476H81.8994L81.9034 2.18118H83.5902L83.5912 7.85476H83.5907Z\"\n fill=\"#001096\"\n />\n <path\n d=\"M89.9995 5.00535C89.9995 6.46434 89.1474 7.85475 87.3345 7.85475H84.3652V2.18167H87.3345C89.1479 2.18167 89.9995 3.54686 89.9995 5.00535ZM86.9376 6.5067C87.8401 6.5067 88.2364 5.99482 88.2364 5.00535C88.2364 4.01588 87.8226 3.52971 86.9376 3.52971H86.06V6.5067H86.9376Z\"\n fill=\"#001096\"\n />\n <path d=\"M52.2123 3.88737H48V7.86846H52.2123V3.88737Z\" fill=\"#001096\" />\n <path\n d=\"M53.2359 0C53.2165 0 53.1975 0.00201727 53.1786 0.00252159C53.1591 0.00252159 53.1402 0 53.1207 0C52.0457 0 51.0869 0.708567 51.0869 2.27044V3.8888H55.2882V2.27044C55.2882 0.708567 54.3174 0 53.2359 0Z\"\n fill=\"#FF9B00\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_du_1\">\n <rect width=\"42\" height=\"8\" fill=\"white\" transform=\"translate(48)\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n\n// ── Props ────────────────────────────────────────────────────────────────────\n\ninterface Props {\n dir?: string;\n 'document-type'?: string;\n title?: string;\n 'hide-attribution'?: string | boolean;\n 'hide-back'?: string | boolean;\n 'hide-back-to-host'?: string | boolean;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nconst DocumentCaptureInstructions: FunctionComponent<Props> = ({\n dir,\n 'document-type': documentType = '',\n title = '',\n 'hide-attribution': hideAttributionProp = false,\n 'hide-back': hideBackProp = false,\n 'hide-back-to-host': hideBackToHostProp = false,\n}) => {\n const hideAttribution = getBoolProp(hideAttributionProp);\n const hideBack = getBoolProp(hideBackProp) || getBoolProp(hideBackToHostProp);\n const displayDocumentType =\n (documentType || title)?.replace(/[_\\s]+/g, ' ')?.trim() || '';\n const documentVariant = getDocumentVariant(displayDocumentType);\n const direction = getTextDirection(dir);\n const heroAsset = HERO_ASSETS[documentVariant];\n const rootRef = useRef<HTMLDivElement>(null);\n const guidelineItems: GuidelineItem[] = [\n { key: 'good', label: t('document.instructions.guidelines.good') },\n {\n key: 'not-cropped',\n label: t('document.instructions.guidelines.notCropped'),\n },\n {\n key: 'not-blurry',\n label: t('document.instructions.guidelines.notBlurry'),\n },\n {\n key: 'not-reflective',\n label: t('document.instructions.guidelines.notReflective'),\n },\n ];\n\n const dispatchInstructionEvent = (\n eventName:\n | 'document-capture-instructions.cancelled'\n | 'document-capture-instructions.capture',\n ) => {\n const rootNode = rootRef.current?.getRootNode();\n const shadowHost = (rootNode as ShadowRoot)?.host as\n | HTMLElement\n | undefined;\n const hostElement =\n rootRef.current?.closest('document-capture-instructions-v2') ||\n rootRef.current?.closest('document-capture-instructions') ||\n shadowHost;\n\n hostElement?.dispatchEvent(new CustomEvent(eventName));\n };\n\n const handleBack = () => {\n dispatchInstructionEvent('document-capture-instructions.cancelled');\n };\n\n const handleStartCapture = () => {\n dispatchInstructionEvent('document-capture-instructions.capture');\n };\n\n return (\n <div ref={rootRef} class=\"doc-instr-root\" dir={direction}>\n {/* ── Back button ──────────────────────────────────────── */}\n {!hideBack && (\n <button\n class=\"back-button\"\n type=\"button\"\n aria-label=\"Go back\"\n onClick={handleBack}\n >\n <BackArrowIcon />\n </button>\n )}\n\n {/* ── Scrollable content ───────────────────────────────── */}\n <div class=\"doc-instr-scroll\">\n {/* ── Title ─────────────────────────────────────────── */}\n <div class=\"doc-instr-title-block\">\n <h1 class=\"doc-instr-title\">\n <span class=\"doc-instr-title-regular\">\n {t('document.instructions.captureTitlePrefix')}{' '}\n </span>\n <span class=\"doc-instr-title-type\">\n {displayDocumentType || '<ID Type>'}\n </span>\n </h1>\n </div>\n\n {/* ── Hero illustration ─────────────────────────────── */}\n <div class=\"doc-instr-hero-card\" aria-hidden=\"true\">\n <HeroLottie\n animationSrc={heroAsset.animationSrc}\n fallbackSrc={heroAsset.fallbackSrc}\n fallbackAlt={heroAsset.fallbackAlt}\n />\n </div>\n\n {/* ── Capture guidelines ────────────────────────────── */}\n <div class=\"doc-instr-guidelines\">\n <div class=\"doc-instr-guidelines-header\">\n <GuidelinesIcon />\n <span class=\"doc-instr-guidelines-label\">\n {t('document.instructions.captureGuidelines')}\n </span>\n </div>\n\n <div class=\"doc-instr-guidelines-grid\">\n {guidelineItems.map((item) => (\n <div class=\"doc-instr-guide-item\" key={item.label}>\n <div class=\"doc-instr-guide-thumb-wrap\">\n <GuidelineThumbnail\n src={GUIDELINE_ICONS[documentVariant][item.key]}\n label={item.label}\n />\n </div>\n <p class=\"doc-instr-guide-caption\">{item.label}</p>\n </div>\n ))}\n </div>\n </div>\n </div>\n\n {/* ── CTA button ───────────────────────────────────────── */}\n <div class=\"doc-instr-footer\">\n <button\n id=\"take-photo\"\n class=\"doc-instr-start-btn\"\n type=\"button\"\n onClick={handleStartCapture}\n >\n <span>{t('document.instructions.startCapture')}</span>\n <ArrowRightIcon />\n </button>\n\n {/* ── Attribution ───────────────────────────────────── */}\n {!hideAttribution && (\n <div class=\"doc-instr-attribution\">\n <PoweredBySmileIdLogo />\n </div>\n )}\n </div>\n\n {/* ── Scoped styles ────────────────────────────────────── */}\n <style>{`\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n }\n\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n\n .doc-instr-root {\n font-family: 'DM Sans', system-ui, -apple-system, sans-serif;\n background: #ffffff;\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n min-height: 100%;\n position: relative;\n overflow: hidden;\n }\n\n /* ── Back button ─────────────────────────────────────── */\n .back-button {\n position: absolute;\n top: 24px;\n left: 20px;\n z-index: 10;\n width: 40px;\n height: 40px;\n border-radius: 50%;\n background: #2d2b2a;\n border: 1px solid rgba(255, 255, 255, 0.1);\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n flex-shrink: 0;\n transition: opacity 0.15s ease;\n }\n\n .back-button:hover {\n opacity: 0.85;\n }\n\n .back-button:focus-visible {\n outline: 2px solid #151f72;\n outline-offset: 3px;\n }\n\n /* ── Scrollable area ──────────────────────────────────── */\n .doc-instr-scroll {\n flex: 1;\n overflow-y: auto;\n padding: 88px 20px 16px;\n display: flex;\n flex-direction: column;\n gap: 24px;\n -webkit-overflow-scrolling: touch;\n }\n\n /* ── Title ───────────────────────────────────────────── */\n .doc-instr-title-block {\n width: 100%;\n }\n\n .doc-instr-title {\n font-size: clamp(20px, 5vw, 26px);\n font-weight: 800;\n line-height: 1.25;\n letter-spacing: -0.025em;\n }\n\n .doc-instr-title-regular {\n color: #0f172b;\n }\n\n .doc-instr-title-type {\n display: block;\n color: #151f72;\n }\n\n /* ── Hero card ───────────────────────────────────────── */\n .doc-instr-hero-card {\n width: 100%;\n background: #f9f0e7;\n border-radius: 24px;\n overflow: hidden;\n box-shadow: inset 0px 2px 4px 0px rgba(0, 0, 0, 0.05);\n border: 1px solid rgba(241, 245, 249, 0.5);\n aspect-ratio: 4 / 3;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .doc-instr-hero-img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n border-radius: inherit;\n }\n\n .doc-instr-hero-media {\n position: relative;\n width: 100%;\n height: 100%;\n }\n\n .doc-instr-hero-canvas {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n }\n\n /* ── Guidelines ──────────────────────────────────────── */\n .doc-instr-guidelines {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .doc-instr-guidelines-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding-left: 4px;\n }\n\n .doc-instr-guidelines-label {\n font-size: 11px;\n font-weight: 700;\n letter-spacing: 0.05em;\n text-transform: uppercase;\n color: #0f172b;\n }\n\n .doc-instr-guidelines-grid {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 8px;\n }\n\n /* ── Guide item ──────────────────────────────────────── */\n .doc-instr-guide-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 6px;\n }\n\n .doc-instr-guide-thumb-wrap {\n position: relative;\n width: 100%;\n }\n\n .doc-instr-guide-thumb {\n display: block;\n width: 100%;\n height: auto;\n }\n\n /* ── Caption ─────────────────────────────────────────── */\n .doc-instr-guide-caption {\n font-size: 9px;\n font-weight: 500;\n color: #151f72;\n text-align: center;\n letter-spacing: 0.01em;\n line-height: 1.2;\n white-space: nowrap;\n }\n\n /* ── Footer / CTA ────────────────────────────────────── */\n .doc-instr-footer {\n padding: 16px 20px 24px;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n flex-shrink: 0;\n }\n\n .doc-instr-start-btn {\n width: 100%;\n max-width: 400px;\n height: 56px;\n background: #151f72;\n color: #ffffff;\n border: none;\n border-radius: 32px;\n font-size: 16px;\n font-weight: 700;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n box-shadow: 0px 8px 10px 0px #e2e8f0;\n transition: opacity 0.15s ease, transform 0.1s ease;\n letter-spacing: 0.01em;\n }\n\n .doc-instr-start-btn:hover {\n opacity: 0.9;\n }\n\n .doc-instr-start-btn:active {\n transform: scale(0.98);\n }\n\n .doc-instr-start-btn:focus-visible {\n outline: 2px solid #151f72;\n outline-offset: 3px;\n }\n\n /* ── Attribution ─────────────────────────────────────── */\n .doc-instr-attribution {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n /* ── Responsive – desktop breakpoint ─────────────────── */\n @media (min-width: 640px) {\n .doc-instr-scroll {\n padding-top: 96px;\n padding-left: 32px;\n padding-right: 32px;\n }\n\n .doc-instr-footer {\n padding-left: 32px;\n padding-right: 32px;\n }\n\n .back-button {\n top: 28px;\n left: 28px;\n }\n\n .doc-instr-hero-card {\n border-radius: 32px;\n }\n\n .doc-instr-guide-caption {\n font-size: 10px;\n }\n }\n\n /* ── Very small screens (< 360px) ────────────────────── */\n @media (max-width: 360px) {\n .doc-instr-guidelines-grid {\n gap: 4px;\n }\n\n .doc-instr-guide-caption {\n font-size: 8px;\n }\n\n .doc-instr-title {\n font-size: 18px;\n }\n }\n `}</style>\n </div>\n );\n};\n\n// ── Register as custom element ───────────────────────────────────────────────\n\nif (\n window.customElements &&\n !window.customElements.get('document-capture-instructions-v2')\n) {\n register(\n DocumentCaptureInstructions,\n 'document-capture-instructions-v2',\n [\n 'dir',\n 'document-type',\n 'title',\n 'hide-attribution',\n 'hide-back',\n 'hide-back-to-host',\n ],\n { shadow: true },\n );\n}\n\nexport default DocumentCaptureInstructions;\n","import { IMAGE_TYPE } from '../../../domain/constants/src/Constants';\nimport styles from '../../../styles/src/styles';\nimport SmartCamera from '../../../domain/camera/src/SmartCamera';\nimport { t } from '../../../domain/localisation';\n\nimport './document-capture';\nimport './document-capture-review';\nimport './document-capture-instructions';\nimport packageJson from '../../../../package.json';\n\nconst COMPONENTS_VERSION = packageJson.version;\n\nconst smartCameraWeb = document.querySelector('smart-camera-web');\n\nasync function getPermissions(captureScreen) {\n try {\n const stream = await SmartCamera.getMedia({\n audio: false,\n video: SmartCamera.environmentOptions,\n });\n const devices = await navigator.mediaDevices.enumerateDevices();\n const videoDevice = devices.find(\n (device) =>\n device.kind === 'videoinput' &&\n stream.getVideoTracks()[0].getSettings().deviceId === device.deviceId,\n );\n smartCameraWeb?.dispatchEvent(\n new CustomEvent('metadata.camera-name', {\n detail: { cameraName: videoDevice?.label },\n }),\n );\n captureScreen.removeAttribute('data-camera-error');\n captureScreen.setAttribute('data-camera-ready', true);\n } catch (error) {\n captureScreen.removeAttribute('data-camera-ready');\n captureScreen.setAttribute(\n 'data-camera-error',\n SmartCamera.handleCameraError(error),\n );\n }\n}\n\nclass DocumentCaptureScreens extends HTMLElement {\n constructor() {\n super();\n this.activeScreen = null;\n this.smartCameraWeb = this.closest('smart-camera-web');\n smartCameraWeb?.dispatchEvent(new CustomEvent('metadata.initialize'));\n }\n\n connectedCallback() {\n const instructionsTag = this.newInstructions\n ? 'document-capture-instructions-v2'\n : 'document-capture-instructions';\n this.innerHTML = `\n ${styles(this.themeColor)}\n <div style=\"height: 100%;\">\n <${instructionsTag} theme-color='${this.themeColor}' id='document-capture-instructions-front' ${this.title} ${this.documentType}\n ${this.documentCaptureModes} ${this.showNavigation} ${this.hideInstructions ? 'hidden' : ''}\n ${this.hideAttribution}\n ></${instructionsTag}>\n <document-capture id='document-capture-front' side-of-id='Front'\n ${this.title || `title='${t('document.title.front')}'`} ${this.showNavigation} ${this.hideInstructions ? '' : 'hidden'} ${this.hideAttribution}\n ${this.documentCaptureModes} ${this.documentType} theme-color='${this.themeColor}'\n ></document-capture>\n <${instructionsTag} id='document-capture-instructions-back' side-of-id='Back' title='${t('document.title.back')}'\n ${this.documentCaptureModes} ${this.showNavigation} theme-color='${this.themeColor}' ${this.hideAttribution} hidden\n ></${instructionsTag}>\n <document-capture id='document-capture-back' side-of-id='Back' ${this.title || `title='${t('document.title.back')}'`} ${this.showNavigation}\n ${this.documentCaptureModes} theme-color='${this.themeColor}' ${this.hideAttribution}\n hidden \n ></document-capture>\n <document-capture-review id='front-of-document-capture-review' theme-color='${this.themeColor}' ${this.hideAttribution} hidden></document-capture-review>\n <document-capture-review id='back-of-document-capture-review' theme-color='${this.themeColor}' ${this.hideAttribution} hidden></document-capture-review>\n </div>\n `;\n\n this._data = {\n images: [],\n meta: {\n libraryVersion: COMPONENTS_VERSION,\n },\n };\n\n this.documentInstruction = this.querySelector(\n '#document-capture-instructions-front',\n );\n this.documentInstructionBack = this.querySelector(\n '#document-capture-instructions-back',\n );\n this.idCapture = this.querySelector('#document-capture-front');\n this.idReview = this.querySelector('#front-of-document-capture-review');\n this.idCaptureBack = this.querySelector('#document-capture-back');\n this.backOfIdReview = this.querySelector(\n '#back-of-document-capture-review',\n );\n this.thankYouScreen = this.querySelector('thank-you');\n\n if (this.hideInstructions) {\n getPermissions(this.idCapture);\n this.setActiveScreen(this.idCapture);\n } else {\n this.setActiveScreen(this.documentInstruction);\n }\n\n this.setUpEventListeners();\n }\n\n disconnectedCallback() {\n SmartCamera.stopMedia();\n smartCameraWeb?.dispatchEvent(new CustomEvent('metadata.cleanup'));\n if (this.activeScreen) {\n this.activeScreen.removeAttribute('hidden');\n }\n this.activeScreen = null;\n this.innerHTML = '';\n }\n\n setUpEventListeners() {\n this.documentInstruction.addEventListener(\n 'document-capture-instructions.cancelled',\n () => {\n this.handleBackEvents();\n },\n );\n\n this.documentInstruction.addEventListener(\n 'document-capture-instructions.capture',\n async () => {\n smartCameraWeb?.dispatchEvent(\n new CustomEvent('metadata.document-front-capture-start'),\n );\n smartCameraWeb?.dispatchEvent(\n new CustomEvent('metadata.document-front-origin', {\n detail: { imageOrigin: 'camera_manual_capture' },\n }),\n );\n this.setActiveScreen(this.idCapture);\n await getPermissions(this.idCapture);\n },\n );\n this.documentInstruction.addEventListener(\n 'document-capture-instructions.upload',\n async (event) => {\n smartCameraWeb?.dispatchEvent(\n new CustomEvent('metadata.document-front-origin', {\n detail: { imageOrigin: 'gallery' },\n }),\n );\n this.idReview.setAttribute('data-image', event.detail.previewImage);\n this._data.images.push({\n image: event.detail.image.split(',')[1],\n image_type_id: IMAGE_TYPE.ID_CARD_IMAGE_BASE64,\n });\n this.setActiveScreen(this.idReview);\n },\n );\n\n this.idCapture.addEventListener('document-capture.publish', (event) => {\n smartCameraWeb?.dispatchEvent(\n new CustomEvent('metadata.document-front-capture-end'),\n );\n this.idReview.setAttribute('data-image', event.detail.previewImage);\n this._data.images.push({\n image: event.detail.image.split(',')[1],\n image_type_id: IMAGE_TYPE.ID_CARD_IMAGE_BASE64,\n });\n SmartCamera.stopMedia();\n this.setActiveScreen(this.idReview);\n });\n\n this.idCapture.addEventListener('document-capture.cancelled', () => {\n if (this.hideInstructions) {\n this.handleBackEvents();\n } else {\n this.setActiveScreen(this.documentInstruction);\n }\n });\n\n this.idReview.addEventListener(\n 'document-capture-review.rejected',\n async () => {\n smartCameraWeb?.dispatchEvent(\n new CustomEvent('metadata.document-front-capture-retry'),\n );\n this.idReview.removeAttribute('data-image');\n this._data.images.pop();\n if (this.hideInstructions) {\n this.setActiveScreen(this.idCapture);\n await getPermissions(this.idCapture);\n } else {\n this.setActiveScreen(this.documentInstruction);\n }\n },\n );\n\n this.idReview.addEventListener(\n 'document-capture-review.accepted',\n async () => {\n if (this.hideBackOfId) {\n this._publishSelectedImages();\n } else if (this.hideInstructions) {\n this.setActiveScreen(this.idCaptureBack);\n await getPermissions(this.idCaptureBack);\n } else {\n this.setActiveScreen(this.documentInstructionBack);\n }\n },\n );\n\n this.documentInstructionBack.addEventListener(\n 'document-capture-instructions.capture',\n async () => {\n smartCameraWeb?.dispatchEvent(\n new CustomEvent('metadata.document-back-capture-start'),\n );\n smartCameraWeb?.dispatchEvent(\n new CustomEvent('metadata.document-back-origin', {\n detail: { imageOrigin: 'camera_manual_capture' },\n }),\n );\n this.setActiveScreen(this.idCaptureBack);\n await getPermissions(this.idCaptureBack);\n },\n );\n\n this.documentInstructionBack.addEventListener(\n 'document-capture-instructions.cancelled',\n async () => {\n this.idReview.removeAttribute('data-image');\n this._data.images.pop();\n if (this.hideInstructions) {\n this.setActiveScreen(this.idCapture);\n await getPermissions(this.idCapture);\n } else {\n this.setActiveScreen(this.documentInstruction);\n }\n },\n );\n\n this.documentInstructionBack.addEventListener(\n 'document-capture-instructions.upload',\n async (event) => {\n smartCameraWeb?.dispatchEvent(\n new CustomEvent('metadata.document-back-origin', {\n detail: { imageOrigin: 'gallery' },\n }),\n );\n this.backOfIdReview.setAttribute('data-image', event.detail.image);\n this._data.images.push({\n image: event.detail.image.split(',')[1],\n image_type_id: IMAGE_TYPE.ID_CARD_BACK_IMAGE_BASE64,\n });\n this.setActiveScreen(this.backOfIdReview);\n },\n );\n this.idCaptureBack.addEventListener('document-capture.publish', (event) => {\n smartCameraWeb?.dispatchEvent(\n new CustomEvent('metadata.document-back-capture-end'),\n );\n this.backOfIdReview.setAttribute('data-image', event.detail.previewImage);\n this._data.images.push({\n image: event.detail.image.split(',')[1],\n image_type_id: IMAGE_TYPE.ID_CARD_BACK_IMAGE_BASE64,\n });\n this.setActiveScreen(this.backOfIdReview);\n SmartCamera.stopMedia();\n });\n\n this.idCaptureBack.addEventListener(\n 'document-capture.cancelled',\n async () => {\n if (this.hideInstructions) {\n this.setActiveScreen(this.idCapture);\n await getPermissions(this.idCapture);\n } else {\n this.setActiveScreen(this.documentInstructionBack);\n }\n },\n );\n\n this.backOfIdReview.addEventListener(\n 'document-capture-review.rejected',\n async () => {\n smartCameraWeb?.dispatchEvent(\n new CustomEvent('metadata.document-back-capture-retry'),\n );\n this.backOfIdReview.removeAttribute('data-image');\n this._data.images.pop();\n if (this.hideInstructions) {\n this.setActiveScreen(this.idCaptureBack);\n await getPermissions(this.idCaptureBack);\n } else {\n this.setActiveScreen(this.documentInstructionBack);\n }\n },\n );\n\n this.backOfIdReview.addEventListener(\n 'document-capture-review.accepted',\n () => {\n this._publishSelectedImages();\n },\n );\n\n const screens = [\n this.documentInstruction,\n this.idCapture,\n this.documentInstructionBack,\n this.idCaptureBack,\n this.idReview,\n this.backOfIdReview,\n ];\n\n screens.forEach((screen) => {\n screen.addEventListener(`${screen.nodeName.toLowerCase()}.close`, () =>\n this.handleCloseEvents(),\n );\n });\n }\n\n _publishSelectedImages() {\n this.dispatchEvent(\n new CustomEvent('document-capture-screens.publish', {\n detail: this._data,\n }),\n );\n }\n\n get hideInstructions() {\n return this.hasAttribute('hide-instructions');\n }\n\n get hideBackOfId() {\n return this.hasAttribute('hide-back-of-id');\n }\n\n get showNavigation() {\n return this.hasAttribute('show-navigation') ? 'show-navigation' : '';\n }\n\n get title() {\n return this.hasAttribute('title')\n ? `title=${this.getAttribute('title')}`\n : '';\n }\n\n get documentCaptureModes() {\n return this.hasAttribute('document-capture-modes')\n ? `document-capture-modes='${this.getAttribute('document-capture-modes')}'`\n : '';\n }\n\n get documentType() {\n return this.hasAttribute('document-type')\n ? `document-type='${this.getAttribute('document-type')}'`\n : '';\n }\n\n get hideAttribution() {\n return this.hasAttribute('hide-attribution') ? 'hide-attribution' : '';\n }\n\n get newInstructions() {\n return this.hasAttribute('new-instructions');\n }\n\n get themeColor() {\n return this.getAttribute('theme-color') || '#001096';\n }\n\n handleBackEvents() {\n this.dispatchEvent(new CustomEvent('document-capture-screens.cancelled'));\n }\n\n handleCloseEvents() {\n this.dispatchEvent(new CustomEvent('document-capture-screens.close'));\n }\n\n setActiveScreen(screen) {\n this.activeScreen?.setAttribute('hidden', '');\n screen.removeAttribute('hidden');\n this.activeScreen = screen;\n }\n\n static get observedAttributes() {\n return [\n 'document-capture-modes',\n 'document-type',\n 'hide-back-to-host',\n 'show-navigation',\n 'hide-back-of-id',\n 'new-instructions',\n ];\n }\n\n attributeChangedCallback(name) {\n switch (name) {\n case 'document-capture-modes':\n case 'document-type':\n case 'hide-back-of-id':\n case 'hide-back-to-host':\n case 'show-navigation':\n case 'new-instructions':\n this.innerHTML = '';\n this.connectedCallback();\n break;\n default:\n break;\n }\n }\n}\n\nif (\n 'customElements' in window &&\n !customElements.get('document-capture-screens')\n) {\n customElements.define('document-capture-screens', DocumentCaptureScreens);\n}\n\nexport default DocumentCaptureScreens;\n"],"names":["hasMoreThanNColors","data","n","colors","templateString","styles","t","documentCaptureScale","DocumentCapture","template","SmartCamera","error","imageDetails","video","canvas","previewCanvas","image","JPEG_QUALITY","previewImage","height","intermediateCanvas","enableImageTests","context","imageData","stream","videoExists","videoContainer","onVideoStart","portrait","scaleHeight","scaleWidth","heightScaleFactor","widthScaleFactor","scaleHeightOffset","scaleWidthOffset","width","startX","startY","videoHeight","videoWidth","cropWidth","cropHeight","sourceCanvas","destinationCanvas","aspectRatio","offsetX","offsetY","track","value","getDirection","name","IdReview","SmartFileUpload","numberOfBytes","units","exponent","approx","file","resolve","reject","reader","e","files","tHtml","frontDocumentIcon","backDocumentIcon","escapeHtml","DocumentInstruction","event","fileData","HERO_ID_CARD_LOTTIE_URL","HERO_PASSPORT_LOTTIE_URL","HERO_GREENBOOK_LOTTIE_URL","HERO_IMAGE_FALLBACK_URL","HERO_ASSETS","GUIDELINE_ICONS","getDocumentVariant","idType","normalized","getTextDirection","dir","HeroLottie","animationSrc","fallbackSrc","fallbackAlt","canvasRef","useRef","hasError","setHasError","useState","useEffect","isMounted","animation","DotLottie","jsxs","jsx","BackArrowIcon","ArrowRightIcon","GuidelinesIcon","GuidelineThumbnail","src","label","PoweredBySmileIdLogo","DocumentCaptureInstructions","documentType","title","hideAttributionProp","hideBackProp","hideBackToHostProp","hideAttribution","getBoolProp","hideBack","displayDocumentType","documentVariant","direction","heroAsset","rootRef","guidelineItems","dispatchInstructionEvent","eventName","shadowHost","handleBack","handleStartCapture","item","register","COMPONENTS_VERSION","packageJson","smartCameraWeb","getPermissions","captureScreen","videoDevice","device","DocumentCaptureScreens","instructionsTag","IMAGE_TYPE","screen"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { s } from "./styles-BTEClL7R.js";
2
- import "./TotpConsent-Depzg0ti.js";
2
+ import "./TotpConsent-CRtmtudl.js";
3
3
  import "./PoweredBySmileId-CxbaihMu.js";
4
- import { b as r, t, i as n } from "./index-C4RTMbgw.js";
4
+ import { b as r, t, i as n } from "./index-CUwa6MPI.js";
5
5
  function l() {
6
6
  return `
7
7
  <style>
@@ -714,4 +714,4 @@ class a extends HTMLElement {
714
714
  export {
715
715
  a as E
716
716
  };
717
- //# sourceMappingURL=EndUserConsent-uHfA3txP.js.map
717
+ //# sourceMappingURL=EndUserConsent-CsiwoThZ.js.map