@smileid/web-components 11.4.0 → 11.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/dist/esm/DocumentCaptureScreens-zEVFc_Kr.js +4147 -0
  2. package/dist/esm/DocumentCaptureScreens-zEVFc_Kr.js.map +1 -0
  3. package/dist/esm/{EndUserConsent-BGO3oZ-m.js → EndUserConsent-BXvS7t8z.js} +4 -4
  4. package/dist/esm/{EndUserConsent-BGO3oZ-m.js.map → EndUserConsent-BXvS7t8z.js.map} +1 -1
  5. package/dist/esm/Navigation-BRFmg7s1.js +138 -0
  6. package/dist/esm/Navigation-BRFmg7s1.js.map +1 -0
  7. package/dist/esm/{SelfieCaptureScreens-bmwnmeS9.js → SelfieCaptureScreens-DsFp21uW.js} +2520 -2906
  8. package/dist/esm/SelfieCaptureScreens-DsFp21uW.js.map +1 -0
  9. package/dist/esm/{TotpConsent-V3_Ip2Kw.js → TotpConsent-Cn2DkVza.js} +2 -2
  10. package/dist/esm/{TotpConsent-V3_Ip2Kw.js.map → TotpConsent-Cn2DkVza.js.map} +1 -1
  11. package/dist/esm/combobox.js +14 -16
  12. package/dist/esm/combobox.js.map +1 -1
  13. package/dist/esm/document.js +1 -1
  14. package/dist/esm/end-user-consent.js +1 -1
  15. package/dist/esm/{index-Dnpp-kwk.js → index-DBUdxnp9.js} +57 -57
  16. package/dist/esm/{index-Dnpp-kwk.js.map → index-DBUdxnp9.js.map} +1 -1
  17. package/dist/esm/localisation.js +1 -1
  18. package/dist/esm/main.js +6 -6
  19. package/dist/esm/navigation.js +1 -1
  20. package/dist/esm/package-Do9oHVnx.js +565 -0
  21. package/dist/esm/package-Do9oHVnx.js.map +1 -0
  22. package/dist/esm/selfie.js +1 -1
  23. package/dist/esm/smart-camera-web.js +16 -11
  24. package/dist/esm/smart-camera-web.js.map +1 -1
  25. package/dist/esm/{styles-BOEZtbuc.js → styles-BTEClL7R.js} +2 -2
  26. package/dist/esm/{styles-BOEZtbuc.js.map → styles-BTEClL7R.js.map} +1 -1
  27. package/dist/esm/totp-consent.js +1 -1
  28. package/dist/smart-camera-web.js +445 -178
  29. package/dist/smart-camera-web.js.map +1 -1
  30. package/dist/types/main.d.ts +186 -33
  31. package/lib/components/combobox/src/Combobox.js +14 -12
  32. package/lib/components/document/src/DocumentCaptureScreens.js +15 -5
  33. package/lib/components/document/src/assets/icons/guidelines/greenbook/good.svg +77 -0
  34. package/lib/components/document/src/assets/icons/guidelines/greenbook/not-blurry.svg +84 -0
  35. package/lib/components/document/src/assets/icons/guidelines/greenbook/not-cropped.svg +83 -0
  36. package/lib/components/document/src/assets/icons/guidelines/greenbook/not-reflective.svg +89 -0
  37. package/lib/components/document/src/assets/icons/guidelines/id-card/good.svg +87 -0
  38. package/lib/components/document/src/assets/icons/guidelines/id-card/not-blurry.svg +100 -0
  39. package/lib/components/document/src/assets/icons/guidelines/id-card/not-cropped.svg +93 -0
  40. package/lib/components/document/src/assets/icons/guidelines/id-card/not-reflective.svg +98 -0
  41. package/lib/components/document/src/assets/icons/guidelines/passport/good.svg +91 -0
  42. package/lib/components/document/src/assets/icons/guidelines/passport/not-blurry.svg +109 -0
  43. package/lib/components/document/src/assets/icons/guidelines/passport/not-cropped.svg +102 -0
  44. package/lib/components/document/src/assets/icons/guidelines/passport/not-reflective.svg +207 -0
  45. package/lib/components/document/src/assets/lottie/taking photo of ID FLIP 2D.lottie +0 -0
  46. package/lib/components/document/src/assets/lottie/taking photo of ID.lottie +0 -0
  47. package/lib/components/document/src/assets/lottie/taking photo of green book passport.lottie +0 -0
  48. package/lib/components/document/src/assets/lottie/taking photo of passport 2.lottie +0 -0
  49. package/lib/components/document/src/document-capture-instructions/DocumentCaptureInstructions.stories.js +123 -12
  50. package/lib/components/document/src/document-capture-instructions/DocumentCaptureInstructions.tsx +808 -0
  51. package/lib/components/document/src/document-capture-instructions/index.js +1 -0
  52. package/lib/components/navigation/src/Navigation.js +57 -56
  53. package/lib/components/navigation/src/Navigation.stories.js +7 -0
  54. package/lib/components/selfie/src/selfie-capture-wrapper/SelfieCaptureWrapper.tsx +113 -8
  55. package/lib/components/selfie/src/smartselfie-capture/utils/mediapipeManager.ts +65 -0
  56. package/lib/components/signature-pad/package-lock.json +11 -9
  57. package/lib/components/signature-pad/package.json +2 -2
  58. package/lib/components/smart-camera-web/src/SmartCameraWeb.js +7 -1
  59. package/lib/styles/src/styles.js +1 -1
  60. package/package.json +4 -3
  61. package/dist/README.md +0 -15
  62. package/dist/components/README.md +0 -14
  63. package/dist/components/document/src/README.md +0 -111
  64. package/dist/components/document/src/document-capture/README.md +0 -90
  65. package/dist/components/document/src/document-capture-instructions/README.md +0 -56
  66. package/dist/components/document/src/document-capture-review/README.md +0 -79
  67. package/dist/components/selfie/README.md +0 -225
  68. package/dist/components/smart-camera-web/src/README.md +0 -206
  69. package/dist/domain/camera/src/README.md +0 -38
  70. package/dist/domain/file-upload/README.md +0 -35
  71. package/dist/esm/DocumentCaptureScreens-DbU8ZxMx.js +0 -1580
  72. package/dist/esm/DocumentCaptureScreens-DbU8ZxMx.js.map +0 -1
  73. package/dist/esm/Navigation-DH44dkMT.js +0 -144
  74. package/dist/esm/Navigation-DH44dkMT.js.map +0 -1
  75. package/dist/esm/SelfieCaptureScreens-bmwnmeS9.js.map +0 -1
  76. package/dist/esm/package-7J5h4EOW.js +0 -90
  77. package/dist/esm/package-7J5h4EOW.js.map +0 -1
  78. package/dist/package-lock.json +0 -4948
  79. package/dist/package.json +0 -59
  80. package/dist/smart-camera-web.js.gz +0 -0
  81. package/dist/src/components/combobox/src/index.js +0 -425
  82. package/dist/src/components/combobox/src/index.js.map +0 -7
  83. package/dist/src/components/document/src/index.js +0 -1423
  84. package/dist/src/components/document/src/index.js.map +0 -7
  85. package/dist/src/components/end-user-consent/src/index.js +0 -1586
  86. package/dist/src/components/end-user-consent/src/index.js.map +0 -7
  87. package/dist/src/components/selfie/src/index.js +0 -1221
  88. package/dist/src/components/selfie/src/index.js.map +0 -7
  89. package/dist/src/components/signature-pad/src/index.js +0 -796
  90. package/dist/src/components/signature-pad/src/index.js.map +0 -7
  91. package/dist/src/components/smart-camera-web/src/SmartCameraWeb.js +0 -2754
  92. package/dist/src/components/smart-camera-web/src/SmartCameraWeb.js.map +0 -7
  93. package/dist/src/components/totp-consent/src/index.js +0 -1305
  94. package/dist/src/components/totp-consent/src/index.js.map +0 -7
  95. package/dist/src/index.js.map +0 -7
  96. package/dist/styles/README.md +0 -3
  97. package/dist/types/document-auto-capture.d.ts +0 -34
  98. package/dist/types/locale.d.ts +0 -19
@@ -1,5 +1,5 @@
1
1
  import d from "validate.js";
2
- import { b as l } from "./index-Dnpp-kwk.js";
2
+ import { b as l } from "./index-DBUdxnp9.js";
3
3
  function a(n, t) {
4
4
  return fetch(n, {
5
5
  body: JSON.stringify(t),
@@ -731,4 +731,4 @@ class h extends HTMLElement {
731
731
  export {
732
732
  h as T
733
733
  };
734
- //# sourceMappingURL=TotpConsent-V3_Ip2Kw.js.map
734
+ //# sourceMappingURL=TotpConsent-Cn2DkVza.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TotpConsent-V3_Ip2Kw.js","sources":["../../lib/components/totp-consent/src/TotpConsent.js"],"sourcesContent":["import validate from 'validate.js';\nimport { getDirection } from '../../../domain/localisation';\n\nfunction postData(url, data) {\n return fetch(url, {\n body: JSON.stringify(data),\n cache: 'no-cache',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n mode: 'cors',\n });\n}\n\nfunction markup() {\n return `\n <style>\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n }\n\n :host {\n --flow-space: 1.5rem;\n\n --color-dark: #404040;\n --color-grey: #555B69;\n\n --color-success: #1EB244;\n --color-failure: #FFEDEB;\n --color-failure-tint: #F86B58;\n\n --color-richblue: #043C93;\n --color-theme: ${this.themeColor};\n\n --color-active: #2D2B2A;\n --color-default: #001096;\n --color-disabled: #848282;\n }\n\n html {\n font-family: 'DM Sans', sans-serif;\n }\n\n [hidden] {\n display: none !important;\n }\n\n [disabled] {\n cursor: not-allowed !important;\n }\n\n .visually-hidden {\n border: 0;\n clip: rect(1px 1px 1px 1px);\n clip: rect(1px, 1px, 1px, 1px);\n height: auto;\n margin: 0;\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n width: 1px;\n }\n\n .color-dark {\n color: var(--color-dark);\n }\n\n .color-grey {\n color: var(--color-grey);\n }\n\n .flow > * + * {\n margin-top: var(--flow-space);\n }\n\n .center {\n margin-left: auto;\n margin-right: auto;\n\n text-align: center;\n }\n\n h1 {\n font-size: 1.5rem;\n font-weight: 700;\n }\n\n button, input, select, textarea {\n font: inherit\n }\n\n label,\n input,\n select,\n textarea {\n --flow-space: .5rem;\n display: block;\n width: 100%;\n }\n\n input,\n select,\n textarea {\n border: 1px solid #d1d8d6;\n border-radius: .5rem;\n padding: .75rem 1rem;\n }\n\n button {\n --button-color: var(--color-default);\n --flow-space: 3rem;\n -webkit-appearance: none;\n -moz-appearance: none;\n align-items: center;\n appearance: none;\n background-color: transparent;\n border-radius: 2.5rem;\n border: none;\n color: #ffffff;\n cursor: pointer;\n display: inline-flex;\n font-size: 20px;\n font-weight: 500;\n inline-size: 100%;\n justify-content: center;\n letter-spacing: .05ch;\n line-height: 1;\n padding: 1rem 2.5rem;\n text-align: center;\n text-decoration: none;\n }\n\n button[data-variant='solid'] {\n background-color: var(--button-color);\n border: 2px solid var(--button-color);\n }\n\n button[data-variant='outline'] {\n color: var(--button-color);\n border: 2px solid var(--button-color);\n }\n\n button[data-variant='ghost'] {\n color: var(--button-color);\n }\n\n button:hover,\n button:focus,\n button:active {\n --button-color: var(--color-active);\n }\n\n button:disabled {\n --button-color: var(--color-disabled);\n }\n\n button[data-type='icon'] {\n height: 2rem;\n padding: 0;\n width: 2rem;\n background: transparent;\n }\n\n input {\n font: inherit;\n }\n\n fieldset {\n margin: 0;\n border: none;\n }\n\n .font-weight:bold {\n font-weight: bold;\n }\n\n .justify-right {\n justify-content: end !important;\n }\n .nav {\n display: flex;\n justify-content: space-between;\n }\n\n .back-wrapper {\n display: flex;\n align-items: center;\n }\n\n .back-button-text {\n font-size: 11px;\n line-height: 11px;\n color: ${this.themeColor || 'rgb(21, 31, 114)'};\n }\n\n #error,\n .validation-message {\n color: red;\n text-transform: capitalize;\n }\n\n .input-group {\n --flow-space: 1.5rem;\n text-align: initial;\n }\n\n .input-radio {\n --flow-space: 1.5rem;\n background-color: #F8F8F8;\n border-radius: .5rem;\n padding: .625rem 1rem;\n display: flex;\n align-items: center;\n }\n\n .otp-mode {\n display: flex;\n align-items: center;\n text-align: initial;\n }\n\n .otp-mode :first-child {\n margin: 0;\n margin-inline-end: 1rem;\n }\n\n .otp-mode :nth-child(2n) {\n --flow-space: .5rem;\n }\n\n .input-radio [type='radio'] {\n border-radius: 50%;\n inline-size: 2rem;\n block-size: 2rem;\n margin-inline-end: .5rem;\n background-color: white;\n border: .125rem solid #f5f5f5;\n }\n\n #totp-token {\n block-size: 3rem;\n inline-size: 20rem;\n max-inline-size: 100%;\n background-color: #F5F5F5;\n border: none;\n border-bottom: 2px solid #2F718D;\n font-size: 1.5rem;\n text-align: center;\n font-weight: 700;\n letter-spacing: 2rem;\n padding: .5rem 1rem;\n margin-inline: auto;\n }\n\n @keyframes spin {\n 0% {\n transform: translate3d(-50%, -50%, 0) rotate(0deg);\n }\n 100% {\n transform: translate3d(-50%, -50%, 0) rotate(360deg);\n }\n }\n\n .spinner {\n animation: 1.5s linear infinite spin;\n animation-play-state: inherit;\n border: solid 5px #cfd0d1;\n border-bottom-color: var(--color-active);\n border-radius: 50%;\n content: \"\";\n display: block;\n height: 25px;\n width: 25px;\n will-change: transform;\n position: relative;\n top: .675rem;\n left: 1.25rem;\n }\n </style>\n\n <div class='flow center' id='id-entry' dir='${this.direction}'>\n <div class=\"nav\">\n <div class=\"back-wrapper\">\n <button type='button' data-type='icon' id=\"back-button\" class=\"back-button\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\">\n <path fill=\"#DBDBC4\" d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10Z\" opacity=\".4\"/>\n <path fill=\"${this.themeColor}\" d=\"M15.5 11.25h-5.19l1.72-1.72c.29-.29.29-.77 0-1.06a.754.754 0 0 0-1.06 0l-3 3c-.29.29-.29.77 0 1.06l3 3c.15.15.34.22.53.22s.38-.07.53-.22c.29-.29.29-.77 0-1.06l-1.72-1.72h5.19c.41 0 .75-.34.75-.75s-.34-.75-.75-.75Z\"/>\n </svg>\n </button>\n <div class=\"back-button-text\">Back</div>\n </div>\n <button data-type='icon' type='button' class='close-iframe'>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\">\n <path fill=\"#DBDBC4\" d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10Z\" opacity=\".4\"/>\n <path fill=\"#91190F\" d=\"m13.06 12 2.3-2.3c.29-.29.29-.77 0-1.06a.754.754 0 0 0-1.06 0l-2.3 2.3-2.3-2.3a.754.754 0 0 0-1.06 0c-.29.29-.29.77 0 1.06l2.3 2.3-2.3 2.3c-.29.29-.29.77 0 1.06.15.15.34.22.53.22s.38-.07.53-.22l2.3-2.3 2.3 2.3c.15.15.34.22.53.22s.38-.07.53-.22c.29-.29.29-.77 0-1.06l-2.3-2.3Z\"/>\n </svg>\n <span class='visually-hidden'>Close SmileIdentity Verification frame</span>\n </button>\n </div>\n <h1>\n Enter your ${this.idTypeLabel}\n </h1>\n\n <form name='id-entry-form' class='flow' novalidate style='--flow-space: 5.5rem'>\n <div id='id-number' class=\"input-group flow\">\n <label class='required' for=\"id_number\">\n ${this.idTypeLabel}\n </label>\n\n <input aria-required='true' id=\"id_number\" name=\"id_number\"\n maxlength='11' placeholder='' />\n\n <p>\n <small>${this.idHint}</small>\n </p>\n </div>\n\n <button data-variant='solid' id='query-otp-modes' type='submit'>\n <span class='text'>Continue</span>\n <svg aria-hidden='true' width=\"25\" height=\"24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 12h11m0 0-4.588-4M18 12l-4.588 4\" stroke=\"#fff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span hidden class='spinner'></span>\n </button>\n </form>\n </div>\n\n <div hidden class='flow center' id='select-mode' dir='${this.direction}'>\n <div class=\"nav\">\n <div class=\"back-wrapper\">\n <button type='button' data-type='icon' id=\"back-to-entry-button\" class=\"back-button\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\">\n <path fill=\"#DBDBC4\" d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10Z\" opacity=\".4\"/>\n <path fill=\"${this.themeColor}\" d=\"M15.5 11.25h-5.19l1.72-1.72c.29-.29.29-.77 0-1.06a.754.754 0 0 0-1.06 0l-3 3c-.29.29-.29.77 0 1.06l3 3c.15.15.34.22.53.22s.38-.07.53-.22c.29-.29.29-.77 0-1.06l-1.72-1.72h5.19c.41 0 .75-.34.75-.75s-.34-.75-.75-.75Z\"/>\n </svg>\n </button>\n <div class=\"back-button-text\">Back</div>\n </div>\n <button data-type='icon' type='button' class='close-iframe'>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\">\n <path fill=\"#DBDBC4\" d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10Z\" opacity=\".4\"/>\n <path fill=\"#91190F\" d=\"m13.06 12 2.3-2.3c.29-.29.29-.77 0-1.06a.754.754 0 0 0-1.06 0l-2.3 2.3-2.3-2.3a.754.754 0 0 0-1.06 0c-.29.29-.29.77 0 1.06l2.3 2.3-2.3 2.3c-.29.29-.29.77 0 1.06.15.15.34.22.53.22s.38-.07.53-.22l2.3-2.3 2.3 2.3c.15.15.34.22.53.22s.38-.07.53-.22c.29-.29.29-.77 0-1.06l-2.3-2.3Z\"/>\n </svg>\n <span class='visually-hidden'>Close SmileIdentity Verification frame</span>\n </button>\n </div>\n <h1>\n Select contact method\n </h1>\n\n <form name='select-mode-form' novalidate style='--flow-space: 4.25rem' id='otp-entry' class='flow center'>\n <fieldset class='flow center'>\n <legend class='flow' style='--flow-space: 1.5rem'>\n <p>\n NIBSS, the data custodian of BVN,&nbsp;\n will send you a One-Time Password (OTP) \n </p>\n\n <p>\n <small>\n The request will be from Chams Plc, who is NIBSS' technical partner.\n </small>\n </p>\n </legend>\n\n <div class='flow center'>\n ${\n this.modes.length\n ? this.modes\n .map(\n (mode) => `<label class='input-radio'>\n <input type=\"radio\" id=\"\" name=\"mode\" value=\"${Object.keys(mode)[0]}\">\n <div class='otp-mode'>\n ${\n Object.keys(mode)[0].includes('sms')\n ? `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"29\" height=\"37\" fill=\"none\">\n <path stroke=\"#2F718D\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M16.697 24.12c4.914 0 7.37 0 8.897-1.652 1.527-1.651 1.527-4.31 1.527-9.625 0-5.316 0-7.974-1.527-9.625-1.526-1.651-3.983-1.651-8.897-1.651h-5.211c-4.914 0-7.37 0-8.897 1.651-1.527 1.651-1.527 4.31-1.527 9.625 0 5.316 0 7.974 1.527 9.625.85.92 1.991 1.328 3.685 1.508\"/>\n <g filter=\"url(#sms)\">\n <path stroke=\"#2F718D\" stroke-linecap=\"round\" stroke-width=\"2\" d=\"M16.697 24.12c-1.61 0-3.384.703-5.005 1.613-2.602 1.462-3.903 2.193-4.545 1.727-.64-.465-.52-1.91-.277-4.799l.055-.656\" shape-rendering=\"crispEdges\"/>\n </g>\n <defs>\n <filter id=\"sms\" width=\"20.023\" height=\"15.595\" x=\"1.675\" y=\"21.005\" color-interpolation-filters=\"sRGB\" filterUnits=\"userSpaceOnUse\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n <feColorMatrix in=\"SourceAlpha\" result=\"hardAlpha\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"/>\n <feOffset dy=\"4\"/>\n <feGaussianBlur stdDeviation=\"2\"/>\n <feComposite in2=\"hardAlpha\" operator=\"out\"/>\n <feColorMatrix values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0\"/>\n <feBlend in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_2_404\"/>\n <feBlend in=\"SourceGraphic\" in2=\"effect1_dropShadow_2_404\" result=\"shape\"/>\n </filter>\n </defs>\n </svg>\n `\n : `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"35\" height=\"24\" fill=\"none\">\n <path stroke=\"#2F718D\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4.062 4.367c0-1.437 1.221-2.603 2.727-2.603h21.815c1.506 0 2.727 1.166 2.727 2.603v15.62c0 1.438-1.221 2.604-2.727 2.604H6.789c-1.506 0-2.727-1.166-2.727-2.604V4.367Z\"/>\n <g filter=\"url(#message)\">\n <path stroke=\"#2F718D\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"m5.426 3.066 8.647 7.338c2.067 1.754 5.18 1.754 7.247 0l8.648-7.338\" shape-rendering=\"crispEdges\"/>\n </g>\n <defs>\n <filter id=\"message\" width=\"34.042\" height=\"18.154\" x=\".676\" y=\"2.316\" color-interpolation-filters=\"sRGB\" filterUnits=\"userSpaceOnUse\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n <feColorMatrix in=\"SourceAlpha\" result=\"hardAlpha\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"/>\n <feOffset dy=\"4\"/>\n <feGaussianBlur stdDeviation=\"2\"/>\n <feComposite in2=\"hardAlpha\" operator=\"out\"/>\n <feColorMatrix values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0\"/>\n <feBlend in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_2_394\"/>\n <feBlend in=\"SourceGraphic\" in2=\"effect1_dropShadow_2_394\" result=\"shape\"/>\n </filter>\n </defs>\n </svg>\n `\n }\n <div class='flow'>\n <p>\n ${Object.values(mode)[0]}\n </p>\n <p>\n <small>\n An OTP will be sent by ${\n Object.keys(mode)[0].includes(\n 'sms',\n )\n ? 'sms'\n : 'email'\n } to verify your identity\n </small>\n </p>\n </div>\n </div>\n </label>`,\n )\n .join('\\n')\n : 'No modes yet'\n }\n </div>\n </fieldset>\n\n <button data-variant='ghost' id='contact-methods-outdated' style='--flow-space: .5rem' class='' type='button'>\n I am no longer using any of these options\n </button>\n\n <button data-variant='solid' id='select-otp-mode' type='submit'>\n <span class='text'>Continue</span>\n <svg aria-hidden='true' width=\"25\" height=\"24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 12h11m0 0-4.588-4M18 12l-4.588 4\" stroke=\"#fff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span hidden class='spinner'></span>\n </button>\n </form>\n </div>\n\n <div hidden class='flow center' id='otp-verification' dir='${this.direction}'>\n <div class=\"nav justify-right\">\n <button data-type='icon' type='button' class='close-iframe'>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\">\n <path fill=\"#DBDBC4\" d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10Z\" opacity=\".4\"/>\n <path fill=\"#91190F\" d=\"m13.06 12 2.3-2.3c.29-.29.29-.77 0-1.06a.754.754 0 0 0-1.06 0l-2.3 2.3-2.3-2.3a.754.754 0 0 0-1.06 0c-.29.29-.29.77 0 1.06l2.3 2.3-2.3 2.3c-.29.29-.29.77 0 1.06.15.15.34.22.53.22s.38-.07.53-.22l2.3-2.3 2.3 2.3c.15.15.34.22.53.22s.38-.07.53-.22c.29-.29.29-.77 0-1.06l-2.3-2.3Z\"/>\n </svg>\n <span class='visually-hidden'>Close SmileIdentity Verification frame</span>\n </button>\n </div>\n <h1>\n OTP Verification\n </h1>\n\n <div style='--flow-space: 4.25rem' id='otp-entry'>\n <form name='otp-submission-form' novalidate style='--flow-space: 1.5rem' class='flow center'>\n <label for='totp-token'>\n Enter the OTP sent to <span class='font-weight:bold'>${\n this.selectedOtpDeliveryMode\n }</span>\n </label>\n <input type='text' id='totp-token' maxlength='6' inputmode='numeric' autocomplete='one-time-code' />\n\n <p>\n Didn't receive the OTP${\n !this.selectedOtpDeliveryMode\n ? '?'\n : ` at <span class='font-weight:bold'>${this.selectedOtpDeliveryMode}</span>?`\n }\n </p>\n\n <button style='--flow-space: .5rem' data-variant='ghost' class='try-another-method' type='button'>\n Try another contact method\n </button>\n\n <button data-variant='solid' id='submit-otp' type='submit'>\n <span class='text'>Submit</span>\n <svg aria-hidden='true' width=\"25\" height=\"24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 12h11m0 0-4.588-4M18 12l-4.588 4\" stroke=\"#fff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span hidden class='spinner'></span>\n </button>\n </form>\n </div>\n </div>\n `;\n}\n\nclass TotpConsent extends HTMLElement {\n constructor() {\n super();\n\n this.templateString = markup.bind(this);\n this.render = () => this.templateString();\n\n this.attachShadow({ mode: 'open' });\n\n this.modes = [];\n this['otp-delivery-mode'] = '';\n\n this.queryOtpModes = this.queryOtpModes.bind(this);\n this.selectOtpMode = this.selectOtpMode.bind(this);\n this.submitOtp = this.submitOtp.bind(this);\n this.switchContactMethod = this.switchContactMethod.bind(this);\n this.handleTotpConsentGrant = this.handleTotpConsentGrant.bind(this);\n this.handleTotpConsentContactMethodsOutdated =\n this.handleTotpConsentContactMethodsOutdated.bind(this);\n this.pages = [];\n }\n\n static get observedAttributes() {\n return ['modes', 'otp-delivery-mode'];\n }\n\n attributeChangedCallback(name) {\n switch (name) {\n case 'modes':\n case 'otp-delivery-mode': {\n const updatedTemplate = document.createElement('template');\n updatedTemplate.innerHTML = this.render();\n const updatedNode = updatedTemplate.content\n .cloneNode(true)\n .querySelector(`#${this.activeScreen.id}`);\n updatedNode.hidden = false;\n this.shadowRoot.replaceChild(updatedNode, this.activeScreen);\n this.setUpEventListeners();\n this.setActiveScreen(updatedNode);\n break;\n }\n default:\n break;\n }\n }\n\n setUpEventListeners() {\n // Screens\n this.idEntryScreen = this.shadowRoot.querySelector('#id-entry');\n this.selectModeScreen = this.shadowRoot.querySelector('#select-mode');\n this.otpVerificationScreen =\n this.shadowRoot.querySelector('#otp-verification');\n\n if (!this.activeScreen) {\n this.activeScreen = this.idEntryScreen;\n }\n\n // Buttons\n this.queryOtpModesButton =\n this.idEntryScreen.querySelector('#query-otp-modes');\n this.backButton = this.idEntryScreen.querySelector('#back-button');\n this.selectOtpModeButton =\n this.selectModeScreen.querySelector('#select-otp-mode');\n this.entryBackbutton = this.selectModeScreen.querySelector(\n '#back-to-entry-button',\n );\n this.contactMethodsOutdatedButton = this.selectModeScreen.querySelector(\n '#contact-methods-outdated',\n );\n this.submitOtpButton =\n this.otpVerificationScreen.querySelector('#submit-otp');\n this.switchContactMethodButton = this.otpVerificationScreen.querySelector(\n '.try-another-method',\n );\n const CloseIframeButtons =\n this.shadowRoot.querySelectorAll('.close-iframe');\n\n // Input Elements\n this.idNumberInput = this.idEntryScreen.querySelector('#id_number');\n this.modeInputs = this.selectModeScreen.querySelectorAll('[name=\"mode\"]');\n this.otpInput = this.otpVerificationScreen.querySelector('#totp-token');\n\n // Event Handlers\n this.queryOtpModesButton.addEventListener('click', (e) =>\n this.queryOtpModes(e),\n );\n this.selectOtpModeButton.addEventListener('click', (e) =>\n this.selectOtpMode(e),\n );\n this.submitOtpButton.addEventListener('click', (e) => this.submitOtp(e));\n this.switchContactMethodButton.addEventListener('click', (e) =>\n this.switchContactMethod(e),\n );\n this.contactMethodsOutdatedButton.addEventListener('click', (e) =>\n this.handleTotpConsentContactMethodsOutdated(e),\n );\n\n this.entryBackbutton.addEventListener('click', () => {\n this.handleBackClick();\n });\n\n this.backButton.addEventListener('click', () => {\n this.handleBackClick();\n });\n\n CloseIframeButtons.forEach((button) => {\n button.addEventListener(\n 'click',\n () => {\n this.closeWindow();\n },\n false,\n );\n });\n }\n\n closeWindow() {\n const referenceWindow = window.parent;\n [referenceWindow.parent, referenceWindow].forEach((win) => {\n win.postMessage('SmileIdentity::Close', '*');\n });\n }\n\n handleBackClick() {\n const page = this.pages.pop();\n if (page) {\n this.setActiveScreen(page);\n } else {\n this.dispatchEvent(\n new CustomEvent('end-user-consent.totp.cancelled', {}),\n );\n }\n }\n\n connectedCallback() {\n const template = document.createElement('template');\n template.innerHTML = this.render();\n\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n this.setUpEventListeners();\n }\n\n switchContactMethod() {\n this.queryOtpModes();\n }\n\n resetForm() {\n const invalidElements =\n this.activeScreen.querySelectorAll('[aria-invalid]');\n invalidElements.forEach((el) => el.removeAttribute('aria-invalid'));\n\n const validationMessages = this.activeScreen.querySelectorAll(\n '.validation-message',\n );\n validationMessages.forEach((el) => el.remove());\n }\n\n handleIdNumberValidationErrors(errors) {\n const fields = Object.keys(errors);\n\n fields.forEach((field) => {\n const input = this.activeScreen.querySelector(`#${field}`);\n input.setAttribute('aria-invalid', 'true');\n input.setAttribute('aria-describedby', `${field}-hint`);\n\n const errorDiv = document.createElement('div');\n errorDiv.setAttribute('id', `${field}-hint`);\n errorDiv.setAttribute('class', 'validation-message');\n // eslint-disable-next-line prefer-destructuring\n errorDiv.textContent = errors[field][0];\n\n input.insertAdjacentElement('afterend', errorDiv);\n });\n }\n\n handleActiveScreenErrors(error) {\n const submitButton = this.activeScreen.querySelector('[type=\"submit\"]');\n const errorDiv = document.createElement('div');\n errorDiv.setAttribute('class', 'validation-message');\n errorDiv.textContent = error;\n submitButton.insertAdjacentElement('beforebegin', errorDiv);\n }\n\n validateIdNumber(idNumber) {\n const validationConstraints = {\n id_number: {\n format: new RegExp(this.idRegex),\n presence: {\n allowEmpty: false,\n message: 'is required',\n },\n },\n };\n\n const errors = validate({ id_number: idNumber }, validationConstraints);\n\n if (errors) {\n this.handleIdNumberValidationErrors(errors);\n }\n\n return errors;\n }\n\n async queryOtpModes(event) {\n if (event) {\n // ACTION: disable another submission\n event.preventDefault();\n\n // ACTION: Reset any form validation errors'\n this.resetForm();\n }\n\n // ACTION: Validate idNumber\n const validationErrors = this.validateIdNumber(this.idNumberInput.value);\n\n // ACTION: Get and set idNumber\n localStorage.setItem('idNumber', this.idNumberInput.value || this.idNumber);\n\n if (!validationErrors) {\n const data = {\n country: this.country,\n id_number: this.idNumber,\n id_type: this.idType,\n partner_id: this.partnerId,\n token: this.token,\n };\n const url = `${this.baseUrl}/totp_consent`;\n\n try {\n this.toggleLoading();\n const response = await postData(url, data);\n const json = await response.json();\n this.toggleLoading();\n\n if (!response.ok) {\n this.handleActiveScreenErrors(json.error);\n } else {\n this.sessionId = json.session_id;\n this.modes = json.modes;\n this.setActiveScreen(this.selectModeScreen);\n this.setAttribute('modes', json.modes);\n }\n } catch (error) {\n this.toggleLoading();\n this.handleActiveScreenErrors(error.message);\n }\n }\n }\n\n async selectOtpMode(event) {\n // ACTION: disable another submission\n event.preventDefault();\n\n // ACTION: Reset any form validation errors'\n this.resetForm();\n\n // ACTION: Get mode\n this.mode = Array.prototype.find.call(\n this.modeInputs,\n (node) => node.checked,\n ).value;\n const data = {\n country: this.country,\n id_number: this.idNumber,\n id_type: this.idType,\n mode: this.mode,\n partner_id: this.partnerId,\n session_id: this.sessionId,\n token: this.token,\n };\n const url = `${this.baseUrl}/totp_consent/mode`;\n\n try {\n this.toggleLoading();\n const response = await postData(url, data);\n const json = await response.json();\n this.toggleLoading();\n\n if (!response.ok) {\n this.handleActiveScreenErrors(json.error);\n } else {\n this.selectedOtpDeliveryMode = this.modes.filter(\n (mode) => mode[this.mode],\n )[0][this.mode];\n this.setActiveScreen(this.otpVerificationScreen);\n this.setAttribute('otp-delivery-mode', this.selectedOtpDeliveryMode);\n }\n } catch (error) {\n this.toggleLoading();\n this.handleActiveScreenErrors(error.message);\n }\n }\n\n async submitOtp(event) {\n // ACTION: disable another submission\n event.preventDefault();\n\n // ACTION: Reset any form validation errors'\n this.resetForm();\n\n this.otp = this.otpInput.value;\n\n const data = {\n country: this.country,\n id_number: this.idNumber,\n id_type: this.idType,\n otp: this.otp,\n partner_id: this.partnerId,\n session_id: this.sessionId,\n token: this.token,\n };\n const url = `${this.baseUrl}/totp_consent/otp`;\n\n try {\n this.toggleLoading();\n const response = await postData(url, data);\n const json = await response.json();\n this.toggleLoading();\n\n if (!response.ok) {\n this.handleActiveScreenErrors(json.error);\n } else {\n this.handleTotpConsentGrant(event);\n }\n } catch (error) {\n this.toggleLoading();\n this.handleActiveScreenErrors(error.message);\n }\n }\n\n toggleLoading() {\n const button = this.activeScreen.querySelector('button[type=\"submit\"]');\n const text = button.querySelector('.text');\n const arrow = button.querySelector('svg');\n const spinner = button.querySelector('.spinner');\n\n button.toggleAttribute('disabled');\n text.toggleAttribute('hidden');\n arrow.toggleAttribute('hidden');\n spinner.toggleAttribute('hidden');\n }\n\n setActiveScreen(screen) {\n this.activeScreen.hidden = true;\n screen.hidden = false;\n this.activeScreen = screen;\n }\n\n get baseUrl() {\n return this.getAttribute('base-url');\n }\n\n get country() {\n return this.getAttribute('country');\n }\n\n get idHint() {\n return this.getAttribute('id-hint') || 'Your BVN should be 11 digits long';\n }\n\n get idNumber() {\n return localStorage.getItem('idNumber');\n }\n\n get idRegex() {\n return this.getAttribute('id-regex');\n }\n\n get idType() {\n return this.getAttribute('id-type');\n }\n\n get idTypeLabel() {\n return this.getAttribute('id-type-label');\n }\n\n get partnerId() {\n return this.getAttribute('partner-id');\n }\n\n get partnerName() {\n return this.getAttribute('partner-name');\n }\n\n get token() {\n return this.getAttribute('token');\n }\n\n get themeColor() {\n return this.getAttribute('theme-color') || '#001096';\n }\n\n get direction() {\n return this.getAttribute('dir') || getDirection() || 'ltr';\n }\n\n get hideBack() {\n return this.hasAttribute('hide-back');\n }\n\n get showNavigation() {\n return this.hasAttribute('show-navigation');\n }\n\n handleTotpConsentGrant() {\n const customEvent = new CustomEvent('end-user-consent.totp.granted', {\n detail: {\n consented: {\n contact_information: true,\n document_information: true,\n personal_details: true,\n },\n id_number: this.idNumber,\n session_id: this.sessionId,\n },\n });\n\n this.dispatchEvent(customEvent);\n }\n\n handleTotpConsentContactMethodsOutdated() {\n const tag = 'end-user-consent.totp.denied.contact-methods-outdated';\n const customEvent = new CustomEvent(tag, {\n detail: {\n data: {\n id_number: this.idNumber,\n session_id: this.sessionId,\n },\n message: tag,\n },\n });\n\n this.dispatchEvent(customEvent);\n }\n}\n\nif ('customElements' in window && !window.customElements.get('totp-consent')) {\n window.customElements.define('totp-consent', TotpConsent);\n}\n\nexport {\n // eslint-disable-next-line import/prefer-default-export\n TotpConsent,\n};\n"],"names":["postData","url","data","markup","mode","TotpConsent","name","updatedTemplate","updatedNode","CloseIframeButtons","button","referenceWindow","win","page","template","el","errors","field","input","errorDiv","error","submitButton","idNumber","validationConstraints","validate","event","validationErrors","response","json","node","text","arrow","spinner","screen","getDirection","customEvent","tag"],"mappings":"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"}
1
+ {"version":3,"file":"TotpConsent-Cn2DkVza.js","sources":["../../lib/components/totp-consent/src/TotpConsent.js"],"sourcesContent":["import validate from 'validate.js';\nimport { getDirection } from '../../../domain/localisation';\n\nfunction postData(url, data) {\n return fetch(url, {\n body: JSON.stringify(data),\n cache: 'no-cache',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n mode: 'cors',\n });\n}\n\nfunction markup() {\n return `\n <style>\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n }\n\n :host {\n --flow-space: 1.5rem;\n\n --color-dark: #404040;\n --color-grey: #555B69;\n\n --color-success: #1EB244;\n --color-failure: #FFEDEB;\n --color-failure-tint: #F86B58;\n\n --color-richblue: #043C93;\n --color-theme: ${this.themeColor};\n\n --color-active: #2D2B2A;\n --color-default: #001096;\n --color-disabled: #848282;\n }\n\n html {\n font-family: 'DM Sans', sans-serif;\n }\n\n [hidden] {\n display: none !important;\n }\n\n [disabled] {\n cursor: not-allowed !important;\n }\n\n .visually-hidden {\n border: 0;\n clip: rect(1px 1px 1px 1px);\n clip: rect(1px, 1px, 1px, 1px);\n height: auto;\n margin: 0;\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n width: 1px;\n }\n\n .color-dark {\n color: var(--color-dark);\n }\n\n .color-grey {\n color: var(--color-grey);\n }\n\n .flow > * + * {\n margin-top: var(--flow-space);\n }\n\n .center {\n margin-left: auto;\n margin-right: auto;\n\n text-align: center;\n }\n\n h1 {\n font-size: 1.5rem;\n font-weight: 700;\n }\n\n button, input, select, textarea {\n font: inherit\n }\n\n label,\n input,\n select,\n textarea {\n --flow-space: .5rem;\n display: block;\n width: 100%;\n }\n\n input,\n select,\n textarea {\n border: 1px solid #d1d8d6;\n border-radius: .5rem;\n padding: .75rem 1rem;\n }\n\n button {\n --button-color: var(--color-default);\n --flow-space: 3rem;\n -webkit-appearance: none;\n -moz-appearance: none;\n align-items: center;\n appearance: none;\n background-color: transparent;\n border-radius: 2.5rem;\n border: none;\n color: #ffffff;\n cursor: pointer;\n display: inline-flex;\n font-size: 20px;\n font-weight: 500;\n inline-size: 100%;\n justify-content: center;\n letter-spacing: .05ch;\n line-height: 1;\n padding: 1rem 2.5rem;\n text-align: center;\n text-decoration: none;\n }\n\n button[data-variant='solid'] {\n background-color: var(--button-color);\n border: 2px solid var(--button-color);\n }\n\n button[data-variant='outline'] {\n color: var(--button-color);\n border: 2px solid var(--button-color);\n }\n\n button[data-variant='ghost'] {\n color: var(--button-color);\n }\n\n button:hover,\n button:focus,\n button:active {\n --button-color: var(--color-active);\n }\n\n button:disabled {\n --button-color: var(--color-disabled);\n }\n\n button[data-type='icon'] {\n height: 2rem;\n padding: 0;\n width: 2rem;\n background: transparent;\n }\n\n input {\n font: inherit;\n }\n\n fieldset {\n margin: 0;\n border: none;\n }\n\n .font-weight:bold {\n font-weight: bold;\n }\n\n .justify-right {\n justify-content: end !important;\n }\n .nav {\n display: flex;\n justify-content: space-between;\n }\n\n .back-wrapper {\n display: flex;\n align-items: center;\n }\n\n .back-button-text {\n font-size: 11px;\n line-height: 11px;\n color: ${this.themeColor || 'rgb(21, 31, 114)'};\n }\n\n #error,\n .validation-message {\n color: red;\n text-transform: capitalize;\n }\n\n .input-group {\n --flow-space: 1.5rem;\n text-align: initial;\n }\n\n .input-radio {\n --flow-space: 1.5rem;\n background-color: #F8F8F8;\n border-radius: .5rem;\n padding: .625rem 1rem;\n display: flex;\n align-items: center;\n }\n\n .otp-mode {\n display: flex;\n align-items: center;\n text-align: initial;\n }\n\n .otp-mode :first-child {\n margin: 0;\n margin-inline-end: 1rem;\n }\n\n .otp-mode :nth-child(2n) {\n --flow-space: .5rem;\n }\n\n .input-radio [type='radio'] {\n border-radius: 50%;\n inline-size: 2rem;\n block-size: 2rem;\n margin-inline-end: .5rem;\n background-color: white;\n border: .125rem solid #f5f5f5;\n }\n\n #totp-token {\n block-size: 3rem;\n inline-size: 20rem;\n max-inline-size: 100%;\n background-color: #F5F5F5;\n border: none;\n border-bottom: 2px solid #2F718D;\n font-size: 1.5rem;\n text-align: center;\n font-weight: 700;\n letter-spacing: 2rem;\n padding: .5rem 1rem;\n margin-inline: auto;\n }\n\n @keyframes spin {\n 0% {\n transform: translate3d(-50%, -50%, 0) rotate(0deg);\n }\n 100% {\n transform: translate3d(-50%, -50%, 0) rotate(360deg);\n }\n }\n\n .spinner {\n animation: 1.5s linear infinite spin;\n animation-play-state: inherit;\n border: solid 5px #cfd0d1;\n border-bottom-color: var(--color-active);\n border-radius: 50%;\n content: \"\";\n display: block;\n height: 25px;\n width: 25px;\n will-change: transform;\n position: relative;\n top: .675rem;\n left: 1.25rem;\n }\n </style>\n\n <div class='flow center' id='id-entry' dir='${this.direction}'>\n <div class=\"nav\">\n <div class=\"back-wrapper\">\n <button type='button' data-type='icon' id=\"back-button\" class=\"back-button\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\">\n <path fill=\"#DBDBC4\" d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10Z\" opacity=\".4\"/>\n <path fill=\"${this.themeColor}\" d=\"M15.5 11.25h-5.19l1.72-1.72c.29-.29.29-.77 0-1.06a.754.754 0 0 0-1.06 0l-3 3c-.29.29-.29.77 0 1.06l3 3c.15.15.34.22.53.22s.38-.07.53-.22c.29-.29.29-.77 0-1.06l-1.72-1.72h5.19c.41 0 .75-.34.75-.75s-.34-.75-.75-.75Z\"/>\n </svg>\n </button>\n <div class=\"back-button-text\">Back</div>\n </div>\n <button data-type='icon' type='button' class='close-iframe'>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\">\n <path fill=\"#DBDBC4\" d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10Z\" opacity=\".4\"/>\n <path fill=\"#91190F\" d=\"m13.06 12 2.3-2.3c.29-.29.29-.77 0-1.06a.754.754 0 0 0-1.06 0l-2.3 2.3-2.3-2.3a.754.754 0 0 0-1.06 0c-.29.29-.29.77 0 1.06l2.3 2.3-2.3 2.3c-.29.29-.29.77 0 1.06.15.15.34.22.53.22s.38-.07.53-.22l2.3-2.3 2.3 2.3c.15.15.34.22.53.22s.38-.07.53-.22c.29-.29.29-.77 0-1.06l-2.3-2.3Z\"/>\n </svg>\n <span class='visually-hidden'>Close SmileIdentity Verification frame</span>\n </button>\n </div>\n <h1>\n Enter your ${this.idTypeLabel}\n </h1>\n\n <form name='id-entry-form' class='flow' novalidate style='--flow-space: 5.5rem'>\n <div id='id-number' class=\"input-group flow\">\n <label class='required' for=\"id_number\">\n ${this.idTypeLabel}\n </label>\n\n <input aria-required='true' id=\"id_number\" name=\"id_number\"\n maxlength='11' placeholder='' />\n\n <p>\n <small>${this.idHint}</small>\n </p>\n </div>\n\n <button data-variant='solid' id='query-otp-modes' type='submit'>\n <span class='text'>Continue</span>\n <svg aria-hidden='true' width=\"25\" height=\"24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 12h11m0 0-4.588-4M18 12l-4.588 4\" stroke=\"#fff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span hidden class='spinner'></span>\n </button>\n </form>\n </div>\n\n <div hidden class='flow center' id='select-mode' dir='${this.direction}'>\n <div class=\"nav\">\n <div class=\"back-wrapper\">\n <button type='button' data-type='icon' id=\"back-to-entry-button\" class=\"back-button\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\">\n <path fill=\"#DBDBC4\" d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10Z\" opacity=\".4\"/>\n <path fill=\"${this.themeColor}\" d=\"M15.5 11.25h-5.19l1.72-1.72c.29-.29.29-.77 0-1.06a.754.754 0 0 0-1.06 0l-3 3c-.29.29-.29.77 0 1.06l3 3c.15.15.34.22.53.22s.38-.07.53-.22c.29-.29.29-.77 0-1.06l-1.72-1.72h5.19c.41 0 .75-.34.75-.75s-.34-.75-.75-.75Z\"/>\n </svg>\n </button>\n <div class=\"back-button-text\">Back</div>\n </div>\n <button data-type='icon' type='button' class='close-iframe'>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\">\n <path fill=\"#DBDBC4\" d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10Z\" opacity=\".4\"/>\n <path fill=\"#91190F\" d=\"m13.06 12 2.3-2.3c.29-.29.29-.77 0-1.06a.754.754 0 0 0-1.06 0l-2.3 2.3-2.3-2.3a.754.754 0 0 0-1.06 0c-.29.29-.29.77 0 1.06l2.3 2.3-2.3 2.3c-.29.29-.29.77 0 1.06.15.15.34.22.53.22s.38-.07.53-.22l2.3-2.3 2.3 2.3c.15.15.34.22.53.22s.38-.07.53-.22c.29-.29.29-.77 0-1.06l-2.3-2.3Z\"/>\n </svg>\n <span class='visually-hidden'>Close SmileIdentity Verification frame</span>\n </button>\n </div>\n <h1>\n Select contact method\n </h1>\n\n <form name='select-mode-form' novalidate style='--flow-space: 4.25rem' id='otp-entry' class='flow center'>\n <fieldset class='flow center'>\n <legend class='flow' style='--flow-space: 1.5rem'>\n <p>\n NIBSS, the data custodian of BVN,&nbsp;\n will send you a One-Time Password (OTP) \n </p>\n\n <p>\n <small>\n The request will be from Chams Plc, who is NIBSS' technical partner.\n </small>\n </p>\n </legend>\n\n <div class='flow center'>\n ${\n this.modes.length\n ? this.modes\n .map(\n (mode) => `<label class='input-radio'>\n <input type=\"radio\" id=\"\" name=\"mode\" value=\"${Object.keys(mode)[0]}\">\n <div class='otp-mode'>\n ${\n Object.keys(mode)[0].includes('sms')\n ? `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"29\" height=\"37\" fill=\"none\">\n <path stroke=\"#2F718D\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M16.697 24.12c4.914 0 7.37 0 8.897-1.652 1.527-1.651 1.527-4.31 1.527-9.625 0-5.316 0-7.974-1.527-9.625-1.526-1.651-3.983-1.651-8.897-1.651h-5.211c-4.914 0-7.37 0-8.897 1.651-1.527 1.651-1.527 4.31-1.527 9.625 0 5.316 0 7.974 1.527 9.625.85.92 1.991 1.328 3.685 1.508\"/>\n <g filter=\"url(#sms)\">\n <path stroke=\"#2F718D\" stroke-linecap=\"round\" stroke-width=\"2\" d=\"M16.697 24.12c-1.61 0-3.384.703-5.005 1.613-2.602 1.462-3.903 2.193-4.545 1.727-.64-.465-.52-1.91-.277-4.799l.055-.656\" shape-rendering=\"crispEdges\"/>\n </g>\n <defs>\n <filter id=\"sms\" width=\"20.023\" height=\"15.595\" x=\"1.675\" y=\"21.005\" color-interpolation-filters=\"sRGB\" filterUnits=\"userSpaceOnUse\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n <feColorMatrix in=\"SourceAlpha\" result=\"hardAlpha\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"/>\n <feOffset dy=\"4\"/>\n <feGaussianBlur stdDeviation=\"2\"/>\n <feComposite in2=\"hardAlpha\" operator=\"out\"/>\n <feColorMatrix values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0\"/>\n <feBlend in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_2_404\"/>\n <feBlend in=\"SourceGraphic\" in2=\"effect1_dropShadow_2_404\" result=\"shape\"/>\n </filter>\n </defs>\n </svg>\n `\n : `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"35\" height=\"24\" fill=\"none\">\n <path stroke=\"#2F718D\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4.062 4.367c0-1.437 1.221-2.603 2.727-2.603h21.815c1.506 0 2.727 1.166 2.727 2.603v15.62c0 1.438-1.221 2.604-2.727 2.604H6.789c-1.506 0-2.727-1.166-2.727-2.604V4.367Z\"/>\n <g filter=\"url(#message)\">\n <path stroke=\"#2F718D\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"m5.426 3.066 8.647 7.338c2.067 1.754 5.18 1.754 7.247 0l8.648-7.338\" shape-rendering=\"crispEdges\"/>\n </g>\n <defs>\n <filter id=\"message\" width=\"34.042\" height=\"18.154\" x=\".676\" y=\"2.316\" color-interpolation-filters=\"sRGB\" filterUnits=\"userSpaceOnUse\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n <feColorMatrix in=\"SourceAlpha\" result=\"hardAlpha\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"/>\n <feOffset dy=\"4\"/>\n <feGaussianBlur stdDeviation=\"2\"/>\n <feComposite in2=\"hardAlpha\" operator=\"out\"/>\n <feColorMatrix values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0\"/>\n <feBlend in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_2_394\"/>\n <feBlend in=\"SourceGraphic\" in2=\"effect1_dropShadow_2_394\" result=\"shape\"/>\n </filter>\n </defs>\n </svg>\n `\n }\n <div class='flow'>\n <p>\n ${Object.values(mode)[0]}\n </p>\n <p>\n <small>\n An OTP will be sent by ${\n Object.keys(mode)[0].includes(\n 'sms',\n )\n ? 'sms'\n : 'email'\n } to verify your identity\n </small>\n </p>\n </div>\n </div>\n </label>`,\n )\n .join('\\n')\n : 'No modes yet'\n }\n </div>\n </fieldset>\n\n <button data-variant='ghost' id='contact-methods-outdated' style='--flow-space: .5rem' class='' type='button'>\n I am no longer using any of these options\n </button>\n\n <button data-variant='solid' id='select-otp-mode' type='submit'>\n <span class='text'>Continue</span>\n <svg aria-hidden='true' width=\"25\" height=\"24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 12h11m0 0-4.588-4M18 12l-4.588 4\" stroke=\"#fff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span hidden class='spinner'></span>\n </button>\n </form>\n </div>\n\n <div hidden class='flow center' id='otp-verification' dir='${this.direction}'>\n <div class=\"nav justify-right\">\n <button data-type='icon' type='button' class='close-iframe'>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\">\n <path fill=\"#DBDBC4\" d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10Z\" opacity=\".4\"/>\n <path fill=\"#91190F\" d=\"m13.06 12 2.3-2.3c.29-.29.29-.77 0-1.06a.754.754 0 0 0-1.06 0l-2.3 2.3-2.3-2.3a.754.754 0 0 0-1.06 0c-.29.29-.29.77 0 1.06l2.3 2.3-2.3 2.3c-.29.29-.29.77 0 1.06.15.15.34.22.53.22s.38-.07.53-.22l2.3-2.3 2.3 2.3c.15.15.34.22.53.22s.38-.07.53-.22c.29-.29.29-.77 0-1.06l-2.3-2.3Z\"/>\n </svg>\n <span class='visually-hidden'>Close SmileIdentity Verification frame</span>\n </button>\n </div>\n <h1>\n OTP Verification\n </h1>\n\n <div style='--flow-space: 4.25rem' id='otp-entry'>\n <form name='otp-submission-form' novalidate style='--flow-space: 1.5rem' class='flow center'>\n <label for='totp-token'>\n Enter the OTP sent to <span class='font-weight:bold'>${\n this.selectedOtpDeliveryMode\n }</span>\n </label>\n <input type='text' id='totp-token' maxlength='6' inputmode='numeric' autocomplete='one-time-code' />\n\n <p>\n Didn't receive the OTP${\n !this.selectedOtpDeliveryMode\n ? '?'\n : ` at <span class='font-weight:bold'>${this.selectedOtpDeliveryMode}</span>?`\n }\n </p>\n\n <button style='--flow-space: .5rem' data-variant='ghost' class='try-another-method' type='button'>\n Try another contact method\n </button>\n\n <button data-variant='solid' id='submit-otp' type='submit'>\n <span class='text'>Submit</span>\n <svg aria-hidden='true' width=\"25\" height=\"24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 12h11m0 0-4.588-4M18 12l-4.588 4\" stroke=\"#fff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span hidden class='spinner'></span>\n </button>\n </form>\n </div>\n </div>\n `;\n}\n\nclass TotpConsent extends HTMLElement {\n constructor() {\n super();\n\n this.templateString = markup.bind(this);\n this.render = () => this.templateString();\n\n this.attachShadow({ mode: 'open' });\n\n this.modes = [];\n this['otp-delivery-mode'] = '';\n\n this.queryOtpModes = this.queryOtpModes.bind(this);\n this.selectOtpMode = this.selectOtpMode.bind(this);\n this.submitOtp = this.submitOtp.bind(this);\n this.switchContactMethod = this.switchContactMethod.bind(this);\n this.handleTotpConsentGrant = this.handleTotpConsentGrant.bind(this);\n this.handleTotpConsentContactMethodsOutdated =\n this.handleTotpConsentContactMethodsOutdated.bind(this);\n this.pages = [];\n }\n\n static get observedAttributes() {\n return ['modes', 'otp-delivery-mode'];\n }\n\n attributeChangedCallback(name) {\n switch (name) {\n case 'modes':\n case 'otp-delivery-mode': {\n const updatedTemplate = document.createElement('template');\n updatedTemplate.innerHTML = this.render();\n const updatedNode = updatedTemplate.content\n .cloneNode(true)\n .querySelector(`#${this.activeScreen.id}`);\n updatedNode.hidden = false;\n this.shadowRoot.replaceChild(updatedNode, this.activeScreen);\n this.setUpEventListeners();\n this.setActiveScreen(updatedNode);\n break;\n }\n default:\n break;\n }\n }\n\n setUpEventListeners() {\n // Screens\n this.idEntryScreen = this.shadowRoot.querySelector('#id-entry');\n this.selectModeScreen = this.shadowRoot.querySelector('#select-mode');\n this.otpVerificationScreen =\n this.shadowRoot.querySelector('#otp-verification');\n\n if (!this.activeScreen) {\n this.activeScreen = this.idEntryScreen;\n }\n\n // Buttons\n this.queryOtpModesButton =\n this.idEntryScreen.querySelector('#query-otp-modes');\n this.backButton = this.idEntryScreen.querySelector('#back-button');\n this.selectOtpModeButton =\n this.selectModeScreen.querySelector('#select-otp-mode');\n this.entryBackbutton = this.selectModeScreen.querySelector(\n '#back-to-entry-button',\n );\n this.contactMethodsOutdatedButton = this.selectModeScreen.querySelector(\n '#contact-methods-outdated',\n );\n this.submitOtpButton =\n this.otpVerificationScreen.querySelector('#submit-otp');\n this.switchContactMethodButton = this.otpVerificationScreen.querySelector(\n '.try-another-method',\n );\n const CloseIframeButtons =\n this.shadowRoot.querySelectorAll('.close-iframe');\n\n // Input Elements\n this.idNumberInput = this.idEntryScreen.querySelector('#id_number');\n this.modeInputs = this.selectModeScreen.querySelectorAll('[name=\"mode\"]');\n this.otpInput = this.otpVerificationScreen.querySelector('#totp-token');\n\n // Event Handlers\n this.queryOtpModesButton.addEventListener('click', (e) =>\n this.queryOtpModes(e),\n );\n this.selectOtpModeButton.addEventListener('click', (e) =>\n this.selectOtpMode(e),\n );\n this.submitOtpButton.addEventListener('click', (e) => this.submitOtp(e));\n this.switchContactMethodButton.addEventListener('click', (e) =>\n this.switchContactMethod(e),\n );\n this.contactMethodsOutdatedButton.addEventListener('click', (e) =>\n this.handleTotpConsentContactMethodsOutdated(e),\n );\n\n this.entryBackbutton.addEventListener('click', () => {\n this.handleBackClick();\n });\n\n this.backButton.addEventListener('click', () => {\n this.handleBackClick();\n });\n\n CloseIframeButtons.forEach((button) => {\n button.addEventListener(\n 'click',\n () => {\n this.closeWindow();\n },\n false,\n );\n });\n }\n\n closeWindow() {\n const referenceWindow = window.parent;\n [referenceWindow.parent, referenceWindow].forEach((win) => {\n win.postMessage('SmileIdentity::Close', '*');\n });\n }\n\n handleBackClick() {\n const page = this.pages.pop();\n if (page) {\n this.setActiveScreen(page);\n } else {\n this.dispatchEvent(\n new CustomEvent('end-user-consent.totp.cancelled', {}),\n );\n }\n }\n\n connectedCallback() {\n const template = document.createElement('template');\n template.innerHTML = this.render();\n\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n this.setUpEventListeners();\n }\n\n switchContactMethod() {\n this.queryOtpModes();\n }\n\n resetForm() {\n const invalidElements =\n this.activeScreen.querySelectorAll('[aria-invalid]');\n invalidElements.forEach((el) => el.removeAttribute('aria-invalid'));\n\n const validationMessages = this.activeScreen.querySelectorAll(\n '.validation-message',\n );\n validationMessages.forEach((el) => el.remove());\n }\n\n handleIdNumberValidationErrors(errors) {\n const fields = Object.keys(errors);\n\n fields.forEach((field) => {\n const input = this.activeScreen.querySelector(`#${field}`);\n input.setAttribute('aria-invalid', 'true');\n input.setAttribute('aria-describedby', `${field}-hint`);\n\n const errorDiv = document.createElement('div');\n errorDiv.setAttribute('id', `${field}-hint`);\n errorDiv.setAttribute('class', 'validation-message');\n // eslint-disable-next-line prefer-destructuring\n errorDiv.textContent = errors[field][0];\n\n input.insertAdjacentElement('afterend', errorDiv);\n });\n }\n\n handleActiveScreenErrors(error) {\n const submitButton = this.activeScreen.querySelector('[type=\"submit\"]');\n const errorDiv = document.createElement('div');\n errorDiv.setAttribute('class', 'validation-message');\n errorDiv.textContent = error;\n submitButton.insertAdjacentElement('beforebegin', errorDiv);\n }\n\n validateIdNumber(idNumber) {\n const validationConstraints = {\n id_number: {\n format: new RegExp(this.idRegex),\n presence: {\n allowEmpty: false,\n message: 'is required',\n },\n },\n };\n\n const errors = validate({ id_number: idNumber }, validationConstraints);\n\n if (errors) {\n this.handleIdNumberValidationErrors(errors);\n }\n\n return errors;\n }\n\n async queryOtpModes(event) {\n if (event) {\n // ACTION: disable another submission\n event.preventDefault();\n\n // ACTION: Reset any form validation errors'\n this.resetForm();\n }\n\n // ACTION: Validate idNumber\n const validationErrors = this.validateIdNumber(this.idNumberInput.value);\n\n // ACTION: Get and set idNumber\n localStorage.setItem('idNumber', this.idNumberInput.value || this.idNumber);\n\n if (!validationErrors) {\n const data = {\n country: this.country,\n id_number: this.idNumber,\n id_type: this.idType,\n partner_id: this.partnerId,\n token: this.token,\n };\n const url = `${this.baseUrl}/totp_consent`;\n\n try {\n this.toggleLoading();\n const response = await postData(url, data);\n const json = await response.json();\n this.toggleLoading();\n\n if (!response.ok) {\n this.handleActiveScreenErrors(json.error);\n } else {\n this.sessionId = json.session_id;\n this.modes = json.modes;\n this.setActiveScreen(this.selectModeScreen);\n this.setAttribute('modes', json.modes);\n }\n } catch (error) {\n this.toggleLoading();\n this.handleActiveScreenErrors(error.message);\n }\n }\n }\n\n async selectOtpMode(event) {\n // ACTION: disable another submission\n event.preventDefault();\n\n // ACTION: Reset any form validation errors'\n this.resetForm();\n\n // ACTION: Get mode\n this.mode = Array.prototype.find.call(\n this.modeInputs,\n (node) => node.checked,\n ).value;\n const data = {\n country: this.country,\n id_number: this.idNumber,\n id_type: this.idType,\n mode: this.mode,\n partner_id: this.partnerId,\n session_id: this.sessionId,\n token: this.token,\n };\n const url = `${this.baseUrl}/totp_consent/mode`;\n\n try {\n this.toggleLoading();\n const response = await postData(url, data);\n const json = await response.json();\n this.toggleLoading();\n\n if (!response.ok) {\n this.handleActiveScreenErrors(json.error);\n } else {\n this.selectedOtpDeliveryMode = this.modes.filter(\n (mode) => mode[this.mode],\n )[0][this.mode];\n this.setActiveScreen(this.otpVerificationScreen);\n this.setAttribute('otp-delivery-mode', this.selectedOtpDeliveryMode);\n }\n } catch (error) {\n this.toggleLoading();\n this.handleActiveScreenErrors(error.message);\n }\n }\n\n async submitOtp(event) {\n // ACTION: disable another submission\n event.preventDefault();\n\n // ACTION: Reset any form validation errors'\n this.resetForm();\n\n this.otp = this.otpInput.value;\n\n const data = {\n country: this.country,\n id_number: this.idNumber,\n id_type: this.idType,\n otp: this.otp,\n partner_id: this.partnerId,\n session_id: this.sessionId,\n token: this.token,\n };\n const url = `${this.baseUrl}/totp_consent/otp`;\n\n try {\n this.toggleLoading();\n const response = await postData(url, data);\n const json = await response.json();\n this.toggleLoading();\n\n if (!response.ok) {\n this.handleActiveScreenErrors(json.error);\n } else {\n this.handleTotpConsentGrant(event);\n }\n } catch (error) {\n this.toggleLoading();\n this.handleActiveScreenErrors(error.message);\n }\n }\n\n toggleLoading() {\n const button = this.activeScreen.querySelector('button[type=\"submit\"]');\n const text = button.querySelector('.text');\n const arrow = button.querySelector('svg');\n const spinner = button.querySelector('.spinner');\n\n button.toggleAttribute('disabled');\n text.toggleAttribute('hidden');\n arrow.toggleAttribute('hidden');\n spinner.toggleAttribute('hidden');\n }\n\n setActiveScreen(screen) {\n this.activeScreen.hidden = true;\n screen.hidden = false;\n this.activeScreen = screen;\n }\n\n get baseUrl() {\n return this.getAttribute('base-url');\n }\n\n get country() {\n return this.getAttribute('country');\n }\n\n get idHint() {\n return this.getAttribute('id-hint') || 'Your BVN should be 11 digits long';\n }\n\n get idNumber() {\n return localStorage.getItem('idNumber');\n }\n\n get idRegex() {\n return this.getAttribute('id-regex');\n }\n\n get idType() {\n return this.getAttribute('id-type');\n }\n\n get idTypeLabel() {\n return this.getAttribute('id-type-label');\n }\n\n get partnerId() {\n return this.getAttribute('partner-id');\n }\n\n get partnerName() {\n return this.getAttribute('partner-name');\n }\n\n get token() {\n return this.getAttribute('token');\n }\n\n get themeColor() {\n return this.getAttribute('theme-color') || '#001096';\n }\n\n get direction() {\n return this.getAttribute('dir') || getDirection() || 'ltr';\n }\n\n get hideBack() {\n return this.hasAttribute('hide-back');\n }\n\n get showNavigation() {\n return this.hasAttribute('show-navigation');\n }\n\n handleTotpConsentGrant() {\n const customEvent = new CustomEvent('end-user-consent.totp.granted', {\n detail: {\n consented: {\n contact_information: true,\n document_information: true,\n personal_details: true,\n },\n id_number: this.idNumber,\n session_id: this.sessionId,\n },\n });\n\n this.dispatchEvent(customEvent);\n }\n\n handleTotpConsentContactMethodsOutdated() {\n const tag = 'end-user-consent.totp.denied.contact-methods-outdated';\n const customEvent = new CustomEvent(tag, {\n detail: {\n data: {\n id_number: this.idNumber,\n session_id: this.sessionId,\n },\n message: tag,\n },\n });\n\n this.dispatchEvent(customEvent);\n }\n}\n\nif ('customElements' in window && !window.customElements.get('totp-consent')) {\n window.customElements.define('totp-consent', TotpConsent);\n}\n\nexport {\n // eslint-disable-next-line import/prefer-default-export\n TotpConsent,\n};\n"],"names":["postData","url","data","markup","mode","TotpConsent","name","updatedTemplate","updatedNode","CloseIframeButtons","button","referenceWindow","win","page","template","el","errors","field","input","errorDiv","error","submitButton","idNumber","validationConstraints","validate","event","validationErrors","response","json","node","text","arrow","spinner","screen","getDirection","customEvent","tag"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { t as l } from "./index-Dnpp-kwk.js";
1
+ import { t as l } from "./index-DBUdxnp9.js";
2
2
  function h(o) {
3
3
  const t = [...Array(30)].map(() => Math.random().toString(36)[3]).join("");
4
4
  return `${o}-${t}`;
@@ -31,7 +31,7 @@ class u extends HTMLElement {
31
31
  }
32
32
  class g extends HTMLElement {
33
33
  constructor() {
34
- super(), this.handleKeyUp = this.handleKeyUp.bind(this), this.handleKeyDown = this.handleKeyDown.bind(this), this.handleSelection = this.handleSelection.bind(this), this.toggleExpansionState = this.toggleExpansionState.bind(this);
34
+ super(), this.handleKeyUp = this.handleKeyUp.bind(this), this.handleKeyDown = this.handleKeyDown.bind(this), this.handleInput = this.handleInput.bind(this), this.handleChange = this.handleChange.bind(this), this.handleSelection = this.handleSelection.bind(this), this.toggleExpansionState = this.toggleExpansionState.bind(this);
35
35
  }
36
36
  get type() {
37
37
  return this.getAttribute("type") || "text";
@@ -55,17 +55,14 @@ class g extends HTMLElement {
55
55
  <span class="visually-hidden">${l("common.toggle")}</span>
56
56
  </button>
57
57
  </div>
58
- ` : `<button ${this.disabled ? "disabled " : ""}type="button">${this.value || this.label}</button>`}`, this.setAttribute("expanded", !1), this.inputTrigger = this.querySelector("input"), this.buttonTrigger = this.querySelector("button"), this.buttonTrigger.setAttribute("aria-expanded", !1), this.buttonTrigger.setAttribute("role", "combobox"), this.buttonTrigger.addEventListener("keydown", this.handleKeyDown), this.buttonTrigger.addEventListener("click", this.toggleExpansionState), this.inputTrigger && (this.inputTrigger.setAttribute("aria-expanded", !1), this.inputTrigger.setAttribute("role", "combobox"), this.inputTrigger.addEventListener("keydown", this.handleKeyDown), this.inputTrigger.addEventListener("keyup", this.handleKeyUp), this.inputTrigger.addEventListener("change", (t) => t.stopPropagation())), this.listbox = this.parentElement.querySelector("smileid-combobox-listbox"), this.options = Array.from(
58
+ ` : `<button ${this.disabled ? "disabled " : ""}type="button">${this.value || this.label}</button>`}`, this.setAttribute("expanded", !1), this.inputTrigger = this.querySelector("input"), this.buttonTrigger = this.querySelector("button"), this.buttonTrigger.setAttribute("aria-expanded", !1), this.buttonTrigger.setAttribute("role", "combobox"), this.buttonTrigger.addEventListener("keydown", this.handleKeyDown), this.buttonTrigger.addEventListener("click", this.toggleExpansionState), this.inputTrigger && (this.inputTrigger.setAttribute("aria-expanded", !1), this.inputTrigger.setAttribute("role", "combobox"), this.inputTrigger.addEventListener("keydown", this.handleKeyDown), this.inputTrigger.addEventListener("keyup", this.handleKeyUp), this.inputTrigger.addEventListener("input", this.handleInput), this.inputTrigger.addEventListener("change", this.handleChange)), this.listbox = this.parentElement.querySelector("smileid-combobox-listbox"), this.options = Array.from(
59
59
  this.parentElement.querySelectorAll("smileid-combobox-option")
60
60
  ), this.options.forEach((t) => {
61
61
  t.addEventListener("combobox.option.select", this.handleSelection);
62
62
  });
63
63
  }
64
64
  disconnectedCallback() {
65
- this.buttonTrigger.removeEventListener("keydown", this.handleKeyDown), this.buttonTrigger.removeEventListener("click", this.toggleExpansionState), this.inputTrigger && (this.inputTrigger.removeEventListener("keydown", this.handleKeyDown), this.inputTrigger.removeEventListener("keyup", this.handleKeyUp), this.inputTrigger.removeEventListener(
66
- "change",
67
- (t) => t.stopPropagation()
68
- )), this.options && this.options.forEach((t) => {
65
+ this.buttonTrigger.removeEventListener("keydown", this.handleKeyDown), this.buttonTrigger.removeEventListener("click", this.toggleExpansionState), this.inputTrigger && (this.inputTrigger.removeEventListener("keydown", this.handleKeyDown), this.inputTrigger.removeEventListener("keyup", this.handleKeyUp), this.inputTrigger.removeEventListener("input", this.handleInput), this.inputTrigger.removeEventListener("change", this.handleChange)), this.options && this.options.forEach((t) => {
69
66
  t.removeEventListener(
70
67
  "combobox.option.select",
71
68
  this.handleSelection
@@ -116,10 +113,15 @@ class g extends HTMLElement {
116
113
  }
117
114
  }
118
115
  handleKeyUp(t) {
119
- const { key: e } = t, i = (s) => s.length === 1 && s.match(/\S| /);
120
116
  (t.key === "Escape" || t.key === "Esc") && (t.preventDefault(), this.getAttribute("expanded") === "true" ? this.toggleExpansionState() : this.inputTrigger && (this.inputTrigger.value = "", this.listbox.dispatchEvent(
121
117
  new CustomEvent("combobox.listbox.filter", { detail: "" })
122
- ))), (i(e) || e === "Backspace") && (this.resetListbox(), this.filterListbox(t.target.value));
118
+ )));
119
+ }
120
+ handleInput(t) {
121
+ this.resetListbox(), this.filterListbox(t.target.value);
122
+ }
123
+ handleChange(t) {
124
+ t.stopPropagation();
123
125
  }
124
126
  toggleExpansionState() {
125
127
  const t = this.getAttribute("expanded") === "true";
@@ -196,13 +198,9 @@ class p extends HTMLElement {
196
198
  return ["search-term"];
197
199
  }
198
200
  attributeChangedCallback(t, e, i) {
199
- switch (t) {
200
- case "search-term":
201
- e && !i ? this.optionNodes.forEach((s) => {
202
- s.removeAttribute("hidden");
203
- }) : i && this.filterNodes(i);
204
- break;
205
- }
201
+ t === "search-term" && (e && !i ? this.optionNodes.forEach((s) => {
202
+ s.removeAttribute("hidden");
203
+ }) : i && this.filterNodes(i));
206
204
  }
207
205
  filterNodes(t) {
208
206
  this.optionNodes.forEach((s) => {
@@ -1 +1 @@
1
- {"version":3,"file":"combobox.js","sources":["../../lib/components/combobox/src/Combobox.js"],"sourcesContent":["import { t } from '../../../domain/localisation';\n\nfunction generateId(prefix) {\n const id = [...Array(30)].map(() => Math.random().toString(36)[3]).join('');\n return `${prefix}-${id}`;\n}\n\n// check if element is visible in browser view port\nfunction isElementInView(element) {\n const bounding = element.getBoundingClientRect();\n\n return (\n bounding.top >= 0 &&\n bounding.left >= 0 &&\n bounding.bottom <=\n (window.innerHeight || document.documentElement.clientHeight) &&\n bounding.right <=\n (window.innerWidth || document.documentElement.clientWidth)\n );\n}\n\n// check if an element is currently scrollable\nfunction isScrollable(element) {\n return element && element.clientHeight < element.scrollHeight;\n}\n\n// ensure a given child element is within the parent's visible scroll area\n// if the child is not visible, scroll the parent\nfunction maintainScrollVisibility(activeElement, scrollParent) {\n const { offsetHeight, offsetTop } = activeElement;\n const { offsetHeight: parentOffsetHeight, scrollTop } = scrollParent;\n\n const isAbove = offsetTop < scrollTop;\n const isBelow = offsetTop + offsetHeight > scrollTop + parentOffsetHeight;\n\n if (isAbove) {\n scrollParent.scrollTo(0, offsetTop);\n } else if (isBelow) {\n scrollParent.scrollTo(0, offsetTop - parentOffsetHeight + offsetHeight);\n }\n}\n\nclass ComboboxRoot extends HTMLElement {\n constructor() {\n super();\n\n this.handleRoaming = this.handleRoaming.bind(this);\n }\n\n connectedCallback() {\n this.trigger = this.querySelector('smileid-combobox-trigger');\n\n document.addEventListener('click', this.handleRoaming);\n this.addEventListener('focusout', this.handleRoaming);\n this.addEventListener('blur', this.handleRoaming);\n }\n\n disconnectedCallback() {\n document.removeEventListener('click', this.handleRoaming);\n this.removeEventListener('focusout', this.handleRoaming);\n this.removeEventListener('blur', this.handleRoaming);\n }\n\n handleRoaming(event) {\n const target = event.relatedTarget || event.target;\n if (this.contains(target)) {\n return;\n }\n\n if (this.trigger.getAttribute('expanded') === 'true') {\n this.trigger.setAttribute('expanded', 'false');\n }\n }\n}\n\nclass ComboboxTrigger extends HTMLElement {\n constructor() {\n super();\n\n this.handleKeyUp = this.handleKeyUp.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleSelection = this.handleSelection.bind(this);\n\n this.toggleExpansionState = this.toggleExpansionState.bind(this);\n }\n\n get type() {\n return this.getAttribute('type') || 'text';\n }\n\n get label() {\n return this.getAttribute('label') || '';\n }\n\n get value() {\n return this.getAttribute('value') || '';\n }\n\n get disabled() {\n return this.hasAttribute('disabled');\n }\n\n connectedCallback() {\n if (!this.label) {\n throw new Error('<combobox-trigger>: a label attribute is required');\n }\n\n this.innerHTML = `${\n this.type === 'text'\n ? `\n <div>\n <input ${this.value ? `value=\"${this.value}\" ` : ''}${\n this.disabled ? ' disabled ' : ''\n }type=\"text\" placeholder=\"${this.label}\" />\n <button ${this.disabled ? 'disabled ' : ''}tabindex='-1' type='button'>\n <span class=\"visually-hidden\">${t('common.toggle')}</span>\n </button>\n </div>\n `\n : `<button ${this.disabled ? 'disabled ' : ''}type=\"button\">${\n this.value || this.label\n }</button>`\n }`;\n\n this.setAttribute('expanded', false);\n\n this.inputTrigger = this.querySelector('input');\n this.buttonTrigger = this.querySelector('button');\n\n this.buttonTrigger.setAttribute('aria-expanded', false);\n this.buttonTrigger.setAttribute('role', 'combobox');\n\n this.buttonTrigger.addEventListener('keydown', this.handleKeyDown);\n this.buttonTrigger.addEventListener('click', this.toggleExpansionState);\n\n if (this.inputTrigger) {\n this.inputTrigger.setAttribute('aria-expanded', false);\n this.inputTrigger.setAttribute('role', 'combobox');\n\n this.inputTrigger.addEventListener('keydown', this.handleKeyDown);\n this.inputTrigger.addEventListener('keyup', this.handleKeyUp);\n this.inputTrigger.addEventListener('change', (e) => e.stopPropagation());\n }\n\n this.listbox = this.parentElement.querySelector('smileid-combobox-listbox');\n\n this.options = Array.from(\n this.parentElement.querySelectorAll('smileid-combobox-option'),\n );\n this.options.forEach((node) => {\n node.addEventListener('combobox.option.select', this.handleSelection);\n });\n }\n\n disconnectedCallback() {\n this.buttonTrigger.removeEventListener('keydown', this.handleKeyDown);\n this.buttonTrigger.removeEventListener('click', this.toggleExpansionState);\n\n if (this.inputTrigger) {\n this.inputTrigger.removeEventListener('keydown', this.handleKeyDown);\n this.inputTrigger.removeEventListener('keyup', this.handleKeyUp);\n this.inputTrigger.removeEventListener('change', (e) =>\n e.stopPropagation(),\n );\n }\n\n if (this.options) {\n this.options.forEach((node) => {\n node.removeEventListener(\n 'combobox.option.select',\n this.handleSelection,\n );\n });\n }\n }\n\n handleKeyDown(event) {\n if (event.ctrlKey || event.shiftKey) {\n return;\n }\n\n const { key } = event;\n\n switch (key) {\n case 'Enter':\n case 'Space':\n case ' ':\n if (this.getAttribute('expanded') === 'true') {\n if (this.inputTrigger && (key === 'Space' || key === ' ')) {\n this.resetListbox();\n } else {\n event.preventDefault();\n const selectedOption = this.buttonTrigger.getAttribute(\n 'aria-activedescendant',\n );\n if (selectedOption) {\n document.getElementById(selectedOption).click();\n }\n }\n } else {\n event.preventDefault();\n this.toggleExpansionState();\n }\n break;\n case 'Esc':\n case 'Escape':\n event.preventDefault();\n if (this.getAttribute('expanded') === 'true') {\n this.toggleExpansionState();\n }\n break;\n case 'Down':\n case 'ArrowDown':\n event.preventDefault();\n if (this.getAttribute('expanded') !== 'true') {\n this.toggleExpansionState();\n this.focusListbox('First');\n } else {\n this.focusListbox('Down');\n }\n break;\n case 'Up':\n case 'ArrowUp':\n event.preventDefault();\n if (this.getAttribute('expanded') !== 'true') {\n this.toggleExpansionState();\n this.focusListbox('Last');\n } else {\n this.focusListbox('Up');\n }\n break;\n case 'Left':\n case 'ArrowLeft':\n case 'Right':\n case 'ArrowRight':\n case 'Home':\n case 'End':\n this.resetListbox();\n break;\n case 'Tab':\n break;\n default:\n break;\n }\n }\n\n handleKeyUp(event) {\n const { key } = event;\n\n const isPrintableCharacter = (str) => str.length === 1 && str.match(/\\S| /);\n\n if (event.key === 'Escape' || event.key === 'Esc') {\n event.preventDefault();\n if (this.getAttribute('expanded') === 'true') {\n this.toggleExpansionState();\n } else if (this.inputTrigger) {\n this.inputTrigger.value = '';\n\n this.listbox.dispatchEvent(\n new CustomEvent('combobox.listbox.filter', { detail: '' }),\n );\n }\n }\n\n if (isPrintableCharacter(key) || key === 'Backspace') {\n this.resetListbox();\n this.filterListbox(event.target.value);\n }\n }\n\n toggleExpansionState() {\n const listboxIsExpanded = this.getAttribute('expanded') === 'true';\n this.setAttribute('expanded', !listboxIsExpanded);\n this.buttonTrigger.setAttribute('aria-expanded', !listboxIsExpanded);\n if (this.inputTrigger) {\n this.inputTrigger.setAttribute('aria-expanded', !listboxIsExpanded);\n }\n }\n\n handleSelection(event) {\n if (this.inputTrigger) {\n this.inputTrigger.value = event.detail.label;\n } else {\n this.buttonTrigger.textContent = event.detail.label;\n }\n\n this.toggleExpansionState();\n this.parentElement.dispatchEvent(\n new CustomEvent('combobox.change', {\n detail: {\n value: event.detail.value,\n },\n }),\n );\n }\n\n filterListbox(value) {\n if (this.getAttribute('expanded') !== 'true') {\n this.toggleExpansionState();\n }\n\n this.listbox.dispatchEvent(\n new CustomEvent('combobox.listbox.filter', { detail: value }),\n );\n }\n\n focusListbox(direction) {\n this.resetListbox();\n this.listbox.dispatchEvent(\n new CustomEvent('combobox.listbox.focus', {\n detail: {\n direction,\n },\n }),\n );\n }\n\n resetListbox() {\n this.listbox.dispatchEvent(new CustomEvent('combobox.listbox.reset'));\n }\n}\n\nclass ComboboxListbox extends HTMLElement {\n constructor() {\n super();\n\n this.handleFilter = this.handleFilter.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleReset = this.handleReset.bind(this);\n\n this.handleOptionSelection = this.handleOptionSelection.bind(this);\n }\n\n get emptyLabel() {\n return this.getAttribute('empty-label');\n }\n\n get emptyState() {\n return `\n <p id='empty-state' style=\"text-align: center;\">\n ${this.emptyLabel || t('combobox.noItems')}\n </p>\n `;\n }\n\n connectedCallback() {\n this.setAttribute('role', 'listbox');\n this.setAttribute('id', generateId('listbox'));\n\n this.addEventListener('combobox.listbox.filter', this.handleFilter);\n this.addEventListener('combobox.listbox.focus', this.handleFocus);\n this.addEventListener('combobox.listbox.reset', this.handleReset);\n\n this.triggers = Array.from(\n this.parentElement.querySelectorAll(\n 'smileid-combobox-trigger input, smileid-combobox-trigger button',\n ),\n );\n this.triggers.forEach((node) =>\n node.setAttribute('aria-controls', this.getAttribute('id')),\n );\n\n this.optionNodes = Array.from(\n this.querySelectorAll('smileid-combobox-option'),\n );\n this.selectedNode =\n this.optionNodes.find(\n (node) =>\n !node.hasAttribute('hidden') && node.hasAttribute('aria-selected'),\n ) || this.optionNodes.filter((node) => !node.hasAttribute('hidden'))[0];\n this.selectedNode.setAttribute('tabindex', '0');\n\n this.optionNodes.forEach((node) => {\n node.addEventListener(\n 'combobox.option.select',\n this.handleOptionSelection,\n );\n });\n\n if (this.optionNodes.length === 0) {\n this.innerHTML = this.emptyState;\n }\n }\n\n disconnectedCallback() {\n this.removeEventListener('combobox.listbox.filter', this.handleFilter);\n this.removeEventListener('combobox.listbox.focus', this.handleFocus);\n this.removeEventListener('combobox.listbox.reset', this.handleReset);\n this.optionNodes.forEach((node) => {\n node.removeEventListener(\n 'combobox.option.select',\n this.handleOptionSelection,\n );\n });\n }\n\n static get observedAttributes() {\n return ['search-term'];\n }\n\n attributeChangedCallback(name, oldValue, newValue) {\n switch (name) {\n case 'search-term':\n if (oldValue && !newValue) {\n this.optionNodes.forEach((node) => {\n node.removeAttribute('hidden');\n });\n } else if (newValue) {\n this.filterNodes(newValue);\n }\n break;\n default:\n break;\n }\n }\n\n filterNodes(searchTerm) {\n this.optionNodes.forEach((node) => {\n const value = node.getAttribute('value').toLowerCase();\n const label = node.getAttribute('label').toLowerCase();\n\n const containsSearchTerm =\n value.includes(searchTerm.toLowerCase()) ||\n label.includes(searchTerm.toLowerCase());\n\n if (containsSearchTerm) {\n node.removeAttribute('hidden');\n } else {\n node.setAttribute('hidden', true);\n }\n });\n\n const optionsVisible = this.optionNodes.find(\n (node) => !node.hasAttribute('hidden'),\n );\n const emptyState = this.querySelector('#empty-state');\n\n if (!optionsVisible && !emptyState) {\n this.insertAdjacentHTML('afterbegin', this.emptyState);\n } else if (optionsVisible && emptyState) {\n this.removeChild(emptyState);\n }\n }\n\n handleFilter(event) {\n const searchTerm = event.detail;\n this.setAttribute('search-term', searchTerm);\n }\n\n handleFocus(event) {\n this.setSelected(event.detail.direction);\n }\n\n handleReset() {\n this.optionNodes.forEach((node) => node.setAttribute('tabindex', '-1'));\n }\n\n handleOptionSelection(event) {\n const inputTrigger = this.triggers.filter(\n (node) => node.tagName === 'INPUT',\n )[0];\n\n if (inputTrigger) {\n this.setAttribute('search-term', event.detail.label);\n }\n }\n\n setSelected(direction) {\n const visibleOptions = this.optionNodes.filter(\n (node) => !node.hasAttribute('hidden'),\n );\n this.selectedNode.setAttribute('tabindex', '0');\n const currentIndex = visibleOptions.findIndex(\n (node) => node === this.selectedNode,\n );\n const lastIndex = visibleOptions.length - 1;\n\n let nextIndex;\n switch (direction) {\n case 'First':\n nextIndex = 0;\n break;\n case 'Last':\n nextIndex = lastIndex;\n break;\n case 'Up':\n if (currentIndex === 0) {\n nextIndex = lastIndex;\n } else {\n nextIndex = currentIndex - 1;\n }\n break;\n default:\n if (currentIndex === lastIndex) {\n nextIndex = 0;\n } else {\n nextIndex = currentIndex + 1;\n }\n break;\n }\n\n if (currentIndex !== nextIndex) {\n this.swapSelected(this.selectedNode, visibleOptions[nextIndex]);\n }\n }\n\n swapSelected(currentNode, newNode) {\n currentNode.setAttribute('tabindex', '-1');\n newNode.setAttribute('tabindex', '0');\n\n this.selectedNode = newNode;\n\n // ACTION: ensure the new option is in view\n if (isScrollable(this)) {\n maintainScrollVisibility(this.selectedNode, this);\n }\n\n // ACTION: scroll into view if node is not visible\n if (!isElementInView(newNode)) {\n newNode.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n\n this.triggers.forEach((node) =>\n node.setAttribute('aria-activedescendant', newNode.id),\n );\n }\n}\n\nclass ComboboxOption extends HTMLElement {\n connectedCallback() {\n this.setAttribute('role', 'option');\n this.setAttribute('tabindex', '-1');\n this.setAttribute('id', generateId('option'));\n\n this.options = Array.from(\n this.parentElement.querySelectorAll('smileid-combobox-option'),\n );\n this.addEventListener('click', this.select);\n }\n\n disconnectedCallback() {\n this.removeEventListener('click', this.select);\n }\n\n get value() {\n return this.getAttribute('value');\n }\n\n get label() {\n return this.getAttribute('label');\n }\n\n select() {\n const selectedOption = this.options.find((node) =>\n node.getAttribute('aria-selected'),\n );\n\n if (selectedOption) {\n selectedOption.removeAttribute('aria-selected');\n }\n\n this.setAttribute('aria-selected', true);\n\n this.dispatchEvent(\n new CustomEvent('combobox.option.select', {\n detail: {\n id: this.getAttribute('id'),\n label: this.label,\n value: this.value,\n },\n }),\n );\n }\n}\n\nconst Root = ComboboxRoot;\nconst Trigger = ComboboxTrigger;\nconst List = ComboboxListbox;\nconst Option = ComboboxOption;\n\nif (\n 'customElements' in window &&\n !window.customElements.get('smileid-combobox')\n) {\n window.customElements.define('smileid-combobox', Root);\n window.customElements.define('smileid-combobox-trigger', Trigger);\n window.customElements.define('smileid-combobox-listbox', List);\n window.customElements.define('smileid-combobox-option', Option);\n}\n\nexport { Root, Trigger, List, Option };\n"],"names":["generateId","prefix","id","isElementInView","element","bounding","isScrollable","maintainScrollVisibility","activeElement","scrollParent","offsetHeight","offsetTop","parentOffsetHeight","scrollTop","isAbove","isBelow","ComboboxRoot","event","target","ComboboxTrigger","t","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":"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"}
1
+ {"version":3,"file":"combobox.js","sources":["../../lib/components/combobox/src/Combobox.js"],"sourcesContent":["import { t } from '../../../domain/localisation';\n\nfunction generateId(prefix) {\n const id = [...Array(30)].map(() => Math.random().toString(36)[3]).join('');\n return `${prefix}-${id}`;\n}\n\n// check if element is visible in browser view port\nfunction isElementInView(element) {\n const bounding = element.getBoundingClientRect();\n\n return (\n bounding.top >= 0 &&\n bounding.left >= 0 &&\n bounding.bottom <=\n (window.innerHeight || document.documentElement.clientHeight) &&\n bounding.right <=\n (window.innerWidth || document.documentElement.clientWidth)\n );\n}\n\n// check if an element is currently scrollable\nfunction isScrollable(element) {\n return element && element.clientHeight < element.scrollHeight;\n}\n\n// ensure a given child element is within the parent's visible scroll area\n// if the child is not visible, scroll the parent\nfunction maintainScrollVisibility(activeElement, scrollParent) {\n const { offsetHeight, offsetTop } = activeElement;\n const { offsetHeight: parentOffsetHeight, scrollTop } = scrollParent;\n\n const isAbove = offsetTop < scrollTop;\n const isBelow = offsetTop + offsetHeight > scrollTop + parentOffsetHeight;\n\n if (isAbove) {\n scrollParent.scrollTo(0, offsetTop);\n } else if (isBelow) {\n scrollParent.scrollTo(0, offsetTop - parentOffsetHeight + offsetHeight);\n }\n}\n\nclass ComboboxRoot extends HTMLElement {\n constructor() {\n super();\n\n this.handleRoaming = this.handleRoaming.bind(this);\n }\n\n connectedCallback() {\n this.trigger = this.querySelector('smileid-combobox-trigger');\n\n document.addEventListener('click', this.handleRoaming);\n this.addEventListener('focusout', this.handleRoaming);\n this.addEventListener('blur', this.handleRoaming);\n }\n\n disconnectedCallback() {\n document.removeEventListener('click', this.handleRoaming);\n this.removeEventListener('focusout', this.handleRoaming);\n this.removeEventListener('blur', this.handleRoaming);\n }\n\n handleRoaming(event) {\n const target = event.relatedTarget || event.target;\n if (this.contains(target)) {\n return;\n }\n\n if (this.trigger.getAttribute('expanded') === 'true') {\n this.trigger.setAttribute('expanded', 'false');\n }\n }\n}\n\nclass ComboboxTrigger extends HTMLElement {\n constructor() {\n super();\n\n this.handleKeyUp = this.handleKeyUp.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleInput = this.handleInput.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleSelection = this.handleSelection.bind(this);\n\n this.toggleExpansionState = this.toggleExpansionState.bind(this);\n }\n\n get type() {\n return this.getAttribute('type') || 'text';\n }\n\n get label() {\n return this.getAttribute('label') || '';\n }\n\n get value() {\n return this.getAttribute('value') || '';\n }\n\n get disabled() {\n return this.hasAttribute('disabled');\n }\n\n connectedCallback() {\n if (!this.label) {\n throw new Error('<combobox-trigger>: a label attribute is required');\n }\n\n this.innerHTML = `${\n this.type === 'text'\n ? `\n <div>\n <input ${this.value ? `value=\"${this.value}\" ` : ''}${\n this.disabled ? ' disabled ' : ''\n }type=\"text\" placeholder=\"${this.label}\" />\n <button ${this.disabled ? 'disabled ' : ''}tabindex='-1' type='button'>\n <span class=\"visually-hidden\">${t('common.toggle')}</span>\n </button>\n </div>\n `\n : `<button ${this.disabled ? 'disabled ' : ''}type=\"button\">${\n this.value || this.label\n }</button>`\n }`;\n\n this.setAttribute('expanded', false);\n\n this.inputTrigger = this.querySelector('input');\n this.buttonTrigger = this.querySelector('button');\n\n this.buttonTrigger.setAttribute('aria-expanded', false);\n this.buttonTrigger.setAttribute('role', 'combobox');\n\n this.buttonTrigger.addEventListener('keydown', this.handleKeyDown);\n this.buttonTrigger.addEventListener('click', this.toggleExpansionState);\n\n if (this.inputTrigger) {\n this.inputTrigger.setAttribute('aria-expanded', false);\n this.inputTrigger.setAttribute('role', 'combobox');\n\n this.inputTrigger.addEventListener('keydown', this.handleKeyDown);\n this.inputTrigger.addEventListener('keyup', this.handleKeyUp);\n this.inputTrigger.addEventListener('input', this.handleInput);\n this.inputTrigger.addEventListener('change', this.handleChange);\n }\n\n this.listbox = this.parentElement.querySelector('smileid-combobox-listbox');\n\n this.options = Array.from(\n this.parentElement.querySelectorAll('smileid-combobox-option'),\n );\n this.options.forEach((node) => {\n node.addEventListener('combobox.option.select', this.handleSelection);\n });\n }\n\n disconnectedCallback() {\n this.buttonTrigger.removeEventListener('keydown', this.handleKeyDown);\n this.buttonTrigger.removeEventListener('click', this.toggleExpansionState);\n\n if (this.inputTrigger) {\n this.inputTrigger.removeEventListener('keydown', this.handleKeyDown);\n this.inputTrigger.removeEventListener('keyup', this.handleKeyUp);\n this.inputTrigger.removeEventListener('input', this.handleInput);\n this.inputTrigger.removeEventListener('change', this.handleChange);\n }\n\n if (this.options) {\n this.options.forEach((node) => {\n node.removeEventListener(\n 'combobox.option.select',\n this.handleSelection,\n );\n });\n }\n }\n\n handleKeyDown(event) {\n if (event.ctrlKey || event.shiftKey) {\n return;\n }\n\n const { key } = event;\n\n switch (key) {\n case 'Enter':\n case 'Space':\n case ' ':\n if (this.getAttribute('expanded') === 'true') {\n if (this.inputTrigger && (key === 'Space' || key === ' ')) {\n this.resetListbox();\n } else {\n event.preventDefault();\n const selectedOption = this.buttonTrigger.getAttribute(\n 'aria-activedescendant',\n );\n if (selectedOption) {\n document.getElementById(selectedOption).click();\n }\n }\n } else {\n event.preventDefault();\n this.toggleExpansionState();\n }\n break;\n case 'Esc':\n case 'Escape':\n event.preventDefault();\n if (this.getAttribute('expanded') === 'true') {\n this.toggleExpansionState();\n }\n break;\n case 'Down':\n case 'ArrowDown':\n event.preventDefault();\n if (this.getAttribute('expanded') !== 'true') {\n this.toggleExpansionState();\n this.focusListbox('First');\n } else {\n this.focusListbox('Down');\n }\n break;\n case 'Up':\n case 'ArrowUp':\n event.preventDefault();\n if (this.getAttribute('expanded') !== 'true') {\n this.toggleExpansionState();\n this.focusListbox('Last');\n } else {\n this.focusListbox('Up');\n }\n break;\n case 'Left':\n case 'ArrowLeft':\n case 'Right':\n case 'ArrowRight':\n case 'Home':\n case 'End':\n this.resetListbox();\n break;\n case 'Tab':\n break;\n default:\n break;\n }\n }\n\n handleKeyUp(event) {\n if (event.key === 'Escape' || event.key === 'Esc') {\n event.preventDefault();\n if (this.getAttribute('expanded') === 'true') {\n this.toggleExpansionState();\n } else if (this.inputTrigger) {\n this.inputTrigger.value = '';\n\n this.listbox.dispatchEvent(\n new CustomEvent('combobox.listbox.filter', { detail: '' }),\n );\n }\n }\n }\n\n handleInput(event) {\n this.resetListbox();\n this.filterListbox(event.target.value);\n }\n\n handleChange(event) {\n event.stopPropagation();\n }\n\n toggleExpansionState() {\n const listboxIsExpanded = this.getAttribute('expanded') === 'true';\n this.setAttribute('expanded', !listboxIsExpanded);\n this.buttonTrigger.setAttribute('aria-expanded', !listboxIsExpanded);\n if (this.inputTrigger) {\n this.inputTrigger.setAttribute('aria-expanded', !listboxIsExpanded);\n }\n }\n\n handleSelection(event) {\n if (this.inputTrigger) {\n this.inputTrigger.value = event.detail.label;\n } else {\n this.buttonTrigger.textContent = event.detail.label;\n }\n\n this.toggleExpansionState();\n this.parentElement.dispatchEvent(\n new CustomEvent('combobox.change', {\n detail: {\n value: event.detail.value,\n },\n }),\n );\n }\n\n filterListbox(value) {\n if (this.getAttribute('expanded') !== 'true') {\n this.toggleExpansionState();\n }\n\n this.listbox.dispatchEvent(\n new CustomEvent('combobox.listbox.filter', { detail: value }),\n );\n }\n\n focusListbox(direction) {\n this.resetListbox();\n this.listbox.dispatchEvent(\n new CustomEvent('combobox.listbox.focus', {\n detail: {\n direction,\n },\n }),\n );\n }\n\n resetListbox() {\n this.listbox.dispatchEvent(new CustomEvent('combobox.listbox.reset'));\n }\n}\n\nclass ComboboxListbox extends HTMLElement {\n constructor() {\n super();\n\n this.handleFilter = this.handleFilter.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleReset = this.handleReset.bind(this);\n\n this.handleOptionSelection = this.handleOptionSelection.bind(this);\n }\n\n get emptyLabel() {\n return this.getAttribute('empty-label');\n }\n\n get emptyState() {\n return `\n <p id='empty-state' style=\"text-align: center;\">\n ${this.emptyLabel || t('combobox.noItems')}\n </p>\n `;\n }\n\n connectedCallback() {\n this.setAttribute('role', 'listbox');\n this.setAttribute('id', generateId('listbox'));\n\n this.addEventListener('combobox.listbox.filter', this.handleFilter);\n this.addEventListener('combobox.listbox.focus', this.handleFocus);\n this.addEventListener('combobox.listbox.reset', this.handleReset);\n\n this.triggers = Array.from(\n this.parentElement.querySelectorAll(\n 'smileid-combobox-trigger input, smileid-combobox-trigger button',\n ),\n );\n this.triggers.forEach((node) =>\n node.setAttribute('aria-controls', this.getAttribute('id')),\n );\n\n this.optionNodes = Array.from(\n this.querySelectorAll('smileid-combobox-option'),\n );\n this.selectedNode =\n this.optionNodes.find(\n (node) =>\n !node.hasAttribute('hidden') && node.hasAttribute('aria-selected'),\n ) || this.optionNodes.filter((node) => !node.hasAttribute('hidden'))[0];\n this.selectedNode.setAttribute('tabindex', '0');\n\n this.optionNodes.forEach((node) => {\n node.addEventListener(\n 'combobox.option.select',\n this.handleOptionSelection,\n );\n });\n\n if (this.optionNodes.length === 0) {\n this.innerHTML = this.emptyState;\n }\n }\n\n disconnectedCallback() {\n this.removeEventListener('combobox.listbox.filter', this.handleFilter);\n this.removeEventListener('combobox.listbox.focus', this.handleFocus);\n this.removeEventListener('combobox.listbox.reset', this.handleReset);\n this.optionNodes.forEach((node) => {\n node.removeEventListener(\n 'combobox.option.select',\n this.handleOptionSelection,\n );\n });\n }\n\n static get observedAttributes() {\n return ['search-term'];\n }\n\n attributeChangedCallback(name, oldValue, newValue) {\n switch (name) {\n case 'search-term':\n if (oldValue && !newValue) {\n this.optionNodes.forEach((node) => {\n node.removeAttribute('hidden');\n });\n } else if (newValue) {\n this.filterNodes(newValue);\n }\n break;\n default:\n break;\n }\n }\n\n filterNodes(searchTerm) {\n this.optionNodes.forEach((node) => {\n const value = node.getAttribute('value').toLowerCase();\n const label = node.getAttribute('label').toLowerCase();\n\n const containsSearchTerm =\n value.includes(searchTerm.toLowerCase()) ||\n label.includes(searchTerm.toLowerCase());\n\n if (containsSearchTerm) {\n node.removeAttribute('hidden');\n } else {\n node.setAttribute('hidden', true);\n }\n });\n\n const optionsVisible = this.optionNodes.find(\n (node) => !node.hasAttribute('hidden'),\n );\n const emptyState = this.querySelector('#empty-state');\n\n if (!optionsVisible && !emptyState) {\n this.insertAdjacentHTML('afterbegin', this.emptyState);\n } else if (optionsVisible && emptyState) {\n this.removeChild(emptyState);\n }\n }\n\n handleFilter(event) {\n const searchTerm = event.detail;\n this.setAttribute('search-term', searchTerm);\n }\n\n handleFocus(event) {\n this.setSelected(event.detail.direction);\n }\n\n handleReset() {\n this.optionNodes.forEach((node) => node.setAttribute('tabindex', '-1'));\n }\n\n handleOptionSelection(event) {\n const inputTrigger = this.triggers.filter(\n (node) => node.tagName === 'INPUT',\n )[0];\n\n if (inputTrigger) {\n this.setAttribute('search-term', event.detail.label);\n }\n }\n\n setSelected(direction) {\n const visibleOptions = this.optionNodes.filter(\n (node) => !node.hasAttribute('hidden'),\n );\n this.selectedNode.setAttribute('tabindex', '0');\n const currentIndex = visibleOptions.findIndex(\n (node) => node === this.selectedNode,\n );\n const lastIndex = visibleOptions.length - 1;\n\n let nextIndex;\n switch (direction) {\n case 'First':\n nextIndex = 0;\n break;\n case 'Last':\n nextIndex = lastIndex;\n break;\n case 'Up':\n if (currentIndex === 0) {\n nextIndex = lastIndex;\n } else {\n nextIndex = currentIndex - 1;\n }\n break;\n default:\n if (currentIndex === lastIndex) {\n nextIndex = 0;\n } else {\n nextIndex = currentIndex + 1;\n }\n break;\n }\n\n if (currentIndex !== nextIndex) {\n this.swapSelected(this.selectedNode, visibleOptions[nextIndex]);\n }\n }\n\n swapSelected(currentNode, newNode) {\n currentNode.setAttribute('tabindex', '-1');\n newNode.setAttribute('tabindex', '0');\n\n this.selectedNode = newNode;\n\n // ACTION: ensure the new option is in view\n if (isScrollable(this)) {\n maintainScrollVisibility(this.selectedNode, this);\n }\n\n // ACTION: scroll into view if node is not visible\n if (!isElementInView(newNode)) {\n newNode.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n\n this.triggers.forEach((node) =>\n node.setAttribute('aria-activedescendant', newNode.id),\n );\n }\n}\n\nclass ComboboxOption extends HTMLElement {\n connectedCallback() {\n this.setAttribute('role', 'option');\n this.setAttribute('tabindex', '-1');\n this.setAttribute('id', generateId('option'));\n\n this.options = Array.from(\n this.parentElement.querySelectorAll('smileid-combobox-option'),\n );\n this.addEventListener('click', this.select);\n }\n\n disconnectedCallback() {\n this.removeEventListener('click', this.select);\n }\n\n get value() {\n return this.getAttribute('value');\n }\n\n get label() {\n return this.getAttribute('label');\n }\n\n select() {\n const selectedOption = this.options.find((node) =>\n node.getAttribute('aria-selected'),\n );\n\n if (selectedOption) {\n selectedOption.removeAttribute('aria-selected');\n }\n\n this.setAttribute('aria-selected', true);\n\n this.dispatchEvent(\n new CustomEvent('combobox.option.select', {\n detail: {\n id: this.getAttribute('id'),\n label: this.label,\n value: this.value,\n },\n }),\n );\n }\n}\n\nconst Root = ComboboxRoot;\nconst Trigger = ComboboxTrigger;\nconst List = ComboboxListbox;\nconst Option = ComboboxOption;\n\nif (\n 'customElements' in window &&\n !window.customElements.get('smileid-combobox')\n) {\n window.customElements.define('smileid-combobox', Root);\n window.customElements.define('smileid-combobox-trigger', Trigger);\n window.customElements.define('smileid-combobox-listbox', List);\n window.customElements.define('smileid-combobox-option', Option);\n}\n\nexport { Root, Trigger, List, Option };\n"],"names":["generateId","prefix","id","isElementInView","element","bounding","isScrollable","maintainScrollVisibility","activeElement","scrollParent","offsetHeight","offsetTop","parentOffsetHeight","scrollTop","isAbove","isBelow","ComboboxRoot","event","target","ComboboxTrigger","t","node","key","selectedOption","listboxIsExpanded","value","direction","ComboboxListbox","name","oldValue","newValue","searchTerm","label","optionsVisible","emptyState","visibleOptions","currentIndex","lastIndex","nextIndex","currentNode","newNode","ComboboxOption","Root","Trigger","List","Option"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { D as r } from "./DocumentCaptureScreens-DbU8ZxMx.js";
1
+ import { D as r } from "./DocumentCaptureScreens-zEVFc_Kr.js";
2
2
  export {
3
3
  r as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { E as o } from "./EndUserConsent-BGO3oZ-m.js";
1
+ import { E as o } from "./EndUserConsent-BXvS7t8z.js";
2
2
  export {
3
3
  o as EndUserConsent
4
4
  };