@smileid/web-components 10.0.0 → 10.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{DocumentCaptureScreens-Dwl7UqVH.js → esm/DocumentCaptureScreens-CkWKSrqy.js} +3 -5
- package/dist/esm/DocumentCaptureScreens-CkWKSrqy.js.map +1 -0
- package/dist/{EndUserConsent-C5hZdJzH.js → esm/EndUserConsent-CMHp-34-.js} +2 -2
- package/dist/esm/EndUserConsent-CMHp-34-.js.map +1 -0
- package/dist/esm/Navigation-juBE4qOw.js.map +1 -0
- package/dist/esm/PoweredBySmileId-CxbaihMu.js.map +1 -0
- package/dist/{SelfieCaptureScreens-CQc251hz.js → esm/SelfieCaptureScreens-BF1keQ0h.js} +2282 -2281
- package/dist/esm/SelfieCaptureScreens-BF1keQ0h.js.map +1 -0
- package/dist/esm/SignaturePad-C7MtmT8m.js.map +1 -0
- package/dist/esm/TotpConsent-CQU5jQi4.js.map +1 -0
- package/dist/esm/combobox.js.map +1 -0
- package/dist/{document.js → esm/document.js} +1 -1
- package/dist/{end-user-consent.js → esm/end-user-consent.js} +1 -1
- package/dist/{main.js → esm/main.js} +3 -3
- package/dist/{package-Oi2Yil3b.js → esm/package-CmYr0HUS.js} +2 -2
- package/dist/esm/package-CmYr0HUS.js.map +1 -0
- package/dist/{selfie.js → esm/selfie.js} +1 -1
- package/dist/esm/smart-camera-web.js +302 -0
- package/dist/esm/smart-camera-web.js.map +1 -0
- package/dist/{styles-BUWNxWeQ.js → esm/styles-D2i3GFLK.js} +1 -2
- package/dist/esm/styles-D2i3GFLK.js.map +1 -0
- package/dist/smart-camera-web.js +4052 -224
- package/dist/smart-camera-web.js.map +1 -1
- package/lib/components/camera-permission/CameraPermission.js +0 -1
- package/lib/components/document/src/document-capture/DocumentCapture.js +0 -1
- package/lib/components/document/src/document-capture-review/DocumentCaptureReview.js +0 -1
- package/lib/components/selfie/src/selfie-capture/SelfieCapture.js +0 -1
- package/lib/components/selfie/src/selfie-capture-instructions/SelfieCaptureInstructions.js +0 -1
- package/lib/components/selfie/src/selfie-capture-review/SelfieCaptureReview.js +1 -1
- package/lib/components/selfie/src/selfie-capture-wrapper/SelfieCaptureWrapper.tsx +35 -36
- package/lib/components/selfie/src/smartselfie-capture/SmartSelfieCapture.tsx +0 -1
- package/lib/components/selfie/src/smartselfie-capture/utils/imageCapture.ts +2 -2
- package/lib/components/signature-pad/package.json +1 -1
- package/lib/styles/src/styles.js +0 -1
- package/package.json +15 -14
- package/dist/DocumentCaptureScreens-Dwl7UqVH.js.map +0 -1
- package/dist/EndUserConsent-C5hZdJzH.js.map +0 -1
- package/dist/Navigation-juBE4qOw.js.map +0 -1
- package/dist/PoweredBySmileId-CxbaihMu.js.map +0 -1
- package/dist/SelfieCaptureScreens-CQc251hz.js.map +0 -1
- package/dist/SignaturePad-C7MtmT8m.js.map +0 -1
- package/dist/TotpConsent-CQU5jQi4.js.map +0 -1
- package/dist/combobox.js.map +0 -1
- package/dist/package-Oi2Yil3b.js.map +0 -1
- package/dist/styles-BUWNxWeQ.js.map +0 -1
- /package/dist/{Navigation-juBE4qOw.js → esm/Navigation-juBE4qOw.js} +0 -0
- /package/dist/{PoweredBySmileId-CxbaihMu.js → esm/PoweredBySmileId-CxbaihMu.js} +0 -0
- /package/dist/{SignaturePad-C7MtmT8m.js → esm/SignaturePad-C7MtmT8m.js} +0 -0
- /package/dist/{TotpConsent-CQU5jQi4.js → esm/TotpConsent-CQU5jQi4.js} +0 -0
- /package/dist/{combobox.js → esm/combobox.js} +0 -0
- /package/dist/{document.js.map → esm/document.js.map} +0 -0
- /package/dist/{end-user-consent.js.map → esm/end-user-consent.js.map} +0 -0
- /package/dist/{main.js.map → esm/main.js.map} +0 -0
- /package/dist/{navigation.js → esm/navigation.js} +0 -0
- /package/dist/{navigation.js.map → esm/navigation.js.map} +0 -0
- /package/dist/{selfie.js.map → esm/selfie.js.map} +0 -0
- /package/dist/{signature-pad.js → esm/signature-pad.js} +0 -0
- /package/dist/{signature-pad.js.map → esm/signature-pad.js.map} +0 -0
- /package/dist/{totp-consent.js → esm/totp-consent.js} +0 -0
- /package/dist/{totp-consent.js.map → esm/totp-consent.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SignaturePad-C7MtmT8m.js","sources":["../lib/components/signature-pad/src/SignaturePad.js"],"sourcesContent":["import SignaturePadCore from 'signature_pad';\r\n\r\nclass SmartFileUpload {\r\n static memoryLimit = 2048000;\r\n\r\n static supportedTypes = ['image/jpeg', 'image/png', 'image/svg+xml'];\r\n\r\n static getHumanSize(numberOfBytes) {\r\n // Approximate to the closest prefixed unit\r\n const units = ['B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\r\n const exponent = Math.min(\r\n Math.floor(Math.log(numberOfBytes) / Math.log(1024)),\r\n units.length - 1,\r\n );\r\n const approx = numberOfBytes / 1024 ** exponent;\r\n const output =\r\n exponent === 0\r\n ? `${numberOfBytes} bytes`\r\n : `${approx.toFixed(0)} ${units[exponent]}`;\r\n\r\n return output;\r\n }\r\n\r\n static getData(file) {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n\r\n reader.onload = (e) => {\r\n resolve(e.target.result);\r\n };\r\n reader.onerror = () => {\r\n reject(\r\n new Error(\r\n 'An error occurred reading the file. Please check the file, and try again',\r\n ),\r\n );\r\n };\r\n reader.readAsDataURL(file);\r\n });\r\n }\r\n\r\n static async retrieve(files) {\r\n if (files.length > 1) {\r\n throw new Error('Only one file upload is permitted at a time');\r\n }\r\n\r\n const file = files[0];\r\n\r\n if (!SmartFileUpload.supportedTypes.includes(file.type)) {\r\n throw new Error(\r\n 'Unsupported file format. Please ensure that you are providing a JPG, PNG or SVG image',\r\n );\r\n }\r\n\r\n if (file.size > SmartFileUpload.memoryLimit) {\r\n throw new Error(\r\n `${\r\n file.name\r\n } is too large. Please ensure that the file is less than ${SmartFileUpload.getHumanSize(\r\n SmartFileUpload.memoryLimit,\r\n )}.`,\r\n );\r\n }\r\n\r\n const imageAsDataUrl = await SmartFileUpload.getData(file);\r\n\r\n return imageAsDataUrl;\r\n }\r\n}\r\n\r\nclass SignaturePad extends HTMLElement {\r\n connectedCallback() {\r\n const shadow = this.attachShadow({ mode: 'open' });\r\n\r\n const style = document.createElement('style');\r\n style.textContent = `\r\n:host {\r\n display: block;\r\n block-size: auto;\r\n inline-size: 30rem;\r\n max-inline-size: 100%;\r\n position: relative;\r\n --color-active: #2D2B2A;\r\n --color-default: #001096;\r\n --color-disabled: #848282;\r\n}\r\n\r\n:host::part(upload) {\r\n text-align: center;\r\n}\r\n\r\n:host::part(signature-controls) {\r\n display: inline-flex;\r\n position: absolute;\r\n top: 1rem;\r\n right: 1rem;\r\n}\r\n\r\n:host::part(upload) svg + * {\r\n margin-inline-start: .5rem;\r\n}\r\n\r\n:host::part(canvas) {\r\n background-color: #F9F0E7;\r\n --dot-bg: #F9F0E7;\r\n --dot-color: black;\r\n --dot-size: 1px;\r\n --dot-space: 22px;\r\n background:\r\n linear-gradient(90deg, var(--dot-bg) calc(var(--dot-space) - var(--dot-size)), transparent 1%) center / var(--dot-space) var(--dot-space),\r\n linear-gradient(var(--dot-bg) calc(var(--dot-space) - var(--dot-size)), transparent 1%) center / var(--dot-space) var(--dot-space),\r\n var(--dot-color);\r\n border-radius: 2rem;\r\n inline-size: 30rem;\r\n max-inline-size: 100%;\r\n aspect-ratio: 2 / 1;\r\n}\r\n\r\n:host::part(upload-preview-image) {\r\n max-inline-size: 10rem;\r\n margin-inline: auto;\r\n}\r\n\r\n.visually-hidden {\r\n clip: rect(0 0 0 0); \r\n clip-path: inset(50%);\r\n height: 1px;\r\n overflow: hidden;\r\n position: absolute;\r\n white-space: nowrap; \r\n width: 1px;\r\n}\r\n\r\nbutton,\r\nlabel {\r\n font: inherit;\r\n cursor: pointer;\r\n}\r\n\r\nlabel {\r\n display: inline-flex;\r\n text-decoration: underline;\r\n}\r\n\r\nlabel svg + * {\r\n margin-inline-start: .5rem;\r\n}\r\n\r\n[type=\"file\"] {\r\n display: none;\r\n}\r\n\r\n.center {\r\n text-align: center;\r\n margin-inline: auto;\r\n}\r\n\r\n.color-red {\r\n color: red;\r\n}\r\n\r\nbutton[data-variant=\"icon\"] {\r\n appearance: none;\r\n -webkit-appearance: none;\r\n background-color: transparent;\r\n border: 0px;\r\n}\r\n\r\nbutton[data-variant=\"text\"] {\r\n appearance: none;\r\n -webkit-appearance: none;\r\n background-color: transparent;\r\n border: 0px;\r\n text-decoration: underline;\r\n display: inline-flex;\r\n align-items: baseline;\r\n}\r\n\r\nbutton[data-variant=\"solid\"] {\r\n --button-color: ${this.themeColor};\r\n border-radius: 2.5rem;\r\n border: 0;\r\n background-color: transparent;\r\n color: #fff;\r\n cursor: pointer;\r\n inline-size: 100%;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n font-size: 18px;\r\n font-weight: 600;\r\n padding: .75rem 1.5rem;\r\n text-align: center;\r\n background-color: var(--button-color);\r\n border: 2px solid var(--button-color);\r\n}\r\n\r\nbutton:hover,\r\nbutton:focus,\r\nbutton:active {\r\n --button-color: var(--color-active);\r\n}\r\n\r\nbutton:disabled {\r\n --button-color: var(--color-disabled);\r\n}\r\n`;\r\n\r\n const wrapper = document.createElement('div');\r\n const errorMessage = document.createElement('div');\r\n errorMessage.innerHTML = `\r\n <p id=\"error\" class=\"color-red | center\"><p>\r\n `;\r\n\r\n const signatureControls = document.createElement('div');\r\n signatureControls.setAttribute('id', 'controls');\r\n signatureControls.setAttribute('part', 'signature-controls');\r\n signatureControls.innerHTML = `\r\n <button data-variant=\"icon\" type=\"button\" name=\"clear\" id=\"clear\">\r\n <span class=\"visually-hidden\">\r\n Clear Signature\r\n </span>\r\n <svg fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" viewBox=\"0 0 17 18\">\r\n <path d=\"M3.314 15.646a8.004 8.004 0 01-2.217-4.257 8.06 8.06 0 01.545-4.655l1.789.788a6.062 6.062 0 001.264 6.737 6.033 6.033 0 008.551 0c2.358-2.37 2.358-6.224 0-8.592a5.996 5.996 0 00-4.405-1.782l.662 2.354-3.128-.796-3.127-.796 2.25-2.324L7.748 0l.55 1.953a7.966 7.966 0 016.33 2.326 8.004 8.004 0 012.342 5.684 8.005 8.005 0 01-2.343 5.683A7.928 7.928 0 018.97 18a7.928 7.928 0 01-5.656-2.354z\" fill=\"currentColor\" />\r\n </svg>\r\n </button>\r\n `;\r\n\r\n const canvas = document.createElement('canvas');\r\n\r\n /**\r\n * NOTE: In order to make this responsive, we need to calculate the width\r\n * / height of the canvas element relative to the closest visible element\r\n *\r\n * Within our consuming context, we do follow these steps:\r\n * - Find the closest ancestor that is visible\r\n * - Find the visible child of that ancestor\r\n * - Get the reference width / inline-size of the element\r\n * - Compute the canvas.height as the lesser of the reference width or the\r\n * inline size of the canvas set in CSS\r\n * - Compute the canvas.height as half the size of the canvas.width or the\r\n * block size computed by the aspect-ratio property\r\n */\r\n\r\n const closestVisibleAncestor = this.parentElement.closest(':not([hidden])');\r\n const visibleChild = closestVisibleAncestor.querySelector(':not([hidden])');\r\n const containerWidth = visibleChild.offsetWidth;\r\n\r\n const remInPx = getComputedStyle(document.documentElement).fontSize.split(\r\n 'px',\r\n )[0];\r\n const componentMaxInlineSize = 30 * remInPx; // 30rem from the style declaration\r\n const aspectRatio = 2; // 2 from the canvas style aspect ratio declaration\r\n\r\n canvas.width =\r\n containerWidth < componentMaxInlineSize\r\n ? containerWidth\r\n : componentMaxInlineSize;\r\n canvas.height =\r\n (containerWidth < componentMaxInlineSize\r\n ? containerWidth\r\n : componentMaxInlineSize) / aspectRatio;\r\n\r\n canvas.setAttribute('id', 'signature-canvas');\r\n canvas.setAttribute('part', 'canvas');\r\n\r\n const uploadControl = document.createElement('div');\r\n uploadControl.setAttribute('id', 'signature-upload-wrapper');\r\n uploadControl.innerHTML = `\r\n <p part=\"upload\">\r\n <strong>or</strong>\r\n <label>\r\n <input type='file' onclick='this.value=null;' id='upload-signature' accept='image/jpeg, image/png, image/svg+xml' />\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\r\n <rect width=\"16\" height=\"16\" fill=\"#F9F0E7\" rx=\"2\"/>\r\n <mask id=\"sign\" width=\"16\" height=\"16\" x=\"0\" y=\"0\" maskUnits=\"userSpaceOnUse\" style=\"mask-type:alpha\">\r\n <rect width=\"16\" height=\"16\" fill=\"#D9D9D9\" rx=\"2\"/>\r\n </mask>\r\n <g mask=\"url(#sign)\">\r\n <path fill=\"#2D2B2A\" d=\"M0 13.333h16V16H0z\"/>\r\n </g>\r\n <path fill=\"#2D2B2A\" fill-rule=\"evenodd\" d=\"M2.69 7.346a.23.23 0 0 1 .059-.073.275.275 0 0 1 .284-.034c.07.036.146.064.224.084h.12c0-.012.105-.048.105-.395a.796.796 0 0 1 .211-.61.667.667 0 0 1 .607-.096c.202.061.39.154.555.275.194.138.38.286.555.443.146.134.31.25.489.347l.092.047c.119.06.238-.023.185-.143l-.04-.12a.817.817 0 0 1-.066-.694.675.675 0 0 1 .244-.273.774.774 0 0 1 .364-.12c.324-.028.651 0 .964.083h.026c.027-.861.225-1.83.82-2.523.593-.694 1.478-.993 2.205-.837.726.155 1.307.73 1.307 1.602 0 1.34-.872 2.26-1.915 2.93.471.374.85.835 1.11 1.351.027.046.05.094.065.144h.014a.55.55 0 0 0 .079.203.44.44 0 0 0 .04.18c.002.025.011.05.026.07h-.013c.037.17.041.344.013.515a.955.955 0 0 1-.188.493 1.097 1.097 0 0 1-.433.344 1.346 1.346 0 0 1-1.122.012 2.194 2.194 0 0 1-.846-.67 5.024 5.024 0 0 1-.462-.681h-.026a.502.502 0 0 0-.106-.144.014.014 0 0 1-.01-.003.011.011 0 0 1-.003-.009.035.035 0 0 1-.013-.023.047.047 0 0 1-.011-.017.626.626 0 0 0-.055-.163.24.24 0 0 0-.014-.095h.014a3.477 3.477 0 0 1-.198-.49 6.318 6.318 0 0 1-.278-1.699L7.51 6.51c-.243-.07-.5-.094-.753-.071-.158.024-.198.071-.211.107-.014.036-.04.168.053.359.092.191.171.478.118.658a.45.45 0 0 1-.21.25.66.66 0 0 1-.305.06 1.521 1.521 0 0 1-.568-.19 3.533 3.533 0 0 1-.58-.42 3.54 3.54 0 0 0-.49-.394 1.49 1.49 0 0 0-.409-.203c-.053-.024-.079-.024-.092-.012H4.05c-.014.012-.066.072-.066.275 0 .395-.12.705-.423.813a.813.813 0 0 1-.41.024 1.646 1.646 0 0 1-.343-.12.237.237 0 0 1-.126-.127.208.208 0 0 1 .007-.172Zm5.731.766c.068.204.152.404.251.598.011.053.03.105.053.155.036.068.08.132.132.191.02.05.047.099.08.144.085.152.186.296.303.43.167.22.389.4.647.526a.847.847 0 0 0 .687-.011.655.655 0 0 0 .247-.204.573.573 0 0 0 .11-.287 1.435 1.435 0 0 0-.04-.454h-.014a.496.496 0 0 0-.079-.335.491.491 0 0 0-.119-.191 3.842 3.842 0 0 0-1.017-1.16l-.356.18a.253.253 0 0 1-.193.027.248.248 0 0 1-.088-.041.22.22 0 0 1-.063-.07.219.219 0 0 1-.02-.172.242.242 0 0 1 .113-.14l.172-.083a3.388 3.388 0 0 0-.463-.251l-.58-.24c.022.47.101.935.237 1.388Zm.568-1.555c.24.12.474.252.7.395 1.017-.634 1.81-1.459 1.81-2.63 0-.67-.41-1.053-.912-1.16-.502-.108-1.189.083-1.704.669-.515.586-.7 1.47-.713 2.32v.083c.251.084.515.192.819.323Z\" clip-rule=\"evenodd\"/>\r\n </svg>\r\n <span>upload a signature</span>\r\n </label>\r\n </p>\r\n `;\r\n\r\n const publishSignatureContainer = document.createElement('p');\r\n publishSignatureContainer.innerHTML = `\r\n <button data-variant=\"solid\" type=\"button\" name=\"publish\" id=\"publish\">\r\n <span>\r\n Continue\r\n </span>\r\n <svg\r\n aria-hidden=\"true\"\r\n width=\"25\"\r\n height=\"24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M7 12h11m0 0-4.588-4M18 12l-4.588 4\"\r\n stroke=\"#fff\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n `;\r\n\r\n wrapper.appendChild(errorMessage);\r\n wrapper.appendChild(signatureControls);\r\n wrapper.appendChild(canvas);\r\n if (this.allowUpload) wrapper.appendChild(uploadControl);\r\n wrapper.appendChild(publishSignatureContainer);\r\n\r\n shadow.appendChild(style);\r\n shadow.appendChild(wrapper);\r\n\r\n this.core = new SignaturePadCore(canvas);\r\n\r\n // Error Message\r\n this.errorMessage = errorMessage.querySelector('#error');\r\n\r\n // Canvas Resize / Sizing\r\n if (window) {\r\n window.onresize = this.resizeCanvas();\r\n }\r\n\r\n // Signature Pad Controls\r\n this.clearSignatureButton = signatureControls.querySelector('#clear');\r\n this.clearSignatureButton.addEventListener('click', () =>\r\n this.clearSignature(),\r\n );\r\n\r\n // Upload Controls\r\n this.uploadSignatureButton =\r\n uploadControl.querySelector('#upload-signature');\r\n this.uploadSignatureButton.addEventListener('change', (event) =>\r\n this.uploadSignature(event),\r\n );\r\n\r\n // Publish Signature\r\n this.publishSignatureButton =\r\n publishSignatureContainer.querySelector('#publish');\r\n this.publishSignatureButton.addEventListener('click', () =>\r\n this.publishSignature(),\r\n );\r\n }\r\n\r\n disconnectedCallback() {\r\n this.publishSignatureButton.removeEventListener('click', () =>\r\n this.publishSignature(),\r\n );\r\n this.clearSignatureButton.removeEventListener('click', () =>\r\n this.clearSignature(),\r\n );\r\n this.uploadSignatureButton.removeEventListener('change', (event) =>\r\n this.uploadSignature(event),\r\n );\r\n }\r\n\r\n // Adjust canvas coordinate space taking into account pixel ratio,\r\n // to make it look crisp on mobile devices.\r\n // This also causes canvas to be cleared.\r\n resizeCanvas() {\r\n // When zoomed out to less than 100%, for some very strange reason,\r\n // some browsers report devicePixelRatio as less than 1\r\n // and only part of the canvas is cleared then.\r\n const canvas = this.shadowRoot.querySelector('canvas');\r\n const ratio = Math.max(window.devicePixelRatio || 1, 1);\r\n\r\n // This part causes the canvas to be cleared\r\n canvas.width = (canvas.offsetWidth || canvas.width) * ratio;\r\n canvas.height = (canvas.offsetHeight || canvas.height) * ratio;\r\n canvas.getContext('2d').scale(ratio, ratio);\r\n\r\n // This library does not listen for canvas changes, so after the canvas is automatically\r\n // cleared by the browser, SignaturePad#isEmpty might still return false, even though the\r\n // canvas looks empty, because the internal data of this library wasn't cleared. To make sure\r\n // that the state of this library is consistent with visual state of the canvas, you\r\n // have to clear it manually.\r\n // signaturePad.clear();\r\n\r\n // If you want to keep the drawing on resize instead of clearing it you can reset the data.\r\n this.core.fromData(this.core.toData());\r\n }\r\n\r\n publishSignature() {\r\n try {\r\n this.resetErrorMessage();\r\n const previewImage = this.shadowRoot.querySelector('img');\r\n let image = previewImage ? previewImage.src : undefined;\r\n if (!image && !this.core.isEmpty()) {\r\n image = this.core.toDataURL('image/svg+xml');\r\n }\r\n\r\n if (image) {\r\n this.dispatchEvent(\r\n new CustomEvent('signature-pad.publish', {\r\n detail: image,\r\n }),\r\n );\r\n } else {\r\n throw new Error(\r\n `No signature present. ${\r\n this.allowUpload ? 'Draw or upload' : 'Draw'\r\n } a signature`,\r\n );\r\n }\r\n } catch (error) {\r\n this.handleError(error.message);\r\n }\r\n }\r\n\r\n resetErrorMessage() {\r\n this.errorMessage.textContent = '';\r\n }\r\n\r\n handleError(error) {\r\n this.errorMessage.textContent = error;\r\n }\r\n\r\n clearSignature() {\r\n this.resetErrorMessage();\r\n const canvas = this.shadowRoot.querySelector('canvas');\r\n const img = this.shadowRoot.querySelector('img');\r\n\r\n if (img) {\r\n img.remove();\r\n canvas.removeAttribute('hidden');\r\n }\r\n\r\n this.core.clear();\r\n }\r\n\r\n previewUpload(fileData) {\r\n const canvas = this.shadowRoot.querySelector('canvas');\r\n let img = this.shadowRoot.querySelector('img');\r\n\r\n if (!img) {\r\n img = document.createElement('img');\r\n }\r\n\r\n img.src = fileData;\r\n img.setAttribute('part', 'upload-preview-image');\r\n canvas.setAttribute('hidden', true);\r\n canvas.insertAdjacentElement('afterend', img);\r\n }\r\n\r\n async uploadSignature(event) {\r\n try {\r\n this.resetErrorMessage();\r\n const { files } = event.target;\r\n\r\n // validate file, and convert file to data url\r\n const fileData = await SmartFileUpload.retrieve(files);\r\n\r\n // swap out canvas for an image for preview\r\n this.previewUpload(fileData);\r\n } catch (error) {\r\n this.handleError(error.message);\r\n }\r\n }\r\n\r\n get allowUpload() {\r\n return this.hasAttribute('allow-upload');\r\n }\r\n\r\n get themeColor() {\r\n return this.getAttribute('theme-color') || '#001096';\r\n }\r\n}\r\n\r\nif (\r\n 'customElements' in window &&\r\n !window.customElements.get('smileid-signature-pad')\r\n) {\r\n window.customElements.define('smileid-signature-pad', SignaturePad);\r\n}\r\n\r\nexport default SignaturePad;\r\n"],"names":["SmartFileUpload","numberOfBytes","units","exponent","approx","file","resolve","reject","reader","e","files","SignaturePad","shadow","style","wrapper","errorMessage","signatureControls","canvas","containerWidth","componentMaxInlineSize","aspectRatio","uploadControl","publishSignatureContainer","SignaturePadCore","event","ratio","previewImage","image","error","img","fileData"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TotpConsent-CQU5jQi4.js","sources":["../lib/components/totp-consent/src/TotpConsent.js"],"sourcesContent":["import validate from 'validate.js';\r\n\r\nfunction postData(url, data) {\r\n return fetch(url, {\r\n body: JSON.stringify(data),\r\n cache: 'no-cache',\r\n headers: {\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json',\r\n },\r\n method: 'POST',\r\n mode: 'cors',\r\n });\r\n}\r\n\r\nfunction markup() {\r\n return `\r\n <style>\r\n *,\r\n *::before,\r\n *::after {\r\n box-sizing: border-box;\r\n margin: 0;\r\n padding: 0;\r\n }\r\n\r\n :host {\r\n --flow-space: 1.5rem;\r\n\r\n --color-dark: #404040;\r\n --color-grey: #555B69;\r\n\r\n --color-success: #1EB244;\r\n --color-failure: #FFEDEB;\r\n --color-failure-tint: #F86B58;\r\n\r\n --color-richblue: #043C93;\r\n --color-theme: ${this.themeColor};\r\n\r\n --color-active: #2D2B2A;\r\n --color-default: #001096;\r\n --color-disabled: #848282;\r\n }\r\n\r\n html {\r\n font-family: 'DM Sans', sans-serif;\r\n }\r\n\r\n [hidden] {\r\n display: none !important;\r\n }\r\n\r\n [disabled] {\r\n cursor: not-allowed !important;\r\n }\r\n\r\n .visually-hidden {\r\n border: 0;\r\n clip: rect(1px 1px 1px 1px);\r\n clip: rect(1px, 1px, 1px, 1px);\r\n height: auto;\r\n margin: 0;\r\n overflow: hidden;\r\n padding: 0;\r\n position: absolute;\r\n white-space: nowrap;\r\n width: 1px;\r\n }\r\n\r\n .color-dark {\r\n color: var(--color-dark);\r\n }\r\n\r\n .color-grey {\r\n color: var(--color-grey);\r\n }\r\n\r\n .flow > * + * {\r\n margin-top: var(--flow-space);\r\n }\r\n\r\n .center {\r\n margin-left: auto;\r\n margin-right: auto;\r\n\r\n text-align: center;\r\n }\r\n\r\n h1 {\r\n font-size: 1.5rem;\r\n font-weight: 700;\r\n }\r\n\r\n button, input, select, textarea {\r\n font: inherit\r\n }\r\n\r\n label,\r\n input,\r\n select,\r\n textarea {\r\n --flow-space: .5rem;\r\n display: block;\r\n width: 100%;\r\n }\r\n\r\n input,\r\n select,\r\n textarea {\r\n border: 1px solid #d1d8d6;\r\n border-radius: .5rem;\r\n padding: .75rem 1rem;\r\n }\r\n\r\n button {\r\n --button-color: var(--color-default);\r\n --flow-space: 3rem;\r\n -webkit-appearance: none;\r\n -moz-appearance: none;\r\n align-items: center;\r\n appearance: none;\r\n background-color: transparent;\r\n border-radius: 2.5rem;\r\n border: none;\r\n color: #ffffff;\r\n cursor: pointer;\r\n display: inline-flex;\r\n font-size: 20px;\r\n font-weight: 500;\r\n inline-size: 100%;\r\n justify-content: center;\r\n letter-spacing: .05ch;\r\n line-height: 1;\r\n padding: 1rem 2.5rem;\r\n text-align: center;\r\n text-decoration: none;\r\n }\r\n\r\n button[data-variant='solid'] {\r\n background-color: var(--button-color);\r\n border: 2px solid var(--button-color);\r\n }\r\n\r\n button[data-variant='outline'] {\r\n color: var(--button-color);\r\n border: 2px solid var(--button-color);\r\n }\r\n\r\n button[data-variant='ghost'] {\r\n color: var(--button-color);\r\n }\r\n\r\n button:hover,\r\n button:focus,\r\n button:active {\r\n --button-color: var(--color-active);\r\n }\r\n\r\n button:disabled {\r\n --button-color: var(--color-disabled);\r\n }\r\n\r\n button[data-type='icon'] {\r\n height: 2rem;\r\n padding: 0;\r\n width: 2rem;\r\n background: transparent;\r\n }\r\n\r\n input {\r\n font: inherit;\r\n }\r\n\r\n fieldset {\r\n margin: 0;\r\n border: none;\r\n }\r\n\r\n .font-weight:bold {\r\n font-weight: bold;\r\n }\r\n\r\n .justify-right {\r\n justify-content: end !important;\r\n }\r\n .nav {\r\n display: flex;\r\n justify-content: space-between;\r\n }\r\n\r\n .back-wrapper {\r\n display: flex;\r\n align-items: center;\r\n }\r\n\r\n .back-button-text {\r\n font-size: 11px;\r\n line-height: 11px;\r\n color: ${this.themeColor || 'rgb(21, 31, 114)'};\r\n }\r\n\r\n #error,\r\n .validation-message {\r\n color: red;\r\n text-transform: capitalize;\r\n }\r\n\r\n .input-group {\r\n --flow-space: 1.5rem;\r\n text-align: initial;\r\n }\r\n\r\n .input-radio {\r\n --flow-space: 1.5rem;\r\n background-color: #F8F8F8;\r\n border-radius: .5rem;\r\n padding: .625rem 1rem;\r\n display: flex;\r\n align-items: center;\r\n }\r\n\r\n .otp-mode {\r\n display: flex;\r\n align-items: center;\r\n text-align: initial;\r\n }\r\n\r\n .otp-mode :first-child {\r\n margin: 0;\r\n margin-inline-end: 1rem;\r\n }\r\n\r\n .otp-mode :nth-child(2n) {\r\n --flow-space: .5rem;\r\n }\r\n\r\n .input-radio [type='radio'] {\r\n border-radius: 50%;\r\n inline-size: 2rem;\r\n block-size: 2rem;\r\n margin-inline-end: .5rem;\r\n background-color: white;\r\n border: .125rem solid #f5f5f5;\r\n }\r\n\r\n #totp-token {\r\n block-size: 3rem;\r\n inline-size: 20rem;\r\n max-inline-size: 100%;\r\n background-color: #F5F5F5;\r\n border: none;\r\n border-bottom: 2px solid #2F718D;\r\n font-size: 1.5rem;\r\n text-align: center;\r\n font-weight: 700;\r\n letter-spacing: 2rem;\r\n padding: .5rem 1rem;\r\n margin-inline: auto;\r\n }\r\n\r\n @keyframes spin {\r\n 0% {\r\n transform: translate3d(-50%, -50%, 0) rotate(0deg);\r\n }\r\n 100% {\r\n transform: translate3d(-50%, -50%, 0) rotate(360deg);\r\n }\r\n }\r\n\r\n .spinner {\r\n animation: 1.5s linear infinite spin;\r\n animation-play-state: inherit;\r\n border: solid 5px #cfd0d1;\r\n border-bottom-color: var(--color-active);\r\n border-radius: 50%;\r\n content: \"\";\r\n display: block;\r\n height: 25px;\r\n width: 25px;\r\n will-change: transform;\r\n position: relative;\r\n top: .675rem;\r\n left: 1.25rem;\r\n }\r\n </style>\r\n\r\n <div class='flow center' id='id-entry'>\r\n <div class=\"nav\">\r\n <div class=\"back-wrapper\">\r\n <button type='button' data-type='icon' id=\"back-button\" class=\"back-button\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\">\r\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\"/>\r\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\"/>\r\n </svg>\r\n </button>\r\n <div class=\"back-button-text\">Back</div>\r\n </div>\r\n <button data-type='icon' type='button' class='close-iframe'>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\">\r\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\"/>\r\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\"/>\r\n </svg>\r\n <span class='visually-hidden'>Close SmileIdentity Verification frame</span>\r\n </button>\r\n </div>\r\n <h1>\r\n Enter your ${this.idTypeLabel}\r\n </h1>\r\n\r\n <form name='id-entry-form' class='flow' novalidate style='--flow-space: 5.5rem'>\r\n <div id='id-number' class=\"input-group flow\">\r\n <label class='required' for=\"id_number\">\r\n ${this.idTypeLabel}\r\n </label>\r\n\r\n <input aria-required='true' id=\"id_number\" name=\"id_number\"\r\n maxlength='11' placeholder='' />\r\n\r\n <p>\r\n <small>${this.idHint}</small>\r\n </p>\r\n </div>\r\n\r\n <button data-variant='solid' id='query-otp-modes' type='submit'>\r\n <span class='text'>Continue</span>\r\n <svg aria-hidden='true' width=\"25\" height=\"24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\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\"/>\r\n </svg>\r\n <span hidden class='spinner'></span>\r\n </button>\r\n </form>\r\n </div>\r\n\r\n <div hidden class='flow center' id='select-mode'>\r\n <div class=\"nav\">\r\n <div class=\"back-wrapper\">\r\n <button type='button' data-type='icon' id=\"back-to-entry-button\" class=\"back-button\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\">\r\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\"/>\r\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\"/>\r\n </svg>\r\n </button>\r\n <div class=\"back-button-text\">Back</div>\r\n </div>\r\n <button data-type='icon' type='button' class='close-iframe'>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\">\r\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\"/>\r\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\"/>\r\n </svg>\r\n <span class='visually-hidden'>Close SmileIdentity Verification frame</span>\r\n </button>\r\n </div>\r\n <h1>\r\n Select contact method\r\n </h1>\r\n\r\n <form name='select-mode-form' novalidate style='--flow-space: 4.25rem' id='otp-entry' class='flow center'>\r\n <fieldset class='flow center'>\r\n <legend class='flow' style='--flow-space: 1.5rem'>\r\n <p>\r\n NIBSS, the data custodian of BVN, \r\n will send you a One-Time Password (OTP) \r\n </p>\r\n\r\n <p>\r\n <small>\r\n The request will be from Chams Plc, who is NIBSS' technical partner.\r\n </small>\r\n </p>\r\n </legend>\r\n\r\n <div class='flow center'>\r\n ${\r\n this.modes.length\r\n ? this.modes\r\n .map(\r\n (mode) => `<label class='input-radio'>\r\n <input type=\"radio\" id=\"\" name=\"mode\" value=\"${Object.keys(mode)[0]}\">\r\n <div class='otp-mode'>\r\n ${\r\n Object.keys(mode)[0].includes('sms')\r\n ? `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"29\" height=\"37\" fill=\"none\">\r\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\"/>\r\n <g filter=\"url(#sms)\">\r\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\"/>\r\n </g>\r\n <defs>\r\n <filter id=\"sms\" width=\"20.023\" height=\"15.595\" x=\"1.675\" y=\"21.005\" color-interpolation-filters=\"sRGB\" filterUnits=\"userSpaceOnUse\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\r\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\"/>\r\n <feOffset dy=\"4\"/>\r\n <feGaussianBlur stdDeviation=\"2\"/>\r\n <feComposite in2=\"hardAlpha\" operator=\"out\"/>\r\n <feColorMatrix values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0\"/>\r\n <feBlend in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_2_404\"/>\r\n <feBlend in=\"SourceGraphic\" in2=\"effect1_dropShadow_2_404\" result=\"shape\"/>\r\n </filter>\r\n </defs>\r\n </svg>\r\n `\r\n : `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"35\" height=\"24\" fill=\"none\">\r\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\"/>\r\n <g filter=\"url(#message)\">\r\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\"/>\r\n </g>\r\n <defs>\r\n <filter id=\"message\" width=\"34.042\" height=\"18.154\" x=\".676\" y=\"2.316\" color-interpolation-filters=\"sRGB\" filterUnits=\"userSpaceOnUse\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\r\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\"/>\r\n <feOffset dy=\"4\"/>\r\n <feGaussianBlur stdDeviation=\"2\"/>\r\n <feComposite in2=\"hardAlpha\" operator=\"out\"/>\r\n <feColorMatrix values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0\"/>\r\n <feBlend in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_2_394\"/>\r\n <feBlend in=\"SourceGraphic\" in2=\"effect1_dropShadow_2_394\" result=\"shape\"/>\r\n </filter>\r\n </defs>\r\n </svg>\r\n `\r\n }\r\n <div class='flow'>\r\n <p>\r\n ${Object.values(mode)[0]}\r\n </p>\r\n <p>\r\n <small>\r\n An OTP will be sent by ${\r\n Object.keys(mode)[0].includes(\r\n 'sms',\r\n )\r\n ? 'sms'\r\n : 'email'\r\n } to verify your identity\r\n </small>\r\n </p>\r\n </div>\r\n </div>\r\n </label>`,\r\n )\r\n .join('\\n')\r\n : 'No modes yet'\r\n }\r\n </div>\r\n </fieldset>\r\n\r\n <button data-variant='ghost' id='contact-methods-outdated' style='--flow-space: .5rem' class='' type='button'>\r\n I am no longer using any of these options\r\n </button>\r\n\r\n <button data-variant='solid' id='select-otp-mode' type='submit'>\r\n <span class='text'>Continue</span>\r\n <svg aria-hidden='true' width=\"25\" height=\"24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\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\"/>\r\n </svg>\r\n <span hidden class='spinner'></span>\r\n </button>\r\n </form>\r\n </div>\r\n\r\n <div hidden class='flow center' id='otp-verification'>\r\n <div class=\"nav justify-right\">\r\n <button data-type='icon' type='button' class='close-iframe'>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\">\r\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\"/>\r\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\"/>\r\n </svg>\r\n <span class='visually-hidden'>Close SmileIdentity Verification frame</span>\r\n </button>\r\n </div>\r\n <h1>\r\n OTP Verification\r\n </h1>\r\n\r\n <div style='--flow-space: 4.25rem' id='otp-entry'>\r\n <form name='otp-submission-form' novalidate style='--flow-space: 1.5rem' class='flow center'>\r\n <label for='totp-token'>\r\n Enter the OTP sent to <span class='font-weight:bold'>${\r\n this.selectedOtpDeliveryMode\r\n }</span>\r\n </label>\r\n <input type='text' id='totp-token' maxlength='6' inputmode='numeric' autocomplete='one-time-code' />\r\n\r\n <p>\r\n Didn't receive the OTP${\r\n !this.selectedOtpDeliveryMode\r\n ? '?'\r\n : ` at <span class='font-weight:bold'>${this.selectedOtpDeliveryMode}</span>?`\r\n }\r\n </p>\r\n\r\n <button style='--flow-space: .5rem' data-variant='ghost' class='try-another-method' type='button'>\r\n Try another contact method\r\n </button>\r\n\r\n <button data-variant='solid' id='submit-otp' type='submit'>\r\n <span class='text'>Submit</span>\r\n <svg aria-hidden='true' width=\"25\" height=\"24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\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\"/>\r\n </svg>\r\n <span hidden class='spinner'></span>\r\n </button>\r\n </form>\r\n </div>\r\n </div>\r\n `;\r\n}\r\n\r\nclass TotpConsent extends HTMLElement {\r\n constructor() {\r\n super();\r\n\r\n this.templateString = markup.bind(this);\r\n this.render = () => this.templateString();\r\n\r\n this.attachShadow({ mode: 'open' });\r\n\r\n this.modes = [];\r\n this['otp-delivery-mode'] = '';\r\n\r\n this.queryOtpModes = this.queryOtpModes.bind(this);\r\n this.selectOtpMode = this.selectOtpMode.bind(this);\r\n this.submitOtp = this.submitOtp.bind(this);\r\n this.switchContactMethod = this.switchContactMethod.bind(this);\r\n this.handleTotpConsentGrant = this.handleTotpConsentGrant.bind(this);\r\n this.handleTotpConsentContactMethodsOutdated =\r\n this.handleTotpConsentContactMethodsOutdated.bind(this);\r\n this.pages = [];\r\n }\r\n\r\n static get observedAttributes() {\r\n return ['modes', 'otp-delivery-mode'];\r\n }\r\n\r\n attributeChangedCallback(name) {\r\n switch (name) {\r\n case 'modes':\r\n case 'otp-delivery-mode': {\r\n const updatedTemplate = document.createElement('template');\r\n updatedTemplate.innerHTML = this.render();\r\n const updatedNode = updatedTemplate.content\r\n .cloneNode(true)\r\n .querySelector(`#${this.activeScreen.id}`);\r\n updatedNode.hidden = false;\r\n this.shadowRoot.replaceChild(updatedNode, this.activeScreen);\r\n this.setUpEventListeners();\r\n this.setActiveScreen(updatedNode);\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n setUpEventListeners() {\r\n // Screens\r\n this.idEntryScreen = this.shadowRoot.querySelector('#id-entry');\r\n this.selectModeScreen = this.shadowRoot.querySelector('#select-mode');\r\n this.otpVerificationScreen =\r\n this.shadowRoot.querySelector('#otp-verification');\r\n\r\n if (!this.activeScreen) {\r\n this.activeScreen = this.idEntryScreen;\r\n }\r\n\r\n // Buttons\r\n this.queryOtpModesButton =\r\n this.idEntryScreen.querySelector('#query-otp-modes');\r\n this.backButton = this.idEntryScreen.querySelector('#back-button');\r\n this.selectOtpModeButton =\r\n this.selectModeScreen.querySelector('#select-otp-mode');\r\n this.entryBackbutton = this.selectModeScreen.querySelector(\r\n '#back-to-entry-button',\r\n );\r\n this.contactMethodsOutdatedButton = this.selectModeScreen.querySelector(\r\n '#contact-methods-outdated',\r\n );\r\n this.submitOtpButton =\r\n this.otpVerificationScreen.querySelector('#submit-otp');\r\n this.switchContactMethodButton = this.otpVerificationScreen.querySelector(\r\n '.try-another-method',\r\n );\r\n const CloseIframeButtons =\r\n this.shadowRoot.querySelectorAll('.close-iframe');\r\n\r\n // Input Elements\r\n this.idNumberInput = this.idEntryScreen.querySelector('#id_number');\r\n this.modeInputs = this.selectModeScreen.querySelectorAll('[name=\"mode\"]');\r\n this.otpInput = this.otpVerificationScreen.querySelector('#totp-token');\r\n\r\n // Event Handlers\r\n this.queryOtpModesButton.addEventListener('click', (e) =>\r\n this.queryOtpModes(e),\r\n );\r\n this.selectOtpModeButton.addEventListener('click', (e) =>\r\n this.selectOtpMode(e),\r\n );\r\n this.submitOtpButton.addEventListener('click', (e) => this.submitOtp(e));\r\n this.switchContactMethodButton.addEventListener('click', (e) =>\r\n this.switchContactMethod(e),\r\n );\r\n this.contactMethodsOutdatedButton.addEventListener('click', (e) =>\r\n this.handleTotpConsentContactMethodsOutdated(e),\r\n );\r\n\r\n this.entryBackbutton.addEventListener('click', () => {\r\n this.handleBackClick();\r\n });\r\n\r\n this.backButton.addEventListener('click', () => {\r\n this.handleBackClick();\r\n });\r\n\r\n CloseIframeButtons.forEach((button) => {\r\n button.addEventListener(\r\n 'click',\r\n () => {\r\n this.closeWindow();\r\n },\r\n false,\r\n );\r\n });\r\n }\r\n\r\n closeWindow() {\r\n const referenceWindow = window.parent;\r\n [referenceWindow.parent, referenceWindow].forEach((win) => {\r\n win.postMessage('SmileIdentity::Close', '*');\r\n });\r\n }\r\n\r\n handleBackClick() {\r\n const page = this.pages.pop();\r\n if (page) {\r\n this.setActiveScreen(page);\r\n } else {\r\n this.dispatchEvent(\r\n new CustomEvent('end-user-consent.totp.cancelled', {}),\r\n );\r\n }\r\n }\r\n\r\n connectedCallback() {\r\n const template = document.createElement('template');\r\n template.innerHTML = this.render();\r\n\r\n this.shadowRoot.appendChild(template.content.cloneNode(true));\r\n this.setUpEventListeners();\r\n }\r\n\r\n switchContactMethod() {\r\n this.queryOtpModes();\r\n }\r\n\r\n resetForm() {\r\n const invalidElements =\r\n this.activeScreen.querySelectorAll('[aria-invalid]');\r\n invalidElements.forEach((el) => el.removeAttribute('aria-invalid'));\r\n\r\n const validationMessages = this.activeScreen.querySelectorAll(\r\n '.validation-message',\r\n );\r\n validationMessages.forEach((el) => el.remove());\r\n }\r\n\r\n handleIdNumberValidationErrors(errors) {\r\n const fields = Object.keys(errors);\r\n\r\n fields.forEach((field) => {\r\n const input = this.activeScreen.querySelector(`#${field}`);\r\n input.setAttribute('aria-invalid', 'true');\r\n input.setAttribute('aria-describedby', `${field}-hint`);\r\n\r\n const errorDiv = document.createElement('div');\r\n errorDiv.setAttribute('id', `${field}-hint`);\r\n errorDiv.setAttribute('class', 'validation-message');\r\n // eslint-disable-next-line prefer-destructuring\r\n errorDiv.textContent = errors[field][0];\r\n\r\n input.insertAdjacentElement('afterend', errorDiv);\r\n });\r\n }\r\n\r\n handleActiveScreenErrors(error) {\r\n const submitButton = this.activeScreen.querySelector('[type=\"submit\"]');\r\n const errorDiv = document.createElement('div');\r\n errorDiv.setAttribute('class', 'validation-message');\r\n errorDiv.textContent = error;\r\n submitButton.insertAdjacentElement('beforebegin', errorDiv);\r\n }\r\n\r\n validateIdNumber(idNumber) {\r\n const validationConstraints = {\r\n id_number: {\r\n format: new RegExp(this.idRegex),\r\n presence: {\r\n allowEmpty: false,\r\n message: 'is required',\r\n },\r\n },\r\n };\r\n\r\n const errors = validate({ id_number: idNumber }, validationConstraints);\r\n\r\n if (errors) {\r\n this.handleIdNumberValidationErrors(errors);\r\n }\r\n\r\n return errors;\r\n }\r\n\r\n async queryOtpModes(event) {\r\n if (event) {\r\n // ACTION: disable another submission\r\n event.preventDefault();\r\n\r\n // ACTION: Reset any form validation errors'\r\n this.resetForm();\r\n }\r\n\r\n // ACTION: Validate idNumber\r\n const validationErrors = this.validateIdNumber(this.idNumberInput.value);\r\n\r\n // ACTION: Get and set idNumber\r\n localStorage.setItem('idNumber', this.idNumberInput.value || this.idNumber);\r\n\r\n if (!validationErrors) {\r\n const data = {\r\n country: this.country,\r\n id_number: this.idNumber,\r\n id_type: this.idType,\r\n partner_id: this.partnerId,\r\n token: this.token,\r\n };\r\n const url = `${this.baseUrl}/totp_consent`;\r\n\r\n try {\r\n this.toggleLoading();\r\n const response = await postData(url, data);\r\n const json = await response.json();\r\n this.toggleLoading();\r\n\r\n if (!response.ok) {\r\n this.handleActiveScreenErrors(json.error);\r\n } else {\r\n this.sessionId = json.session_id;\r\n this.modes = json.modes;\r\n this.setActiveScreen(this.selectModeScreen);\r\n this.setAttribute('modes', json.modes);\r\n }\r\n } catch (error) {\r\n this.toggleLoading();\r\n this.handleActiveScreenErrors(error.message);\r\n }\r\n }\r\n }\r\n\r\n async selectOtpMode(event) {\r\n // ACTION: disable another submission\r\n event.preventDefault();\r\n\r\n // ACTION: Reset any form validation errors'\r\n this.resetForm();\r\n\r\n // ACTION: Get mode\r\n this.mode = Array.prototype.find.call(\r\n this.modeInputs,\r\n (node) => node.checked,\r\n ).value;\r\n const data = {\r\n country: this.country,\r\n id_number: this.idNumber,\r\n id_type: this.idType,\r\n mode: this.mode,\r\n partner_id: this.partnerId,\r\n session_id: this.sessionId,\r\n token: this.token,\r\n };\r\n const url = `${this.baseUrl}/totp_consent/mode`;\r\n\r\n try {\r\n this.toggleLoading();\r\n const response = await postData(url, data);\r\n const json = await response.json();\r\n this.toggleLoading();\r\n\r\n if (!response.ok) {\r\n this.handleActiveScreenErrors(json.error);\r\n } else {\r\n this.selectedOtpDeliveryMode = this.modes.filter(\r\n (mode) => mode[this.mode],\r\n )[0][this.mode];\r\n this.setActiveScreen(this.otpVerificationScreen);\r\n this.setAttribute('otp-delivery-mode', this.selectedOtpDeliveryMode);\r\n }\r\n } catch (error) {\r\n this.toggleLoading();\r\n this.handleActiveScreenErrors(error.message);\r\n }\r\n }\r\n\r\n async submitOtp(event) {\r\n // ACTION: disable another submission\r\n event.preventDefault();\r\n\r\n // ACTION: Reset any form validation errors'\r\n this.resetForm();\r\n\r\n this.otp = this.otpInput.value;\r\n\r\n const data = {\r\n country: this.country,\r\n id_number: this.idNumber,\r\n id_type: this.idType,\r\n otp: this.otp,\r\n partner_id: this.partnerId,\r\n session_id: this.sessionId,\r\n token: this.token,\r\n };\r\n const url = `${this.baseUrl}/totp_consent/otp`;\r\n\r\n try {\r\n this.toggleLoading();\r\n const response = await postData(url, data);\r\n const json = await response.json();\r\n this.toggleLoading();\r\n\r\n if (!response.ok) {\r\n this.handleActiveScreenErrors(json.error);\r\n } else {\r\n this.handleTotpConsentGrant(event);\r\n }\r\n } catch (error) {\r\n this.toggleLoading();\r\n this.handleActiveScreenErrors(error.message);\r\n }\r\n }\r\n\r\n toggleLoading() {\r\n const button = this.activeScreen.querySelector('button[type=\"submit\"]');\r\n const text = button.querySelector('.text');\r\n const arrow = button.querySelector('svg');\r\n const spinner = button.querySelector('.spinner');\r\n\r\n button.toggleAttribute('disabled');\r\n text.toggleAttribute('hidden');\r\n arrow.toggleAttribute('hidden');\r\n spinner.toggleAttribute('hidden');\r\n }\r\n\r\n setActiveScreen(screen) {\r\n this.activeScreen.hidden = true;\r\n screen.hidden = false;\r\n this.activeScreen = screen;\r\n }\r\n\r\n get baseUrl() {\r\n return this.getAttribute('base-url');\r\n }\r\n\r\n get country() {\r\n return this.getAttribute('country');\r\n }\r\n\r\n get idHint() {\r\n return this.getAttribute('id-hint') || 'Your BVN should be 11 digits long';\r\n }\r\n\r\n get idNumber() {\r\n return localStorage.getItem('idNumber');\r\n }\r\n\r\n get idRegex() {\r\n return this.getAttribute('id-regex');\r\n }\r\n\r\n get idType() {\r\n return this.getAttribute('id-type');\r\n }\r\n\r\n get idTypeLabel() {\r\n return this.getAttribute('id-type-label');\r\n }\r\n\r\n get partnerId() {\r\n return this.getAttribute('partner-id');\r\n }\r\n\r\n get partnerName() {\r\n return this.getAttribute('partner-name');\r\n }\r\n\r\n get token() {\r\n return this.getAttribute('token');\r\n }\r\n\r\n get themeColor() {\r\n return this.getAttribute('theme-color') || '#001096';\r\n }\r\n\r\n get hideBack() {\r\n return this.hasAttribute('hide-back');\r\n }\r\n\r\n get showNavigation() {\r\n return this.hasAttribute('show-navigation');\r\n }\r\n\r\n handleTotpConsentGrant() {\r\n const customEvent = new CustomEvent('end-user-consent.totp.granted', {\r\n detail: {\r\n consented: {\r\n contact_information: true,\r\n document_information: true,\r\n personal_details: true,\r\n },\r\n id_number: this.idNumber,\r\n session_id: this.sessionId,\r\n },\r\n });\r\n\r\n this.dispatchEvent(customEvent);\r\n }\r\n\r\n handleTotpConsentContactMethodsOutdated() {\r\n const tag = 'end-user-consent.totp.denied.contact-methods-outdated';\r\n const customEvent = new CustomEvent(tag, {\r\n detail: {\r\n data: {\r\n id_number: this.idNumber,\r\n session_id: this.sessionId,\r\n },\r\n message: tag,\r\n },\r\n });\r\n\r\n this.dispatchEvent(customEvent);\r\n }\r\n}\r\n\r\nif ('customElements' in window && !window.customElements.get('totp-consent')) {\r\n window.customElements.define('totp-consent', TotpConsent);\r\n}\r\n\r\nexport {\r\n // eslint-disable-next-line import/prefer-default-export\r\n TotpConsent,\r\n};\r\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","customEvent","tag"],"mappings":"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"}
|
package/dist/combobox.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"combobox.js","sources":["../lib/components/combobox/src/Combobox.js"],"sourcesContent":["function generateId(prefix) {\r\n const id = [...Array(30)].map(() => Math.random().toString(36)[3]).join('');\r\n return `${prefix}-${id}`;\r\n}\r\n\r\n// check if element is visible in browser view port\r\nfunction isElementInView(element) {\r\n const bounding = element.getBoundingClientRect();\r\n\r\n return (\r\n bounding.top >= 0 &&\r\n bounding.left >= 0 &&\r\n bounding.bottom <=\r\n (window.innerHeight || document.documentElement.clientHeight) &&\r\n bounding.right <=\r\n (window.innerWidth || document.documentElement.clientWidth)\r\n );\r\n}\r\n\r\n// check if an element is currently scrollable\r\nfunction isScrollable(element) {\r\n return element && element.clientHeight < element.scrollHeight;\r\n}\r\n\r\n// ensure a given child element is within the parent's visible scroll area\r\n// if the child is not visible, scroll the parent\r\nfunction maintainScrollVisibility(activeElement, scrollParent) {\r\n const { offsetHeight, offsetTop } = activeElement;\r\n const { offsetHeight: parentOffsetHeight, scrollTop } = scrollParent;\r\n\r\n const isAbove = offsetTop < scrollTop;\r\n const isBelow = offsetTop + offsetHeight > scrollTop + parentOffsetHeight;\r\n\r\n if (isAbove) {\r\n scrollParent.scrollTo(0, offsetTop);\r\n } else if (isBelow) {\r\n scrollParent.scrollTo(0, offsetTop - parentOffsetHeight + offsetHeight);\r\n }\r\n}\r\n\r\nclass ComboboxRoot extends HTMLElement {\r\n constructor() {\r\n super();\r\n\r\n this.handleRoaming = this.handleRoaming.bind(this);\r\n }\r\n\r\n connectedCallback() {\r\n this.trigger = this.querySelector('smileid-combobox-trigger');\r\n\r\n document.addEventListener('click', this.handleRoaming);\r\n this.addEventListener('focusout', this.handleRoaming);\r\n this.addEventListener('blur', this.handleRoaming);\r\n }\r\n\r\n disconnectedCallback() {\r\n document.removeEventListener('click', this.handleRoaming);\r\n this.removeEventListener('focusout', this.handleRoaming);\r\n this.removeEventListener('blur', this.handleRoaming);\r\n }\r\n\r\n handleRoaming(event) {\r\n const target = event.relatedTarget || event.target;\r\n if (this.contains(target)) {\r\n return;\r\n }\r\n\r\n if (this.trigger.getAttribute('expanded') === 'true') {\r\n this.trigger.setAttribute('expanded', 'false');\r\n }\r\n }\r\n}\r\n\r\nclass ComboboxTrigger extends HTMLElement {\r\n constructor() {\r\n super();\r\n\r\n this.handleKeyUp = this.handleKeyUp.bind(this);\r\n this.handleKeyDown = this.handleKeyDown.bind(this);\r\n this.handleSelection = this.handleSelection.bind(this);\r\n\r\n this.toggleExpansionState = this.toggleExpansionState.bind(this);\r\n }\r\n\r\n get type() {\r\n return this.getAttribute('type') || 'text';\r\n }\r\n\r\n get label() {\r\n return this.getAttribute('label') || '';\r\n }\r\n\r\n get value() {\r\n return this.getAttribute('value') || '';\r\n }\r\n\r\n get disabled() {\r\n return this.hasAttribute('disabled');\r\n }\r\n\r\n connectedCallback() {\r\n if (!this.label) {\r\n throw new Error('<combobox-trigger>: a label attribute is required');\r\n }\r\n\r\n this.innerHTML = `${\r\n this.type === 'text'\r\n ? `\r\n <div>\r\n <input ${this.value ? `value=\"${this.value}\" ` : ''}${\r\n this.disabled ? ' disabled ' : ''\r\n }type=\"text\" placeholder=\"${this.label}\" />\r\n <button ${this.disabled ? 'disabled ' : ''}tabindex='-1' type='button'>\r\n <span class=\"visually-hidden\">Toggle</span>\r\n </button>\r\n </div>\r\n `\r\n : `<button ${this.disabled ? 'disabled ' : ''}type=\"button\">${\r\n this.value || this.label\r\n }</button>`\r\n }`;\r\n\r\n this.setAttribute('expanded', false);\r\n\r\n this.inputTrigger = this.querySelector('input');\r\n this.buttonTrigger = this.querySelector('button');\r\n\r\n this.buttonTrigger.setAttribute('aria-expanded', false);\r\n this.buttonTrigger.setAttribute('role', 'combobox');\r\n\r\n this.buttonTrigger.addEventListener('keydown', this.handleKeyDown);\r\n this.buttonTrigger.addEventListener('click', this.toggleExpansionState);\r\n\r\n if (this.inputTrigger) {\r\n this.inputTrigger.setAttribute('aria-expanded', false);\r\n this.inputTrigger.setAttribute('role', 'combobox');\r\n\r\n this.inputTrigger.addEventListener('keydown', this.handleKeyDown);\r\n this.inputTrigger.addEventListener('keyup', this.handleKeyUp);\r\n this.inputTrigger.addEventListener('change', (e) => e.stopPropagation());\r\n }\r\n\r\n this.listbox = this.parentElement.querySelector('smileid-combobox-listbox');\r\n\r\n this.options = Array.from(\r\n this.parentElement.querySelectorAll('smileid-combobox-option'),\r\n );\r\n this.options.forEach((node) => {\r\n node.addEventListener('combobox.option.select', this.handleSelection);\r\n });\r\n }\r\n\r\n disconnectedCallback() {\r\n this.buttonTrigger.removeEventListener('keydown', this.handleKeyDown);\r\n this.buttonTrigger.removeEventListener('click', this.toggleExpansionState);\r\n\r\n if (this.inputTrigger) {\r\n this.inputTrigger.removeEventListener('keydown', this.handleKeyDown);\r\n this.inputTrigger.removeEventListener('keyup', this.handleKeyUp);\r\n this.inputTrigger.removeEventListener('change', (e) =>\r\n e.stopPropagation(),\r\n );\r\n }\r\n\r\n if (this.options) {\r\n this.options.forEach((node) => {\r\n node.removeEventListener(\r\n 'combobox.option.select',\r\n this.handleSelection,\r\n );\r\n });\r\n }\r\n }\r\n\r\n handleKeyDown(event) {\r\n if (event.ctrlKey || event.shiftKey) {\r\n return;\r\n }\r\n\r\n const { key } = event;\r\n\r\n switch (key) {\r\n case 'Enter':\r\n case 'Space':\r\n case ' ':\r\n if (this.getAttribute('expanded') === 'true') {\r\n if (this.inputTrigger && (key === 'Space' || key === ' ')) {\r\n this.resetListbox();\r\n } else {\r\n event.preventDefault();\r\n const selectedOption = this.buttonTrigger.getAttribute(\r\n 'aria-activedescendant',\r\n );\r\n if (selectedOption) {\r\n document.getElementById(selectedOption).click();\r\n }\r\n }\r\n } else {\r\n event.preventDefault();\r\n this.toggleExpansionState();\r\n }\r\n break;\r\n case 'Esc':\r\n case 'Escape':\r\n event.preventDefault();\r\n if (this.getAttribute('expanded') === 'true') {\r\n this.toggleExpansionState();\r\n }\r\n break;\r\n case 'Down':\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n if (this.getAttribute('expanded') !== 'true') {\r\n this.toggleExpansionState();\r\n this.focusListbox('First');\r\n } else {\r\n this.focusListbox('Down');\r\n }\r\n break;\r\n case 'Up':\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n if (this.getAttribute('expanded') !== 'true') {\r\n this.toggleExpansionState();\r\n this.focusListbox('Last');\r\n } else {\r\n this.focusListbox('Up');\r\n }\r\n break;\r\n case 'Left':\r\n case 'ArrowLeft':\r\n case 'Right':\r\n case 'ArrowRight':\r\n case 'Home':\r\n case 'End':\r\n this.resetListbox();\r\n break;\r\n case 'Tab':\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n handleKeyUp(event) {\r\n const { key } = event;\r\n\r\n const isPrintableCharacter = (str) => str.length === 1 && str.match(/\\S| /);\r\n\r\n if (event.key === 'Escape' || event.key === 'Esc') {\r\n event.preventDefault();\r\n if (this.getAttribute('expanded') === 'true') {\r\n this.toggleExpansionState();\r\n } else if (this.inputTrigger) {\r\n this.inputTrigger.value = '';\r\n\r\n this.listbox.dispatchEvent(\r\n new CustomEvent('combobox.listbox.filter', { detail: '' }),\r\n );\r\n }\r\n }\r\n\r\n if (isPrintableCharacter(key) || key === 'Backspace') {\r\n this.resetListbox();\r\n this.filterListbox(event.target.value);\r\n }\r\n }\r\n\r\n toggleExpansionState() {\r\n const listboxIsExpanded = this.getAttribute('expanded') === 'true';\r\n this.setAttribute('expanded', !listboxIsExpanded);\r\n this.buttonTrigger.setAttribute('aria-expanded', !listboxIsExpanded);\r\n if (this.inputTrigger) {\r\n this.inputTrigger.setAttribute('aria-expanded', !listboxIsExpanded);\r\n }\r\n }\r\n\r\n handleSelection(event) {\r\n if (this.inputTrigger) {\r\n this.inputTrigger.value = event.detail.label;\r\n } else {\r\n this.buttonTrigger.textContent = event.detail.label;\r\n }\r\n\r\n this.toggleExpansionState();\r\n this.parentElement.dispatchEvent(\r\n new CustomEvent('combobox.change', {\r\n detail: {\r\n value: event.detail.value,\r\n },\r\n }),\r\n );\r\n }\r\n\r\n filterListbox(value) {\r\n if (this.getAttribute('expanded') !== 'true') {\r\n this.toggleExpansionState();\r\n }\r\n\r\n this.listbox.dispatchEvent(\r\n new CustomEvent('combobox.listbox.filter', { detail: value }),\r\n );\r\n }\r\n\r\n focusListbox(direction) {\r\n this.resetListbox();\r\n this.listbox.dispatchEvent(\r\n new CustomEvent('combobox.listbox.focus', {\r\n detail: {\r\n direction,\r\n },\r\n }),\r\n );\r\n }\r\n\r\n resetListbox() {\r\n this.listbox.dispatchEvent(new CustomEvent('combobox.listbox.reset'));\r\n }\r\n}\r\n\r\nclass ComboboxListbox extends HTMLElement {\r\n constructor() {\r\n super();\r\n\r\n this.handleFilter = this.handleFilter.bind(this);\r\n this.handleFocus = this.handleFocus.bind(this);\r\n this.handleReset = this.handleReset.bind(this);\r\n\r\n this.handleOptionSelection = this.handleOptionSelection.bind(this);\r\n }\r\n\r\n get emptyLabel() {\r\n return this.getAttribute('empty-label');\r\n }\r\n\r\n get emptyState() {\r\n return `\r\n <p id='empty-state' style=\"text-align: center;\">\r\n ${this.emptyLabel || 'No items'}\r\n </p>\r\n `;\r\n }\r\n\r\n connectedCallback() {\r\n this.setAttribute('role', 'listbox');\r\n this.setAttribute('id', generateId('listbox'));\r\n\r\n this.addEventListener('combobox.listbox.filter', this.handleFilter);\r\n this.addEventListener('combobox.listbox.focus', this.handleFocus);\r\n this.addEventListener('combobox.listbox.reset', this.handleReset);\r\n\r\n this.triggers = Array.from(\r\n this.parentElement.querySelectorAll(\r\n 'smileid-combobox-trigger input, smileid-combobox-trigger button',\r\n ),\r\n );\r\n this.triggers.forEach((node) =>\r\n node.setAttribute('aria-controls', this.getAttribute('id')),\r\n );\r\n\r\n this.optionNodes = Array.from(\r\n this.querySelectorAll('smileid-combobox-option'),\r\n );\r\n this.selectedNode =\r\n this.optionNodes.find(\r\n (node) =>\r\n !node.hasAttribute('hidden') && node.hasAttribute('aria-selected'),\r\n ) || this.optionNodes.filter((node) => !node.hasAttribute('hidden'))[0];\r\n this.selectedNode.setAttribute('tabindex', '0');\r\n\r\n this.optionNodes.forEach((node) => {\r\n node.addEventListener(\r\n 'combobox.option.select',\r\n this.handleOptionSelection,\r\n );\r\n });\r\n\r\n if (this.optionNodes.length === 0) {\r\n this.innerHTML = this.emptyState;\r\n }\r\n }\r\n\r\n disconnectedCallback() {\r\n this.removeEventListener('combobox.listbox.filter', this.handleFilter);\r\n this.removeEventListener('combobox.listbox.focus', this.handleFocus);\r\n this.removeEventListener('combobox.listbox.reset', this.handleReset);\r\n this.optionNodes.forEach((node) => {\r\n node.removeEventListener(\r\n 'combobox.option.select',\r\n this.handleOptionSelection,\r\n );\r\n });\r\n }\r\n\r\n static get observedAttributes() {\r\n return ['search-term'];\r\n }\r\n\r\n attributeChangedCallback(name, oldValue, newValue) {\r\n switch (name) {\r\n case 'search-term':\r\n if (oldValue && !newValue) {\r\n this.optionNodes.forEach((node) => {\r\n node.removeAttribute('hidden');\r\n });\r\n } else if (newValue) {\r\n this.filterNodes(newValue);\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n filterNodes(searchTerm) {\r\n this.optionNodes.forEach((node) => {\r\n const value = node.getAttribute('value').toLowerCase();\r\n const label = node.getAttribute('label').toLowerCase();\r\n\r\n const containsSearchTerm =\r\n value.includes(searchTerm.toLowerCase()) ||\r\n label.includes(searchTerm.toLowerCase());\r\n\r\n if (containsSearchTerm) {\r\n node.removeAttribute('hidden');\r\n } else {\r\n node.setAttribute('hidden', true);\r\n }\r\n });\r\n\r\n const optionsVisible = this.optionNodes.find(\r\n (node) => !node.hasAttribute('hidden'),\r\n );\r\n const emptyState = this.querySelector('#empty-state');\r\n\r\n if (!optionsVisible && !emptyState) {\r\n this.insertAdjacentHTML('afterbegin', this.emptyState);\r\n } else if (optionsVisible && emptyState) {\r\n this.removeChild(emptyState);\r\n }\r\n }\r\n\r\n handleFilter(event) {\r\n const searchTerm = event.detail;\r\n this.setAttribute('search-term', searchTerm);\r\n }\r\n\r\n handleFocus(event) {\r\n this.setSelected(event.detail.direction);\r\n }\r\n\r\n handleReset() {\r\n this.optionNodes.forEach((node) => node.setAttribute('tabindex', '-1'));\r\n }\r\n\r\n handleOptionSelection(event) {\r\n const inputTrigger = this.triggers.filter(\r\n (node) => node.tagName === 'INPUT',\r\n )[0];\r\n\r\n if (inputTrigger) {\r\n this.setAttribute('search-term', event.detail.label);\r\n }\r\n }\r\n\r\n setSelected(direction) {\r\n const visibleOptions = this.optionNodes.filter(\r\n (node) => !node.hasAttribute('hidden'),\r\n );\r\n this.selectedNode.setAttribute('tabindex', '0');\r\n const currentIndex = visibleOptions.findIndex(\r\n (node) => node === this.selectedNode,\r\n );\r\n const lastIndex = visibleOptions.length - 1;\r\n\r\n let nextIndex;\r\n switch (direction) {\r\n case 'First':\r\n nextIndex = 0;\r\n break;\r\n case 'Last':\r\n nextIndex = lastIndex;\r\n break;\r\n case 'Up':\r\n if (currentIndex === 0) {\r\n nextIndex = lastIndex;\r\n } else {\r\n nextIndex = currentIndex - 1;\r\n }\r\n break;\r\n default:\r\n if (currentIndex === lastIndex) {\r\n nextIndex = 0;\r\n } else {\r\n nextIndex = currentIndex + 1;\r\n }\r\n break;\r\n }\r\n\r\n if (currentIndex !== nextIndex) {\r\n this.swapSelected(this.selectedNode, visibleOptions[nextIndex]);\r\n }\r\n }\r\n\r\n swapSelected(currentNode, newNode) {\r\n currentNode.setAttribute('tabindex', '-1');\r\n newNode.setAttribute('tabindex', '0');\r\n\r\n this.selectedNode = newNode;\r\n\r\n // ACTION: ensure the new option is in view\r\n if (isScrollable(this)) {\r\n maintainScrollVisibility(this.selectedNode, this);\r\n }\r\n\r\n // ACTION: scroll into view if node is not visible\r\n if (!isElementInView(newNode)) {\r\n newNode.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\r\n }\r\n\r\n this.triggers.forEach((node) =>\r\n node.setAttribute('aria-activedescendant', newNode.id),\r\n );\r\n }\r\n}\r\n\r\nclass ComboboxOption extends HTMLElement {\r\n connectedCallback() {\r\n this.setAttribute('role', 'option');\r\n this.setAttribute('tabindex', '-1');\r\n this.setAttribute('id', generateId('option'));\r\n\r\n this.options = Array.from(\r\n this.parentElement.querySelectorAll('smileid-combobox-option'),\r\n );\r\n this.addEventListener('click', this.select);\r\n }\r\n\r\n disconnectedCallback() {\r\n this.removeEventListener('click', this.select);\r\n }\r\n\r\n get value() {\r\n return this.getAttribute('value');\r\n }\r\n\r\n get label() {\r\n return this.getAttribute('label');\r\n }\r\n\r\n select() {\r\n const selectedOption = this.options.find((node) =>\r\n node.getAttribute('aria-selected'),\r\n );\r\n\r\n if (selectedOption) {\r\n selectedOption.removeAttribute('aria-selected');\r\n }\r\n\r\n this.setAttribute('aria-selected', true);\r\n\r\n this.dispatchEvent(\r\n new CustomEvent('combobox.option.select', {\r\n detail: {\r\n id: this.getAttribute('id'),\r\n label: this.label,\r\n value: this.value,\r\n },\r\n }),\r\n );\r\n }\r\n}\r\n\r\nconst Root = ComboboxRoot;\r\nconst Trigger = ComboboxTrigger;\r\nconst List = ComboboxListbox;\r\nconst Option = ComboboxOption;\r\n\r\nif (\r\n 'customElements' in window &&\r\n !window.customElements.get('smileid-combobox')\r\n) {\r\n window.customElements.define('smileid-combobox', Root);\r\n window.customElements.define('smileid-combobox-trigger', Trigger);\r\n window.customElements.define('smileid-combobox-listbox', List);\r\n window.customElements.define('smileid-combobox-option', Option);\r\n}\r\n\r\nexport { Root, Trigger, List, Option };\r\n"],"names":["generateId","prefix","id","isElementInView","element","bounding","isScrollable","maintainScrollVisibility","activeElement","scrollParent","offsetHeight","offsetTop","parentOffsetHeight","scrollTop","isAbove","isBelow","ComboboxRoot","event","target","ComboboxTrigger","e","node","key","selectedOption","isPrintableCharacter","str","listboxIsExpanded","value","direction","ComboboxListbox","name","oldValue","newValue","searchTerm","label","optionsVisible","emptyState","visibleOptions","currentIndex","lastIndex","nextIndex","currentNode","newNode","ComboboxOption","Root","Trigger","List","Option"],"mappings":"AAAA,SAASA,EAAWC,GAAQ;AAC1B,QAAMC,IAAK,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,MAAM,KAAK,OAAM,EAAG,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE;AAC1E,SAAO,GAAGD,CAAM,IAAIC,CAAE;AACxB;AAGA,SAASC,EAAgBC,GAAS;AAChC,QAAMC,IAAWD,EAAQ;AAEzB,SACEC,EAAS,OAAO,KAChBA,EAAS,QAAQ,KACjBA,EAAS,WACN,OAAO,eAAe,SAAS,gBAAgB,iBAClDA,EAAS,UACN,OAAO,cAAc,SAAS,gBAAgB;AAErD;AAGA,SAASC,EAAaF,GAAS;AAC7B,SAAOA,KAAWA,EAAQ,eAAeA,EAAQ;AACnD;AAIA,SAASG,EAAyBC,GAAeC,GAAc;AAC7D,QAAM,EAAE,cAAAC,GAAc,WAAAC,EAAW,IAAGH,GAC9B,EAAE,cAAcI,GAAoB,WAAAC,EAAS,IAAKJ,GAElDK,IAAUH,IAAYE,GACtBE,IAAUJ,IAAYD,IAAeG,IAAYD;AAEvD,EAAIE,IACFL,EAAa,SAAS,GAAGE,CAAS,IACzBI,KACTN,EAAa,SAAS,GAAGE,IAAYC,IAAqBF,CAAY;AAE1E;AAEA,MAAMM,UAAqB,YAAY;AAAA,EACrC,cAAc;AACZ,aAEA,KAAK,gBAAgB,KAAK,cAAc,KAAK,IAAI;AAAA,EAClD;AAAA,EAED,oBAAoB;AAClB,SAAK,UAAU,KAAK,cAAc,0BAA0B,GAE5D,SAAS,iBAAiB,SAAS,KAAK,aAAa,GACrD,KAAK,iBAAiB,YAAY,KAAK,aAAa,GACpD,KAAK,iBAAiB,QAAQ,KAAK,aAAa;AAAA,EACjD;AAAA,EAED,uBAAuB;AACrB,aAAS,oBAAoB,SAAS,KAAK,aAAa,GACxD,KAAK,oBAAoB,YAAY,KAAK,aAAa,GACvD,KAAK,oBAAoB,QAAQ,KAAK,aAAa;AAAA,EACpD;AAAA,EAED,cAAcC,GAAO;AACnB,UAAMC,IAASD,EAAM,iBAAiBA,EAAM;AAC5C,IAAI,KAAK,SAASC,CAAM,KAIpB,KAAK,QAAQ,aAAa,UAAU,MAAM,UAC5C,KAAK,QAAQ,aAAa,YAAY,OAAO;AAAA,EAEhD;AACH;AAEA,MAAMC,UAAwB,YAAY;AAAA,EACxC,cAAc;AACZ,aAEA,KAAK,cAAc,KAAK,YAAY,KAAK,IAAI,GAC7C,KAAK,gBAAgB,KAAK,cAAc,KAAK,IAAI,GACjD,KAAK,kBAAkB,KAAK,gBAAgB,KAAK,IAAI,GAErD,KAAK,uBAAuB,KAAK,qBAAqB,KAAK,IAAI;AAAA,EAChE;AAAA,EAED,IAAI,OAAO;AACT,WAAO,KAAK,aAAa,MAAM,KAAK;AAAA,EACrC;AAAA,EAED,IAAI,QAAQ;AACV,WAAO,KAAK,aAAa,OAAO,KAAK;AAAA,EACtC;AAAA,EAED,IAAI,QAAQ;AACV,WAAO,KAAK,aAAa,OAAO,KAAK;AAAA,EACtC;AAAA,EAED,IAAI,WAAW;AACb,WAAO,KAAK,aAAa,UAAU;AAAA,EACpC;AAAA,EAED,oBAAoB;AAClB,QAAI,CAAC,KAAK;AACR,YAAM,IAAI,MAAM,mDAAmD;AAGrE,SAAK,YAAY,GACf,KAAK,SAAS,SACV;AAAA;AAAA,mBAES,KAAK,QAAQ,UAAU,KAAK,KAAK,OAAO,EAAE,GACjD,KAAK,WAAW,eAAe,EAC3C,4BAAsC,KAAK,KAAK;AAAA,oBAC5B,KAAK,WAAW,cAAc,EAAE;AAAA;AAAA;AAAA;AAAA,UAK1C,WAAW,KAAK,WAAW,cAAc,EAAE,iBACzC,KAAK,SAAS,KAAK,KAC/B,WACA,IAEI,KAAK,aAAa,YAAY,EAAK,GAEnC,KAAK,eAAe,KAAK,cAAc,OAAO,GAC9C,KAAK,gBAAgB,KAAK,cAAc,QAAQ,GAEhD,KAAK,cAAc,aAAa,iBAAiB,EAAK,GACtD,KAAK,cAAc,aAAa,QAAQ,UAAU,GAElD,KAAK,cAAc,iBAAiB,WAAW,KAAK,aAAa,GACjE,KAAK,cAAc,iBAAiB,SAAS,KAAK,oBAAoB,GAElE,KAAK,iBACP,KAAK,aAAa,aAAa,iBAAiB,EAAK,GACrD,KAAK,aAAa,aAAa,QAAQ,UAAU,GAEjD,KAAK,aAAa,iBAAiB,WAAW,KAAK,aAAa,GAChE,KAAK,aAAa,iBAAiB,SAAS,KAAK,WAAW,GAC5D,KAAK,aAAa,iBAAiB,UAAU,CAACC,MAAMA,EAAE,gBAAe,CAAE,IAGzE,KAAK,UAAU,KAAK,cAAc,cAAc,0BAA0B,GAE1E,KAAK,UAAU,MAAM;AAAA,MACnB,KAAK,cAAc,iBAAiB,yBAAyB;AAAA,IACnE,GACI,KAAK,QAAQ,QAAQ,CAACC,MAAS;AAC7B,MAAAA,EAAK,iBAAiB,0BAA0B,KAAK,eAAe;AAAA,IAC1E,CAAK;AAAA,EACF;AAAA,EAED,uBAAuB;AACrB,SAAK,cAAc,oBAAoB,WAAW,KAAK,aAAa,GACpE,KAAK,cAAc,oBAAoB,SAAS,KAAK,oBAAoB,GAErE,KAAK,iBACP,KAAK,aAAa,oBAAoB,WAAW,KAAK,aAAa,GACnE,KAAK,aAAa,oBAAoB,SAAS,KAAK,WAAW,GAC/D,KAAK,aAAa;AAAA,MAAoB;AAAA,MAAU,CAACD,MAC/CA,EAAE,gBAAiB;AAAA,IAC3B,IAGQ,KAAK,WACP,KAAK,QAAQ,QAAQ,CAACC,MAAS;AAC7B,MAAAA,EAAK;AAAA,QACH;AAAA,QACA,KAAK;AAAA,MACf;AAAA,IACA,CAAO;AAAA,EAEJ;AAAA,EAED,cAAcJ,GAAO;AACnB,QAAIA,EAAM,WAAWA,EAAM;AACzB;AAGF,UAAM,EAAE,KAAAK,EAAK,IAAGL;AAEhB,YAAQK,GAAG;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,YAAI,KAAK,aAAa,UAAU,MAAM;AACpC,cAAI,KAAK,iBAAiBA,MAAQ,WAAWA,MAAQ;AACnD,iBAAK,aAAY;AAAA,eACZ;AACL,YAAAL,EAAM,eAAc;AACpB,kBAAMM,IAAiB,KAAK,cAAc;AAAA,cACxC;AAAA,YACd;AACY,YAAIA,KACF,SAAS,eAAeA,CAAc,EAAE,MAAK;AAAA,UAEhD;AAAA;AAED,UAAAN,EAAM,eAAc,GACpB,KAAK,qBAAoB;AAE3B;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AACH,QAAAA,EAAM,eAAc,GAChB,KAAK,aAAa,UAAU,MAAM,UACpC,KAAK,qBAAoB;AAE3B;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AACH,QAAAA,EAAM,eAAc,GAChB,KAAK,aAAa,UAAU,MAAM,UACpC,KAAK,qBAAoB,GACzB,KAAK,aAAa,OAAO,KAEzB,KAAK,aAAa,MAAM;AAE1B;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AACH,QAAAA,EAAM,eAAc,GAChB,KAAK,aAAa,UAAU,MAAM,UACpC,KAAK,qBAAoB,GACzB,KAAK,aAAa,MAAM,KAExB,KAAK,aAAa,IAAI;AAExB;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,aAAK,aAAY;AACjB;AAAA,IAKH;AAAA,EACF;AAAA,EAED,YAAYA,GAAO;AACjB,UAAM,EAAE,KAAAK,EAAK,IAAGL,GAEVO,IAAuB,CAACC,MAAQA,EAAI,WAAW,KAAKA,EAAI,MAAM,MAAM;AAE1E,KAAIR,EAAM,QAAQ,YAAYA,EAAM,QAAQ,WAC1CA,EAAM,eAAc,GAChB,KAAK,aAAa,UAAU,MAAM,SACpC,KAAK,qBAAoB,IAChB,KAAK,iBACd,KAAK,aAAa,QAAQ,IAE1B,KAAK,QAAQ;AAAA,MACX,IAAI,YAAY,2BAA2B,EAAE,QAAQ,GAAE,CAAE;AAAA,IACnE,MAIQO,EAAqBF,CAAG,KAAKA,MAAQ,iBACvC,KAAK,aAAY,GACjB,KAAK,cAAcL,EAAM,OAAO,KAAK;AAAA,EAExC;AAAA,EAED,uBAAuB;AACrB,UAAMS,IAAoB,KAAK,aAAa,UAAU,MAAM;AAC5D,SAAK,aAAa,YAAY,CAACA,CAAiB,GAChD,KAAK,cAAc,aAAa,iBAAiB,CAACA,CAAiB,GAC/D,KAAK,gBACP,KAAK,aAAa,aAAa,iBAAiB,CAACA,CAAiB;AAAA,EAErE;AAAA,EAED,gBAAgBT,GAAO;AACrB,IAAI,KAAK,eACP,KAAK,aAAa,QAAQA,EAAM,OAAO,QAEvC,KAAK,cAAc,cAAcA,EAAM,OAAO,OAGhD,KAAK,qBAAoB,GACzB,KAAK,cAAc;AAAA,MACjB,IAAI,YAAY,mBAAmB;AAAA,QACjC,QAAQ;AAAA,UACN,OAAOA,EAAM,OAAO;AAAA,QACrB;AAAA,MACT,CAAO;AAAA,IACP;AAAA,EACG;AAAA,EAED,cAAcU,GAAO;AACnB,IAAI,KAAK,aAAa,UAAU,MAAM,UACpC,KAAK,qBAAoB,GAG3B,KAAK,QAAQ;AAAA,MACX,IAAI,YAAY,2BAA2B,EAAE,QAAQA,EAAK,CAAE;AAAA,IAClE;AAAA,EACG;AAAA,EAED,aAAaC,GAAW;AACtB,SAAK,aAAY,GACjB,KAAK,QAAQ;AAAA,MACX,IAAI,YAAY,0BAA0B;AAAA,QACxC,QAAQ;AAAA,UACN,WAAAA;AAAA,QACD;AAAA,MACT,CAAO;AAAA,IACP;AAAA,EACG;AAAA,EAED,eAAe;AACb,SAAK,QAAQ,cAAc,IAAI,YAAY,wBAAwB,CAAC;AAAA,EACrE;AACH;AAEA,MAAMC,UAAwB,YAAY;AAAA,EACxC,cAAc;AACZ,aAEA,KAAK,eAAe,KAAK,aAAa,KAAK,IAAI,GAC/C,KAAK,cAAc,KAAK,YAAY,KAAK,IAAI,GAC7C,KAAK,cAAc,KAAK,YAAY,KAAK,IAAI,GAE7C,KAAK,wBAAwB,KAAK,sBAAsB,KAAK,IAAI;AAAA,EAClE;AAAA,EAED,IAAI,aAAa;AACf,WAAO,KAAK,aAAa,aAAa;AAAA,EACvC;AAAA,EAED,IAAI,aAAa;AACf,WAAO;AAAA;AAAA,UAED,KAAK,cAAc,UAAU;AAAA;AAAA;AAAA,EAGpC;AAAA,EAED,oBAAoB;AAClB,SAAK,aAAa,QAAQ,SAAS,GACnC,KAAK,aAAa,MAAM7B,EAAW,SAAS,CAAC,GAE7C,KAAK,iBAAiB,2BAA2B,KAAK,YAAY,GAClE,KAAK,iBAAiB,0BAA0B,KAAK,WAAW,GAChE,KAAK,iBAAiB,0BAA0B,KAAK,WAAW,GAEhE,KAAK,WAAW,MAAM;AAAA,MACpB,KAAK,cAAc;AAAA,QACjB;AAAA,MACD;AAAA,IACP,GACI,KAAK,SAAS;AAAA,MAAQ,CAACqB,MACrBA,EAAK,aAAa,iBAAiB,KAAK,aAAa,IAAI,CAAC;AAAA,IAChE,GAEI,KAAK,cAAc,MAAM;AAAA,MACvB,KAAK,iBAAiB,yBAAyB;AAAA,IACrD,GACI,KAAK,eACH,KAAK,YAAY;AAAA,MACf,CAACA,MACC,CAACA,EAAK,aAAa,QAAQ,KAAKA,EAAK,aAAa,eAAe;AAAA,IACpE,KAAI,KAAK,YAAY,OAAO,CAACA,MAAS,CAACA,EAAK,aAAa,QAAQ,CAAC,EAAE,CAAC,GACxE,KAAK,aAAa,aAAa,YAAY,GAAG,GAE9C,KAAK,YAAY,QAAQ,CAACA,MAAS;AACjC,MAAAA,EAAK;AAAA,QACH;AAAA,QACA,KAAK;AAAA,MACb;AAAA,IACA,CAAK,GAEG,KAAK,YAAY,WAAW,MAC9B,KAAK,YAAY,KAAK;AAAA,EAEzB;AAAA,EAED,uBAAuB;AACrB,SAAK,oBAAoB,2BAA2B,KAAK,YAAY,GACrE,KAAK,oBAAoB,0BAA0B,KAAK,WAAW,GACnE,KAAK,oBAAoB,0BAA0B,KAAK,WAAW,GACnE,KAAK,YAAY,QAAQ,CAACA,MAAS;AACjC,MAAAA,EAAK;AAAA,QACH;AAAA,QACA,KAAK;AAAA,MACb;AAAA,IACA,CAAK;AAAA,EACF;AAAA,EAED,WAAW,qBAAqB;AAC9B,WAAO,CAAC,aAAa;AAAA,EACtB;AAAA,EAED,yBAAyBS,GAAMC,GAAUC,GAAU;AACjD,YAAQF,GAAI;AAAA,MACV,KAAK;AACH,QAAIC,KAAY,CAACC,IACf,KAAK,YAAY,QAAQ,CAACX,MAAS;AACjC,UAAAA,EAAK,gBAAgB,QAAQ;AAAA,QACzC,CAAW,IACQW,KACT,KAAK,YAAYA,CAAQ;AAE3B;AAAA,IAGH;AAAA,EACF;AAAA,EAED,YAAYC,GAAY;AACtB,SAAK,YAAY,QAAQ,CAACZ,MAAS;AACjC,YAAMM,IAAQN,EAAK,aAAa,OAAO,EAAE,YAAW,GAC9Ca,IAAQb,EAAK,aAAa,OAAO,EAAE,YAAW;AAMpD,MAHEM,EAAM,SAASM,EAAW,aAAa,KACvCC,EAAM,SAASD,EAAW,YAAa,CAAA,IAGvCZ,EAAK,gBAAgB,QAAQ,IAE7BA,EAAK,aAAa,UAAU,EAAI;AAAA,IAExC,CAAK;AAED,UAAMc,IAAiB,KAAK,YAAY;AAAA,MACtC,CAACd,MAAS,CAACA,EAAK,aAAa,QAAQ;AAAA,IAC3C,GACUe,IAAa,KAAK,cAAc,cAAc;AAEpD,IAAI,CAACD,KAAkB,CAACC,IACtB,KAAK,mBAAmB,cAAc,KAAK,UAAU,IAC5CD,KAAkBC,KAC3B,KAAK,YAAYA,CAAU;AAAA,EAE9B;AAAA,EAED,aAAanB,GAAO;AAClB,UAAMgB,IAAahB,EAAM;AACzB,SAAK,aAAa,eAAegB,CAAU;AAAA,EAC5C;AAAA,EAED,YAAYhB,GAAO;AACjB,SAAK,YAAYA,EAAM,OAAO,SAAS;AAAA,EACxC;AAAA,EAED,cAAc;AACZ,SAAK,YAAY,QAAQ,CAACI,MAASA,EAAK,aAAa,YAAY,IAAI,CAAC;AAAA,EACvE;AAAA,EAED,sBAAsBJ,GAAO;AAK3B,IAJqB,KAAK,SAAS;AAAA,MACjC,CAACI,MAASA,EAAK,YAAY;AAAA,IAC5B,EAAC,CAAC,KAGD,KAAK,aAAa,eAAeJ,EAAM,OAAO,KAAK;AAAA,EAEtD;AAAA,EAED,YAAYW,GAAW;AACrB,UAAMS,IAAiB,KAAK,YAAY;AAAA,MACtC,CAAChB,MAAS,CAACA,EAAK,aAAa,QAAQ;AAAA,IAC3C;AACI,SAAK,aAAa,aAAa,YAAY,GAAG;AAC9C,UAAMiB,IAAeD,EAAe;AAAA,MAClC,CAAChB,MAASA,MAAS,KAAK;AAAA,IAC9B,GACUkB,IAAYF,EAAe,SAAS;AAE1C,QAAIG;AACJ,YAAQZ,GAAS;AAAA,MACf,KAAK;AACH,QAAAY,IAAY;AACZ;AAAA,MACF,KAAK;AACH,QAAAA,IAAYD;AACZ;AAAA,MACF,KAAK;AACH,QAAID,MAAiB,IACnBE,IAAYD,IAEZC,IAAYF,IAAe;AAE7B;AAAA,MACF;AACE,QAAIA,MAAiBC,IACnBC,IAAY,IAEZA,IAAYF,IAAe;AAE7B;AAAA,IACH;AAED,IAAIA,MAAiBE,KACnB,KAAK,aAAa,KAAK,cAAcH,EAAeG,CAAS,CAAC;AAAA,EAEjE;AAAA,EAED,aAAaC,GAAaC,GAAS;AACjC,IAAAD,EAAY,aAAa,YAAY,IAAI,GACzCC,EAAQ,aAAa,YAAY,GAAG,GAEpC,KAAK,eAAeA,GAGhBpC,EAAa,IAAI,KACnBC,EAAyB,KAAK,cAAc,IAAI,GAI7CJ,EAAgBuC,CAAO,KAC1BA,EAAQ,eAAe,EAAE,UAAU,UAAU,OAAO,UAAS,CAAE,GAGjE,KAAK,SAAS;AAAA,MAAQ,CAACrB,MACrBA,EAAK,aAAa,yBAAyBqB,EAAQ,EAAE;AAAA,IAC3D;AAAA,EACG;AACH;AAEA,MAAMC,UAAuB,YAAY;AAAA,EACvC,oBAAoB;AAClB,SAAK,aAAa,QAAQ,QAAQ,GAClC,KAAK,aAAa,YAAY,IAAI,GAClC,KAAK,aAAa,MAAM3C,EAAW,QAAQ,CAAC,GAE5C,KAAK,UAAU,MAAM;AAAA,MACnB,KAAK,cAAc,iBAAiB,yBAAyB;AAAA,IACnE,GACI,KAAK,iBAAiB,SAAS,KAAK,MAAM;AAAA,EAC3C;AAAA,EAED,uBAAuB;AACrB,SAAK,oBAAoB,SAAS,KAAK,MAAM;AAAA,EAC9C;AAAA,EAED,IAAI,QAAQ;AACV,WAAO,KAAK,aAAa,OAAO;AAAA,EACjC;AAAA,EAED,IAAI,QAAQ;AACV,WAAO,KAAK,aAAa,OAAO;AAAA,EACjC;AAAA,EAED,SAAS;AACP,UAAMuB,IAAiB,KAAK,QAAQ;AAAA,MAAK,CAACF,MACxCA,EAAK,aAAa,eAAe;AAAA,IACvC;AAEI,IAAIE,KACFA,EAAe,gBAAgB,eAAe,GAGhD,KAAK,aAAa,iBAAiB,EAAI,GAEvC,KAAK;AAAA,MACH,IAAI,YAAY,0BAA0B;AAAA,QACxC,QAAQ;AAAA,UACN,IAAI,KAAK,aAAa,IAAI;AAAA,UAC1B,OAAO,KAAK;AAAA,UACZ,OAAO,KAAK;AAAA,QACb;AAAA,MACT,CAAO;AAAA,IACP;AAAA,EACG;AACH;AAEK,MAACqB,IAAO5B,GACP6B,IAAU1B,GACV2B,IAAOjB,GACPkB,IAASJ;AAGb,oBAAoB,UACpB,CAAC,OAAO,eAAe,IAAI,kBAAkB,MAE7C,OAAO,eAAe,OAAO,oBAAoBC,CAAI,GACrD,OAAO,eAAe,OAAO,4BAA4BC,CAAO,GAChE,OAAO,eAAe,OAAO,4BAA4BC,CAAI,GAC7D,OAAO,eAAe,OAAO,2BAA2BC,CAAM;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"package-Oi2Yil3b.js","sources":["../lib/domain/constants/src/Constants.js","../lib/domain/camera/src/SmartCamera.js"],"sourcesContent":["/**\r\n * The type of image submitted in the job request\r\n * @readonly\r\n * @enum {number}\r\n */\r\nexport const IMAGE_TYPE = {\r\n /** ID_CARD_BACK_IMAGE_BASE64 Base64 encoded back of ID card image (.jpg or .png) */\r\n ID_CARD_BACK_IMAGE_BASE64: 7,\r\n /** ID_CARD_BACK_IMAGE_FILE Back of ID card image in .png or .jpg file format */\r\n ID_CARD_BACK_IMAGE_FILE: 5,\r\n /** ID_CARD_IMAGE_BASE64 Base64 encoded ID card image (.png or .jpg) */\r\n ID_CARD_IMAGE_BASE64: 3,\r\n /** ID_CARD_IMAGE_FILE ID card image in .png or .jpg file format */\r\n ID_CARD_IMAGE_FILE: 1,\r\n /** LIVENESS_IMAGE_BASE64 Base64 encoded liveness image (.jpg or .png) */\r\n LIVENESS_IMAGE_BASE64: 6,\r\n /** LIVENESS_IMAGE_FILE Liveness image in .png or .jpg file format */\r\n LIVENESS_IMAGE_FILE: 4,\r\n /** SELFIE_IMAGE_BASE64 Base64 encoded selfie image (.png or .jpg) */\r\n SELFIE_IMAGE_BASE64: 2,\r\n /** SELFIE_IMAGE_FILE Selfie image in .png or .jpg file format */\r\n SELFIE_IMAGE_FILE: 0,\r\n};\r\n\r\nexport const DEFAULT_NO_OF_LIVENESS_FRAMES = 8;\r\nexport const PORTRAIT_ID_PREVIEW_WIDTH = 396;\r\nexport const PORTRAIT_ID_PREVIEW_HEIGHT = 527;\r\n","class SmartCamera {\r\n static stream = null;\r\n\r\n static async getMedia(constraints) {\r\n SmartCamera.stream = await navigator.mediaDevices.getUserMedia(constraints);\r\n return SmartCamera.stream;\r\n }\r\n\r\n static environmentOptions = {\r\n facingMode: 'environment',\r\n height: {\r\n ideal: 1080,\r\n max: 1440,\r\n min: 720,\r\n },\r\n width: {\r\n ideal: 1920,\r\n max: 2560,\r\n min: 1280,\r\n },\r\n // NOTE: Special case for multi-camera Samsung devices (learnt from Acuant)\r\n // \"We found out that some triple camera Samsung devices (S10, S20, Note 20, etc) capture images blurry at edges.\r\n // Zooming to 2X, matching the telephoto lens, doesn't solve it completely but mitigates it.\"\r\n zoom: SmartCamera.isSamsungMultiCameraDevice() ? 2.0 : 1.0,\r\n };\r\n\r\n static stopMedia() {\r\n if (SmartCamera.stream) {\r\n SmartCamera.stream.getTracks().forEach((track) => track.stop());\r\n SmartCamera.stream = null;\r\n }\r\n }\r\n\r\n static async supportsAgentMode() {\r\n try {\r\n const devices = await navigator.mediaDevices.enumerateDevices();\r\n const videoDevices = devices.filter(\r\n (device) => device.kind === 'videoinput',\r\n );\r\n\r\n let hasBackCamera = false;\r\n\r\n videoDevices.forEach((device) => {\r\n // Check if the device label or device ID indicates a back camera\r\n if (\r\n device.label.toLowerCase().includes('back') ||\r\n device.label.toLowerCase().includes('rear')\r\n ) {\r\n hasBackCamera = true;\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n return hasBackCamera;\r\n } catch (error) {\r\n console.warn('Error accessing media devices: ', error);\r\n return false;\r\n }\r\n }\r\n\r\n static isSamsungMultiCameraDevice() {\r\n const matchedModelNumber = navigator.userAgent.match(/SM-[N|G]\\d{3}/);\r\n if (!matchedModelNumber) {\r\n return false;\r\n }\r\n\r\n const modelNumber = parseInt(matchedModelNumber[0].match(/\\d{3}/)[0], 10);\r\n const smallerModelNumber = 970; // S10e\r\n return !Number.isNaN(modelNumber) && modelNumber >= smallerModelNumber;\r\n }\r\n\r\n static handleCameraError(e) {\r\n switch (e.name) {\r\n case 'NotAllowedError':\r\n case 'SecurityError':\r\n return `\r\n Looks like camera access was not granted, or was blocked by a browser\r\n level setting / extension. Please follow the prompt from the URL bar,\r\n or extensions, and enable access.\r\n You may need to refresh to start all over again\r\n `;\r\n case 'AbortError':\r\n return `\r\n Oops! Something happened, and we lost access to your stream.\r\n Please refresh to start all over again\r\n `;\r\n case 'NotReadableError':\r\n return `\r\n There seems to be a problem with your device's camera, or its connection.\r\n Please check this, and when resolved, try again. Or try another device.\r\n `;\r\n case 'NotFoundError':\r\n return `\r\n We are unable to find a video stream.\r\n You may need to refresh to start all over again\r\n `;\r\n case 'TypeError':\r\n return `\r\n This site is insecure, and as such cannot have access to your camera.\r\n Try to navigate to a secure version of this page, or contact the owner.\r\n `;\r\n default:\r\n return e.message;\r\n }\r\n }\r\n}\r\n\r\nexport default SmartCamera;\r\n"],"names":["IMAGE_TYPE","SmartCamera","constraints","track","videoDevices","device","hasBackCamera","error","matchedModelNumber","modelNumber"],"mappings":"AAKY,MAACA,IAAa;AAAA;AAAA,EAExB,2BAA2B;AAAA;AAAA,EAE3B,yBAAyB;AAAA;AAAA,EAEzB,sBAAsB;AAAA;AAAA,EAEtB,oBAAoB;AAAA;AAAA,EAEpB,uBAAuB;AAAA;AAAA,EAEvB,qBAAqB;AAAA;AAAA,EAErB,qBAAqB;AAAA;AAAA,EAErB,mBAAmB;AACrB;ACtBA,MAAMC,EAAY;AAAA,EAChB,OAAO,SAAS;AAAA,EAEhB,aAAa,SAASC,GAAa;AACjC,WAAAD,EAAY,SAAS,MAAM,UAAU,aAAa,aAAaC,CAAW,GACnED,EAAY;AAAA,EACpB;AAAA,EAED,OAAO,qBAAqB;AAAA,IAC1B,YAAY;AAAA,IACZ,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,KAAK;AAAA,MACL,KAAK;AAAA,IACN;AAAA,IACD,OAAO;AAAA,MACL,OAAO;AAAA,MACP,KAAK;AAAA,MACL,KAAK;AAAA,IACN;AAAA;AAAA;AAAA;AAAA,IAID,MAAMA,EAAY,2BAA4B,IAAG,IAAM;AAAA,EAC3D;AAAA,EAEE,OAAO,YAAY;AACjB,IAAIA,EAAY,WACdA,EAAY,OAAO,YAAY,QAAQ,CAACE,MAAUA,EAAM,KAAI,CAAE,GAC9DF,EAAY,SAAS;AAAA,EAExB;AAAA,EAED,aAAa,oBAAoB;AAC/B,QAAI;AAEF,YAAMG,KADU,MAAM,UAAU,aAAa,iBAAgB,GAChC;AAAA,QAC3B,CAACC,MAAWA,EAAO,SAAS;AAAA,MACpC;AAEM,UAAIC,IAAgB;AAEpB,aAAAF,EAAa,QAAQ,CAACC,MAGlBA,EAAO,MAAM,cAAc,SAAS,MAAM,KAC1CA,EAAO,MAAM,cAAc,SAAS,MAAM,KAE1CC,IAAgB,IACT,MAEF,EACR,GAEMA;AAAA,IACR,SAAQC,GAAO;AACd,qBAAQ,KAAK,mCAAmCA,CAAK,GAC9C;AAAA,IACR;AAAA,EACF;AAAA,EAED,OAAO,6BAA6B;AAClC,UAAMC,IAAqB,UAAU,UAAU,MAAM,eAAe;AACpE,QAAI,CAACA;AACH,aAAO;AAGT,UAAMC,IAAc,SAASD,EAAmB,CAAC,EAAE,MAAM,OAAO,EAAE,CAAC,GAAG,EAAE;AAExE,WAAO,CAAC,OAAO,MAAMC,CAAW,KAAKA,KADV;AAAA,EAE5B;AAAA,EAED,OAAO,kBAAkB,GAAG;AAC1B,YAAQ,EAAE,MAAI;AAAA,MACZ,KAAK;AAAA,MACL,KAAK;AACH,eAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMT,KAAK;AACH,eAAO;AAAA;AAAA;AAAA;AAAA,MAIT,KAAK;AACH,eAAO;AAAA;AAAA;AAAA;AAAA,MAIT,KAAK;AACH,eAAO;AAAA;AAAA;AAAA;AAAA,MAIT,KAAK;AACH,eAAO;AAAA;AAAA;AAAA;AAAA,MAIT;AACE,eAAO,EAAE;AAAA,IACZ;AAAA,EACF;AACH;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"styles-BUWNxWeQ.js","sources":["../lib/styles/src/typography.js","../lib/styles/src/styles.js"],"sourcesContent":["const typography = `\r\n .text-xs {\r\n font-size: 0.75rem;\r\n line-height: 1rem;\r\n }\r\n .text-sm {\r\n font-size: 0.875rem;\r\n line-height: 1.125rem;\r\n }\r\n .text-base {\r\n font-size: 1rem;\r\n line-height: 1rem;\r\n }\r\n .text-lg {\r\n font-size: 1.125rem;\r\n line-height: 1.75rem;\r\n }\r\n .text-xl {\r\n font-size: 1.25rem;\r\n line-height: 1.75rem;\r\n }\r\n .text-2xl {\r\n font-size: 1.5rem;\r\n line-height: 2rem;\r\n }\r\n .text-3xl {\r\n font-size: 1.875rem;\r\n line-height: 2.25rem;\r\n }\r\n .text-4xl {\r\n font-size: 2rem;\r\n line-height: 2.5rem;\r\n }\r\n .text-5xl {\r\n font-size: 2.25rem;\r\n line-height: 2.5rem;\r\n }\r\n .font-bold {\r\n font-weight: 700;\r\n }\r\n .font-semibold {\r\n font-weight: 600;\r\n }\r\n .font-medium {\r\n font-weight: 500;\r\n }\r\n .font-normal {\r\n font-weight: 400;\r\n }\r\n`;\r\n\r\nexport default typography;\r\n","import typography from './typography';\r\n\r\nconst styles = (\r\n themeColor,\r\n) => `<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" />\r\n<link\r\n href=\"https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&display=swap\"\r\n rel=\"stylesheet\"\r\n as=\"style\"\r\n/>\r\n<style>\r\n${typography}\r\n:host {\r\n --theme-color: ${themeColor || '#001096'};\r\n --color-active: #001096;\r\n --color-default: #2d2b2a;\r\n --color-disabled: #848282;\r\n --web-digital-blue: #001096;\r\n }\r\n\r\n * {\r\n font-family: \"DM Sans\", sans-serif;\r\n }\r\n\r\n [hidden] {\r\n display: none !important;\r\n }\r\n\r\n [disabled] {\r\n cursor: not-allowed !important;\r\n filter: grayscale(75%);\r\n }\r\n\r\n .visually-hidden {\r\n border: 0;\r\n clip: rect(1px 1px 1px 1px);\r\n clip: rect(1px, 1px, 1px, 1px);\r\n height: auto;\r\n margin: 0;\r\n overflow: hidden;\r\n padding: 0;\r\n position: absolute;\r\n white-space: nowrap;\r\n width: 1px;\r\n }\r\n\r\n img {\r\n height: auto;\r\n max-width: 100%;\r\n }\r\n\r\n video {\r\n background-color: black;\r\n }\r\n\r\n a {\r\n color: currentColor;\r\n text-decoration: none;\r\n }\r\n\r\n svg {\r\n max-width: 100%;\r\n }\r\n\r\n .color-gray {\r\n color: #797979;\r\n }\r\n\r\n .color-red {\r\n color: red;\r\n }\r\n\r\n .color-richblue {\r\n color: #4e6577;\r\n }\r\n\r\n .color-richblue-shade {\r\n color: #0e1b42;\r\n }\r\n\r\n .color-digital-blue {\r\n color: var(--web-digital-blue) !important;\r\n }\r\n\r\n .color-deep-blue {\r\n color: #001096;\r\n }\r\n\r\n .title-color {\r\n color: ${themeColor || '#001096'};\r\n }\r\n \r\n .theme-color {\r\n color: ${themeColor || '#001096'};\r\n }\r\n\r\n .center {\r\n text-align: center;\r\n margin-left: auto;\r\n margin-right: auto;\r\n }\r\n\r\n .font-size-small {\r\n font-size: 0.75rem;\r\n }\r\n\r\n .font-size-large {\r\n font-size: 1.5rem;\r\n }\r\n\r\n .text-transform-uppercase {\r\n text-transform: uppercase;\r\n }\r\n\r\n [id*=-\"screen\"] {\r\n min-block-size: 100%;\r\n }\r\n\r\n [data-variant~=\"full-width\"] {\r\n inline-size: 100%;\r\n }\r\n\r\n .flow > * + * {\r\n margin-top: var(--flow-space, 1rem);\r\n }\r\n\r\n .button {\r\n --button-color: ${themeColor || 'var(--active-color)'};\r\n -webkit-appearance: none;\r\n appearance: none;\r\n border-radius: 2.5rem;\r\n border: 0;\r\n background-color: transparent;\r\n color: #fff;\r\n cursor: pointer;\r\n display: block;\r\n font-size: 18px;\r\n font-weight: 600;\r\n padding: 0.75rem 1.5rem;\r\n text-align: center;\r\n }\r\n\r\n .button:hover,\r\n .button:focus,\r\n .button:active {\r\n --button-color: var(--color-default);\r\n }\r\n\r\n .button:disabled {\r\n --button-color: var(--color-disabled);\r\n }\r\n\r\n .button[data-variant~=\"solid\"] {\r\n background-color: var(--button-color);\r\n border: 2px solid var(--button-color);\r\n }\r\n\r\n .button[data-variant~=\"outline\"] {\r\n color: var(--button-color);\r\n border: 2px solid var(--button-color);\r\n }\r\n\r\n .button[data-variant~=\"ghost\"] {\r\n padding: 0px;\r\n color: var(--button-color);\r\n background-color: transparent;\r\n }\r\n\r\n .icon-btn {\r\n appearance: none;\r\n background: none;\r\n border: none;\r\n color: hsl(0deg 0% 94%);\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 4px 8px;\r\n }\r\n .justify-right {\r\n justify-content: end !important;\r\n }\r\n .nav {\r\n display: flex;\r\n justify-content: space-between;\r\n }\r\n\r\n .back-wrapper {\r\n display: flex;\r\n align-items: center;\r\n }\r\n\r\n .back-button-text {\r\n font-size: 11px;\r\n line-height: 11px;\r\n color: rgb(21, 31, 114);\r\n }\r\n\r\n\r\n .selfie-capture-review-image {\r\n overflow: hidden;\r\n aspect-ratio: 1/1;\r\n }\r\n\r\n #review-image {\r\n scale: 1.75;\r\n }\r\n\r\n @media (max-aspect-ratio: 1/1) {\r\n #review-image {\r\n transform: scaleX(-1) translateY(-10%);\r\n }\r\n }\r\n\r\n .tips,\r\n .powered-by {\r\n align-items: center;\r\n border-radius: 0.25rem;\r\n color: #4e6577;\r\n display: flex;\r\n justify-content: center;\r\n letter-spacing: 0.075em;\r\n }\r\n\r\n .powered-by {\r\n box-shadow: 0px 2.57415px 2.57415px rgba(0, 0, 0, 0.06);\r\n display: inline-flex;\r\n font-size: 0.5rem;\r\n }\r\n\r\n .tips {\r\n margin-left: auto;\r\n margin-right: auto;\r\n max-width: 17rem;\r\n }\r\n\r\n .tips > * + *,\r\n .powered-by > * + * {\r\n display: inline-block;\r\n margin-left: 0.5em;\r\n }\r\n\r\n .powered-by .company {\r\n color: #18406d;\r\n font-weight: 700;\r\n letter-spacing: 0.15rem;\r\n }\r\n\r\n .logo-mark {\r\n background-color: #004071;\r\n display: inline-block;\r\n padding: 0.25em 0.5em;\r\n }\r\n\r\n .logo-mark svg {\r\n height: auto;\r\n justify-self: center;\r\n width: 0.75em;\r\n }\r\n\r\n #document-capture-instructions-screen,\r\n #back-of-document-capture-instructions-screen {\r\n padding-block: 2rem;\r\n display: flex;\r\n flex-direction: column;\r\n max-block-size: 100%;\r\n max-inline-size: 40ch;\r\n justify-content: space-between;\r\n }\r\n\r\n #document-capture-instructions-screen header p {\r\n margin-block: 0 !important;\r\n }\r\n\r\n .description {\r\n color: var(--neutral-off-black, #2D2B2A);\r\n text-align: center;\r\n\r\n /* p */\r\n font-family: DM Sans;\r\n font-size: 0.875rem;\r\n font-style: normal;\r\n font-weight: 400;\r\n line-height: 18px;\r\n }\r\n\r\n .padding-bottom-2 {\r\n padding-bottom: 2rem;\r\n }\r\n\r\n .instructions-wrapper {\r\n display: inline-flex;\r\n flex-direction: column;\r\n gap: 1.5rem;\r\n margin-block-start: 2rem;\r\n margin-block-end: 2rem;\r\n }\r\n .instructions {\r\n display: flex;\r\n align-items: center;\r\n text-align: initial;\r\n }\r\n\r\n .instructions svg {\r\n flex-shrink: 0;\r\n margin-inline-end: 2rem;\r\n }\r\n\r\n .instructions p {\r\n margin-block: 0;\r\n }\r\n\r\n .instruction {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 0.5rem;\r\n }\r\n\r\n .instruction-body {\r\n font-size: 0.75rem;\r\n }\r\n\r\n .instruction-header {\r\n color: ${themeColor};\r\n }\r\n\r\n .flex-column {\r\n display: flex;\r\n flex-direction: column;\r\n }\r\n\r\n @keyframes spin {\r\n 0% {\r\n transform: translate3d(-50%, -50%, 0) rotate(0deg);\r\n }\r\n 100% {\r\n transform: translate3d(-50%, -50%, 0) rotate(360deg);\r\n }\r\n}\r\n\r\n.spinner {\r\n animation: 1.5s linear infinite spin;\r\n animation-play-state: inherit;\r\n border: solid 5px #cfd0d1;\r\n border-bottom-color: var(--color-active);\r\n border-radius: 50%;\r\n content: \"\";\r\n display: block;\r\n height: 25px;\r\n width: 25px;\r\n will-change: transform;\r\n position: relative;\r\n top: .675rem;\r\n left: 1.25rem;\r\n }\r\n\r\n</style>`;\r\n\r\nexport default styles;\r\n"],"names":["typography","styles","themeColor"],"mappings":"AAAA,MAAMA,IAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GCEbC,IAAS,CACbC,MACG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOHF,CAAU;AAAA;AAAA,qBAESE,KAAc,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aA4E/BA,KAAc,SAAS;AAAA;AAAA;AAAA;AAAA,aAIvBA,KAAc,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAkCdA,KAAc,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAoM5CA,CAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|