@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.
Files changed (45) hide show
  1. package/dist/cjs/verdocs-contact-picker.cjs.entry.js +3 -3
  2. package/dist/cjs/verdocs-contact-picker.cjs.entry.js.map +1 -1
  3. package/dist/cjs/verdocs-preview_6.cjs.entry.js +8 -12
  4. package/dist/cjs/verdocs-preview_6.cjs.entry.js.map +1 -1
  5. package/dist/collection/components/embeds/verdocs-send/verdocs-send.css +26 -0
  6. package/dist/collection/components/embeds/verdocs-send/verdocs-send.js +7 -11
  7. package/dist/collection/components/embeds/verdocs-send/verdocs-send.js.map +1 -1
  8. package/dist/collection/components/envelopes/verdocs-contact-picker/verdocs-contact-picker.js +3 -3
  9. package/dist/collection/components/envelopes/verdocs-contact-picker/verdocs-contact-picker.js.map +1 -1
  10. package/dist/components/p-K-sDaUxS.js +2 -0
  11. package/dist/components/p-K-sDaUxS.js.map +1 -0
  12. package/dist/components/{p-ByrpRZ3E.js → p-lCn8WPSe.js} +2 -2
  13. package/dist/components/p-lCn8WPSe.js.map +1 -0
  14. package/dist/components/verdocs-build.js +1 -1
  15. package/dist/components/verdocs-contact-picker.js +1 -1
  16. package/dist/components/verdocs-send.js +1 -1
  17. package/dist/esm/verdocs-contact-picker.entry.js +3 -3
  18. package/dist/esm/verdocs-contact-picker.entry.js.map +1 -1
  19. package/dist/esm/verdocs-preview_6.entry.js +8 -12
  20. package/dist/esm/verdocs-preview_6.entry.js.map +1 -1
  21. package/dist/esm-es5/verdocs-contact-picker.entry.js +1 -1
  22. package/dist/esm-es5/verdocs-contact-picker.entry.js.map +1 -1
  23. package/dist/esm-es5/verdocs-preview_6.entry.js +2 -2
  24. package/dist/esm-es5/verdocs-preview_6.entry.js.map +1 -1
  25. package/dist/types/components/embeds/verdocs-send/verdocs-send.d.ts +0 -1
  26. package/dist/verdocs-web-sdk/{p-38800961.system.entry.js → p-3a97f4b4.system.entry.js} +2 -2
  27. package/dist/verdocs-web-sdk/p-3a97f4b4.system.entry.js.map +1 -0
  28. package/dist/verdocs-web-sdk/{p-301f0247.entry.js → p-78a18a3b.entry.js} +2 -2
  29. package/dist/verdocs-web-sdk/p-78a18a3b.entry.js.map +1 -0
  30. package/dist/verdocs-web-sdk/p-895174e4.system.entry.js +8 -0
  31. package/dist/verdocs-web-sdk/p-895174e4.system.entry.js.map +1 -0
  32. package/dist/verdocs-web-sdk/p-8f7d0062.entry.js +8 -0
  33. package/dist/verdocs-web-sdk/p-8f7d0062.entry.js.map +1 -0
  34. package/dist/verdocs-web-sdk/p-BdZ5Ghsa.system.js +1 -1
  35. package/dist/verdocs-web-sdk/verdocs-web-sdk.esm.js +1 -1
  36. package/package.json +1 -1
  37. package/dist/components/p-Blr31TcJ.js +0 -2
  38. package/dist/components/p-Blr31TcJ.js.map +0 -1
  39. package/dist/components/p-ByrpRZ3E.js.map +0 -1
  40. package/dist/verdocs-web-sdk/p-1b818cdf.entry.js +0 -8
  41. package/dist/verdocs-web-sdk/p-1b818cdf.entry.js.map +0 -1
  42. package/dist/verdocs-web-sdk/p-24dcc54e.system.entry.js +0 -8
  43. package/dist/verdocs-web-sdk/p-24dcc54e.system.entry.js.map +0 -1
  44. package/dist/verdocs-web-sdk/p-301f0247.entry.js.map +0 -1
  45. package/dist/verdocs-web-sdk/p-38800961.system.entry.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"verdocs-contact-picker.js","sourceRoot":"","sources":["../../../../src/components/envelopes/verdocs-contact-picker/verdocs-contact-picker.tsx"],"names":[],"mappings":"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","sourcesContent":["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"]}
1
+ {"version":3,"file":"verdocs-contact-picker.js","sourceRoot":"","sources":["../../../../src/components/envelopes/verdocs-contact-picker/verdocs-contact-picker.tsx"],"names":[],"mappings":"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","sourcesContent":["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"]}
@@ -0,0 +1,2 @@
1
+ import{p as e,H as s,c as i,h as n,d as t,t as o}from"./p-yZBlG3YQ.js";import{getTemplate as r,getBrands as d,getOrganization as a,formatFullName as l,getOrganizationContacts as c,isValidEmail as p,createEnvelope as h,getRGBA as f}from"@verdocs/js-sdk";import{D as v,g as x}from"./p-Cq60Emo_.js";import{u as m,d as u}from"./p-lCn8WPSe.js";import{V as b}from"./p-D97GxsI-.js";import{S as g}from"./p-C1sRVZWv.js";import{S as w}from"./p-C7hFgM52.js";import{d as k}from"./p-Bb5V9TQx.js";import{d as y}from"./p-DGNIsXfr.js";import{d as S}from"./p-C-v22G3g.js";import{d as z}from"./p-C8yiLtCJ.js";import{d as E}from"./p-DqzFuSNN.js";import{d as C}from"./p-DreV6Npp.js";const D=e=>((e===null||e===void 0?void 0:e.roles)||[]).map((e=>e.name));const N=(e,s)=>Math.max(D(e).findIndex((e=>e===s)),0);const M=()=>`verdocs-send{--send-ink:var(--verdocs-body-color, #111827);--send-ink-2:#374151;--send-muted:#6b7280;--send-faint:#9ca3af;--send-rule:#e5e7eb;--send-control-border:#d1d5db;--send-accent:var(--verdocs-link-color, #4c56cb);--send-accent-tint:#f4f5fc;--send-accent-tint-2:#e6e7f8;--send-warning-bg:#fffbeb;--send-warning-border:#fde68a;--send-warning-icon:#d97706;--send-warning-text:#78350f;--send-radius:var(--verdocs-dialog-radius, 8px);--send-min-height:480px;--send-max-width:480px;display:none;position:relative;overflow:hidden;width:100%;min-width:0;max-width:var(--verdocs-send-max-width, var(--send-max-width));-webkit-box-sizing:border-box;box-sizing:border-box;background:#ffffff;color:var(--send-ink);font-size:14px;border-radius:var(--send-radius);border:1px solid var(--send-rule);font-family:var(--verdocs-primary-font, "Inter", "Barlow", sans-serif)}verdocs-send *{-webkit-box-sizing:border-box;box-sizing:border-box}verdocs-send.sendable{display:block}verdocs-send .track{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-height:var(--send-min-height);-webkit-transition:-webkit-transform 220ms ease-out;transition:-webkit-transform 220ms ease-out;transition:transform 220ms ease-out;transition:transform 220ms ease-out, -webkit-transform 220ms ease-out}verdocs-send.detail-open .track{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@media (prefers-reduced-motion: reduce){verdocs-send .track{-webkit-transition:none;transition:none}}verdocs-send .pane{padding:16px;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}verdocs-send .main-pane{-ms-flex:1;flex:1}verdocs-send .detail-pane{position:absolute;top:0;left:100%;bottom:0;width:100%;overflow:hidden}verdocs-send .detail{-ms-flex:1;flex:1;min-height:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}verdocs-send .detail-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-send .detail-body{-ms-flex:1;flex:1;min-height:0;overflow-y:auto}verdocs-send .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-send .scrollable:not(.at-end)>.scroll-fade{opacity:1}verdocs-send .recipient-detail verdocs-contact-picker{-ms-flex:1;flex:1;min-height:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}verdocs-send .section-title{font-size:12px;font-weight:600;color:var(--send-ink-2);margin:0 0 6px 0}verdocs-send .delivery-title{margin-top:16px}verdocs-send .step{font-size:11px;color:var(--send-muted);padding:10px 0 4px 0}verdocs-send .recipient,verdocs-send .kv{all:unset;display:-ms-flexbox;display:flex;width:100%;min-width:0;max-width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;-ms-flex-align:center;align-items:center;-webkit-column-gap:10px;-moz-column-gap:10px;column-gap:10px;border-top:1px solid var(--send-rule);color:var(--send-ink);font-family:inherit}verdocs-send .recipient:focus-visible,verdocs-send .kv:focus-visible{outline:2px solid var(--send-accent);outline-offset:-2px;border-radius:4px}verdocs-send .recipient .chevron,verdocs-send .kv .chevron{-ms-flex:0 0 16px;flex:0 0 16px;width:16px;height:16px;color:var(--send-faint)}verdocs-send .recipient .chevron svg,verdocs-send .kv .chevron svg{width:16px;height:16px;display:block}verdocs-send .recipient{padding:8px 6px 8px 0}verdocs-send .recipient:last-child{border-bottom:1px solid var(--send-rule)}verdocs-send .recipient .who{-ms-flex:1;flex:1;min-width:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}verdocs-send .recipient .role-name{font-size:13px;font-weight:600}verdocs-send .recipient .who-detail{font-size:12px;color:var(--send-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}verdocs-send .recipient .who-detail.configure{color:var(--send-accent);font-weight:500}verdocs-send .recipient .options{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:4px;margin-top:3px}verdocs-send .recipient .pill{height:18px;padding:0 6px;border-radius:999px;font-size:10px;font-weight:500;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;background:var(--send-accent-tint);color:var(--send-ink-2)}verdocs-send .role-dot{-ms-flex:0 0 10px;flex:0 0 10px;width:10px;height:10px;border-radius:50%;border:1px solid rgba(0, 0, 0, 0.1)}verdocs-send .kv{height:40px;padding:0 6px 0 0;font-size:13px}verdocs-send .kv:last-child{border-bottom:1px solid var(--send-rule)}verdocs-send .kv:disabled{cursor:default;color:var(--send-muted)}verdocs-send .kv .key{-ms-flex:0 0 84px;flex:0 0 84px;color:var(--send-muted)}verdocs-send .kv .value{-ms-flex:1;flex:1;min-width:0;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}verdocs-send .kv .value small{font-size:inherit;font-weight:400;color:var(--send-muted)}verdocs-send .kv .value.stacked{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;row-gap:1px;white-space:normal}verdocs-send .kv .value.stacked .line{display:block;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}verdocs-send .kv .value.stacked small.line{font-size:12px}verdocs-send .kv .value.off{color:var(--send-warning-icon)}verdocs-send .kv:has(.value.stacked){height:auto;min-height:40px;padding-top:6px;padding-bottom:6px}verdocs-send .main-spacer,verdocs-send .detail-spacer{-ms-flex:1;flex:1}verdocs-send .buttons{display:-ms-flexbox;display:flex;margin-top:14px;-webkit-column-gap:10px;-moz-column-gap:10px;column-gap:10px;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end}verdocs-send .buttons .error-message{width:100%;color:#cc0000;font-size:13px;margin-bottom:10px}verdocs-send .detail-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-column-gap:8px;-moz-column-gap:8px;column-gap:8px;margin:-2px 0 14px 0}verdocs-send .detail-header .back{all:unset;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;cursor:pointer;font-size:13px;font-weight:500;color:var(--send-accent);font-family:inherit;-ms-flex:0 0 52px;flex:0 0 52px}verdocs-send .detail-header .back .icon,verdocs-send .detail-header .back .icon svg{width:16px;height:16px;display:block}verdocs-send .detail-header .back:focus-visible{outline:2px solid var(--send-accent);outline-offset:2px;border-radius:4px}verdocs-send .detail-header .detail-title{-ms-flex:1;flex:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-webkit-column-gap:8px;-moz-column-gap:8px;column-gap:8px;font-size:14px;font-weight:600;text-align:center}verdocs-send .detail-header .detail-header-spacer{-ms-flex:0 0 52px;flex:0 0 52px}verdocs-send .detail-footer{margin-top:10px;padding-top:12px;border-top:1px solid var(--send-rule)}verdocs-send .detail-footer verdocs-button,verdocs-send .detail-footer verdocs-button button{width:100%}verdocs-send .hint{font-size:12px;line-height:1.5;color:var(--send-muted);margin:10px 0 0 0}verdocs-send .option-list{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}verdocs-send .option{all:unset;display:-ms-flexbox;display:flex;width:100%;cursor:pointer;-ms-flex-align:center;align-items:center;-webkit-column-gap:10px;-moz-column-gap:10px;column-gap:10px;padding:10px 0;font-size:13px;font-family:inherit;color:var(--send-ink);border-top:1px solid var(--send-rule)}verdocs-send .option:first-child{border-top:0}verdocs-send .option:focus-visible{outline:2px solid var(--send-accent);outline-offset:-2px;border-radius:4px}verdocs-send .option .radio{-ms-flex:0 0 16px;flex:0 0 16px;width:16px;height:16px;border-radius:50%;border:1px solid var(--send-control-border);display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}verdocs-send .option.selected .radio{border-color:var(--send-accent)}verdocs-send .option.selected .radio::after{content:"";width:8px;height:8px;border-radius:50%;background:var(--send-accent)}verdocs-send .option .swatch{-ms-flex:0 0 22px;flex:0 0 22px;width:22px;height:22px;border-radius:5px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;font-size:9px;font-weight:700;color:#ffffff;overflow:hidden}verdocs-send .option .swatch.logo{background:#ffffff;border:1px solid var(--send-rule)}verdocs-send .option .swatch img{width:100%;height:100%;-o-object-fit:contain;object-fit:contain;display:block}verdocs-send .option .option-label{-ms-flex:1;flex:1;min-width:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}verdocs-send .option .option-label small{font-size:11px;color:var(--send-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}verdocs-send .option-divider{height:0;margin:2px 0;border-top:1px solid var(--send-control-border)}verdocs-send .option-divider+.option{border-top:0}verdocs-send .hint a{color:var(--send-accent);font-weight:500;text-decoration:none;border-bottom:1px solid var(--send-accent-tint-2)}verdocs-send .hint a .icon,verdocs-send .hint a .icon svg{width:11px;height:11px;display:inline-block;vertical-align:-1px;margin-left:2px}verdocs-send .expires-field{position:relative}verdocs-send .expires-field input{width:100%;height:36px;padding:0 52px 0 10px;font-size:14px;font-family:inherit;color:var(--send-ink);background:#ffffff;border:1px solid var(--send-control-border);border-radius:6px;outline:none}verdocs-send .expires-field input:focus{border-color:var(--send-accent);-webkit-box-shadow:0 0 0 2px var(--send-accent-tint-2);box-shadow:0 0 0 2px var(--send-accent-tint-2)}verdocs-send .expires-field input::-webkit-input-placeholder{color:var(--send-faint)}verdocs-send .expires-field input::-moz-placeholder{color:var(--send-faint)}verdocs-send .expires-field input:-ms-input-placeholder{color:var(--send-faint)}verdocs-send .expires-field input::-ms-input-placeholder{color:var(--send-faint)}verdocs-send .expires-field input::placeholder{color:var(--send-faint)}verdocs-send .expires-field .suffix{position:absolute;right:10px;top:0;height:36px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;font-size:13px;color:var(--send-muted);pointer-events:none}verdocs-send .sender-field{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;row-gap:4px;margin:0 0 10px 0}verdocs-send .sender-field label{font-size:12px;font-weight:500;color:var(--send-ink-2)}verdocs-send .sender-field input{width:100%;height:36px;padding:0 10px;font-size:14px;font-family:inherit;color:var(--send-ink);background:#ffffff;border:1px solid var(--send-control-border);border-radius:6px;outline:none}verdocs-send .sender-field input:focus{border-color:var(--send-accent);-webkit-box-shadow:0 0 0 2px var(--send-accent-tint-2);box-shadow:0 0 0 2px var(--send-accent-tint-2)}verdocs-send .sender-field .field-error{font-size:12px;color:#cc0000}verdocs-send .notice{display:-ms-flexbox;display:flex;-webkit-column-gap:10px;-moz-column-gap:10px;column-gap:10px;margin-top:4px;padding:10px 12px;font-size:12px;line-height:1.5;border-radius:6px;color:var(--send-ink-2);background:var(--send-accent-tint);border:1px solid var(--send-accent-tint-2)}verdocs-send .notice>.icon{-ms-flex:0 0 18px;flex:0 0 18px;width:18px;height:18px;margin-top:1px;color:var(--send-accent)}verdocs-send .notice>.icon svg{width:18px;height:18px;display:block}verdocs-send .warning{display:-ms-flexbox;display:flex;-webkit-column-gap:10px;-moz-column-gap:10px;column-gap:10px;margin-top:12px;padding:10px 12px;font-size:12px;line-height:1.5;border-radius:6px;color:var(--send-warning-text);background:var(--send-warning-bg);border:1px solid var(--send-warning-border)}verdocs-send .warning>.icon{-ms-flex:0 0 18px;flex:0 0 18px;width:18px;height:18px;margin-top:1px;color:var(--send-warning-icon)}verdocs-send .warning>.icon svg{width:18px;height:18px;display:block}verdocs-send .warning a{color:var(--send-accent);font-weight:500;text-decoration:none;border-bottom:1px solid var(--send-accent-tint-2)}verdocs-send .warning a .icon,verdocs-send .warning a .icon svg{width:11px;height:11px;display:inline-block;vertical-align:-1px;margin-left:2px}verdocs-send verdocs-checkbox{display:block;padding:4px 0;font-size:13px}`;const j='<svg focusable="false" aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m9 6 6 6-6 6"/></svg>';const B='<svg focusable="false" aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m15 18-6-6 6-6"/></svg>';const I='<svg focusable="false" aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"/><path d="M12 9v4M12 17h.01"/></svg>';const _='<svg focusable="false" aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4M12 8h.01"/></svg>';const T='<svg focusable="false" aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M15 3h6v6M10 14 21 3M21 14v7H3V3h7"/></svg>';const L="https://app.verdocs.com/assets/blue-logo.svg";const $=.25;const V=60;const H=500;const R=1;const O=120;const A=120;const G={email:"Email",passcode:"Passcode",sms:"SMS",kba:"KBA",id:"ID check"};const P=e(class e extends s{constructor(e){super();if(e!==false){this.__registerHost()}this.beforeSend=i(this,"beforeSend");this.send=i(this,"send");this.exit=i(this,"exit");this.sdkError=i(this,"sdkError");this.searchContacts=i(this,"searchContacts");this.templateListenerId=null;this.endpoint=v;this.templateId=null;this.environment="";this.showCancel=true;this.brandKey="";this.swipeStart=null;this.swallowNextClick=false;this.loadedOrganizationId="";this.containerId=`verdocs-send-${Math.random().toString(36).substring(2,11)}`;this.view="main";this.editingRoleId="";this.sessionContacts=[];this.sending=false;this.brands=[];this.organization=null;this.expiresInDays="";this.noContact=false;this.senderDefaults={name:"",email:""};this.senderName="";this.senderEmail="";this.rolesCompleted={};this.loading=true;this.template=null}disconnectedCallback(){this.unlistenToTemplate()}componentDidLoad(){this.el.addEventListener("click",(e=>{if(this.swallowNextClick){this.swallowNextClick=false;e.stopPropagation();e.preventDefault()}}),true)}componentDidRender(){var e,s;m(this.el.querySelector(".detail-body"));(e=this.el.querySelector(".main-pane"))===null||e===void 0?void 0:e.toggleAttribute("inert",this.view!=="main");(s=this.el.querySelector(".detail-pane"))===null||s===void 0?void 0:s.toggleAttribute("inert",this.view==="main")}async listenToTemplate(){console.log("[SEND] Loading template",this.templateId);this.unlistenToTemplate();w.subscribe("templates",this.templateId,(()=>r(this.endpoint,this.templateId)),true,(e=>{console.log("[SEND] Got new template",e);this.template=e;this.loading=false;this.rolesCompleted={};this.view="main";this.editingRoleId="";this.recomputeRolesCompleted();this.loadBrands()}))}loadBrands(){var e;const s=(e=this.template)===null||e===void 0?void 0:e.organization_id;if(!s||s===this.loadedOrganizationId){return}const i=!!this.loadedOrganizationId;this.loadedOrganizationId=s;this.brands=[];this.organization=null;if(i){this.brandKey=""}const n=()=>{var e;return((e=this.template)===null||e===void 0?void 0:e.organization_id)===s};d(this.endpoint,s).then((e=>{if(n()){this.brands=e||[]}})).catch((e=>console.log("[SEND] Unable to load brands",e)));a(this.endpoint,s).then((e=>{if(n()){this.organization=e}})).catch((e=>console.log("[SEND] Unable to load organization",e)))}handleExpiryInput(e){const s=(e.target.value||"").replace(/[^0-9]/g,"");this.expiresInDays=s?String(Math.min(Math.max(Number(s),R),O)):"";e.target.value=this.expiresInDays}effectiveExpiryDays(){const e=Number(this.expiresInDays);return e>=R?e:A}expiresAt(){return new Date(Date.now()+this.effectiveExpiryDays()*24*60*60*1e3)}unlistenToTemplate(){if(this.templateListenerId){w.store.delListener(this.templateListenerId);this.templateListenerId=null}}async reset(){this.rolesCompleted={};this.view="main";this.editingRoleId="";this.brandKey="";this.expiresInDays="";this.noContact=false;this.senderName="";this.senderEmail=""}effectiveSenderName(){return this.senderName||this.senderDefaults.name}effectiveSenderEmail(){return this.senderEmail||this.senderDefaults.email}senderOverrides(){const e=this.senderName.trim();const s=this.senderEmail.trim();return{sender_name:e&&e!==this.senderDefaults.name?e:undefined,sender_email:s&&s!==this.senderDefaults.email?s:undefined}}onTemplateIdChanged(e){console.log("[SEND] Template ID changed",e);this.listenToTemplate()}async componentWillLoad(){var e,s,i;try{this.endpoint.onSessionChanged(((e,s,i)=>{if(!i){return}const n={id:i.id,first_name:i.first_name,last_name:i.last_name,email:i.email,phone:i.phone};if(i){this.senderDefaults={name:l(i),email:i.email||""};this.sessionContacts=[n];c(this.endpoint).then((e=>{console.log("[SEND] Got contacts",e);this.sessionContacts=[...e,n]})).catch((e=>{console.log("[SEND] Error getting contacts",e)}))}}));this.endpoint.loadSession();if(!this.endpoint.session){console.log("[SEND] Unable to start Send operation, must be authenticated");return}if(!this.templateId){console.log(`[SEND] Missing required template ID ${this.templateId}`);return}this.listenToTemplate()}catch(n){console.log("[SEND] Error with send session",n);(e=this.sdkError)===null||e===void 0?void 0:e.emit(new g(n.message,(s=n.response)===null||s===void 0?void 0:s.status,(i=n.response)===null||i===void 0?void 0:i.data))}}recomputeRolesCompleted(){var e;this.rolesCompleted={};const s={};(((e=this.template)===null||e===void 0?void 0:e.roles)||[]).forEach((e=>{const i=e.sequence;s[i]||(s[i]=[]);const n=`r-${i}-${s[i].length}`;s[i].push({...e,id:n,role_name:e.name,first_name:e.first_name,last_name:e.last_name});if(e.first_name&&p(e.email)){this.rolesCompleted[n]={...e,id:n,role_name:e.name,first_name:e.first_name,last_name:e.last_name}}}))}getSequenceNumbers(){var e;const s={};(((e=this.template)===null||e===void 0?void 0:e.roles)||[]).forEach((e=>{s[e.sequence]=true}));return Object.keys(s).map((e=>+e)).sort(((e,s)=>e-s))}getRolesAtLevel(e){var s;const i=(((s=this.template)===null||s===void 0?void 0:s.roles)||[]).filter((s=>s.sequence===e)).map(((s,i)=>({...s,id:`r-${e}-${i}`,role_name:s.name,first_name:s.first_name,last_name:s.last_name})));return i}getRoleById(e){for(const s of this.getSequenceNumbers()){const i=this.getRolesAtLevel(s).find((s=>s.id===e));if(i){return i}}return null}getRecipientOptionLabels(e){if(!e){return[]}const s=(e.auth_methods||[]).filter((e=>e!=="email")).map((e=>G[e]||e));if(e.delegator){s.push("May delegate")}if(e.name_locked){s.push("Name locked")}return s}getDefaultBrand(){var e;const s=(e=this.organization)===null||e===void 0?void 0:e.default_brand_id;return s&&this.brands.find((e=>e.id===s))||null}getDefaultBrandLabel(){var e;const s=(e=this.getDefaultBrand())===null||e===void 0?void 0:e.name;return`Default (${s||"Verdocs"})`}getSelectedBrandLabel(){if(!this.brandKey){return this.getDefaultBrandLabel()}const e=this.brands.find((e=>e.key===this.brandKey));return(e===null||e===void 0?void 0:e.name)||(e===null||e===void 0?void 0:e.key)||this.brandKey}showView(e){this.view=e}handleSelectContact(e,s){e.preventDefault();this.rolesCompleted={...this.rolesCompleted,[s.id]:{...s,...e.detail}};this.editingRoleId="";this.view="main"}handleClickRole(e,s){e.stopPropagation();this.editingRoleId=s.id;this.view="recipient"}handleSend(e){var s;if(this.sending){console.log("[SEND] Skipping duplicate send",e);return}console.log("[SEND] Sending",e);e.preventDefault();e.stopPropagation();this.sending=true;const i=Intl.DateTimeFormat().resolvedOptions();const n={template_id:this.templateId,name:((s=this.template)===null||s===void 0?void 0:s.name)||"New Envelope",environment:this.environment,initial_reminder:0,followup_reminders:0,recipients:Object.values(this.rolesCompleted),timezone:i.timeZone,locale:i.locale,expires_at:this.expiresAt().toISOString()};n.no_contact=this.noContact;const{sender_name:t,sender_email:o}=this.senderOverrides();if(t){n.sender_name=t}if(o){n.sender_email=o}if(this.brandKey){n.brand_key=this.brandKey}const r=this.beforeSend.emit({...n,name:n.name,template:this.template});if(r.defaultPrevented){console.log("[SEND] Send cancelled by parent",n);this.sending=false;return}console.log("[SEND] Creating envelope",n);h(this.endpoint,n).then((e=>{var s;console.log("[SEND] Send envelope",e);this.reset().catch((e=>console.log("Unknown Error",e)));this.sending=false;(s=this.send)===null||s===void 0?void 0:s.emit({...n,name:n.name,envelope_id:e.id,envelope:e})})).catch((e=>{var s,i,n;console.log("[SEND] Send error",e);b(((i=(s=e.response)===null||s===void 0?void 0:s.data)===null||i===void 0?void 0:i.error)||"Error creating envelope, please try again later.");this.sending=false;(n=this.sdkError)===null||n===void 0?void 0:n.emit(e)}))}handleCancel(e){var s;e.stopPropagation();(s=this.exit)===null||s===void 0?void 0:s.emit()}handleSwipeStart(e){var s,i;this.swallowNextClick=false;const n=e.currentTarget;const t=n.getBoundingClientRect();const o=!!((i=(s=e.target)===null||s===void 0?void 0:s.closest)===null||i===void 0?void 0:i.call(s,"input, textarea, select, [contenteditable]"));if(this.view==="main"||o||e.clientX-t.left>t.width*$){this.swipeStart=null;return}this.swipeStart={x:e.clientX,y:e.clientY,time:Date.now()}}handleSwipeEnd(e){const s=this.swipeStart;this.swipeStart=null;if(!s){return}const i=e.clientX-s.x;const n=Math.abs(e.clientY-s.y);if(i>=V&&i>n&&Date.now()-s.time<=H){this.swallowNextClick=true;this.showView("main")}}renderDetailHeader(e){return n("div",{class:"detail-header"},n("button",{type:"button",class:"back",onClick:()=>this.showView("main")},n("span",{class:"icon",innerHTML:B}),"Back"),n("div",{class:"detail-title"},e),n("div",{class:"detail-header-spacer"}))}renderDetailBody(e){return n("div",{class:"detail-body-wrap"},n("div",{class:"detail-body",onScroll:e=>m(e.target)},e),n("div",{class:"scroll-fade"}))}renderDoneButton(){return n("div",{class:"detail-footer"},n("verdocs-button",{label:"Done",size:"small",onClick:()=>this.showView("main")}))}renderRecipientView(){var e;const s=this.getRoleById(this.editingRoleId);if(!s){return n("div",{class:"detail recipient-detail"},this.renderDetailHeader("Recipient"))}const i=N(this.template,s.role_name);return n("div",{class:"detail recipient-detail"},this.renderDetailHeader([n("span",{class:"role-dot",style:{backgroundColor:f(i)}}),s.role_name]),n("verdocs-contact-picker",{key:s.id,showCancel:false,onExit:()=>this.showView("main"),onNext:e=>this.handleSelectContact(e,s),contactSuggestions:this.sessionContacts,templateRole:(e=this.rolesCompleted[s.id])!==null&&e!==void 0?e:s,onSearchContacts:e=>{var s;return(s=this.searchContacts)===null||s===void 0?void 0:s.emit(e.detail)}}))}renderBrandSwatch(e,s){const i=(e===null||e===void 0?void 0:e.favicon_url)||(e===null||e===void 0?void 0:e.thumbnail_url)||(e?null:L);if(i){return n("span",{class:"swatch logo"},n("img",{src:i,alt:""}))}return n("span",{class:"swatch",style:{backgroundColor:(e===null||e===void 0?void 0:e.primary_color)||"#4c56cb"}},s.substring(0,2).toUpperCase())}renderBrandOption(e,s,i,t){return n("button",{type:"button",class:{option:true,selected:this.brandKey===e},onClick:()=>this.brandKey=e},n("span",{class:"radio"}),t,n("span",{class:"option-label"},s,n("small",null,i)))}renderBrandView(){const e=this.getDefaultBrand();const s=this.brands.filter((s=>s.id!==(e===null||e===void 0?void 0:e.id))).sort(((e,s)=>(e.name||e.key).localeCompare(s.name||s.key)));const i=this.brands.length>0;return n("div",{class:"detail"},this.renderDetailHeader("Brand"),this.renderDetailBody([n("div",{class:"option-list"},this.renderBrandOption("",this.getDefaultBrandLabel(),"Organization default",this.renderBrandSwatch(e,(e===null||e===void 0?void 0:e.name)||"V")),s.length>0&&n("div",{class:"option-divider"}),s.map((e=>this.renderBrandOption(e.key,e.name||e.key,e.key,this.renderBrandSwatch(e,e.name||e.key))))),!i&&n("p",{class:"hint"},"Configure the look and feel of the signing experience by"," ",n("a",{href:`${x(this.endpoint)}/settings/branding`,target:"_blank",rel:"noopener"},"Creating a Brand",n("span",{class:"icon",innerHTML:T})),".")]),this.renderDoneButton())}renderExpiresView(){const e=this.expiresAt();const s=`${e.toLocaleDateString(undefined,{month:"short",day:"numeric",year:"numeric"})} at ${e.toLocaleTimeString(undefined,{hour:"numeric",minute:"2-digit"})}`;return n("div",{class:"detail"},this.renderDetailHeader("Expiration"),this.renderDetailBody([n("div",{class:"expires-field"},n("input",{type:"text",inputMode:"numeric","aria-label":"Expires in (days)",placeholder:String(A),value:this.expiresInDays,disabled:this.sending,onInput:e=>this.handleExpiryInput(e)}),n("span",{class:"suffix"},"days")),n("p",{class:"hint"},"This envelope will expire on ",s,". Expirations may be set from ",R,"-",O," days. If left blank, this will default to ",A,".")]),this.renderDoneButton())}renderSenderView(){const e=!this.senderEmail.trim()||p(this.senderEmail.trim());return n("div",{class:"detail"},this.renderDetailHeader("Sender"),this.renderDetailBody([n("div",{class:"sender-field"},n("label",{htmlFor:`${this.containerId}-sender-name`},"Name"),n("input",{id:`${this.containerId}-sender-name`,type:"text",value:this.effectiveSenderName(),disabled:this.sending,onInput:e=>this.senderName=e.target.value})),n("div",{class:"sender-field"},n("label",{htmlFor:`${this.containerId}-sender-email`},"Email"),n("input",{id:`${this.containerId}-sender-email`,type:"email",value:this.effectiveSenderEmail(),disabled:this.sending,onInput:e=>this.senderEmail=e.target.value}),!e&&n("div",{class:"field-error"},"Enter a valid email address.")),n("div",{class:"notice"},n("span",{class:"icon",innerHTML:_}),n("div",null,'Specify where envelope-completed email notifications and "Ask a Question" submissions are delivered. To customize the "From" address for email notifications, please configure those in'," ",n("a",{href:`${x(this.endpoint)}/settings/brands`,target:"_blank",rel:"noopener"},"Brands",n("span",{class:"icon",innerHTML:T}))," ","."))]),this.renderDoneButton())}renderNotificationsView(){return n("div",{class:"detail"},this.renderDetailHeader("Notifications"),this.renderDetailBody([n("verdocs-checkbox",{size:"small",label:"Disable notifications",checked:this.noContact,onInput:e=>this.noContact=!!e.target.checked}),this.noContact&&n("div",{class:"warning"},n("span",{class:"icon",innerHTML:I}),n("div",null,"Disabling notifications turns off invitations and reminders to recipients as well as status updates to you. You may obtain invite links in the recipient summary or via an API call. We strongly recommend enabling"," ",n("a",{href:`${x(this.endpoint)}/settings/webhooks`,target:"_blank",rel:"noopener"},"Webhooks",n("span",{class:"icon",innerHTML:T}))," ","to help automate this process."))]),this.renderDoneButton())}renderDetail(){switch(this.view){case"recipient":return this.renderRecipientView();case"brand":return this.renderBrandView();case"expires":return this.renderExpiresView();case"notifications":return this.renderNotificationsView();case"sender":return this.renderSenderView();default:return null}}render(){var e;if(this.loading){return n(t,null,n("verdocs-loader",null))}if(!this.endpoint.session){return n(t,{style:{display:"flex"}},n("verdocs-component-error",{message:"You must be authenticated to use this module."}))}const s=this.getSequenceNumbers();const i=Object.values(this.rolesCompleted).filter((e=>p(e.email)&&e.first_name&&e.last_name));const o=i.length>=D(this.template).length;const r=i.map((e=>e.email.toLowerCase()));const d=new Set(r).size<r.length;const a=this.expiresAt();const c=a.toLocaleDateString(undefined,{month:"short",day:"numeric"});return n(t,{class:{sendable:(e=this.template)===null||e===void 0?void 0:e.is_sendable,"detail-open":this.view!=="main"}},n("div",{class:"track"},n("div",{class:"pane main-pane","aria-hidden":this.view!=="main"?"true":"false"},n("div",{class:"section-title"},"Recipients"),n("div",{class:"recipients"},s.map((e=>[s.length>1&&n("div",{class:"step"},"Step ",e),this.getRolesAtLevel(e).map((e=>{const s=N(this.template,e.role_name);const t=this.rolesCompleted[e.id];const o=t&&i.findIndex((s=>s.role_name===e.role_name))>-1;const r=this.getRecipientOptionLabels(t);return n("button",{type:"button",class:"recipient","data-ri":s,"data-rn":e.role_name,onClick:s=>this.handleClickRole(s,e)},n("span",{class:"role-dot",style:{backgroundColor:f(s)}}),n("span",{class:"who"},n("span",{class:"role-name"},e.role_name),o?n("span",{class:"who-detail"},l(t)," · ",t.email):n("span",{class:"who-detail configure"},"Configure recipient"),r.length>0&&n("span",{class:"options"},r.map((e=>n("span",{class:"pill"},e))))),n("span",{class:"chevron",innerHTML:j}))}))]))),n("div",{class:"section-title delivery-title"},"Delivery"),n("div",{class:"delivery"},n("button",{type:"button",class:"kv",onClick:()=>this.showView("brand"),disabled:this.sending},n("span",{class:"key"},"Brand"),n("span",{class:"value"},this.getSelectedBrandLabel()),n("span",{class:"chevron",innerHTML:j})),n("button",{type:"button",class:"kv",onClick:()=>this.showView("expires"),disabled:this.sending},n("span",{class:"key"},"Expires"),n("span",{class:"value"},this.effectiveExpiryDays()," days ",n("small",null,"· ",c)),n("span",{class:"chevron",innerHTML:j})),n("button",{type:"button",class:"kv",onClick:()=>this.showView("sender"),disabled:this.sending},n("span",{class:"key"},"Sender"),n("span",{class:"value stacked"},n("span",{class:"line"},this.effectiveSenderName()||this.effectiveSenderEmail()),this.effectiveSenderName()&&this.effectiveSenderEmail()?n("small",{class:"line"},this.effectiveSenderEmail()):null),n("span",{class:"chevron",innerHTML:j})),n("button",{type:"button",class:"kv",onClick:()=>this.showView("notifications"),disabled:this.sending},n("span",{class:"key"},"Notifications"),n("span",{class:{value:true,off:this.noContact}},this.noContact?"Off":"On"),n("span",{class:"chevron",innerHTML:j}))),n("div",{class:"main-spacer"}),n("div",{class:"buttons"},d&&n("div",{class:"error-message"},"Recipients cannot share the same email."),this.sending&&n("verdocs-spinner",null),this.showCancel&&n("verdocs-button",{label:"Cancel",size:"small",variant:"outline",onClick:e=>this.handleCancel(e),disabled:this.sending}),n("verdocs-button",{label:"Send",size:"small",disabled:!o||this.sending||d,onClick:e=>this.handleSend(e)}))),n("div",{class:"pane detail-pane","aria-hidden":this.view==="main"?"true":"false",onPointerDown:e=>this.handleSwipeStart(e),onPointerUp:e=>this.handleSwipeEnd(e),onPointerCancel:()=>this.swipeStart=null},this.renderDetail())))}get el(){return this}static get watchers(){return{templateId:[{onTemplateIdChanged:0}]}}static get style(){return M()}},[0,"verdocs-send",{endpoint:[16],templateId:[513,"template-id"],environment:[1],showCancel:[4,"show-cancel"],brandKey:[1025,"brand-key"],containerId:[32],view:[32],editingRoleId:[32],sessionContacts:[32],sending:[32],brands:[32],organization:[32],expiresInDays:[32],noContact:[32],senderDefaults:[32],senderName:[32],senderEmail:[32],rolesCompleted:[32],loading:[32],template:[32],reset:[64]},undefined,{templateId:[{onTemplateIdChanged:0}]}]);function F(){if(typeof customElements==="undefined"){return}const e=["verdocs-send","verdocs-button","verdocs-checkbox","verdocs-component-error","verdocs-contact-picker","verdocs-flag","verdocs-loader","verdocs-spinner"];e.forEach((e=>{switch(e){case"verdocs-send":if(!customElements.get(o(e))){customElements.define(o(e),P)}break;case"verdocs-button":if(!customElements.get(o(e))){k()}break;case"verdocs-checkbox":if(!customElements.get(o(e))){y()}break;case"verdocs-component-error":if(!customElements.get(o(e))){S()}break;case"verdocs-contact-picker":if(!customElements.get(o(e))){u()}break;case"verdocs-flag":if(!customElements.get(o(e))){z()}break;case"verdocs-loader":if(!customElements.get(o(e))){E()}break;case"verdocs-spinner":if(!customElements.get(o(e))){C()}break}}))}export{P as V,F as d};
2
+ //# sourceMappingURL=p-K-sDaUxS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getRoleNames","template","roles","map","role","name","getRoleIndex","role_name","Math","max","findIndex","verdocsSendCss","chevronRightIcon","chevronLeftIcon","warningIcon","infoIcon","externalLinkIcon","VERDOCS_LOGO_URL","SWIPE_START_FRACTION","SWIPE_MIN_DISTANCE","SWIPE_MAX_DURATION","MIN_EXPIRY_DAYS","MAX_EXPIRY_DAYS","DEFAULT_EXPIRY_DAYS","AUTH_METHOD_LABELS","email","passcode","sms","kba","id","VerdocsSend","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","templateListenerId","endpoint","DefaultEndpoint","templateId","environment","showCancel","brandKey","swipeStart","swallowNextClick","loadedOrganizationId","containerId","random","toString","substring","view","editingRoleId","sessionContacts","sending","brands","organization","expiresInDays","noContact","senderDefaults","senderName","senderEmail","rolesCompleted","loading","disconnectedCallback","unlistenToTemplate","componentDidLoad","el","addEventListener","e","stopPropagation","preventDefault","componentDidRender","updateScrollFade","querySelector","_a","toggleAttribute","_b","listenToTemplate","console","log","Store","subscribe","getTemplate","recomputeRolesCompleted","loadBrands","organizationId","organization_id","changedOrganization","stillCurrent","getBrands","then","catch","getOrganization","handleExpiryInput","digits","target","value","replace","String","min","Number","effectiveExpiryDays","days","expiresAt","Date","now","store","delListener","reset","effectiveSenderName","effectiveSenderEmail","senderOverrides","trim","sender_name","undefined","sender_email","onTemplateIdChanged","newTemplateId","componentWillLoad","onSessionChanged","_endpoint","_session","profile","me","first_name","last_name","phone","formatFullName","getOrganizationContacts","contacts","loadSession","session","sdkError","emit","SDKError","message","response","status","_c","data","rolesAtLevel","forEach","level","sequence","length","push","isValidEmail","getSequenceNumbers","sequences","Object","keys","s","sort","a","b","getRolesAtLevel","filter","index","getRoleById","match","find","getRecipientOptionLabels","recipient","labels","auth_methods","method","delegator","name_locked","getDefaultBrand","defaultId","default_brand_id","brand","getDefaultBrandLabel","getSelectedBrandLabel","key","showView","handleSelectContact","detail","handleClickRole","handleSend","localeData","Intl","DateTimeFormat","resolvedOptions","details","template_id","initial_reminder","followup_reminders","recipients","values","timezone","timeZone","locale","expires_at","toISOString","no_contact","brand_key","beforeSendResult","beforeSend","defaultPrevented","createEnvelope","r","send","envelope_id","envelope","VerdocsToast","error","handleCancel","exit","handleSwipeStart","pane","currentTarget","rect","getBoundingClientRect","onTextEntry","closest","call","clientX","left","width","x","y","clientY","time","handleSwipeEnd","start","dx","dy","abs","renderDetailHeader","title","h","class","type","onClick","innerHTML","renderDetailBody","content","onScroll","renderDoneButton","label","size","renderRecipientView","roleIndex","style","backgroundColor","getRGBA","onExit","onNext","contactSuggestions","templateRole","onSearchContacts","searchContacts","renderBrandSwatch","fallbackInitial","image","favicon_url","thumbnail_url","src","alt","primary_color","toUpperCase","renderBrandOption","sub","swatch","option","selected","renderBrandView","defaultBrand","others","localeCompare","hasBrands","href","getWebAppUrl","rel","renderExpiresView","when","toLocaleDateString","month","day","year","toLocaleTimeString","hour","minute","inputMode","placeholder","disabled","onInput","renderSenderView","validEmail","htmlFor","renderNotificationsView","checked","renderDetail","render","Host","display","levels","rolesAssigned","allRolesAssigned","assignedEmails","toLowerCase","hasDuplicateEmails","Set","expiresShort","sendable","is_sendable","completed","assigned","optionLabels","off","variant","onPointerDown","onPointerUp","onPointerCancel"],"sources":["src/utils/Templates.ts","src/components/embeds/verdocs-send/verdocs-send.scss?tag=verdocs-send","src/components/embeds/verdocs-send/verdocs-send.tsx"],"sourcesContent":["import {ITemplate} from '@verdocs/js-sdk';\n\nexport const getRoleNames = (template: ITemplate | null) => (template?.roles || []).map(role => role.name);\n\nexport const getRoleIndex = (template: ITemplate | null, role_name: string) =>\n Math.max(\n getRoleNames(template).findIndex(name => name === role_name),\n 0,\n );\n","@import '../../../theme.scss';\n\nverdocs-send {\n --send-ink: var(--verdocs-body-color, #111827);\n --send-ink-2: #374151;\n --send-muted: #6b7280;\n --send-faint: #9ca3af;\n --send-rule: #e5e7eb;\n --send-control-border: #d1d5db;\n --send-accent: var(--verdocs-link-color, #{$secondary-color});\n --send-accent-tint: #f4f5fc;\n --send-accent-tint-2: #e6e7f8;\n --send-warning-bg: #fffbeb;\n --send-warning-border: #fde68a;\n --send-warning-icon: #d97706;\n --send-warning-text: #78350f;\n --send-radius: var(--verdocs-dialog-radius, 8px);\n --send-min-height: 480px;\n --send-max-width: 480px;\n\n display: none;\n position: relative;\n overflow: hidden;\n width: 100%;\n min-width: 0;\n max-width: var(--verdocs-send-max-width, var(--send-max-width));\n box-sizing: border-box;\n background: #ffffff;\n color: var(--send-ink);\n font-size: 14px;\n border-radius: var(--send-radius);\n border: 1px solid var(--send-rule);\n font-family: $verdocs-primary-font;\n\n * {\n box-sizing: border-box;\n }\n\n &.sendable {\n display: block;\n }\n\n // The main pane sets the card's height. The detail pane sits beside it, off-canvas to the\n // right, and the track slides one pane-width left when a detail view is open. Detail views\n // taller than the card scroll inside it.\n .track {\n position: relative;\n display: flex;\n flex-direction: column;\n min-height: var(--send-min-height);\n transition: transform 220ms ease-out;\n }\n\n &.detail-open .track {\n transform: translateX(-100%);\n }\n\n @media (prefers-reduced-motion: reduce) {\n .track {\n transition: none;\n }\n }\n\n .pane {\n padding: 16px;\n display: flex;\n flex-direction: column;\n }\n\n .main-pane {\n flex: 1;\n }\n\n .detail-pane {\n position: absolute;\n top: 0;\n left: 100%;\n bottom: 0;\n width: 100%;\n overflow: hidden;\n }\n\n .detail {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n }\n\n // The body scrolls between a fixed header and a pinned Done button. The fade sits over the\n // body's bottom edge and shows only while there is more below (classes set by updateScrollFade).\n .detail-body-wrap {\n position: relative;\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n }\n\n .detail-body {\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 .recipient-detail verdocs-contact-picker {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n }\n\n .section-title {\n font-size: 12px;\n font-weight: 600;\n color: var(--send-ink-2);\n margin: 0 0 6px 0;\n }\n\n .delivery-title {\n margin-top: 16px;\n }\n\n .step {\n font-size: 11px;\n color: var(--send-muted);\n padding: 10px 0 4px 0;\n }\n\n .recipient,\n .kv {\n all: unset;\n display: flex;\n width: 100%;\n min-width: 0;\n max-width: 100%;\n box-sizing: border-box;\n cursor: pointer;\n align-items: center;\n column-gap: 10px;\n border-top: 1px solid var(--send-rule);\n color: var(--send-ink);\n font-family: inherit;\n\n &:focus-visible {\n outline: 2px solid var(--send-accent);\n outline-offset: -2px;\n border-radius: 4px;\n }\n\n .chevron {\n flex: 0 0 16px;\n width: 16px;\n height: 16px;\n color: var(--send-faint);\n\n svg {\n width: 16px;\n height: 16px;\n display: block;\n }\n }\n }\n\n .recipient {\n padding: 8px 6px 8px 0;\n\n &:last-child {\n border-bottom: 1px solid var(--send-rule);\n }\n\n .who {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n }\n\n .role-name {\n font-size: 13px;\n font-weight: 600;\n }\n\n .who-detail {\n font-size: 12px;\n color: var(--send-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &.configure {\n color: var(--send-accent);\n font-weight: 500;\n }\n }\n\n .options {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n margin-top: 3px;\n }\n\n .pill {\n height: 18px;\n padding: 0 6px;\n border-radius: 999px;\n font-size: 10px;\n font-weight: 500;\n display: inline-flex;\n align-items: center;\n background: var(--send-accent-tint);\n color: var(--send-ink-2);\n }\n }\n\n .role-dot {\n flex: 0 0 10px;\n width: 10px;\n height: 10px;\n border-radius: 50%;\n border: 1px solid rgba(0, 0, 0, 0.1);\n }\n\n .kv {\n height: 40px;\n padding: 0 6px 0 0;\n font-size: 13px;\n\n &:last-child {\n border-bottom: 1px solid var(--send-rule);\n }\n\n &:disabled {\n cursor: default;\n color: var(--send-muted);\n }\n\n .key {\n flex: 0 0 84px;\n color: var(--send-muted);\n }\n\n .value {\n flex: 1;\n min-width: 0;\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n small {\n font-size: inherit;\n font-weight: 400;\n color: var(--send-muted);\n }\n\n // Name on one line, email on the next: each line truncates on its own.\n &.stacked {\n display: flex;\n flex-direction: column;\n row-gap: 1px;\n white-space: normal;\n\n .line {\n display: block;\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n small.line {\n font-size: 12px;\n }\n }\n\n &.off {\n color: var(--send-warning-icon);\n }\n }\n\n &:has(.value.stacked) {\n height: auto;\n min-height: 40px;\n padding-top: 6px;\n padding-bottom: 6px;\n }\n }\n\n .main-spacer,\n .detail-spacer {\n flex: 1;\n }\n\n .buttons {\n display: flex;\n margin-top: 14px;\n column-gap: 10px;\n flex-wrap: wrap;\n flex-direction: row;\n align-items: center;\n justify-content: flex-end;\n\n .error-message {\n width: 100%;\n color: $verdocs-red-1;\n font-size: 13px;\n margin-bottom: 10px;\n }\n }\n\n // Detail views\n .detail-header {\n display: flex;\n align-items: center;\n column-gap: 8px;\n margin: -2px 0 14px 0;\n\n .back {\n all: unset;\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n color: var(--send-accent);\n font-family: inherit;\n flex: 0 0 52px;\n\n .icon,\n .icon svg {\n width: 16px;\n height: 16px;\n display: block;\n }\n\n &:focus-visible {\n outline: 2px solid var(--send-accent);\n outline-offset: 2px;\n border-radius: 4px;\n }\n }\n\n .detail-title {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n column-gap: 8px;\n font-size: 14px;\n font-weight: 600;\n text-align: center;\n }\n\n .detail-header-spacer {\n flex: 0 0 52px;\n }\n }\n\n .detail-footer {\n margin-top: 10px;\n padding-top: 12px;\n border-top: 1px solid var(--send-rule);\n\n verdocs-button,\n verdocs-button button {\n width: 100%;\n }\n }\n\n .hint {\n font-size: 12px;\n line-height: 1.5;\n color: var(--send-muted);\n margin: 10px 0 0 0;\n }\n\n .option-list {\n display: flex;\n flex-direction: column;\n }\n\n .option {\n all: unset;\n display: flex;\n width: 100%;\n cursor: pointer;\n align-items: center;\n column-gap: 10px;\n padding: 10px 0;\n font-size: 13px;\n font-family: inherit;\n color: var(--send-ink);\n border-top: 1px solid var(--send-rule);\n\n &:first-child {\n border-top: 0;\n }\n\n &:focus-visible {\n outline: 2px solid var(--send-accent);\n outline-offset: -2px;\n border-radius: 4px;\n }\n\n .radio {\n flex: 0 0 16px;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n border: 1px solid var(--send-control-border);\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n &.selected .radio {\n border-color: var(--send-accent);\n\n &::after {\n content: '';\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--send-accent);\n }\n }\n\n .swatch {\n flex: 0 0 22px;\n width: 22px;\n height: 22px;\n border-radius: 5px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 9px;\n font-weight: 700;\n color: #ffffff;\n overflow: hidden;\n\n &.logo {\n background: #ffffff;\n border: 1px solid var(--send-rule);\n }\n\n img {\n width: 100%;\n height: 100%;\n object-fit: contain;\n display: block;\n }\n }\n\n .option-label {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n\n small {\n font-size: 11px;\n color: var(--send-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n }\n\n .option-divider {\n height: 0;\n margin: 2px 0;\n border-top: 1px solid var(--send-control-border);\n\n + .option {\n border-top: 0;\n }\n }\n\n .hint a {\n color: var(--send-accent);\n font-weight: 500;\n text-decoration: none;\n border-bottom: 1px solid var(--send-accent-tint-2);\n\n .icon,\n .icon svg {\n width: 11px;\n height: 11px;\n display: inline-block;\n vertical-align: -1px;\n margin-left: 2px;\n }\n }\n\n .expires-field {\n position: relative;\n\n input {\n width: 100%;\n height: 36px;\n padding: 0 52px 0 10px;\n font-size: 14px;\n font-family: inherit;\n color: var(--send-ink);\n background: #ffffff;\n border: 1px solid var(--send-control-border);\n border-radius: 6px;\n outline: none;\n\n &:focus {\n border-color: var(--send-accent);\n box-shadow: 0 0 0 2px var(--send-accent-tint-2);\n }\n\n &::placeholder {\n color: var(--send-faint);\n }\n }\n\n .suffix {\n position: absolute;\n right: 10px;\n top: 0;\n height: 36px;\n display: flex;\n align-items: center;\n font-size: 13px;\n color: var(--send-muted);\n pointer-events: none;\n }\n }\n\n .sender-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(--send-ink-2);\n }\n\n input {\n width: 100%;\n height: 36px;\n padding: 0 10px;\n font-size: 14px;\n font-family: inherit;\n color: var(--send-ink);\n background: #ffffff;\n border: 1px solid var(--send-control-border);\n border-radius: 6px;\n outline: none;\n\n &:focus {\n border-color: var(--send-accent);\n box-shadow: 0 0 0 2px var(--send-accent-tint-2);\n }\n }\n\n .field-error {\n font-size: 12px;\n color: $verdocs-red-1;\n }\n }\n\n .notice {\n display: flex;\n column-gap: 10px;\n margin-top: 4px;\n padding: 10px 12px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 6px;\n color: var(--send-ink-2);\n background: var(--send-accent-tint);\n border: 1px solid var(--send-accent-tint-2);\n\n > .icon {\n flex: 0 0 18px;\n width: 18px;\n height: 18px;\n margin-top: 1px;\n color: var(--send-accent);\n\n svg {\n width: 18px;\n height: 18px;\n display: block;\n }\n }\n }\n\n .warning {\n display: flex;\n column-gap: 10px;\n margin-top: 12px;\n padding: 10px 12px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 6px;\n color: var(--send-warning-text);\n background: var(--send-warning-bg);\n border: 1px solid var(--send-warning-border);\n\n > .icon {\n flex: 0 0 18px;\n width: 18px;\n height: 18px;\n margin-top: 1px;\n color: var(--send-warning-icon);\n\n svg {\n width: 18px;\n height: 18px;\n display: block;\n }\n }\n\n a {\n color: var(--send-accent);\n font-weight: 500;\n text-decoration: none;\n border-bottom: 1px solid var(--send-accent-tint-2);\n\n .icon,\n .icon svg {\n width: 11px;\n height: 11px;\n display: inline-block;\n vertical-align: -1px;\n margin-left: 2px;\n }\n }\n }\n\n verdocs-checkbox {\n display: block;\n padding: 4px 0;\n font-size: 13px;\n }\n}\n","import type {IBrand, IOrganization, TRecipientAuthMethod} from '@verdocs/js-sdk';\nimport {Component, Element, Prop, State, h, Event, EventEmitter, Host, Method, Watch} from '@stencil/core';\nimport type {ICreateEnvelopeFromTemplateRequest, ICreateEnvelopeRecipientFromTemplate, IEnvelope, IRecipient, ITemplate} from '@verdocs/js-sdk';\nimport {createEnvelope, formatFullName, getBrands, getOrganization, getTemplate, getOrganizationContacts, getRGBA, isValidEmail, VerdocsEndpoint} from '@verdocs/js-sdk';\nimport {IContactSearchEvent} from '../../envelopes/verdocs-contact-picker/verdocs-contact-picker';\nimport {DefaultEndpoint, getWebAppUrl} from '../../../utils/Environment';\nimport {getRoleIndex, getRoleNames} from '../../../utils/Templates';\nimport {updateScrollFade} from '../../../utils/ScrollFade';\nimport {VerdocsToast} from '../../../utils/Toast';\nimport {SDKError} from '../../../utils/errors';\nimport {Store} from '../../../utils/Datastore';\n\nconst chevronRightIcon =\n '<svg focusable=\"false\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m9 6 6 6-6 6\"/></svg>';\n\nconst chevronLeftIcon =\n '<svg focusable=\"false\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m15 18-6-6 6-6\"/></svg>';\n\nconst warningIcon =\n '<svg focusable=\"false\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z\"/><path d=\"M12 9v4M12 17h.01\"/></svg>';\n\nconst infoIcon =\n '<svg focusable=\"false\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 16v-4M12 8h.01\"/></svg>';\n\nconst externalLinkIcon =\n '<svg focusable=\"false\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M15 3h6v6M10 14 21 3M21 14v7H3V3h7\"/></svg>';\n\nconst VERDOCS_LOGO_URL = 'https://app.verdocs.com/assets/blue-logo.svg';\n\n// Swipe mechanics for mobile users in detail views\nconst SWIPE_START_FRACTION = 0.25;\nconst SWIPE_MIN_DISTANCE = 60;\nconst SWIPE_MAX_DURATION = 500;\n\n// Expiration controls. The API is less strict, but Web users prefer a simpler setup so we just range-limit it 1..120 here.\nconst MIN_EXPIRY_DAYS = 1;\nconst MAX_EXPIRY_DAYS = 120;\nconst DEFAULT_EXPIRY_DAYS = 120;\n\nconst AUTH_METHOD_LABELS: Record<TRecipientAuthMethod, string> = {\n email: 'Email',\n passcode: 'Passcode',\n sms: 'SMS',\n kba: 'KBA',\n id: 'ID check',\n};\n\ntype TSendView = 'main' | 'recipient' | 'brand' | 'expires' | 'notifications' | 'sender';\n\nexport interface ISendEventDetail extends ICreateEnvelopeFromTemplateRequest {\n name: string;\n template_id: string;\n recipients: ICreateEnvelopeRecipientFromTemplate[];\n template: ITemplate;\n}\n\nexport interface ISentEventDetail extends ICreateEnvelopeFromTemplateRequest {\n name: string;\n template_id: string;\n recipients: ICreateEnvelopeRecipientFromTemplate[];\n envelope_id: string;\n envelope: IEnvelope;\n}\n\n/**\n * Display a form to send a template to one or more recipients in an envelope for signing.\n * Host applications should ensure the template is \"sendable\" before displaying this component.\n * To be sendable, a template must have at least one document attached, at least one participant\n * defined, and at least one field assigned to every \"signer\" participant. This component will\n * hide itself if the template is not sendable.\n *\n * ```ts\n * <verdocs-send\n * templateId={TEMPLATE_ID}\n * onBeforeSend={({ detail })) => { console.log('Sending... Show a spinner...', detail) }\n * onSend={({ detail }) => { console.log('Sent! Hide the spinner...', detail) }\n * onExit={({ detail }) => { console.log('Send cancelled.', detail) }\n * onSdkError={({ detail }) => { console.log('SDK error', detail) }\n * />\n * ```\n */\n@Component({\n tag: 'verdocs-send',\n styleUrl: 'verdocs-send.scss',\n shadow: false,\n})\nexport class VerdocsSend {\n private templateListenerId = null;\n\n @Element() el: 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 = DefaultEndpoint;\n\n /**\n * The ID of the template to create the document from.\n */\n @Prop({reflect: true}) templateId: string | null = null;\n\n /**\n * The environment the control is being called from, e.g. 'web'. This has an impact on how certain\n * operations such as email communications are handled to ensure users receive the correct URLs for\n * their invitations. Setting this to unknown values may produce unexpected/incorrect behaviors.\n * If environment is not known, do this set this property.\n */\n @Prop() environment: string = '';\n\n /**\n * Whether to show the cancel button. It may be useful to disable this in environments where\n * the embed is shown in a non-wizard flow with its own navigation for the user to exit.\n */\n @Prop() showCancel = true;\n\n /**\n * Preselect a brand by key, overriding the organization default.\n */\n @Prop({mutable: true}) brandKey = '';\n\n /**\n * The user is sending an envelope the form and clicked send.\n */\n @Event({composed: true}) beforeSend: EventEmitter<ISendEventDetail>;\n\n /**\n * The user completed the form and clicked send.\n */\n @Event({composed: true}) send: EventEmitter<ISentEventDetail>;\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 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 /**\n * Event fired when the user enters text in a search field. The parent application may use this to update\n * the `contactSuggestions` property.\n */\n @Event({composed: true}) searchContacts: EventEmitter<IContactSearchEvent>;\n\n private swipeStart: {x: number; y: number; time: number} | null = null;\n private swallowNextClick = false;\n private loadedOrganizationId = '';\n\n @State() containerId = `verdocs-send-${Math.random().toString(36).substring(2, 11)}`;\n @State() view: TSendView = 'main';\n @State() editingRoleId = '';\n @State() sessionContacts: {id: string; first_name: string; last_name: string; email: string; phone: string}[] = [];\n @State() sending = false;\n @State() brands: IBrand[] = [];\n @State() organization: IOrganization | null = null;\n @State() expiresInDays = '';\n @State() noContact = false;\n @State() senderDefaults = {name: '', email: ''};\n @State() senderName = '';\n @State() senderEmail = '';\n @State() rolesCompleted: Record<string, Partial<IRecipient>> = {};\n\n @State() loading = true;\n @State() template: ITemplate | null = null;\n\n disconnectedCallback() {\n this.unlistenToTemplate();\n }\n\n componentDidLoad() {\n this.el.addEventListener(\n 'click',\n e => {\n if (this.swallowNextClick) {\n this.swallowNextClick = false;\n e.stopPropagation();\n e.preventDefault();\n }\n },\n true,\n );\n }\n\n // Make off-canvas controls leave the tab order\n componentDidRender() {\n updateScrollFade(this.el.querySelector('.detail-body'));\n this.el.querySelector('.main-pane')?.toggleAttribute('inert', this.view !== 'main');\n this.el.querySelector('.detail-pane')?.toggleAttribute('inert', this.view === 'main');\n }\n\n async listenToTemplate() {\n console.log('[SEND] Loading template', this.templateId);\n this.unlistenToTemplate();\n Store.subscribe(\n 'templates',\n this.templateId,\n () => getTemplate(this.endpoint, this.templateId),\n true,\n (template: ITemplate) => {\n console.log('[SEND] Got new template', template);\n this.template = template;\n this.loading = false;\n this.rolesCompleted = {};\n this.view = 'main';\n this.editingRoleId = '';\n this.recomputeRolesCompleted();\n this.loadBrands();\n },\n );\n }\n\n loadBrands() {\n const organizationId = this.template?.organization_id;\n if (!organizationId || organizationId === this.loadedOrganizationId) {\n return;\n }\n\n const changedOrganization = !!this.loadedOrganizationId;\n this.loadedOrganizationId = organizationId;\n this.brands = [];\n this.organization = null;\n if (changedOrganization) {\n this.brandKey = '';\n }\n\n const stillCurrent = () => this.template?.organization_id === organizationId;\n\n getBrands(this.endpoint, organizationId)\n .then(brands => {\n if (stillCurrent()) {\n this.brands = brands || [];\n }\n })\n .catch(e => console.log('[SEND] Unable to load brands', e));\n\n getOrganization(this.endpoint, organizationId)\n .then(organization => {\n if (stillCurrent()) {\n this.organization = organization;\n }\n })\n .catch(e => console.log('[SEND] Unable to load organization', e));\n }\n\n handleExpiryInput(e: any) {\n const digits = (e.target.value || '').replace(/[^0-9]/g, '');\n this.expiresInDays = digits ? String(Math.min(Math.max(Number(digits), MIN_EXPIRY_DAYS), MAX_EXPIRY_DAYS)) : '';\n e.target.value = this.expiresInDays;\n }\n\n effectiveExpiryDays(): number {\n const days = Number(this.expiresInDays);\n return days >= MIN_EXPIRY_DAYS ? days : DEFAULT_EXPIRY_DAYS;\n }\n\n expiresAt(): Date {\n return new Date(Date.now() + this.effectiveExpiryDays() * 24 * 60 * 60 * 1000);\n }\n\n unlistenToTemplate() {\n if (this.templateListenerId) {\n Store.store.delListener(this.templateListenerId);\n this.templateListenerId = null;\n }\n }\n\n @Method()\n async reset() {\n this.rolesCompleted = {};\n this.view = 'main';\n this.editingRoleId = '';\n this.brandKey = '';\n this.expiresInDays = '';\n this.noContact = false;\n this.senderName = '';\n this.senderEmail = '';\n }\n\n // sender_name and sender_email are the contact for recipient questions and the completion\n // notice. They default to the signed-in user and are only sent when edited away from that.\n // The From line of the invitation email is the brand's (then the org's) and is not set here.\n effectiveSenderName() {\n return this.senderName || this.senderDefaults.name;\n }\n\n effectiveSenderEmail() {\n return this.senderEmail || this.senderDefaults.email;\n }\n\n senderOverrides() {\n const name = this.senderName.trim();\n const email = this.senderEmail.trim();\n return {\n sender_name: name && name !== this.senderDefaults.name ? name : undefined,\n sender_email: email && email !== this.senderDefaults.email ? email : undefined,\n };\n }\n\n @Watch('templateId')\n onTemplateIdChanged(newTemplateId: string) {\n console.log('[SEND] Template ID changed', newTemplateId);\n this.listenToTemplate();\n }\n\n async componentWillLoad() {\n try {\n this.endpoint.onSessionChanged((_endpoint, _session, profile) => {\n if (!profile) {\n return;\n }\n\n const me = {\n id: profile.id,\n first_name: profile.first_name,\n last_name: profile.last_name,\n email: profile.email,\n phone: profile.phone,\n };\n\n if (profile) {\n this.senderDefaults = {name: formatFullName(profile), email: profile.email || ''};\n this.sessionContacts = [me];\n\n getOrganizationContacts(this.endpoint)\n .then(contacts => {\n console.log('[SEND] Got contacts', contacts);\n this.sessionContacts = [...contacts, me];\n })\n .catch(e => {\n console.log('[SEND] Error getting contacts', e);\n });\n }\n });\n\n this.endpoint.loadSession();\n\n if (!this.endpoint.session) {\n console.log('[SEND] Unable to start Send operation, must be authenticated');\n return;\n }\n\n if (!this.templateId) {\n console.log(`[SEND] Missing required template ID ${this.templateId}`);\n return;\n }\n\n this.listenToTemplate();\n } catch (e) {\n console.log('[SEND] Error with send session', e);\n this.sdkError?.emit(new SDKError(e.message, e.response?.status, e.response?.data));\n }\n }\n\n recomputeRolesCompleted() {\n this.rolesCompleted = {};\n\n const rolesAtLevel: Record<number, Partial<IRecipient>[]> = {};\n (this.template?.roles || []).forEach(role => {\n const level = role.sequence;\n rolesAtLevel[level] ||= [];\n const id = `r-${level}-${rolesAtLevel[level].length}`;\n rolesAtLevel[level].push({...role, id, role_name: role.name, first_name: role.first_name, last_name: role.last_name});\n\n // if (role.first_name && (isValidEmail(role.email) || isValidPhone(role.phone))) {\n if (role.first_name && isValidEmail(role.email)) {\n this.rolesCompleted[id] = {...role, id, role_name: role.name, first_name: role.first_name, last_name: role.last_name};\n }\n });\n }\n\n getSequenceNumbers() {\n // This is cleaner with a Set but we found a regression in some target environments where\n // this breaks down. Reverting to an older technique while we diagnose it.\n const sequences: Record<number, boolean> = {};\n (this.template?.roles || []).forEach(role => {\n sequences[role.sequence] = true;\n });\n return Object.keys(sequences)\n .map(s => +s)\n .sort((a, b) => a - b);\n }\n\n getRolesAtLevel(level: number) {\n const rolesAtLevel = (this.template?.roles || [])\n .filter(role => role.sequence === level)\n .map((role, index) => ({\n ...role,\n id: `r-${level}-${index}`,\n role_name: role.name,\n first_name: role.first_name,\n last_name: role.last_name,\n }));\n return rolesAtLevel as Partial<IRecipient>[];\n }\n\n getRoleById(id: string): Partial<IRecipient> | null {\n for (const level of this.getSequenceNumbers()) {\n const match = this.getRolesAtLevel(level).find(role => role.id === id);\n if (match) {\n return match;\n }\n }\n\n return null;\n }\n\n // We only show options the sender switched on.\n getRecipientOptionLabels(recipient: Partial<IRecipient> | undefined): string[] {\n if (!recipient) {\n return [];\n }\n\n const labels = (recipient.auth_methods || []).filter(method => method !== 'email').map(method => AUTH_METHOD_LABELS[method] || method);\n if (recipient.delegator) {\n labels.push('May delegate');\n }\n\n if (recipient.name_locked) {\n labels.push('Name locked');\n }\n\n return labels;\n }\n\n getDefaultBrand(): IBrand | null {\n const defaultId = this.organization?.default_brand_id;\n return (defaultId && this.brands.find(brand => brand.id === defaultId)) || null;\n }\n\n getDefaultBrandLabel() {\n const name = this.getDefaultBrand()?.name;\n return `Default (${name || 'Verdocs'})`;\n }\n\n getSelectedBrandLabel() {\n if (!this.brandKey) {\n return this.getDefaultBrandLabel();\n }\n\n const brand = this.brands.find(b => b.key === this.brandKey);\n return brand?.name || brand?.key || this.brandKey;\n }\n\n showView(view: TSendView) {\n this.view = view;\n }\n\n handleSelectContact(e: any, role: Partial<IRecipient>) {\n e.preventDefault();\n this.rolesCompleted = {...this.rolesCompleted, [role.id]: {...role, ...e.detail}};\n this.editingRoleId = '';\n this.view = 'main';\n }\n\n handleClickRole(e: any, role: Partial<IRecipient>) {\n e.stopPropagation();\n this.editingRoleId = role.id;\n this.view = 'recipient';\n }\n\n handleSend(e: any) {\n if (this.sending) {\n console.log('[SEND] Skipping duplicate send', e);\n return;\n }\n\n console.log('[SEND] Sending', e);\n e.preventDefault();\n e.stopPropagation();\n\n this.sending = true;\n const localeData = Intl.DateTimeFormat().resolvedOptions();\n\n const details: ICreateEnvelopeFromTemplateRequest = {\n template_id: this.templateId,\n name: this.template?.name || 'New Envelope',\n environment: this.environment,\n initial_reminder: 0,\n followup_reminders: 0,\n recipients: Object.values(this.rolesCompleted) as ICreateEnvelopeRecipientFromTemplate[],\n timezone: localeData.timeZone,\n locale: localeData.locale,\n expires_at: this.expiresAt().toISOString(),\n };\n\n details.no_contact = this.noContact;\n const {sender_name, sender_email} = this.senderOverrides();\n if (sender_name) {\n details.sender_name = sender_name;\n }\n if (sender_email) {\n details.sender_email = sender_email;\n }\n if (this.brandKey) {\n details.brand_key = this.brandKey;\n }\n\n const beforeSendResult = this.beforeSend.emit({...details, name: details.name!, template: this.template});\n if (beforeSendResult.defaultPrevented) {\n console.log('[SEND] Send cancelled by parent', details);\n this.sending = false;\n return;\n }\n\n console.log('[SEND] Creating envelope', details);\n createEnvelope(this.endpoint, details)\n .then(r => {\n console.log('[SEND] Send envelope', r);\n this.reset().catch((e: any) => console.log('Unknown Error', e));\n this.sending = false;\n this.send?.emit({...details, name: details.name!, envelope_id: r.id, envelope: r});\n })\n .catch(e => {\n console.log('[SEND] Send error', e);\n VerdocsToast(e.response?.data?.error || 'Error creating envelope, please try again later.');\n this.sending = false;\n this.sdkError?.emit(e);\n });\n }\n\n handleCancel(e: any) {\n e.stopPropagation();\n this.exit?.emit();\n }\n\n handleSwipeStart(e: PointerEvent) {\n this.swallowNextClick = false;\n const pane = e.currentTarget as HTMLElement;\n const rect = pane.getBoundingClientRect();\n const onTextEntry = !!(e.target as HTMLElement)?.closest?.('input, textarea, select, [contenteditable]');\n if (this.view === 'main' || onTextEntry || e.clientX - rect.left > rect.width * SWIPE_START_FRACTION) {\n this.swipeStart = null;\n return;\n }\n\n this.swipeStart = {x: e.clientX, y: e.clientY, time: Date.now()};\n }\n\n handleSwipeEnd(e: PointerEvent) {\n const start = this.swipeStart;\n this.swipeStart = null;\n if (!start) {\n return;\n }\n\n const dx = e.clientX - start.x;\n const dy = Math.abs(e.clientY - start.y);\n if (dx >= SWIPE_MIN_DISTANCE && dx > dy && Date.now() - start.time <= SWIPE_MAX_DURATION) {\n this.swallowNextClick = true;\n this.showView('main');\n }\n }\n\n renderDetailHeader(title: any) {\n return (\n <div class=\"detail-header\">\n <button type=\"button\" class=\"back\" onClick={() => this.showView('main')}>\n <span class=\"icon\" innerHTML={chevronLeftIcon} />\n Back\n </button>\n <div class=\"detail-title\">{title}</div>\n <div class=\"detail-header-spacer\" />\n </div>\n );\n }\n\n renderDetailBody(content: any) {\n return (\n <div class=\"detail-body-wrap\">\n <div class=\"detail-body\" onScroll={(e: any) => updateScrollFade(e.target)}>\n {content}\n </div>\n <div class=\"scroll-fade\" />\n </div>\n );\n }\n\n renderDoneButton() {\n return (\n <div class=\"detail-footer\">\n <verdocs-button label=\"Done\" size=\"small\" onClick={() => this.showView('main')} />\n </div>\n );\n }\n\n renderRecipientView() {\n const role = this.getRoleById(this.editingRoleId);\n if (!role) {\n return <div class=\"detail recipient-detail\">{this.renderDetailHeader('Recipient')}</div>;\n }\n\n const roleIndex = getRoleIndex(this.template, role.role_name);\n return (\n <div class=\"detail recipient-detail\">\n {this.renderDetailHeader([<span class=\"role-dot\" style={{backgroundColor: getRGBA(roleIndex)}} />, role.role_name])}\n <verdocs-contact-picker\n key={role.id}\n showCancel={false}\n onExit={() => this.showView('main')}\n onNext={e => this.handleSelectContact(e, role)}\n contactSuggestions={this.sessionContacts}\n templateRole={(this.rolesCompleted[role.id] ?? role) as IRecipient}\n onSearchContacts={e => this.searchContacts?.emit(e.detail)}\n />\n </div>\n );\n }\n\n renderBrandSwatch(brand: IBrand | null, fallbackInitial: string) {\n const image = brand?.favicon_url || brand?.thumbnail_url || (brand ? null : VERDOCS_LOGO_URL);\n if (image) {\n return (\n <span class=\"swatch logo\">\n <img src={image} alt=\"\" />\n </span>\n );\n }\n\n return (\n <span class=\"swatch\" style={{backgroundColor: brand?.primary_color || '#4c56cb'}}>\n {fallbackInitial.substring(0, 2).toUpperCase()}\n </span>\n );\n }\n\n renderBrandOption(key: string, label: string, sub: string, swatch: any) {\n return (\n <button type=\"button\" class={{option: true, selected: this.brandKey === key}} onClick={() => (this.brandKey = key)}>\n <span class=\"radio\" />\n {swatch}\n <span class=\"option-label\">\n {label}\n <small>{sub}</small>\n </span>\n </button>\n );\n }\n\n renderBrandView() {\n const defaultBrand = this.getDefaultBrand();\n const others = this.brands.filter(brand => brand.id !== defaultBrand?.id).sort((a, b) => (a.name || a.key).localeCompare(b.name || b.key));\n const hasBrands = this.brands.length > 0;\n\n return (\n <div class=\"detail\">\n {this.renderDetailHeader('Brand')}\n {this.renderDetailBody([\n <div class=\"option-list\">\n {this.renderBrandOption('', this.getDefaultBrandLabel(), 'Organization default', this.renderBrandSwatch(defaultBrand, defaultBrand?.name || 'V'))}\n {others.length > 0 && <div class=\"option-divider\" />}\n {others.map(brand => this.renderBrandOption(brand.key, brand.name || brand.key, brand.key, this.renderBrandSwatch(brand, brand.name || brand.key)))}\n </div>,\n !hasBrands && (\n <p class=\"hint\">\n Configure the look and feel of the signing experience by{' '}\n <a href={`${getWebAppUrl(this.endpoint)}/settings/branding`} target=\"_blank\" rel=\"noopener\">\n Creating a Brand\n <span class=\"icon\" innerHTML={externalLinkIcon} />\n </a>\n .\n </p>\n ),\n ])}\n {this.renderDoneButton()}\n </div>\n );\n }\n\n renderExpiresView() {\n const expiresAt = this.expiresAt();\n const when = `${expiresAt.toLocaleDateString(undefined, {month: 'short', day: 'numeric', year: 'numeric'})} at ${expiresAt.toLocaleTimeString(undefined, {hour: 'numeric', minute: '2-digit'})}`;\n\n return (\n <div class=\"detail\">\n {this.renderDetailHeader('Expiration')}\n {this.renderDetailBody([\n <div class=\"expires-field\">\n <input\n type=\"text\"\n inputMode=\"numeric\"\n aria-label=\"Expires in (days)\"\n placeholder={String(DEFAULT_EXPIRY_DAYS)}\n value={this.expiresInDays}\n disabled={this.sending}\n onInput={(e: any) => this.handleExpiryInput(e)}\n />\n <span class=\"suffix\">days</span>\n </div>,\n <p class=\"hint\">\n This envelope will expire on {when}. Expirations may be set from {MIN_EXPIRY_DAYS}-{MAX_EXPIRY_DAYS} days. If left blank, this will default to {DEFAULT_EXPIRY_DAYS}.\n </p>,\n ])}\n {this.renderDoneButton()}\n </div>\n );\n }\n\n renderSenderView() {\n const validEmail = !this.senderEmail.trim() || isValidEmail(this.senderEmail.trim());\n return (\n <div class=\"detail\">\n {this.renderDetailHeader('Sender')}\n {this.renderDetailBody([\n <div class=\"sender-field\">\n <label htmlFor={`${this.containerId}-sender-name`}>Name</label>\n <input\n id={`${this.containerId}-sender-name`}\n type=\"text\"\n value={this.effectiveSenderName()}\n disabled={this.sending}\n onInput={(e: any) => (this.senderName = e.target.value)}\n />\n </div>,\n <div class=\"sender-field\">\n <label htmlFor={`${this.containerId}-sender-email`}>Email</label>\n <input\n id={`${this.containerId}-sender-email`}\n type=\"email\"\n value={this.effectiveSenderEmail()}\n disabled={this.sending}\n onInput={(e: any) => (this.senderEmail = e.target.value)}\n />\n {!validEmail && <div class=\"field-error\">Enter a valid email address.</div>}\n </div>,\n <div class=\"notice\">\n <span class=\"icon\" innerHTML={infoIcon} />\n <div>\n Specify where envelope-completed email notifications and \"Ask a Question\" submissions are delivered.\n To customize the \"From\" address for email notifications, please configure those in{' '}\n <a href={`${getWebAppUrl(this.endpoint)}/settings/brands`} target=\"_blank\" rel=\"noopener\">\n Brands\n <span class=\"icon\" innerHTML={externalLinkIcon} />\n </a>{' '}\n .\n </div>\n </div>,\n ])}\n {this.renderDoneButton()}\n </div>\n );\n }\n\n renderNotificationsView() {\n return (\n <div class=\"detail\">\n {this.renderDetailHeader('Notifications')}\n {this.renderDetailBody([\n <verdocs-checkbox size=\"small\" label=\"Disable notifications\" checked={this.noContact} onInput={(e: any) => (this.noContact = !!e.target.checked)} />,\n this.noContact && (\n <div class=\"warning\">\n <span class=\"icon\" innerHTML={warningIcon} />\n <div>\n Disabling notifications turns off invitations and reminders to recipients as well as status updates to you. You may obtain invite links in the recipient summary or\n via an API call. We strongly recommend enabling{' '}\n <a href={`${getWebAppUrl(this.endpoint)}/settings/webhooks`} target=\"_blank\" rel=\"noopener\">\n Webhooks\n <span class=\"icon\" innerHTML={externalLinkIcon} />\n </a>{' '}\n to help automate this process.\n </div>\n </div>\n ),\n ])}\n {this.renderDoneButton()}\n </div>\n );\n }\n\n renderDetail() {\n switch (this.view) {\n case 'recipient':\n return this.renderRecipientView();\n case 'brand':\n return this.renderBrandView();\n case 'expires':\n return this.renderExpiresView();\n case 'notifications':\n return this.renderNotificationsView();\n case 'sender':\n return this.renderSenderView();\n default:\n return null;\n }\n }\n\n render() {\n if (this.loading) {\n return (\n <Host>\n <verdocs-loader />\n </Host>\n );\n }\n\n if (!this.endpoint.session) {\n return (\n <Host style={{display: 'flex'}}>\n <verdocs-component-error message=\"You must be authenticated to use this module.\" />\n </Host>\n );\n }\n\n const levels = this.getSequenceNumbers();\n const rolesAssigned = Object.values(this.rolesCompleted).filter(recipient => isValidEmail(recipient.email) && recipient.first_name && recipient.last_name);\n const allRolesAssigned = rolesAssigned.length >= getRoleNames(this.template).length;\n const assignedEmails = rolesAssigned.map(r => r.email.toLowerCase());\n const hasDuplicateEmails = new Set(assignedEmails).size < assignedEmails.length;\n const expiresAt = this.expiresAt();\n const expiresShort = expiresAt.toLocaleDateString(undefined, {month: 'short', day: 'numeric'});\n\n return (\n <Host class={{'sendable': this.template?.is_sendable, 'detail-open': this.view !== 'main'}}>\n <div class=\"track\">\n <div class=\"pane main-pane\" aria-hidden={this.view !== 'main' ? 'true' : 'false'}>\n <div class=\"section-title\">Recipients</div>\n <div class=\"recipients\">\n {levels.map(level => [\n levels.length > 1 && <div class=\"step\">Step {level}</div>,\n this.getRolesAtLevel(level).map(role => {\n const roleIndex = getRoleIndex(this.template, role.role_name);\n const completed = this.rolesCompleted[role.id];\n const assigned = completed && rolesAssigned.findIndex(r => r.role_name === role.role_name) > -1;\n const optionLabels = this.getRecipientOptionLabels(completed);\n\n return (\n <button type=\"button\" class=\"recipient\" data-ri={roleIndex} data-rn={role.role_name} onClick={e => this.handleClickRole(e, role)}>\n <span class=\"role-dot\" style={{backgroundColor: getRGBA(roleIndex)}} />\n <span class=\"who\">\n <span class=\"role-name\">{role.role_name}</span>\n {assigned ? (\n <span class=\"who-detail\">\n {formatFullName(completed)} · {completed.email}\n </span>\n ) : (\n <span class=\"who-detail configure\">Configure recipient</span>\n )}\n {optionLabels.length > 0 && (\n <span class=\"options\">\n {optionLabels.map(label => (\n <span class=\"pill\">{label}</span>\n ))}\n </span>\n )}\n </span>\n <span class=\"chevron\" innerHTML={chevronRightIcon} />\n </button>\n );\n }),\n ])}\n </div>\n\n <div class=\"section-title delivery-title\">Delivery</div>\n <div class=\"delivery\">\n <button type=\"button\" class=\"kv\" onClick={() => this.showView('brand')} disabled={this.sending}>\n <span class=\"key\">Brand</span>\n <span class=\"value\">{this.getSelectedBrandLabel()}</span>\n <span class=\"chevron\" innerHTML={chevronRightIcon} />\n </button>\n <button type=\"button\" class=\"kv\" onClick={() => this.showView('expires')} disabled={this.sending}>\n <span class=\"key\">Expires</span>\n <span class=\"value\">\n {this.effectiveExpiryDays()} days <small>· {expiresShort}</small>\n </span>\n <span class=\"chevron\" innerHTML={chevronRightIcon} />\n </button>\n <button type=\"button\" class=\"kv\" onClick={() => this.showView('sender')} disabled={this.sending}>\n <span class=\"key\">Sender</span>\n <span class=\"value stacked\">\n <span class=\"line\">{this.effectiveSenderName() || this.effectiveSenderEmail()}</span>\n {this.effectiveSenderName() && this.effectiveSenderEmail() ? <small class=\"line\">{this.effectiveSenderEmail()}</small> : null}\n </span>\n <span class=\"chevron\" innerHTML={chevronRightIcon} />\n </button>\n <button type=\"button\" class=\"kv\" onClick={() => this.showView('notifications')} disabled={this.sending}>\n <span class=\"key\">Notifications</span>\n <span class={{value: true, off: this.noContact}}>{this.noContact ? 'Off' : 'On'}</span>\n <span class=\"chevron\" innerHTML={chevronRightIcon} />\n </button>\n </div>\n\n <div class=\"main-spacer\" />\n\n <div class=\"buttons\">\n {hasDuplicateEmails && <div class=\"error-message\">Recipients cannot share the same email.</div>}\n {this.sending && <verdocs-spinner />}\n {this.showCancel && <verdocs-button label=\"Cancel\" size=\"small\" variant=\"outline\" onClick={e => this.handleCancel(e)} disabled={this.sending} />}\n <verdocs-button label=\"Send\" size=\"small\" disabled={!allRolesAssigned || this.sending || hasDuplicateEmails} onClick={e => this.handleSend(e)} />\n </div>\n </div>\n\n <div\n class=\"pane detail-pane\"\n aria-hidden={this.view === 'main' ? 'true' : 'false'}\n onPointerDown={e => this.handleSwipeStart(e)}\n onPointerUp={e => this.handleSwipeEnd(e)}\n onPointerCancel={() => (this.swipeStart = null)}\n >\n {this.renderDetail()}\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- import{p as e,H as t,c as i,h as s,t as o}from"./p-yZBlG3YQ.js";import{VerdocsEndpoint as c,formatFullName as a,getActiveEntitlements as r,isValidEmail as n}from"@verdocs/js-sdk";import{c as l}from"./p-BCwFpXpV.js";import{d as p}from"./p-Bb5V9TQx.js";import{d}from"./p-C8yiLtCJ.js";import{d as h}from"./p-DreV6Npp.js";function u(e){const t=e===null||e===void 0?void 0:e.parentElement;if(!e||!t){return}const i=e.scrollHeight>e.clientHeight+1;const s=e.scrollTop+e.clientHeight>=e.scrollHeight-1;t.classList.toggle("scrollable",i);t.classList.toggle("at-end",s)}const m=()=>`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}`;const f=`<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>`;const v=`<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>`;const x=e(class e extends t{constructor(e){super();if(e!==false){this.__registerHost()}this.searchContacts=i(this,"searchContacts");this.exit=i(this,"exit");this.next=i(this,"next");this.endpoint=c.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-${Math.random().toString(36).substring(2,11)}`;this.lastNameFieldId=`verdocs-contact-picker-lastname-${Math.random().toString(36).substring(2,11)}`;this.emailFieldId=`verdocs-contact-picker-email-${Math.random().toString(36).substring(2,11)}`;this.phoneFieldId=`verdocs-contact-picker-phone-${Math.random().toString(36).substring(2,11)}`;this.activeEntitlements={};this.authMethodsLoading=true}async componentWillLoad(){this.endpoint.loadSession();if(this.templateRole){const e=a(this.templateRole);const t=e.split(" ");const i=this.templateRole.first_name||t.shift()||"";const s=this.templateRole.last_name||t.join(" ")||"";this.first_name=i;this.last_name=s;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||""}this.activeEntitlements=await r(this.endpoint).catch((e=>{console.warn("[CONTACT PICKER] Unable to load entitlements, continuing with base auth methods only",e);return{}}));this.authMethodsLoading=false;console.log("[CONTACT PICKER] Loaded entitlements",this.activeEntitlements)}componentDidRender(){const e=this.el.querySelector(".form-body");u(e);if(this.suggestionsEl&&this.namesRowEl&&e){this.suggestionsEl.style.top=`${this.namesRowEl.offsetTop+this.namesRowEl.offsetHeight-e.scrollTop+4}px`}}handleDocumentClick(e){if(this.showSuggestions&&!this.el.contains(e.target)){this.showSuggestions=false}}handleFirstNameChange(e){var t;this.first_name=e.target.value;(t=this.searchContacts)===null||t===void 0?void 0:t.emit({query:this.first_name})}handleLastNameChange(e){var t;this.last_name=e.target.value;(t=this.searchContacts)===null||t===void 0?void 0:t.emit({query:this.last_name})}handleCancel(e){var t;e.stopPropagation();this.showSuggestions=false;(t=this.exit)===null||t===void 0?void 0:t.emit()}handleSubmit(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})}handleSelectSuggestion(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}toggleAuthMethod(e){if(this.auth_methods.includes(e)){this.auth_methods=this.auth_methods.filter((t=>t!==e))}else{this.auth_methods=[...this.auth_methods,e]}}setSigningOption(e){this.delegator=e==="delegator";this.name_locked=e==="name_locked"}renderPill(e,t,i,o={}){return s("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&&s("span",{class:"pill-icon",innerHTML:v}),e)}render(){const e=this.first_name&&this.last_name&&n(this.email);const t=this.auth_methods.every((e=>{switch(e){case"passcode":return!!this.passcode;case"kba":return!!this.first_name&&!!this.last_name;case"email":return!!this.email;case"sms":return!!this.phone;default:return true}}));const i=e&&t;const o=!!this.activeEntitlements.sms_auth;const c=[{label:"Email OTP",value:"email"},{label:"Passcode",value:"passcode"},{label:"SMS OTP",value:"sms",locked:!o},{label:"KBA",value:"kba",locked:!this.activeEntitlements.kba_auth},{label:"ID check",value:"id",locked:!this.activeEntitlements.id_auth}];const r=this.delegator?"delegator":this.name_locked?"name_locked":"none";return s("form",{onSubmit:e=>e.preventDefault(),autocomplete:"off"},s("div",{class:"form-body-wrap"},s("div",{class:"form-body",onScroll:e=>{u(e.target);this.showSuggestions=false}},s("div",{class:"row names",ref:e=>this.namesRowEl=e},s("div",{class:"field"},s("label",{htmlFor:this.firstNameFieldId},"First name"),s("input",{id:this.firstNameFieldId,name:this.firstNameFieldId,type:"text","data-lpignore":"true",autocomplete:"blocked","aria-autocomplete":"none",value:this.first_name,onFocus:()=>{setTimeout((()=>{var e;this.showSuggestions=((e=this.contactSuggestions)===null||e===void 0?void 0:e.length)>0}),100)},onInput:e=>this.handleFirstNameChange(e)})),s("div",{class:"field"},s("label",{htmlFor:this.lastNameFieldId},"Last name"),s("input",{id:this.lastNameFieldId,name:this.lastNameFieldId,type:"text","data-lpignore":"true",autocomplete:"blocked","aria-autocomplete":"none",value:this.last_name,onFocus:()=>{setTimeout((()=>{var e;this.showSuggestions=((e=this.contactSuggestions)===null||e===void 0?void 0:e.length)>0}),100)},onInput:e=>this.handleLastNameChange(e)}))),s("div",{class:"field"},s("label",{htmlFor:this.emailFieldId},"Email"),s("input",{id:this.emailFieldId,name:this.emailFieldId,type:"text","data-lpignore":"true",autoComplete:"blocked","aria-autocomplete":"none",value:this.email,onFocus:()=>this.showSuggestions=false,onInput:e=>this.email=e.target.value})),o&&s("div",{class:"field"},s("label",{htmlFor:this.phoneFieldId},"Phone ",s("span",{class:"optional"},"(optional)")),s("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:()=>this.showSuggestions=false,onInput:e=>{this.phone=l(e.target.value)}})),s("div",{class:"group"},s("div",{class:"group-label"},"Verification"),this.authMethodsLoading?s("verdocs-spinner",{size:10,mode:"dark"}):s("div",{class:"pills"},c.map((e=>this.renderPill(e.label,this.auth_methods.includes(e.value),(()=>this.toggleAuthMethod(e.value)),{locked:e.locked,title:e.locked?"Please contact sales@verdocs.com to enable this feature.":undefined})))),this.auth_methods.includes("passcode")&&s("div",{class:"passcode"},s("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:()=>this.showSuggestions=false,onInput:e=>this.passcode=e.target.value}),s("span",{class:"passcode-hint"},"PIN or passcode shared separately with the recipient ahead of time"))),s("div",{class:"group"},s("div",{class:"group-label"},"Signing options"),s("div",{class:"pills"},this.renderPill("None",r==="none",(()=>this.setSigningOption("none"))),this.renderPill("May delegate",r==="delegator",(()=>this.setSigningOption("delegator"))),this.renderPill("Name locked",r==="name_locked",(()=>this.setSigningOption("name_locked"))))),s("div",{class:"field"},s("label",{htmlFor:"verdocs-contact-picker-message"},"Message ",s("span",{class:"optional"},"(optional)")),s("textarea",{id:"verdocs-contact-picker-message",name:"verdocs-contact-picker-message","data-lpignore":"true",autocomplete:"blocked",placeholder:"Add a message to the invitation",onFocus:()=>this.showSuggestions=false,onInput:e=>this.message=e.target.value},this.message))),s("div",{class:"scroll-fade"}),this.showSuggestions&&s("div",{class:"suggestions",role:"listbox",ref:e=>this.suggestionsEl=e},this.contactSuggestions.filter((e=>{var t;return!this.first_name||((t=e.first_name)===null||t===void 0?void 0:t.toLowerCase().includes(this.first_name.toLowerCase()))})).map((e=>{var t;return s("div",{key:(t=e.id)!==null&&t!==void 0?t:e.email,class:"suggestion",onClick:t=>this.handleSelectSuggestion(t,e)},e.picture?s("img",{alt:"Avatar",class:"avatar",src:e.picture}):s("div",{class:"avatar",innerHTML:f}),s("div",{class:"details"},s("div",{class:"name"},a(e)),e.email&&s("div",{class:"destination"},e.email),e.phone&&s("div",{class:"destination"},e.phone)))})))),s("div",{class:"buttons"},this.showCancel&&s("verdocs-button",{label:"Cancel",variant:"text",size:"small",onClick:e=>this.handleCancel(e)}),s("verdocs-button",{label:"Done",size:"small",disabled:!i,onClick:!i?()=>{}:e=>this.handleSubmit(e)})))}get el(){return this}static get style(){return m()}},[0,"verdocs-contact-picker",{endpoint:[16],templateRole:[16],contactSuggestions:[16],showCancel:[4,"show-cancel"],first_name:[32],last_name:[32],email:[32],phone:[32],zip:[32],address:[32],message:[32],showSuggestions:[32],showMessage:[32],delegator:[32],name_locked:[32],auth_methods:[32],passcode:[32],firstNameFieldId:[32],lastNameFieldId:[32],emailFieldId:[32],phoneFieldId:[32],activeEntitlements:[32],authMethodsLoading:[32]},[[4,"click","handleDocumentClick"]]]);function k(){if(typeof customElements==="undefined"){return}const e=["verdocs-contact-picker","verdocs-button","verdocs-flag","verdocs-spinner"];e.forEach((e=>{switch(e){case"verdocs-contact-picker":if(!customElements.get(o(e))){customElements.define(o(e),x)}break;case"verdocs-button":if(!customElements.get(o(e))){p()}break;case"verdocs-flag":if(!customElements.get(o(e))){d()}break;case"verdocs-spinner":if(!customElements.get(o(e))){h()}break}}))}export{x as V,k as d,u};
2
- //# sourceMappingURL=p-ByrpRZ3E.js.map
1
+ import{p as e,H as t,c as i,h as s,t as o}from"./p-yZBlG3YQ.js";import{VerdocsEndpoint as c,formatFullName as a,getActiveEntitlements as r,isValidEmail as n}from"@verdocs/js-sdk";import{c as l}from"./p-BCwFpXpV.js";import{d as p}from"./p-Bb5V9TQx.js";import{d}from"./p-C8yiLtCJ.js";import{d as h}from"./p-DreV6Npp.js";function u(e){const t=e===null||e===void 0?void 0:e.parentElement;if(!e||!t){return}const i=e.scrollHeight>e.clientHeight+1;const s=e.scrollTop+e.clientHeight>=e.scrollHeight-1;t.classList.toggle("scrollable",i);t.classList.toggle("at-end",s)}const m=()=>`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}`;const f=`<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>`;const v=`<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>`;const x=e(class e extends t{constructor(e){super();if(e!==false){this.__registerHost()}this.searchContacts=i(this,"searchContacts");this.exit=i(this,"exit");this.next=i(this,"next");this.endpoint=c.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-${Math.random().toString(36).substring(2,11)}`;this.lastNameFieldId=`verdocs-contact-picker-lastname-${Math.random().toString(36).substring(2,11)}`;this.emailFieldId=`verdocs-contact-picker-email-${Math.random().toString(36).substring(2,11)}`;this.phoneFieldId=`verdocs-contact-picker-phone-${Math.random().toString(36).substring(2,11)}`;this.activeEntitlements={};this.authMethodsLoading=true}async componentWillLoad(){this.endpoint.loadSession();if(this.templateRole){const e=a(this.templateRole);const t=e.split(" ");const i=this.templateRole.first_name||t.shift()||"";const s=this.templateRole.last_name||t.join(" ")||"";this.first_name=i;this.last_name=s;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||""}this.activeEntitlements=await r(this.endpoint).catch((e=>{console.warn("[CONTACT PICKER] Unable to load entitlements, continuing with base auth methods only",e);return{}}));this.authMethodsLoading=false;console.log("[CONTACT PICKER] Loaded entitlements",this.activeEntitlements)}componentDidRender(){const e=this.el.querySelector(".form-body");u(e);if(this.suggestionsEl&&this.namesRowEl&&e){this.suggestionsEl.style.top=`${this.namesRowEl.offsetTop+this.namesRowEl.offsetHeight-e.scrollTop+4}px`}}handleDocumentClick(e){if(this.showSuggestions&&!this.el.contains(e.target)){this.showSuggestions=false}}handleFirstNameChange(e){var t;this.first_name=e.target.value;(t=this.searchContacts)===null||t===void 0?void 0:t.emit({query:this.first_name})}handleLastNameChange(e){var t;this.last_name=e.target.value;(t=this.searchContacts)===null||t===void 0?void 0:t.emit({query:this.last_name})}handleCancel(e){var t;e.stopPropagation();this.showSuggestions=false;(t=this.exit)===null||t===void 0?void 0:t.emit()}handleSubmit(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})}handleSelectSuggestion(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}toggleAuthMethod(e){if(this.auth_methods.includes(e)){this.auth_methods=this.auth_methods.filter((t=>t!==e))}else{this.auth_methods=[...this.auth_methods,e]}}setSigningOption(e){this.delegator=e==="delegator";this.name_locked=e==="name_locked"}renderPill(e,t,i,o={}){return s("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&&s("span",{class:"pill-icon",innerHTML:v}),e)}render(){const e=this.first_name&&this.last_name&&n(this.email);const t=(this.contactSuggestions||[]).filter((e=>{var t;return!this.first_name||((t=e.first_name)===null||t===void 0?void 0:t.toLowerCase().includes(this.first_name.toLowerCase()))}));const i=this.auth_methods.every((e=>{switch(e){case"passcode":return!!this.passcode;case"kba":return!!this.first_name&&!!this.last_name;case"email":return!!this.email;case"sms":return!!this.phone;default:return true}}));const o=e&&i;const c=!!this.activeEntitlements.sms_auth;const r=[{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}];const p=this.delegator?"delegator":this.name_locked?"name_locked":"none";return s("form",{onSubmit:e=>e.preventDefault(),autocomplete:"off"},s("div",{class:"form-body-wrap"},s("div",{class:"form-body",onScroll:e=>{u(e.target);this.showSuggestions=false}},s("div",{class:"row names",ref:e=>this.namesRowEl=e},s("div",{class:"field"},s("label",{htmlFor:this.firstNameFieldId},"First name"),s("input",{id:this.firstNameFieldId,name:this.firstNameFieldId,type:"text","data-lpignore":"true",autocomplete:"blocked","aria-autocomplete":"none",value:this.first_name,onFocus:()=>{setTimeout((()=>{var e;this.showSuggestions=((e=this.contactSuggestions)===null||e===void 0?void 0:e.length)>0}),100)},onInput:e=>this.handleFirstNameChange(e)})),s("div",{class:"field"},s("label",{htmlFor:this.lastNameFieldId},"Last name"),s("input",{id:this.lastNameFieldId,name:this.lastNameFieldId,type:"text","data-lpignore":"true",autocomplete:"blocked","aria-autocomplete":"none",value:this.last_name,onFocus:()=>{setTimeout((()=>{var e;this.showSuggestions=((e=this.contactSuggestions)===null||e===void 0?void 0:e.length)>0}),100)},onInput:e=>this.handleLastNameChange(e)}))),s("div",{class:"field"},s("label",{htmlFor:this.emailFieldId},"Email"),s("input",{id:this.emailFieldId,name:this.emailFieldId,type:"text","data-lpignore":"true",autoComplete:"blocked","aria-autocomplete":"none",value:this.email,onFocus:()=>this.showSuggestions=false,onInput:e=>this.email=e.target.value})),c&&s("div",{class:"field"},s("label",{htmlFor:this.phoneFieldId},"Phone ",s("span",{class:"optional"},"(optional)")),s("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:()=>this.showSuggestions=false,onInput:e=>{this.phone=l(e.target.value)}})),s("div",{class:"group"},s("div",{class:"group-label"},"Verification"),this.authMethodsLoading?s("verdocs-spinner",{size:10,mode:"dark"}):s("div",{class:"pills"},r.map((e=>this.renderPill(e.label,this.auth_methods.includes(e.value),(()=>this.toggleAuthMethod(e.value)),{locked:e.locked,title:e.locked?"Please contact sales@verdocs.com to enable this feature.":undefined})))),this.auth_methods.includes("passcode")&&s("div",{class:"passcode"},s("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:()=>this.showSuggestions=false,onInput:e=>this.passcode=e.target.value}),s("span",{class:"passcode-hint"},"PIN or passcode shared separately with the recipient ahead of time"))),s("div",{class:"group"},s("div",{class:"group-label"},"Signing options"),s("div",{class:"pills"},this.renderPill("None",p==="none",(()=>this.setSigningOption("none"))),this.renderPill("May delegate",p==="delegator",(()=>this.setSigningOption("delegator"))),this.renderPill("Name locked",p==="name_locked",(()=>this.setSigningOption("name_locked"))))),s("div",{class:"field"},s("label",{htmlFor:"verdocs-contact-picker-message"},"Message ",s("span",{class:"optional"},"(optional)")),s("textarea",{id:"verdocs-contact-picker-message",name:"verdocs-contact-picker-message","data-lpignore":"true",autocomplete:"blocked",placeholder:"Add a message to the invitation",onFocus:()=>this.showSuggestions=false,onInput:e=>this.message=e.target.value},this.message))),s("div",{class:"scroll-fade"}),this.showSuggestions&&t.length>0&&s("div",{class:"suggestions",role:"listbox",ref:e=>this.suggestionsEl=e},t.map((e=>{var t;return s("div",{key:(t=e.id)!==null&&t!==void 0?t:e.email,class:"suggestion",onClick:t=>this.handleSelectSuggestion(t,e)},e.picture?s("img",{alt:"Avatar",class:"avatar",src:e.picture}):s("div",{class:"avatar",innerHTML:f}),s("div",{class:"details"},s("div",{class:"name"},a(e)),e.email&&s("div",{class:"destination"},e.email),e.phone&&s("div",{class:"destination"},e.phone)))})))),s("div",{class:"buttons"},this.showCancel&&s("verdocs-button",{label:"Cancel",variant:"text",size:"small",onClick:e=>this.handleCancel(e)}),s("verdocs-button",{label:"Done",size:"small",disabled:!o,onClick:!o?()=>{}:e=>this.handleSubmit(e)})))}get el(){return this}static get style(){return m()}},[0,"verdocs-contact-picker",{endpoint:[16],templateRole:[16],contactSuggestions:[16],showCancel:[4,"show-cancel"],first_name:[32],last_name:[32],email:[32],phone:[32],zip:[32],address:[32],message:[32],showSuggestions:[32],showMessage:[32],delegator:[32],name_locked:[32],auth_methods:[32],passcode:[32],firstNameFieldId:[32],lastNameFieldId:[32],emailFieldId:[32],phoneFieldId:[32],activeEntitlements:[32],authMethodsLoading:[32]},[[4,"click","handleDocumentClick"]]]);function k(){if(typeof customElements==="undefined"){return}const e=["verdocs-contact-picker","verdocs-button","verdocs-flag","verdocs-spinner"];e.forEach((e=>{switch(e){case"verdocs-contact-picker":if(!customElements.get(o(e))){customElements.define(o(e),x)}break;case"verdocs-button":if(!customElements.get(o(e))){p()}break;case"verdocs-flag":if(!customElements.get(o(e))){d()}break;case"verdocs-spinner":if(!customElements.get(o(e))){h()}break}}))}export{x as V,k as d,u};
2
+ //# sourceMappingURL=p-lCn8WPSe.js.map