@smileid/web-components 11.4.5 → 11.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/DocumentCaptureScreens-DjSTdVP-.js +5398 -0
- package/dist/esm/DocumentCaptureScreens-DjSTdVP-.js.map +1 -0
- package/dist/esm/{Navigation-Bb7MPLE8.js → Navigation-6DH3vF4-.js} +28 -22
- package/dist/esm/Navigation-6DH3vF4-.js.map +1 -0
- package/dist/esm/{PoweredBySmileId-CxbaihMu.js → PoweredBySmileId-DoKwoPUd.js} +424 -6
- package/dist/esm/PoweredBySmileId-DoKwoPUd.js.map +1 -0
- package/dist/esm/SelfieCaptureScreens-CtX-4Tco.js +11470 -0
- package/dist/esm/SelfieCaptureScreens-CtX-4Tco.js.map +1 -0
- package/dist/esm/combobox.js +1 -1
- package/dist/esm/document.js +1 -1
- package/dist/esm/end-user-consent.js +713 -2
- package/dist/esm/end-user-consent.js.map +1 -1
- package/dist/esm/index-BqyuTk9f.js +1366 -0
- package/dist/esm/{index-C4RTMbgw.js.map → index-BqyuTk9f.js.map} +1 -1
- package/dist/esm/localisation.js +1 -1
- package/dist/esm/main.js +14 -14
- package/dist/esm/navigation.js +1 -1
- package/dist/esm/package-CjZI-cNQ.js +2540 -0
- package/dist/esm/package-CjZI-cNQ.js.map +1 -0
- package/dist/esm/selfie.js +1 -1
- package/dist/esm/smart-camera-web.js +81 -37
- package/dist/esm/smart-camera-web.js.map +1 -1
- package/dist/esm/totp-consent.js +731 -2
- package/dist/esm/totp-consent.js.map +1 -1
- package/dist/esm/validate.js +31 -0
- package/dist/esm/validate.js.map +1 -0
- package/dist/smart-camera-web.js +1513 -383
- package/dist/smart-camera-web.js.map +1 -1
- package/dist/types/main.d.ts +18 -1
- package/dist/types/validate.d.ts +21 -0
- package/lib/components/document/src/DocumentCaptureScreens.js +97 -18
- package/lib/components/document/src/assets/lottie.d.ts +12 -0
- package/lib/components/document/src/assets/svg-inline.d.ts +8 -0
- package/lib/components/document/src/document-auto-capture/DocumentAutoCapture.stories.js +75 -0
- package/lib/components/document/src/document-auto-capture/DocumentAutoCapture.tsx +1458 -0
- package/lib/components/document/src/document-auto-capture/README.md +73 -0
- package/lib/components/document/src/document-auto-capture/assets/Greenbook_Shimmer.svg +42 -0
- package/lib/components/document/src/document-auto-capture/assets/ID_Back_Shimmer.svg +8 -0
- package/lib/components/document/src/document-auto-capture/assets/ID_Front_Shimmer.svg +20 -0
- package/lib/components/document/src/document-auto-capture/assets/Passport-Shimmer.svg +143 -0
- package/lib/components/document/src/document-auto-capture/assets/shimmers.ts +21 -0
- package/lib/components/document/src/document-auto-capture/assets/svg-raw.d.ts +4 -0
- package/lib/components/document/src/document-auto-capture/components/CaptureButton.tsx +122 -0
- package/lib/components/document/src/document-auto-capture/components/Overlay.tsx +167 -0
- package/lib/components/document/src/document-auto-capture/components/TuningPanel.tsx +856 -0
- package/lib/components/document/src/document-auto-capture/constants/captureLayout.ts +58 -0
- package/lib/components/document/src/document-auto-capture/detection/cvErrorRecovery.ts +40 -0
- package/lib/components/document/src/document-auto-capture/detection/documentAspect.ts +20 -0
- package/lib/components/document/src/document-auto-capture/detection/qualityScoring.ts +35 -0
- package/lib/components/document/src/document-auto-capture/detection/seamRejection.ts +209 -0
- package/lib/components/document/src/document-auto-capture/detection/synthesisTiming.ts +10 -0
- package/lib/components/document/src/document-auto-capture/hooks/useCamera.ts +117 -0
- package/lib/components/document/src/document-auto-capture/hooks/useCardDetection.ts +3059 -0
- package/lib/components/document/src/document-auto-capture/index.ts +4 -0
- package/lib/components/document/src/document-auto-capture/theme.ts +40 -0
- package/lib/components/document/src/document-auto-capture/utils/debug.ts +25 -0
- package/lib/components/document/src/document-auto-capture/utils/opencvLoader.ts +86 -0
- package/lib/components/document/src/document-capture-instructions/DocumentCaptureInstructions.tsx +327 -244
- package/lib/components/document/src/document-capture-review/DocumentCaptureReview.js +153 -189
- package/lib/components/document/src/document-capture-submission/DocumentCaptureSubmission.tsx +432 -0
- package/lib/components/document/src/document-capture-submission/index.js +3 -0
- package/lib/components/navigation/src/Navigation.js +27 -8
- package/lib/components/selfie/README.md +13 -0
- package/lib/components/selfie/src/SelfieCaptureScreens.js +56 -8
- package/lib/components/selfie/src/enhanced-smartselfie-capture/EnhancedSmartSelfieCapture.tsx +684 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/EnhancedSmartSelfieConsent.tsx +71 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/EnhancedSmartSelfieSubmission.tsx +181 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/OvalProgress.tsx +87 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/assets/Icon.svg +8 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/assets/accessories.svg +77 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/assets/active_liveness_animation.lottie +0 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/assets/device.svg +12 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/assets/device_orientation.lottie +0 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/assets/good.svg +52 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/assets/id-card.svg +9 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/assets/illustrations.tsx +852 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/assets/instructions-img.svg +3 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/assets/multiple-faces.svg +69 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/assets/person.svg +6 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/assets/phone.svg +8 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/assets/poor-lighting.svg +53 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/assets/too_dark_animation.lottie +0 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/components/ActiveLivenessOverlay.tsx +226 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/components/AlertDisplay.tsx +38 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/components/BackNavigation.tsx +45 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/components/CameraPreview.tsx +96 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/components/CaptureControls.tsx +97 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/components/CaptureGuidelines.tsx +374 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/components/ConsentView.tsx +460 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/components/SubmissionView.tsx +426 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/components/index.ts +3 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/constants.ts +23 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/hooks/index.ts +2 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/hooks/useCamera.ts +238 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/hooks/useFaceCapture.ts +1075 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/index.ts +1 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/utils/alertMessages.ts +20 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/utils/canvas.ts +108 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/utils/faceDetection.ts +545 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/utils/imageCapture.ts +66 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/utils/imageQuality.ts +151 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/utils/index.ts +5 -0
- package/lib/components/selfie/src/enhanced-smartselfie-capture/utils/mediapipeManager.ts +215 -0
- package/lib/components/selfie/src/selfie-capture-wrapper/SelfieCaptureWrapper.tsx +24 -1
- package/lib/components/selfie/src/smartselfie-capture/SmartSelfieCapture.tsx +2 -2
- package/lib/components/selfie/src/smartselfie-capture/hooks/useFaceCapture.ts +15 -7
- package/lib/components/selfie/src/smartselfie-capture/utils/canvas.ts +4 -6
- package/lib/components/signature-pad/package.json +1 -1
- package/lib/components/smart-camera-web/src/README.md +11 -0
- package/lib/components/smart-camera-web/src/SmartCameraWeb.js +89 -8
- package/lib/components/totp-consent/src/TotpConsent.js +1 -1
- package/lib/domain/localisation/index.js +2 -2
- package/package.json +9 -5
- package/dist/esm/DocumentCaptureScreens-D2G0NOQr.js +0 -4147
- package/dist/esm/DocumentCaptureScreens-D2G0NOQr.js.map +0 -1
- package/dist/esm/EndUserConsent-uHfA3txP.js +0 -717
- package/dist/esm/EndUserConsent-uHfA3txP.js.map +0 -1
- package/dist/esm/Navigation-Bb7MPLE8.js.map +0 -1
- package/dist/esm/PoweredBySmileId-CxbaihMu.js.map +0 -1
- package/dist/esm/SelfieCaptureScreens-Dr7VzON7.js +0 -7651
- package/dist/esm/SelfieCaptureScreens-Dr7VzON7.js.map +0 -1
- package/dist/esm/TotpConsent-Depzg0ti.js +0 -734
- package/dist/esm/TotpConsent-Depzg0ti.js.map +0 -1
- package/dist/esm/index-C4RTMbgw.js +0 -1360
- package/dist/esm/package-D6YrpMcO.js +0 -565
- package/dist/esm/package-D6YrpMcO.js.map +0 -1
- package/dist/esm/styles-BTEClL7R.js +0 -419
- package/dist/esm/styles-BTEClL7R.js.map +0 -1
- /package/lib/components/document/src/assets/lottie/{taking photo of green book passport.lottie → greenbook.lottie} +0 -0
- /package/lib/components/document/src/assets/lottie/{taking photo of ID FLIP 2D.lottie → id-card-flip.lottie} +0 -0
- /package/lib/components/document/src/assets/lottie/{taking photo of ID.lottie → id-card.lottie} +0 -0
- /package/lib/components/document/src/assets/lottie/{taking photo of passport 2.lottie → passport.lottie} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"totp-consent.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
1
|
+
{"version":3,"file":"totp-consent.js","sources":["../../lib/components/totp-consent/src/TotpConsent.js"],"sourcesContent":["import validate from '../../../utils/validate';\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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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
function g(e) {
|
|
2
|
+
return e == null || typeof e == "string" && /^\s*$/.test(e);
|
|
3
|
+
}
|
|
4
|
+
function u(e) {
|
|
5
|
+
return e.replace(/_/g, " ").replace(/([a-z])([A-Z])/g, "$1 $2").toLowerCase().replace(/^./, (n) => n.toUpperCase());
|
|
6
|
+
}
|
|
7
|
+
function i(e, n) {
|
|
8
|
+
return n && n[0] === "^" ? n.slice(1) : `${u(e)} ${n}`;
|
|
9
|
+
}
|
|
10
|
+
function h(e, n) {
|
|
11
|
+
const l = {};
|
|
12
|
+
return Object.keys(n).forEach((s) => {
|
|
13
|
+
const o = e[s], r = n[s], c = [];
|
|
14
|
+
Object.keys(r).forEach((f) => {
|
|
15
|
+
if (f === "presence")
|
|
16
|
+
(r.presence.allowEmpty !== !1 ? o == null : g(o)) && c.push(
|
|
17
|
+
i(s, r.presence.message || "can't be blank")
|
|
18
|
+
);
|
|
19
|
+
else if (f === "format" && o != null) {
|
|
20
|
+
const t = r.format, p = t instanceof RegExp || typeof t == "string" ? t : t.pattern, a = (p instanceof RegExp ? p : new RegExp(p)).exec(o);
|
|
21
|
+
(!a || a[0].length !== String(o).length) && c.push(
|
|
22
|
+
i(s, t && t.message || "is invalid")
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
}), c.length && (l[s] = c);
|
|
26
|
+
}), Object.keys(l).length ? l : void 0;
|
|
27
|
+
}
|
|
28
|
+
export {
|
|
29
|
+
h as default
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sources":["../../lib/utils/validate.js"],"sourcesContent":["// Minimal drop-in replacement for the (archived) validate.js package.\n// We only ever used the `presence` and `format` validators, so this\n// implements exactly those with the same `{ field: [message] }` output\n// shape, including validate.js's `^` message convention and field-name\n// humanizing. Dropping the dependency clears advisory GHSA-rv73-9c8w-jp4c\n// (a ReDoS in validate.js's built-in email/url/date regexes, which we\n// never invoked).\n// Scope is intentionally limited to `presence` and `format` — the only\n// validators this codebase uses.\n\nfunction isEmpty(value) {\n return value == null || (typeof value === 'string' && /^\\s*$/.test(value));\n}\n\nfunction prettify(attr) {\n return attr\n .replace(/_/g, ' ')\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .toLowerCase()\n .replace(/^./, (c) => c.toUpperCase());\n}\n\nfunction formatMessage(attr, message) {\n // A leading `^` means \"use the message verbatim\" (no field-name prefix).\n if (message && message[0] === '^') return message.slice(1);\n return `${prettify(attr)} ${message}`;\n}\n\nexport default function validate(values, constraints) {\n const errors = {};\n\n Object.keys(constraints).forEach((attr) => {\n const value = values[attr];\n const rules = constraints[attr];\n const messages = [];\n\n // Run validators in the constraint's own key order — validate.js 0.13.1\n // preserves that order in its error array, and callers read errors[0].\n Object.keys(rules).forEach((rule) => {\n if (rule === 'presence') {\n // allowEmpty !== false ? fail only if null/undefined : fail if empty.\n const allowEmpty = rules.presence.allowEmpty !== false;\n if (allowEmpty ? value == null : isEmpty(value)) {\n messages.push(\n formatMessage(attr, rules.presence.message || \"can't be blank\"),\n );\n }\n } else if (rule === 'format' && value != null) {\n // validate.js 0.13.1 runs `format` on empty strings but skips\n // null/undefined (only `presence` catches those).\n const opts = rules.format;\n const pattern =\n opts instanceof RegExp || typeof opts === 'string'\n ? opts\n : opts.pattern;\n const regex = pattern instanceof RegExp ? pattern : new RegExp(pattern);\n const match = regex.exec(value);\n // validate.js requires the whole string to match.\n if (!match || match[0].length !== String(value).length) {\n messages.push(\n formatMessage(attr, (opts && opts.message) || 'is invalid'),\n );\n }\n }\n });\n\n if (messages.length) errors[attr] = messages;\n });\n\n return Object.keys(errors).length ? errors : undefined;\n}\n"],"names":["isEmpty","value","prettify","attr","c","formatMessage","message","validate","values","constraints","errors","rules","messages","rule","opts","pattern","match"],"mappings":"AAUA,SAASA,EAAQC,GAAO;AACtB,SAAOA,KAAS,QAAS,OAAOA,KAAU,YAAY,QAAQ,KAAKA,CAAK;AAC1E;AAEA,SAASC,EAASC,GAAM;AACtB,SAAOA,EACJ,QAAQ,MAAM,GAAG,EACjB,QAAQ,mBAAmB,OAAO,EAClC,YAAW,EACX,QAAQ,MAAM,CAACC,MAAMA,EAAE,YAAW,CAAE;AACzC;AAEA,SAASC,EAAcF,GAAMG,GAAS;AAEpC,SAAIA,KAAWA,EAAQ,CAAC,MAAM,MAAYA,EAAQ,MAAM,CAAC,IAClD,GAAGJ,EAASC,CAAI,CAAC,IAAIG,CAAO;AACrC;AAEe,SAASC,EAASC,GAAQC,GAAa;AACpD,QAAMC,IAAS,CAAA;AAEf,gBAAO,KAAKD,CAAW,EAAE,QAAQ,CAACN,MAAS;AACzC,UAAMF,IAAQO,EAAOL,CAAI,GACnBQ,IAAQF,EAAYN,CAAI,GACxBS,IAAW,CAAA;AAIjB,WAAO,KAAKD,CAAK,EAAE,QAAQ,CAACE,MAAS;AACnC,UAAIA,MAAS;AAGX,SADmBF,EAAM,SAAS,eAAe,KAChCV,KAAS,OAAOD,EAAQC,CAAK,MAC5CW,EAAS;AAAA,UACPP,EAAcF,GAAMQ,EAAM,SAAS,WAAW,gBAAgB;AAAA,QAC1E;AAAA,eAEiBE,MAAS,YAAYZ,KAAS,MAAM;AAG7C,cAAMa,IAAOH,EAAM,QACbI,IACJD,aAAgB,UAAU,OAAOA,KAAS,WACtCA,IACAA,EAAK,SAELE,KADQD,aAAmB,SAASA,IAAU,IAAI,OAAOA,CAAO,GAClD,KAAKd,CAAK;AAE9B,SAAI,CAACe,KAASA,EAAM,CAAC,EAAE,WAAW,OAAOf,CAAK,EAAE,WAC9CW,EAAS;AAAA,UACPP,EAAcF,GAAOW,KAAQA,EAAK,WAAY,YAAY;AAAA,QACtE;AAAA,MAEM;AAAA,IACF,CAAC,GAEGF,EAAS,WAAQF,EAAOP,CAAI,IAAIS;AAAA,EACtC,CAAC,GAEM,OAAO,KAAKF,CAAM,EAAE,SAASA,IAAS;AAC/C;"}
|