@smileid/web-components 11.4.1 → 11.4.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.
- package/dist/esm/{DocumentCaptureScreens-wvJcTVkA.js → DocumentCaptureScreens-D1oMAv4n.js} +4 -4
- package/dist/esm/{DocumentCaptureScreens-wvJcTVkA.js.map → DocumentCaptureScreens-D1oMAv4n.js.map} +1 -1
- package/dist/esm/{EndUserConsent-BXvS7t8z.js → EndUserConsent-D26UoVk5.js} +3 -3
- package/dist/esm/{EndUserConsent-BXvS7t8z.js.map → EndUserConsent-D26UoVk5.js.map} +1 -1
- package/dist/esm/{Navigation-BRFmg7s1.js → Navigation-nvehze1F.js} +2 -2
- package/dist/esm/{Navigation-BRFmg7s1.js.map → Navigation-nvehze1F.js.map} +1 -1
- package/dist/esm/{SelfieCaptureScreens-BkJBfzHv.js → SelfieCaptureScreens-CC-y0CpT.js} +1900 -1794
- package/dist/esm/SelfieCaptureScreens-CC-y0CpT.js.map +1 -0
- package/dist/esm/{TotpConsent-Cn2DkVza.js → TotpConsent-owUOdKzP.js} +2 -2
- package/dist/esm/{TotpConsent-Cn2DkVza.js.map → TotpConsent-owUOdKzP.js.map} +1 -1
- package/dist/esm/combobox.js +1 -1
- package/dist/esm/document.js +1 -1
- package/dist/esm/end-user-consent.js +1 -1
- package/dist/esm/{index-DBUdxnp9.js → index-5Nn2kzHI.js} +4 -4
- package/dist/esm/{index-DBUdxnp9.js.map → index-5Nn2kzHI.js.map} +1 -1
- package/dist/esm/localisation.js +1 -1
- package/dist/esm/main.js +6 -6
- package/dist/esm/navigation.js +1 -1
- package/dist/esm/{package-Dax8ezDK.js → package-BxstV9r_.js} +3 -3
- package/dist/esm/{package-Dax8ezDK.js.map → package-BxstV9r_.js.map} +1 -1
- package/dist/esm/selfie.js +1 -1
- package/dist/esm/smart-camera-web.js +5 -5
- package/dist/esm/totp-consent.js +1 -1
- package/dist/smart-camera-web.js +61 -52
- package/dist/smart-camera-web.js.map +1 -1
- package/dist/types/main.d.ts +4 -1
- package/lib/components/selfie/src/selfie-capture-wrapper/SelfieCaptureWrapper.tsx +113 -8
- package/lib/components/selfie/src/smartselfie-capture/SmartSelfieCapture.tsx +72 -39
- package/lib/components/selfie/src/smartselfie-capture/hooks/useCamera.ts +12 -0
- package/lib/components/selfie/src/smartselfie-capture/utils/mediapipeManager.ts +65 -0
- package/lib/components/signature-pad/package.json +2 -2
- package/package.json +10 -1
- package/dist/esm/SelfieCaptureScreens-BkJBfzHv.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import d from "validate.js";
|
|
2
|
-
import { b as l } from "./index-
|
|
2
|
+
import { b as l } from "./index-5Nn2kzHI.js";
|
|
3
3
|
function a(n, t) {
|
|
4
4
|
return fetch(n, {
|
|
5
5
|
body: JSON.stringify(t),
|
|
@@ -731,4 +731,4 @@ class h extends HTMLElement {
|
|
|
731
731
|
export {
|
|
732
732
|
h as T
|
|
733
733
|
};
|
|
734
|
-
//# sourceMappingURL=TotpConsent-
|
|
734
|
+
//# sourceMappingURL=TotpConsent-owUOdKzP.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TotpConsent-Cn2DkVza.js","sources":["../../lib/components/totp-consent/src/TotpConsent.js"],"sourcesContent":["import validate from 'validate.js';\nimport { getDirection } from '../../../domain/localisation';\n\nfunction postData(url, data) {\n return fetch(url, {\n body: JSON.stringify(data),\n cache: 'no-cache',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n mode: 'cors',\n });\n}\n\nfunction markup() {\n return `\n <style>\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n }\n\n :host {\n --flow-space: 1.5rem;\n\n --color-dark: #404040;\n --color-grey: #555B69;\n\n --color-success: #1EB244;\n --color-failure: #FFEDEB;\n --color-failure-tint: #F86B58;\n\n --color-richblue: #043C93;\n --color-theme: ${this.themeColor};\n\n --color-active: #2D2B2A;\n --color-default: #001096;\n --color-disabled: #848282;\n }\n\n html {\n font-family: 'DM Sans', sans-serif;\n }\n\n [hidden] {\n display: none !important;\n }\n\n [disabled] {\n cursor: not-allowed !important;\n }\n\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 .color-dark {\n color: var(--color-dark);\n }\n\n .color-grey {\n color: var(--color-grey);\n }\n\n .flow > * + * {\n margin-top: var(--flow-space);\n }\n\n .center {\n margin-left: auto;\n margin-right: auto;\n\n text-align: center;\n }\n\n h1 {\n font-size: 1.5rem;\n font-weight: 700;\n }\n\n button, input, select, textarea {\n font: inherit\n }\n\n label,\n input,\n select,\n textarea {\n --flow-space: .5rem;\n display: block;\n width: 100%;\n }\n\n input,\n select,\n textarea {\n border: 1px solid #d1d8d6;\n border-radius: .5rem;\n padding: .75rem 1rem;\n }\n\n button {\n --button-color: var(--color-default);\n --flow-space: 3rem;\n -webkit-appearance: none;\n -moz-appearance: none;\n align-items: center;\n appearance: none;\n background-color: transparent;\n border-radius: 2.5rem;\n border: none;\n color: #ffffff;\n cursor: pointer;\n display: inline-flex;\n font-size: 20px;\n font-weight: 500;\n inline-size: 100%;\n justify-content: center;\n letter-spacing: .05ch;\n line-height: 1;\n padding: 1rem 2.5rem;\n text-align: center;\n text-decoration: none;\n }\n\n button[data-variant='solid'] {\n background-color: var(--button-color);\n border: 2px solid var(--button-color);\n }\n\n button[data-variant='outline'] {\n color: var(--button-color);\n border: 2px solid var(--button-color);\n }\n\n button[data-variant='ghost'] {\n color: var(--button-color);\n }\n\n button:hover,\n button:focus,\n button:active {\n --button-color: var(--color-active);\n }\n\n button:disabled {\n --button-color: var(--color-disabled);\n }\n\n button[data-type='icon'] {\n height: 2rem;\n padding: 0;\n width: 2rem;\n background: transparent;\n }\n\n input {\n font: inherit;\n }\n\n fieldset {\n margin: 0;\n border: none;\n }\n\n .font-weight:bold {\n font-weight: bold;\n }\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: ${this.themeColor || 'rgb(21, 31, 114)'};\n }\n\n #error,\n .validation-message {\n color: red;\n text-transform: capitalize;\n }\n\n .input-group {\n --flow-space: 1.5rem;\n text-align: initial;\n }\n\n .input-radio {\n --flow-space: 1.5rem;\n background-color: #F8F8F8;\n border-radius: .5rem;\n padding: .625rem 1rem;\n display: flex;\n align-items: center;\n }\n\n .otp-mode {\n display: flex;\n align-items: center;\n text-align: initial;\n }\n\n .otp-mode :first-child {\n margin: 0;\n margin-inline-end: 1rem;\n }\n\n .otp-mode :nth-child(2n) {\n --flow-space: .5rem;\n }\n\n .input-radio [type='radio'] {\n border-radius: 50%;\n inline-size: 2rem;\n block-size: 2rem;\n margin-inline-end: .5rem;\n background-color: white;\n border: .125rem solid #f5f5f5;\n }\n\n #totp-token {\n block-size: 3rem;\n inline-size: 20rem;\n max-inline-size: 100%;\n background-color: #F5F5F5;\n border: none;\n border-bottom: 2px solid #2F718D;\n font-size: 1.5rem;\n text-align: center;\n font-weight: 700;\n letter-spacing: 2rem;\n padding: .5rem 1rem;\n margin-inline: auto;\n }\n\n @keyframes spin {\n 0% {\n transform: translate3d(-50%, -50%, 0) rotate(0deg);\n }\n 100% {\n transform: translate3d(-50%, -50%, 0) rotate(360deg);\n }\n }\n\n .spinner {\n animation: 1.5s linear infinite spin;\n animation-play-state: inherit;\n border: solid 5px #cfd0d1;\n border-bottom-color: var(--color-active);\n border-radius: 50%;\n content: \"\";\n display: block;\n height: 25px;\n width: 25px;\n will-change: transform;\n position: relative;\n top: .675rem;\n left: 1.25rem;\n }\n </style>\n\n <div class='flow center' id='id-entry' dir='${this.direction}'>\n <div class=\"nav\">\n <div class=\"back-wrapper\">\n <button type='button' data-type='icon' id=\"back-button\" class=\"back-button\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\">\n <path fill=\"#DBDBC4\" d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10Z\" opacity=\".4\"/>\n <path fill=\"${this.themeColor}\" d=\"M15.5 11.25h-5.19l1.72-1.72c.29-.29.29-.77 0-1.06a.754.754 0 0 0-1.06 0l-3 3c-.29.29-.29.77 0 1.06l3 3c.15.15.34.22.53.22s.38-.07.53-.22c.29-.29.29-.77 0-1.06l-1.72-1.72h5.19c.41 0 .75-.34.75-.75s-.34-.75-.75-.75Z\"/>\n </svg>\n </button>\n <div class=\"back-button-text\">Back</div>\n </div>\n <button data-type='icon' type='button' class='close-iframe'>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\">\n <path fill=\"#DBDBC4\" d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10Z\" opacity=\".4\"/>\n <path fill=\"#91190F\" d=\"m13.06 12 2.3-2.3c.29-.29.29-.77 0-1.06a.754.754 0 0 0-1.06 0l-2.3 2.3-2.3-2.3a.754.754 0 0 0-1.06 0c-.29.29-.29.77 0 1.06l2.3 2.3-2.3 2.3c-.29.29-.29.77 0 1.06.15.15.34.22.53.22s.38-.07.53-.22l2.3-2.3 2.3 2.3c.15.15.34.22.53.22s.38-.07.53-.22c.29-.29.29-.77 0-1.06l-2.3-2.3Z\"/>\n </svg>\n <span class='visually-hidden'>Close SmileIdentity Verification frame</span>\n </button>\n </div>\n <h1>\n Enter your ${this.idTypeLabel}\n </h1>\n\n <form name='id-entry-form' class='flow' novalidate style='--flow-space: 5.5rem'>\n <div id='id-number' class=\"input-group flow\">\n <label class='required' for=\"id_number\">\n ${this.idTypeLabel}\n </label>\n\n <input aria-required='true' id=\"id_number\" name=\"id_number\"\n maxlength='11' placeholder='' />\n\n <p>\n <small>${this.idHint}</small>\n </p>\n </div>\n\n <button data-variant='solid' id='query-otp-modes' type='submit'>\n <span class='text'>Continue</span>\n <svg aria-hidden='true' width=\"25\" height=\"24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 12h11m0 0-4.588-4M18 12l-4.588 4\" stroke=\"#fff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span hidden class='spinner'></span>\n </button>\n </form>\n </div>\n\n <div hidden class='flow center' id='select-mode' dir='${this.direction}'>\n <div class=\"nav\">\n <div class=\"back-wrapper\">\n <button type='button' data-type='icon' id=\"back-to-entry-button\" class=\"back-button\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\">\n <path fill=\"#DBDBC4\" d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10Z\" opacity=\".4\"/>\n <path fill=\"${this.themeColor}\" d=\"M15.5 11.25h-5.19l1.72-1.72c.29-.29.29-.77 0-1.06a.754.754 0 0 0-1.06 0l-3 3c-.29.29-.29.77 0 1.06l3 3c.15.15.34.22.53.22s.38-.07.53-.22c.29-.29.29-.77 0-1.06l-1.72-1.72h5.19c.41 0 .75-.34.75-.75s-.34-.75-.75-.75Z\"/>\n </svg>\n </button>\n <div class=\"back-button-text\">Back</div>\n </div>\n <button data-type='icon' type='button' class='close-iframe'>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\">\n <path fill=\"#DBDBC4\" d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10Z\" opacity=\".4\"/>\n <path fill=\"#91190F\" d=\"m13.06 12 2.3-2.3c.29-.29.29-.77 0-1.06a.754.754 0 0 0-1.06 0l-2.3 2.3-2.3-2.3a.754.754 0 0 0-1.06 0c-.29.29-.29.77 0 1.06l2.3 2.3-2.3 2.3c-.29.29-.29.77 0 1.06.15.15.34.22.53.22s.38-.07.53-.22l2.3-2.3 2.3 2.3c.15.15.34.22.53.22s.38-.07.53-.22c.29-.29.29-.77 0-1.06l-2.3-2.3Z\"/>\n </svg>\n <span class='visually-hidden'>Close SmileIdentity Verification frame</span>\n </button>\n </div>\n <h1>\n Select contact method\n </h1>\n\n <form name='select-mode-form' novalidate style='--flow-space: 4.25rem' id='otp-entry' class='flow center'>\n <fieldset class='flow center'>\n <legend class='flow' style='--flow-space: 1.5rem'>\n <p>\n NIBSS, the data custodian of BVN, \n will send you a One-Time Password (OTP) \n </p>\n\n <p>\n <small>\n The request will be from Chams Plc, who is NIBSS' technical partner.\n </small>\n </p>\n </legend>\n\n <div class='flow center'>\n ${\n this.modes.length\n ? this.modes\n .map(\n (mode) => `<label class='input-radio'>\n <input type=\"radio\" id=\"\" name=\"mode\" value=\"${Object.keys(mode)[0]}\">\n <div class='otp-mode'>\n ${\n Object.keys(mode)[0].includes('sms')\n ? `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"29\" height=\"37\" fill=\"none\">\n <path stroke=\"#2F718D\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M16.697 24.12c4.914 0 7.37 0 8.897-1.652 1.527-1.651 1.527-4.31 1.527-9.625 0-5.316 0-7.974-1.527-9.625-1.526-1.651-3.983-1.651-8.897-1.651h-5.211c-4.914 0-7.37 0-8.897 1.651-1.527 1.651-1.527 4.31-1.527 9.625 0 5.316 0 7.974 1.527 9.625.85.92 1.991 1.328 3.685 1.508\"/>\n <g filter=\"url(#sms)\">\n <path stroke=\"#2F718D\" stroke-linecap=\"round\" stroke-width=\"2\" d=\"M16.697 24.12c-1.61 0-3.384.703-5.005 1.613-2.602 1.462-3.903 2.193-4.545 1.727-.64-.465-.52-1.91-.277-4.799l.055-.656\" shape-rendering=\"crispEdges\"/>\n </g>\n <defs>\n <filter id=\"sms\" width=\"20.023\" height=\"15.595\" x=\"1.675\" y=\"21.005\" color-interpolation-filters=\"sRGB\" filterUnits=\"userSpaceOnUse\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n <feColorMatrix in=\"SourceAlpha\" result=\"hardAlpha\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"/>\n <feOffset dy=\"4\"/>\n <feGaussianBlur stdDeviation=\"2\"/>\n <feComposite in2=\"hardAlpha\" operator=\"out\"/>\n <feColorMatrix values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0\"/>\n <feBlend in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_2_404\"/>\n <feBlend in=\"SourceGraphic\" in2=\"effect1_dropShadow_2_404\" result=\"shape\"/>\n </filter>\n </defs>\n </svg>\n `\n : `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"35\" height=\"24\" fill=\"none\">\n <path stroke=\"#2F718D\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4.062 4.367c0-1.437 1.221-2.603 2.727-2.603h21.815c1.506 0 2.727 1.166 2.727 2.603v15.62c0 1.438-1.221 2.604-2.727 2.604H6.789c-1.506 0-2.727-1.166-2.727-2.604V4.367Z\"/>\n <g filter=\"url(#message)\">\n <path stroke=\"#2F718D\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"m5.426 3.066 8.647 7.338c2.067 1.754 5.18 1.754 7.247 0l8.648-7.338\" shape-rendering=\"crispEdges\"/>\n </g>\n <defs>\n <filter id=\"message\" width=\"34.042\" height=\"18.154\" x=\".676\" y=\"2.316\" color-interpolation-filters=\"sRGB\" filterUnits=\"userSpaceOnUse\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n <feColorMatrix in=\"SourceAlpha\" result=\"hardAlpha\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"/>\n <feOffset dy=\"4\"/>\n <feGaussianBlur stdDeviation=\"2\"/>\n <feComposite in2=\"hardAlpha\" operator=\"out\"/>\n <feColorMatrix values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0\"/>\n <feBlend in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_2_394\"/>\n <feBlend in=\"SourceGraphic\" in2=\"effect1_dropShadow_2_394\" result=\"shape\"/>\n </filter>\n </defs>\n </svg>\n `\n }\n <div class='flow'>\n <p>\n ${Object.values(mode)[0]}\n </p>\n <p>\n <small>\n An OTP will be sent by ${\n Object.keys(mode)[0].includes(\n 'sms',\n )\n ? 'sms'\n : 'email'\n } to verify your identity\n </small>\n </p>\n </div>\n </div>\n </label>`,\n )\n .join('\\n')\n : 'No modes yet'\n }\n </div>\n </fieldset>\n\n <button data-variant='ghost' id='contact-methods-outdated' style='--flow-space: .5rem' class='' type='button'>\n I am no longer using any of these options\n </button>\n\n <button data-variant='solid' id='select-otp-mode' type='submit'>\n <span class='text'>Continue</span>\n <svg aria-hidden='true' width=\"25\" height=\"24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 12h11m0 0-4.588-4M18 12l-4.588 4\" stroke=\"#fff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span hidden class='spinner'></span>\n </button>\n </form>\n </div>\n\n <div hidden class='flow center' id='otp-verification' dir='${this.direction}'>\n <div class=\"nav justify-right\">\n <button data-type='icon' type='button' class='close-iframe'>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\">\n <path fill=\"#DBDBC4\" d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10Z\" opacity=\".4\"/>\n <path fill=\"#91190F\" d=\"m13.06 12 2.3-2.3c.29-.29.29-.77 0-1.06a.754.754 0 0 0-1.06 0l-2.3 2.3-2.3-2.3a.754.754 0 0 0-1.06 0c-.29.29-.29.77 0 1.06l2.3 2.3-2.3 2.3c-.29.29-.29.77 0 1.06.15.15.34.22.53.22s.38-.07.53-.22l2.3-2.3 2.3 2.3c.15.15.34.22.53.22s.38-.07.53-.22c.29-.29.29-.77 0-1.06l-2.3-2.3Z\"/>\n </svg>\n <span class='visually-hidden'>Close SmileIdentity Verification frame</span>\n </button>\n </div>\n <h1>\n OTP Verification\n </h1>\n\n <div style='--flow-space: 4.25rem' id='otp-entry'>\n <form name='otp-submission-form' novalidate style='--flow-space: 1.5rem' class='flow center'>\n <label for='totp-token'>\n Enter the OTP sent to <span class='font-weight:bold'>${\n this.selectedOtpDeliveryMode\n }</span>\n </label>\n <input type='text' id='totp-token' maxlength='6' inputmode='numeric' autocomplete='one-time-code' />\n\n <p>\n Didn't receive the OTP${\n !this.selectedOtpDeliveryMode\n ? '?'\n : ` at <span class='font-weight:bold'>${this.selectedOtpDeliveryMode}</span>?`\n }\n </p>\n\n <button style='--flow-space: .5rem' data-variant='ghost' class='try-another-method' type='button'>\n Try another contact method\n </button>\n\n <button data-variant='solid' id='submit-otp' type='submit'>\n <span class='text'>Submit</span>\n <svg aria-hidden='true' width=\"25\" height=\"24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 12h11m0 0-4.588-4M18 12l-4.588 4\" stroke=\"#fff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span hidden class='spinner'></span>\n </button>\n </form>\n </div>\n </div>\n `;\n}\n\nclass TotpConsent extends HTMLElement {\n constructor() {\n super();\n\n this.templateString = markup.bind(this);\n this.render = () => this.templateString();\n\n this.attachShadow({ mode: 'open' });\n\n this.modes = [];\n this['otp-delivery-mode'] = '';\n\n this.queryOtpModes = this.queryOtpModes.bind(this);\n this.selectOtpMode = this.selectOtpMode.bind(this);\n this.submitOtp = this.submitOtp.bind(this);\n this.switchContactMethod = this.switchContactMethod.bind(this);\n this.handleTotpConsentGrant = this.handleTotpConsentGrant.bind(this);\n this.handleTotpConsentContactMethodsOutdated =\n this.handleTotpConsentContactMethodsOutdated.bind(this);\n this.pages = [];\n }\n\n static get observedAttributes() {\n return ['modes', 'otp-delivery-mode'];\n }\n\n attributeChangedCallback(name) {\n switch (name) {\n case 'modes':\n case 'otp-delivery-mode': {\n const updatedTemplate = document.createElement('template');\n updatedTemplate.innerHTML = this.render();\n const updatedNode = updatedTemplate.content\n .cloneNode(true)\n .querySelector(`#${this.activeScreen.id}`);\n updatedNode.hidden = false;\n this.shadowRoot.replaceChild(updatedNode, this.activeScreen);\n this.setUpEventListeners();\n this.setActiveScreen(updatedNode);\n break;\n }\n default:\n break;\n }\n }\n\n setUpEventListeners() {\n // Screens\n this.idEntryScreen = this.shadowRoot.querySelector('#id-entry');\n this.selectModeScreen = this.shadowRoot.querySelector('#select-mode');\n this.otpVerificationScreen =\n this.shadowRoot.querySelector('#otp-verification');\n\n if (!this.activeScreen) {\n this.activeScreen = this.idEntryScreen;\n }\n\n // Buttons\n this.queryOtpModesButton =\n this.idEntryScreen.querySelector('#query-otp-modes');\n this.backButton = this.idEntryScreen.querySelector('#back-button');\n this.selectOtpModeButton =\n this.selectModeScreen.querySelector('#select-otp-mode');\n this.entryBackbutton = this.selectModeScreen.querySelector(\n '#back-to-entry-button',\n );\n this.contactMethodsOutdatedButton = this.selectModeScreen.querySelector(\n '#contact-methods-outdated',\n );\n this.submitOtpButton =\n this.otpVerificationScreen.querySelector('#submit-otp');\n this.switchContactMethodButton = this.otpVerificationScreen.querySelector(\n '.try-another-method',\n );\n const CloseIframeButtons =\n this.shadowRoot.querySelectorAll('.close-iframe');\n\n // Input Elements\n this.idNumberInput = this.idEntryScreen.querySelector('#id_number');\n this.modeInputs = this.selectModeScreen.querySelectorAll('[name=\"mode\"]');\n this.otpInput = this.otpVerificationScreen.querySelector('#totp-token');\n\n // Event Handlers\n this.queryOtpModesButton.addEventListener('click', (e) =>\n this.queryOtpModes(e),\n );\n this.selectOtpModeButton.addEventListener('click', (e) =>\n this.selectOtpMode(e),\n );\n this.submitOtpButton.addEventListener('click', (e) => this.submitOtp(e));\n this.switchContactMethodButton.addEventListener('click', (e) =>\n this.switchContactMethod(e),\n );\n this.contactMethodsOutdatedButton.addEventListener('click', (e) =>\n this.handleTotpConsentContactMethodsOutdated(e),\n );\n\n this.entryBackbutton.addEventListener('click', () => {\n this.handleBackClick();\n });\n\n this.backButton.addEventListener('click', () => {\n this.handleBackClick();\n });\n\n CloseIframeButtons.forEach((button) => {\n button.addEventListener(\n 'click',\n () => {\n this.closeWindow();\n },\n false,\n );\n });\n }\n\n closeWindow() {\n const referenceWindow = window.parent;\n [referenceWindow.parent, referenceWindow].forEach((win) => {\n win.postMessage('SmileIdentity::Close', '*');\n });\n }\n\n handleBackClick() {\n const page = this.pages.pop();\n if (page) {\n this.setActiveScreen(page);\n } else {\n this.dispatchEvent(\n new CustomEvent('end-user-consent.totp.cancelled', {}),\n );\n }\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 this.setUpEventListeners();\n }\n\n switchContactMethod() {\n this.queryOtpModes();\n }\n\n resetForm() {\n const invalidElements =\n this.activeScreen.querySelectorAll('[aria-invalid]');\n invalidElements.forEach((el) => el.removeAttribute('aria-invalid'));\n\n const validationMessages = this.activeScreen.querySelectorAll(\n '.validation-message',\n );\n validationMessages.forEach((el) => el.remove());\n }\n\n handleIdNumberValidationErrors(errors) {\n const fields = Object.keys(errors);\n\n fields.forEach((field) => {\n const input = this.activeScreen.querySelector(`#${field}`);\n input.setAttribute('aria-invalid', 'true');\n input.setAttribute('aria-describedby', `${field}-hint`);\n\n const errorDiv = document.createElement('div');\n errorDiv.setAttribute('id', `${field}-hint`);\n errorDiv.setAttribute('class', 'validation-message');\n // eslint-disable-next-line prefer-destructuring\n errorDiv.textContent = errors[field][0];\n\n input.insertAdjacentElement('afterend', errorDiv);\n });\n }\n\n handleActiveScreenErrors(error) {\n const submitButton = this.activeScreen.querySelector('[type=\"submit\"]');\n const errorDiv = document.createElement('div');\n errorDiv.setAttribute('class', 'validation-message');\n errorDiv.textContent = error;\n submitButton.insertAdjacentElement('beforebegin', errorDiv);\n }\n\n validateIdNumber(idNumber) {\n const validationConstraints = {\n id_number: {\n format: new RegExp(this.idRegex),\n presence: {\n allowEmpty: false,\n message: 'is required',\n },\n },\n };\n\n const errors = validate({ id_number: idNumber }, validationConstraints);\n\n if (errors) {\n this.handleIdNumberValidationErrors(errors);\n }\n\n return errors;\n }\n\n async queryOtpModes(event) {\n if (event) {\n // ACTION: disable another submission\n event.preventDefault();\n\n // ACTION: Reset any form validation errors'\n this.resetForm();\n }\n\n // ACTION: Validate idNumber\n const validationErrors = this.validateIdNumber(this.idNumberInput.value);\n\n // ACTION: Get and set idNumber\n localStorage.setItem('idNumber', this.idNumberInput.value || this.idNumber);\n\n if (!validationErrors) {\n const data = {\n country: this.country,\n id_number: this.idNumber,\n id_type: this.idType,\n partner_id: this.partnerId,\n token: this.token,\n };\n const url = `${this.baseUrl}/totp_consent`;\n\n try {\n this.toggleLoading();\n const response = await postData(url, data);\n const json = await response.json();\n this.toggleLoading();\n\n if (!response.ok) {\n this.handleActiveScreenErrors(json.error);\n } else {\n this.sessionId = json.session_id;\n this.modes = json.modes;\n this.setActiveScreen(this.selectModeScreen);\n this.setAttribute('modes', json.modes);\n }\n } catch (error) {\n this.toggleLoading();\n this.handleActiveScreenErrors(error.message);\n }\n }\n }\n\n async selectOtpMode(event) {\n // ACTION: disable another submission\n event.preventDefault();\n\n // ACTION: Reset any form validation errors'\n this.resetForm();\n\n // ACTION: Get mode\n this.mode = Array.prototype.find.call(\n this.modeInputs,\n (node) => node.checked,\n ).value;\n const data = {\n country: this.country,\n id_number: this.idNumber,\n id_type: this.idType,\n mode: this.mode,\n partner_id: this.partnerId,\n session_id: this.sessionId,\n token: this.token,\n };\n const url = `${this.baseUrl}/totp_consent/mode`;\n\n try {\n this.toggleLoading();\n const response = await postData(url, data);\n const json = await response.json();\n this.toggleLoading();\n\n if (!response.ok) {\n this.handleActiveScreenErrors(json.error);\n } else {\n this.selectedOtpDeliveryMode = this.modes.filter(\n (mode) => mode[this.mode],\n )[0][this.mode];\n this.setActiveScreen(this.otpVerificationScreen);\n this.setAttribute('otp-delivery-mode', this.selectedOtpDeliveryMode);\n }\n } catch (error) {\n this.toggleLoading();\n this.handleActiveScreenErrors(error.message);\n }\n }\n\n async submitOtp(event) {\n // ACTION: disable another submission\n event.preventDefault();\n\n // ACTION: Reset any form validation errors'\n this.resetForm();\n\n this.otp = this.otpInput.value;\n\n const data = {\n country: this.country,\n id_number: this.idNumber,\n id_type: this.idType,\n otp: this.otp,\n partner_id: this.partnerId,\n session_id: this.sessionId,\n token: this.token,\n };\n const url = `${this.baseUrl}/totp_consent/otp`;\n\n try {\n this.toggleLoading();\n const response = await postData(url, data);\n const json = await response.json();\n this.toggleLoading();\n\n if (!response.ok) {\n this.handleActiveScreenErrors(json.error);\n } else {\n this.handleTotpConsentGrant(event);\n }\n } catch (error) {\n this.toggleLoading();\n this.handleActiveScreenErrors(error.message);\n }\n }\n\n toggleLoading() {\n const button = this.activeScreen.querySelector('button[type=\"submit\"]');\n const text = button.querySelector('.text');\n const arrow = button.querySelector('svg');\n const spinner = button.querySelector('.spinner');\n\n button.toggleAttribute('disabled');\n text.toggleAttribute('hidden');\n arrow.toggleAttribute('hidden');\n spinner.toggleAttribute('hidden');\n }\n\n setActiveScreen(screen) {\n this.activeScreen.hidden = true;\n screen.hidden = false;\n this.activeScreen = screen;\n }\n\n get baseUrl() {\n return this.getAttribute('base-url');\n }\n\n get country() {\n return this.getAttribute('country');\n }\n\n get idHint() {\n return this.getAttribute('id-hint') || 'Your BVN should be 11 digits long';\n }\n\n get idNumber() {\n return localStorage.getItem('idNumber');\n }\n\n get idRegex() {\n return this.getAttribute('id-regex');\n }\n\n get idType() {\n return this.getAttribute('id-type');\n }\n\n get idTypeLabel() {\n return this.getAttribute('id-type-label');\n }\n\n get partnerId() {\n return this.getAttribute('partner-id');\n }\n\n get partnerName() {\n return this.getAttribute('partner-name');\n }\n\n get token() {\n return this.getAttribute('token');\n }\n\n get themeColor() {\n return this.getAttribute('theme-color') || '#001096';\n }\n\n get direction() {\n return this.getAttribute('dir') || getDirection() || 'ltr';\n }\n\n get hideBack() {\n return this.hasAttribute('hide-back');\n }\n\n get showNavigation() {\n return this.hasAttribute('show-navigation');\n }\n\n handleTotpConsentGrant() {\n const customEvent = new CustomEvent('end-user-consent.totp.granted', {\n detail: {\n consented: {\n contact_information: true,\n document_information: true,\n personal_details: true,\n },\n id_number: this.idNumber,\n session_id: this.sessionId,\n },\n });\n\n this.dispatchEvent(customEvent);\n }\n\n handleTotpConsentContactMethodsOutdated() {\n const tag = 'end-user-consent.totp.denied.contact-methods-outdated';\n const customEvent = new CustomEvent(tag, {\n detail: {\n data: {\n id_number: this.idNumber,\n session_id: this.sessionId,\n },\n message: tag,\n },\n });\n\n this.dispatchEvent(customEvent);\n }\n}\n\nif ('customElements' in window && !window.customElements.get('totp-consent')) {\n window.customElements.define('totp-consent', TotpConsent);\n}\n\nexport {\n // eslint-disable-next-line import/prefer-default-export\n TotpConsent,\n};\n"],"names":["postData","url","data","markup","mode","TotpConsent","name","updatedTemplate","updatedNode","CloseIframeButtons","button","referenceWindow","win","page","template","el","errors","field","input","errorDiv","error","submitButton","idNumber","validationConstraints","validate","event","validationErrors","response","json","node","text","arrow","spinner","screen","getDirection","customEvent","tag"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TotpConsent-owUOdKzP.js","sources":["../../lib/components/totp-consent/src/TotpConsent.js"],"sourcesContent":["import validate from 'validate.js';\nimport { getDirection } from '../../../domain/localisation';\n\nfunction postData(url, data) {\n return fetch(url, {\n body: JSON.stringify(data),\n cache: 'no-cache',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n mode: 'cors',\n });\n}\n\nfunction markup() {\n return `\n <style>\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n }\n\n :host {\n --flow-space: 1.5rem;\n\n --color-dark: #404040;\n --color-grey: #555B69;\n\n --color-success: #1EB244;\n --color-failure: #FFEDEB;\n --color-failure-tint: #F86B58;\n\n --color-richblue: #043C93;\n --color-theme: ${this.themeColor};\n\n --color-active: #2D2B2A;\n --color-default: #001096;\n --color-disabled: #848282;\n }\n\n html {\n font-family: 'DM Sans', sans-serif;\n }\n\n [hidden] {\n display: none !important;\n }\n\n [disabled] {\n cursor: not-allowed !important;\n }\n\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 .color-dark {\n color: var(--color-dark);\n }\n\n .color-grey {\n color: var(--color-grey);\n }\n\n .flow > * + * {\n margin-top: var(--flow-space);\n }\n\n .center {\n margin-left: auto;\n margin-right: auto;\n\n text-align: center;\n }\n\n h1 {\n font-size: 1.5rem;\n font-weight: 700;\n }\n\n button, input, select, textarea {\n font: inherit\n }\n\n label,\n input,\n select,\n textarea {\n --flow-space: .5rem;\n display: block;\n width: 100%;\n }\n\n input,\n select,\n textarea {\n border: 1px solid #d1d8d6;\n border-radius: .5rem;\n padding: .75rem 1rem;\n }\n\n button {\n --button-color: var(--color-default);\n --flow-space: 3rem;\n -webkit-appearance: none;\n -moz-appearance: none;\n align-items: center;\n appearance: none;\n background-color: transparent;\n border-radius: 2.5rem;\n border: none;\n color: #ffffff;\n cursor: pointer;\n display: inline-flex;\n font-size: 20px;\n font-weight: 500;\n inline-size: 100%;\n justify-content: center;\n letter-spacing: .05ch;\n line-height: 1;\n padding: 1rem 2.5rem;\n text-align: center;\n text-decoration: none;\n }\n\n button[data-variant='solid'] {\n background-color: var(--button-color);\n border: 2px solid var(--button-color);\n }\n\n button[data-variant='outline'] {\n color: var(--button-color);\n border: 2px solid var(--button-color);\n }\n\n button[data-variant='ghost'] {\n color: var(--button-color);\n }\n\n button:hover,\n button:focus,\n button:active {\n --button-color: var(--color-active);\n }\n\n button:disabled {\n --button-color: var(--color-disabled);\n }\n\n button[data-type='icon'] {\n height: 2rem;\n padding: 0;\n width: 2rem;\n background: transparent;\n }\n\n input {\n font: inherit;\n }\n\n fieldset {\n margin: 0;\n border: none;\n }\n\n .font-weight:bold {\n font-weight: bold;\n }\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: ${this.themeColor || 'rgb(21, 31, 114)'};\n }\n\n #error,\n .validation-message {\n color: red;\n text-transform: capitalize;\n }\n\n .input-group {\n --flow-space: 1.5rem;\n text-align: initial;\n }\n\n .input-radio {\n --flow-space: 1.5rem;\n background-color: #F8F8F8;\n border-radius: .5rem;\n padding: .625rem 1rem;\n display: flex;\n align-items: center;\n }\n\n .otp-mode {\n display: flex;\n align-items: center;\n text-align: initial;\n }\n\n .otp-mode :first-child {\n margin: 0;\n margin-inline-end: 1rem;\n }\n\n .otp-mode :nth-child(2n) {\n --flow-space: .5rem;\n }\n\n .input-radio [type='radio'] {\n border-radius: 50%;\n inline-size: 2rem;\n block-size: 2rem;\n margin-inline-end: .5rem;\n background-color: white;\n border: .125rem solid #f5f5f5;\n }\n\n #totp-token {\n block-size: 3rem;\n inline-size: 20rem;\n max-inline-size: 100%;\n background-color: #F5F5F5;\n border: none;\n border-bottom: 2px solid #2F718D;\n font-size: 1.5rem;\n text-align: center;\n font-weight: 700;\n letter-spacing: 2rem;\n padding: .5rem 1rem;\n margin-inline: auto;\n }\n\n @keyframes spin {\n 0% {\n transform: translate3d(-50%, -50%, 0) rotate(0deg);\n }\n 100% {\n transform: translate3d(-50%, -50%, 0) rotate(360deg);\n }\n }\n\n .spinner {\n animation: 1.5s linear infinite spin;\n animation-play-state: inherit;\n border: solid 5px #cfd0d1;\n border-bottom-color: var(--color-active);\n border-radius: 50%;\n content: \"\";\n display: block;\n height: 25px;\n width: 25px;\n will-change: transform;\n position: relative;\n top: .675rem;\n left: 1.25rem;\n }\n </style>\n\n <div class='flow center' id='id-entry' dir='${this.direction}'>\n <div class=\"nav\">\n <div class=\"back-wrapper\">\n <button type='button' data-type='icon' id=\"back-button\" class=\"back-button\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\">\n <path fill=\"#DBDBC4\" d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10Z\" opacity=\".4\"/>\n <path fill=\"${this.themeColor}\" d=\"M15.5 11.25h-5.19l1.72-1.72c.29-.29.29-.77 0-1.06a.754.754 0 0 0-1.06 0l-3 3c-.29.29-.29.77 0 1.06l3 3c.15.15.34.22.53.22s.38-.07.53-.22c.29-.29.29-.77 0-1.06l-1.72-1.72h5.19c.41 0 .75-.34.75-.75s-.34-.75-.75-.75Z\"/>\n </svg>\n </button>\n <div class=\"back-button-text\">Back</div>\n </div>\n <button data-type='icon' type='button' class='close-iframe'>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\">\n <path fill=\"#DBDBC4\" d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10Z\" opacity=\".4\"/>\n <path fill=\"#91190F\" d=\"m13.06 12 2.3-2.3c.29-.29.29-.77 0-1.06a.754.754 0 0 0-1.06 0l-2.3 2.3-2.3-2.3a.754.754 0 0 0-1.06 0c-.29.29-.29.77 0 1.06l2.3 2.3-2.3 2.3c-.29.29-.29.77 0 1.06.15.15.34.22.53.22s.38-.07.53-.22l2.3-2.3 2.3 2.3c.15.15.34.22.53.22s.38-.07.53-.22c.29-.29.29-.77 0-1.06l-2.3-2.3Z\"/>\n </svg>\n <span class='visually-hidden'>Close SmileIdentity Verification frame</span>\n </button>\n </div>\n <h1>\n Enter your ${this.idTypeLabel}\n </h1>\n\n <form name='id-entry-form' class='flow' novalidate style='--flow-space: 5.5rem'>\n <div id='id-number' class=\"input-group flow\">\n <label class='required' for=\"id_number\">\n ${this.idTypeLabel}\n </label>\n\n <input aria-required='true' id=\"id_number\" name=\"id_number\"\n maxlength='11' placeholder='' />\n\n <p>\n <small>${this.idHint}</small>\n </p>\n </div>\n\n <button data-variant='solid' id='query-otp-modes' type='submit'>\n <span class='text'>Continue</span>\n <svg aria-hidden='true' width=\"25\" height=\"24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 12h11m0 0-4.588-4M18 12l-4.588 4\" stroke=\"#fff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span hidden class='spinner'></span>\n </button>\n </form>\n </div>\n\n <div hidden class='flow center' id='select-mode' dir='${this.direction}'>\n <div class=\"nav\">\n <div class=\"back-wrapper\">\n <button type='button' data-type='icon' id=\"back-to-entry-button\" class=\"back-button\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\">\n <path fill=\"#DBDBC4\" d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10Z\" opacity=\".4\"/>\n <path fill=\"${this.themeColor}\" d=\"M15.5 11.25h-5.19l1.72-1.72c.29-.29.29-.77 0-1.06a.754.754 0 0 0-1.06 0l-3 3c-.29.29-.29.77 0 1.06l3 3c.15.15.34.22.53.22s.38-.07.53-.22c.29-.29.29-.77 0-1.06l-1.72-1.72h5.19c.41 0 .75-.34.75-.75s-.34-.75-.75-.75Z\"/>\n </svg>\n </button>\n <div class=\"back-button-text\">Back</div>\n </div>\n <button data-type='icon' type='button' class='close-iframe'>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\">\n <path fill=\"#DBDBC4\" d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10Z\" opacity=\".4\"/>\n <path fill=\"#91190F\" d=\"m13.06 12 2.3-2.3c.29-.29.29-.77 0-1.06a.754.754 0 0 0-1.06 0l-2.3 2.3-2.3-2.3a.754.754 0 0 0-1.06 0c-.29.29-.29.77 0 1.06l2.3 2.3-2.3 2.3c-.29.29-.29.77 0 1.06.15.15.34.22.53.22s.38-.07.53-.22l2.3-2.3 2.3 2.3c.15.15.34.22.53.22s.38-.07.53-.22c.29-.29.29-.77 0-1.06l-2.3-2.3Z\"/>\n </svg>\n <span class='visually-hidden'>Close SmileIdentity Verification frame</span>\n </button>\n </div>\n <h1>\n Select contact method\n </h1>\n\n <form name='select-mode-form' novalidate style='--flow-space: 4.25rem' id='otp-entry' class='flow center'>\n <fieldset class='flow center'>\n <legend class='flow' style='--flow-space: 1.5rem'>\n <p>\n NIBSS, the data custodian of BVN, \n will send you a One-Time Password (OTP) \n </p>\n\n <p>\n <small>\n The request will be from Chams Plc, who is NIBSS' technical partner.\n </small>\n </p>\n </legend>\n\n <div class='flow center'>\n ${\n this.modes.length\n ? this.modes\n .map(\n (mode) => `<label class='input-radio'>\n <input type=\"radio\" id=\"\" name=\"mode\" value=\"${Object.keys(mode)[0]}\">\n <div class='otp-mode'>\n ${\n Object.keys(mode)[0].includes('sms')\n ? `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"29\" height=\"37\" fill=\"none\">\n <path stroke=\"#2F718D\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M16.697 24.12c4.914 0 7.37 0 8.897-1.652 1.527-1.651 1.527-4.31 1.527-9.625 0-5.316 0-7.974-1.527-9.625-1.526-1.651-3.983-1.651-8.897-1.651h-5.211c-4.914 0-7.37 0-8.897 1.651-1.527 1.651-1.527 4.31-1.527 9.625 0 5.316 0 7.974 1.527 9.625.85.92 1.991 1.328 3.685 1.508\"/>\n <g filter=\"url(#sms)\">\n <path stroke=\"#2F718D\" stroke-linecap=\"round\" stroke-width=\"2\" d=\"M16.697 24.12c-1.61 0-3.384.703-5.005 1.613-2.602 1.462-3.903 2.193-4.545 1.727-.64-.465-.52-1.91-.277-4.799l.055-.656\" shape-rendering=\"crispEdges\"/>\n </g>\n <defs>\n <filter id=\"sms\" width=\"20.023\" height=\"15.595\" x=\"1.675\" y=\"21.005\" color-interpolation-filters=\"sRGB\" filterUnits=\"userSpaceOnUse\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n <feColorMatrix in=\"SourceAlpha\" result=\"hardAlpha\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"/>\n <feOffset dy=\"4\"/>\n <feGaussianBlur stdDeviation=\"2\"/>\n <feComposite in2=\"hardAlpha\" operator=\"out\"/>\n <feColorMatrix values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0\"/>\n <feBlend in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_2_404\"/>\n <feBlend in=\"SourceGraphic\" in2=\"effect1_dropShadow_2_404\" result=\"shape\"/>\n </filter>\n </defs>\n </svg>\n `\n : `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"35\" height=\"24\" fill=\"none\">\n <path stroke=\"#2F718D\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4.062 4.367c0-1.437 1.221-2.603 2.727-2.603h21.815c1.506 0 2.727 1.166 2.727 2.603v15.62c0 1.438-1.221 2.604-2.727 2.604H6.789c-1.506 0-2.727-1.166-2.727-2.604V4.367Z\"/>\n <g filter=\"url(#message)\">\n <path stroke=\"#2F718D\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"m5.426 3.066 8.647 7.338c2.067 1.754 5.18 1.754 7.247 0l8.648-7.338\" shape-rendering=\"crispEdges\"/>\n </g>\n <defs>\n <filter id=\"message\" width=\"34.042\" height=\"18.154\" x=\".676\" y=\"2.316\" color-interpolation-filters=\"sRGB\" filterUnits=\"userSpaceOnUse\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n <feColorMatrix in=\"SourceAlpha\" result=\"hardAlpha\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"/>\n <feOffset dy=\"4\"/>\n <feGaussianBlur stdDeviation=\"2\"/>\n <feComposite in2=\"hardAlpha\" operator=\"out\"/>\n <feColorMatrix values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0\"/>\n <feBlend in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_2_394\"/>\n <feBlend in=\"SourceGraphic\" in2=\"effect1_dropShadow_2_394\" result=\"shape\"/>\n </filter>\n </defs>\n </svg>\n `\n }\n <div class='flow'>\n <p>\n ${Object.values(mode)[0]}\n </p>\n <p>\n <small>\n An OTP will be sent by ${\n Object.keys(mode)[0].includes(\n 'sms',\n )\n ? 'sms'\n : 'email'\n } to verify your identity\n </small>\n </p>\n </div>\n </div>\n </label>`,\n )\n .join('\\n')\n : 'No modes yet'\n }\n </div>\n </fieldset>\n\n <button data-variant='ghost' id='contact-methods-outdated' style='--flow-space: .5rem' class='' type='button'>\n I am no longer using any of these options\n </button>\n\n <button data-variant='solid' id='select-otp-mode' type='submit'>\n <span class='text'>Continue</span>\n <svg aria-hidden='true' width=\"25\" height=\"24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 12h11m0 0-4.588-4M18 12l-4.588 4\" stroke=\"#fff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span hidden class='spinner'></span>\n </button>\n </form>\n </div>\n\n <div hidden class='flow center' id='otp-verification' dir='${this.direction}'>\n <div class=\"nav justify-right\">\n <button data-type='icon' type='button' class='close-iframe'>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\">\n <path fill=\"#DBDBC4\" d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10Z\" opacity=\".4\"/>\n <path fill=\"#91190F\" d=\"m13.06 12 2.3-2.3c.29-.29.29-.77 0-1.06a.754.754 0 0 0-1.06 0l-2.3 2.3-2.3-2.3a.754.754 0 0 0-1.06 0c-.29.29-.29.77 0 1.06l2.3 2.3-2.3 2.3c-.29.29-.29.77 0 1.06.15.15.34.22.53.22s.38-.07.53-.22l2.3-2.3 2.3 2.3c.15.15.34.22.53.22s.38-.07.53-.22c.29-.29.29-.77 0-1.06l-2.3-2.3Z\"/>\n </svg>\n <span class='visually-hidden'>Close SmileIdentity Verification frame</span>\n </button>\n </div>\n <h1>\n OTP Verification\n </h1>\n\n <div style='--flow-space: 4.25rem' id='otp-entry'>\n <form name='otp-submission-form' novalidate style='--flow-space: 1.5rem' class='flow center'>\n <label for='totp-token'>\n Enter the OTP sent to <span class='font-weight:bold'>${\n this.selectedOtpDeliveryMode\n }</span>\n </label>\n <input type='text' id='totp-token' maxlength='6' inputmode='numeric' autocomplete='one-time-code' />\n\n <p>\n Didn't receive the OTP${\n !this.selectedOtpDeliveryMode\n ? '?'\n : ` at <span class='font-weight:bold'>${this.selectedOtpDeliveryMode}</span>?`\n }\n </p>\n\n <button style='--flow-space: .5rem' data-variant='ghost' class='try-another-method' type='button'>\n Try another contact method\n </button>\n\n <button data-variant='solid' id='submit-otp' type='submit'>\n <span class='text'>Submit</span>\n <svg aria-hidden='true' width=\"25\" height=\"24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 12h11m0 0-4.588-4M18 12l-4.588 4\" stroke=\"#fff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span hidden class='spinner'></span>\n </button>\n </form>\n </div>\n </div>\n `;\n}\n\nclass TotpConsent extends HTMLElement {\n constructor() {\n super();\n\n this.templateString = markup.bind(this);\n this.render = () => this.templateString();\n\n this.attachShadow({ mode: 'open' });\n\n this.modes = [];\n this['otp-delivery-mode'] = '';\n\n this.queryOtpModes = this.queryOtpModes.bind(this);\n this.selectOtpMode = this.selectOtpMode.bind(this);\n this.submitOtp = this.submitOtp.bind(this);\n this.switchContactMethod = this.switchContactMethod.bind(this);\n this.handleTotpConsentGrant = this.handleTotpConsentGrant.bind(this);\n this.handleTotpConsentContactMethodsOutdated =\n this.handleTotpConsentContactMethodsOutdated.bind(this);\n this.pages = [];\n }\n\n static get observedAttributes() {\n return ['modes', 'otp-delivery-mode'];\n }\n\n attributeChangedCallback(name) {\n switch (name) {\n case 'modes':\n case 'otp-delivery-mode': {\n const updatedTemplate = document.createElement('template');\n updatedTemplate.innerHTML = this.render();\n const updatedNode = updatedTemplate.content\n .cloneNode(true)\n .querySelector(`#${this.activeScreen.id}`);\n updatedNode.hidden = false;\n this.shadowRoot.replaceChild(updatedNode, this.activeScreen);\n this.setUpEventListeners();\n this.setActiveScreen(updatedNode);\n break;\n }\n default:\n break;\n }\n }\n\n setUpEventListeners() {\n // Screens\n this.idEntryScreen = this.shadowRoot.querySelector('#id-entry');\n this.selectModeScreen = this.shadowRoot.querySelector('#select-mode');\n this.otpVerificationScreen =\n this.shadowRoot.querySelector('#otp-verification');\n\n if (!this.activeScreen) {\n this.activeScreen = this.idEntryScreen;\n }\n\n // Buttons\n this.queryOtpModesButton =\n this.idEntryScreen.querySelector('#query-otp-modes');\n this.backButton = this.idEntryScreen.querySelector('#back-button');\n this.selectOtpModeButton =\n this.selectModeScreen.querySelector('#select-otp-mode');\n this.entryBackbutton = this.selectModeScreen.querySelector(\n '#back-to-entry-button',\n );\n this.contactMethodsOutdatedButton = this.selectModeScreen.querySelector(\n '#contact-methods-outdated',\n );\n this.submitOtpButton =\n this.otpVerificationScreen.querySelector('#submit-otp');\n this.switchContactMethodButton = this.otpVerificationScreen.querySelector(\n '.try-another-method',\n );\n const CloseIframeButtons =\n this.shadowRoot.querySelectorAll('.close-iframe');\n\n // Input Elements\n this.idNumberInput = this.idEntryScreen.querySelector('#id_number');\n this.modeInputs = this.selectModeScreen.querySelectorAll('[name=\"mode\"]');\n this.otpInput = this.otpVerificationScreen.querySelector('#totp-token');\n\n // Event Handlers\n this.queryOtpModesButton.addEventListener('click', (e) =>\n this.queryOtpModes(e),\n );\n this.selectOtpModeButton.addEventListener('click', (e) =>\n this.selectOtpMode(e),\n );\n this.submitOtpButton.addEventListener('click', (e) => this.submitOtp(e));\n this.switchContactMethodButton.addEventListener('click', (e) =>\n this.switchContactMethod(e),\n );\n this.contactMethodsOutdatedButton.addEventListener('click', (e) =>\n this.handleTotpConsentContactMethodsOutdated(e),\n );\n\n this.entryBackbutton.addEventListener('click', () => {\n this.handleBackClick();\n });\n\n this.backButton.addEventListener('click', () => {\n this.handleBackClick();\n });\n\n CloseIframeButtons.forEach((button) => {\n button.addEventListener(\n 'click',\n () => {\n this.closeWindow();\n },\n false,\n );\n });\n }\n\n closeWindow() {\n const referenceWindow = window.parent;\n [referenceWindow.parent, referenceWindow].forEach((win) => {\n win.postMessage('SmileIdentity::Close', '*');\n });\n }\n\n handleBackClick() {\n const page = this.pages.pop();\n if (page) {\n this.setActiveScreen(page);\n } else {\n this.dispatchEvent(\n new CustomEvent('end-user-consent.totp.cancelled', {}),\n );\n }\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 this.setUpEventListeners();\n }\n\n switchContactMethod() {\n this.queryOtpModes();\n }\n\n resetForm() {\n const invalidElements =\n this.activeScreen.querySelectorAll('[aria-invalid]');\n invalidElements.forEach((el) => el.removeAttribute('aria-invalid'));\n\n const validationMessages = this.activeScreen.querySelectorAll(\n '.validation-message',\n );\n validationMessages.forEach((el) => el.remove());\n }\n\n handleIdNumberValidationErrors(errors) {\n const fields = Object.keys(errors);\n\n fields.forEach((field) => {\n const input = this.activeScreen.querySelector(`#${field}`);\n input.setAttribute('aria-invalid', 'true');\n input.setAttribute('aria-describedby', `${field}-hint`);\n\n const errorDiv = document.createElement('div');\n errorDiv.setAttribute('id', `${field}-hint`);\n errorDiv.setAttribute('class', 'validation-message');\n // eslint-disable-next-line prefer-destructuring\n errorDiv.textContent = errors[field][0];\n\n input.insertAdjacentElement('afterend', errorDiv);\n });\n }\n\n handleActiveScreenErrors(error) {\n const submitButton = this.activeScreen.querySelector('[type=\"submit\"]');\n const errorDiv = document.createElement('div');\n errorDiv.setAttribute('class', 'validation-message');\n errorDiv.textContent = error;\n submitButton.insertAdjacentElement('beforebegin', errorDiv);\n }\n\n validateIdNumber(idNumber) {\n const validationConstraints = {\n id_number: {\n format: new RegExp(this.idRegex),\n presence: {\n allowEmpty: false,\n message: 'is required',\n },\n },\n };\n\n const errors = validate({ id_number: idNumber }, validationConstraints);\n\n if (errors) {\n this.handleIdNumberValidationErrors(errors);\n }\n\n return errors;\n }\n\n async queryOtpModes(event) {\n if (event) {\n // ACTION: disable another submission\n event.preventDefault();\n\n // ACTION: Reset any form validation errors'\n this.resetForm();\n }\n\n // ACTION: Validate idNumber\n const validationErrors = this.validateIdNumber(this.idNumberInput.value);\n\n // ACTION: Get and set idNumber\n localStorage.setItem('idNumber', this.idNumberInput.value || this.idNumber);\n\n if (!validationErrors) {\n const data = {\n country: this.country,\n id_number: this.idNumber,\n id_type: this.idType,\n partner_id: this.partnerId,\n token: this.token,\n };\n const url = `${this.baseUrl}/totp_consent`;\n\n try {\n this.toggleLoading();\n const response = await postData(url, data);\n const json = await response.json();\n this.toggleLoading();\n\n if (!response.ok) {\n this.handleActiveScreenErrors(json.error);\n } else {\n this.sessionId = json.session_id;\n this.modes = json.modes;\n this.setActiveScreen(this.selectModeScreen);\n this.setAttribute('modes', json.modes);\n }\n } catch (error) {\n this.toggleLoading();\n this.handleActiveScreenErrors(error.message);\n }\n }\n }\n\n async selectOtpMode(event) {\n // ACTION: disable another submission\n event.preventDefault();\n\n // ACTION: Reset any form validation errors'\n this.resetForm();\n\n // ACTION: Get mode\n this.mode = Array.prototype.find.call(\n this.modeInputs,\n (node) => node.checked,\n ).value;\n const data = {\n country: this.country,\n id_number: this.idNumber,\n id_type: this.idType,\n mode: this.mode,\n partner_id: this.partnerId,\n session_id: this.sessionId,\n token: this.token,\n };\n const url = `${this.baseUrl}/totp_consent/mode`;\n\n try {\n this.toggleLoading();\n const response = await postData(url, data);\n const json = await response.json();\n this.toggleLoading();\n\n if (!response.ok) {\n this.handleActiveScreenErrors(json.error);\n } else {\n this.selectedOtpDeliveryMode = this.modes.filter(\n (mode) => mode[this.mode],\n )[0][this.mode];\n this.setActiveScreen(this.otpVerificationScreen);\n this.setAttribute('otp-delivery-mode', this.selectedOtpDeliveryMode);\n }\n } catch (error) {\n this.toggleLoading();\n this.handleActiveScreenErrors(error.message);\n }\n }\n\n async submitOtp(event) {\n // ACTION: disable another submission\n event.preventDefault();\n\n // ACTION: Reset any form validation errors'\n this.resetForm();\n\n this.otp = this.otpInput.value;\n\n const data = {\n country: this.country,\n id_number: this.idNumber,\n id_type: this.idType,\n otp: this.otp,\n partner_id: this.partnerId,\n session_id: this.sessionId,\n token: this.token,\n };\n const url = `${this.baseUrl}/totp_consent/otp`;\n\n try {\n this.toggleLoading();\n const response = await postData(url, data);\n const json = await response.json();\n this.toggleLoading();\n\n if (!response.ok) {\n this.handleActiveScreenErrors(json.error);\n } else {\n this.handleTotpConsentGrant(event);\n }\n } catch (error) {\n this.toggleLoading();\n this.handleActiveScreenErrors(error.message);\n }\n }\n\n toggleLoading() {\n const button = this.activeScreen.querySelector('button[type=\"submit\"]');\n const text = button.querySelector('.text');\n const arrow = button.querySelector('svg');\n const spinner = button.querySelector('.spinner');\n\n button.toggleAttribute('disabled');\n text.toggleAttribute('hidden');\n arrow.toggleAttribute('hidden');\n spinner.toggleAttribute('hidden');\n }\n\n setActiveScreen(screen) {\n this.activeScreen.hidden = true;\n screen.hidden = false;\n this.activeScreen = screen;\n }\n\n get baseUrl() {\n return this.getAttribute('base-url');\n }\n\n get country() {\n return this.getAttribute('country');\n }\n\n get idHint() {\n return this.getAttribute('id-hint') || 'Your BVN should be 11 digits long';\n }\n\n get idNumber() {\n return localStorage.getItem('idNumber');\n }\n\n get idRegex() {\n return this.getAttribute('id-regex');\n }\n\n get idType() {\n return this.getAttribute('id-type');\n }\n\n get idTypeLabel() {\n return this.getAttribute('id-type-label');\n }\n\n get partnerId() {\n return this.getAttribute('partner-id');\n }\n\n get partnerName() {\n return this.getAttribute('partner-name');\n }\n\n get token() {\n return this.getAttribute('token');\n }\n\n get themeColor() {\n return this.getAttribute('theme-color') || '#001096';\n }\n\n get direction() {\n return this.getAttribute('dir') || getDirection() || 'ltr';\n }\n\n get hideBack() {\n return this.hasAttribute('hide-back');\n }\n\n get showNavigation() {\n return this.hasAttribute('show-navigation');\n }\n\n handleTotpConsentGrant() {\n const customEvent = new CustomEvent('end-user-consent.totp.granted', {\n detail: {\n consented: {\n contact_information: true,\n document_information: true,\n personal_details: true,\n },\n id_number: this.idNumber,\n session_id: this.sessionId,\n },\n });\n\n this.dispatchEvent(customEvent);\n }\n\n handleTotpConsentContactMethodsOutdated() {\n const tag = 'end-user-consent.totp.denied.contact-methods-outdated';\n const customEvent = new CustomEvent(tag, {\n detail: {\n data: {\n id_number: this.idNumber,\n session_id: this.sessionId,\n },\n message: tag,\n },\n });\n\n this.dispatchEvent(customEvent);\n }\n}\n\nif ('customElements' in window && !window.customElements.get('totp-consent')) {\n window.customElements.define('totp-consent', TotpConsent);\n}\n\nexport {\n // eslint-disable-next-line import/prefer-default-export\n TotpConsent,\n};\n"],"names":["postData","url","data","markup","mode","TotpConsent","name","updatedTemplate","updatedNode","CloseIframeButtons","button","referenceWindow","win","page","template","el","errors","field","input","errorDiv","error","submitButton","idNumber","validationConstraints","validate","event","validationErrors","response","json","node","text","arrow","spinner","screen","getDirection","customEvent","tag"],"mappings":"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"}
|
package/dist/esm/combobox.js
CHANGED
package/dist/esm/document.js
CHANGED
|
@@ -1117,7 +1117,7 @@ function fi() {
|
|
|
1117
1117
|
return kr = t, kr;
|
|
1118
1118
|
}
|
|
1119
1119
|
var pi = fi();
|
|
1120
|
-
const vi = /* @__PURE__ */ Zn(pi), hi = "rtl", mi = { back: "رجوع", close: "إغلاق", closeVerificationFrame: "إغلاق التحقق من الهوية (Smile ID)", allow: "اسمح", cancel: "إلغاء", continue: "استمر", or: "أو", toggle: "تبديل" }, gi = { noItems: "لا توجد عناصر" }, yi = { back: "رجوع", closeVerificationFrame: "إغلاق التحقق من الهوية (Smile ID)" }, bi = { permission: { description: "اسمح بالوصول إلى الكاميرا للتحقق من بياناتك", requestButton: "طلب الوصول إلى الكاميرا" }, error: { notAllowed: "لم يتم منح
|
|
1120
|
+
const vi = /* @__PURE__ */ Zn(pi), hi = "rtl", mi = { back: "رجوع", close: "إغلاق", closeVerificationFrame: "إغلاق التحقق من الهوية (Smile ID)", allow: "اسمح", cancel: "إلغاء", continue: "استمر", or: "أو", toggle: "تبديل" }, gi = { noItems: "لا توجد عناصر" }, yi = { back: "رجوع", closeVerificationFrame: "إغلاق التحقق من الهوية (Smile ID)" }, bi = { permission: { description: "اسمح بالوصول إلى الكاميرا للتحقق من بياناتك", requestButton: "طلب الوصول إلى الكاميرا" }, error: { notAllowed: "لم يتم منح إذن الكاميرا لهذه الخدمة. قم بتمكين الوصول إلى الكاميرا في جهازك أو متصفحك/إضافتك للمتابعة. قد تحتاج إلى إعادة تحميل الصفحة.", abort: "حدث خطأ ما، وفقدنا الوصول إلى كاميرتك. يرجى إعادة تحميل الصفحة.", notReadable: "يبدو أن هناك مشكلة في الكاميرا. قم بإصلاحها وحاول مرة أخرى، أو حاول استخدام الجهاز.", notFound: "لا نستطيع العثور على الكاميرا الخاصة بك. يرجى التحديث.", insecure: "يلزم اتصال آمن. الوصول إلى الكاميرا معطل على المواقع غير الآمنة. يرجى الانتقال إلى الصفحة الآمنة أو الاتصال بمالك التطبيق.", retry: "حاول مرة أخرى" } }, _i = { instructions: { title: "بعد ذلك، سنأخذ صورة سيلفي سريعة", allowButton: "اسمح", tips: { goodLight: { header: "إضاءة جيدة", body: "تأكد من أنك في بيئة جيدة الإضاءة." }, clearImage: { header: "صورة واضحة", body: "امسك هاتفك بثبات لتكون صورة السيلفي واضحة وحادة." }, removeObstructions: { header: "إزالة العوائق", body: "أزل أي شيء يغطي وجهك، مثل النظارات والأقنعة والقبعات." }, wideSmile: { header: "ابتسامة كبيرة", body: "عندما يُطلب منك الابتسام، ابتسم ابتسامة عريضة تظهر أسنانك." } } }, capture: { tip: { fitHead: "ضع رأسك داخل الإطار البيضاوي" }, cta: { smile: "ابتسم", widerSmile: "ابتسامة أوسع" }, button: { takeSelfie: "التقط سيلفي", startCapture: "بدء التسجيل" }, agentMode: { on: "وضع الوكيل قيد التشغيل", off: "وضع الوكيل معطل" }, error: { minFrames: "كاميرا ويب الذكية: الحد الأدنى المطلوب لعدد الإطارات هو {{count}}", webcamCapture: "تعذر التقاط صور كاميرا الويب - يرجى تجربة جهاز آخر" }, loading: { progress: "جارٍ التحميل... {{progress}}%", slowConnection: "الإنترنت بطيء جدًا، انتظر قليلاً...", connectionError: "خطأ في الاتصال بالإنترنت، تحقق من اتصالك وأعد المحاولة" } }, smart: { alert: { noFace: "ضع وجهك في الشكل البيضاوي", outOfBounds: "ضع وجهك في الشكل البيضاوي", tooClose: "ابتعد أكثر", tooFar: "اقترب", neutralExpression: "تعبير محايد", smileRequired: "يبتسم!", openMouthSmile: "ابتسامة أوسع - أسنان ظاهرة", initializing: "جارٍ التهيئة..." }, status: { capturing: "جارٍ التقاط...", keepSmiling: "حافظ على ابتسامتك!", readyToCapture: "جاهز للتصوير" } }, review: { title: "مراجعة صورة سيلفي", question: "هل وجهك كله صافي؟", acceptButton: "نعم، استخدم هذا", retakeButton: "لا، أعد التقاط صورة السيلفي" } }, qi = { name: { default: "وثيقة" }, title: { front: "تقديم صورة أمامية لبطاقة الهوية", back: "تقديم ظهر الهوية" }, capture: { checkingPermissions: "جارٍ التحقق من الأذونات...", instructionText: "تأكد من أن جميع الزوايا مرئية ولا يوجد وهج.", captureButton: "التقاط وثيقة" }, instructions: { captureTitlePrefix: "استعد لالتقاط", captureGuidelines: "إرشادات الالتقاط", description: "سنستخدمه للتحقق من هويتك.", followInstructions: "يرجى اتباع التعليمات أدناه.", guidelines: { good: "جيد", notCropped: "غير مقصوص", notBlurry: "غير ضبابي", notReflective: "بدون انعكاس" }, goodLight: { header: "إضاءة جيدة", body: "تأكد من التقاط الصورة في بيئة مضاءة جيداً حيث يسهل قراءة وثيقة الهوية." }, clearImage: { header: "صورة واضحة", body: "اجعل الكاميرا ثابتة حتى لا تكون الكلمات الموجودة على الهوية ضبابية." }, startCapture: "بدء الالتقاط", takePhotoButton: "التقط صورة", uploadPhotoButton: "تحميل صورة" }, review: { question: "هل الوثيقة واضحة ومقروءة؟", description: "تأكد من أن جميع زوايا المستند مرئية ولا يوجد توهج", acceptButton: "نعم، بطاقة هويتي واضحة و مقروءة", retakeButton: "لا، أعد التقاط الصورة" } }, Ci = { error: { readingFile: "حدث خطأ أثناء قراءة الملف. يرجى التحقق من الملف والمحاولة مرة أخرى.", multipleFiles: "يُسمح بتحميل ملف واحد فقط في كل مرة", unsupportedFormat: "تنسيق ملف غير مدعوم. يرجى التأكد من توفير صورة بتنسيق JPG أو PNG", fileTooLarge: "{{filename}} كبير جدًا. يُرجى التأكد من أن الملف أقل من {{size}}." } }, Si = { demoTip: "شاشة الموافقة هذه لأغراض توضيحية فقط. لا يقوم التطبيق التجريبي بجمع بيانات الهوية السيلفي.", accessRequest: "{{partnerName}} يرغب في الوصول إلى معلوماتك {{idTypeLabel}}", allowPartner: "هذا سيسمح لـ {{partnerName}} بـ:", processing: { personalDetails: { title: "معالجة بياناتك السيلفي", description: "بإمكان الشريك معالجة اسمك وتاريخ ميلادك وجنسك" }, contactInfo: { title: "معالجة معلومات الاتصال الخاصة بك", description: "يمكن للشريك معالجة أرقام هواتفك وعنوانك" }, documentInfo: { title: "معالجة معلومات مستندك", description: "يمكن للشريك معالجة صورتك وتاريخ انتهاء صلاحية هويتك وبلد الإصدار ورقم الوثيقة" } }, privacyPolicy: "يمكنك الاطلاع على سياسة الخصوصية الخاصة بـ {{partnerName}}", privacyPolicyLink: "هنا.", grantConsent: 'باختيارك "السماح"، فإنك تمنح {{partnerName}} الموافقة على معالجة بياناتك السيلفي لتقديم هذه الخدمة لك.', denied: { title: "تم رفض الموافقة", message: "لا يمكننا التحقق من هويتك بدون موافقتك", prompt: "هل ترغب في تصحيح ذلك؟", goBack: "عُد", confirmCancel: "لا، إلغاء التحقق" } }, Ii = { loading: { title: "إنشاء", subtitle: "بضع ثوانٍ أخرى فقط", description: "نحن نجهز عملية التحقق الخاصة بك" }, idSelection: { title: "حدد نوع المستند", selectCountry: "اختر البلد", selectIdType: "حدد نوع المستند", selectDocument: "حدد المستند", searchCountry: "البحث عن بلد", placeholder: "الرجاء الاختيار", selectCountryFirst: "--اختر البلد أولاً--", noCountryFound: "لا يوجد بلد", noIdTypeFound: "لم يتم العثور على نوع هوية" }, upload: { title: "جاري تحميل", subtitle: "بضع ثوانٍ أخرى فقط", description: "نحن بصدد معالجة طلبك" }, complete: { title: "تم الإرسال بنجاح", subtitle: "هذا كل ما تحتاجه للتحقق من هويتك", processingInfo: "سنقوم بمعالجة معلوماتك {{country}} - {{idType}} للتحقق من هويتك" }, smartSelfie: { authentication: { title: "مصادقة SmartSelfie™", upload: "مصادقة المستخدم" }, registration: { title: "تسجيل SmartSelfie™", upload: "تسجيل المستخدم" } }, eSignature: { fullName: "الاسم الكامل", loading: { description: "نحن بصدد التأسيس" }, upload: { description: "نحن بصدد معالجة طلبك" }, entry: { title: "تقديم التوقيع", subtitle: "اقرأ واقبل الاتفاقيات التي ستراها في الصفحة التالية" }, tips: { read: { title: "اقرأ المستند", description: "اقرأ المستند (المستندات) المقدمة بعناية" }, name: { title: "أضف اسمك الكامل", description: "اكتب اسمك الكامل بعد موافقتك على المستند (المستندات) التي تمت مشاركتها معك." }, signature: { title: "أضف توقيعك", description: "وقّع أو حمّل توقيعك لتوثيق المستندات" } }, getStarted: "ابدأ الآن", review: { title: "مراجعة الوثائق", subtitle: "قبل القبول، يُرجى قراءة المستند(ات) بعناية", consent: "بتحديد هذا المربع، فإنك توافق على الشروط الواردة في المستند (المستندات)." }, personalInfo: { title: "أضف اسمك الكامل", subtitle: "يرجى إضافة اسمك بالكامل للتحقق من قراءتك للوثيقة (الوثائق) المقدمة مسبقاً.", placeholder: "جيمس دو" }, signature: { title: "أضف توقيعك", subtitle: "وقّع أو حمّل توقيعك أدناه" }, confirmDetails: { title: "تأكيد التفاصيل", subtitle: "تأكد من أن اسمك مكتوب بشكل صحيح، وأن التوقيع يشبه التوقيع الموجود في هويتك", yes: "نعم، هذا صحيح", no: "لا، غيّرهم" }, error: { uploadFailed: "لم نتمكن من تحميل توقيعك" } }, idInfo: { title: "أدخل معلومات الهوية", idNumber: "رقم الهوية", firstName: "الاسم الأول", lastName: "اسم العائلة", dateOfBirth: "تاريخ الميلاد", day: "يوم", month: "شهر", year: "سنة", bank: "بنك", selectBank: "--حدد البنك--", searchBank: "البحث عن بنك", noBankFound: "لم يتم العثور على بنك", citizenship: "الجنسية", selectCitizenship: "اختر نوع الجنسية", dob: "تاريخ الميلاد" }, error: { title: "حدث خطأ", generic: "حدث خطأ ما", uploadFailed: "لم نتمكن من تحميل معلوماتك", checkInternet: "يرجى التأكد من وجود اتصال إنترنت مستقر. ثم حاول مرة أخرى!", tryAgain: "أعد المحاولة", countryNotSupported: "{{country}} غير مدعوم" }, validation: { isRequired: "{{field}} مطلوب", invalidFormat: "{{field}} غير صالح" } }, Ti = {
|
|
1121
1121
|
direction: hi,
|
|
1122
1122
|
common: mi,
|
|
1123
1123
|
combobox: gi,
|
|
@@ -1128,7 +1128,7 @@ const vi = /* @__PURE__ */ Zn(pi), hi = "rtl", mi = { back: "رجوع", close: "
|
|
|
1128
1128
|
fileUpload: Ci,
|
|
1129
1129
|
consent: Si,
|
|
1130
1130
|
pages: Ii
|
|
1131
|
-
}, Ri = "ltr", Ai = { back: "Back", close: "Close", closeVerificationFrame: "Close Smile ID Verification", allow: "Allow", cancel: "Cancel", continue: "Continue", or: "or", toggle: "Toggle" }, wi = { noItems: "No items" }, Oi = { back: "Back", closeVerificationFrame: "Close Smile ID Verification" }, Pi = { permission: { description: "Allow camera access to verify your details", requestButton: "Request Camera Access" }, error: { notAllowed: "Camera
|
|
1131
|
+
}, Ri = "ltr", Ai = { back: "Back", close: "Close", closeVerificationFrame: "Close Smile ID Verification", allow: "Allow", cancel: "Cancel", continue: "Continue", or: "or", toggle: "Toggle" }, wi = { noItems: "No items" }, Oi = { back: "Back", closeVerificationFrame: "Close Smile ID Verification" }, Pi = { permission: { description: "Allow camera access to verify your details", requestButton: "Request Camera Access" }, error: { notAllowed: "Camera permission not granted for this service. Enable access to your camera in your device settings or browser/extension to continue. You may need to refresh.", abort: "Something happened, and we lost access to your camera. Please refresh.", notReadable: "There seems to be a problem with your camera connection. Please check and try again or try using device.", notFound: "We are unable to find your camera. Please refresh.", insecure: "Secure connection required. Camera access is disabled on insecure sites. Please switch to the secure page or contact the app owner.", retry: "Try again" } }, ji = { instructions: { title: "Next, we'll take a quick selfie", allowButton: "Allow", tips: { goodLight: { header: "Good Light", body: "Make sure you are in a well-lit environment." }, clearImage: { header: "Clear Image", body: "Hold your device steady so the selfie is clear and sharp." }, removeObstructions: { header: "Remove Obstructions", body: "Remove anything that covers your face, such as glasses, masks, and hats." }, wideSmile: { header: "Wide Smile", body: "When asked to smile, give a wide smile, showing your teeth." } } }, capture: { tip: { fitHead: "Fit your head inside the oval frame" }, cta: { smile: "SMILE", widerSmile: "WIDER SMILE" }, button: { takeSelfie: "Capture Selfie", startCapture: "Start Capture" }, agentMode: { on: "Agent Mode On", off: "Agent Mode Off" }, error: { minFrames: "SmartCameraWeb: The minimum no of frames required is {{count}}", webcamCapture: "Unable to capture webcam images - Please try another device" }, loading: { progress: "Loading... {{progress}}%", slowConnection: "Internet is too slow, wait a little more...", connectionError: "Internet connection error, check your connection and retry" } }, smart: { alert: { noFace: "Position your face in the oval", outOfBounds: "Position your face in the oval", tooClose: "Move farther away", tooFar: "Move closer", neutralExpression: "Neutral expression", smileRequired: "Smile!", openMouthSmile: "Wider smile - teeth visible", initializing: "Initialising..." }, status: { capturing: "Capturing...", keepSmiling: "Keep smiling!", readyToCapture: "Ready to capture" } }, review: { title: "Review Selfie", question: "Is your whole face clear?", acceptButton: "Yes, use this", retakeButton: "No, Retake Selfie" } }, Li = { name: { default: "Document" }, title: { front: "Submit Front of ID", back: "Submit Back of ID" }, capture: { checkingPermissions: "Checking permissions...", instructionText: "Make sure all corners are visible and there is no glare.", captureButton: "Capture Document" }, instructions: { captureTitlePrefix: "Get ready to capture your", captureGuidelines: "Capture Guidelines", description: "We'll use it to verify your identity.", followInstructions: "Please follow the instructions below.", guidelines: { good: "Good", notCropped: "Not cropped", notBlurry: "Not blurry", notReflective: "Not reflective" }, goodLight: { header: "Good Light", body: "Make sure the image is taken in a well-lit environment where the ID document is easy to read." }, clearImage: { header: "Clear Image", body: "Hold your device steady so the information on the ID are not blurry." }, startCapture: "Start Capture", takePhotoButton: "Take Photo", uploadPhotoButton: "Upload Photo" }, review: { question: "Is the document clear and readable?", description: "Make sure all corners of the document are visible and there is no glare", acceptButton: "Yes, my ID is readable", retakeButton: "No, retake photo" } }, ki = { error: { readingFile: "An error occurred reading the file. Please check the file, and try again", multipleFiles: "Only one file upload is permitted at a time", unsupportedFormat: "Unsupported file format. Please ensure that you are providing a JPG or PNG image", fileTooLarge: "{{filename}} is too large. Please ensure that the file is less than {{size}}." } }, Fi = { demoTip: "This consent screen is for illustrative purposes only. Demo App does not collect personal ID data.", accessRequest: "{{partnerName}} wants to access your {{idTypeLabel}} information", allowPartner: "This will allow {{partnerName}} to:", processing: { personalDetails: { title: "Process your personal information", description: "Partner can process your names, DoB and gender" }, contactInfo: { title: "Process your contact information", description: "Partner can process your phone numbers and address" }, documentInfo: { title: "Process your document information", description: "Partner can process your photo, ID expiration date, country of issuance and document number" } }, privacyPolicy: "You can view {{partnerName}}'s privacy policy", privacyPolicyLink: "here.", grantConsent: 'By choosing "Allow", you grant {{partnerName}} consent to process your personal data to offer you this service', denied: { title: "Consent Denied", message: "We cannot verify you without your consent", prompt: "Wish to correct that?", goBack: "Go Back", confirmCancel: "No, Cancel Verification" } }, Bi = { loading: { title: "Setting up", subtitle: "Just a few more seconds", description: "We are setting up your verification flow" }, idSelection: { title: "Select ID Type", selectCountry: "Select Country", selectIdType: "Select ID Type", selectDocument: "Select Document", searchCountry: "Search Country", placeholder: "--Please Select--", selectCountryFirst: "--Select Country First--", noCountryFound: "No country found", noIdTypeFound: "No ID type found" }, upload: { title: "Uploading", subtitle: "Just a few more seconds", description: "We are processing your request" }, complete: { title: "Submission Complete", subtitle: "That's all you need to verify your identity", processingInfo: "We will process your {{country}} - {{idType}} information to verify your identity" }, smartSelfie: { authentication: { title: "SmartSelfie™ Authentication", upload: "Authenticating User" }, registration: { title: "SmartSelfie™ Registration", upload: "Registering User" } }, eSignature: { fullName: "Full Name", loading: { description: "We are setting up" }, upload: { description: "We are processing your request" }, entry: { title: "Provide Signature", subtitle: "Read and accept the agreements you would see in the next page" }, tips: { read: { title: "Read document", description: "Read the document(s) provided carefully" }, name: { title: "Add your full names", description: "Type your full names once you agree with the document(s) shared with you" }, signature: { title: "Append your signature", description: "Sign or upload your signature to certify the documents" } }, getStarted: "Get started", review: { title: "Review documents", subtitle: "Before accepting, carefully read through the document(s)", consent: "By ticking this checkbox, you agree to the conditions in the document(s)" }, personalInfo: { title: "Add your full names", subtitle: "Kindly add your full names to verify that you read the document(s) provided earlier.", placeholder: "James Doe" }, signature: { title: "Add your signature", subtitle: "Sign or upload your signature below" }, confirmDetails: { title: "Confirm details", subtitle: "Make sure your name is correctly spelled, and the signature matches the one on your ID", yes: "Yes, it's correct", no: "No, change them" }, error: { uploadFailed: "We could not upload your signature" } }, idInfo: { title: "Enter ID Information", idNumber: "ID Number", firstName: "First Name", lastName: "Last Name", dateOfBirth: "Date of Birth", day: "Day", month: "Month", year: "Year", bank: "Bank", selectBank: "--Select Bank--", searchBank: "Search Bank", noBankFound: "No bank found", citizenship: "Citizenship", selectCitizenship: "Select Citizenship Type", dob: "Date of Birth" }, error: { title: "An error occurred", generic: "Something went wrong", uploadFailed: "We could not upload your information", checkInternet: "Please check that you have a stable internet connection. Then try again!", tryAgain: "Try again", countryNotSupported: "{{country}} is not supported" }, validation: { isRequired: "{{field}} is required", invalidFormat: "{{field}} is invalid" } }, Di = {
|
|
1132
1132
|
direction: Ri,
|
|
1133
1133
|
common: Ai,
|
|
1134
1134
|
combobox: wi,
|
|
@@ -1139,7 +1139,7 @@ const vi = /* @__PURE__ */ Zn(pi), hi = "rtl", mi = { back: "رجوع", close: "
|
|
|
1139
1139
|
fileUpload: ki,
|
|
1140
1140
|
consent: Fi,
|
|
1141
1141
|
pages: Bi
|
|
1142
|
-
}, Ni = "ltr", zi = { back: "Retour", close: "Fermer", closeVerificationFrame: "Fermer la vérification Smile ID", allow: "Autoriser", cancel: "Annuler", continue: "Continuer", or: "ou", toggle: "Basculer" }, xi = { noItems: "Aucun article" }, Mi = { back: "Retour", closeVerificationFrame: "Fermer la vérification d'identité Smile ID" }, Ei = { permission: { description: "Autorisez l'accès à la caméra pour vérifier vos informations.", requestButton: "Demander l'accès à la caméra" }, error: { notAllowed: "L'accès à la caméra est refusé ou bloqué par votre navigateur/vos extensions. Pour continuer, autorisez l'accès dans votre navigateur/vos extensions. Il se peut que vous deviez actualiser la page.", abort: "Un problème est survenu et nous avons perdu l'accès à votre caméra. Veuillez actualiser.", notReadable: "Il semble y avoir un problème avec la connexion de votre caméra. Veuillez vérifier et réessayer, ou essayez d'utiliser un autre appareil.", notFound: "Nous ne parvenons pas à trouver votre caméra. Veuillez actualiser.", insecure: "Connexion sécurisée requise. L'accès à la caméra est désactivé sur les sites non sécurisés. Veuillez vous rendre sur la page sécurisée ou contacter le propriétaire de l'application." } }, Gi = { instructions: { title: "Ensuite, nous allons prendre un selfie rapide", allowButton: "Autoriser", tips: { goodLight: { header: "Bonne lumière", body: "Assurez-vous d'être dans un environnement bien éclairé." }, clearImage: { header: "Image Claire", body: "Tenez votre téléphone stable pour que le selfie soit net et clair." }, removeObstructions: { header: "Retirer les Obstructions", body: "Retirez tout ce qui vous couvre le visage, comme les lunettes, masques et chapeaux." }, wideSmile: { header: "large sourire", body: "Lorsque l'on vous demande de sourire, faites un large sourire, en montrant vos dents." } } }, capture: { tip: { fitHead: "Placez votre visage dans le cadre ovale" }, cta: { smile: "SOURIRE", widerSmile: "UN SOURIRE PLUS LARGE" }, button: { takeSelfie: "Prendre un selfie", startCapture: "Démarrer la capture" }, agentMode: { on: "Mode Agent Activé", off: "Mode Agent Désactivé" }, error: { minFrames: "SmartCameraWeb : Le nombre minimum d'images requis est de {{count}}", webcamCapture: "Impossible de capturer les images de la webcam - Veuillez essayer un autre appareil" }, loading: { progress: "Chargement... {{progress}}%", slowConnection: "La connexion Internet est trop lente, veuillez patienter...", connectionError: "Erreur de connexion Internet, vérifiez votre connexion et réessayez" } }, smart: { alert: { noFace: "Positionnez votre visage dans l'ovale", outOfBounds: "Positionnez votre visage dans l'ovale", tooClose: "Éloignez-vous", tooFar: "Rapprochez-vous", neutralExpression: "Expression neutre", smileRequired: "Souriez !", openMouthSmile: "Sourire plus large - dents visibles", initializing: "Initialisation en cours..." }, status: { capturing: "Capture en cours...", keepSmiling: "Continuez de sourire!", readyToCapture: "Prêt à enregistrer" } }, review: { title: "Vérification du selfie", question: "Votre visage est-il entièrement net ?", acceptButton: "Oui, utiliser ceci", retakeButton: "Non, refaire le selfie" } }, Vi = { name: { default: "Document" }, title: { front: "Soumettre le recto de la pièce d'identité", back: "Soumettre le verso de la pièce d'identité" }, capture: { checkingPermissions: "Vérification des autorisations...", instructionText: "Assurez-vous que tous les coins sont visibles et qu'il n'y a pas de reflet.", captureButton: "Capturez le document" }, instructions: { captureTitlePrefix: "Préparez-vous à capturer votre", captureGuidelines: "Consignes de capture", description: "Nous l'utiliserons pour vérifier votre identité.", followInstructions: "Veuillez suivre les instructions ci-dessous.", guidelines: { good: "Correct", notCropped: "Non recadré", notBlurry: "Non flou", notReflective: "Sans reflets" }, goodLight: { header: "Bonne lumière", body: "Assurez-vous que l'image est prise dans un environnement bien éclairé où le document d'identité est facile à lire." }, clearImage: { header: "Image Claire", body: "Tenez votre appareil photo fermement pour que les mots sur la pièce d'identité ne soient pas flous." }, startCapture: "Démarrer la capture", takePhotoButton: "Prendre une photo", uploadPhotoButton: "Télécharger une photo" }, review: { question: "Le document est-il clair et lisible ?", description: "Assurez-vous que tous les coins du document sont visibles et qu'il n'y a pas de reflet.", acceptButton: "Oui, ma pièce d'identité est lisible", retakeButton: "Non, reprendre la photo" } }, Ui = { error: { readingFile: "Une erreur s'est produite lors de la lecture du fichier. Veuillez vérifier le fichier et réessayer.", multipleFiles: "Seulement un téléchargement de fichier est autorisé à la fois", unsupportedFormat: "Format de fichier non pris en charge. Veuillez vous assurer que vous fournissez une image JPG ou PNG", fileTooLarge: "{{filename}} est trop volumineux. Veuillez vous assurer que la taille du fichier est inférieure à {{size}}." } }, Hi = { demoTip: "Cet écran de consentement est présenté à titre indicatif uniquement. L'application de démonstration ne collecte pas de données d'identification personnelle.", accessRequest: "{{partnerName}} veut accéder à vos informations {{idTypeLabel}}", allowPartner: "Ceci permettra à {{partnerName}} de :", processing: { personalDetails: { title: "Traiter vos informations personnelles", description: "Le partenaire peut traiter votre nom, date de naissance et sexe" }, contactInfo: { title: "Traiter vos coordonnées", description: "Le partenaire peut traiter vos numéros de téléphone et votre adresse" }, documentInfo: { title: "Traitez les informations de votre document", description: "Le partenaire peut traiter votre photo, la date d'expiration de votre pièce d'identité, le pays d'émission et le numéro de document" } }, privacyPolicy: "Vous pouvez consulter la politique de confidentialité de {{partnerName}}", privacyPolicyLink: "ici.", grantConsent: 'En choisissant "Autoriser", vous accordez à {{partnerName}} le consentement de traiter vos données personnelles pour permettre ce service', denied: { title: "Consentement refusé", message: "Nous ne pouvons pas vous vérifier sans votre consentement", prompt: "Souhaitez-vous corriger cela?", goBack: "Retour", confirmCancel: "Non, Annuler la vérification" } }, $i = { loading: { title: "Configuration", subtitle: "Juste quelques secondes de plus", description: "Nous mettons en place votre processus de vérification" }, idSelection: { title: "Sélectionner le type de pièce d'identité", selectCountry: "Sélectionnez le pays", selectIdType: "Sélectionnez le type de pièce d'identité", selectDocument: "Sélectionner le document", searchCountry: "Rechercher un pays", placeholder: "--Veuillez sélectionner--", selectCountryFirst: "--Sélectionnez le pays d'abord--", noCountryFound: "Aucun pays trouvé", noIdTypeFound: "Aucun type de pièce d'identité trouvé" }, upload: { title: "Téléchargement en cours", subtitle: "Plus que quelques secondes", description: "Nous traitons votre demande" }, complete: { title: "Envoie terminée", subtitle: "C'est tout ce dont vous avez besoin pour vérifier votre identité.", processingInfo: "Nous traiterons vos informations {{country}} - {{idType}} pour vérifier votre identité" }, smartSelfie: { authentication: { title: "Authentification SmartSelfie™", upload: "Authentification de l'utilisateur" }, registration: { title: "Inscription SmartSelfie™", upload: "Inscription de l'utilisateur" } }, eSignature: { fullName: "Nom complet", loading: { description: "Nous mettons en place" }, upload: { description: "Nous traitons votre demande" }, entry: { title: "Fournir une signature", subtitle: "Lisez et acceptez les accords que vous verrez à la page suivante" }, tips: { read: { title: "Lire le document", description: "Lisez attentivement le(s) document(s) fourni(s)" }, name: { title: "Ajouter votre nom complet", description: "Tapez votre nom complet une fois que vous êtes d'accord avec le(s) document(s) partagé(s) avec vous" }, signature: { title: "Ajouter votre signature", description: "Signez ou téléchargez votre signature pour certifier les documents" } }, getStarted: "Commencer", review: { title: "Examiner les documents", subtitle: "Veuillez lire attentivement le(s) document(s) avant d'accepter.", consent: "En cochant cette case, vous acceptez les conditions contenues dans le(s) document(s)" }, personalInfo: { title: "Ajoutez votre nom complet", subtitle: "Veuillez ajouter votre nom complet pour confirmer que vous avez lu le(s) document(s) fourni(s) précédemment.", placeholder: "James Doe" }, signature: { title: "Ajoutez votre signature", subtitle: "Signez ou téléchargez votre signature ci-dessous" }, confirmDetails: { title: "Confirmer les détails", subtitle: "Assurez-vous que votre nom est correctement orthographié et que la signature ressemble à celle de votre pièce d'identité", yes: "Oui, c'est exact", no: "Non, les changer" }, error: { uploadFailed: "Nous n'avons pas pu télécharger votre signature" } }, idInfo: { title: "Saisir les informations d'identité", idNumber: "Numéro d'identification", firstName: "Prénom", lastName: "Nom de famille", dateOfBirth: "Date de Naissance", day: "Jour", month: "Mois", year: "Année", bank: "Banque", selectBank: "--Sélectionner la banque--", searchBank: "Rechercher une banque", noBankFound: "Aucune banque trouvée", citizenship: "Citoyenneté", selectCitizenship: "Sélectionner le type de citoyenneté", dob: "Date de naissance" }, error: { title: "Une erreur est survenue", generic: "Quelque chose s'est mal passé", uploadFailed: "Nous n'avons pas pu télécharger vos informations", checkInternet: "Veuillez vérifier que vous disposez d'une connexion Internet stable. Ensuite, veuillez réessayer !", tryAgain: "Essayez à nouveau", countryNotSupported: "{{country}} n'est pas pris en charge" }, validation: { isRequired: "{{field}} est obligatoire", invalidFormat: "{{field}} n'est pas valide" } }, Ki = {
|
|
1142
|
+
}, Ni = "ltr", zi = { back: "Retour", close: "Fermer", closeVerificationFrame: "Fermer la vérification Smile ID", allow: "Autoriser", cancel: "Annuler", continue: "Continuer", or: "ou", toggle: "Basculer" }, xi = { noItems: "Aucun article" }, Mi = { back: "Retour", closeVerificationFrame: "Fermer la vérification d'identité Smile ID" }, Ei = { permission: { description: "Autorisez l'accès à la caméra pour vérifier vos informations.", requestButton: "Demander l'accès à la caméra" }, error: { notAllowed: "L'autorisation d'accès à la caméra n'a pas été accordée pour ce service. Activez l'accès à votre caméra dans votre appareil ou navigateur/extension pour continuer. Il se peut que vous deviez actualiser la page.", abort: "Un problème est survenu et nous avons perdu l'accès à votre caméra. Veuillez actualiser.", notReadable: "Il semble y avoir un problème avec la connexion de votre caméra. Veuillez vérifier et réessayer, ou essayez d'utiliser un autre appareil.", notFound: "Nous ne parvenons pas à trouver votre caméra. Veuillez actualiser.", insecure: "Connexion sécurisée requise. L'accès à la caméra est désactivé sur les sites non sécurisés. Veuillez vous rendre sur la page sécurisée ou contacter le propriétaire de l'application.", retry: "Réessayer" } }, Gi = { instructions: { title: "Ensuite, nous allons prendre un selfie rapide", allowButton: "Autoriser", tips: { goodLight: { header: "Bonne lumière", body: "Assurez-vous d'être dans un environnement bien éclairé." }, clearImage: { header: "Image Claire", body: "Tenez votre téléphone stable pour que le selfie soit net et clair." }, removeObstructions: { header: "Retirer les Obstructions", body: "Retirez tout ce qui vous couvre le visage, comme les lunettes, masques et chapeaux." }, wideSmile: { header: "large sourire", body: "Lorsque l'on vous demande de sourire, faites un large sourire, en montrant vos dents." } } }, capture: { tip: { fitHead: "Placez votre visage dans le cadre ovale" }, cta: { smile: "SOURIRE", widerSmile: "UN SOURIRE PLUS LARGE" }, button: { takeSelfie: "Prendre un selfie", startCapture: "Démarrer la capture" }, agentMode: { on: "Mode Agent Activé", off: "Mode Agent Désactivé" }, error: { minFrames: "SmartCameraWeb : Le nombre minimum d'images requis est de {{count}}", webcamCapture: "Impossible de capturer les images de la webcam - Veuillez essayer un autre appareil" }, loading: { progress: "Chargement... {{progress}}%", slowConnection: "La connexion Internet est trop lente, veuillez patienter...", connectionError: "Erreur de connexion Internet, vérifiez votre connexion et réessayez" } }, smart: { alert: { noFace: "Positionnez votre visage dans l'ovale", outOfBounds: "Positionnez votre visage dans l'ovale", tooClose: "Éloignez-vous", tooFar: "Rapprochez-vous", neutralExpression: "Expression neutre", smileRequired: "Souriez !", openMouthSmile: "Sourire plus large - dents visibles", initializing: "Initialisation en cours..." }, status: { capturing: "Capture en cours...", keepSmiling: "Continuez de sourire!", readyToCapture: "Prêt à enregistrer" } }, review: { title: "Vérification du selfie", question: "Votre visage est-il entièrement net ?", acceptButton: "Oui, utiliser ceci", retakeButton: "Non, refaire le selfie" } }, Vi = { name: { default: "Document" }, title: { front: "Soumettre le recto de la pièce d'identité", back: "Soumettre le verso de la pièce d'identité" }, capture: { checkingPermissions: "Vérification des autorisations...", instructionText: "Assurez-vous que tous les coins sont visibles et qu'il n'y a pas de reflet.", captureButton: "Capturez le document" }, instructions: { captureTitlePrefix: "Préparez-vous à capturer votre", captureGuidelines: "Consignes de capture", description: "Nous l'utiliserons pour vérifier votre identité.", followInstructions: "Veuillez suivre les instructions ci-dessous.", guidelines: { good: "Correct", notCropped: "Non recadré", notBlurry: "Non flou", notReflective: "Sans reflets" }, goodLight: { header: "Bonne lumière", body: "Assurez-vous que l'image est prise dans un environnement bien éclairé où le document d'identité est facile à lire." }, clearImage: { header: "Image Claire", body: "Tenez votre appareil photo fermement pour que les mots sur la pièce d'identité ne soient pas flous." }, startCapture: "Démarrer la capture", takePhotoButton: "Prendre une photo", uploadPhotoButton: "Télécharger une photo" }, review: { question: "Le document est-il clair et lisible ?", description: "Assurez-vous que tous les coins du document sont visibles et qu'il n'y a pas de reflet.", acceptButton: "Oui, ma pièce d'identité est lisible", retakeButton: "Non, reprendre la photo" } }, Ui = { error: { readingFile: "Une erreur s'est produite lors de la lecture du fichier. Veuillez vérifier le fichier et réessayer.", multipleFiles: "Seulement un téléchargement de fichier est autorisé à la fois", unsupportedFormat: "Format de fichier non pris en charge. Veuillez vous assurer que vous fournissez une image JPG ou PNG", fileTooLarge: "{{filename}} est trop volumineux. Veuillez vous assurer que la taille du fichier est inférieure à {{size}}." } }, Hi = { demoTip: "Cet écran de consentement est présenté à titre indicatif uniquement. L'application de démonstration ne collecte pas de données d'identification personnelle.", accessRequest: "{{partnerName}} veut accéder à vos informations {{idTypeLabel}}", allowPartner: "Ceci permettra à {{partnerName}} de :", processing: { personalDetails: { title: "Traiter vos informations personnelles", description: "Le partenaire peut traiter votre nom, date de naissance et sexe" }, contactInfo: { title: "Traiter vos coordonnées", description: "Le partenaire peut traiter vos numéros de téléphone et votre adresse" }, documentInfo: { title: "Traitez les informations de votre document", description: "Le partenaire peut traiter votre photo, la date d'expiration de votre pièce d'identité, le pays d'émission et le numéro de document" } }, privacyPolicy: "Vous pouvez consulter la politique de confidentialité de {{partnerName}}", privacyPolicyLink: "ici.", grantConsent: 'En choisissant "Autoriser", vous accordez à {{partnerName}} le consentement de traiter vos données personnelles pour permettre ce service', denied: { title: "Consentement refusé", message: "Nous ne pouvons pas vous vérifier sans votre consentement", prompt: "Souhaitez-vous corriger cela?", goBack: "Retour", confirmCancel: "Non, Annuler la vérification" } }, $i = { loading: { title: "Configuration", subtitle: "Juste quelques secondes de plus", description: "Nous mettons en place votre processus de vérification" }, idSelection: { title: "Sélectionner le type de pièce d'identité", selectCountry: "Sélectionnez le pays", selectIdType: "Sélectionnez le type de pièce d'identité", selectDocument: "Sélectionner le document", searchCountry: "Rechercher un pays", placeholder: "--Veuillez sélectionner--", selectCountryFirst: "--Sélectionnez le pays d'abord--", noCountryFound: "Aucun pays trouvé", noIdTypeFound: "Aucun type de pièce d'identité trouvé" }, upload: { title: "Téléchargement en cours", subtitle: "Plus que quelques secondes", description: "Nous traitons votre demande" }, complete: { title: "Envoie terminée", subtitle: "C'est tout ce dont vous avez besoin pour vérifier votre identité.", processingInfo: "Nous traiterons vos informations {{country}} - {{idType}} pour vérifier votre identité" }, smartSelfie: { authentication: { title: "Authentification SmartSelfie™", upload: "Authentification de l'utilisateur" }, registration: { title: "Inscription SmartSelfie™", upload: "Inscription de l'utilisateur" } }, eSignature: { fullName: "Nom complet", loading: { description: "Nous mettons en place" }, upload: { description: "Nous traitons votre demande" }, entry: { title: "Fournir une signature", subtitle: "Lisez et acceptez les accords que vous verrez à la page suivante" }, tips: { read: { title: "Lire le document", description: "Lisez attentivement le(s) document(s) fourni(s)" }, name: { title: "Ajouter votre nom complet", description: "Tapez votre nom complet une fois que vous êtes d'accord avec le(s) document(s) partagé(s) avec vous" }, signature: { title: "Ajouter votre signature", description: "Signez ou téléchargez votre signature pour certifier les documents" } }, getStarted: "Commencer", review: { title: "Examiner les documents", subtitle: "Veuillez lire attentivement le(s) document(s) avant d'accepter.", consent: "En cochant cette case, vous acceptez les conditions contenues dans le(s) document(s)" }, personalInfo: { title: "Ajoutez votre nom complet", subtitle: "Veuillez ajouter votre nom complet pour confirmer que vous avez lu le(s) document(s) fourni(s) précédemment.", placeholder: "James Doe" }, signature: { title: "Ajoutez votre signature", subtitle: "Signez ou téléchargez votre signature ci-dessous" }, confirmDetails: { title: "Confirmer les détails", subtitle: "Assurez-vous que votre nom est correctement orthographié et que la signature ressemble à celle de votre pièce d'identité", yes: "Oui, c'est exact", no: "Non, les changer" }, error: { uploadFailed: "Nous n'avons pas pu télécharger votre signature" } }, idInfo: { title: "Saisir les informations d'identité", idNumber: "Numéro d'identification", firstName: "Prénom", lastName: "Nom de famille", dateOfBirth: "Date de Naissance", day: "Jour", month: "Mois", year: "Année", bank: "Banque", selectBank: "--Sélectionner la banque--", searchBank: "Rechercher une banque", noBankFound: "Aucune banque trouvée", citizenship: "Citoyenneté", selectCitizenship: "Sélectionner le type de citoyenneté", dob: "Date de naissance" }, error: { title: "Une erreur est survenue", generic: "Quelque chose s'est mal passé", uploadFailed: "Nous n'avons pas pu télécharger vos informations", checkInternet: "Veuillez vérifier que vous disposez d'une connexion Internet stable. Ensuite, veuillez réessayer !", tryAgain: "Essayez à nouveau", countryNotSupported: "{{country}} n'est pas pris en charge" }, validation: { isRequired: "{{field}} est obligatoire", invalidFormat: "{{field}} n'est pas valide" } }, Ki = {
|
|
1143
1143
|
direction: Ni,
|
|
1144
1144
|
common: zi,
|
|
1145
1145
|
combobox: xi,
|
|
@@ -1357,4 +1357,4 @@ export {
|
|
|
1357
1357
|
io as u,
|
|
1358
1358
|
Qn as v
|
|
1359
1359
|
};
|
|
1360
|
-
//# sourceMappingURL=index-
|
|
1360
|
+
//# sourceMappingURL=index-5Nn2kzHI.js.map
|