@verdocs/web-sdk 6.13.2 → 6.13.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/verdocs-contact-picker.cjs.entry.js +3 -3
- package/dist/cjs/verdocs-contact-picker.cjs.entry.js.map +1 -1
- package/dist/cjs/verdocs-preview_6.cjs.entry.js +8 -12
- package/dist/cjs/verdocs-preview_6.cjs.entry.js.map +1 -1
- package/dist/collection/components/embeds/verdocs-send/verdocs-send.css +26 -0
- package/dist/collection/components/embeds/verdocs-send/verdocs-send.js +7 -11
- package/dist/collection/components/embeds/verdocs-send/verdocs-send.js.map +1 -1
- package/dist/collection/components/envelopes/verdocs-contact-picker/verdocs-contact-picker.js +3 -3
- package/dist/collection/components/envelopes/verdocs-contact-picker/verdocs-contact-picker.js.map +1 -1
- package/dist/components/p-K-sDaUxS.js +2 -0
- package/dist/components/p-K-sDaUxS.js.map +1 -0
- package/dist/components/{p-ByrpRZ3E.js → p-lCn8WPSe.js} +2 -2
- package/dist/components/p-lCn8WPSe.js.map +1 -0
- package/dist/components/verdocs-build.js +1 -1
- package/dist/components/verdocs-contact-picker.js +1 -1
- package/dist/components/verdocs-send.js +1 -1
- package/dist/esm/verdocs-contact-picker.entry.js +3 -3
- package/dist/esm/verdocs-contact-picker.entry.js.map +1 -1
- package/dist/esm/verdocs-preview_6.entry.js +8 -12
- package/dist/esm/verdocs-preview_6.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-preview_6.entry.js +2 -2
- package/dist/esm-es5/verdocs-preview_6.entry.js.map +1 -1
- package/dist/types/components/embeds/verdocs-send/verdocs-send.d.ts +0 -1
- package/dist/verdocs-web-sdk/{p-38800961.system.entry.js → p-3a97f4b4.system.entry.js} +2 -2
- package/dist/verdocs-web-sdk/p-3a97f4b4.system.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/{p-301f0247.entry.js → p-78a18a3b.entry.js} +2 -2
- package/dist/verdocs-web-sdk/p-78a18a3b.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/p-895174e4.system.entry.js +8 -0
- package/dist/verdocs-web-sdk/p-895174e4.system.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/p-8f7d0062.entry.js +8 -0
- package/dist/verdocs-web-sdk/p-8f7d0062.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/p-BdZ5Ghsa.system.js +1 -1
- package/dist/verdocs-web-sdk/verdocs-web-sdk.esm.js +1 -1
- package/package.json +1 -1
- package/dist/components/p-Blr31TcJ.js +0 -2
- package/dist/components/p-Blr31TcJ.js.map +0 -1
- package/dist/components/p-ByrpRZ3E.js.map +0 -1
- package/dist/verdocs-web-sdk/p-1b818cdf.entry.js +0 -8
- package/dist/verdocs-web-sdk/p-1b818cdf.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-24dcc54e.system.entry.js +0 -8
- package/dist/verdocs-web-sdk/p-24dcc54e.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-301f0247.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-38800961.system.entry.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var __awaiter=this&&this.__awaiter||function(e,t,i,o){function r(e){return e instanceof i?e:new i((function(t){t(e)}))}return new(i||(i=Promise))((function(i,c){function n(e){try{a(o.next(e))}catch(e){c(e)}}function s(e){try{a(o["throw"](e))}catch(e){c(e)}}function a(e){e.done?i(e.value):r(e.value).then(n,s)}a((o=o.apply(e,t||[])).next())}))};var __generator=this&&this.__generator||function(e,t){var i={label:0,sent:function(){if(c[0]&1)throw c[1];return c[1]},trys:[],ops:[]},o,r,c,n=Object.create((typeof Iterator==="function"?Iterator:Object).prototype);return n.next=s(0),n["throw"]=s(1),n["return"]=s(2),typeof Symbol==="function"&&(n[Symbol.iterator]=function(){return this}),n;function s(e){return function(t){return a([e,t])}}function a(s){if(o)throw new TypeError("Generator is already executing.");while(n&&(n=0,s[0]&&(i=0)),i)try{if(o=1,r&&(c=s[0]&2?r["return"]:s[0]?r["throw"]||((c=r["return"])&&c.call(r),0):r.next)&&!(c=c.call(r,s[1])).done)return c;if(r=0,c)s=[s[0]&2,c.value];switch(s[0]){case 0:case 1:c=s;break;case 4:i.label++;return{value:s[1],done:false};case 5:i.label++;r=s[1];s=[0];continue;case 7:s=i.ops.pop();i.trys.pop();continue;default:if(!(c=i.trys,c=c.length>0&&c[c.length-1])&&(s[0]===6||s[0]===2)){i=0;continue}if(s[0]===3&&(!c||s[1]>c[0]&&s[1]<c[3])){i.label=s[1];break}if(s[0]===6&&i.label<c[1]){i.label=c[1];c=s;break}if(c&&i.label<c[2]){i.label=c[2];i.ops.push(s);break}if(c[2])i.ops.pop();i.trys.pop();continue}s=t.call(e,i)}catch(e){s=[6,e];r=0}finally{o=c=0}if(s[0]&5)throw s[1];return{value:s[0]?s[1]:void 0,done:true}}};var __spreadArray=this&&this.__spreadArray||function(e,t,i){if(i||arguments.length===2)for(var o=0,r=t.length,c;o<r;o++){if(c||!(o in t)){if(!c)c=Array.prototype.slice.call(t,0,o);c[o]=t[o]}}return e.concat(c||Array.prototype.slice.call(t))};import{r as registerInstance,c as createEvent,h,g as getElement}from"./index-CjTHbolG.js";import{VerdocsEndpoint,formatFullName,getActiveEntitlements,isValidEmail}from"@verdocs/js-sdk";import{u as updateScrollFade}from"./ScrollFade-7UEjZarN.js";import{c as convertToE164}from"./utils-Bh3zb1Xs.js";import"./index-BglCURB-.js";import"./Types-CIxfEdV7.js";var verdocsContactPickerCss=function(){return'verdocs-contact-picker{--picker-ink:var(--verdocs-body-color, #111827);--picker-ink-2:#374151;--picker-muted:#6b7280;--picker-faint:#9ca3af;--picker-control-border:#d1d5db;--picker-accent:var(--verdocs-link-color, #4c56cb);--picker-accent-tint:#f4f5fc;--picker-accent-tint-2:#e6e7f8;display:block;font-size:14px;color:var(--picker-ink);font-family:var(--verdocs-primary-font, "Inter", "Barlow", sans-serif)}verdocs-contact-picker *{-webkit-box-sizing:border-box;box-sizing:border-box}verdocs-contact-picker form{-ms-flex:1;flex:1;min-height:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}verdocs-contact-picker .form-body-wrap{position:relative;-ms-flex:1;flex:1;min-height:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}verdocs-contact-picker .form-body{position:relative;-ms-flex:1;flex:1;min-height:0;overflow-y:auto}verdocs-contact-picker .scroll-fade{position:absolute;left:0;right:0;bottom:0;height:36px;opacity:0;pointer-events:none;-webkit-transition:opacity 150ms ease-out;transition:opacity 150ms ease-out;background:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0)), to(#ffffff));background:linear-gradient(rgba(255, 255, 255, 0), #ffffff)}verdocs-contact-picker .scrollable:not(.at-end)>.scroll-fade{opacity:1}verdocs-contact-picker .row.names{display:-ms-flexbox;display:flex;-webkit-column-gap:8px;-moz-column-gap:8px;column-gap:8px;position:relative}verdocs-contact-picker .row.names .field{-ms-flex:1;flex:1;min-width:0}verdocs-contact-picker .field{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;row-gap:4px;margin:0 0 10px 0}verdocs-contact-picker .field label{font-size:12px;font-weight:500;color:var(--picker-ink-2)}verdocs-contact-picker .field label .optional{color:var(--picker-muted);font-weight:400}verdocs-contact-picker input,verdocs-contact-picker textarea{width:100%;font-size:13px;font-family:inherit;color:var(--picker-ink);background:#ffffff;border:1px solid var(--picker-control-border);border-radius:6px;outline:none}verdocs-contact-picker input:focus,verdocs-contact-picker textarea:focus{border-color:var(--picker-accent);-webkit-box-shadow:0 0 0 2px var(--picker-accent-tint-2);box-shadow:0 0 0 2px var(--picker-accent-tint-2)}verdocs-contact-picker input::-webkit-input-placeholder,verdocs-contact-picker textarea::-webkit-input-placeholder{color:var(--picker-faint);opacity:1}verdocs-contact-picker input::-moz-placeholder,verdocs-contact-picker textarea::-moz-placeholder{color:var(--picker-faint);opacity:1}verdocs-contact-picker input:-ms-input-placeholder,verdocs-contact-picker textarea:-ms-input-placeholder{color:var(--picker-faint);opacity:1}verdocs-contact-picker input::-ms-input-placeholder,verdocs-contact-picker textarea::-ms-input-placeholder{color:var(--picker-faint);opacity:1}verdocs-contact-picker input::placeholder,verdocs-contact-picker textarea::placeholder{color:var(--picker-faint);opacity:1}verdocs-contact-picker input{height:34px;padding:0 10px}verdocs-contact-picker textarea{height:56px;padding:8px 10px;resize:vertical}verdocs-contact-picker .group{margin:2px 0 12px 0}verdocs-contact-picker .group .group-label{font-size:12px;font-weight:500;color:var(--picker-ink-2);margin:0 0 6px 0}verdocs-contact-picker .pills{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:6px}verdocs-contact-picker .pill{all:unset;height:26px;padding:0 9px;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-webkit-column-gap:4px;-moz-column-gap:4px;column-gap:4px;cursor:pointer;font-size:12px;font-weight:500;font-family:inherit;white-space:nowrap;border-radius:999px;color:var(--picker-ink-2);border:1px solid var(--picker-control-border)}verdocs-contact-picker .pill:focus-visible{outline:2px solid var(--picker-accent);outline-offset:2px}verdocs-contact-picker .pill.selected{color:var(--picker-accent);border-color:var(--picker-accent);background:var(--picker-accent-tint)}verdocs-contact-picker .pill.locked{opacity:0.5;cursor:not-allowed}verdocs-contact-picker .pill .pill-icon,verdocs-contact-picker .pill .pill-icon svg{width:12px;height:12px;display:block}verdocs-contact-picker .passcode{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-column-gap:8px;-moz-column-gap:8px;column-gap:8px;margin-top:8px}verdocs-contact-picker .passcode input{-ms-flex:0 0 120px;flex:0 0 120px;width:120px;height:30px}verdocs-contact-picker .passcode .passcode-hint{-ms-flex:1;flex:1;min-width:0;font-size:11px;line-height:1.35;color:var(--picker-muted);-ms-flex-item-align:center;align-self:center}verdocs-contact-picker .buttons{margin-top:10px;padding-top:12px;border-top:1px solid #e5e7eb;-ms-flex:none;flex:none;display:-ms-flexbox;display:flex;-webkit-column-gap:10px;-moz-column-gap:10px;column-gap:10px}verdocs-contact-picker .buttons verdocs-button:last-child{-ms-flex:1;flex:1}verdocs-contact-picker .buttons verdocs-button:last-child button{width:100%}verdocs-contact-picker .suggestions{position:absolute;top:0;left:0;right:0;z-index:20;max-height:225px;overflow-y:auto;background:#ffffff;border-radius:6px;border:1px solid #e5e7eb;-webkit-box-shadow:0 8px 24px rgba(17, 24, 39, 0.14);box-shadow:0 8px 24px rgba(17, 24, 39, 0.14)}verdocs-contact-picker .suggestions .suggestion{display:-ms-flexbox;display:flex;padding:6px 12px;-ms-flex-align:center;align-items:center;-ms-flex-direction:row;flex-direction:row;cursor:pointer}verdocs-contact-picker .suggestions .suggestion svg{width:28px;height:28px}verdocs-contact-picker .suggestions .suggestion .avatar{width:28px;height:28px;-ms-flex:0 0 28px;flex:0 0 28px;margin-right:8px;border-radius:100%}verdocs-contact-picker .suggestions .suggestion .details{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0}verdocs-contact-picker .suggestions .suggestion .name{font-size:13px;font-weight:500;color:var(--picker-ink)}verdocs-contact-picker .suggestions .suggestion .destination{font-size:12px;color:var(--picker-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}verdocs-contact-picker .suggestions .suggestion:hover{background:var(--picker-accent-tint)}verdocs-contact-picker [data-lastpass-icon-root]{display:none !important}'};var 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>';var lockIcon='<svg focusable="false" aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/></svg>';var VerdocsContactPicker=function(){function e(e){registerInstance(this,e);this.searchContacts=createEvent(this,"searchContacts");this.exit=createEvent(this,"exit");this.next=createEvent(this,"next");this.endpoint=VerdocsEndpoint.getDefault();this.templateRole=null;this.contactSuggestions=[];this.showCancel=true;this.showSuggestions=false;this.showMessage=false;this.delegator=false;this.name_locked=false;this.auth_methods=[];this.passcode="";this.firstNameFieldId="verdocs-contact-picker-firstname-".concat(Math.random().toString(36).substring(2,11));this.lastNameFieldId="verdocs-contact-picker-lastname-".concat(Math.random().toString(36).substring(2,11));this.emailFieldId="verdocs-contact-picker-email-".concat(Math.random().toString(36).substring(2,11));this.phoneFieldId="verdocs-contact-picker-phone-".concat(Math.random().toString(36).substring(2,11));this.activeEntitlements={};this.authMethodsLoading=true}e.prototype.componentWillLoad=function(){return __awaiter(this,void 0,void 0,(function(){var e,t,i,o,r;return __generator(this,(function(c){switch(c.label){case 0:this.endpoint.loadSession();if(this.templateRole){e=formatFullName(this.templateRole);t=e.split(" ");i=this.templateRole.first_name||t.shift()||"";o=this.templateRole.last_name||t.join(" ")||"";this.first_name=i;this.last_name=o;this.email=this.templateRole.email||"";this.phone=this.templateRole.phone||"";this.delegator=this.templateRole.delegator||false;this.name_locked=this.delegator?false:this.templateRole.name_locked||false;this.message=this.templateRole.message||"";this.showMessage=this.message!=="";this.auth_methods=this.templateRole.auth_methods||[];this.passcode=this.templateRole.passcode||""}r=this;return[4,getActiveEntitlements(this.endpoint).catch((function(e){console.warn("[CONTACT PICKER] Unable to load entitlements, continuing with base auth methods only",e);return{}}))];case 1:r.activeEntitlements=c.sent();this.authMethodsLoading=false;console.log("[CONTACT PICKER] Loaded entitlements",this.activeEntitlements);return[2]}}))}))};e.prototype.componentDidRender=function(){var e=this.el.querySelector(".form-body");updateScrollFade(e);if(this.suggestionsEl&&this.namesRowEl&&e){this.suggestionsEl.style.top="".concat(this.namesRowEl.offsetTop+this.namesRowEl.offsetHeight-e.scrollTop+4,"px")}};e.prototype.handleDocumentClick=function(e){if(this.showSuggestions&&!this.el.contains(e.target)){this.showSuggestions=false}};e.prototype.handleFirstNameChange=function(e){var t;this.first_name=e.target.value;(t=this.searchContacts)===null||t===void 0?void 0:t.emit({query:this.first_name})};e.prototype.handleLastNameChange=function(e){var t;this.last_name=e.target.value;(t=this.searchContacts)===null||t===void 0?void 0:t.emit({query:this.last_name})};e.prototype.handleCancel=function(e){var t;e.stopPropagation();this.showSuggestions=false;(t=this.exit)===null||t===void 0?void 0:t.emit()};e.prototype.handleSubmit=function(e){var t;e.stopPropagation();this.showSuggestions=false;(t=this.next)===null||t===void 0?void 0:t.emit({first_name:this.first_name,last_name:this.last_name,email:this.email,phone:this.phone,message:this.message,delegator:this.delegator,name_locked:this.name_locked,auth_methods:this.auth_methods,passcode:this.passcode,address:this.address,zip:this.zip})};e.prototype.handleSelectSuggestion=function(e,t){e.stopPropagation();this.first_name=t.first_name;this.last_name=t.last_name;this.email=t.email;this.phone=t.phone;this.showSuggestions=false};e.prototype.toggleAuthMethod=function(e){if(this.auth_methods.includes(e)){this.auth_methods=this.auth_methods.filter((function(t){return t!==e}))}else{this.auth_methods=__spreadArray(__spreadArray([],this.auth_methods,true),[e],false)}};e.prototype.setSigningOption=function(e){this.delegator=e==="delegator";this.name_locked=e==="name_locked"};e.prototype.renderPill=function(e,t,i,o){if(o===void 0){o={}}return h("button",{type:"button",class:{pill:true,selected:t,locked:!!o.locked},"aria-pressed":t?"true":"false",disabled:o.locked&&!t,title:o.title,onClick:i},o.locked&&h("span",{class:"pill-icon",innerHTML:lockIcon}),e)};e.prototype.render=function(){var e=this;var t=this.first_name&&this.last_name&&isValidEmail(this.email);var i=this.auth_methods.every((function(t){switch(t){case"passcode":return!!e.passcode;case"kba":return!!e.first_name&&!!e.last_name;case"email":return!!e.email;case"sms":return!!e.phone;default:return true}}));var o=t&&i;var r=!!this.activeEntitlements.sms_auth;var c=[{label:"Email OTP",value:"email"},{label:"Passcode",value:"passcode"},{label:"SMS OTP",value:"sms",locked:!r},{label:"KBA",value:"kba",locked:!this.activeEntitlements.kba_auth},{label:"ID check",value:"id",locked:!this.activeEntitlements.id_auth}];var n=this.delegator?"delegator":this.name_locked?"name_locked":"none";return h("form",{onSubmit:function(e){return e.preventDefault()},autocomplete:"off"},h("div",{class:"form-body-wrap"},h("div",{class:"form-body",onScroll:function(t){updateScrollFade(t.target);e.showSuggestions=false}},h("div",{class:"row names",ref:function(t){return e.namesRowEl=t}},h("div",{class:"field"},h("label",{htmlFor:this.firstNameFieldId},"First name"),h("input",{id:this.firstNameFieldId,name:this.firstNameFieldId,type:"text","data-lpignore":"true",autocomplete:"blocked","aria-autocomplete":"none",value:this.first_name,onFocus:function(){setTimeout((function(){var t;e.showSuggestions=((t=e.contactSuggestions)===null||t===void 0?void 0:t.length)>0}),100)},onInput:function(t){return e.handleFirstNameChange(t)}})),h("div",{class:"field"},h("label",{htmlFor:this.lastNameFieldId},"Last name"),h("input",{id:this.lastNameFieldId,name:this.lastNameFieldId,type:"text","data-lpignore":"true",autocomplete:"blocked","aria-autocomplete":"none",value:this.last_name,onFocus:function(){setTimeout((function(){var t;e.showSuggestions=((t=e.contactSuggestions)===null||t===void 0?void 0:t.length)>0}),100)},onInput:function(t){return e.handleLastNameChange(t)}}))),h("div",{class:"field"},h("label",{htmlFor:this.emailFieldId},"Email"),h("input",{id:this.emailFieldId,name:this.emailFieldId,type:"text","data-lpignore":"true",autoComplete:"blocked","aria-autocomplete":"none",value:this.email,onFocus:function(){return e.showSuggestions=false},onInput:function(t){return e.email=t.target.value}})),r&&h("div",{class:"field"},h("label",{htmlFor:this.phoneFieldId},"Phone ",h("span",{class:"optional"},"(optional)")),h("input",{id:this.phoneFieldId,name:this.phoneFieldId,type:"text","data-lpignore":"true",autoComplete:"blocked","aria-autocomplete":"none",value:this.phone,placeholder:"+1 (555) 000-0000",onFocus:function(){return e.showSuggestions=false},onInput:function(t){e.phone=convertToE164(t.target.value)}})),h("div",{class:"group"},h("div",{class:"group-label"},"Verification"),this.authMethodsLoading?h("verdocs-spinner",{size:10,mode:"dark"}):h("div",{class:"pills"},c.map((function(t){return e.renderPill(t.label,e.auth_methods.includes(t.value),(function(){return e.toggleAuthMethod(t.value)}),{locked:t.locked,title:t.locked?"Please contact sales@verdocs.com to enable this feature.":undefined})}))),this.auth_methods.includes("passcode")&&h("div",{class:"passcode"},h("input",{id:"verdocs-passcode",name:"verdocs-passcode",type:"text","data-lpignore":"true",autocomplete:"blocked","aria-autocomplete":"none","aria-label":"Passcode",value:this.passcode,placeholder:"4-8 digits",onFocus:function(){return e.showSuggestions=false},onInput:function(t){return e.passcode=t.target.value}}),h("span",{class:"passcode-hint"},"PIN or passcode shared separately with the recipient ahead of time"))),h("div",{class:"group"},h("div",{class:"group-label"},"Signing options"),h("div",{class:"pills"},this.renderPill("None",n==="none",(function(){return e.setSigningOption("none")})),this.renderPill("May delegate",n==="delegator",(function(){return e.setSigningOption("delegator")})),this.renderPill("Name locked",n==="name_locked",(function(){return e.setSigningOption("name_locked")})))),h("div",{class:"field"},h("label",{htmlFor:"verdocs-contact-picker-message"},"Message ",h("span",{class:"optional"},"(optional)")),h("textarea",{id:"verdocs-contact-picker-message",name:"verdocs-contact-picker-message","data-lpignore":"true",autocomplete:"blocked",placeholder:"Add a message to the invitation",onFocus:function(){return e.showSuggestions=false},onInput:function(t){return e.message=t.target.value}},this.message))),h("div",{class:"scroll-fade"}),this.showSuggestions&&h("div",{class:"suggestions",role:"listbox",ref:function(t){return e.suggestionsEl=t}},this.contactSuggestions.filter((function(t){var i;return!e.first_name||((i=t.first_name)===null||i===void 0?void 0:i.toLowerCase().includes(e.first_name.toLowerCase()))})).map((function(t){var i;return h("div",{key:(i=t.id)!==null&&i!==void 0?i:t.email,class:"suggestion",onClick:function(i){return e.handleSelectSuggestion(i,t)}},t.picture?h("img",{alt:"Avatar",class:"avatar",src:t.picture}):h("div",{class:"avatar",innerHTML:addrBookIcon}),h("div",{class:"details"},h("div",{class:"name"},formatFullName(t)),t.email&&h("div",{class:"destination"},t.email),t.phone&&h("div",{class:"destination"},t.phone)))})))),h("div",{class:"buttons"},this.showCancel&&h("verdocs-button",{label:"Cancel",variant:"text",size:"small",onClick:function(t){return e.handleCancel(t)}}),h("verdocs-button",{label:"Done",size:"small",disabled:!o,onClick:!o?function(){}:function(t){return e.handleSubmit(t)}})))};Object.defineProperty(e.prototype,"el",{get:function(){return getElement(this)},enumerable:false,configurable:true});return e}();VerdocsContactPicker.style=verdocsContactPickerCss();export{VerdocsContactPicker as verdocs_contact_picker};
|
|
1
|
+
var __awaiter=this&&this.__awaiter||function(e,t,i,o){function r(e){return e instanceof i?e:new i((function(t){t(e)}))}return new(i||(i=Promise))((function(i,c){function n(e){try{a(o.next(e))}catch(e){c(e)}}function s(e){try{a(o["throw"](e))}catch(e){c(e)}}function a(e){e.done?i(e.value):r(e.value).then(n,s)}a((o=o.apply(e,t||[])).next())}))};var __generator=this&&this.__generator||function(e,t){var i={label:0,sent:function(){if(c[0]&1)throw c[1];return c[1]},trys:[],ops:[]},o,r,c,n=Object.create((typeof Iterator==="function"?Iterator:Object).prototype);return n.next=s(0),n["throw"]=s(1),n["return"]=s(2),typeof Symbol==="function"&&(n[Symbol.iterator]=function(){return this}),n;function s(e){return function(t){return a([e,t])}}function a(s){if(o)throw new TypeError("Generator is already executing.");while(n&&(n=0,s[0]&&(i=0)),i)try{if(o=1,r&&(c=s[0]&2?r["return"]:s[0]?r["throw"]||((c=r["return"])&&c.call(r),0):r.next)&&!(c=c.call(r,s[1])).done)return c;if(r=0,c)s=[s[0]&2,c.value];switch(s[0]){case 0:case 1:c=s;break;case 4:i.label++;return{value:s[1],done:false};case 5:i.label++;r=s[1];s=[0];continue;case 7:s=i.ops.pop();i.trys.pop();continue;default:if(!(c=i.trys,c=c.length>0&&c[c.length-1])&&(s[0]===6||s[0]===2)){i=0;continue}if(s[0]===3&&(!c||s[1]>c[0]&&s[1]<c[3])){i.label=s[1];break}if(s[0]===6&&i.label<c[1]){i.label=c[1];c=s;break}if(c&&i.label<c[2]){i.label=c[2];i.ops.push(s);break}if(c[2])i.ops.pop();i.trys.pop();continue}s=t.call(e,i)}catch(e){s=[6,e];r=0}finally{o=c=0}if(s[0]&5)throw s[1];return{value:s[0]?s[1]:void 0,done:true}}};var __spreadArray=this&&this.__spreadArray||function(e,t,i){if(i||arguments.length===2)for(var o=0,r=t.length,c;o<r;o++){if(c||!(o in t)){if(!c)c=Array.prototype.slice.call(t,0,o);c[o]=t[o]}}return e.concat(c||Array.prototype.slice.call(t))};import{r as registerInstance,c as createEvent,h,g as getElement}from"./index-CjTHbolG.js";import{VerdocsEndpoint,formatFullName,getActiveEntitlements,isValidEmail}from"@verdocs/js-sdk";import{u as updateScrollFade}from"./ScrollFade-7UEjZarN.js";import{c as convertToE164}from"./utils-Bh3zb1Xs.js";import"./index-BglCURB-.js";import"./Types-CIxfEdV7.js";var verdocsContactPickerCss=function(){return'verdocs-contact-picker{--picker-ink:var(--verdocs-body-color, #111827);--picker-ink-2:#374151;--picker-muted:#6b7280;--picker-faint:#9ca3af;--picker-control-border:#d1d5db;--picker-accent:var(--verdocs-link-color, #4c56cb);--picker-accent-tint:#f4f5fc;--picker-accent-tint-2:#e6e7f8;display:block;font-size:14px;color:var(--picker-ink);font-family:var(--verdocs-primary-font, "Inter", "Barlow", sans-serif)}verdocs-contact-picker *{-webkit-box-sizing:border-box;box-sizing:border-box}verdocs-contact-picker form{-ms-flex:1;flex:1;min-height:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}verdocs-contact-picker .form-body-wrap{position:relative;-ms-flex:1;flex:1;min-height:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}verdocs-contact-picker .form-body{position:relative;-ms-flex:1;flex:1;min-height:0;overflow-y:auto}verdocs-contact-picker .scroll-fade{position:absolute;left:0;right:0;bottom:0;height:36px;opacity:0;pointer-events:none;-webkit-transition:opacity 150ms ease-out;transition:opacity 150ms ease-out;background:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0)), to(#ffffff));background:linear-gradient(rgba(255, 255, 255, 0), #ffffff)}verdocs-contact-picker .scrollable:not(.at-end)>.scroll-fade{opacity:1}verdocs-contact-picker .row.names{display:-ms-flexbox;display:flex;-webkit-column-gap:8px;-moz-column-gap:8px;column-gap:8px;position:relative}verdocs-contact-picker .row.names .field{-ms-flex:1;flex:1;min-width:0}verdocs-contact-picker .field{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;row-gap:4px;margin:0 0 10px 0}verdocs-contact-picker .field label{font-size:12px;font-weight:500;color:var(--picker-ink-2)}verdocs-contact-picker .field label .optional{color:var(--picker-muted);font-weight:400}verdocs-contact-picker input,verdocs-contact-picker textarea{width:100%;font-size:13px;font-family:inherit;color:var(--picker-ink);background:#ffffff;border:1px solid var(--picker-control-border);border-radius:6px;outline:none}verdocs-contact-picker input:focus,verdocs-contact-picker textarea:focus{border-color:var(--picker-accent);-webkit-box-shadow:0 0 0 2px var(--picker-accent-tint-2);box-shadow:0 0 0 2px var(--picker-accent-tint-2)}verdocs-contact-picker input::-webkit-input-placeholder,verdocs-contact-picker textarea::-webkit-input-placeholder{color:var(--picker-faint);opacity:1}verdocs-contact-picker input::-moz-placeholder,verdocs-contact-picker textarea::-moz-placeholder{color:var(--picker-faint);opacity:1}verdocs-contact-picker input:-ms-input-placeholder,verdocs-contact-picker textarea:-ms-input-placeholder{color:var(--picker-faint);opacity:1}verdocs-contact-picker input::-ms-input-placeholder,verdocs-contact-picker textarea::-ms-input-placeholder{color:var(--picker-faint);opacity:1}verdocs-contact-picker input::placeholder,verdocs-contact-picker textarea::placeholder{color:var(--picker-faint);opacity:1}verdocs-contact-picker input{height:34px;padding:0 10px}verdocs-contact-picker textarea{height:56px;padding:8px 10px;resize:vertical}verdocs-contact-picker .group{margin:2px 0 12px 0}verdocs-contact-picker .group .group-label{font-size:12px;font-weight:500;color:var(--picker-ink-2);margin:0 0 6px 0}verdocs-contact-picker .pills{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:6px}verdocs-contact-picker .pill{all:unset;height:26px;padding:0 9px;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-webkit-column-gap:4px;-moz-column-gap:4px;column-gap:4px;cursor:pointer;font-size:12px;font-weight:500;font-family:inherit;white-space:nowrap;border-radius:999px;color:var(--picker-ink-2);border:1px solid var(--picker-control-border)}verdocs-contact-picker .pill:focus-visible{outline:2px solid var(--picker-accent);outline-offset:2px}verdocs-contact-picker .pill.selected{color:var(--picker-accent);border-color:var(--picker-accent);background:var(--picker-accent-tint)}verdocs-contact-picker .pill.locked{opacity:0.5;cursor:not-allowed}verdocs-contact-picker .pill .pill-icon,verdocs-contact-picker .pill .pill-icon svg{width:12px;height:12px;display:block}verdocs-contact-picker .passcode{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-column-gap:8px;-moz-column-gap:8px;column-gap:8px;margin-top:8px}verdocs-contact-picker .passcode input{-ms-flex:0 0 120px;flex:0 0 120px;width:120px;height:30px}verdocs-contact-picker .passcode .passcode-hint{-ms-flex:1;flex:1;min-width:0;font-size:11px;line-height:1.35;color:var(--picker-muted);-ms-flex-item-align:center;align-self:center}verdocs-contact-picker .buttons{margin-top:10px;padding-top:12px;border-top:1px solid #e5e7eb;-ms-flex:none;flex:none;display:-ms-flexbox;display:flex;-webkit-column-gap:10px;-moz-column-gap:10px;column-gap:10px}verdocs-contact-picker .buttons verdocs-button:last-child{-ms-flex:1;flex:1}verdocs-contact-picker .buttons verdocs-button:last-child button{width:100%}verdocs-contact-picker .suggestions{position:absolute;top:0;left:0;right:0;z-index:20;max-height:225px;overflow-y:auto;background:#ffffff;border-radius:6px;border:1px solid #e5e7eb;-webkit-box-shadow:0 8px 24px rgba(17, 24, 39, 0.14);box-shadow:0 8px 24px rgba(17, 24, 39, 0.14)}verdocs-contact-picker .suggestions .suggestion{display:-ms-flexbox;display:flex;padding:6px 12px;-ms-flex-align:center;align-items:center;-ms-flex-direction:row;flex-direction:row;cursor:pointer}verdocs-contact-picker .suggestions .suggestion svg{width:28px;height:28px}verdocs-contact-picker .suggestions .suggestion .avatar{width:28px;height:28px;-ms-flex:0 0 28px;flex:0 0 28px;margin-right:8px;border-radius:100%}verdocs-contact-picker .suggestions .suggestion .details{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0}verdocs-contact-picker .suggestions .suggestion .name{font-size:13px;font-weight:500;color:var(--picker-ink)}verdocs-contact-picker .suggestions .suggestion .destination{font-size:12px;color:var(--picker-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}verdocs-contact-picker .suggestions .suggestion:hover{background:var(--picker-accent-tint)}verdocs-contact-picker [data-lastpass-icon-root]{display:none !important}'};var 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>';var lockIcon='<svg focusable="false" aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/></svg>';var VerdocsContactPicker=function(){function e(e){registerInstance(this,e);this.searchContacts=createEvent(this,"searchContacts");this.exit=createEvent(this,"exit");this.next=createEvent(this,"next");this.endpoint=VerdocsEndpoint.getDefault();this.templateRole=null;this.contactSuggestions=[];this.showCancel=true;this.showSuggestions=false;this.showMessage=false;this.delegator=false;this.name_locked=false;this.auth_methods=[];this.passcode="";this.firstNameFieldId="verdocs-contact-picker-firstname-".concat(Math.random().toString(36).substring(2,11));this.lastNameFieldId="verdocs-contact-picker-lastname-".concat(Math.random().toString(36).substring(2,11));this.emailFieldId="verdocs-contact-picker-email-".concat(Math.random().toString(36).substring(2,11));this.phoneFieldId="verdocs-contact-picker-phone-".concat(Math.random().toString(36).substring(2,11));this.activeEntitlements={};this.authMethodsLoading=true}e.prototype.componentWillLoad=function(){return __awaiter(this,void 0,void 0,(function(){var e,t,i,o,r;return __generator(this,(function(c){switch(c.label){case 0:this.endpoint.loadSession();if(this.templateRole){e=formatFullName(this.templateRole);t=e.split(" ");i=this.templateRole.first_name||t.shift()||"";o=this.templateRole.last_name||t.join(" ")||"";this.first_name=i;this.last_name=o;this.email=this.templateRole.email||"";this.phone=this.templateRole.phone||"";this.delegator=this.templateRole.delegator||false;this.name_locked=this.delegator?false:this.templateRole.name_locked||false;this.message=this.templateRole.message||"";this.showMessage=this.message!=="";this.auth_methods=this.templateRole.auth_methods||[];this.passcode=this.templateRole.passcode||""}r=this;return[4,getActiveEntitlements(this.endpoint).catch((function(e){console.warn("[CONTACT PICKER] Unable to load entitlements, continuing with base auth methods only",e);return{}}))];case 1:r.activeEntitlements=c.sent();this.authMethodsLoading=false;console.log("[CONTACT PICKER] Loaded entitlements",this.activeEntitlements);return[2]}}))}))};e.prototype.componentDidRender=function(){var e=this.el.querySelector(".form-body");updateScrollFade(e);if(this.suggestionsEl&&this.namesRowEl&&e){this.suggestionsEl.style.top="".concat(this.namesRowEl.offsetTop+this.namesRowEl.offsetHeight-e.scrollTop+4,"px")}};e.prototype.handleDocumentClick=function(e){if(this.showSuggestions&&!this.el.contains(e.target)){this.showSuggestions=false}};e.prototype.handleFirstNameChange=function(e){var t;this.first_name=e.target.value;(t=this.searchContacts)===null||t===void 0?void 0:t.emit({query:this.first_name})};e.prototype.handleLastNameChange=function(e){var t;this.last_name=e.target.value;(t=this.searchContacts)===null||t===void 0?void 0:t.emit({query:this.last_name})};e.prototype.handleCancel=function(e){var t;e.stopPropagation();this.showSuggestions=false;(t=this.exit)===null||t===void 0?void 0:t.emit()};e.prototype.handleSubmit=function(e){var t;e.stopPropagation();this.showSuggestions=false;(t=this.next)===null||t===void 0?void 0:t.emit({first_name:this.first_name,last_name:this.last_name,email:this.email,phone:this.phone,message:this.message,delegator:this.delegator,name_locked:this.name_locked,auth_methods:this.auth_methods,passcode:this.passcode,address:this.address,zip:this.zip})};e.prototype.handleSelectSuggestion=function(e,t){e.stopPropagation();this.first_name=t.first_name;this.last_name=t.last_name;this.email=t.email;this.phone=t.phone;this.showSuggestions=false};e.prototype.toggleAuthMethod=function(e){if(this.auth_methods.includes(e)){this.auth_methods=this.auth_methods.filter((function(t){return t!==e}))}else{this.auth_methods=__spreadArray(__spreadArray([],this.auth_methods,true),[e],false)}};e.prototype.setSigningOption=function(e){this.delegator=e==="delegator";this.name_locked=e==="name_locked"};e.prototype.renderPill=function(e,t,i,o){if(o===void 0){o={}}return h("button",{type:"button",class:{pill:true,selected:t,locked:!!o.locked},"aria-pressed":t?"true":"false",disabled:o.locked&&!t,title:o.title,onClick:i},o.locked&&h("span",{class:"pill-icon",innerHTML:lockIcon}),e)};e.prototype.render=function(){var e=this;var t=this.first_name&&this.last_name&&isValidEmail(this.email);var i=(this.contactSuggestions||[]).filter((function(t){var i;return!e.first_name||((i=t.first_name)===null||i===void 0?void 0:i.toLowerCase().includes(e.first_name.toLowerCase()))}));var o=this.auth_methods.every((function(t){switch(t){case"passcode":return!!e.passcode;case"kba":return!!e.first_name&&!!e.last_name;case"email":return!!e.email;case"sms":return!!e.phone;default:return true}}));var r=t&&o;var c=!!this.activeEntitlements.sms_auth;var n=[{label:"Email OTP",value:"email"},{label:"Passcode",value:"passcode"},{label:"SMS OTP",value:"sms",locked:!c},{label:"KBA",value:"kba",locked:!this.activeEntitlements.kba_auth},{label:"ID check",value:"id",locked:!this.activeEntitlements.id_auth}];var s=this.delegator?"delegator":this.name_locked?"name_locked":"none";return h("form",{onSubmit:function(e){return e.preventDefault()},autocomplete:"off"},h("div",{class:"form-body-wrap"},h("div",{class:"form-body",onScroll:function(t){updateScrollFade(t.target);e.showSuggestions=false}},h("div",{class:"row names",ref:function(t){return e.namesRowEl=t}},h("div",{class:"field"},h("label",{htmlFor:this.firstNameFieldId},"First name"),h("input",{id:this.firstNameFieldId,name:this.firstNameFieldId,type:"text","data-lpignore":"true",autocomplete:"blocked","aria-autocomplete":"none",value:this.first_name,onFocus:function(){setTimeout((function(){var t;e.showSuggestions=((t=e.contactSuggestions)===null||t===void 0?void 0:t.length)>0}),100)},onInput:function(t){return e.handleFirstNameChange(t)}})),h("div",{class:"field"},h("label",{htmlFor:this.lastNameFieldId},"Last name"),h("input",{id:this.lastNameFieldId,name:this.lastNameFieldId,type:"text","data-lpignore":"true",autocomplete:"blocked","aria-autocomplete":"none",value:this.last_name,onFocus:function(){setTimeout((function(){var t;e.showSuggestions=((t=e.contactSuggestions)===null||t===void 0?void 0:t.length)>0}),100)},onInput:function(t){return e.handleLastNameChange(t)}}))),h("div",{class:"field"},h("label",{htmlFor:this.emailFieldId},"Email"),h("input",{id:this.emailFieldId,name:this.emailFieldId,type:"text","data-lpignore":"true",autoComplete:"blocked","aria-autocomplete":"none",value:this.email,onFocus:function(){return e.showSuggestions=false},onInput:function(t){return e.email=t.target.value}})),c&&h("div",{class:"field"},h("label",{htmlFor:this.phoneFieldId},"Phone ",h("span",{class:"optional"},"(optional)")),h("input",{id:this.phoneFieldId,name:this.phoneFieldId,type:"text","data-lpignore":"true",autoComplete:"blocked","aria-autocomplete":"none",value:this.phone,placeholder:"+1 (555) 000-0000",onFocus:function(){return e.showSuggestions=false},onInput:function(t){e.phone=convertToE164(t.target.value)}})),h("div",{class:"group"},h("div",{class:"group-label"},"Verification"),this.authMethodsLoading?h("verdocs-spinner",{size:10,mode:"dark"}):h("div",{class:"pills"},n.map((function(t){return e.renderPill(t.label,e.auth_methods.includes(t.value),(function(){return e.toggleAuthMethod(t.value)}),{locked:t.locked,title:t.locked?"Please contact sales@verdocs.com to enable this feature.":undefined})}))),this.auth_methods.includes("passcode")&&h("div",{class:"passcode"},h("input",{id:"verdocs-passcode",name:"verdocs-passcode",type:"text","data-lpignore":"true",autocomplete:"blocked","aria-autocomplete":"none","aria-label":"Passcode",value:this.passcode,placeholder:"4-8 digits",onFocus:function(){return e.showSuggestions=false},onInput:function(t){return e.passcode=t.target.value}}),h("span",{class:"passcode-hint"},"PIN or passcode shared separately with the recipient ahead of time"))),h("div",{class:"group"},h("div",{class:"group-label"},"Signing options"),h("div",{class:"pills"},this.renderPill("None",s==="none",(function(){return e.setSigningOption("none")})),this.renderPill("May delegate",s==="delegator",(function(){return e.setSigningOption("delegator")})),this.renderPill("Name locked",s==="name_locked",(function(){return e.setSigningOption("name_locked")})))),h("div",{class:"field"},h("label",{htmlFor:"verdocs-contact-picker-message"},"Message ",h("span",{class:"optional"},"(optional)")),h("textarea",{id:"verdocs-contact-picker-message",name:"verdocs-contact-picker-message","data-lpignore":"true",autocomplete:"blocked",placeholder:"Add a message to the invitation",onFocus:function(){return e.showSuggestions=false},onInput:function(t){return e.message=t.target.value}},this.message))),h("div",{class:"scroll-fade"}),this.showSuggestions&&i.length>0&&h("div",{class:"suggestions",role:"listbox",ref:function(t){return e.suggestionsEl=t}},i.map((function(t){var i;return h("div",{key:(i=t.id)!==null&&i!==void 0?i:t.email,class:"suggestion",onClick:function(i){return e.handleSelectSuggestion(i,t)}},t.picture?h("img",{alt:"Avatar",class:"avatar",src:t.picture}):h("div",{class:"avatar",innerHTML:addrBookIcon}),h("div",{class:"details"},h("div",{class:"name"},formatFullName(t)),t.email&&h("div",{class:"destination"},t.email),t.phone&&h("div",{class:"destination"},t.phone)))})))),h("div",{class:"buttons"},this.showCancel&&h("verdocs-button",{label:"Cancel",variant:"text",size:"small",onClick:function(t){return e.handleCancel(t)}}),h("verdocs-button",{label:"Done",size:"small",disabled:!r,onClick:!r?function(){}:function(t){return e.handleSubmit(t)}})))};Object.defineProperty(e.prototype,"el",{get:function(){return getElement(this)},enumerable:false,configurable:true});return e}();VerdocsContactPicker.style=verdocsContactPickerCss();export{VerdocsContactPicker as verdocs_contact_picker};
|
|
2
2
|
//# sourceMappingURL=verdocs-contact-picker.entry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verdocs-contact-picker.entry.js","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 --picker-ink: var(--verdocs-body-color, #111827);\n --picker-ink-2: #374151;\n --picker-muted: #6b7280;\n --picker-faint: #9ca3af;\n --picker-control-border: #d1d5db;\n --picker-accent: var(--verdocs-link-color, #{$secondary-color});\n --picker-accent-tint: #f4f5fc;\n --picker-accent-tint-2: #e6e7f8;\n\n display: block;\n font-size: 14px;\n color: var(--picker-ink);\n font-family: $verdocs-primary-font;\n\n * {\n box-sizing: border-box;\n }\n\n form {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n }\n\n // Fields scroll above a pinned Done button when the host constrains the picker's height; with\n // no constraint the body simply grows and the fade never shows.\n .form-body-wrap {\n position: relative;\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n }\n\n .form-body {\n position: relative;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n }\n\n .scroll-fade {\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n height: 36px;\n opacity: 0;\n pointer-events: none;\n transition: opacity 150ms ease-out;\n background: linear-gradient(rgba(255, 255, 255, 0), #ffffff);\n }\n\n .scrollable:not(.at-end) > .scroll-fade {\n opacity: 1;\n }\n\n .row.names {\n display: flex;\n column-gap: 8px;\n position: relative;\n\n .field {\n flex: 1;\n min-width: 0;\n }\n }\n\n .field {\n display: flex;\n flex-direction: column;\n row-gap: 4px;\n margin: 0 0 10px 0;\n\n label {\n font-size: 12px;\n font-weight: 500;\n color: var(--picker-ink-2);\n\n .optional {\n color: var(--picker-muted);\n font-weight: 400;\n }\n }\n }\n\n input,\n textarea {\n width: 100%;\n font-size: 13px;\n font-family: inherit;\n color: var(--picker-ink);\n background: #ffffff;\n border: 1px solid var(--picker-control-border);\n border-radius: 6px;\n outline: none;\n\n &:focus {\n border-color: var(--picker-accent);\n box-shadow: 0 0 0 2px var(--picker-accent-tint-2);\n }\n\n &::placeholder {\n color: var(--picker-faint);\n opacity: 1;\n }\n }\n\n input {\n height: 34px;\n padding: 0 10px;\n }\n\n textarea {\n height: 56px;\n padding: 8px 10px;\n resize: vertical;\n }\n\n .group {\n margin: 2px 0 12px 0;\n\n .group-label {\n font-size: 12px;\n font-weight: 500;\n color: var(--picker-ink-2);\n margin: 0 0 6px 0;\n }\n }\n\n .pills {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n }\n\n .pill {\n all: unset;\n height: 26px;\n padding: 0 9px;\n display: inline-flex;\n align-items: center;\n column-gap: 4px;\n cursor: pointer;\n font-size: 12px;\n font-weight: 500;\n font-family: inherit;\n white-space: nowrap;\n border-radius: 999px;\n color: var(--picker-ink-2);\n border: 1px solid var(--picker-control-border);\n\n &:focus-visible {\n outline: 2px solid var(--picker-accent);\n outline-offset: 2px;\n }\n\n &.selected {\n color: var(--picker-accent);\n border-color: var(--picker-accent);\n background: var(--picker-accent-tint);\n }\n\n &.locked {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .pill-icon,\n .pill-icon svg {\n width: 12px;\n height: 12px;\n display: block;\n }\n }\n\n .passcode {\n display: flex;\n align-items: center;\n column-gap: 8px;\n margin-top: 8px;\n\n input {\n flex: 0 0 120px;\n width: 120px;\n height: 30px;\n }\n\n .passcode-hint {\n flex: 1;\n min-width: 0;\n font-size: 11px;\n line-height: 1.35;\n color: var(--picker-muted);\n align-self: center;\n }\n }\n\n .buttons {\n margin-top: 10px;\n padding-top: 12px;\n border-top: 1px solid #e5e7eb;\n flex: none;\n display: flex;\n column-gap: 10px;\n\n verdocs-button:last-child {\n flex: 1;\n }\n\n verdocs-button:last-child button {\n width: 100%;\n }\n }\n\n .suggestions {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n z-index: 20;\n max-height: 225px;\n overflow-y: auto;\n background: #ffffff;\n border-radius: 6px;\n border: 1px solid #e5e7eb;\n box-shadow: 0 8px 24px rgba(17, 24, 39, 0.14);\n\n .suggestion {\n display: flex;\n padding: 6px 12px;\n align-items: center;\n flex-direction: row;\n cursor: pointer;\n\n svg {\n width: 28px;\n height: 28px;\n }\n\n .avatar {\n width: 28px;\n height: 28px;\n flex: 0 0 28px;\n margin-right: 8px;\n border-radius: 100%;\n }\n\n .details {\n display: flex;\n flex-direction: column;\n min-width: 0;\n }\n\n .name {\n font-size: 13px;\n font-weight: 500;\n color: var(--picker-ink);\n }\n\n .destination {\n font-size: 12px;\n color: var(--picker-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n &:hover {\n background: var(--picker-accent-tint);\n }\n }\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","import {Component, Element, h, Event, EventEmitter, Listen, Prop, State} from '@stencil/core';\nimport {formatFullName, getActiveEntitlements, IEntitlement, IProfile, IRecipient, isValidEmail, TEntitlement, TRecipientAuthMethod, VerdocsEndpoint} from '@verdocs/js-sdk';\nimport {updateScrollFade} from '../../../utils/ScrollFade';\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\nconst lockIcon = `<svg focusable=\"false\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\"/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"/></svg>`;\n\ntype TSigningOption = 'none' | 'delegator' | 'name_locked';\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 @Element() el: HTMLElement;\n\n private namesRowEl: HTMLElement;\n private suggestionsEl: HTMLElement;\n\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 * Whether to show a Cancel button beside Done.\n */\n @Prop() showCancel = true;\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 optional methods like KBA. We need error handling here in case the getActiveEntitlements\n // call fails or we stay loading forever.\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\n this.authMethodsLoading = false;\n console.log('[CONTACT PICKER] Loaded entitlements', this.activeEntitlements);\n }\n\n // Make sure the suggestion list doesn't break the scroll region\n componentDidRender() {\n const body = this.el.querySelector('.form-body') as HTMLElement | null;\n updateScrollFade(body);\n if (this.suggestionsEl && this.namesRowEl && body) {\n this.suggestionsEl.style.top = `${this.namesRowEl.offsetTop + this.namesRowEl.offsetHeight - body.scrollTop + 4}px`;\n }\n }\n\n @Listen('click', {target: 'document'})\n handleDocumentClick(e: MouseEvent) {\n if (this.showSuggestions && !this.el.contains(e.target as Node)) {\n this.showSuggestions = false;\n }\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 toggleAuthMethod(method: TRecipientAuthMethod) {\n if (this.auth_methods.includes(method)) {\n this.auth_methods = this.auth_methods.filter(selected => selected !== method);\n } else {\n this.auth_methods = [...this.auth_methods, method];\n }\n }\n\n // TODO: Decide whether we want to keep these mutually-exclusive\n setSigningOption(option: TSigningOption) {\n this.delegator = option === 'delegator';\n this.name_locked = option === 'name_locked';\n }\n\n renderPill(label: string, selected: boolean, onClick: () => void, opts: {locked?: boolean; title?: string} = {}) {\n return (\n <button\n type=\"button\"\n class={{pill: true, selected, locked: !!opts.locked}}\n aria-pressed={selected ? 'true' : 'false'}\n disabled={opts.locked && !selected}\n title={opts.title}\n onClick={onClick}\n >\n {opts.locked && <span class=\"pill-icon\" innerHTML={lockIcon} />}\n {label}\n </button>\n );\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);\n\n const hasAuthRequirements = this.auth_methods.every(method => {\n switch (method) {\n case 'passcode':\n return !!this.passcode;\n case 'kba':\n return !!this.first_name && !!this.last_name;\n case 'email':\n return !!this.email;\n case 'sms':\n return !!this.phone;\n default:\n return true;\n }\n });\n\n const canSubmit = hasBasics && hasAuthRequirements;\n const hasSMSAuth = !!this.activeEntitlements.sms_auth;\n\n // TODO: We show non-entitled options disabled so folks know what's possible. We could alternatively hide them.\n const verificationOptions: {label: string; value: TRecipientAuthMethod; locked?: boolean}[] = [\n {label: 'Email OTP', value: 'email'},\n {label: 'Passcode', value: 'passcode'},\n {label: 'SMS OTP', value: 'sms', locked: !hasSMSAuth},\n {label: 'KBA', value: 'kba', locked: !this.activeEntitlements.kba_auth},\n {label: 'ID check', value: 'id', locked: !this.activeEntitlements.id_auth},\n ];\n\n const signingOption: TSigningOption = this.delegator ? 'delegator' : this.name_locked ? 'name_locked' : 'none';\n\n return (\n <form onSubmit={e => e.preventDefault()} autocomplete=\"off\">\n <div class=\"form-body-wrap\">\n <div\n class=\"form-body\"\n onScroll={(e: any) => {\n updateScrollFade(e.target);\n this.showSuggestions = false;\n }}\n >\n <div class=\"row names\" ref={el => (this.namesRowEl = el)}>\n <div class=\"field\">\n <label htmlFor={this.firstNameFieldId}>First name</label>\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 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 </div>\n <div class=\"field\">\n <label htmlFor={this.lastNameFieldId}>Last name</label>\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 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 </div>\n\n <div class=\"field\">\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 onFocus={() => (this.showSuggestions = false)}\n onInput={(e: any) => (this.email = e.target.value)}\n />\n </div>\n\n {hasSMSAuth && (\n <div class=\"field\">\n <label htmlFor={this.phoneFieldId}>\n Phone <span class=\"optional\">(optional)</span>\n </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=\"+1 (555) 000-0000\"\n onFocus={() => (this.showSuggestions = false)}\n onInput={(e: any) => {\n this.phone = convertToE164(e.target.value);\n }}\n />\n </div>\n )}\n\n <div class=\"group\">\n <div class=\"group-label\">Verification</div>\n {this.authMethodsLoading ? (\n <verdocs-spinner size={10} mode=\"dark\" />\n ) : (\n <div class=\"pills\">\n {verificationOptions.map(option =>\n this.renderPill(option.label, this.auth_methods.includes(option.value), () => this.toggleAuthMethod(option.value), {\n locked: option.locked,\n title: option.locked ? 'Please contact sales@verdocs.com to enable this feature.' : undefined,\n }),\n )}\n </div>\n )}\n\n {this.auth_methods.includes('passcode') && (\n <div class=\"passcode\">\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 aria-label=\"Passcode\"\n value={this.passcode}\n placeholder=\"4-8 digits\"\n onFocus={() => (this.showSuggestions = false)}\n onInput={(e: any) => (this.passcode = e.target.value)}\n />\n <span class=\"passcode-hint\">PIN or passcode shared separately with the recipient ahead of time</span>\n </div>\n )}\n </div>\n\n <div class=\"group\">\n <div class=\"group-label\">Signing options</div>\n <div class=\"pills\">\n {this.renderPill('None', signingOption === 'none', () => this.setSigningOption('none'))}\n {this.renderPill('May delegate', signingOption === 'delegator', () => this.setSigningOption('delegator'))}\n {this.renderPill('Name locked', signingOption === 'name_locked', () => this.setSigningOption('name_locked'))}\n </div>\n </div>\n\n <div class=\"field\">\n <label htmlFor=\"verdocs-contact-picker-message\">\n Message <span class=\"optional\">(optional)</span>\n </label>\n <textarea\n id=\"verdocs-contact-picker-message\"\n name=\"verdocs-contact-picker-message\"\n data-lpignore=\"true\"\n autocomplete=\"blocked\"\n placeholder=\"Add a message to the invitation\"\n onFocus={() => (this.showSuggestions = false)}\n onInput={(e: any) => (this.message = e.target.value)}\n >\n {this.message}\n </textarea>\n </div>\n </div>\n <div class=\"scroll-fade\" />\n {this.showSuggestions && (\n <div class=\"suggestions\" role=\"listbox\" ref={el => (this.suggestionsEl = el)}>\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 )}\n </div>\n\n <div class=\"buttons\">\n {this.showCancel && <verdocs-button label=\"Cancel\" variant=\"text\" size=\"small\" onClick={e => this.handleCancel(e)} />}\n <verdocs-button label=\"Done\" size=\"small\" disabled={!canSubmit} onClick={!canSubmit ? () => {} : e => this.handleSubmit(e)} />\n </div>\n </form>\n );\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"verdocs-contact-picker.entry.js","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 --picker-ink: var(--verdocs-body-color, #111827);\n --picker-ink-2: #374151;\n --picker-muted: #6b7280;\n --picker-faint: #9ca3af;\n --picker-control-border: #d1d5db;\n --picker-accent: var(--verdocs-link-color, #{$secondary-color});\n --picker-accent-tint: #f4f5fc;\n --picker-accent-tint-2: #e6e7f8;\n\n display: block;\n font-size: 14px;\n color: var(--picker-ink);\n font-family: $verdocs-primary-font;\n\n * {\n box-sizing: border-box;\n }\n\n form {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n }\n\n // Fields scroll above a pinned Done button when the host constrains the picker's height; with\n // no constraint the body simply grows and the fade never shows.\n .form-body-wrap {\n position: relative;\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n }\n\n .form-body {\n position: relative;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n }\n\n .scroll-fade {\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n height: 36px;\n opacity: 0;\n pointer-events: none;\n transition: opacity 150ms ease-out;\n background: linear-gradient(rgba(255, 255, 255, 0), #ffffff);\n }\n\n .scrollable:not(.at-end) > .scroll-fade {\n opacity: 1;\n }\n\n .row.names {\n display: flex;\n column-gap: 8px;\n position: relative;\n\n .field {\n flex: 1;\n min-width: 0;\n }\n }\n\n .field {\n display: flex;\n flex-direction: column;\n row-gap: 4px;\n margin: 0 0 10px 0;\n\n label {\n font-size: 12px;\n font-weight: 500;\n color: var(--picker-ink-2);\n\n .optional {\n color: var(--picker-muted);\n font-weight: 400;\n }\n }\n }\n\n input,\n textarea {\n width: 100%;\n font-size: 13px;\n font-family: inherit;\n color: var(--picker-ink);\n background: #ffffff;\n border: 1px solid var(--picker-control-border);\n border-radius: 6px;\n outline: none;\n\n &:focus {\n border-color: var(--picker-accent);\n box-shadow: 0 0 0 2px var(--picker-accent-tint-2);\n }\n\n &::placeholder {\n color: var(--picker-faint);\n opacity: 1;\n }\n }\n\n input {\n height: 34px;\n padding: 0 10px;\n }\n\n textarea {\n height: 56px;\n padding: 8px 10px;\n resize: vertical;\n }\n\n .group {\n margin: 2px 0 12px 0;\n\n .group-label {\n font-size: 12px;\n font-weight: 500;\n color: var(--picker-ink-2);\n margin: 0 0 6px 0;\n }\n }\n\n .pills {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n }\n\n .pill {\n all: unset;\n height: 26px;\n padding: 0 9px;\n display: inline-flex;\n align-items: center;\n column-gap: 4px;\n cursor: pointer;\n font-size: 12px;\n font-weight: 500;\n font-family: inherit;\n white-space: nowrap;\n border-radius: 999px;\n color: var(--picker-ink-2);\n border: 1px solid var(--picker-control-border);\n\n &:focus-visible {\n outline: 2px solid var(--picker-accent);\n outline-offset: 2px;\n }\n\n &.selected {\n color: var(--picker-accent);\n border-color: var(--picker-accent);\n background: var(--picker-accent-tint);\n }\n\n &.locked {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .pill-icon,\n .pill-icon svg {\n width: 12px;\n height: 12px;\n display: block;\n }\n }\n\n .passcode {\n display: flex;\n align-items: center;\n column-gap: 8px;\n margin-top: 8px;\n\n input {\n flex: 0 0 120px;\n width: 120px;\n height: 30px;\n }\n\n .passcode-hint {\n flex: 1;\n min-width: 0;\n font-size: 11px;\n line-height: 1.35;\n color: var(--picker-muted);\n align-self: center;\n }\n }\n\n .buttons {\n margin-top: 10px;\n padding-top: 12px;\n border-top: 1px solid #e5e7eb;\n flex: none;\n display: flex;\n column-gap: 10px;\n\n verdocs-button:last-child {\n flex: 1;\n }\n\n verdocs-button:last-child button {\n width: 100%;\n }\n }\n\n .suggestions {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n z-index: 20;\n max-height: 225px;\n overflow-y: auto;\n background: #ffffff;\n border-radius: 6px;\n border: 1px solid #e5e7eb;\n box-shadow: 0 8px 24px rgba(17, 24, 39, 0.14);\n\n .suggestion {\n display: flex;\n padding: 6px 12px;\n align-items: center;\n flex-direction: row;\n cursor: pointer;\n\n svg {\n width: 28px;\n height: 28px;\n }\n\n .avatar {\n width: 28px;\n height: 28px;\n flex: 0 0 28px;\n margin-right: 8px;\n border-radius: 100%;\n }\n\n .details {\n display: flex;\n flex-direction: column;\n min-width: 0;\n }\n\n .name {\n font-size: 13px;\n font-weight: 500;\n color: var(--picker-ink);\n }\n\n .destination {\n font-size: 12px;\n color: var(--picker-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n &:hover {\n background: var(--picker-accent-tint);\n }\n }\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","import {Component, Element, h, Event, EventEmitter, Listen, Prop, State} from '@stencil/core';\nimport {formatFullName, getActiveEntitlements, IEntitlement, IProfile, IRecipient, isValidEmail, TEntitlement, TRecipientAuthMethod, VerdocsEndpoint} from '@verdocs/js-sdk';\nimport {updateScrollFade} from '../../../utils/ScrollFade';\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\nconst lockIcon = `<svg focusable=\"false\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\"/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"/></svg>`;\n\ntype TSigningOption = 'none' | 'delegator' | 'name_locked';\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 @Element() el: HTMLElement;\n\n private namesRowEl: HTMLElement;\n private suggestionsEl: HTMLElement;\n\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 * Whether to show a Cancel button beside Done.\n */\n @Prop() showCancel = true;\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 optional methods like KBA. We need error handling here in case the getActiveEntitlements\n // call fails or we stay loading forever.\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\n this.authMethodsLoading = false;\n console.log('[CONTACT PICKER] Loaded entitlements', this.activeEntitlements);\n }\n\n // Make sure the suggestion list doesn't break the scroll region\n componentDidRender() {\n const body = this.el.querySelector('.form-body') as HTMLElement | null;\n updateScrollFade(body);\n if (this.suggestionsEl && this.namesRowEl && body) {\n this.suggestionsEl.style.top = `${this.namesRowEl.offsetTop + this.namesRowEl.offsetHeight - body.scrollTop + 4}px`;\n }\n }\n\n @Listen('click', {target: 'document'})\n handleDocumentClick(e: MouseEvent) {\n if (this.showSuggestions && !this.el.contains(e.target as Node)) {\n this.showSuggestions = false;\n }\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 toggleAuthMethod(method: TRecipientAuthMethod) {\n if (this.auth_methods.includes(method)) {\n this.auth_methods = this.auth_methods.filter(selected => selected !== method);\n } else {\n this.auth_methods = [...this.auth_methods, method];\n }\n }\n\n // TODO: Decide whether we want to keep these mutually-exclusive\n setSigningOption(option: TSigningOption) {\n this.delegator = option === 'delegator';\n this.name_locked = option === 'name_locked';\n }\n\n renderPill(label: string, selected: boolean, onClick: () => void, opts: {locked?: boolean; title?: string} = {}) {\n return (\n <button\n type=\"button\"\n class={{pill: true, selected, locked: !!opts.locked}}\n aria-pressed={selected ? 'true' : 'false'}\n disabled={opts.locked && !selected}\n title={opts.title}\n onClick={onClick}\n >\n {opts.locked && <span class=\"pill-icon\" innerHTML={lockIcon} />}\n {label}\n </button>\n );\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);\n\n // First name is the first focused field so it's our quicksearch matching target.\n const visibleSuggestions = (this.contactSuggestions || []).filter(\n suggestion => !this.first_name || suggestion.first_name?.toLowerCase().includes(this.first_name.toLowerCase()),\n );\n\n const hasAuthRequirements = this.auth_methods.every(method => {\n switch (method) {\n case 'passcode':\n return !!this.passcode;\n case 'kba':\n return !!this.first_name && !!this.last_name;\n case 'email':\n return !!this.email;\n case 'sms':\n return !!this.phone;\n default:\n return true;\n }\n });\n\n const canSubmit = hasBasics && hasAuthRequirements;\n const hasSMSAuth = !!this.activeEntitlements.sms_auth;\n\n // TODO: We show non-entitled options disabled so folks know what's possible. We could alternatively hide them.\n const verificationOptions: {label: string; value: TRecipientAuthMethod; locked?: boolean}[] = [\n {label: 'Email OTP', value: 'email'},\n {label: 'Passcode', value: 'passcode'},\n {label: 'SMS OTP', value: 'sms', locked: !hasSMSAuth},\n {label: 'KBA', value: 'kba', locked: !this.activeEntitlements.kba_auth},\n {label: 'ID check', value: 'id', locked: !this.activeEntitlements.id_auth},\n ];\n\n const signingOption: TSigningOption = this.delegator ? 'delegator' : this.name_locked ? 'name_locked' : 'none';\n\n return (\n <form onSubmit={e => e.preventDefault()} autocomplete=\"off\">\n <div class=\"form-body-wrap\">\n <div\n class=\"form-body\"\n onScroll={(e: any) => {\n updateScrollFade(e.target);\n this.showSuggestions = false;\n }}\n >\n <div class=\"row names\" ref={el => (this.namesRowEl = el)}>\n <div class=\"field\">\n <label htmlFor={this.firstNameFieldId}>First name</label>\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 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 </div>\n <div class=\"field\">\n <label htmlFor={this.lastNameFieldId}>Last name</label>\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 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 </div>\n\n <div class=\"field\">\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 onFocus={() => (this.showSuggestions = false)}\n onInput={(e: any) => (this.email = e.target.value)}\n />\n </div>\n\n {hasSMSAuth && (\n <div class=\"field\">\n <label htmlFor={this.phoneFieldId}>\n Phone <span class=\"optional\">(optional)</span>\n </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=\"+1 (555) 000-0000\"\n onFocus={() => (this.showSuggestions = false)}\n onInput={(e: any) => {\n this.phone = convertToE164(e.target.value);\n }}\n />\n </div>\n )}\n\n <div class=\"group\">\n <div class=\"group-label\">Verification</div>\n {this.authMethodsLoading ? (\n <verdocs-spinner size={10} mode=\"dark\" />\n ) : (\n <div class=\"pills\">\n {verificationOptions.map(option =>\n this.renderPill(option.label, this.auth_methods.includes(option.value), () => this.toggleAuthMethod(option.value), {\n locked: option.locked,\n title: option.locked ? 'Please contact sales@verdocs.com to enable this feature.' : undefined,\n }),\n )}\n </div>\n )}\n\n {this.auth_methods.includes('passcode') && (\n <div class=\"passcode\">\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 aria-label=\"Passcode\"\n value={this.passcode}\n placeholder=\"4-8 digits\"\n onFocus={() => (this.showSuggestions = false)}\n onInput={(e: any) => (this.passcode = e.target.value)}\n />\n <span class=\"passcode-hint\">PIN or passcode shared separately with the recipient ahead of time</span>\n </div>\n )}\n </div>\n\n <div class=\"group\">\n <div class=\"group-label\">Signing options</div>\n <div class=\"pills\">\n {this.renderPill('None', signingOption === 'none', () => this.setSigningOption('none'))}\n {this.renderPill('May delegate', signingOption === 'delegator', () => this.setSigningOption('delegator'))}\n {this.renderPill('Name locked', signingOption === 'name_locked', () => this.setSigningOption('name_locked'))}\n </div>\n </div>\n\n <div class=\"field\">\n <label htmlFor=\"verdocs-contact-picker-message\">\n Message <span class=\"optional\">(optional)</span>\n </label>\n <textarea\n id=\"verdocs-contact-picker-message\"\n name=\"verdocs-contact-picker-message\"\n data-lpignore=\"true\"\n autocomplete=\"blocked\"\n placeholder=\"Add a message to the invitation\"\n onFocus={() => (this.showSuggestions = false)}\n onInput={(e: any) => (this.message = e.target.value)}\n >\n {this.message}\n </textarea>\n </div>\n </div>\n <div class=\"scroll-fade\" />\n {this.showSuggestions && visibleSuggestions.length > 0 && (\n <div class=\"suggestions\" role=\"listbox\" ref={el => (this.suggestionsEl = el)}>\n {visibleSuggestions.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 )}\n </div>\n\n <div class=\"buttons\">\n {this.showCancel && <verdocs-button label=\"Cancel\" variant=\"text\" size=\"small\" onClick={e => this.handleCancel(e)} />}\n <verdocs-button label=\"Done\" size=\"small\" disabled={!canSubmit} onClick={!canSubmit ? () => {} : e => this.handleSubmit(e)} />\n </div>\n </form>\n );\n }\n}\n"],"names":[],"mappings":"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"}
|