@verdocs/web-sdk 6.10.6 → 6.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Environment-C3P2cz0J.js +14 -0
- package/dist/cjs/Environment-C3P2cz0J.js.map +1 -0
- package/dist/cjs/{Icons-TVvtZ5iL.js → Icons-Zdy_DFce.js} +16 -2
- package/dist/cjs/{Icons-TVvtZ5iL.js.map → Icons-Zdy_DFce.js.map} +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/verdocs-adopt-signature-dialog_7.cjs.entry.js +2 -2
- package/dist/cjs/verdocs-auth.cjs.entry.js +271 -15
- package/dist/cjs/verdocs-auth.cjs.entry.js.map +1 -1
- package/dist/cjs/verdocs-contact-picker.cjs.entry.js +12 -14
- package/dist/cjs/verdocs-contact-picker.cjs.entry.js.map +1 -1
- package/dist/cjs/verdocs-field-attachment_11.cjs.entry.js +1 -1
- package/dist/cjs/verdocs-field-payment.cjs.entry.js +1 -1
- package/dist/cjs/verdocs-file-chooser_2.cjs.entry.js +1 -1
- package/dist/cjs/verdocs-preview_6.cjs.entry.js +2 -2
- package/dist/cjs/verdocs-sign.cjs.entry.js +1 -1
- package/dist/cjs/verdocs-template-document-page_2.cjs.entry.js +1 -1
- package/dist/cjs/verdocs-template-document-page_2.cjs.entry.js.map +1 -1
- package/dist/cjs/verdocs-web-sdk.cjs.js +1 -1
- package/dist/collection/components/controls/verdocs-toolbar-icon/verdocs-toolbar-icon.css +2 -1
- package/dist/collection/components/embeds/verdocs-auth/verdocs-auth.css +45 -1
- package/dist/collection/components/embeds/verdocs-auth/verdocs-auth.js +302 -19
- package/dist/collection/components/embeds/verdocs-auth/verdocs-auth.js.map +1 -1
- package/dist/collection/components/envelopes/verdocs-contact-picker/verdocs-contact-picker.js +12 -14
- package/dist/collection/components/envelopes/verdocs-contact-picker/verdocs-contact-picker.js.map +1 -1
- package/dist/collection/utils/Environment.js +4 -7
- package/dist/collection/utils/Environment.js.map +1 -1
- package/dist/collection/utils/Icons.js +12 -0
- package/dist/collection/utils/Icons.js.map +1 -1
- package/dist/components/{p-DCZz2B7h.js → p-6RWROB9R.js} +2 -2
- package/dist/components/p-6RWROB9R.js.map +1 -0
- package/dist/components/{p-i3o08M2d.js → p-B1UVXqFA.js} +2 -2
- package/dist/components/{p-bPe0_Dsn.js → p-B8R4luxA.js} +2 -2
- package/dist/components/{p-D-TexkaT.js → p-BXaR1BSS.js} +2 -2
- package/dist/components/{p-DL4-aTsZ.js → p-BYLm9aol.js} +2 -2
- package/dist/components/{p-DiYuPnJJ.js → p-Bp88Loqg.js} +2 -2
- package/dist/components/{p-C43B3SP_.js → p-C7JN32A9.js} +2 -2
- package/dist/components/{p-BDv5kBUR.js → p-C7k2AOsW.js} +2 -2
- package/dist/components/p-C7k2AOsW.js.map +1 -0
- package/dist/components/{p-DKKsPZnz.js → p-CCr_gliS.js} +2 -2
- package/dist/components/{p-BELGzhZw.js → p-CFau7OiC.js} +2 -2
- package/dist/components/{p-zTcSNwsp.js → p-Ck4pdoyc.js} +2 -2
- package/dist/components/{p-DZa0rMk2.js → p-CsF979IT.js} +2 -2
- package/dist/components/{p-CYvB5bYX.js → p-CtNpZzq1.js} +2 -2
- package/dist/components/{p-B6aUlIQe.js → p-CzKj8wD_.js} +2 -2
- package/dist/components/{p-DiwfOWXt.js → p-DJMr11ue.js} +2 -2
- package/dist/components/{p-CZwyK_uo.js → p-DLo5dMNn.js} +2 -2
- package/dist/components/{p-D1cSgqut.js → p-D_FNSGtS.js} +2 -2
- package/dist/components/p-DavVixMP.js +2 -0
- package/dist/components/p-DavVixMP.js.map +1 -0
- package/dist/components/{p-K_PKw6bs.js → p-DmxiVavg.js} +2 -2
- package/dist/components/{p-D7oMWhqM.js → p-DrNmI7Wz.js} +2 -2
- package/dist/components/{p-DfIxVX8-.js → p-DubfX0n1.js} +2 -2
- package/dist/components/{p-Dy2CRiH8.js → p-b2u0_wDk.js} +1 -1
- package/dist/components/p-b2u0_wDk.js.map +1 -0
- package/dist/components/{p-CAGp0qKc.js → p-hxWwaOcD.js} +2 -2
- package/dist/components/{p-BQUZjuoP.js → p-vcHtLpWY.js} +2 -2
- package/dist/components/verdocs-adopt-signature-dialog.js +1 -1
- package/dist/components/verdocs-auth.js +1 -1
- package/dist/components/verdocs-auth.js.map +1 -1
- package/dist/components/verdocs-build.js +1 -1
- package/dist/components/verdocs-contact-picker.js +1 -1
- package/dist/components/verdocs-delegate-dialog.js +1 -1
- package/dist/components/verdocs-field-attachment.js +1 -1
- package/dist/components/verdocs-field-checkbox.js +1 -1
- package/dist/components/verdocs-field-date.js +1 -1
- package/dist/components/verdocs-field-dropdown.js +1 -1
- package/dist/components/verdocs-field-initial.js +1 -1
- package/dist/components/verdocs-field-payment.js +1 -1
- package/dist/components/verdocs-field-radio.js +1 -1
- package/dist/components/verdocs-field-signature.js +1 -1
- package/dist/components/verdocs-field-textarea.js +1 -1
- package/dist/components/verdocs-field-textbox.js +1 -1
- package/dist/components/verdocs-field-timestamp.js +1 -1
- package/dist/components/verdocs-file-chooser.js +1 -1
- package/dist/components/verdocs-otp-dialog.js +1 -1
- package/dist/components/verdocs-passcode-dialog.js +1 -1
- package/dist/components/verdocs-preview.js +1 -1
- package/dist/components/verdocs-send.js +1 -1
- package/dist/components/verdocs-sign.js +1 -1
- package/dist/components/verdocs-template-attachments.js +1 -1
- package/dist/components/verdocs-template-document-page.js +1 -1
- package/dist/components/verdocs-template-fields.js +1 -1
- package/dist/components/verdocs-toolbar-icon.js +1 -1
- package/dist/custom-elements.json +2508 -0
- package/dist/esm/Environment-b2u0_wDk.js +12 -0
- package/dist/esm/Environment-b2u0_wDk.js.map +1 -0
- package/dist/esm/{Icons-BU5rnXp2.js → Icons-DobS6Y7w.js} +15 -3
- package/dist/esm/{Icons-BU5rnXp2.js.map → Icons-DobS6Y7w.js.map} +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/verdocs-adopt-signature-dialog_7.entry.js +2 -2
- package/dist/esm/verdocs-auth.entry.js +273 -17
- package/dist/esm/verdocs-auth.entry.js.map +1 -1
- package/dist/esm/verdocs-contact-picker.entry.js +12 -14
- package/dist/esm/verdocs-contact-picker.entry.js.map +1 -1
- package/dist/esm/verdocs-field-attachment_11.entry.js +1 -1
- package/dist/esm/verdocs-field-payment.entry.js +1 -1
- package/dist/esm/verdocs-file-chooser_2.entry.js +1 -1
- package/dist/esm/verdocs-preview_6.entry.js +2 -2
- package/dist/esm/verdocs-sign.entry.js +1 -1
- package/dist/esm/verdocs-template-document-page_2.entry.js +1 -1
- package/dist/esm/verdocs-template-document-page_2.entry.js.map +1 -1
- package/dist/esm/verdocs-web-sdk.js +1 -1
- package/dist/esm-es5/{Environment-Dy2CRiH8.js → Environment-b2u0_wDk.js} +1 -1
- package/dist/esm-es5/Environment-b2u0_wDk.js.map +1 -0
- package/dist/esm-es5/{Icons-BU5rnXp2.js → Icons-DobS6Y7w.js} +2 -2
- package/dist/esm-es5/{Icons-BU5rnXp2.js.map → Icons-DobS6Y7w.js.map} +1 -1
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/verdocs-adopt-signature-dialog_7.entry.js +1 -1
- package/dist/esm-es5/verdocs-auth.entry.js +1 -1
- package/dist/esm-es5/verdocs-auth.entry.js.map +1 -1
- package/dist/esm-es5/verdocs-contact-picker.entry.js +1 -1
- package/dist/esm-es5/verdocs-contact-picker.entry.js.map +1 -1
- package/dist/esm-es5/verdocs-field-attachment_11.entry.js +1 -1
- package/dist/esm-es5/verdocs-field-payment.entry.js +1 -1
- package/dist/esm-es5/verdocs-file-chooser_2.entry.js +1 -1
- package/dist/esm-es5/verdocs-preview_6.entry.js +1 -1
- package/dist/esm-es5/verdocs-sign.entry.js +1 -1
- package/dist/esm-es5/verdocs-template-document-page_2.entry.js +1 -1
- package/dist/esm-es5/verdocs-template-document-page_2.entry.js.map +1 -1
- package/dist/esm-es5/verdocs-web-sdk.js +1 -1
- package/dist/types/components/embeds/verdocs-auth/verdocs-auth.d.ts +31 -3
- package/dist/types/components.d.ts +18 -7
- package/dist/types/utils/Icons.d.ts +2 -0
- package/dist/verdocs-web-sdk/{p-869024e0.system.entry.js → p-09f5670e.system.entry.js} +2 -2
- package/dist/verdocs-web-sdk/p-0fb8e6e0.system.entry.js +2 -0
- package/dist/verdocs-web-sdk/p-0fb8e6e0.system.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/{p-e87a29a3.system.entry.js → p-298d799f.system.entry.js} +3 -3
- package/dist/verdocs-web-sdk/{p-734c8a8b.entry.js → p-2a6a3bc6.entry.js} +2 -2
- package/dist/verdocs-web-sdk/{p-46e52384.system.entry.js → p-39c54b65.system.entry.js} +2 -2
- package/dist/verdocs-web-sdk/p-39c54b65.system.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/{p-62464041.system.entry.js → p-439d36b0.system.entry.js} +2 -2
- package/dist/verdocs-web-sdk/{p-d95705c6.entry.js → p-4930b31d.entry.js} +2 -2
- package/dist/verdocs-web-sdk/{p-255e1915.entry.js → p-4e0788f9.entry.js} +2 -2
- package/dist/verdocs-web-sdk/p-4e0788f9.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/{p-c6f52cd7.entry.js → p-4ea0632f.entry.js} +2 -2
- package/dist/verdocs-web-sdk/{p-c6f52cd7.entry.js.map → p-4ea0632f.entry.js.map} +1 -1
- package/dist/verdocs-web-sdk/{p-c86111fd.system.entry.js → p-5404f6bf.system.entry.js} +2 -2
- package/dist/verdocs-web-sdk/{p-10d47bbd.entry.js → p-5cad2422.entry.js} +2 -2
- package/dist/verdocs-web-sdk/{p-4aee15e6.entry.js → p-932e8b9b.entry.js} +2 -2
- package/dist/verdocs-web-sdk/{p-6e8ce989.system.entry.js → p-99f7a0fa.system.entry.js} +2 -2
- package/dist/verdocs-web-sdk/{p-GqS1qR-V.system.js → p-BHF3ByWV.system.js} +2 -2
- package/dist/verdocs-web-sdk/{p-GqS1qR-V.system.js.map → p-BHF3ByWV.system.js.map} +1 -1
- package/dist/verdocs-web-sdk/p-BdZ5Ghsa.system.js +1 -1
- package/dist/verdocs-web-sdk/{p-C96xjMgt.system.js → p-COHG5J4h.system.js} +1 -1
- package/dist/verdocs-web-sdk/p-COHG5J4h.system.js.map +1 -0
- package/dist/verdocs-web-sdk/{p-BU5rnXp2.js → p-DobS6Y7w.js} +2 -2
- package/dist/verdocs-web-sdk/{p-BU5rnXp2.js.map → p-DobS6Y7w.js.map} +1 -1
- package/dist/verdocs-web-sdk/{p-Dy2CRiH8.js → p-b2u0_wDk.js} +1 -1
- package/dist/verdocs-web-sdk/p-b2u0_wDk.js.map +1 -0
- package/dist/verdocs-web-sdk/{p-098b3852.system.entry.js → p-ba0d4ff5.system.entry.js} +2 -2
- package/dist/verdocs-web-sdk/{p-098b3852.system.entry.js.map → p-ba0d4ff5.system.entry.js.map} +1 -1
- package/dist/verdocs-web-sdk/p-c3e9634c.entry.js +2 -0
- package/dist/verdocs-web-sdk/p-c3e9634c.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/{p-7e1f895c.entry.js → p-dd59aa9a.entry.js} +2 -2
- package/dist/verdocs-web-sdk/{p-c3527f3e.system.entry.js → p-f7b14409.system.entry.js} +2 -2
- package/dist/verdocs-web-sdk/{p-1df29abb.entry.js → p-fe404347.entry.js} +2 -2
- package/dist/verdocs-web-sdk/verdocs-web-sdk.esm.js +1 -1
- package/package.json +4 -4
- package/dist/cjs/Environment-CUCX3aWX.js +0 -17
- package/dist/cjs/Environment-CUCX3aWX.js.map +0 -1
- package/dist/components/p-BDv5kBUR.js.map +0 -1
- package/dist/components/p-CYqVJ_kJ.js +0 -2
- package/dist/components/p-CYqVJ_kJ.js.map +0 -1
- package/dist/components/p-DCZz2B7h.js.map +0 -1
- package/dist/components/p-Dy2CRiH8.js.map +0 -1
- package/dist/esm/Environment-Dy2CRiH8.js +0 -15
- package/dist/esm/Environment-Dy2CRiH8.js.map +0 -1
- package/dist/esm-es5/Environment-Dy2CRiH8.js.map +0 -1
- package/dist/verdocs-web-sdk/p-16d655d4.system.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-16d655d4.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-255e1915.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-43ee0267.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-43ee0267.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-46e52384.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-C96xjMgt.system.js.map +0 -1
- package/dist/verdocs-web-sdk/p-Dy2CRiH8.js.map +0 -1
- /package/dist/components/{p-i3o08M2d.js.map → p-B1UVXqFA.js.map} +0 -0
- /package/dist/components/{p-bPe0_Dsn.js.map → p-B8R4luxA.js.map} +0 -0
- /package/dist/components/{p-D-TexkaT.js.map → p-BXaR1BSS.js.map} +0 -0
- /package/dist/components/{p-DL4-aTsZ.js.map → p-BYLm9aol.js.map} +0 -0
- /package/dist/components/{p-DiYuPnJJ.js.map → p-Bp88Loqg.js.map} +0 -0
- /package/dist/components/{p-C43B3SP_.js.map → p-C7JN32A9.js.map} +0 -0
- /package/dist/components/{p-DKKsPZnz.js.map → p-CCr_gliS.js.map} +0 -0
- /package/dist/components/{p-BELGzhZw.js.map → p-CFau7OiC.js.map} +0 -0
- /package/dist/components/{p-zTcSNwsp.js.map → p-Ck4pdoyc.js.map} +0 -0
- /package/dist/components/{p-DZa0rMk2.js.map → p-CsF979IT.js.map} +0 -0
- /package/dist/components/{p-CYvB5bYX.js.map → p-CtNpZzq1.js.map} +0 -0
- /package/dist/components/{p-B6aUlIQe.js.map → p-CzKj8wD_.js.map} +0 -0
- /package/dist/components/{p-DiwfOWXt.js.map → p-DJMr11ue.js.map} +0 -0
- /package/dist/components/{p-CZwyK_uo.js.map → p-DLo5dMNn.js.map} +0 -0
- /package/dist/components/{p-D1cSgqut.js.map → p-D_FNSGtS.js.map} +0 -0
- /package/dist/components/{p-K_PKw6bs.js.map → p-DmxiVavg.js.map} +0 -0
- /package/dist/components/{p-D7oMWhqM.js.map → p-DrNmI7Wz.js.map} +0 -0
- /package/dist/components/{p-DfIxVX8-.js.map → p-DubfX0n1.js.map} +0 -0
- /package/dist/components/{p-CAGp0qKc.js.map → p-hxWwaOcD.js.map} +0 -0
- /package/dist/components/{p-BQUZjuoP.js.map → p-vcHtLpWY.js.map} +0 -0
- /package/dist/verdocs-web-sdk/{p-869024e0.system.entry.js.map → p-09f5670e.system.entry.js.map} +0 -0
- /package/dist/verdocs-web-sdk/{p-e87a29a3.system.entry.js.map → p-298d799f.system.entry.js.map} +0 -0
- /package/dist/verdocs-web-sdk/{p-734c8a8b.entry.js.map → p-2a6a3bc6.entry.js.map} +0 -0
- /package/dist/verdocs-web-sdk/{p-62464041.system.entry.js.map → p-439d36b0.system.entry.js.map} +0 -0
- /package/dist/verdocs-web-sdk/{p-d95705c6.entry.js.map → p-4930b31d.entry.js.map} +0 -0
- /package/dist/verdocs-web-sdk/{p-c86111fd.system.entry.js.map → p-5404f6bf.system.entry.js.map} +0 -0
- /package/dist/verdocs-web-sdk/{p-10d47bbd.entry.js.map → p-5cad2422.entry.js.map} +0 -0
- /package/dist/verdocs-web-sdk/{p-4aee15e6.entry.js.map → p-932e8b9b.entry.js.map} +0 -0
- /package/dist/verdocs-web-sdk/{p-6e8ce989.system.entry.js.map → p-99f7a0fa.system.entry.js.map} +0 -0
- /package/dist/verdocs-web-sdk/{p-7e1f895c.entry.js.map → p-dd59aa9a.entry.js.map} +0 -0
- /package/dist/verdocs-web-sdk/{p-c3527f3e.system.entry.js.map → p-f7b14409.system.entry.js.map} +0 -0
- /package/dist/verdocs-web-sdk/{p-1df29abb.entry.js.map → p-fe404347.entry.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["verdocsContactPickerCss","addrBookIcon","VerdocsContactPicker","constructor","hostRef","this","endpoint","VerdocsEndpoint","getDefault","templateRole","contactSuggestions","showSuggestions","showMessage","delegator","name_locked","auth_methods","passcode","firstNameFieldId","Math","random","toString","substring","lastNameFieldId","emailFieldId","phoneFieldId","activeEntitlements","authMethodsLoading","componentWillLoad","loadSession","fullName","formatFullName","nameComponents","split","firstName","first_name","shift","lastName","last_name","join","email","phone","message","getActiveEntitlements","catch","e","console","warn","log","handleFirstNameChange","target","value","_a","searchContacts","emit","query","handleLastNameChange","handleCancel","stopPropagation","exit","handleSubmit","next","address","zip","handleSelectSuggestion","suggestion","render","hasBasics","isValidEmail","hasAuthRequirements","length","includes","canSubmit","hasSMSAuth","sms_auth","verificationOptions","push","label","kba_auth","id_auth","h","key","onSubmit","preventDefault","autocomplete","class","htmlFor","id","name","type","placeholder","onFocus","setTimeout","onInput","anchor","onClickAway","document","querySelectorAll","forEach","el","remove","filter","toLowerCase","map","onClick","picture","alt","src","innerHTML","autoComplete","convertToE164","Fragment","size","mode","style","margin","option","i","checked","selected","marginTop","disabled","variant"],"sources":["src/components/envelopes/verdocs-contact-picker/verdocs-contact-picker.scss?tag=verdocs-contact-picker","src/components/envelopes/verdocs-contact-picker/verdocs-contact-picker.tsx"],"sourcesContent":["@import '../../../theme.scss';\n\nverdocs-contact-picker {\n display: block;\n border: 1px solid #ebebeb;\n background-color: $verdocs-grey-4;\n font-family: $verdocs-primary-font;\n box-shadow: 0 0 15px 0 rgba(0, 0, 0, 0.1);\n\n form {\n gap: 12px;\n width: 300px;\n padding: 12px;\n display: flex;\n flex-direction: column;\n background-color: $verdocs-grey-3;\n\n .row {\n gap: 8px;\n display: flex;\n position: relative;\n flex-direction: row;\n align-items: flex-start;\n\n .option {\n gap: 4px;\n display: flex;\n padding: 5px 8px;\n align-items: center;\n flex-direction: row;\n text-wrap: nowrap;\n }\n }\n\n .names-row {\n gap: 8px;\n display: flex;\n flex-direction: row;\n\n > input {\n font-size: 14px;\n width: 88px;\n }\n }\n\n .pin-code {\n gap: 8px;\n display: flex;\n align-items: flex-start;\n flex-direction: row;\n\n > input {\n flex: 0 0 197px;\n font-size: 14px;\n //margin-left: 88px;\n }\n }\n\n .address {\n gap: 8px;\n display: flex;\n align-items: center;\n flex-direction: row;\n\n > input {\n flex: 1;\n font-size: 14px;\n //margin-left: 88px;\n }\n }\n\n .zip-code {\n gap: 8px;\n display: flex;\n align-items: center;\n flex-direction: row;\n\n > input {\n flex: 1;\n font-size: 14px;\n //margin-left: 88px;\n }\n }\n\n label {\n display: flex;\n flex: 0 0 80px;\n font-size: 13px;\n font-weight: 500;\n color: $verdocs-bg-4;\n }\n\n .row.message textarea {\n width: 100%;\n padding: 5px 7px;\n border-radius: 4px;\n font-family: $verdocs-primary-font;\n }\n\n input {\n flex: 1;\n padding: 6px;\n font-size: 14px;\n border-radius: 3px;\n //background: #00000005;\n border: 1px solid $border-color-extralight;\n\n &:focus {\n outline: none;\n }\n }\n }\n\n .buttons {\n display: flex;\n column-gap: 6px;\n margin-top: 16px;\n flex-direction: row;\n\n .flex-fill {\n flex: 1;\n }\n }\n\n ::placeholder {\n color: $verdocs-bg-2;\n }\n\n // @see https://community.logmein.com/t5/LastPass-Support-Discussions/placeholder-text-overrides-data-lpignore-quot-true-quot/td-p/295135\n // LastPass is ignoring the data-lpignore attribute in some cases\n [data-lastpass-icon-root] {\n display: none !important;\n }\n}\n\n#verdocs-contact-picker-suggestions {\n .dropdown {\n max-height: 225px;\n overflow-y: scroll;\n background: #ffffff;\n font-family: $verdocs-primary-font;\n box-shadow: 0 0 15px 0 rgba(0, 0, 0, 0.1);\n\n .suggestion {\n display: flex;\n padding: 6px 12px;\n align-items: center;\n flex-direction: row;\n\n svg {\n width: 32px;\n height: 32px;\n }\n\n .avatar {\n width: 32px;\n height: 32px;\n flex: 0 0 32px;\n margin-right: 8px;\n border-radius: 100%;\n }\n\n .details {\n display: flex;\n flex-direction: column;\n }\n\n .name {\n font-size: 16px;\n font-weight: 500;\n margin-bottom: 3px;\n color: $verdocs-grey-0;\n }\n\n .destination {\n font-size: 14px;\n margin-bottom: 3px;\n color: $verdocs-grey-1;\n }\n\n &:hover {\n background: #eee;\n cursor: pointer;\n }\n }\n }\n}\n","import {Component, h, Event, EventEmitter, Fragment, Prop, State} from '@stencil/core';\nimport {formatFullName, getActiveEntitlements, IEntitlement, IProfile, IRecipient, isValidEmail, TEntitlement, TRecipientAuthMethod, VerdocsEndpoint} from '@verdocs/js-sdk';\nimport {convertToE164} from '../../../utils/utils';\n\nconst addrBookIcon = `<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-book-user\"><path d=\"M15 13a3 3 0 1 0-6 0\"/><path d=\"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20\"/><circle cx=\"12\" cy=\"8\" r=\"2\"/></svg>`;\n\nexport interface IContactSearchEvent {\n query: string;\n}\n\nexport interface IContactSelectEvent {\n first_name: string;\n last_name: string;\n email: string;\n phone: string;\n message: string;\n delegator: boolean;\n name_locked: boolean;\n auth_methods: TRecipientAuthMethod[];\n passcode: string;\n address: string;\n zip: string;\n}\n\nexport type TPickerContact = Partial<IProfile>;\n\n/**\n * Display a contact picker suitable for filling out Recipient objects when sending Envelopes.\n *\n * This picker can also be integrated with a backend to provide contact list / suggestion / address-book style behavior. As the\n * user interacts with the component, the text entered in the name fields is sent back to the parent via the `searchContacts` event.\n * The parent can use that text as a query string to call a backend to obtain appropriate contacts to show. This list may also be\n * hard-coded ahead of time to provide the user with smart suggestions on initial display, such as \"Recently Used\" contacts, or\n * to always display the user's own contact record.\n *\n * ```ts\n * <verdocs-contact-picker\n * templateRole={role}\n * contactSuggestions={[]}\n * onNext={e => console.log('Contact completed', e.detail)}\n * />\n * ```\n */\n@Component({\n tag: 'verdocs-contact-picker',\n styleUrl: 'verdocs-contact-picker.scss',\n shadow: false,\n})\nexport class VerdocsContactPicker {\n /**\n * The endpoint to use to communicate with Verdocs. If not set, the default endpoint will be used.\n */\n @Prop() endpoint: VerdocsEndpoint = VerdocsEndpoint.getDefault();\n\n /**\n * The role that this contact will be assigned to.\n */\n @Prop() templateRole: Partial<IRecipient> | null = null;\n\n /**\n * If set, suggestions will be displayed in a drop-down list to the user. It is recommended that the number\n * of suggestions be limited to the 5 best matching records.\n */\n @Prop() contactSuggestions: TPickerContact[] = [];\n\n /**\n * Event fired when the user enters text in the search field. The calling application may use this to update\n * the `contactSuggestions` property.\n */\n @Event({composed: true}) searchContacts: EventEmitter<IContactSearchEvent>;\n\n /**\n * Event fired when the step is cancelled. This is called exit to avoid conflicts with the JS-reserved \"cancel\" event name.\n */\n @Event({composed: true}) exit: EventEmitter;\n\n /**\n * Event fired when the user changes the type.\n */\n @Event({composed: true}) next: EventEmitter<IContactSelectEvent>;\n\n @State() first_name: string;\n @State() last_name: string;\n @State() email: string;\n @State() phone: string;\n @State() zip: string;\n @State() address: string;\n @State() message: string;\n @State() showSuggestions: boolean = false;\n @State() showMessage: boolean = false;\n @State() delegator: boolean = false;\n @State() name_locked: boolean = false;\n @State() auth_methods: TRecipientAuthMethod[] = [];\n @State() passcode: string = '';\n\n @State() firstNameFieldId = `verdocs-contact-picker-firstname-${Math.random().toString(36).substring(2, 11)}`;\n @State() lastNameFieldId = `verdocs-contact-picker-lastname-${Math.random().toString(36).substring(2, 11)}`;\n @State() emailFieldId = `verdocs-contact-picker-email-${Math.random().toString(36).substring(2, 11)}`;\n @State() phoneFieldId = `verdocs-contact-picker-phone-${Math.random().toString(36).substring(2, 11)}`;\n\n @State() activeEntitlements: Partial<Record<TEntitlement, IEntitlement>> = {};\n @State() authMethodsLoading: boolean = true\n\n async componentWillLoad() {\n this.endpoint.loadSession();\n\n if (this.templateRole) {\n const fullName = formatFullName(this.templateRole);\n const nameComponents = fullName.split(' ');\n const firstName = this.templateRole.first_name || nameComponents.shift() || '';\n const lastName = this.templateRole.last_name || nameComponents.join(' ') || '';\n this.first_name = firstName;\n this.last_name = lastName;\n\n this.email = this.templateRole.email || '';\n this.phone = this.templateRole.phone || '';\n // delegator and name_locked are mutually exclusive; delegator takes precedence if both are somehow set\n this.delegator = this.templateRole.delegator || false;\n this.name_locked = this.delegator ? false : (this.templateRole.name_locked || false);\n this.message = this.templateRole.message || '';\n this.showMessage = this.message !== '';\n this.auth_methods = this.templateRole.auth_methods || [];\n this.passcode = this.templateRole.passcode || '';\n }\n\n // Entitlements only gate the OPTIONAL methods (SMS, KBA, ID). Passcode and Email are always\n // offered, so a failure here must not block them: without this catch the await rejects,\n // authMethodsLoading stays true forever, and the user sees a spinner where every verification\n // option should be. Degrade to \"no optional entitlements\" instead.\n this.activeEntitlements = await getActiveEntitlements(this.endpoint).catch(e => {\n console.warn('[CONTACT PICKER] Unable to load entitlements, continuing with base auth methods only', e);\n return {} as Partial<Record<TEntitlement, IEntitlement>>;\n });\n this.authMethodsLoading = false;\n console.log('[CONTACT PICKER] Loaded entitlements', this.activeEntitlements);\n }\n\n handleFirstNameChange(e: any) {\n this.first_name = e.target.value;\n this.searchContacts?.emit({query: this.first_name});\n }\n\n handleLastNameChange(e: any) {\n this.last_name = e.target.value;\n this.searchContacts?.emit({query: this.last_name});\n }\n\n handleCancel(e: any) {\n e.stopPropagation();\n this.showSuggestions = false;\n this.exit?.emit();\n }\n\n handleSubmit(e: any) {\n e.stopPropagation();\n\n this.showSuggestions = false;\n this.next?.emit({\n first_name: this.first_name,\n last_name: this.last_name,\n email: this.email,\n phone: this.phone,\n message: this.message,\n delegator: this.delegator,\n name_locked: this.name_locked,\n auth_methods: this.auth_methods,\n passcode: this.passcode,\n address: this.address,\n zip: this.zip,\n });\n }\n\n handleSelectSuggestion(e: any, suggestion: TPickerContact) {\n e.stopPropagation();\n\n this.first_name = suggestion.first_name;\n this.last_name = suggestion.last_name;\n this.email = suggestion.email;\n this.phone = suggestion.phone;\n this.showSuggestions = false;\n }\n\n // The reason for the random names/IDs is to disable browser autocomplete. We set the autocomplete tags but many browsers ignore them\n // and show a duplicate autocomplete picker on top of our own.\n render() {\n // const hasBasics = this.first_name && this.last_name && (isValidEmail(this.email) || isValidPhone(this.phone));\n const hasBasics = this.first_name && this.last_name && isValidEmail(this.email);\n const hasAuthRequirements =\n !this.auth_methods.length ||\n (this.auth_methods.includes('passcode') && !!this.passcode) ||\n (this.auth_methods.includes('kba') && !!this.first_name && !!this.last_name) ||\n (this.auth_methods.includes('email') && !!this.email) ||\n (this.auth_methods.includes('sms') && !!this.phone);\n const canSubmit = hasBasics && hasAuthRequirements;\n const hasSMSAuth = !!this.activeEntitlements.sms_auth\n\n const verificationOptions = [];\n\n verificationOptions.push({label: 'Passcode', value: 'passcode'});\n verificationOptions.push({label: 'Email', value: 'email'});\n\n if (hasSMSAuth) {\n verificationOptions.push({label: 'SMS (One-Time Code)', value: 'sms'});\n }\n\n if (!!this.activeEntitlements.kba_auth) {\n verificationOptions.push({label: 'Knowledge-Based (KBA)', value: 'kba'});\n }\n\n if (!!this.activeEntitlements.id_auth) {\n verificationOptions.push({label: 'ID Check', value: 'id'});\n }\n\n return (\n <form\n onSubmit={e => e.preventDefault()}\n // onClick={e => e.stopPropagation()}\n autocomplete=\"off\"\n >\n <div class=\"row\">\n <label htmlFor={this.firstNameFieldId}>Name:</label>\n <div class=\"names-row\">\n <input\n id={this.firstNameFieldId}\n name={this.firstNameFieldId}\n type=\"text\"\n data-lpignore=\"true\"\n autocomplete=\"blocked\"\n aria-autocomplete=\"none\"\n value={this.first_name}\n placeholder=\"First...\"\n onFocus={() => {\n // Give the blur event a chance to hide it first if going between first/last\n setTimeout(() => {\n this.showSuggestions = this.contactSuggestions?.length > 0;\n }, 100);\n }}\n onInput={e => this.handleFirstNameChange(e)}\n />\n <input\n id={this.lastNameFieldId}\n name={this.lastNameFieldId}\n type=\"text\"\n data-lpignore=\"true\"\n autocomplete=\"blocked\"\n aria-autocomplete=\"none\"\n value={this.last_name}\n placeholder=\"Last...\"\n onFocus={() => {\n // Give the blur event a chance to hide it first if going between first/last\n setTimeout(() => {\n this.showSuggestions = this.contactSuggestions?.length > 0;\n }, 100);\n }}\n onInput={e => this.handleLastNameChange(e)}\n />\n </div>\n\n {this.showSuggestions && (\n <verdocs-portal\n anchor={this.firstNameFieldId}\n onClickAway={() => {\n this.showSuggestions = false;\n document.querySelectorAll(`.verdocs-portal-wrapper`).forEach(el => el.remove());\n }}\n id=\"verdocs-contact-picker-suggestions\"\n >\n <div class=\"dropdown\">\n {this.contactSuggestions\n .filter(suggestion => !this.first_name || suggestion.first_name?.toLowerCase().includes(this.first_name.toLowerCase()))\n .map(suggestion => (\n <div key={suggestion.id ?? suggestion.email} class=\"suggestion\" onClick={e => this.handleSelectSuggestion(e, suggestion)}>\n {suggestion.picture ? <img alt=\"Avatar\" class=\"avatar\" src={suggestion.picture} /> : <div class=\"avatar\" innerHTML={addrBookIcon} />}\n <div class=\"details\">\n <div class=\"name\">{formatFullName(suggestion)}</div>\n {suggestion.email && <div class=\"destination\">{suggestion.email}</div>}\n {suggestion.phone && <div class=\"destination\">{suggestion.phone}</div>}\n </div>\n </div>\n ))}\n </div>\n </verdocs-portal>\n )}\n </div>\n\n <div class=\"row\">\n <label htmlFor={this.emailFieldId}>Email:</label>\n <input\n id={this.emailFieldId}\n name={this.emailFieldId}\n type=\"text\"\n data-lpignore=\"true\"\n autoComplete=\"blocked\"\n aria-autocomplete=\"none\"\n value={this.email}\n placeholder=\"Invite/verify via email...\"\n onFocus={() => (this.showSuggestions = false)}\n onInput={(e: any) => (this.email = e.target.value)}\n />\n </div>\n\n {hasSMSAuth && (\n <div class=\"row\">\n <label htmlFor={this.phoneFieldId}>Phone:</label>\n <input\n id={this.phoneFieldId}\n name={this.phoneFieldId}\n type=\"text\"\n data-lpignore=\"true\"\n autoComplete=\"blocked\"\n aria-autocomplete=\"none\"\n value={this.phone}\n placeholder=\"Invite/verify via SMS...\"\n onFocus={() => (this.showSuggestions = false)}\n onInput={(e: any) => {\n this.phone = convertToE164(e.target.value);\n }}\n />\n </div>\n )}\n\n <Fragment>\n {verificationOptions.length > 0 && (\n <div class=\"row pin-code\">\n <label>Verification Methods:</label>\n {this.authMethodsLoading ? (\n <verdocs-spinner size={10} mode=\"dark\" style={{margin: 'auto'}} />\n ) : (\n <div>\n {verificationOptions.map((option, i) => (\n <div class=\"option\">\n <verdocs-checkbox\n size=\"small\"\n id={`verdocs-multi-select-opt-${i}`}\n value={option.value}\n checked={this.auth_methods.includes(option.value)}\n onInput={(e: any) => {\n if (e.target.checked) {\n this.auth_methods = [...this.auth_methods, option.value];\n } else {\n this.auth_methods = this.auth_methods.filter(selected => selected !== option.value);\n }\n }}\n />\n <label htmlFor={`verdocs-multi-select-option-${i}`}>{option.label}</label>\n </div>\n ))}\n </div>\n )} \n </div>\n )}\n\n {this.auth_methods.includes('passcode') && (\n <div class=\"row pin-code\">\n <label htmlFor={this.phoneFieldId}>Passcode:</label>\n <input\n id=\"verdocs-passcode\"\n name=\"verdocs-passcode\"\n type=\"text\"\n data-lpignore=\"true\"\n autocomplete=\"blocked\"\n aria-autocomplete=\"none\"\n value={this.passcode}\n placeholder=\"4-8 digits recommended...\"\n onFocus={() => (this.showSuggestions = false)}\n onInput={(e: any) => (this.passcode = e.target.value)}\n />\n </div>\n )}\n </Fragment>\n\n <div class=\"row pin-code\">\n <label style={{marginTop: '6px'}}>Options:</label>\n <div>\n <div class=\"option\">\n <verdocs-checkbox\n size=\"small\"\n id=\"verdocs-delegator\"\n checked={this.delegator}\n disabled={this.name_locked}\n onInput={(e: any) => {\n this.delegator = e.target.checked;\n if (this.delegator) this.name_locked = false;\n }}\n />\n <label htmlFor=\"verdocs-delegator\">May delegate signing</label>\n </div>\n <div class=\"option\">\n <verdocs-checkbox\n size=\"small\"\n id=\"verdocs-name-locked\"\n checked={this.name_locked}\n disabled={this.delegator}\n onInput={(e: any) => {\n this.name_locked = e.target.checked;\n if (this.name_locked) this.delegator = false;\n }}\n />\n <label htmlFor=\"verdocs-name-locked\">Name locked</label>\n </div>\n </div>\n </div>\n\n <div class=\"row message\">\n <label htmlFor=\"verdocs-contact-picker-message\">Message:</label>\n <textarea\n id=\"verdocs-contact-picker-message\"\n name=\"verdocs-contact-picker-message\"\n data-lpignore=\"true\"\n autocomplete=\"blocked\"\n placeholder=\"Optional message to include in invitation...\"\n onFocus={() => (this.showSuggestions = false)}\n onInput={(e: any) => (this.message = e.target.value)}\n >\n {this.message}\n </textarea>\n </div>\n\n <div class=\"buttons\">\n <div class=\"flex-fill\" />\n\n <verdocs-button variant=\"outline\" label=\"Cancel\" size=\"small\" onClick={e => this.handleCancel(e)} />\n <verdocs-button label=\"OK\" size=\"small\" disabled={!canSubmit} onClick={!canSubmit ? () => {} : e => this.handleSubmit(e)} />\n </div>\n </form>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as e,c as t,h as s}from"./p-CjTHbolG.js";import{VerdocsEndpoint as i,convertToE164 as o,createProfile as a,verifyEmail as r,authenticate as l,getMyUser as n,resendVerification as d,resetPassword as c}from"@verdocs/js-sdk";import{V as h}from"./p-D97GxsI-.js";import{S as u}from"./p-C1sRVZWv.js";const p=()=>`verdocs-auth{font-family:var(--verdocs-primary-font, "Inter", "Barlow", sans-serif);display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center}verdocs-auth .form{width:350px;display:-ms-flexbox;display:flex;padding:20px;max-width:90%;-ms-flex-align:center;align-items:center;-ms-flex-direction:column;flex-direction:column;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-pack:center;justify-content:center;background:#ffffff}verdocs-auth .logo{width:128px;max-width:100%;margin:20px 0 30px}verdocs-auth h3{color:#092c4c;text-align:center;font-weight:400;font-size:18px;line-height:1.75;margin:0}verdocs-auth em{font-size:14px;margin:15px 0}verdocs-auth .buttons{gap:20px;margin:20px 0 0 0;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center}verdocs-auth .status-result{display:none}verdocs-auth .status-result.debug{white-space:pre-wrap;font-size:14px;background:#fff;padding:10px;display:block;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center}verdocs-auth form{width:100%}verdocs-auth verdocs-text-input{margin-bottom:10px}verdocs-auth .account-option{gap:8px;margin:20px 0 8px 0;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}verdocs-auth p{color:#092c4c;margin:1em 0;font-size:14px}verdocs-auth p+p{margin-top:0}verdocs-auth verdocs-help-icon{margin-top:18px;display:-ms-flexbox;display:flex;width:32px;height:32px;-ms-flex:0 0 32px;flex:0 0 32px}verdocs-auth .already-have{color:#092c4c;margin:0.5em 0;font-size:14px;text-align:center}verdocs-auth .service-agreement{font-size:12px;color:#777}verdocs-auth .service-agreement a{color:#092c4c}`;const f=class{constructor(s){e(this,s);this.authenticated=t(this,"authenticated");this.sdkError=t(this,"sdkError");this.endpoint=i.getDefault();this.visible=true;this.logo="https://app.verdocs.com/assets/blue-logo.svg";this.displayMode="login";this.org_name="";this.first_name="";this.last_name="";this.email="";this.phone="";this.verificationCode="";this.newPassword="";this.password="";this.confirmpass="";this.submitting=false;this.resendDisabled=false;this.session=null;this.profile=null;this.resendDisabledTimer=null;this.tempAuthEndpoint=new i({baseURL:i.getDefault().getBaseURL(),persist:false});this.handleHashChange=()=>{this.applyHashDisplayMode()}}componentWillLoad(){this.endpoint.loadSession();this.applyHashDisplayMode();if(typeof window!=="undefined"){window.addEventListener("hashchange",this.handleHashChange)}i.getDefault().onSessionChanged(((e,t,s)=>{var i,o;this.session=t;this.profile=s;if(t){(i=this.authenticated)===null||i===void 0?void 0:i.emit({authenticated:true,session:t,profile:s})}else{(o=this.authenticated)===null||o===void 0?void 0:o.emit({authenticated:false,session:t,profile:s})}}))}disconnectedCallback(){if(typeof window!=="undefined"){window.removeEventListener("hashchange",this.handleHashChange)}}applyHashDisplayMode(){if(typeof window==="undefined"){return}const e=(window.location.hash||"").replace(/^#/,"").toLowerCase();if(e==="forgot"){this.displayMode="forgot"}}isPasswordComplex(e){const t=e=>/[A-Z]/.test(e);const s=e=>/[a-z]/.test(e);const i=e=>/[`!@#$%^&*()_\-+=\[\]{};':"\\|,.<>\/?~ ]/.test(e);let o=0,a=0,r=0;for(let l=0;l<e.length;l++){let n=e.charAt(l);if(t(n))o++;else if(s(n))a++;else if(i(n))r++}return e.length>=8&&a>0&&o>0&&r>0}handleSignup(){if(!this.isPasswordComplex(this.password)){h("Password must be at least 8 characters long and contain at least one uppercase, one lowercase, and one special character.",{style:"error"});return}if(this.password!==this.confirmpass){h("Passwords do not match.",{style:"error"});return}this.submitting=true;this.tempAuthEndpoint.clearSession();const e=o(this.phone);const t=Intl.DateTimeFormat().resolvedOptions();a(this.tempAuthEndpoint,{email:this.email,password:this.password,first_name:this.first_name,last_name:this.last_name,org_name:this.org_name,phone:e,timezone:t.timeZone,locale:t.locale}).then((e=>{console.log("[AUTH] Profile creation result",e);this.tempAuthEndpoint.setToken(e.access_token);this.password="";this.phone="";this.first_name="";this.last_name="";this.org_name="";this.displayMode="verify";this.submitting=false})).catch((e=>{var t,s,i,o,a,r;console.log("[AUTH] Signup error",e.response);this.submitting=false;(t=this.authenticated)===null||t===void 0?void 0:t.emit({authenticated:false,profile:null,session:null});(s=this.sdkError)===null||s===void 0?void 0:s.emit(new u(e.message,(i=e.response)===null||i===void 0?void 0:i.status,(o=e.response)===null||o===void 0?void 0:o.data));h("Signup failed: "+((r=(a=e.response)===null||a===void 0?void 0:a.data)===null||r===void 0?void 0:r.error)||"Unknown Error",{style:"error"})}))}async handleVerification(){this.submitting=true;try{this.submitting=false;const e=await r(this.tempAuthEndpoint,{email:this.email,token:this.verificationCode});h("Thank you for verifying your email address.",{style:"success"});this.completeLogin(e)}catch(e){this.submitting=false;console.log("Verification error",e);h("Verification error, please check the code and try again.")}}completeLogin(e){this.clearForms();this.tempAuthEndpoint.clearSession();this.endpoint.setToken(e.access_token)}async loginAndCheckVerification(){var e;if(this.submitting){return}this.submitting=true;this.tempAuthEndpoint.clearSession();try{this.submitting=false;const e=await l(this.tempAuthEndpoint,{username:this.email.trim(),password:this.password,grant_type:"password"});console.log("[AUTH] Authenticated, checking email verification");this.tempAuthEndpoint.setToken(e.access_token);const t=await n(this.tempAuthEndpoint);if(!t.email_verified){console.log("[AUTH] Logged in, pending email address verification");this.displayMode="verify"}else{console.log("[AUTH] Email address is verified, completing login");this.completeLogin(e)}}catch(t){this.submitting=false;console.log("[AUTH] Auth failure",((e=t.response)===null||e===void 0?void 0:e.data)||t);h("Login failed. Please check your credentials and try again.",{style:"error"})}}clearForms(){this.submitting=false;this.resendDisabled=false;this.email="";this.phone="";this.password="";this.newPassword="";this.confirmpass="";this.verificationCode="";this.first_name="";this.last_name="";this.org_name=""}handleLogout(){console.log("logging out");this.endpoint.clearSession();this.tempAuthEndpoint.clearSession();this.clearForms();this.displayMode="login"}handleResendVerification(){this.resendDisabled=true;this.resendDisabledTimer=setTimeout((()=>{this.resendDisabled=false;this.resendDisabledTimer=null}),3e4);d(this.tempAuthEndpoint).then((e=>{console.log("[AUTH] Verification request resent",e);h("Please check your email for a verification code.",{style:"info"})})).catch((e=>{console.log("[AUTH] Unable to resend verification",e);h("Unable to resend code. Please try again later.",{style:"error"})}))}handleResendReset(){this.resendDisabled=true;this.resendDisabledTimer=setTimeout((()=>{this.resendDisabled=false;this.resendDisabledTimer=null}),3e4);c(this.tempAuthEndpoint,{email:this.email}).then((e=>{console.log("[AUTH] Resend-code request resent",e);h("Please check your email again for a verification code.",{style:"info"})})).catch((e=>{console.log("[AUTH] Unable to resend reset request",e);h("Unable to resend code. Please try again later.",{style:"error"})}))}async handleResetGetCode(){this.submitting=true;this.confirmpass="";this.newPassword="";try{this.submitting=false;const e=await c(this.endpoint,{email:this.email});console.log("[AUTH] Reset result",e);h("Please check your email inbox for a password reset code.",{style:"success"});this.verificationCode="";this.confirmpass="";this.newPassword="";this.displayMode="reset"}catch(e){this.submitting=false;console.log("Reset request error",e);h("Request failed. Please check your email address and try again.")}}async handleResetPassword(){if(!this.isPasswordComplex(this.newPassword)){h("Password must be at least 8 characters long and contain at least one uppercase, one lowercase, and one special character.",{style:"error"});return}if(this.newPassword!==this.confirmpass){h("Passwords do not match.",{style:"error"});return}this.submitting=true;try{this.submitting=false;const e=await c(this.endpoint,{email:this.email,code:this.verificationCode,new_password:this.newPassword});console.log("reset result",e);h("Your password has been reset. You may now use your new password to login.",{style:"success"});this.verificationCode="";this.confirmpass="";this.newPassword="";this.password="";this.displayMode="login"}catch(e){this.submitting=false;console.log("Verification error",e);h("Verification error, please check the code and try again.")}}async handleReset(){this.submitting=true;try{const e=await c(this.endpoint,{email:this.email});console.log("[AUTH] Reset sent",e);this.submitting=false;this.displayMode="login";h("If your email address is registered, you will receive instructions on resetting your password shortly.",{style:"info"})}catch(e){console.log("[AUTH] Unable to reset password",e);this.submitting=false;h("Unable to reset password. Please check your email address and try again.",{style:"error"})}}render(){if(!this.visible){return s("div",{style:{display:"none"}},"Authenticated")}if(this.session){return s("verdocs-button",{label:"Sign Out",disabled:this.submitting,onClick:()=>this.handleLogout(),style:{display:"flex",justifyContent:"center",margin:"30px auto 0"}})}if(this.displayMode==="signup"){const e=this.submitting||!this.first_name||!this.last_name||!this.email||!this.password||!this.confirmpass||!this.org_name;return s("div",{class:"form"},s("a",{href:"https://verdocs.com/en/"},s("img",{src:this.logo,alt:"Verdocs Logo",class:"logo"})),s("h3",null,"Sign up for a free account"),s("div",{class:"already-have"},"Already have an account?",s("verdocs-button",{label:"Log In",variant:"text",onClick:()=>this.displayMode="login",disabled:this.submitting})),s("form",{onSubmit:()=>this.handleSignup()},s("div",{style:{display:"flex",flexDirection:"row",columnGap:"20px"}},s("verdocs-text-input",{label:"First Name",autocomplete:"first",required:true,value:this.first_name,onInput:e=>this.first_name=e.target.value,disabled:this.submitting}),s("verdocs-text-input",{label:"Last Name",autocomplete:"last",required:true,value:this.last_name,onInput:e=>this.last_name=e.target.value,disabled:this.submitting})),s("verdocs-text-input",{label:"Email Address",autocomplete:"email",required:true,value:this.email,onInput:e=>this.email=e.target.value,disabled:this.submitting}),s("verdocs-text-input",{label:"Password",type:"password",required:true,autocomplete:"new-password",value:this.password,onInput:e=>this.password=e.target.value,disabled:this.submitting}),s("verdocs-text-input",{label:"Confirm Password",type:"password",required:true,autocomplete:"off",value:this.confirmpass,onInput:e=>this.confirmpass=e.target.value,disabled:this.submitting}),s("verdocs-text-input",{label:"Phone Number",type:"tel",required:true,autocomplete:"phone",value:this.phone,onInput:e=>this.phone=e.target.value,disabled:this.submitting}),s("verdocs-text-input",{label:"Organization Name",autocomplete:"org",required:true,value:this.org_name,onInput:e=>this.org_name=e.target.value,disabled:this.submitting,style:{flex:"1"}}),s("div",{class:"service-agreement"},"By clicking the Create Account button, you agree to the"," ",s("a",{href:"https://verdocs.com/eula",target:"_blank"},"End User License Agreement"),". Learn about how we use and protect your data and how you can opt-out in our"," ",s("a",{href:"https://verdocs.com/privacy-policy",target:"_blank"},"Privacy Policy"),"."),s("div",{style:{marginTop:"30px"}}),s("verdocs-button",{label:"Next",disabled:e,onClick:e?()=>{}:()=>this.handleSignup(),style:{display:"flex",justifyContent:"center",margin:"30px auto 0"}})))}if(this.displayMode==="verify"){return s("div",{class:"form"},s("form",{onSubmit:()=>this.handleVerification()},s("p",null,"Please check your e-mail inbox for a verification code and enter it below."),s("verdocs-text-input",{label:"Verification Code",required:true,value:this.verificationCode,onInput:e=>this.verificationCode=e.target.value,disabled:this.submitting}),s("div",{class:"buttons"},s("verdocs-button",{label:"Sign Out",variant:"outline",disabled:this.submitting,onClick:()=>this.handleLogout()}),s("verdocs-button",{label:"Verify",disabled:this.submitting||!this.verificationCode||this.verificationCode.length!==6,onClick:()=>this.handleVerification()})),s("div",{class:"buttons"},s("verdocs-button",{variant:"text",label:"Resend Code",disabled:this.resendDisabled||this.submitting,onClick:()=>this.handleResendVerification()}))))}if(this.displayMode==="forgot"){return s("div",{class:"form"},s("a",{href:"https://verdocs.com/en/"},s("img",{src:this.logo,alt:"Verdocs Logo",class:"logo"})),s("h3",null,"Forgot your password?"),s("p",null,"Enter your e-mail address below. If the e-mail address is valid, a password reset code will be sent to your inbox. Please allow up to 15 minutes to arrive, and check your spam folder if you do not receive the message."),s("form",{onSubmit:()=>this.handleResetGetCode()},s("verdocs-text-input",{label:"Email Address",autocomplete:"email",required:true,value:this.email,onInput:e=>this.email=e.target.value,disabled:this.submitting}),s("div",{style:{marginTop:"30px"}}),s("div",{class:"buttons"},s("verdocs-button",{size:"small",label:"Cancel",variant:"outline",disabled:this.submitting,onClick:()=>this.displayMode="login"}),s("verdocs-button",{size:"small",label:"Request Code",disabled:this.submitting,onClick:()=>this.handleResetGetCode()}))))}if(this.displayMode==="reset"){return s("div",{class:"form"},s("a",{href:"https://verdocs.com/en/"},s("img",{src:this.logo,alt:"Verdocs Logo",class:"logo"})),s("h3",null,"Forgot your password?"),s("p",null,"Enter your e-mail address below, and reset instructions will be sent to your Inbox. Please allow up to 15 minutes to arrive. Check your spam folder if you do not receive the message."),s("form",{onSubmit:()=>this.handleResetPassword()},s("verdocs-text-input",{label:"Verification Code",required:true,value:this.verificationCode,onInput:e=>this.verificationCode=e.target.value,disabled:this.submitting}),s("verdocs-text-input",{label:"Password",type:"password",required:true,autocomplete:"off",value:this.newPassword,onInput:e=>this.newPassword=e.target.value,disabled:this.submitting}),s("verdocs-text-input",{label:"Confirm Password",type:"password",required:true,autocomplete:"off",value:this.confirmpass,onInput:e=>this.confirmpass=e.target.value,disabled:this.submitting}),s("div",{style:{marginTop:"30px"}}),s("div",{class:"buttons"},s("verdocs-button",{label:"Cancel",variant:"outline",disabled:this.submitting,onClick:()=>this.displayMode="login"}),s("verdocs-button",{label:"Reset",disabled:this.submitting,onClick:()=>this.handleResetPassword()})),s("div",{class:"buttons"},s("verdocs-button",{variant:"text",label:"Resend Code",disabled:this.resendDisabled||this.submitting,onClick:()=>this.handleResendReset()}))))}return s("div",{class:"form"},s("a",{href:"https://verdocs.com/en/"},s("img",{src:this.logo,alt:"Verdocs Logo",class:"logo"})),s("h3",null,"Log in to your account"),s("div",{class:"already-have"},"Don't have an account?",s("verdocs-button",{label:"Sign Up",variant:"text",onClick:()=>this.displayMode="signup",disabled:this.submitting})),s("form",{onSubmit:()=>this.loginAndCheckVerification()},s("verdocs-text-input",{label:"Email",autocomplete:"username",value:this.email,onInput:e=>this.email=e.target.value,disabled:this.submitting}),s("verdocs-text-input",{label:"Password",type:"password",autocomplete:"current-password",value:this.password,onInput:e=>this.password=e.target.value,disabled:this.submitting}),s("verdocs-button",{label:"Forgot Your Password?",variant:"text",onClick:()=>this.displayMode="forgot",disabled:this.submitting,style:{display:"flex",justifyContent:"center",margin:"10px auto 20px"}}),s("verdocs-button",{label:"Login",disabled:this.submitting,onClick:()=>this.loginAndCheckVerification(),style:{display:"flex",justifyContent:"center",margin:"10px auto 0"}})))}};f.style=p();export{f as verdocs_auth};
|
|
2
|
-
//# sourceMappingURL=p-43ee0267.entry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["verdocsAuthCss","VerdocsAuth","constructor","hostRef","this","endpoint","VerdocsEndpoint","getDefault","visible","logo","displayMode","org_name","first_name","last_name","email","phone","verificationCode","newPassword","password","confirmpass","submitting","resendDisabled","session","profile","resendDisabledTimer","tempAuthEndpoint","baseURL","getBaseURL","persist","handleHashChange","applyHashDisplayMode","componentWillLoad","loadSession","window","addEventListener","onSessionChanged","_endpoint","_a","authenticated","emit","_b","disconnectedCallback","removeEventListener","hash","location","replace","toLowerCase","isPasswordComplex","isUppercase","ch","test","isLowercase","isSpecialChar","countOfUpperCase","countOfLowerCase","countOfSpecialChar","i","length","charAt","handleSignup","VerdocsToast","style","clearSession","formattedPhone","convertToE164","localeData","Intl","DateTimeFormat","resolvedOptions","createProfile","timezone","timeZone","locale","then","r","console","log","setToken","access_token","catch","e","response","sdkError","SDKError","message","_c","status","_d","data","_f","_e","error","handleVerification","verificationResult","verifyEmail","token","completeLogin","result","clearForms","loginAndCheckVerification","authResult","authenticate","username","trim","grant_type","user","getMyUser","email_verified","handleLogout","handleResendVerification","setTimeout","resendVerification","handleResendReset","resetPassword","handleResetGetCode","handleResetPassword","resetResult","code","new_password","handleReset","render","h","display","label","disabled","onClick","justifyContent","margin","invalid","class","href","src","alt","variant","onSubmit","flexDirection","columnGap","autocomplete","required","value","onInput","target","type","flex","marginTop","size"],"sources":["src/components/embeds/verdocs-auth/verdocs-auth.scss?tag=verdocs-auth","src/components/embeds/verdocs-auth/verdocs-auth.tsx"],"sourcesContent":["@import '../../../theme.scss';\n\nverdocs-auth {\n font-family: $verdocs-primary-font;\n display: flex;\n align-items: center;\n flex-direction: column;\n justify-content: center;\n\n .form {\n width: 350px;\n display: flex;\n padding: 20px;\n max-width: 90%;\n align-items: center;\n flex-direction: column;\n box-sizing: border-box;\n justify-content: center;\n background: $verdocs-grey-4;\n }\n\n .logo {\n width: 128px;\n max-width: 100%;\n margin: 20px 0 30px;\n }\n\n h3 {\n color: $verdocs-grey-0;\n text-align: center;\n font-weight: 400;\n font-size: 18px;\n line-height: 1.75;\n margin: 0;\n }\n\n em {\n font-size: 14px;\n margin: 15px 0;\n }\n\n .buttons {\n gap: 20px;\n margin: 20px 0 0 0;\n display: flex;\n flex-direction: row;\n justify-content: center;\n }\n\n .status-result {\n display: none;\n\n &.debug {\n white-space: pre-wrap;\n font-size: 14px;\n background: #fff;\n padding: 10px;\n display: block;\n flex-direction: row;\n justify-content: center;\n }\n }\n\n form {\n width: 100%;\n }\n\n verdocs-text-input {\n margin-bottom: 10px;\n }\n\n .account-option {\n gap: 8px;\n margin: 20px 0 8px 0;\n display: flex;\n flex-direction: row;\n }\n\n p {\n color: $verdocs-grey-0;\n margin: 1em 0;\n font-size: 14px;\n }\n\n // Our <p>s are in a flex layout which prevents margins from collapsing because each item creates its own row\n p + p {\n margin-top: 0;\n }\n\n verdocs-help-icon {\n margin-top: 18px;\n display: flex;\n width: 32px;\n height: 32px;\n flex: 0 0 32px;\n }\n\n .already-have {\n color: $verdocs-grey-0;\n margin: 0.5em 0;\n font-size: 14px;\n text-align: center;\n }\n\n .service-agreement {\n font-size: 12px;\n color: #777;\n\n a {\n color: $verdocs-grey-0;\n }\n }\n}\n","import {Component, Prop, State, h, Event, EventEmitter} from '@stencil/core';\nimport {verifyEmail, IAuthenticateResponse, getMyUser, IProfile, convertToE164} from '@verdocs/js-sdk';\nimport {TSession, VerdocsEndpoint, createProfile, authenticate, resendVerification, resetPassword} from '@verdocs/js-sdk';\nimport {VerdocsToast} from '../../../utils/Toast';\nimport {SDKError} from '../../../utils/errors';\n\nexport interface IAuthStatus {\n authenticated: boolean;\n session: TSession;\n profile: IProfile | null;\n}\n\n/**\n * Display an authentication dialog that allows the user to login or sign up. If the user is\n * already authenticated with a valid session, this component will hide itself and fire the\n * success callback immediately. It is up to the host application to render the next appropriate\n * view for the application.\n *\n * To simplify UI development, a visibility flag can force this component to never display. This\n * allows you to subscribe to notifications from client apps without calling the lower-level JS SDK.\n *\n * This embed is responsive / mobile-friendly, but the calling application should provide at\n * least a 300px wide container to allow sufficient space for the required forms.\n *\n * ```ts\n * <verdocs-auth\n * onAuthenticated={({ detail }) => console.log('Authentication state:', detail) }\n * onSdkError={({ detail }) => { console.log('SDK error', detail) }\n * />\n * ```\n */\n@Component({\n tag: 'verdocs-auth',\n styleUrl: 'verdocs-auth.scss',\n shadow: false,\n})\nexport class VerdocsAuth {\n /**\n * The endpoint to use to communicate with Verdocs. If not set, the default endpoint will be used.\n */\n @Prop() endpoint: VerdocsEndpoint = VerdocsEndpoint.getDefault();\n\n /**\n * Normally, if the user has a valid session, this embed will be invisible, otherwise it will display\n * login / signup forms. If this is set to false, this embed will be invisible in both cases. Apps may\n * use this to verify if a user has a valid session without needing a separate call to Verdocs JS SDK.\n */\n @Prop() visible: boolean = true;\n\n /**\n * By default, a Verdocs logo will be displayed above the login/signup forms. This may be used to\n * override its source. (Alternatively, you may simply hide it via CSS overrides.) Logos should be\n * in SVG format for best results.\n */\n @Prop() logo: string = 'https://app.verdocs.com/assets/blue-logo.svg';\n\n /**\n * The display mode to start in.\n */\n @Prop({mutable: true}) displayMode: 'login' | 'forgot' | 'reset' | 'signup' | 'verify' = 'login';\n\n /**\n * Event fired when session authentication process has completed. Check the event\n * contents for completion status. This event will always be called at least once,\n * when the component is first rendered.\n */\n @Event({composed: true}) authenticated: EventEmitter<IAuthStatus>;\n\n /**\n * Event fired if an error occurs. The event details will contain information about the error. Most errors will\n * terminate the process, and the calling application should correct the condition and re-render the component.\n */\n @Event({composed: true}) sdkError: EventEmitter<SDKError>;\n\n @State() org_name: string = '';\n @State() first_name: string = '';\n @State() last_name: string = '';\n @State() email: string = '';\n @State() phone: string = '';\n @State() verificationCode: string = '';\n @State() newPassword: string = '';\n @State() password: string = '';\n @State() confirmpass: string = '';\n @State() submitting: boolean = false;\n @State() resendDisabled = false;\n @State() session: TSession = null;\n @State() profile: IProfile | null = null;\n\n resendDisabledTimer = null;\n\n // We can't instantly log in on the default endpoint because other listeners might see\n // its events and incorrectly trigger before we're done. So we manage our own temp\n // endpoint and pass the final tokens to the default once we're ready.\n tempAuthEndpoint = new VerdocsEndpoint({\n baseURL: VerdocsEndpoint.getDefault().getBaseURL(),\n persist: false,\n });\n\n componentWillLoad() {\n this.endpoint.loadSession();\n this.applyHashDisplayMode();\n\n // We need to listen to the hashchange to know when we're being sent to #forgot\n if (typeof window !== 'undefined') {\n window.addEventListener('hashchange', this.handleHashChange);\n }\n\n VerdocsEndpoint.getDefault().onSessionChanged((_endpoint, session, profile) => {\n this.session = session;\n this.profile = profile;\n if (session) {\n this.authenticated?.emit({authenticated: true, session, profile});\n } else {\n this.authenticated?.emit({authenticated: false, session, profile});\n }\n });\n }\n\n disconnectedCallback() {\n if (typeof window !== 'undefined') {\n window.removeEventListener('hashchange', this.handleHashChange);\n }\n }\n\n handleHashChange = () => {\n this.applyHashDisplayMode();\n };\n\n applyHashDisplayMode() {\n if (typeof window === 'undefined') {\n return;\n }\n\n const hash = (window.location.hash || '').replace(/^#/, '').toLowerCase();\n if (hash === 'forgot') {\n this.displayMode = 'forgot';\n }\n }\n\n isPasswordComplex(password: string) {\n const isUppercase = (ch: string) => /[A-Z]/.test(ch);\n const isLowercase = (ch: string) => /[a-z]/.test(ch);\n const isSpecialChar = (ch: string) => /[`!@#$%^&*()_\\-+=\\[\\]{};':\"\\\\|,.<>\\/?~ ]/.test(ch);\n let countOfUpperCase = 0,\n countOfLowerCase = 0,\n countOfSpecialChar = 0;\n for (let i = 0; i < password.length; i++) {\n let ch = password.charAt(i);\n if (isUppercase(ch)) countOfUpperCase++;\n else if (isLowercase(ch)) countOfLowerCase++;\n else if (isSpecialChar(ch)) countOfSpecialChar++;\n }\n return password.length >= 8 && countOfLowerCase > 0 && countOfUpperCase > 0 && countOfSpecialChar > 0;\n }\n\n handleSignup() {\n if (!this.isPasswordComplex(this.password)) {\n VerdocsToast('Password must be at least 8 characters long and contain at least one uppercase, one lowercase, and one special character.', {style: 'error'});\n return;\n }\n\n if (this.password !== this.confirmpass) {\n VerdocsToast('Passwords do not match.', {style: 'error'});\n return;\n }\n\n this.submitting = true;\n this.tempAuthEndpoint.clearSession();\n const formattedPhone = convertToE164(this.phone);\n const localeData = Intl.DateTimeFormat().resolvedOptions();\n\n createProfile(this.tempAuthEndpoint, {\n email: this.email,\n password: this.password,\n first_name: this.first_name,\n last_name: this.last_name,\n org_name: this.org_name,\n phone: formattedPhone,\n timezone: localeData.timeZone,\n locale: localeData.locale,\n })\n .then(r => {\n console.log('[AUTH] Profile creation result', r);\n this.tempAuthEndpoint.setToken(r.access_token);\n // We can't clearForms because we need email to stick around\n this.password = '';\n this.phone = '';\n this.first_name = '';\n this.last_name = '';\n this.org_name = '';\n this.displayMode = 'verify';\n this.submitting = false;\n })\n .catch(e => {\n console.log('[AUTH] Signup error', e.response);\n this.submitting = false;\n this.authenticated?.emit({authenticated: false, profile: null, session: null});\n this.sdkError?.emit(new SDKError(e.message, e.response?.status, e.response?.data));\n\n VerdocsToast('Signup failed: ' + e.response?.data?.error || 'Unknown Error', {style: 'error'});\n });\n }\n\n async handleVerification() {\n this.submitting = true;\n\n try {\n this.submitting = false;\n const verificationResult = await verifyEmail(this.tempAuthEndpoint, {email: this.email, token: this.verificationCode});\n VerdocsToast('Thank you for verifying your email address.', {style: 'success'});\n this.completeLogin(verificationResult);\n } catch (e) {\n this.submitting = false;\n console.log('Verification error', e);\n VerdocsToast('Verification error, please check the code and try again.');\n }\n }\n\n completeLogin(result: IAuthenticateResponse) {\n this.clearForms();\n this.tempAuthEndpoint.clearSession();\n this.endpoint.setToken(result.access_token);\n }\n\n async loginAndCheckVerification() {\n if (this.submitting) {\n return;\n }\n\n this.submitting = true;\n this.tempAuthEndpoint.clearSession();\n\n try {\n this.submitting = false;\n const authResult = await authenticate(this.tempAuthEndpoint, {username: this.email.trim(), password: this.password, grant_type: 'password'});\n console.log('[AUTH] Authenticated, checking email verification');\n this.tempAuthEndpoint.setToken(authResult.access_token);\n\n const user = await getMyUser(this.tempAuthEndpoint);\n\n if (!user.email_verified) {\n console.log('[AUTH] Logged in, pending email address verification');\n this.displayMode = 'verify';\n } else {\n console.log('[AUTH] Email address is verified, completing login');\n this.completeLogin(authResult);\n }\n } catch (e) {\n this.submitting = false;\n console.log('[AUTH] Auth failure', e.response?.data || e);\n VerdocsToast('Login failed. Please check your credentials and try again.', {style: 'error'});\n }\n }\n\n clearForms() {\n this.submitting = false;\n this.resendDisabled = false;\n this.email = '';\n this.phone = '';\n this.password = '';\n this.newPassword = '';\n this.confirmpass = '';\n this.verificationCode = '';\n this.first_name = '';\n this.last_name = '';\n this.org_name = '';\n }\n\n handleLogout() {\n console.log('logging out');\n this.endpoint.clearSession();\n this.tempAuthEndpoint.clearSession();\n this.clearForms();\n this.displayMode = 'login';\n }\n\n handleResendVerification() {\n // Avoid the user just click-spamming this pathway. The server rate-limits this anyway so it's not a\n // security issue but it's a poor user experience to allow it.\n this.resendDisabled = true;\n this.resendDisabledTimer = setTimeout(() => {\n this.resendDisabled = false;\n this.resendDisabledTimer = null;\n }, 30000);\n\n resendVerification(this.tempAuthEndpoint)\n .then(r => {\n console.log('[AUTH] Verification request resent', r);\n VerdocsToast('Please check your email for a verification code.', {style: 'info'});\n })\n .catch((e: any) => {\n console.log('[AUTH] Unable to resend verification', e);\n VerdocsToast('Unable to resend code. Please try again later.', {style: 'error'});\n });\n }\n\n handleResendReset() {\n // Avoid the user just click-spamming this pathway. The server rate-limits this anyway so it's not a\n // security issue but it's a poor user experience to allow it.\n this.resendDisabled = true;\n this.resendDisabledTimer = setTimeout(() => {\n this.resendDisabled = false;\n this.resendDisabledTimer = null;\n }, 30000);\n\n resetPassword(this.tempAuthEndpoint, {email: this.email})\n .then(r => {\n console.log('[AUTH] Resend-code request resent', r);\n VerdocsToast('Please check your email again for a verification code.', {style: 'info'});\n })\n .catch((e: any) => {\n console.log('[AUTH] Unable to resend reset request', e);\n VerdocsToast('Unable to resend code. Please try again later.', {style: 'error'});\n });\n }\n\n async handleResetGetCode() {\n this.submitting = true;\n this.confirmpass = '';\n this.newPassword = '';\n\n try {\n this.submitting = false;\n const result = await resetPassword(this.endpoint, {email: this.email});\n console.log('[AUTH] Reset result', result);\n VerdocsToast('Please check your email inbox for a password reset code.', {style: 'success'});\n this.verificationCode = '';\n this.confirmpass = '';\n this.newPassword = '';\n this.displayMode = 'reset';\n } catch (e) {\n this.submitting = false;\n console.log('Reset request error', e);\n VerdocsToast('Request failed. Please check your email address and try again.');\n }\n }\n\n async handleResetPassword() {\n if (!this.isPasswordComplex(this.newPassword)) {\n VerdocsToast('Password must be at least 8 characters long and contain at least one uppercase, one lowercase, and one special character.', {style: 'error'});\n return;\n }\n\n if (this.newPassword !== this.confirmpass) {\n VerdocsToast('Passwords do not match.', {style: 'error'});\n return;\n }\n\n this.submitting = true;\n try {\n this.submitting = false;\n const resetResult = await resetPassword(this.endpoint, {email: this.email, code: this.verificationCode, new_password: this.newPassword});\n console.log('reset result', resetResult);\n VerdocsToast('Your password has been reset. You may now use your new password to login.', {style: 'success'});\n this.verificationCode = '';\n this.confirmpass = '';\n this.newPassword = '';\n this.password = '';\n this.displayMode = 'login';\n } catch (e) {\n this.submitting = false;\n console.log('Verification error', e);\n VerdocsToast('Verification error, please check the code and try again.');\n }\n }\n\n async handleReset() {\n this.submitting = true;\n\n try {\n const result = await resetPassword(this.endpoint, {email: this.email});\n console.log('[AUTH] Reset sent', result);\n this.submitting = false;\n this.displayMode = 'login';\n VerdocsToast('If your email address is registered, you will receive instructions on resetting your password shortly.', {style: 'info'});\n } catch (e) {\n console.log('[AUTH] Unable to reset password', e);\n this.submitting = false;\n VerdocsToast('Unable to reset password. Please check your email address and try again.', {style: 'error'});\n }\n }\n\n render() {\n if (!this.visible) {\n return <div style={{display: 'none'}}>Authenticated</div>;\n }\n\n if (this.session) {\n return (\n <verdocs-button\n label=\"Sign Out\"\n disabled={this.submitting}\n onClick={() => this.handleLogout()}\n style={{display: 'flex', justifyContent: 'center', margin: '30px auto 0'}}\n />\n );\n }\n\n if (this.displayMode === 'signup') {\n const invalid = this.submitting || !this.first_name || !this.last_name || !this.email || !this.password || !this.confirmpass || !this.org_name;\n\n return (\n <div class=\"form\">\n <a href=\"https://verdocs.com/en/\">\n <img src={this.logo} alt=\"Verdocs Logo\" class=\"logo\" />\n </a>\n\n <h3>Sign up for a free account</h3>\n <div class=\"already-have\">\n Already have an account?\n <verdocs-button label=\"Log In\" variant=\"text\" onClick={() => (this.displayMode = 'login')} disabled={this.submitting} />\n </div>\n\n <form onSubmit={() => this.handleSignup()}>\n <div style={{display: 'flex', flexDirection: 'row', columnGap: '20px'}}>\n <verdocs-text-input\n label=\"First Name\"\n autocomplete=\"first\"\n required={true}\n value={this.first_name}\n onInput={(e: any) => (this.first_name = e.target.value)}\n disabled={this.submitting}\n />\n <verdocs-text-input\n label=\"Last Name\"\n autocomplete=\"last\"\n required={true}\n value={this.last_name}\n onInput={(e: any) => (this.last_name = e.target.value)}\n disabled={this.submitting}\n />\n </div>\n <verdocs-text-input\n label=\"Email Address\"\n autocomplete=\"email\"\n required={true}\n value={this.email}\n onInput={(e: any) => (this.email = e.target.value)}\n disabled={this.submitting}\n />\n <verdocs-text-input\n label=\"Password\"\n type=\"password\"\n required={true}\n autocomplete=\"new-password\"\n value={this.password}\n onInput={(e: any) => (this.password = e.target.value)}\n disabled={this.submitting}\n />\n <verdocs-text-input\n label=\"Confirm Password\"\n type=\"password\"\n required={true}\n autocomplete=\"off\"\n value={this.confirmpass}\n onInput={(e: any) => (this.confirmpass = e.target.value)}\n disabled={this.submitting}\n />\n <verdocs-text-input\n label=\"Phone Number\"\n type=\"tel\"\n required={true}\n autocomplete=\"phone\"\n value={this.phone}\n onInput={(e: any) => (this.phone = e.target.value)}\n disabled={this.submitting}\n />\n <verdocs-text-input\n label=\"Organization Name\"\n autocomplete=\"org\"\n required={true}\n value={this.org_name}\n onInput={(e: any) => (this.org_name = e.target.value)}\n disabled={this.submitting}\n style={{flex: '1'}}\n />\n\n <div class=\"service-agreement\">\n By clicking the Create Account button, you agree to the{' '}\n <a href=\"https://verdocs.com/eula\" target=\"_blank\">\n End User License Agreement\n </a>\n . Learn about how we use and protect your data and how you can opt-out in our{' '}\n <a href=\"https://verdocs.com/privacy-policy\" target=\"_blank\">\n Privacy Policy\n </a>\n .\n </div>\n\n <div style={{marginTop: '30px'}} />\n\n <verdocs-button\n label=\"Next\"\n disabled={invalid}\n onClick={invalid ? () => {} : () => this.handleSignup()}\n style={{display: 'flex', justifyContent: 'center', margin: '30px auto 0'}}\n />\n </form>\n </div>\n );\n }\n\n if (this.displayMode === 'verify') {\n return (\n <div class=\"form\">\n <form onSubmit={() => this.handleVerification()}>\n <p>Please check your e-mail inbox for a verification code and enter it below.</p>\n\n <verdocs-text-input\n label=\"Verification Code\"\n required={true}\n value={this.verificationCode}\n onInput={(e: any) => (this.verificationCode = e.target.value)}\n disabled={this.submitting}\n />\n\n <div class=\"buttons\">\n <verdocs-button label=\"Sign Out\" variant=\"outline\" disabled={this.submitting} onClick={() => this.handleLogout()} />\n <verdocs-button label=\"Verify\" disabled={this.submitting || !this.verificationCode || this.verificationCode.length !== 6} onClick={() => this.handleVerification()} />\n </div>\n <div class=\"buttons\">\n <verdocs-button variant=\"text\" label=\"Resend Code\" disabled={this.resendDisabled || this.submitting} onClick={() => this.handleResendVerification()} />\n </div>\n </form>\n </div>\n );\n }\n\n if (this.displayMode === 'forgot') {\n return (\n <div class=\"form\">\n <a href=\"https://verdocs.com/en/\">\n <img src={this.logo} alt=\"Verdocs Logo\" class=\"logo\" />\n </a>\n\n <h3>Forgot your password?</h3>\n\n <p>\n Enter your e-mail address below. If the e-mail address is valid, a password reset code will be sent to your inbox. Please allow up to 15 minutes to arrive, and check\n your spam folder if you do not receive the message.\n </p>\n\n <form onSubmit={() => this.handleResetGetCode()}>\n <verdocs-text-input\n label=\"Email Address\"\n autocomplete=\"email\"\n required={true}\n value={this.email}\n onInput={(e: any) => (this.email = e.target.value)}\n disabled={this.submitting}\n />\n\n <div style={{marginTop: '30px'}} />\n\n <div class=\"buttons\">\n <verdocs-button size=\"small\" label=\"Cancel\" variant=\"outline\" disabled={this.submitting} onClick={() => (this.displayMode = 'login')} />\n <verdocs-button size=\"small\" label=\"Request Code\" disabled={this.submitting} onClick={() => this.handleResetGetCode()} />\n </div>\n </form>\n </div>\n );\n }\n\n if (this.displayMode === 'reset') {\n return (\n <div class=\"form\">\n <a href=\"https://verdocs.com/en/\">\n <img src={this.logo} alt=\"Verdocs Logo\" class=\"logo\" />\n </a>\n\n <h3>Forgot your password?</h3>\n\n <p>\n Enter your e-mail address below, and reset instructions will be sent to your Inbox. Please allow up to 15 minutes to arrive. Check your spam folder if you do not\n receive the message.\n </p>\n\n <form onSubmit={() => this.handleResetPassword()}>\n <verdocs-text-input\n label=\"Verification Code\"\n required={true}\n value={this.verificationCode}\n onInput={(e: any) => (this.verificationCode = e.target.value)}\n disabled={this.submitting}\n />\n <verdocs-text-input\n label=\"Password\"\n type=\"password\"\n required={true}\n autocomplete=\"off\"\n value={this.newPassword}\n onInput={(e: any) => (this.newPassword = e.target.value)}\n disabled={this.submitting}\n />\n <verdocs-text-input\n label=\"Confirm Password\"\n type=\"password\"\n required={true}\n autocomplete=\"off\"\n value={this.confirmpass}\n onInput={(e: any) => (this.confirmpass = e.target.value)}\n disabled={this.submitting}\n />\n\n <div style={{marginTop: '30px'}} />\n\n <div class=\"buttons\">\n <verdocs-button label=\"Cancel\" variant=\"outline\" disabled={this.submitting} onClick={() => (this.displayMode = 'login')} />\n <verdocs-button label=\"Reset\" disabled={this.submitting} onClick={() => this.handleResetPassword()} />\n </div>\n\n <div class=\"buttons\">\n <verdocs-button variant=\"text\" label=\"Resend Code\" disabled={this.resendDisabled || this.submitting} onClick={() => this.handleResendReset()} />\n </div>\n </form>\n </div>\n );\n }\n\n return (\n <div class=\"form\">\n <a href=\"https://verdocs.com/en/\">\n <img src={this.logo} alt=\"Verdocs Logo\" class=\"logo\" />\n </a>\n\n <h3>Log in to your account</h3>\n <div class=\"already-have\">\n Don't have an account?\n <verdocs-button label=\"Sign Up\" variant=\"text\" onClick={() => (this.displayMode = 'signup')} disabled={this.submitting} />\n </div>\n\n <form onSubmit={() => this.loginAndCheckVerification()}>\n <verdocs-text-input label=\"Email\" autocomplete=\"username\" value={this.email} onInput={(e: any) => (this.email = e.target.value)} disabled={this.submitting} />\n <verdocs-text-input\n label=\"Password\"\n type=\"password\"\n autocomplete=\"current-password\"\n value={this.password}\n onInput={(e: any) => (this.password = e.target.value)}\n disabled={this.submitting}\n />\n\n <verdocs-button\n label=\"Forgot Your Password?\"\n variant=\"text\"\n onClick={() => (this.displayMode = 'forgot')}\n disabled={this.submitting}\n style={{display: 'flex', justifyContent: 'center', margin: '10px auto 20px'}}\n />\n\n <verdocs-button\n label=\"Login\"\n disabled={this.submitting}\n onClick={() => this.loginAndCheckVerification()}\n style={{display: 'flex', justifyContent: 'center', margin: '10px auto 0'}}\n />\n </form>\n </div>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["verdocsContactPickerCss","addrBookIcon","VerdocsContactPicker","exports","class_1","hostRef","this","endpoint","VerdocsEndpoint","getDefault","templateRole","contactSuggestions","showSuggestions","showMessage","delegator","name_locked","auth_methods","passcode","firstNameFieldId","concat","Math","random","toString","substring","lastNameFieldId","emailFieldId","phoneFieldId","activeEntitlements","authMethodsLoading","prototype","componentWillLoad","loadSession","fullName","formatFullName","nameComponents","split","firstName","first_name","shift","lastName","last_name","join","email","phone","message","_b","getActiveEntitlements","catch","e","console","warn","_c","sent","log","handleFirstNameChange","target","value","_a","searchContacts","emit","query","handleLastNameChange","handleCancel","stopPropagation","exit","handleSubmit","next","address","zip","handleSelectSuggestion","suggestion","render","_this","hasBasics","isValidEmail","hasAuthRequirements","length","includes","canSubmit","hasSMSAuth","sms_auth","verificationOptions","push","label","kba_auth","id_auth","h","key","onSubmit","preventDefault","autocomplete","class","htmlFor","id","name","type","placeholder","onFocus","setTimeout","onInput","anchor","onClickAway","document","querySelectorAll","forEach","el","remove","filter","toLowerCase","map","onClick","picture","alt","src","innerHTML","autoComplete","convertToE164","Fragment","size","mode","style","margin","option","i","checked","__spreadArray","selected","marginTop","disabled","variant"],"sources":["src/components/envelopes/verdocs-contact-picker/verdocs-contact-picker.scss?tag=verdocs-contact-picker","src/components/envelopes/verdocs-contact-picker/verdocs-contact-picker.tsx"],"sourcesContent":["@import '../../../theme.scss';\n\nverdocs-contact-picker {\n display: block;\n border: 1px solid #ebebeb;\n background-color: $verdocs-grey-4;\n font-family: $verdocs-primary-font;\n box-shadow: 0 0 15px 0 rgba(0, 0, 0, 0.1);\n\n form {\n gap: 12px;\n width: 300px;\n padding: 12px;\n display: flex;\n flex-direction: column;\n background-color: $verdocs-grey-3;\n\n .row {\n gap: 8px;\n display: flex;\n position: relative;\n flex-direction: row;\n align-items: flex-start;\n\n .option {\n gap: 4px;\n display: flex;\n padding: 5px 8px;\n align-items: center;\n flex-direction: row;\n text-wrap: nowrap;\n }\n }\n\n .names-row {\n gap: 8px;\n display: flex;\n flex-direction: row;\n\n > input {\n font-size: 14px;\n width: 88px;\n }\n }\n\n .pin-code {\n gap: 8px;\n display: flex;\n align-items: flex-start;\n flex-direction: row;\n\n > input {\n flex: 0 0 197px;\n font-size: 14px;\n //margin-left: 88px;\n }\n }\n\n .address {\n gap: 8px;\n display: flex;\n align-items: center;\n flex-direction: row;\n\n > input {\n flex: 1;\n font-size: 14px;\n //margin-left: 88px;\n }\n }\n\n .zip-code {\n gap: 8px;\n display: flex;\n align-items: center;\n flex-direction: row;\n\n > input {\n flex: 1;\n font-size: 14px;\n //margin-left: 88px;\n }\n }\n\n label {\n display: flex;\n flex: 0 0 80px;\n font-size: 13px;\n font-weight: 500;\n color: $verdocs-bg-4;\n }\n\n .row.message textarea {\n width: 100%;\n padding: 5px 7px;\n border-radius: 4px;\n font-family: $verdocs-primary-font;\n }\n\n input {\n flex: 1;\n padding: 6px;\n font-size: 14px;\n border-radius: 3px;\n //background: #00000005;\n border: 1px solid $border-color-extralight;\n\n &:focus {\n outline: none;\n }\n }\n }\n\n .buttons {\n display: flex;\n column-gap: 6px;\n margin-top: 16px;\n flex-direction: row;\n\n .flex-fill {\n flex: 1;\n }\n }\n\n ::placeholder {\n color: $verdocs-bg-2;\n }\n\n // @see https://community.logmein.com/t5/LastPass-Support-Discussions/placeholder-text-overrides-data-lpignore-quot-true-quot/td-p/295135\n // LastPass is ignoring the data-lpignore attribute in some cases\n [data-lastpass-icon-root] {\n display: none !important;\n }\n}\n\n#verdocs-contact-picker-suggestions {\n .dropdown {\n max-height: 225px;\n overflow-y: scroll;\n background: #ffffff;\n font-family: $verdocs-primary-font;\n box-shadow: 0 0 15px 0 rgba(0, 0, 0, 0.1);\n\n .suggestion {\n display: flex;\n padding: 6px 12px;\n align-items: center;\n flex-direction: row;\n\n svg {\n width: 32px;\n height: 32px;\n }\n\n .avatar {\n width: 32px;\n height: 32px;\n flex: 0 0 32px;\n margin-right: 8px;\n border-radius: 100%;\n }\n\n .details {\n display: flex;\n flex-direction: column;\n }\n\n .name {\n font-size: 16px;\n font-weight: 500;\n margin-bottom: 3px;\n color: $verdocs-grey-0;\n }\n\n .destination {\n font-size: 14px;\n margin-bottom: 3px;\n color: $verdocs-grey-1;\n }\n\n &:hover {\n background: #eee;\n cursor: pointer;\n }\n }\n }\n}\n","import {Component, h, Event, EventEmitter, Fragment, Prop, State} from '@stencil/core';\nimport {formatFullName, getActiveEntitlements, IEntitlement, IProfile, IRecipient, isValidEmail, TEntitlement, TRecipientAuthMethod, VerdocsEndpoint} from '@verdocs/js-sdk';\nimport {convertToE164} from '../../../utils/utils';\n\nconst addrBookIcon = `<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-book-user\"><path d=\"M15 13a3 3 0 1 0-6 0\"/><path d=\"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20\"/><circle cx=\"12\" cy=\"8\" r=\"2\"/></svg>`;\n\nexport interface IContactSearchEvent {\n query: string;\n}\n\nexport interface IContactSelectEvent {\n first_name: string;\n last_name: string;\n email: string;\n phone: string;\n message: string;\n delegator: boolean;\n name_locked: boolean;\n auth_methods: TRecipientAuthMethod[];\n passcode: string;\n address: string;\n zip: string;\n}\n\nexport type TPickerContact = Partial<IProfile>;\n\n/**\n * Display a contact picker suitable for filling out Recipient objects when sending Envelopes.\n *\n * This picker can also be integrated with a backend to provide contact list / suggestion / address-book style behavior. As the\n * user interacts with the component, the text entered in the name fields is sent back to the parent via the `searchContacts` event.\n * The parent can use that text as a query string to call a backend to obtain appropriate contacts to show. This list may also be\n * hard-coded ahead of time to provide the user with smart suggestions on initial display, such as \"Recently Used\" contacts, or\n * to always display the user's own contact record.\n *\n * ```ts\n * <verdocs-contact-picker\n * templateRole={role}\n * contactSuggestions={[]}\n * onNext={e => console.log('Contact completed', e.detail)}\n * />\n * ```\n */\n@Component({\n tag: 'verdocs-contact-picker',\n styleUrl: 'verdocs-contact-picker.scss',\n shadow: false,\n})\nexport class VerdocsContactPicker {\n /**\n * The endpoint to use to communicate with Verdocs. If not set, the default endpoint will be used.\n */\n @Prop() endpoint: VerdocsEndpoint = VerdocsEndpoint.getDefault();\n\n /**\n * The role that this contact will be assigned to.\n */\n @Prop() templateRole: Partial<IRecipient> | null = null;\n\n /**\n * If set, suggestions will be displayed in a drop-down list to the user. It is recommended that the number\n * of suggestions be limited to the 5 best matching records.\n */\n @Prop() contactSuggestions: TPickerContact[] = [];\n\n /**\n * Event fired when the user enters text in the search field. The calling application may use this to update\n * the `contactSuggestions` property.\n */\n @Event({composed: true}) searchContacts: EventEmitter<IContactSearchEvent>;\n\n /**\n * Event fired when the step is cancelled. This is called exit to avoid conflicts with the JS-reserved \"cancel\" event name.\n */\n @Event({composed: true}) exit: EventEmitter;\n\n /**\n * Event fired when the user changes the type.\n */\n @Event({composed: true}) next: EventEmitter<IContactSelectEvent>;\n\n @State() first_name: string;\n @State() last_name: string;\n @State() email: string;\n @State() phone: string;\n @State() zip: string;\n @State() address: string;\n @State() message: string;\n @State() showSuggestions: boolean = false;\n @State() showMessage: boolean = false;\n @State() delegator: boolean = false;\n @State() name_locked: boolean = false;\n @State() auth_methods: TRecipientAuthMethod[] = [];\n @State() passcode: string = '';\n\n @State() firstNameFieldId = `verdocs-contact-picker-firstname-${Math.random().toString(36).substring(2, 11)}`;\n @State() lastNameFieldId = `verdocs-contact-picker-lastname-${Math.random().toString(36).substring(2, 11)}`;\n @State() emailFieldId = `verdocs-contact-picker-email-${Math.random().toString(36).substring(2, 11)}`;\n @State() phoneFieldId = `verdocs-contact-picker-phone-${Math.random().toString(36).substring(2, 11)}`;\n\n @State() activeEntitlements: Partial<Record<TEntitlement, IEntitlement>> = {};\n @State() authMethodsLoading: boolean = true\n\n async componentWillLoad() {\n this.endpoint.loadSession();\n\n if (this.templateRole) {\n const fullName = formatFullName(this.templateRole);\n const nameComponents = fullName.split(' ');\n const firstName = this.templateRole.first_name || nameComponents.shift() || '';\n const lastName = this.templateRole.last_name || nameComponents.join(' ') || '';\n this.first_name = firstName;\n this.last_name = lastName;\n\n this.email = this.templateRole.email || '';\n this.phone = this.templateRole.phone || '';\n // delegator and name_locked are mutually exclusive; delegator takes precedence if both are somehow set\n this.delegator = this.templateRole.delegator || false;\n this.name_locked = this.delegator ? false : (this.templateRole.name_locked || false);\n this.message = this.templateRole.message || '';\n this.showMessage = this.message !== '';\n this.auth_methods = this.templateRole.auth_methods || [];\n this.passcode = this.templateRole.passcode || '';\n }\n\n // Entitlements only gate the OPTIONAL methods (SMS, KBA, ID). Passcode and Email are always\n // offered, so a failure here must not block them: without this catch the await rejects,\n // authMethodsLoading stays true forever, and the user sees a spinner where every verification\n // option should be. Degrade to \"no optional entitlements\" instead.\n this.activeEntitlements = await getActiveEntitlements(this.endpoint).catch(e => {\n console.warn('[CONTACT PICKER] Unable to load entitlements, continuing with base auth methods only', e);\n return {} as Partial<Record<TEntitlement, IEntitlement>>;\n });\n this.authMethodsLoading = false;\n console.log('[CONTACT PICKER] Loaded entitlements', this.activeEntitlements);\n }\n\n handleFirstNameChange(e: any) {\n this.first_name = e.target.value;\n this.searchContacts?.emit({query: this.first_name});\n }\n\n handleLastNameChange(e: any) {\n this.last_name = e.target.value;\n this.searchContacts?.emit({query: this.last_name});\n }\n\n handleCancel(e: any) {\n e.stopPropagation();\n this.showSuggestions = false;\n this.exit?.emit();\n }\n\n handleSubmit(e: any) {\n e.stopPropagation();\n\n this.showSuggestions = false;\n this.next?.emit({\n first_name: this.first_name,\n last_name: this.last_name,\n email: this.email,\n phone: this.phone,\n message: this.message,\n delegator: this.delegator,\n name_locked: this.name_locked,\n auth_methods: this.auth_methods,\n passcode: this.passcode,\n address: this.address,\n zip: this.zip,\n });\n }\n\n handleSelectSuggestion(e: any, suggestion: TPickerContact) {\n e.stopPropagation();\n\n this.first_name = suggestion.first_name;\n this.last_name = suggestion.last_name;\n this.email = suggestion.email;\n this.phone = suggestion.phone;\n this.showSuggestions = false;\n }\n\n // The reason for the random names/IDs is to disable browser autocomplete. We set the autocomplete tags but many browsers ignore them\n // and show a duplicate autocomplete picker on top of our own.\n render() {\n // const hasBasics = this.first_name && this.last_name && (isValidEmail(this.email) || isValidPhone(this.phone));\n const hasBasics = this.first_name && this.last_name && isValidEmail(this.email);\n const hasAuthRequirements =\n !this.auth_methods.length ||\n (this.auth_methods.includes('passcode') && !!this.passcode) ||\n (this.auth_methods.includes('kba') && !!this.first_name && !!this.last_name) ||\n (this.auth_methods.includes('email') && !!this.email) ||\n (this.auth_methods.includes('sms') && !!this.phone);\n const canSubmit = hasBasics && hasAuthRequirements;\n const hasSMSAuth = !!this.activeEntitlements.sms_auth\n\n const verificationOptions = [];\n\n verificationOptions.push({label: 'Passcode', value: 'passcode'});\n verificationOptions.push({label: 'Email', value: 'email'});\n\n if (hasSMSAuth) {\n verificationOptions.push({label: 'SMS (One-Time Code)', value: 'sms'});\n }\n\n if (!!this.activeEntitlements.kba_auth) {\n verificationOptions.push({label: 'Knowledge-Based (KBA)', value: 'kba'});\n }\n\n if (!!this.activeEntitlements.id_auth) {\n verificationOptions.push({label: 'ID Check', value: 'id'});\n }\n\n return (\n <form\n onSubmit={e => e.preventDefault()}\n // onClick={e => e.stopPropagation()}\n autocomplete=\"off\"\n >\n <div class=\"row\">\n <label htmlFor={this.firstNameFieldId}>Name:</label>\n <div class=\"names-row\">\n <input\n id={this.firstNameFieldId}\n name={this.firstNameFieldId}\n type=\"text\"\n data-lpignore=\"true\"\n autocomplete=\"blocked\"\n aria-autocomplete=\"none\"\n value={this.first_name}\n placeholder=\"First...\"\n onFocus={() => {\n // Give the blur event a chance to hide it first if going between first/last\n setTimeout(() => {\n this.showSuggestions = this.contactSuggestions?.length > 0;\n }, 100);\n }}\n onInput={e => this.handleFirstNameChange(e)}\n />\n <input\n id={this.lastNameFieldId}\n name={this.lastNameFieldId}\n type=\"text\"\n data-lpignore=\"true\"\n autocomplete=\"blocked\"\n aria-autocomplete=\"none\"\n value={this.last_name}\n placeholder=\"Last...\"\n onFocus={() => {\n // Give the blur event a chance to hide it first if going between first/last\n setTimeout(() => {\n this.showSuggestions = this.contactSuggestions?.length > 0;\n }, 100);\n }}\n onInput={e => this.handleLastNameChange(e)}\n />\n </div>\n\n {this.showSuggestions && (\n <verdocs-portal\n anchor={this.firstNameFieldId}\n onClickAway={() => {\n this.showSuggestions = false;\n document.querySelectorAll(`.verdocs-portal-wrapper`).forEach(el => el.remove());\n }}\n id=\"verdocs-contact-picker-suggestions\"\n >\n <div class=\"dropdown\">\n {this.contactSuggestions\n .filter(suggestion => !this.first_name || suggestion.first_name?.toLowerCase().includes(this.first_name.toLowerCase()))\n .map(suggestion => (\n <div key={suggestion.id ?? suggestion.email} class=\"suggestion\" onClick={e => this.handleSelectSuggestion(e, suggestion)}>\n {suggestion.picture ? <img alt=\"Avatar\" class=\"avatar\" src={suggestion.picture} /> : <div class=\"avatar\" innerHTML={addrBookIcon} />}\n <div class=\"details\">\n <div class=\"name\">{formatFullName(suggestion)}</div>\n {suggestion.email && <div class=\"destination\">{suggestion.email}</div>}\n {suggestion.phone && <div class=\"destination\">{suggestion.phone}</div>}\n </div>\n </div>\n ))}\n </div>\n </verdocs-portal>\n )}\n </div>\n\n <div class=\"row\">\n <label htmlFor={this.emailFieldId}>Email:</label>\n <input\n id={this.emailFieldId}\n name={this.emailFieldId}\n type=\"text\"\n data-lpignore=\"true\"\n autoComplete=\"blocked\"\n aria-autocomplete=\"none\"\n value={this.email}\n placeholder=\"Invite/verify via email...\"\n onFocus={() => (this.showSuggestions = false)}\n onInput={(e: any) => (this.email = e.target.value)}\n />\n </div>\n\n {hasSMSAuth && (\n <div class=\"row\">\n <label htmlFor={this.phoneFieldId}>Phone:</label>\n <input\n id={this.phoneFieldId}\n name={this.phoneFieldId}\n type=\"text\"\n data-lpignore=\"true\"\n autoComplete=\"blocked\"\n aria-autocomplete=\"none\"\n value={this.phone}\n placeholder=\"Invite/verify via SMS...\"\n onFocus={() => (this.showSuggestions = false)}\n onInput={(e: any) => {\n this.phone = convertToE164(e.target.value);\n }}\n />\n </div>\n )}\n\n <Fragment>\n {verificationOptions.length > 0 && (\n <div class=\"row pin-code\">\n <label>Verification Methods:</label>\n {this.authMethodsLoading ? (\n <verdocs-spinner size={10} mode=\"dark\" style={{margin: 'auto'}} />\n ) : (\n <div>\n {verificationOptions.map((option, i) => (\n <div class=\"option\">\n <verdocs-checkbox\n size=\"small\"\n id={`verdocs-multi-select-opt-${i}`}\n value={option.value}\n checked={this.auth_methods.includes(option.value)}\n onInput={(e: any) => {\n if (e.target.checked) {\n this.auth_methods = [...this.auth_methods, option.value];\n } else {\n this.auth_methods = this.auth_methods.filter(selected => selected !== option.value);\n }\n }}\n />\n <label htmlFor={`verdocs-multi-select-option-${i}`}>{option.label}</label>\n </div>\n ))}\n </div>\n )} \n </div>\n )}\n\n {this.auth_methods.includes('passcode') && (\n <div class=\"row pin-code\">\n <label htmlFor={this.phoneFieldId}>Passcode:</label>\n <input\n id=\"verdocs-passcode\"\n name=\"verdocs-passcode\"\n type=\"text\"\n data-lpignore=\"true\"\n autocomplete=\"blocked\"\n aria-autocomplete=\"none\"\n value={this.passcode}\n placeholder=\"4-8 digits recommended...\"\n onFocus={() => (this.showSuggestions = false)}\n onInput={(e: any) => (this.passcode = e.target.value)}\n />\n </div>\n )}\n </Fragment>\n\n <div class=\"row pin-code\">\n <label style={{marginTop: '6px'}}>Options:</label>\n <div>\n <div class=\"option\">\n <verdocs-checkbox\n size=\"small\"\n id=\"verdocs-delegator\"\n checked={this.delegator}\n disabled={this.name_locked}\n onInput={(e: any) => {\n this.delegator = e.target.checked;\n if (this.delegator) this.name_locked = false;\n }}\n />\n <label htmlFor=\"verdocs-delegator\">May delegate signing</label>\n </div>\n <div class=\"option\">\n <verdocs-checkbox\n size=\"small\"\n id=\"verdocs-name-locked\"\n checked={this.name_locked}\n disabled={this.delegator}\n onInput={(e: any) => {\n this.name_locked = e.target.checked;\n if (this.name_locked) this.delegator = false;\n }}\n />\n <label htmlFor=\"verdocs-name-locked\">Name locked</label>\n </div>\n </div>\n </div>\n\n <div class=\"row message\">\n <label htmlFor=\"verdocs-contact-picker-message\">Message:</label>\n <textarea\n id=\"verdocs-contact-picker-message\"\n name=\"verdocs-contact-picker-message\"\n data-lpignore=\"true\"\n autocomplete=\"blocked\"\n placeholder=\"Optional message to include in invitation...\"\n onFocus={() => (this.showSuggestions = false)}\n onInput={(e: any) => (this.message = e.target.value)}\n >\n {this.message}\n </textarea>\n </div>\n\n <div class=\"buttons\">\n <div class=\"flex-fill\" />\n\n <verdocs-button variant=\"outline\" label=\"Cancel\" size=\"small\" onClick={e => this.handleCancel(e)} />\n <verdocs-button label=\"OK\" size=\"small\" disabled={!canSubmit} onClick={!canSubmit ? () => {} : e => this.handleSubmit(e)} />\n </div>\n </form>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"p-C96xjMgt.system.js","sources":["src/utils/Environment.ts"],"sourcesContent":["import {VerdocsEndpoint} from '@verdocs/js-sdk';\n\nexport const BETA_ORIGINS = ['https://beta.verdocs.com', 'https://stage.verdocs.com', 'http://localhost:6006', 'http://localhost:5173'];\n\nexport const IS_BETA = BETA_ORIGINS.includes(window.location.origin);\n\nexport const API_URL = IS_BETA ? 'https://stage-api.verdocs.com' : 'https://api.verdocs.com';\n\n// NOTE: deliberately does NOT call setBaseURL(). VerdocsEndpoint's constructor already applies this\n// exact origin-based default (same BETA_ORIGINS list), so setting it here was redundant — and\n// harmful: the default endpoint is a global singleton (Symbol.for('verdocs-default-endpoint')), and\n// this module is a lazily-loaded chunk that evaluates the first time a component renders. That\n// meant it silently overwrote whatever baseURL the host app had configured at startup. Apps\n// embedded on origins we don't recognize (e.g. the Verdocs Teams tab, served from\n// *.azurestaticapps.net) were repointed at production even after explicitly selecting stage.\nexport const DefaultEndpoint = VerdocsEndpoint.getDefault();\n"],"names":[],"mappings":";;;;;;;;;GAQA;GACA;GACA;GACA;GACA;GACA;GACA;SACa,eAAe,gBAAG,eAAe,CAAC,UAAU;;;;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"p-Dy2CRiH8.js","sources":["src/utils/Environment.ts"],"sourcesContent":["import {VerdocsEndpoint} from '@verdocs/js-sdk';\n\nexport const BETA_ORIGINS = ['https://beta.verdocs.com', 'https://stage.verdocs.com', 'http://localhost:6006', 'http://localhost:5173'];\n\nexport const IS_BETA = BETA_ORIGINS.includes(window.location.origin);\n\nexport const API_URL = IS_BETA ? 'https://stage-api.verdocs.com' : 'https://api.verdocs.com';\n\n// NOTE: deliberately does NOT call setBaseURL(). VerdocsEndpoint's constructor already applies this\n// exact origin-based default (same BETA_ORIGINS list), so setting it here was redundant — and\n// harmful: the default endpoint is a global singleton (Symbol.for('verdocs-default-endpoint')), and\n// this module is a lazily-loaded chunk that evaluates the first time a component renders. That\n// meant it silently overwrote whatever baseURL the host app had configured at startup. Apps\n// embedded on origins we don't recognize (e.g. the Verdocs Teams tab, served from\n// *.azurestaticapps.net) were repointed at production even after explicitly selecting stage.\nexport const DefaultEndpoint = VerdocsEndpoint.getDefault();\n"],"names":[],"mappings":";;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;MACa,eAAe,GAAG,eAAe,CAAC,UAAU;;;;"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/dist/verdocs-web-sdk/{p-869024e0.system.entry.js.map → p-09f5670e.system.entry.js.map}
RENAMED
|
File without changes
|
/package/dist/verdocs-web-sdk/{p-e87a29a3.system.entry.js.map → p-298d799f.system.entry.js.map}
RENAMED
|
File without changes
|
|
File without changes
|
/package/dist/verdocs-web-sdk/{p-62464041.system.entry.js.map → p-439d36b0.system.entry.js.map}
RENAMED
|
File without changes
|
|
File without changes
|
/package/dist/verdocs-web-sdk/{p-c86111fd.system.entry.js.map → p-5404f6bf.system.entry.js.map}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/dist/verdocs-web-sdk/{p-6e8ce989.system.entry.js.map → p-99f7a0fa.system.entry.js.map}
RENAMED
|
File without changes
|
|
File without changes
|
/package/dist/verdocs-web-sdk/{p-c3527f3e.system.entry.js.map → p-f7b14409.system.entry.js.map}
RENAMED
|
File without changes
|
|
File without changes
|