@smileid/web-components 10.0.0 → 10.0.3

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 (60) hide show
  1. package/dist/{DocumentCaptureScreens-Dwl7UqVH.js → esm/DocumentCaptureScreens-CkWKSrqy.js} +3 -5
  2. package/dist/esm/DocumentCaptureScreens-CkWKSrqy.js.map +1 -0
  3. package/dist/{EndUserConsent-C5hZdJzH.js → esm/EndUserConsent-CMHp-34-.js} +2 -2
  4. package/dist/esm/EndUserConsent-CMHp-34-.js.map +1 -0
  5. package/dist/esm/Navigation-juBE4qOw.js.map +1 -0
  6. package/dist/esm/PoweredBySmileId-CxbaihMu.js.map +1 -0
  7. package/dist/{SelfieCaptureScreens-CQc251hz.js → esm/SelfieCaptureScreens-BF1keQ0h.js} +2282 -2281
  8. package/dist/esm/SelfieCaptureScreens-BF1keQ0h.js.map +1 -0
  9. package/dist/esm/SignaturePad-C7MtmT8m.js.map +1 -0
  10. package/dist/esm/TotpConsent-CQU5jQi4.js.map +1 -0
  11. package/dist/esm/combobox.js.map +1 -0
  12. package/dist/{document.js → esm/document.js} +1 -1
  13. package/dist/{end-user-consent.js → esm/end-user-consent.js} +1 -1
  14. package/dist/{main.js → esm/main.js} +3 -3
  15. package/dist/{package-Oi2Yil3b.js → esm/package-CmYr0HUS.js} +2 -2
  16. package/dist/esm/package-CmYr0HUS.js.map +1 -0
  17. package/dist/{selfie.js → esm/selfie.js} +1 -1
  18. package/dist/esm/smart-camera-web.js +302 -0
  19. package/dist/esm/smart-camera-web.js.map +1 -0
  20. package/dist/{styles-BUWNxWeQ.js → esm/styles-D2i3GFLK.js} +1 -2
  21. package/dist/esm/styles-D2i3GFLK.js.map +1 -0
  22. package/dist/smart-camera-web.js +4052 -224
  23. package/dist/smart-camera-web.js.map +1 -1
  24. package/lib/components/camera-permission/CameraPermission.js +0 -1
  25. package/lib/components/document/src/document-capture/DocumentCapture.js +0 -1
  26. package/lib/components/document/src/document-capture-review/DocumentCaptureReview.js +0 -1
  27. package/lib/components/selfie/src/selfie-capture/SelfieCapture.js +0 -1
  28. package/lib/components/selfie/src/selfie-capture-instructions/SelfieCaptureInstructions.js +0 -1
  29. package/lib/components/selfie/src/selfie-capture-review/SelfieCaptureReview.js +1 -1
  30. package/lib/components/selfie/src/selfie-capture-wrapper/SelfieCaptureWrapper.tsx +35 -36
  31. package/lib/components/selfie/src/smartselfie-capture/SmartSelfieCapture.tsx +0 -1
  32. package/lib/components/selfie/src/smartselfie-capture/utils/imageCapture.ts +2 -2
  33. package/lib/components/signature-pad/package.json +1 -1
  34. package/lib/styles/src/styles.js +0 -1
  35. package/package.json +15 -14
  36. package/dist/DocumentCaptureScreens-Dwl7UqVH.js.map +0 -1
  37. package/dist/EndUserConsent-C5hZdJzH.js.map +0 -1
  38. package/dist/Navigation-juBE4qOw.js.map +0 -1
  39. package/dist/PoweredBySmileId-CxbaihMu.js.map +0 -1
  40. package/dist/SelfieCaptureScreens-CQc251hz.js.map +0 -1
  41. package/dist/SignaturePad-C7MtmT8m.js.map +0 -1
  42. package/dist/TotpConsent-CQU5jQi4.js.map +0 -1
  43. package/dist/combobox.js.map +0 -1
  44. package/dist/package-Oi2Yil3b.js.map +0 -1
  45. package/dist/styles-BUWNxWeQ.js.map +0 -1
  46. /package/dist/{Navigation-juBE4qOw.js → esm/Navigation-juBE4qOw.js} +0 -0
  47. /package/dist/{PoweredBySmileId-CxbaihMu.js → esm/PoweredBySmileId-CxbaihMu.js} +0 -0
  48. /package/dist/{SignaturePad-C7MtmT8m.js → esm/SignaturePad-C7MtmT8m.js} +0 -0
  49. /package/dist/{TotpConsent-CQU5jQi4.js → esm/TotpConsent-CQU5jQi4.js} +0 -0
  50. /package/dist/{combobox.js → esm/combobox.js} +0 -0
  51. /package/dist/{document.js.map → esm/document.js.map} +0 -0
  52. /package/dist/{end-user-consent.js.map → esm/end-user-consent.js.map} +0 -0
  53. /package/dist/{main.js.map → esm/main.js.map} +0 -0
  54. /package/dist/{navigation.js → esm/navigation.js} +0 -0
  55. /package/dist/{navigation.js.map → esm/navigation.js.map} +0 -0
  56. /package/dist/{selfie.js.map → esm/selfie.js.map} +0 -0
  57. /package/dist/{signature-pad.js → esm/signature-pad.js} +0 -0
  58. /package/dist/{signature-pad.js.map → esm/signature-pad.js.map} +0 -0
  59. /package/dist/{totp-consent.js → esm/totp-consent.js} +0 -0
  60. /package/dist/{totp-consent.js.map → esm/totp-consent.js.map} +0 -0
@@ -8,7 +8,6 @@ function templateString() {
8
8
  ${styles(this.themeColor)}
9
9
  <style>
10
10
  .camera-permission-screen {
11
- padding-block: 2rem;
12
11
  display: flex;
13
12
  flex-direction: column;
14
13
  max-block-size: 100%;
@@ -61,7 +61,6 @@ function templateString() {
61
61
  #document-capture-screen,
62
62
  #back-of-document-capture-screen {
63
63
  block-size: 45rem;
64
- padding-block: 2rem;
65
64
  display: flex;
66
65
  flex-direction: column;
67
66
  max-block-size: 100%;
@@ -126,7 +126,6 @@ function templateString() {
126
126
 
127
127
  #document-capture-review-screen {
128
128
  block-size: 45rem;
129
- padding-block: 2rem;
130
129
  display: flex;
131
130
  flex-direction: column;
132
131
  max-block-size: 100%;
@@ -468,7 +468,6 @@ function templateString() {
468
468
  #selfie-capture-screen,
469
469
  #back-of-id-entry-screen {
470
470
  block-size: 45rem;
471
- padding-block: 2rem;
472
471
  display: flex;
473
472
  flex-direction: column;
474
473
  max-block-size: 100%;
@@ -260,7 +260,6 @@ function templateString() {
260
260
  }
261
261
 
262
262
  #selfie-capture-instruction-screen {
263
- padding-block: 2rem;
264
263
  display: flex;
265
264
  flex-direction: column;
266
265
  max-block-size: 100%;
@@ -94,7 +94,6 @@ function templateString() {
94
94
  }
95
95
  #selfie-capture-review-screen {
96
96
  block-size: 45rem;
97
- padding-block: 2rem;
98
97
  display: flex;
99
98
  flex-direction: column;
100
99
  max-block-size: 100%;
@@ -211,6 +210,7 @@ function templateString() {
211
210
  id='document-capture-review-image'
212
211
  src='${this.imageSrc}'
213
212
  width='396'
213
+ style='transform: scaleX(-1);'
214
214
  />`
215
215
  : ''
216
216
  }
@@ -8,8 +8,6 @@ import SmartSelfieCapture from '../smartselfie-capture/SmartSelfieCapture';
8
8
  import '../selfie-capture/SelfieCapture';
9
9
  import { getMediapipeInstance } from '../smartselfie-capture/utils/mediapipeManager';
10
10
 
11
- declare const h: any;
12
-
13
11
  interface Props {
14
12
  timeout?: number;
15
13
  interval?: number;
@@ -26,7 +24,7 @@ interface Props {
26
24
  }
27
25
 
28
26
  const SelfieCaptureWrapper: FunctionComponent<Props> = ({
29
- timeout = 10000,
27
+ timeout = 20000,
30
28
  'start-countdown': startCountdownProp = false,
31
29
  hidden: hiddenProp = false,
32
30
  ...props
@@ -142,39 +140,40 @@ const SelfieCaptureWrapper: FunctionComponent<Props> = ({
142
140
  const propsWithoutHidden = { ...props };
143
141
  delete (propsWithoutHidden as any).hidden;
144
142
 
145
- const selfieCapture = h('selfie-capture', {
146
- ...propsWithoutHidden,
147
- ref: (el: HTMLElement) => {
148
- if (el && !el.hasAttribute('data-events-setup')) {
149
- el.setAttribute('data-events-setup', 'true');
150
-
151
- const forwardEvent = (event: Event) => {
152
- const customEvent = event as CustomEvent;
153
-
154
- if (
155
- customEvent.type === 'selfie-capture.publish' ||
156
- customEvent.type === 'selfie-capture.cancelled' ||
157
- customEvent.type === 'selfie-capture.close'
158
- ) {
159
- setInitialSessionCompleted(true);
160
- }
161
-
162
- window.dispatchEvent(
163
- new CustomEvent(customEvent.type, {
164
- detail: customEvent.detail,
165
- bubbles: true,
166
- }),
167
- );
168
- };
169
-
170
- el.addEventListener('selfie-capture.publish', forwardEvent);
171
- el.addEventListener('selfie-capture.cancelled', forwardEvent);
172
- el.addEventListener('selfie-capture.close', forwardEvent);
173
- }
174
- },
175
- });
176
-
177
- return selfieCapture;
143
+ return (
144
+ // @ts-ignore
145
+ <selfie-capture
146
+ {...propsWithoutHidden}
147
+ ref={(el: HTMLElement) => {
148
+ if (el && !el.hasAttribute('data-events-setup')) {
149
+ el.setAttribute('data-events-setup', 'true');
150
+
151
+ const forwardEvent = (event: Event) => {
152
+ const customEvent = event as CustomEvent;
153
+
154
+ if (
155
+ customEvent.type === 'selfie-capture.publish' ||
156
+ customEvent.type === 'selfie-capture.cancelled' ||
157
+ customEvent.type === 'selfie-capture.close'
158
+ ) {
159
+ setInitialSessionCompleted(true);
160
+ }
161
+
162
+ window.dispatchEvent(
163
+ new CustomEvent(customEvent.type, {
164
+ detail: customEvent.detail,
165
+ bubbles: true,
166
+ }),
167
+ );
168
+ };
169
+
170
+ el.addEventListener('selfie-capture.publish', forwardEvent);
171
+ el.addEventListener('selfie-capture.cancelled', forwardEvent);
172
+ el.addEventListener('selfie-capture.close', forwardEvent);
173
+ }
174
+ }}
175
+ />
176
+ );
178
177
  }
179
178
 
180
179
  return (
@@ -196,7 +196,6 @@ const SmartSelfieCapture: FunctionComponent<Props> = ({
196
196
  font-family: sans-serif;
197
197
  max-width: 356px;
198
198
  margin: 0 auto;
199
- padding-block: 2rem;
200
199
  }
201
200
  `}</style>
202
201
  </div>
@@ -37,7 +37,7 @@ export const captureImageFromVideo = (
37
37
  }
38
38
 
39
39
  // capture more of the user's head and avoid clipping
40
- const zoomOutFactor = 1.3;
40
+ const zoomOutFactor = 1;
41
41
  const sourceWidth = videoElement.videoWidth * zoomOutFactor;
42
42
  const sourceHeight = videoElement.videoHeight * zoomOutFactor;
43
43
 
@@ -46,7 +46,7 @@ export const captureImageFromVideo = (
46
46
  const offsetY = (sourceHeight - videoElement.videoHeight) / 2;
47
47
 
48
48
  // vertical offset to shift up and capture full head
49
- const verticalOffset = videoElement.videoHeight * 0.05;
49
+ const verticalOffset = 0;
50
50
 
51
51
  ctx.drawImage(
52
52
  videoElement,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smileid/signature-pad",
3
- "version": "10.0.0",
3
+ "version": "10.0.3",
4
4
  "private": "true",
5
5
  "exports": {
6
6
  ".": "./index.js"
@@ -260,7 +260,6 @@ ${typography}
260
260
 
261
261
  #document-capture-instructions-screen,
262
262
  #back-of-document-capture-instructions-screen {
263
- padding-block: 2rem;
264
263
  display: flex;
265
264
  flex-direction: column;
266
265
  max-block-size: 100%;
package/package.json CHANGED
@@ -1,47 +1,46 @@
1
1
  {
2
2
  "name": "@smileid/web-components",
3
- "version": "10.0.0",
3
+ "version": "10.0.3",
4
4
  "private": false,
5
- "main": "dist/main.js",
6
- "module": "dist/main.js",
5
+ "main": "dist/esm/main.js",
6
+ "module": "dist/esm/main.js",
7
7
  "types": "dist/types/main.d.ts",
8
8
  "exports": {
9
9
  ".": {
10
10
  "types": "./dist/types/main.d.ts",
11
- "import": "./dist/main.js",
12
- "require": "./dist/main.js"
11
+ "import": "./dist/esm/main.js"
13
12
  },
14
13
  "./combobox": {
15
14
  "types": "./dist/types/combobox.d.ts",
16
- "import": "./dist/combobox.js"
15
+ "import": "./dist/esm/combobox.js"
17
16
  },
18
17
  "./document-capture": {
19
18
  "types": "./dist/types/document.d.ts",
20
- "import": "./dist/document.js"
19
+ "import": "./dist/esm/document.js"
21
20
  },
22
21
  "./end-user-consent": {
23
22
  "types": "./dist/types/end-user-consent.d.ts",
24
- "import": "./dist/end-user-consent.js"
23
+ "import": "./dist/esm/end-user-consent.js"
25
24
  },
26
25
  "./navigation": {
27
26
  "types": "./dist/types/navigation.d.ts",
28
- "import": "./dist/navigation.js"
27
+ "import": "./dist/esm/navigation.js"
29
28
  },
30
29
  "./selfie-capture": {
31
30
  "types": "./dist/types/selfie.d.ts",
32
- "import": "./dist/selfie.js"
31
+ "import": "./dist/esm/selfie.js"
33
32
  },
34
33
  "./signature-pad": {
35
34
  "types": "./dist/types/signature-pad.d.ts",
36
- "import": "./dist/signature-pad.js"
35
+ "import": "./dist/esm/signature-pad.js"
37
36
  },
38
37
  "./totp-consent": {
39
38
  "types": "./dist/types/totp-consent.d.ts",
40
- "import": "./dist/totp-consent.js"
39
+ "import": "./dist/esm/totp-consent.js"
41
40
  },
42
41
  "./smart-camera-web": {
43
42
  "types": "./dist/types/smart-camera-web.d.ts",
44
- "import": "./dist/smart-camera-web.js"
43
+ "import": "./dist/esm/smart-camera-web.js"
45
44
  }
46
45
  },
47
46
  "files": [
@@ -53,7 +52,9 @@
53
52
  "package.json"
54
53
  ],
55
54
  "scripts": {
56
- "build": "vite build",
55
+ "build": "npm run build:iife && npm run build:esm",
56
+ "build:esm": "vite build",
57
+ "build:iife": "cross-env BUILD_FORMAT=iife vite build",
57
58
  "build:stats": "cross-env GENERATE_STATS=true vite build --mode=production && echo Bundle analysis generated at dist/bundle-analysis.html",
58
59
  "dev": "vite",
59
60
  "preview": "vite preview",
@@ -1 +0,0 @@
1
- {"version":3,"file":"DocumentCaptureScreens-Dwl7UqVH.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/DocumentCaptureScreens.js"],"sourcesContent":["import SmartCamera from '../../../../domain/camera/src/SmartCamera';\r\nimport styles from '../../../../styles/src/styles';\r\nimport '../../../navigation/src';\r\n\r\nfunction hasMoreThanNColors(data, n = 16) {\r\n const colors = new Set();\r\n for (let i = 0; i < Math.min(data.length, 10000); i += 4) {\r\n // eslint-disable-next-line no-bitwise\r\n colors.add((data[i] << 16) | (data[i + 1] << 8) | data[i + 2]);\r\n if (colors.size > n) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction templateString() {\r\n return `\r\n <style>\r\n .visually-hidden {\r\n border: 0;\r\n clip: rect(1px 1px 1px 1px);\r\n clip: rect(1px, 1px, 1px, 1px);\r\n height: auto;\r\n margin: 0;\r\n overflow: hidden;\r\n padding: 0;\r\n position: absolute;\r\n white-space: nowrap;\r\n width: 1px;\r\n }\r\n\r\n .mobile-camera-screen video {\r\n display: block;\r\n object-fit: cover;\r\n object-position: center;\r\n width: 100%;\r\n }\r\n\r\n .id-video.mobile-camera-screen {\r\n display: flex;\r\n align-items: stretch;\r\n justify-content: center;\r\n max-height: 300px;\r\n height: 15rem;\r\n width: 100%;\r\n overflow: visible;\r\n margin: 0 auto;\r\n }\r\n \r\n @media (max-width: 600px) {\r\n .section {\r\n width: 99%;\r\n height: 100vh;\r\n justify-content: center;\r\n }\r\n }\r\n\r\n\r\n\r\n #document-capture-screen,\r\n #back-of-document-capture-screen {\r\n block-size: 45rem;\r\n padding-block: 2rem;\r\n display: flex;\r\n flex-direction: column;\r\n max-block-size: 100%;\r\n max-inline-size: 40ch;\r\n }\r\n\r\n #document-capture-screen header p {\r\n margin-block: 0 !important;\r\n }\r\n\r\n .padding-bottom-2 {\r\n padding-bottom: 2rem;\r\n }\r\n @media (min-width: 600px) {\r\n video {\r\n object-fit: contain;\r\n -webkit-tap-highlight-color: transparent;\r\n content: normal;\r\n }\r\n \r\n .id-video {\r\n width: 99%;\r\n text-align: center;\r\n position: relative;\r\n overflow: hidden;\r\n }\r\n\r\n .id-video-container {\r\n margin: auto;\r\n padding: 0px;\r\n }\r\n }\r\n .id-video-container {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n }\r\n .id-video {\r\n width: 100%;\r\n text-align: center;\r\n position: relative;\r\n background: white;\r\n }\r\n .video-overlay {\r\n position: absolute;\r\n border-style: solid;\r\n border-color: rgba(0, 0, 0, 0.48);\r\n box-sizing: border-box;\r\n inset: 0px;\r\n }\r\n \r\n .video-overlay .inner-border {\r\n position: absolute;\r\n border-width: 0.25rem;\r\n border-color: #9394ab;\r\n border-style: solid;\r\n border-radius: 0.25rem;\r\n inset: -1px;\r\n }\r\n canvas {\r\n border-width: 0.25rem;\r\n border-color: #9394ab;\r\n border-style: solid;\r\n border-radius: 0.25rem;\r\n }\r\n \r\n .description {\r\n align-self: center;\r\n padding-bottom: 1.75rem;\r\n }\r\n .reset-margin-block {\r\n margin-block: 0;\r\n }\r\n .align-items-center {\r\n align-items: center;\r\n }\r\n .id-side {\r\n padding-bottom: 0.5rem;\r\n }\r\n \r\n .circle-progress {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n height: 10rem;\r\n }\r\n\r\n .portrait .sticky {\r\n position: -webkit-sticky; /* Safari */\r\n position: sticky;\r\n bottom: 0;\r\n }\r\n .video-footer {\r\n background-color: rgba(255, 255, 255, 0.17);\r\n padding-top: 10px;\r\n }\r\n </style>\r\n ${styles(this.themeColor)}\r\n <div id='document-capture-screen' class='flow center flex-column'>\r\n <smileid-navigation theme-color='${this.themeColor}' ${this.showNavigation ? 'show-navigation' : ''} ${this.hideBack ? 'hide-back' : ''}></smileid-navigation>\r\n <h2 class='text-base font-bold title-color'>${this.documentName}</h2>\r\n <div class=\"circle-progress\" id=\"loader\">\r\n ${this.cameraError ? '' : '<p class=\"spinner\"></p>'}\r\n ${this.cameraError ? `<p style=\"--flow-space: 4rem\" class='color-red | center'>${this.cameraError}</p>` : '<p style=\"--flow-space: 4rem\">Checking permissions</p>'}\r\n </div>\r\n <div class='section | flow ${this.isPortraitCaptureView ? 'portrait' : 'landscape'}' ${this.cameraError ? 'hidden' : ''}>\r\n <div class='id-video-container'>\r\n <div class='id-video ${this.isPortraitCaptureView ? 'portrait' : 'landscape'}' hidden>\r\n </div>\r\n <div class='video-footer sticky'>\r\n <h2 class='text-base font-bold title-color reset-margin-block id-side'>${this.title}</h2>\r\n <h4 class='text-base font-normal title-color description reset-margin-block'>Make sure all corners are visible and there is no glare.</h4>\r\n <div class='actions' hidden>\r\n <button id='capture-id-image' class='button icon-btn | center' type='button'>\r\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\">\r\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}\"/>\r\n </svg>\r\n <span class='visually-hidden'>Capture Document</span>\r\n </button>\r\n </div>\r\n ${this.hideAttribution ? '' : '<powered-by-smile-id></powered-by-smile-id>'}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n `;\r\n}\r\n\r\nconst documentCaptureScale = 0.6;\r\n\r\nclass DocumentCapture extends HTMLElement {\r\n constructor() {\r\n super();\r\n this.templateString = templateString.bind(this);\r\n this.render = () => this.templateString();\r\n\r\n this.attachShadow({ mode: 'open' });\r\n this.IdSides = {\r\n back: 'Back',\r\n front: 'Front',\r\n };\r\n }\r\n\r\n connectedCallback() {\r\n const template = document.createElement('template');\r\n template.innerHTML = this.render();\r\n this.shadowRoot.innerHTML = '';\r\n this.shadowRoot.appendChild(template.content.cloneNode(true));\r\n this.setUpEventListeners();\r\n }\r\n\r\n async getUserMedia() {\r\n if (SmartCamera.stream) {\r\n return;\r\n }\r\n if (!this.hasAttribute('data-camera-error')) return;\r\n\r\n try {\r\n await SmartCamera.getMedia({\r\n audio: false,\r\n video: {\r\n ...SmartCamera.environmentOptions,\r\n aspectRatio: { ideal: 16 / 9 },\r\n },\r\n });\r\n } catch (error) {\r\n console.error(error.constraint);\r\n console.error(error.message);\r\n }\r\n\r\n this.handleIDStream(SmartCamera.stream);\r\n }\r\n\r\n _captureIDImage() {\r\n const imageDetails = this._drawIDImage();\r\n this._stopIDVideoStream();\r\n\r\n this.dispatchEvent(\r\n new CustomEvent('document-capture.publish', {\r\n detail: {\r\n ...imageDetails,\r\n },\r\n }),\r\n );\r\n }\r\n\r\n _drawIDImage(video = this._IDVideo) {\r\n const canvas = document.createElement('canvas');\r\n if (this.isPortraitCaptureView) {\r\n canvas.width = video.videoWidth;\r\n canvas.height = (canvas.width * 16) / 9;\r\n\r\n const previewCanvas = document.createElement('canvas');\r\n previewCanvas.width = canvas.width;\r\n previewCanvas.height = canvas.height;\r\n\r\n this.updatePortraitId(canvas, video, 1, 1);\r\n this.updatePortraitId(previewCanvas, video);\r\n const image = canvas.toDataURL('image/jpeg');\r\n const previewImage = previewCanvas.toDataURL('image/jpeg');\r\n return {\r\n image,\r\n originalHeight: canvas.height,\r\n originalWidth: canvas.width,\r\n previewImage,\r\n ...this.idCardRegion,\r\n };\r\n }\r\n\r\n canvas.width = 2240;\r\n canvas.height = 1260;\r\n\r\n const height = canvas.width / (video.videoWidth / video.videoHeight);\r\n canvas.height = height;\r\n\r\n const previewCanvas = document.createElement('canvas');\r\n previewCanvas.height = canvas.height;\r\n previewCanvas.width = canvas.width;\r\n const isPortrait = video.videoWidth < video.videoHeight;\r\n if (isPortrait) {\r\n const intermediateCanvas = document.createElement('canvas');\r\n previewCanvas.height = canvas.width / 1.75;\r\n canvas.width = 2240;\r\n canvas.height = canvas.width / 1.77;\r\n this._capturePortraitToLandscapeImage(intermediateCanvas, video);\r\n this._drawLandscapeImageFromCanvas(canvas, intermediateCanvas, 1, 1);\r\n this._drawLandscapeImageFromCanvas(previewCanvas, intermediateCanvas);\r\n } else {\r\n this._drawLandscapeImage(canvas, video, 1, 1);\r\n this._drawLandscapeImage(previewCanvas, video);\r\n }\r\n const image = canvas.toDataURL('image/jpeg');\r\n\r\n const previewImage = previewCanvas.toDataURL('image/jpeg');\r\n return {\r\n image,\r\n originalHeight: canvas.height,\r\n originalWidth: canvas.width,\r\n previewImage,\r\n ...this.idCardRegion,\r\n };\r\n }\r\n\r\n _drawImage(canvas, enableImageTests = true, video = SmartCamera.stream) {\r\n this.resetErrorMessage();\r\n const context = canvas.getContext('2d');\r\n\r\n context.drawImage(\r\n video,\r\n 0,\r\n 0,\r\n video.videoWidth,\r\n video.videoHeight,\r\n 0,\r\n 0,\r\n canvas.width,\r\n canvas.height,\r\n );\r\n\r\n if (enableImageTests) {\r\n const imageData = context.getImageData(0, 0, canvas.width, canvas.height);\r\n\r\n const hasEnoughColors = hasMoreThanNColors(imageData.data);\r\n\r\n if (hasEnoughColors) {\r\n return context;\r\n }\r\n throw new Error(\r\n 'Unable to capture webcam images - Please try another device',\r\n );\r\n } else {\r\n return context;\r\n }\r\n }\r\n\r\n handleIDStream(stream) {\r\n try {\r\n const videoExists = this.shadowRoot.querySelector('canvas');\r\n if (videoExists) {\r\n // remove canvas\r\n videoExists.remove();\r\n }\r\n let video = null;\r\n let canvas = null;\r\n video = document.createElement('video');\r\n canvas = document.createElement('canvas');\r\n const videoContainer = this.shadowRoot.querySelector(\r\n '.id-video-container',\r\n );\r\n\r\n video.muted = true;\r\n video.setAttribute('muted', 'true');\r\n\r\n video.autoplay = true;\r\n video.playsInline = true;\r\n if ('srcObject' in video) {\r\n video.srcObject = stream;\r\n } else {\r\n video.src = window.URL.createObjectURL(stream);\r\n }\r\n\r\n canvas.width = videoContainer.clientWidth;\r\n canvas.height = (videoContainer.clientWidth * 9) / 16;\r\n if (this.isPortraitCaptureView) {\r\n canvas.height = (videoContainer.clientWidth * 16) / 9;\r\n }\r\n\r\n video.onloadedmetadata = () => {\r\n video.play();\r\n\r\n this.shadowRoot.querySelector('#loader').hidden = true;\r\n this.shadowRoot.querySelector('.id-video').hidden = false;\r\n this.shadowRoot.querySelector('.actions').hidden = false;\r\n if (!videoExists) {\r\n videoContainer.prepend(canvas);\r\n }\r\n };\r\n\r\n const onVideoStart = () => {\r\n if (video.paused || video.ended) return;\r\n video.removeEventListener('playing', onVideoStart);\r\n const aspectRatio = video.videoWidth / video.videoHeight;\r\n const portrait = aspectRatio < 1;\r\n if (this.isPortraitCaptureView) {\r\n this.updatePortraitId(canvas, video);\r\n requestAnimationFrame(onVideoStart);\r\n return;\r\n }\r\n\r\n if (portrait) {\r\n videoContainer.classList.add('mobile-camera-screen');\r\n const intermediateCanvas = document.createElement('canvas');\r\n this._capturePortraitToLandscapeImage(intermediateCanvas, video);\r\n this._drawLandscapeImageFromCanvas(canvas, intermediateCanvas);\r\n } else {\r\n this._drawLandscapeImage(canvas, video);\r\n }\r\n requestAnimationFrame(onVideoStart);\r\n };\r\n\r\n video.addEventListener('playing', onVideoStart);\r\n\r\n this._IDStream = stream;\r\n this._IDVideo = video;\r\n } catch (error) {\r\n this.setAttribute(\r\n 'data-camera-error',\r\n SmartCamera.handleCameraError(error),\r\n );\r\n if (error.name !== 'AbortError') {\r\n console.error(error);\r\n }\r\n SmartCamera.stopMedia();\r\n }\r\n }\r\n\r\n _drawLandscapeImage(\r\n canvas,\r\n video = this._IDVideo,\r\n scaleHeight = documentCaptureScale,\r\n scaleWidth = documentCaptureScale,\r\n ) {\r\n const heightScaleFactor = this.height\r\n ? this.height / video.videoHeight\r\n : scaleHeight;\r\n const widthScaleFactor = this.width\r\n ? this.width / video.videoWidth\r\n : scaleWidth;\r\n const scaleHeightOffset = (1 - scaleHeight) / 2;\r\n const scaleWidthOffset = (1 - scaleWidth) / 2;\r\n const width = video.videoWidth * widthScaleFactor;\r\n const height = video.videoHeight * heightScaleFactor;\r\n const startX = video.videoWidth * scaleWidthOffset;\r\n const startY = video.videoHeight * scaleHeightOffset;\r\n\r\n canvas\r\n .getContext('2d')\r\n .drawImage(\r\n video,\r\n startX,\r\n startY,\r\n width,\r\n height,\r\n 0,\r\n 0,\r\n canvas.width,\r\n canvas.height,\r\n );\r\n }\r\n\r\n _capturePortraitToLandscapeImage(canvas, video = this._IDVideo) {\r\n const { videoHeight, videoWidth } = video;\r\n const cropWidth = videoWidth;\r\n const cropHeight = (videoWidth * 9) / 16; // convert to landscape aspect ratio\r\n const startX = 0;\r\n const startY = (videoHeight - cropHeight) / 2;\r\n\r\n canvas.width = cropWidth;\r\n canvas.height = cropHeight;\r\n\r\n canvas\r\n .getContext('2d')\r\n .drawImage(\r\n video,\r\n startX,\r\n startY,\r\n cropWidth,\r\n cropHeight,\r\n 0,\r\n 0,\r\n canvas.width,\r\n canvas.height,\r\n );\r\n }\r\n\r\n _drawLandscapeImageFromCanvas(\r\n canvas,\r\n sourceCanvas,\r\n scaleHeight = documentCaptureScale,\r\n scaleWidth = documentCaptureScale,\r\n ) {\r\n const heightScaleFactor = this.height\r\n ? this.height / sourceCanvas.height\r\n : scaleHeight;\r\n const widthScaleFactor = this.width\r\n ? this.width / sourceCanvas.width\r\n : scaleWidth;\r\n const scaleHeightOffset = (1 - scaleHeight) / 2;\r\n const scaleWidthOffset = (1 - scaleWidth) / 2;\r\n const width = sourceCanvas.width * widthScaleFactor;\r\n const height = sourceCanvas.height * heightScaleFactor;\r\n const startX = sourceCanvas.width * scaleWidthOffset;\r\n const startY = sourceCanvas.height * scaleHeightOffset;\r\n\r\n canvas\r\n .getContext('2d')\r\n .drawImage(\r\n sourceCanvas,\r\n startX,\r\n startY,\r\n width,\r\n height,\r\n 0,\r\n 0,\r\n canvas.width,\r\n canvas.height,\r\n );\r\n }\r\n\r\n _drawPortraitToLandscapeImage(canvas, video = this._IDVideo) {\r\n const { videoHeight, videoWidth } = video;\r\n const cropWidth = 600;\r\n const cropHeight = 400;\r\n\r\n canvas.width = cropWidth;\r\n canvas.height = cropHeight;\r\n\r\n const startX = (videoWidth - cropWidth) / 2;\r\n const startY = (videoHeight - cropHeight) / 2;\r\n\r\n canvas\r\n .getContext('2d')\r\n .drawImage(\r\n video,\r\n startX,\r\n startY,\r\n cropWidth,\r\n cropHeight,\r\n 0,\r\n 0,\r\n canvas.width,\r\n canvas.height,\r\n );\r\n }\r\n\r\n updatePortraitId(\r\n destinationCanvas,\r\n video = this._IDVideo,\r\n scaleHeight = documentCaptureScale,\r\n scaleWidth = documentCaptureScale,\r\n ) {\r\n const { videoWidth, videoHeight } = video;\r\n\r\n if (videoWidth && videoHeight) {\r\n const intermediateCanvas = document.createElement('canvas');\r\n const aspectRatio = 9 / 16;\r\n let cropWidth;\r\n let cropHeight;\r\n let offsetX;\r\n let offsetY;\r\n\r\n if (videoWidth / videoHeight > aspectRatio) {\r\n // we scale the canvas to portrait aspect ratio\r\n cropHeight = videoHeight;\r\n cropWidth = cropHeight * aspectRatio;\r\n offsetX = (videoWidth - cropWidth) / 2;\r\n offsetY = 0;\r\n } else {\r\n // video already has portrait aspect ratio\r\n cropWidth = videoWidth;\r\n cropHeight = cropWidth;\r\n offsetX = 0;\r\n offsetY = 0;\r\n }\r\n\r\n intermediateCanvas.height = cropHeight;\r\n intermediateCanvas.width = cropWidth;\r\n // draw the video frame onto the intermediate canvas\r\n intermediateCanvas\r\n .getContext('2d')\r\n .drawImage(\r\n video,\r\n offsetX,\r\n offsetY,\r\n cropWidth,\r\n cropHeight,\r\n 0,\r\n 0,\r\n intermediateCanvas.width,\r\n intermediateCanvas.height,\r\n );\r\n\r\n // draw the intermediate canvas onto the destination canvas\r\n // we scale image based on the scaleHeight and scaleWidth\r\n const heightScaleFactor = this.height\r\n ? this.height / cropWidth\r\n : scaleHeight;\r\n const widthScaleFactor = this.width\r\n ? this.width / cropHeight\r\n : scaleWidth;\r\n const scaleHeightOffset = (1 - scaleHeight) / 2;\r\n const scaleWidthOffset = (1 - scaleWidth) / 2;\r\n const width = cropWidth * widthScaleFactor;\r\n const height = cropHeight * heightScaleFactor;\r\n const startX = cropWidth * scaleWidthOffset;\r\n const startY = cropHeight * scaleHeightOffset;\r\n destinationCanvas\r\n .getContext('2d')\r\n .drawImage(\r\n intermediateCanvas,\r\n startX,\r\n startY,\r\n width,\r\n height,\r\n 0,\r\n 0,\r\n destinationCanvas.width,\r\n destinationCanvas.height,\r\n );\r\n }\r\n }\r\n\r\n _stopIDVideoStream(stream = this._IDStream) {\r\n stream.getTracks().forEach((track) => track.stop());\r\n }\r\n\r\n setUpEventListeners() {\r\n this.captureIDImage = this.shadowRoot.querySelector('#capture-id-image');\r\n this.navigation = this.shadowRoot.querySelector('smileid-navigation');\r\n\r\n if (SmartCamera.stream) {\r\n this.handleIDStream(SmartCamera.stream);\r\n }\r\n\r\n this.navigation.addEventListener('navigation.back', () => {\r\n this.handleBackEvents();\r\n });\r\n\r\n this.navigation.addEventListener('navigation.close', () => {\r\n this.handleCloseEvents();\r\n });\r\n\r\n this.captureIDImage.addEventListener('click', () => {\r\n this._captureIDImage();\r\n });\r\n\r\n this.getUserMedia();\r\n }\r\n\r\n get hideBack() {\r\n return this.hasAttribute('hide-back-to-host');\r\n }\r\n\r\n get showNavigation() {\r\n return this.hasAttribute('show-navigation');\r\n }\r\n\r\n get themeColor() {\r\n return this.getAttribute('theme-color') || '#001096';\r\n }\r\n\r\n get hideAttribution() {\r\n return this.hasAttribute('hide-attribution');\r\n }\r\n\r\n get documentCaptureModes() {\r\n return this.getAttribute('document-capture-modes') || 'camera';\r\n }\r\n\r\n get supportBothCaptureModes() {\r\n const value = this.documentCaptureModes;\r\n return value.includes('camera') && value.includes('upload');\r\n }\r\n\r\n get title() {\r\n return (\r\n this.getAttribute('title') ||\r\n `${this.IdSides[this.sideOfId]} of ${this.documentName}`\r\n );\r\n }\r\n\r\n get height() {\r\n return this.getAttribute('height');\r\n }\r\n\r\n get width() {\r\n return this.getAttribute('width');\r\n }\r\n\r\n get hidden() {\r\n return this.getAttribute('hidden');\r\n }\r\n\r\n get sideOfId() {\r\n return (this.getAttribute('side-of-id') || 'front').toLowerCase();\r\n }\r\n\r\n get isFrontOfId() {\r\n return this.sideOfId === 'front';\r\n }\r\n\r\n get isBackOfId() {\r\n return !this.isFrontOfId;\r\n }\r\n\r\n get documentType() {\r\n return this.getAttribute('document-type') || '';\r\n }\r\n\r\n get documentName() {\r\n return this.getAttribute('document-name') || 'Document';\r\n }\r\n\r\n get isPortraitCaptureView() {\r\n return this.getAttribute('document-type') === 'GREEN_BOOK';\r\n }\r\n\r\n get cameraError() {\r\n return this.getAttribute('data-camera-error');\r\n }\r\n\r\n static get observedAttributes() {\r\n return [\r\n 'data-camera-error',\r\n 'data-camera-ready',\r\n 'document-name',\r\n 'document-type',\r\n 'hidden',\r\n 'hide-back-to-host',\r\n 'show-navigation',\r\n 'title',\r\n ];\r\n }\r\n\r\n attributeChangedCallback(name) {\r\n switch (name) {\r\n case 'data-camera-error':\r\n case 'data-camera-ready':\r\n case 'document-name':\r\n case 'document-type':\r\n case 'hidden':\r\n case 'title':\r\n this.connectedCallback();\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n handleBackEvents() {\r\n this.dispatchEvent(new CustomEvent('document-capture.cancelled'));\r\n SmartCamera.stopMedia();\r\n }\r\n\r\n handleCloseEvents() {\r\n this.dispatchEvent(new CustomEvent('document-capture.close'));\r\n SmartCamera.stopMedia();\r\n }\r\n}\r\n\r\nif ('customElements' in window && !customElements.get('document-capture')) {\r\n window.customElements.define('document-capture', DocumentCapture);\r\n}\r\n\r\nexport default DocumentCapture;\r\n","import styles from '../../../../styles/src/styles';\r\nimport '../../../navigation/src';\r\n\r\nfunction templateString() {\r\n return `\r\n <style>\r\n .retake-photo.button[data-variant~=\"ghost\"] {\r\n color: #FF5805;\r\n }\r\n\r\n\r\n @media (max-width: 600px) {\r\n .id-camera-screen {\r\n width: 100%;\r\n height: 100vh;\r\n }\r\n \r\n .section {\r\n width: 100%;\r\n height: 100vh;\r\n justify-content: center;\r\n }\r\n }\r\n \r\n .id-image-container {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n gap: 1.75rem;\r\n }\r\n\r\n .id-image {\r\n width: 100%;\r\n text-align: center;\r\n position: relative;\r\n background: white;\r\n }\r\n img {\r\n height: 100%;\r\n min-height: 100px;\r\n width: 98%;\r\n }\r\n\r\n .action-buttons {\r\n width: 80%;\r\n }\r\n\r\n\r\n .icon-btn {\r\n appearance: none;\r\n background: none;\r\n border: none;\r\n color: hsl(0deg 0% 94%);\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 4px 8px;\r\n }\r\n .justify-right {\r\n justify-content: end !important;\r\n }\r\n .nav {\r\n display: flex;\r\n justify-content: space-between;\r\n }\r\n\r\n .back-wrapper {\r\n display: flex;\r\n align-items: center;\r\n }\r\n\r\n .back-button-text {\r\n font-size: 11px;\r\n line-height: 11px;\r\n color: rgb(21, 31, 114);\r\n }\r\n\r\n\r\n\r\n .tips,\r\n .powered-by {\r\n align-items: center;\r\n border-radius: 0.25rem;\r\n color: #4e6577;\r\n display: flex;\r\n justify-content: center;\r\n letter-spacing: 0.075em;\r\n }\r\n\r\n .powered-by {\r\n box-shadow: 0px 2.57415px 2.57415px rgba(0, 0, 0, 0.06);\r\n display: inline-flex;\r\n font-size: 0.5rem;\r\n }\r\n\r\n .tips {\r\n margin-left: auto;\r\n margin-right: auto;\r\n max-width: 17rem;\r\n }\r\n\r\n .tips > * + *,\r\n .powered-by > * + * {\r\n display: inline-block;\r\n margin-left: 0.5em;\r\n }\r\n\r\n .powered-by .company {\r\n color: #18406d;\r\n font-weight: 700;\r\n letter-spacing: 0.15rem;\r\n }\r\n\r\n .logo-mark {\r\n background-color: #004071;\r\n display: inline-block;\r\n padding: 0.25em 0.5em;\r\n }\r\n\r\n .logo-mark svg {\r\n height: auto;\r\n justify-self: center;\r\n width: 0.75em;\r\n }\r\n \r\n #document-capture-review-screen {\r\n block-size: 45rem;\r\n padding-block: 2rem;\r\n display: flex;\r\n flex-direction: column;\r\n max-block-size: 100%;\r\n max-inline-size: 40ch;\r\n }\r\n\r\n #document-capture-review-screen .id-image-container.landscape {\r\n height: auto;\r\n }\r\n\r\n #document-capture-review-screen header p {\r\n margin-block: 0 !important;\r\n }\r\n\r\n .description {\r\n color: var(--neutral-off-black, #2D2B2A);\r\n text-align: center;\r\n\r\n /* p */\r\n font-family: DM Sans;\r\n font-size: 0.875rem;\r\n font-style: normal;\r\n font-weight: 400;\r\n line-height: 18px;\r\n }\r\n\r\n .padding-bottom-2 {\r\n padding-bottom: 2rem;\r\n }\r\n img {\r\n border-width: 0.25rem;\r\n border-color: #9394ab;\r\n border-style: solid;\r\n border-radius: 0.25rem;\r\n }\r\n\r\n .instructions-wrapper {\r\n display: inline-flex;\r\n flex-direction: column;\r\n align-items: flex-start;\r\n gap: 2rem;\r\n margin-block-start: 2rem;\r\n margin-block-end: 4rem;\r\n }\r\n .instructions {\r\n display: flex;\r\n align-items: center;\r\n text-align: initial;\r\n }\r\n\r\n .instructions svg {\r\n flex-shrink: 0;\r\n margin-inline-end: 2rem;\r\n }\r\n\r\n .instructions p {\r\n margin-block: 0;\r\n }\r\n\r\n .instruction-body {\r\n font-size: 0.75rem;\r\n }\r\n\r\n h1 {\r\n color: var(--web-digital-blue, #001096);\r\n text-align: center;\r\n\r\n /* h1 */\r\n font-size: 1.5rem;\r\n font-style: normal;\r\n font-weight: 700;\r\n line-height: 36px; /* 150% */\r\n }\r\n\r\n .p2 {\r\n font-size: 1rem;\r\n font-style: normal;\r\n font-weight: 500;\r\n line-height: 1rem;\r\n }\r\n\r\n .instruction-header {\r\n color: var(--web-digital-blue, #001096);\r\n }\r\n\r\n .h2 {\r\n font-size: 1rem;\r\n font-style: normal;\r\n font-weight: 700;\r\n line-height: 1.5rem;\r\n }\r\n </style>\r\n ${styles(this.themeColor)}\r\n <div id='document-capture-review-screen' class='flow center'>\r\n <smileid-navigation ${this.showNavigation ? 'show-navigation' : ''} hide-back></smileid-navigation>\r\n <h1 class=\"header-title title-color\">\r\n Is the document clear and readable?\r\n </h1>\r\n <p class=\"description\">Make sure all corners of the document \r\n are visible and there is no glare</p>\r\n <div class='section | flow'>\r\n <div class='id-image-container'>\r\n <div class='id-image'>\r\n <div class='video-overlay'></div>\r\n ${this.imageSrc ? `<img alt='your ID card' id='document-capture-review-image' src='${this.imageSrc}' />` : ''}\r\n </div>\r\n <div class='flow action-buttons'>\r\n <button data-variant='solid full-width' class='button' type='button' id='select-id-image'>\r\n Yes, my ID is readable\r\n </button>\r\n <button data-variant='ghost full-width' class='button retake-photo' type='button' id='re-capture-id-image'>\r\n No, retake photo\r\n </button>\r\n </div>\r\n </div>\r\n\r\n ${\r\n this.hideAttribution\r\n ? ''\r\n : `\r\n <powered-by-smile-id></powered-by-smile-id>\r\n `\r\n }\r\n </div>\r\n </div>\r\n `;\r\n}\r\n\r\nclass IdReview extends HTMLElement {\r\n constructor() {\r\n super();\r\n this.templateString = templateString.bind(this);\r\n this.render = () => this.templateString();\r\n\r\n this.attachShadow({ mode: 'open' });\r\n }\r\n\r\n connectedCallback() {\r\n const template = document.createElement('template');\r\n template.innerHTML = this.render();\r\n this.shadowRoot.innerHTML = '';\r\n this.shadowRoot.appendChild(template.content.cloneNode(true));\r\n this.setUpEventListeners();\r\n }\r\n\r\n static get observedAttributes() {\r\n return ['hide-back-to-host', 'show-navigation', 'data-image'];\r\n }\r\n\r\n get hideBack() {\r\n return this.hasAttribute('hide-back-to-host');\r\n }\r\n\r\n get showNavigation() {\r\n return this.hasAttribute('show-navigation');\r\n }\r\n\r\n get themeColor() {\r\n return this.getAttribute('theme-color') || '#001096';\r\n }\r\n\r\n get hideAttribution() {\r\n return this.hasAttribute('hide-attribution');\r\n }\r\n\r\n get imageSrc() {\r\n return this.getAttribute('data-image');\r\n }\r\n\r\n get title() {\r\n return this.getAttribute('title') || 'Submit Front of ID';\r\n }\r\n\r\n handleBackEvents() {\r\n this.dispatchEvent(new CustomEvent('document-capture-review.cancelled'));\r\n }\r\n\r\n handleCloseEvents() {\r\n this.dispatchEvent(new CustomEvent('document-capture-review.close'));\r\n }\r\n\r\n attributeChangedCallback(name) {\r\n switch (name) {\r\n case 'data-image':\r\n case 'hide-back-to-host':\r\n case 'show-navigation':\r\n this.shadowRoot.innerHTML = this.render();\r\n this.setUpEventListeners();\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n setUpEventListeners() {\r\n this.selectIDImage = this.shadowRoot.querySelector('#select-id-image');\r\n this.reCaptureIDImage = this.shadowRoot.querySelector(\r\n '#re-capture-id-image',\r\n );\r\n this.navigation = this.shadowRoot.querySelector('smileid-navigation');\r\n this.navigation.addEventListener('navigation.back', () => {\r\n this.handleBackEvents();\r\n });\r\n\r\n this.navigation.addEventListener('navigation.close', () => {\r\n this.handleCloseEvents();\r\n });\r\n\r\n this.selectIDImage.addEventListener('click', () => {\r\n this.dispatchEvent(\r\n new CustomEvent('document-capture-review.accepted', {\r\n detail: {},\r\n }),\r\n );\r\n });\r\n this.reCaptureIDImage.addEventListener('click', () => {\r\n this.dispatchEvent(\r\n new CustomEvent('document-capture-review.rejected', {\r\n detail: {},\r\n }),\r\n );\r\n });\r\n }\r\n}\r\n\r\nif (\r\n 'customElements' in window &&\r\n !customElements.get('document-capture-review')\r\n) {\r\n window.customElements.define('document-capture-review', IdReview);\r\n}\r\n\r\nexport default IdReview;\r\n","class SmartFileUpload {\r\n static memoryLimit = 10240000;\r\n\r\n static supportedTypes = ['image/jpeg', 'image/png'];\r\n\r\n static getHumanSize(numberOfBytes) {\r\n // Approximate to the closest prefixed unit\r\n const units = ['B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\r\n const exponent = Math.min(\r\n Math.floor(Math.log(numberOfBytes) / Math.log(1024)),\r\n units.length - 1,\r\n );\r\n const approx = numberOfBytes / 1024 ** exponent;\r\n const output =\r\n exponent === 0\r\n ? `${numberOfBytes} bytes`\r\n : `${approx.toFixed(0)} ${units[exponent]}`;\r\n\r\n return output;\r\n }\r\n\r\n static getData(file) {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n\r\n reader.onload = (e) => {\r\n resolve(e.target.result);\r\n };\r\n reader.onerror = () => {\r\n reject(\r\n new Error(\r\n 'An error occurred reading the file. Please check the file, and try again',\r\n ),\r\n );\r\n };\r\n reader.readAsDataURL(file);\r\n });\r\n }\r\n\r\n static async retrieve(files) {\r\n if (files.length > 1) {\r\n throw new Error('Only one file upload is permitted at a time');\r\n }\r\n\r\n const file = files[0];\r\n\r\n if (!SmartFileUpload.supportedTypes.includes(file.type)) {\r\n throw new Error(\r\n 'Unsupported file format. Please ensure that you are providing a JPG or PNG image',\r\n );\r\n }\r\n\r\n if (file.size > SmartFileUpload.memoryLimit) {\r\n throw new Error(\r\n `${file.name} is too large. Please ensure that the file is less than ${SmartFileUpload.getHumanSize(SmartFileUpload.memoryLimit)}.`,\r\n );\r\n }\r\n\r\n const imageAsDataUrl = await SmartFileUpload.getData(file);\r\n\r\n return imageAsDataUrl;\r\n }\r\n}\r\n\r\nexport default SmartFileUpload;\r\n","import SmartFileUpload from '../../../../domain/file-upload/src/SmartFileUpload';\r\nimport styles from '../../../../styles/src/styles';\r\nimport '../../../navigation/src';\r\n\r\nfunction frontDocumentIcon() {\r\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"173\" height=\"103\" viewBox=\"0 0 173 103\" fill=\"none\">\r\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\"/>\r\n <g filter=\"url(#filter0_d_1281_4127)\">\r\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)\"/>\r\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)\"/>\r\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)\"/>\r\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)\"/>\r\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)\"/>\r\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)\"/>\r\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)\"/>\r\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\"/>\r\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)\"/>\r\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)\"/>\r\n </g>\r\n <g filter=\"url(#filter1_d_1281_4127)\">\r\n <mask id=\"path-12-inside-1_1281_4127\" fill=\"white\">\r\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\"/>\r\n </mask>\r\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\"/>\r\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)\"/>\r\n </g>\r\n <rect x=\"86.501\" y=\"23.7069\" width=\"64.8214\" height=\"1.42241\" rx=\"0.711207\" fill=\"#2D2B2A\"/>\r\n <rect x=\"86.501\" y=\"34.2433\" width=\"64.8214\" height=\"1.42241\" rx=\"0.711207\" fill=\"#2D2B2A\"/>\r\n <rect x=\"86.501\" y=\"44.1212\" width=\"32.7381\" height=\"1.42241\" rx=\"0.711207\" fill=\"#2D2B2A\"/>\r\n <rect x=\"27.5713\" y=\"86.2667\" width=\"32.7381\" height=\"2.63621\" rx=\"1.3181\" fill=\"#DBDBC4\"/>\r\n <defs>\r\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\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\r\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\"/>\r\n <feOffset dy=\"4\"/>\r\n <feGaussianBlur stdDeviation=\"2\"/>\r\n <feComposite in2=\"hardAlpha\" operator=\"out\"/>\r\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\"/>\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_1281_4127\"/>\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_1281_4127\" result=\"shape\"/>\r\n </filter>\r\n <filter id=\"filter1_d_1281_4127\" x=\"0\" y=\"0\" width=\"173\" height=\"102.828\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\r\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\"/>\r\n <feOffset dy=\"4\"/>\r\n <feGaussianBlur stdDeviation=\"2\"/>\r\n <feComposite in2=\"hardAlpha\" operator=\"out\"/>\r\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\"/>\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_1281_4127\"/>\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_1281_4127\" result=\"shape\"/>\r\n </filter>\r\n <linearGradient id=\"paint0_linear_1281_4127\" x1=\"44.1986\" y1=\"81.4966\" x2=\"44.1986\" y2=\"65.578\" gradientUnits=\"userSpaceOnUse\">\r\n <stop stop-color=\"#FFB09A\"/>\r\n <stop offset=\"0.21\" stop-color=\"#FF9B8D\"/>\r\n <stop offset=\"0.47\" stop-color=\"#FF8781\"/>\r\n <stop offset=\"0.74\" stop-color=\"#FF7B79\"/>\r\n <stop offset=\"1\" stop-color=\"#FF7777\"/>\r\n </linearGradient>\r\n <linearGradient id=\"paint1_linear_1281_4127\" x1=\"29.7538\" y1=\"57.2504\" x2=\"29.7538\" y2=\"46.5708\" gradientUnits=\"userSpaceOnUse\">\r\n <stop stop-color=\"#FFB09A\"/>\r\n <stop offset=\"0.21\" stop-color=\"#FF9B8D\"/>\r\n <stop offset=\"0.47\" stop-color=\"#FF8781\"/>\r\n <stop offset=\"0.74\" stop-color=\"#FF7B79\"/>\r\n <stop offset=\"1\" stop-color=\"#FF7777\"/>\r\n </linearGradient>\r\n <linearGradient id=\"paint2_linear_1281_4127\" x1=\"29.888\" y1=\"53.8755\" x2=\"29.888\" y2=\"48.2632\" gradientUnits=\"userSpaceOnUse\">\r\n <stop stop-color=\"#FFE7D8\"/>\r\n <stop offset=\"0.29\" stop-color=\"#FABDC9\"/>\r\n <stop offset=\"0.59\" stop-color=\"#F597BB\"/>\r\n <stop offset=\"0.84\" stop-color=\"#F280B3\"/>\r\n <stop offset=\"0.99\" stop-color=\"#F177B0\"/>\r\n </linearGradient>\r\n <linearGradient id=\"paint3_linear_1281_4127\" x1=\"30.8683\" y1=\"53.6937\" x2=\"30.8683\" y2=\"50.4636\" gradientUnits=\"userSpaceOnUse\">\r\n <stop stop-color=\"#FFE7D8\"/>\r\n <stop offset=\"0.99\" stop-color=\"#CE77F1\"/>\r\n </linearGradient>\r\n <linearGradient id=\"paint4_linear_1281_4127\" x1=\"58.9759\" y1=\"57.2504\" x2=\"58.9759\" y2=\"46.5708\" gradientUnits=\"userSpaceOnUse\">\r\n <stop stop-color=\"#FFB09A\"/>\r\n <stop offset=\"0.21\" stop-color=\"#FF9B8D\"/>\r\n <stop offset=\"0.47\" stop-color=\"#FF8781\"/>\r\n <stop offset=\"0.74\" stop-color=\"#FF7B79\"/>\r\n <stop offset=\"1\" stop-color=\"#FF7777\"/>\r\n </linearGradient>\r\n <linearGradient id=\"paint5_linear_1281_4127\" x1=\"58.845\" y1=\"53.8755\" x2=\"58.845\" y2=\"48.2632\" gradientUnits=\"userSpaceOnUse\">\r\n <stop stop-color=\"#FFE7D8\"/>\r\n <stop offset=\"0.29\" stop-color=\"#FABDC9\"/>\r\n <stop offset=\"0.59\" stop-color=\"#F597BB\"/>\r\n <stop offset=\"0.84\" stop-color=\"#F280B3\"/>\r\n <stop offset=\"0.99\" stop-color=\"#F177B0\"/>\r\n </linearGradient>\r\n <linearGradient id=\"paint6_linear_1281_4127\" x1=\"54.5402\" y1=\"54.6965\" x2=\"59.1672\" y2=\"54.6965\" gradientUnits=\"userSpaceOnUse\">\r\n <stop stop-color=\"#FFE7D8\"/>\r\n <stop offset=\"0.29\" stop-color=\"#FABDC9\"/>\r\n <stop offset=\"0.59\" stop-color=\"#F597BB\"/>\r\n <stop offset=\"0.84\" stop-color=\"#F280B3\"/>\r\n <stop offset=\"0.99\" stop-color=\"#F177B0\"/>\r\n </linearGradient>\r\n <linearGradient id=\"paint7_linear_1281_4127\" x1=\"44.195\" y1=\"75.4635\" x2=\"44.195\" y2=\"81.4965\" gradientUnits=\"userSpaceOnUse\">\r\n <stop stop-color=\"#151F72\"/>\r\n <stop offset=\"0.19\" stop-color=\"#151F72\"/>\r\n <stop offset=\"0.54\" stop-color=\"#7FCBF5\"/>\r\n <stop offset=\"0.82\" stop-color=\"#C574EC\"/>\r\n <stop offset=\"0.99\" stop-color=\"#FBD1EE\"/>\r\n </linearGradient>\r\n <linearGradient id=\"paint8_linear_1281_4127\" x1=\"30.0589\" y1=\"51.0693\" x2=\"58.3379\" y2=\"51.0693\" gradientUnits=\"userSpaceOnUse\">\r\n <stop stop-color=\"#FFB09A\"/>\r\n <stop offset=\"0.06\" stop-color=\"#FF9B89\"/>\r\n <stop offset=\"0.13\" stop-color=\"#FF8A7B\"/>\r\n <stop offset=\"0.23\" stop-color=\"#FF7F71\"/>\r\n <stop offset=\"0.36\" stop-color=\"#FF786C\"/>\r\n <stop offset=\"0.71\" stop-color=\"#FF766A\"/>\r\n </linearGradient>\r\n </defs>\r\n</svg>`;\r\n}\r\n\r\nfunction backDocumentIcon() {\r\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"182\" height=\"108\" viewBox=\"0 0 182 108\" fill=\"none\">\r\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\"/>\r\n <g filter=\"url(#filter0_d_1281_4284)\">\r\n <mask id=\"path-2-inside-1_1281_4284\" fill=\"white\">\r\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\"/>\r\n </mask>\r\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\"/>\r\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)\"/>\r\n </g>\r\n <rect x=\"134\" y=\"10\" width=\"3\" height=\"9\" rx=\"0.5\" fill=\"#DBDBC4\"/>\r\n <rect x=\"148.733\" y=\"10\" width=\"2\" height=\"9\" rx=\"0.5\" fill=\"#DBDBC4\"/>\r\n <rect x=\"154\" y=\"10\" width=\"2\" height=\"9\" rx=\"0.5\" fill=\"#DBDBC4\"/>\r\n <rect x=\"166\" y=\"10\" width=\"1.3\" height=\"9\" rx=\"0.5\" fill=\"#DBDBC4\"/>\r\n <rect x=\"157\" y=\"10\" width=\"2\" height=\"9\" rx=\"0.5\" fill=\"#DBDBC4\"/>\r\n <rect x=\"141.8\" y=\"10\" width=\"5\" height=\"9\" rx=\"0.5\" fill=\"#DBDBC4\"/>\r\n <rect x=\"161\" y=\"10\" width=\"4\" height=\"9\" rx=\"0.5\" fill=\"#DBDBC4\"/>\r\n <rect x=\"137.767\" y=\"10\" width=\"1\" height=\"9\" rx=\"0.5\" fill=\"#DBDBC4\"/>\r\n <rect x=\"151.2\" y=\"10\" width=\"1\" height=\"9\" rx=\"0.5\" fill=\"#DBDBC4\"/>\r\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\"/>\r\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\"/>\r\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\"/>\r\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\"/>\r\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\"/>\r\n <defs>\r\n <filter id=\"filter0_d_1281_4284\" x=\"0\" y=\"0\" width=\"182\" height=\"108\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\r\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\"/>\r\n <feOffset dy=\"4\"/>\r\n <feGaussianBlur stdDeviation=\"2\"/>\r\n <feComposite in2=\"hardAlpha\" operator=\"out\"/>\r\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\"/>\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_1281_4284\"/>\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_1281_4284\" result=\"shape\"/>\r\n </filter>\r\n </defs>\r\n</svg>`;\r\n}\r\n\r\nfunction templateString() {\r\n return `\r\n <div id=\"document-capture-instructions-screen\" class=\"flow center\">\r\n <section className=\"main\">\r\n <smileid-navigation theme-color='${this.themeColor}' ${this.showNavigation ? 'show-navigation' : ''} ${this.hideBack ? 'hide-back' : ''}></smileid-navigation>\r\n <header>\r\n ${this.isFrontOfId ? frontDocumentIcon() : backDocumentIcon()}\r\n <h1 class='text-2xl title-color font-bold'>${this.title}</h1>\r\n <p class=\"description text-sm font-normal\">\r\n We'll use it to verify your identity.\r\n </p>\r\n <p class=\"description padding-bottom-2\">\r\n Please follow the instructions below.\r\n </p>\r\n </header>\r\n <div class=\"flow instructions-wrapper\">\r\n <div class=\"instructions\">\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"38\"\r\n height=\"38\"\r\n viewBox=\"0 0 38 38\"\r\n fill=\"none\"\r\n >\r\n <g clip-path=\"url(#clip0_604_670)\">\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\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\"\r\n fill=\"${this.themeColor}\"\r\n />\r\n <path\r\n d=\"M19.6064 4.5419H18.394L18.9912 0L19.6064 4.5419Z\"\r\n fill=\"${this.themeColor}\"\r\n />\r\n <path\r\n d=\"M26.7541 6.77667L25.7046 6.17048L28.4913 2.54239L26.7541 6.77667Z\"\r\n fill=\"${this.themeColor}\"\r\n />\r\n <path\r\n d=\"M31.8298 12.2957L31.2236 11.2462L35.4489 9.49097L31.8298 12.2957Z\"\r\n fill=\"${this.themeColor}\"\r\n />\r\n <path\r\n d=\"M33.4674 19.6062V18.3938L38.0003 18.9909L33.4674 19.6062Z\"\r\n fill=\"${this.themeColor}\"\r\n />\r\n <path\r\n d=\"M31.2236 26.7538L31.8298 25.7043L35.4579 28.491L31.2236 26.7538Z\"\r\n fill=\"${this.themeColor}\"\r\n />\r\n <path\r\n d=\"M25.7046 31.8295L26.7541 31.2233L28.5094 35.4486L25.7046 31.8295Z\"\r\n fill=\"${this.themeColor}\"\r\n />\r\n <path\r\n d=\"M18.394 33.4671H19.6064L19.0093 38L18.394 33.4671Z\"\r\n fill=\"${this.themeColor}\"\r\n />\r\n <path\r\n d=\"M11.2464 31.2233L12.2959 31.8295L9.50928 35.4576L11.2464 31.2233Z\"\r\n fill=\"${this.themeColor}\"\r\n />\r\n <path\r\n d=\"M6.17068 25.7043L6.77687 26.7538L2.55164 28.509L6.17068 25.7043Z\"\r\n fill=\"${this.themeColor}\"\r\n />\r\n <path\r\n d=\"M4.54215 18.3938V19.6062L0.000244141 19.009L4.54215 18.3938Z\"\r\n fill=\"${this.themeColor}\"\r\n />\r\n <path\r\n d=\"M6.77689 11.2462L6.1707 12.2957L2.5426 9.50903L6.77689 11.2462Z\"\r\n fill=\"${this.themeColor}\"\r\n />\r\n <path\r\n d=\"M12.296 6.17047L11.2464 6.77666L9.49121 2.55142L12.296 6.17047Z\"\r\n fill=\"${this.themeColor}\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_604_670\">\r\n <rect\r\n width=\"38\"\r\n height=\"38\"\r\n fill=\"white\"\r\n transform=\"translate(0.000244141)\"\r\n />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <div class=\"instruction\">\r\n <p class=\"instruction-header font-bold text-base\">Good Light</p>\r\n <p class=\"instruction-body text-xs font-medium\">\r\n Make sure the image is taken in a well-lit environment where the ID document is easy to read.\r\n </p>\r\n </div>\r\n </div>\r\n <div class=\"instructions\">\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"38\"\r\n height=\"36\"\r\n viewBox=\"0 0 38 36\"\r\n fill=\"none\"\r\n >\r\n <g clip-path=\"url(#clip0_604_672)\">\r\n <path\r\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\"\r\n fill=\"${this.themeColor}\"\r\n />\r\n <path\r\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\"\r\n fill=\"${this.themeColor}\"\r\n />\r\n <path\r\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\"\r\n fill=\"${this.themeColor}\"\r\n />\r\n <path\r\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\"\r\n fill=\"${this.themeColor}\"\r\n />\r\n <path\r\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\"\r\n fill=\"${this.themeColor}\"\r\n />\r\n <path\r\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\"\r\n fill=\"${this.themeColor}\"\r\n />\r\n <path\r\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\"\r\n fill=\"${this.themeColor}\"\r\n />\r\n <path\r\n d=\"M36.2874 27.3719H1.65906L1.95178 28H35.9947L36.2874 27.3719Z\"\r\n fill=\"${this.themeColor}\"\r\n />\r\n <path\r\n d=\"M35.2032 29.4766H2.75403C2.84799 29.6529 2.95641 29.8292 3.07928 30.0055H34.878L35.2032 29.4766Z\"\r\n fill=\"${this.themeColor}\"\r\n />\r\n <path\r\n d=\"M33.7396 31.5813H4.20679L4.54288 32H33.4035L33.7396 31.5813Z\"\r\n fill=\"${this.themeColor}\"\r\n />\r\n <path\r\n d=\"M31.7989 33.6859H6.14746L6.49439 33.9945H31.452L31.7989 33.6859Z\"\r\n fill=\"${this.themeColor}\"\r\n />\r\n <path\r\n d=\"M29.0993 35.7906H8.84705L9.18314 36H28.7632L29.0993 35.7906Z\"\r\n fill=\"${this.themeColor}\"\r\n />\r\n <path\r\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\"\r\n fill=\"${this.themeColor}\"\r\n />\r\n <path\r\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\"\r\n fill=\"${this.themeColor}\"\r\n />\r\n <path\r\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\"\r\n fill=\"${this.themeColor}\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_604_672\">\r\n <rect\r\n width=\"37.9459\"\r\n height=\"36\"\r\n fill=\"white\"\r\n transform=\"translate(0.000244141)\"\r\n />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <div>\r\n <p class=\"instruction-header font-bold text-base\">Clear Image</p>\r\n <p class=\"instruction-body text-xs font-medium\">\r\n Hold your camera steady so the words on the ID are not blurry.\r\n </p>\r\n </div>\r\n </div>\r\n <div id=\"error\" class='color-red'>\r\n </div>\r\n </div>\r\n </section>\r\n <section className=\"footer\">\r\n <div class='flow'>\r\n ${\r\n this.supportBothCaptureModes || this.documentCaptureModes === 'camera'\r\n ? `\r\n <button data-variant='solid full-width' class='button' type='button' id='take-photo'>\r\n Take Photo\r\n </button>\r\n `\r\n : ''\r\n }\r\n ${\r\n this.supportBothCaptureModes || this.documentCaptureModes === 'upload'\r\n ? `\r\n <label id='upload-photo-label' data-variant='${\r\n this.supportBothCaptureModes ? 'outline' : 'solid'\r\n }' class='button'>\r\n <input type='file' hidden onclick='this.value=null;' id='upload-photo' name='document' accept='image/png, image/jpeg' />\r\n <span>Upload Photo</span>\r\n </label>\r\n `\r\n : ''\r\n }\r\n</div>\r\n${this.hideAttribution ? '' : '<powered-by-smile-id></powered-by-smile-id>'}\r\n </section>\r\n </div>\r\n ${styles(this.themeColor)}\r\n `;\r\n}\r\n\r\nclass DocumentInstruction extends HTMLElement {\r\n constructor() {\r\n super();\r\n this.templateString = templateString.bind(this);\r\n this.render = () => this.templateString();\r\n\r\n this.attachShadow({ mode: 'open' });\r\n }\r\n\r\n connectedCallback() {\r\n const template = document.createElement('template');\r\n template.innerHTML = this.render();\r\n\r\n this.shadowRoot.appendChild(template.content.cloneNode(true));\r\n\r\n this.navigation = this.shadowRoot.querySelector('smileid-navigation');\r\n this.takeDocumentPhotoButton = this.shadowRoot.querySelector('#take-photo');\r\n this.uploadDocumentPhotoButton =\r\n this.shadowRoot.querySelector('#upload-photo');\r\n\r\n this.navigation.addEventListener('navigation.back', () => {\r\n this.handleBackEvents();\r\n });\r\n\r\n this.navigation.addEventListener('navigation.close', () => {\r\n this.handleCloseEvents();\r\n });\r\n\r\n if (this.takeDocumentPhotoButton) {\r\n this.takeDocumentPhotoButton.addEventListener('click', () => {\r\n this.dispatchEvent(\r\n new CustomEvent('document-capture-instructions.capture'),\r\n );\r\n });\r\n }\r\n\r\n if (this.uploadDocumentPhotoButton) {\r\n this.uploadDocumentPhotoButton.addEventListener(\r\n 'change',\r\n async (event) => {\r\n this.shadowRoot.querySelector('#error').innerHTML = '';\r\n try {\r\n const { files } = event.target;\r\n\r\n // validate file, and convert file to data url\r\n const fileData = await SmartFileUpload.retrieve(files);\r\n\r\n this.dispatchEvent(\r\n new CustomEvent('document-capture-instructions.upload', {\r\n detail: { image: fileData, previewImage: fileData },\r\n }),\r\n );\r\n } catch (error) {\r\n this.shadowRoot.querySelector('#error').innerHTML = error.message;\r\n }\r\n },\r\n );\r\n }\r\n }\r\n\r\n get hideBack() {\r\n return this.hasAttribute('hide-back-to-host');\r\n }\r\n\r\n get showNavigation() {\r\n return this.hasAttribute('show-navigation');\r\n }\r\n\r\n get themeColor() {\r\n return this.getAttribute('theme-color') || '#001096';\r\n }\r\n\r\n get hideAttribution() {\r\n return this.hasAttribute('hide-attribution');\r\n }\r\n\r\n get documentCaptureModes() {\r\n return this.getAttribute('document-capture-modes') || 'camera';\r\n }\r\n\r\n get supportBothCaptureModes() {\r\n const value = this.documentCaptureModes;\r\n return value.includes('camera') && value.includes('upload');\r\n }\r\n\r\n get title() {\r\n return this.getAttribute('title') || 'Submit Front of ID';\r\n }\r\n\r\n get sideOfId() {\r\n return (this.getAttribute('side-of-id') || 'front').toLowerCase();\r\n }\r\n\r\n get isFrontOfId() {\r\n return this.sideOfId === 'front';\r\n }\r\n\r\n get isBackOfId() {\r\n return !this.isFrontOfId;\r\n }\r\n\r\n handleBackEvents() {\r\n this.dispatchEvent(\r\n new CustomEvent('document-capture-instructions.cancelled'),\r\n );\r\n }\r\n\r\n handleCloseEvents() {\r\n this.dispatchEvent(new CustomEvent('document-capture-instructions.close'));\r\n }\r\n}\r\n\r\nif (\r\n 'customElements' in window &&\r\n !customElements.get('document-capture-instructions')\r\n) {\r\n window.customElements.define(\r\n 'document-capture-instructions',\r\n DocumentInstruction,\r\n );\r\n}\r\n\r\nexport default DocumentInstruction;\r\n","import { IMAGE_TYPE } from '../../../domain/constants/src/Constants';\r\nimport styles from '../../../styles/src/styles';\r\nimport SmartCamera from '../../../domain/camera/src/SmartCamera';\r\n\r\nimport './document-capture';\r\nimport './document-capture-review';\r\nimport './document-capture-instructions';\r\nimport packageJson from '../../../../package.json';\r\n\r\nconst COMPONENTS_VERSION = packageJson.version;\r\n\r\nconst smartCameraWeb = document.querySelector('smart-camera-web');\r\n\r\nasync function getPermissions(captureScreen) {\r\n try {\r\n const stream = await SmartCamera.getMedia({\r\n audio: false,\r\n video: SmartCamera.environmentOptions,\r\n });\r\n const devices = await navigator.mediaDevices.enumerateDevices();\r\n const videoDevice = devices.find(\r\n (device) =>\r\n device.kind === 'videoinput' &&\r\n stream.getVideoTracks()[0].getSettings().deviceId === device.deviceId,\r\n );\r\n smartCameraWeb?.dispatchEvent(\r\n new CustomEvent('metadata.camera-name', {\r\n detail: { cameraName: videoDevice?.label },\r\n }),\r\n );\r\n captureScreen.removeAttribute('data-camera-error');\r\n captureScreen.setAttribute('data-camera-ready', true);\r\n } catch (error) {\r\n captureScreen.removeAttribute('data-camera-ready');\r\n captureScreen.setAttribute(\r\n 'data-camera-error',\r\n SmartCamera.handleCameraError(error),\r\n );\r\n }\r\n}\r\n\r\nclass DocumentCaptureScreens extends HTMLElement {\r\n constructor() {\r\n super();\r\n this.activeScreen = null;\r\n this.smartCameraWeb = this.closest('smart-camera-web');\r\n smartCameraWeb?.dispatchEvent(new CustomEvent('metadata.initialize'));\r\n }\r\n\r\n connectedCallback() {\r\n this.innerHTML = `\r\n ${styles(this.themeColor)}\r\n <div>\r\n <document-capture-instructions theme-color='${this.themeColor}' id='document-capture-instructions-front' ${this.title}\r\n ${this.documentCaptureModes} ${this.showNavigation} ${this.hideInstructions ? 'hidden' : ''}\r\n ${this.hideAttribution}\r\n ></document-capture-instructions>\r\n <document-capture id='document-capture-front' side-of-id='Front'\r\n ${this.title} ${this.showNavigation} ${this.hideInstructions ? '' : 'hidden'} ${this.hideAttribution}\r\n ${this.documentCaptureModes} ${this.documentType} theme-color='${this.themeColor}'\r\n ></document-capture>\r\n <document-capture-instructions id='document-capture-instructions-back' side-of-id='Back' title='Submit Back of ID'\r\n ${this.documentCaptureModes} ${this.showNavigation} theme-color='${this.themeColor}' ${this.hideAttribution} hidden\r\n ></document-capture-instructions>\r\n <document-capture id='document-capture-back' side-of-id='Back' ${this.title} ${this.showNavigation}\r\n ${this.documentCaptureModes} theme-color='${this.themeColor}' ${this.hideAttribution}\r\n hidden \r\n ></document-capture>\r\n <document-capture-review id='front-of-document-capture-review' theme-color='${this.themeColor}' ${this.hideAttribution} hidden></document-capture-review>\r\n <document-capture-review id='back-of-document-capture-review' theme-color='${this.themeColor}' ${this.hideAttribution} hidden></document-capture-review>\r\n </div>\r\n `;\r\n\r\n this._data = {\r\n images: [],\r\n meta: {\r\n libraryVersion: COMPONENTS_VERSION,\r\n },\r\n };\r\n\r\n this.documentInstruction = this.querySelector(\r\n 'document-capture-instructions',\r\n );\r\n this.documentInstructionBack = this.querySelector(\r\n '#document-capture-instructions-back',\r\n );\r\n this.idCapture = this.querySelector('#document-capture-front');\r\n this.idReview = this.querySelector('#front-of-document-capture-review');\r\n this.idCaptureBack = this.querySelector('#document-capture-back');\r\n this.backOfIdReview = this.querySelector(\r\n '#back-of-document-capture-review',\r\n );\r\n this.thankYouScreen = this.querySelector('thank-you');\r\n\r\n if (this.hideInstructions) {\r\n getPermissions(this.idCapture);\r\n this.setActiveScreen(this.idCapture);\r\n } else {\r\n this.setActiveScreen(this.documentInstruction);\r\n }\r\n\r\n this.setUpEventListeners();\r\n }\r\n\r\n disconnectedCallback() {\r\n SmartCamera.stopMedia();\r\n if (this.activeScreen) {\r\n this.activeScreen.removeAttribute('hidden');\r\n }\r\n this.activeScreen = null;\r\n this.innerHTML = '';\r\n }\r\n\r\n setUpEventListeners() {\r\n this.documentInstruction.addEventListener(\r\n 'document-capture-instructions.cancelled',\r\n () => {\r\n this.handleBackEvents();\r\n },\r\n );\r\n\r\n this.documentInstruction.addEventListener(\r\n 'document-capture-instructions.capture',\r\n async () => {\r\n smartCameraWeb?.dispatchEvent(\r\n new CustomEvent('metadata.document-front-capture-start'),\r\n );\r\n smartCameraWeb?.dispatchEvent(\r\n new CustomEvent('metadata.document-front-origin', {\r\n detail: { imageOrigin: 'camera_manual_capture' },\r\n }),\r\n );\r\n this.setActiveScreen(this.idCapture);\r\n await getPermissions(this.idCapture);\r\n },\r\n );\r\n this.documentInstruction.addEventListener(\r\n 'document-capture-instructions.upload',\r\n async (event) => {\r\n smartCameraWeb?.dispatchEvent(\r\n new CustomEvent('metadata.document-front-origin', {\r\n detail: { imageOrigin: 'gallery' },\r\n }),\r\n );\r\n this.idReview.setAttribute('data-image', event.detail.previewImage);\r\n this._data.images.push({\r\n image: event.detail.image.split(',')[1],\r\n image_type_id: IMAGE_TYPE.ID_CARD_IMAGE_BASE64,\r\n });\r\n this.setActiveScreen(this.idReview);\r\n },\r\n );\r\n\r\n this.idCapture.addEventListener('document-capture.publish', (event) => {\r\n smartCameraWeb?.dispatchEvent(\r\n new CustomEvent('metadata.document-front-capture-end'),\r\n );\r\n this.idReview.setAttribute('data-image', event.detail.previewImage);\r\n this._data.images.push({\r\n image: event.detail.image.split(',')[1],\r\n image_type_id: IMAGE_TYPE.ID_CARD_IMAGE_BASE64,\r\n });\r\n SmartCamera.stopMedia();\r\n this.setActiveScreen(this.idReview);\r\n });\r\n\r\n this.idCapture.addEventListener('document-capture.cancelled', () => {\r\n if (this.hideInstructions) {\r\n this.handleBackEvents();\r\n } else {\r\n this.setActiveScreen(this.documentInstruction);\r\n }\r\n });\r\n\r\n this.idReview.addEventListener(\r\n 'document-capture-review.rejected',\r\n async () => {\r\n smartCameraWeb?.dispatchEvent(\r\n new CustomEvent('metadata.document-front-capture-retry'),\r\n );\r\n this.idReview.removeAttribute('data-image');\r\n this._data.images.pop();\r\n if (this.hideInstructions) {\r\n this.setActiveScreen(this.idCapture);\r\n await getPermissions(this.idCapture);\r\n } else {\r\n this.setActiveScreen(this.documentInstruction);\r\n }\r\n },\r\n );\r\n\r\n this.idReview.addEventListener(\r\n 'document-capture-review.accepted',\r\n async () => {\r\n if (this.hideBackOfId) {\r\n this._publishSelectedImages();\r\n } else if (this.hideInstructions) {\r\n this.setActiveScreen(this.idCaptureBack);\r\n await getPermissions(this.idCaptureBack);\r\n } else {\r\n this.setActiveScreen(this.documentInstructionBack);\r\n }\r\n },\r\n );\r\n\r\n this.documentInstructionBack.addEventListener(\r\n 'document-capture-instructions.capture',\r\n async () => {\r\n smartCameraWeb?.dispatchEvent(\r\n new CustomEvent('metadata.document-back-capture-start'),\r\n );\r\n smartCameraWeb?.dispatchEvent(\r\n new CustomEvent('metadata.document-back-origin', {\r\n detail: { imageOrigin: 'camera_manual_capture' },\r\n }),\r\n );\r\n this.setActiveScreen(this.idCaptureBack);\r\n await getPermissions(this.idCaptureBack);\r\n },\r\n );\r\n\r\n this.documentInstructionBack.addEventListener(\r\n 'document-capture-instructions.cancelled',\r\n async () => {\r\n this.idReview.removeAttribute('data-image');\r\n this._data.images.pop();\r\n if (this.hideInstructions) {\r\n this.setActiveScreen(this.idCapture);\r\n await getPermissions(this.idCapture);\r\n } else {\r\n this.setActiveScreen(this.documentInstruction);\r\n }\r\n },\r\n );\r\n\r\n this.documentInstructionBack.addEventListener(\r\n 'document-capture-instructions.upload',\r\n async (event) => {\r\n smartCameraWeb?.dispatchEvent(\r\n new CustomEvent('metadata.document-back-origin', {\r\n detail: { imageOrigin: 'gallery' },\r\n }),\r\n );\r\n this.backOfIdReview.setAttribute('data-image', event.detail.image);\r\n this._data.images.push({\r\n image: event.detail.image.split(',')[1],\r\n image_type_id: IMAGE_TYPE.ID_CARD_BACK_IMAGE_BASE64,\r\n });\r\n this.setActiveScreen(this.backOfIdReview);\r\n },\r\n );\r\n this.idCaptureBack.addEventListener('document-capture.publish', (event) => {\r\n smartCameraWeb?.dispatchEvent(\r\n new CustomEvent('metadata.document-back-capture-end'),\r\n );\r\n this.backOfIdReview.setAttribute('data-image', event.detail.previewImage);\r\n this._data.images.push({\r\n image: event.detail.image.split(',')[1],\r\n image_type_id: IMAGE_TYPE.ID_CARD_BACK_IMAGE_BASE64,\r\n });\r\n this.setActiveScreen(this.backOfIdReview);\r\n SmartCamera.stopMedia();\r\n });\r\n\r\n this.idCaptureBack.addEventListener(\r\n 'document-capture.cancelled',\r\n async () => {\r\n if (this.hideInstructions) {\r\n this.setActiveScreen(this.idCapture);\r\n await getPermissions(this.idCapture);\r\n } else {\r\n this.setActiveScreen(this.documentInstructionBack);\r\n }\r\n },\r\n );\r\n\r\n this.backOfIdReview.addEventListener(\r\n 'document-capture-review.rejected',\r\n async () => {\r\n smartCameraWeb?.dispatchEvent(\r\n new CustomEvent('metadata.document-back-capture-retry'),\r\n );\r\n this.backOfIdReview.removeAttribute('data-image');\r\n this._data.images.pop();\r\n if (this.hideInstructions) {\r\n this.setActiveScreen(this.idCaptureBack);\r\n await getPermissions(this.idCaptureBack);\r\n } else {\r\n this.setActiveScreen(this.documentInstructionBack);\r\n }\r\n },\r\n );\r\n\r\n this.backOfIdReview.addEventListener(\r\n 'document-capture-review.accepted',\r\n () => {\r\n this._publishSelectedImages();\r\n },\r\n );\r\n\r\n const screens = [\r\n this.documentInstruction,\r\n this.idCapture,\r\n this.documentInstructionBack,\r\n this.idCaptureBack,\r\n this.idReview,\r\n this.backOfIdReview,\r\n ];\r\n\r\n screens.forEach((screen) => {\r\n screen.addEventListener(`${screen.nodeName.toLowerCase()}.close`, () =>\r\n this.handleCloseEvents(),\r\n );\r\n });\r\n }\r\n\r\n _publishSelectedImages() {\r\n this.dispatchEvent(\r\n new CustomEvent('document-capture-screens.publish', {\r\n detail: this._data,\r\n }),\r\n );\r\n }\r\n\r\n get hideInstructions() {\r\n return this.hasAttribute('hide-instructions');\r\n }\r\n\r\n get hideBackOfId() {\r\n return this.hasAttribute('hide-back-of-id');\r\n }\r\n\r\n get showNavigation() {\r\n return this.hasAttribute('show-navigation') ? 'show-navigation' : '';\r\n }\r\n\r\n get title() {\r\n return this.hasAttribute('title')\r\n ? `title=${this.getAttribute('title')}`\r\n : '';\r\n }\r\n\r\n get documentCaptureModes() {\r\n return this.hasAttribute('document-capture-modes')\r\n ? `document-capture-modes='${this.getAttribute('document-capture-modes')}'`\r\n : '';\r\n }\r\n\r\n get documentType() {\r\n return this.hasAttribute('document-type')\r\n ? `document-type='${this.getAttribute('document-type')}'`\r\n : '';\r\n }\r\n\r\n get hideAttribution() {\r\n return this.hasAttribute('hide-attribution') ? 'hide-attribution' : '';\r\n }\r\n\r\n get themeColor() {\r\n return this.getAttribute('theme-color') || '#001096';\r\n }\r\n\r\n handleBackEvents() {\r\n this.dispatchEvent(new CustomEvent('document-capture-screens.cancelled'));\r\n }\r\n\r\n handleCloseEvents() {\r\n this.dispatchEvent(new CustomEvent('document-capture-screens.close'));\r\n }\r\n\r\n setActiveScreen(screen) {\r\n this.activeScreen?.setAttribute('hidden', '');\r\n screen.removeAttribute('hidden');\r\n this.activeScreen = screen;\r\n }\r\n\r\n static get observedAttributes() {\r\n return [\r\n 'document-capture-modes',\r\n 'document-type',\r\n 'hide-back-to-host',\r\n 'show-navigation',\r\n 'hide-back-of-id',\r\n ];\r\n }\r\n\r\n attributeChangedCallback(name) {\r\n switch (name) {\r\n case 'document-capture-modes':\r\n case 'document-type':\r\n case 'hide-back-of-id':\r\n case 'hide-back-to-host':\r\n case 'show-navigation':\r\n this.connectedCallback();\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n}\r\n\r\nif (\r\n 'customElements' in window &&\r\n !customElements.get('document-capture-screens')\r\n) {\r\n customElements.define('document-capture-screens', DocumentCaptureScreens);\r\n}\r\n\r\nexport default DocumentCaptureScreens;\r\n"],"names":["hasMoreThanNColors","data","n","colors","templateString","styles","documentCaptureScale","DocumentCapture","template","SmartCamera","error","imageDetails","video","canvas","previewCanvas","image","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","name","IdReview","SmartFileUpload","numberOfBytes","units","exponent","approx","file","resolve","reject","reader","e","files","frontDocumentIcon","backDocumentIcon","DocumentInstruction","event","fileData","COMPONENTS_VERSION","packageJson","smartCameraWeb","getPermissions","captureScreen","videoDevice","device","DocumentCaptureScreens","IMAGE_TYPE","screen"],"mappings":"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"}