@hubsync/esign-web-sdk 6.5.6 → 6.5.7

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 (78) hide show
  1. package/dist/cjs/loader.cjs.js +1 -1
  2. package/dist/cjs/verdocs-adopt-signature-dialog.verdocs-delegate-dialog.verdocs-disclosure-dialog.verdocs-kba-dialog.verdocs-otp-dialog.verdocs-passcode-dialog.verdocs-signing-progress.verdocs-view.entry.cjs.js.map +1 -1
  3. package/dist/cjs/verdocs-adopt-signature-dialog_8.cjs.entry.js +1 -8
  4. package/dist/cjs/verdocs-field-attachment_11.cjs.entry.js +1 -1
  5. package/dist/cjs/verdocs-sign.cjs.entry.js +126 -31
  6. package/dist/cjs/verdocs-sign.entry.cjs.js.map +1 -1
  7. package/dist/cjs/verdocs-web-sdk.cjs.js +1 -1
  8. package/dist/collection/components/dialogs/verdocs-signing-progress/verdocs-signing-progress.js +1 -8
  9. package/dist/collection/components/dialogs/verdocs-signing-progress/verdocs-signing-progress.js.map +1 -1
  10. package/dist/collection/components/embeds/verdocs-sign/verdocs-sign.js +130 -32
  11. package/dist/collection/components/embeds/verdocs-sign/verdocs-sign.js.map +1 -1
  12. package/dist/collection/components/fields/verdocs-field-radio/verdocs-field-radio.css +4 -5
  13. package/dist/components/{p-GnE8WZrr.js → p-1MIt5Mm9.js} +4 -4
  14. package/dist/components/{p-GnE8WZrr.js.map → p-1MIt5Mm9.js.map} +1 -1
  15. package/dist/components/{p-LfDLlp5r.js → p-BvPd1sPA.js} +3 -3
  16. package/dist/components/p-BvPd1sPA.js.map +1 -0
  17. package/dist/components/{p-COiuyfp1.js → p-CY3peFvA.js} +3 -10
  18. package/dist/components/p-CY3peFvA.js.map +1 -0
  19. package/dist/components/{p-4KJMQrRB.js → p-D3-Ing_B.js} +4 -4
  20. package/dist/components/{p-4KJMQrRB.js.map → p-D3-Ing_B.js.map} +1 -1
  21. package/dist/components/{p-Bv2DuncC.js → p-Dz20noaY.js} +3 -3
  22. package/dist/components/{p-Bv2DuncC.js.map → p-Dz20noaY.js.map} +1 -1
  23. package/dist/components/verdocs-build.js +4 -4
  24. package/dist/components/verdocs-field-radio.js +1 -1
  25. package/dist/components/verdocs-preview.js +1 -1
  26. package/dist/components/verdocs-sign.js +130 -32
  27. package/dist/components/verdocs-sign.js.map +1 -1
  28. package/dist/components/verdocs-signing-progress.js +1 -1
  29. package/dist/components/verdocs-template-document-page.js +1 -1
  30. package/dist/components/verdocs-template-fields.js +1 -1
  31. package/dist/esm/loader.js +1 -1
  32. package/dist/esm/verdocs-adopt-signature-dialog.verdocs-delegate-dialog.verdocs-disclosure-dialog.verdocs-kba-dialog.verdocs-otp-dialog.verdocs-passcode-dialog.verdocs-signing-progress.verdocs-view.entry.js.map +1 -1
  33. package/dist/esm/verdocs-adopt-signature-dialog_8.entry.js +1 -8
  34. package/dist/esm/verdocs-field-attachment_11.entry.js +1 -1
  35. package/dist/esm/verdocs-sign.entry.js +126 -31
  36. package/dist/esm/verdocs-sign.entry.js.map +1 -1
  37. package/dist/esm/verdocs-web-sdk.js +1 -1
  38. package/dist/esm-es5/loader.js +1 -1
  39. package/dist/esm-es5/verdocs-adopt-signature-dialog.verdocs-delegate-dialog.verdocs-disclosure-dialog.verdocs-kba-dialog.verdocs-otp-dialog.verdocs-passcode-dialog.verdocs-signing-progress.verdocs-view.entry.js.map +1 -1
  40. package/dist/esm-es5/verdocs-adopt-signature-dialog_8.entry.js +1 -1
  41. package/dist/esm-es5/verdocs-adopt-signature-dialog_8.entry.js.map +1 -1
  42. package/dist/esm-es5/verdocs-field-attachment_11.entry.js +1 -1
  43. package/dist/esm-es5/verdocs-field-attachment_11.entry.js.map +1 -1
  44. package/dist/esm-es5/verdocs-sign.entry.js +1 -1
  45. package/dist/esm-es5/verdocs-sign.entry.js.map +1 -1
  46. package/dist/esm-es5/verdocs-web-sdk.js +1 -1
  47. package/dist/types/components/embeds/verdocs-sign/verdocs-sign.d.ts +8 -1
  48. package/dist/types/components.d.ts +2 -2
  49. package/dist/verdocs-web-sdk/p-38577511.system.entry.js +2 -0
  50. package/dist/verdocs-web-sdk/p-38577511.system.entry.js.map +1 -0
  51. package/dist/verdocs-web-sdk/{p-6719e636.entry.js → p-3e12a9d6.entry.js} +2 -2
  52. package/dist/verdocs-web-sdk/p-3e12a9d6.entry.js.map +1 -0
  53. package/dist/verdocs-web-sdk/{p-2db89a87.system.entry.js → p-7389986e.system.entry.js} +2 -2
  54. package/dist/verdocs-web-sdk/{p-2db89a87.system.entry.js.map → p-7389986e.system.entry.js.map} +1 -1
  55. package/dist/verdocs-web-sdk/{p-e0253fa3.entry.js → p-7a2be757.entry.js} +2 -2
  56. package/dist/verdocs-web-sdk/{p-e0253fa3.entry.js.map → p-7a2be757.entry.js.map} +1 -1
  57. package/dist/verdocs-web-sdk/{p-8a8460c0.system.entry.js → p-8777a11b.system.entry.js} +2 -2
  58. package/dist/verdocs-web-sdk/p-8777a11b.system.entry.js.map +1 -0
  59. package/dist/verdocs-web-sdk/p-B8zpaHu-.system.js +1 -1
  60. package/dist/verdocs-web-sdk/p-Bcp-PA2y.system.js.map +1 -0
  61. package/dist/verdocs-web-sdk/p-f624338c.entry.js +2 -0
  62. package/dist/verdocs-web-sdk/p-f624338c.entry.js.map +1 -0
  63. package/dist/verdocs-web-sdk/p-gUJxKxOG.system.js.map +1 -0
  64. package/dist/verdocs-web-sdk/{p-BjIdBebp.system.js.map → p-qKdY3jhy.system.js.map} +1 -1
  65. package/dist/verdocs-web-sdk/verdocs-adopt-signature-dialog.verdocs-delegate-dialog.verdocs-disclosure-dialog.verdocs-kba-dialog.verdocs-otp-dialog.verdocs-passcode-dialog.verdocs-signing-progress.verdocs-view.entry.esm.js.map +1 -1
  66. package/dist/verdocs-web-sdk/verdocs-sign.entry.esm.js.map +1 -1
  67. package/dist/verdocs-web-sdk/verdocs-web-sdk.esm.js +1 -1
  68. package/package.json +2 -2
  69. package/dist/components/p-COiuyfp1.js.map +0 -1
  70. package/dist/components/p-LfDLlp5r.js.map +0 -1
  71. package/dist/verdocs-web-sdk/p-6719e636.entry.js.map +0 -1
  72. package/dist/verdocs-web-sdk/p-8a8460c0.system.entry.js.map +0 -1
  73. package/dist/verdocs-web-sdk/p-CJ9IvZJ5.system.js.map +0 -1
  74. package/dist/verdocs-web-sdk/p-D85w8lT9.system.js.map +0 -1
  75. package/dist/verdocs-web-sdk/p-a29fa382.system.entry.js +0 -2
  76. package/dist/verdocs-web-sdk/p-a29fa382.system.entry.js.map +0 -1
  77. package/dist/verdocs-web-sdk/p-cf08e7c2.entry.js +0 -2
  78. package/dist/verdocs-web-sdk/p-cf08e7c2.entry.js.map +0 -1
@@ -4467,20 +4467,13 @@ const VerdocsSigningProgress = class {
4467
4467
  if (this.mode === 'start') {
4468
4468
  return h("div", { class: "field-label" }, this.fieldLabel);
4469
4469
  }
4470
- const allRequiredFieldsCompleted = this.progress && this.progress.required.filled >= this.progress.required.total;
4471
- if (this.fieldCompleted && allRequiredFieldsCompleted) {
4472
- return (h("div", { class: "field-completed" }, h("div", { class: "icon" }, this.renderSuccessIcon()), h("span", { class: "text" }, "Ready to submit.")));
4473
- }
4474
4470
  return h("div", { class: "field-label" }, this.fieldLabel);
4475
4471
  }
4476
4472
  renderFooter() {
4477
4473
  if (this.mode === 'start') {
4478
4474
  return (h("button", { class: "btn start", onClick: () => this.started.emit() }, "Start Signing"));
4479
4475
  }
4480
- return (h("div", { class: "nav-buttons" }, this.progress && this.progress.required.filled >= this.progress.required.total ? (h("button", { class: "btn submit", onClick: () => this.exit.emit() }, "Submit")) : ([
4481
- h("button", { class: "btn previous", disabled: this.current <= 1, onClick: () => this.previous.emit() }, "Previous"),
4482
- h("button", { class: "btn next", disabled: this.current >= this.total, onClick: () => this.next.emit() }, "Next"),
4483
- ])));
4476
+ return (h("div", { class: "nav-buttons" }, h("button", { class: "btn previous", disabled: this.current <= 1, onClick: () => this.previous.emit() }, "Previous"), h("button", { class: "btn next", disabled: this.current >= this.total, onClick: () => this.next.emit() }, "Next")));
4484
4477
  }
4485
4478
  renderCompleted() {
4486
4479
  return (h("div", { class: "card completed" }, h("div", { class: "header-completed" }, h("div", { class: "icon" }, this.renderSuccessIcon()), "Ready to Submit"), h("div", { class: "description" }, "You have entered all requested signatures. Select Submit to complete the signing process."), h("div", { class: "separator" }), h("button", { class: "btn submit", onClick: () => this.exit.emit() }, "Submit")));
@@ -677,7 +677,7 @@ const VerdocsFieldInitial = class {
677
677
  };
678
678
  VerdocsFieldInitial.style = verdocsFieldInitialCss;
679
679
 
680
- const verdocsFieldRadioCss = "@-webkit-keyframes verdocs-field-pulse{0%{background-color:rgba(0, 0, 0, 0.35)}50%{background-color:rgba(0, 0, 0, 0)}100%{background-color:rgba(0, 0, 0, 0.35)}}@keyframes verdocs-field-pulse{0%{background-color:rgba(0, 0, 0, 0.35)}50%{background-color:rgba(0, 0, 0, 0)}100%{background-color:rgba(0, 0, 0, 0.35)}}verdocs-field-radio{font-family:var(--verdocs-primary-font, \"Inter\", \"Barlow\", sans-serif);width:14px;height:14px;display:block;font-size:11px;position:relative;scroll-margin:20px 0;background-color:transparent;-webkit-transform-origin:bottom left;transform-origin:bottom left;border-radius:100%}verdocs-field-radio.focused{-webkit-animation:verdocs-field-pulse 0.4s 1;animation:verdocs-field-pulse 0.4s 1}verdocs-field-radio svg{margin-top:4px}verdocs-field-radio.disabled.done{opacity:1}verdocs-field-radio div.label{top:-14px;left:-1px;height:14px;color:white;padding:0 4px;font-size:9px;line-height:13px;position:absolute;background:#4a4a99;border-top-left-radius:2px;border-top-right-radius:2px}verdocs-field-radio div.group{top:14px;left:-1px;height:14px;color:white;padding:0 4px;font-size:9px;line-height:13px;position:absolute;background:#bb0589;border-bottom-left-radius:2px;border-bottom-right-radius:2px}verdocs-field-radio input{cursor:inherit}verdocs-field-radio.disabled input{opacity:0.5}verdocs-field-radio.done input[type=radio]{margin:0;padding:0;width:10px;height:10px}verdocs-field-radio:not(.done) input[type=radio]{position:absolute;opacity:0}verdocs-field-radio:not(.done) input[type=radio]+label:before{content:\"\";border-radius:100%;border:1px solid rgba(0, 0, 0, 0.6);display:inline-block;width:12px;height:12px;position:absolute;left:1px;top:1px;cursor:pointer;text-align:center;-webkit-transition:all 250ms ease;transition:all 250ms ease}verdocs-field-radio:not(.done) input[type=radio]:checked+label:before{background-color:#55bc81;-webkit-box-shadow:inset 0 0 0 2px #f5f5fa;box-shadow:inset 0 0 0 2px #f5f5fa}verdocs-field-radio:not(.done) input[type=radio]:focus+label:before{outline:none;border-color:#55bc81}verdocs-field-radio:not(.done) input[type=radio]:disabled+label:before{-webkit-box-shadow:inset 0 0 0 4px #f5f5fa;box-shadow:inset 0 0 0 4px #f5f5fa;border-color:#f3f3fc;background:#f3f3fc}verdocs-field-radio:not(.done) input[type=radio]+label:empty:before{margin-right:0}verdocs-field-radio.required{border:1px solid var(--verdocs-required-field-border)}verdocs-field-radio.hide{display:none}verdocs-field-radio.focused{-webkit-animation:verdocs-field-pulse 0.4s 1;animation:verdocs-field-pulse 0.4s 1}verdocs-field-radio verdocs-button-panel{margin-left:-20px;margin-top:-7px;-webkit-transform:scale(0.7);transform:scale(0.7)}verdocs-field-radio .settings-icon{position:absolute;top:-6px;left:-20px;display:inline-block;cursor:pointer;opacity:0.3}verdocs-field-radio .settings-icon svg{fill:#707ae5}verdocs-field-radio .settings-icon:hover{opacity:1}@keyframes verdocs-field-pulse{0%{background-color:rgba(0, 0, 0, 0.35)}50%{background-color:rgba(0, 0, 0, 0)}100%{background-color:rgba(0, 0, 0, 0.35)}}";
680
+ const verdocsFieldRadioCss = "@-webkit-keyframes verdocs-field-pulse{0%{background-color:rgba(0, 0, 0, 0.35)}50%{background-color:rgba(0, 0, 0, 0)}100%{background-color:rgba(0, 0, 0, 0.35)}}@keyframes verdocs-field-pulse{0%{background-color:rgba(0, 0, 0, 0.35)}50%{background-color:rgba(0, 0, 0, 0)}100%{background-color:rgba(0, 0, 0, 0.35)}}verdocs-field-radio{font-family:var(--verdocs-primary-font, \"Inter\", \"Barlow\", sans-serif);width:14px;height:14px;display:block;font-size:11px;position:relative;scroll-margin:20px 0;background-color:transparent;-webkit-transform-origin:bottom left;transform-origin:bottom left}verdocs-field-radio.focused{-webkit-animation:verdocs-field-pulse 0.4s 1;animation:verdocs-field-pulse 0.4s 1}verdocs-field-radio svg{margin-top:4px}verdocs-field-radio.disabled.done{opacity:1}verdocs-field-radio div.label{top:0;left:16px;height:14px;color:white;padding:0 4px;font-size:9px;line-height:13px;position:absolute;background:#4a4a99;border-radius:2px;white-space:nowrap}verdocs-field-radio div.group{top:14px;left:-1px;height:14px;color:white;padding:0 4px;font-size:9px;line-height:13px;position:absolute;background:#bb0589;border-bottom-left-radius:2px;border-bottom-right-radius:2px}verdocs-field-radio input{cursor:inherit}verdocs-field-radio.disabled input{opacity:0.5}verdocs-field-radio.done input[type=radio]{margin:0;padding:0;width:10px;height:10px}verdocs-field-radio:not(.done) input[type=radio]{position:absolute;opacity:0}verdocs-field-radio:not(.done) input[type=radio]+label:before{content:\"\";border-radius:100%;border:1px solid rgba(0, 0, 0, 0.6);display:inline-block;width:12px;height:12px;position:absolute;left:1px;top:1px;cursor:pointer;text-align:center;-webkit-transition:all 250ms ease;transition:all 250ms ease}verdocs-field-radio:not(.done) input[type=radio]:checked+label:before{background-color:#55bc81;-webkit-box-shadow:inset 0 0 0 2px #f5f5fa;box-shadow:inset 0 0 0 2px #f5f5fa}verdocs-field-radio:not(.done) input[type=radio]:focus+label:before{outline:none;border-color:#55bc81}verdocs-field-radio:not(.done) input[type=radio]:disabled+label:before{-webkit-box-shadow:inset 0 0 0 4px #f5f5fa;box-shadow:inset 0 0 0 4px #f5f5fa;border-color:#f3f3fc;background:#f3f3fc}verdocs-field-radio:not(.done) input[type=radio]+label:empty:before{margin-right:0}verdocs-field-radio.required{border:1px solid var(--verdocs-required-field-border)}verdocs-field-radio.hide{display:none}verdocs-field-radio.focused{-webkit-animation:verdocs-field-pulse 0.4s 1;animation:verdocs-field-pulse 0.4s 1}verdocs-field-radio verdocs-button-panel{margin-left:-20px;margin-top:-7px;-webkit-transform:scale(0.7);transform:scale(0.7)}verdocs-field-radio .settings-icon{position:absolute;top:-6px;left:-20px;display:inline-block;cursor:pointer;opacity:0.3}verdocs-field-radio .settings-icon svg{fill:#707ae5}verdocs-field-radio .settings-icon:hover{opacity:1}@keyframes verdocs-field-pulse{0%{background-color:rgba(0, 0, 0, 0.35)}50%{background-color:rgba(0, 0, 0, 0)}100%{background-color:rgba(0, 0, 0, 0.35)}}";
681
681
 
682
682
  const RadioIconUnselected = `<svg focusable="false" aria-hidden="true" viewBox="0 0 24 24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></svg>`;
683
683
  const RadioIconSelected = `<svg focusable="false" aria-hidden="true" viewBox="0 0 24 24"><path d="M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zm0-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></svg>`;
@@ -46,7 +46,7 @@ const VerdocsSign = class {
46
46
  /**
47
47
  * The endpoint to use to communicate with Verdocs. If not set, the default endpoint will be used.
48
48
  */
49
- this.endpoint = new VerdocsEndpoint({ sessionType: 'signing' });
49
+ this.endpoint = new VerdocsEndpoint({ sessionType: 'signing', baseURL: 'https://esign-dev.hubsync.com/api' });
50
50
  /**
51
51
  * The ID of the envelope to sign.
52
52
  */
@@ -105,6 +105,9 @@ const VerdocsSign = class {
105
105
  this.delegated = false;
106
106
  this.kbaChoices = [];
107
107
  this.showDownloadDialog = false;
108
+ this.signingStarted = false;
109
+ this.skippedOptionalFields = [];
110
+ this.visitedFieldNames = [];
108
111
  this.loading = true;
109
112
  this.envelope = null;
110
113
  this.zoomLevel = 'normal';
@@ -217,6 +220,9 @@ const VerdocsSign = class {
217
220
  this.agreed = recipient.agreed;
218
221
  this.signatureId = ((_e = (_d = response.signatures) === null || _d === void 0 ? void 0 : _d[0]) === null || _e === void 0 ? void 0 : _e.id) || null;
219
222
  this.initialId = ((_g = (_f = response.initials) === null || _f === void 0 ? void 0 : _f[0]) === null || _g === void 0 ? void 0 : _g.id) || null;
223
+ this.signingStarted = false;
224
+ this.skippedOptionalFields = [];
225
+ this.visitedFieldNames = [];
220
226
  this.submitted = recipient.status === 'submitted';
221
227
  this.loading = false;
222
228
  this.isDone = this.submitted;
@@ -324,6 +330,9 @@ const VerdocsSign = class {
324
330
  }
325
331
  updateRecipientFieldValue(fieldName, updateResult) {
326
332
  console.log('[SIGN] updateRecipientFieldValue', fieldName, updateResult);
333
+ if (this.skippedOptionalFields.includes(fieldName)) {
334
+ this.skippedOptionalFields = this.skippedOptionalFields.filter(name => name !== fieldName);
335
+ }
327
336
  this.getRecipientFields().forEach(oldField => {
328
337
  if (oldField.name === fieldName) {
329
338
  oldField.value = updateResult.value;
@@ -361,6 +370,8 @@ const VerdocsSign = class {
361
370
  });
362
371
  }
363
372
  async handleFieldChange(field, e) {
373
+ this.signingStarted = true;
374
+ this.markFieldVisited(field.name);
364
375
  const { value, checked } = e.target;
365
376
  switch (field.type) {
366
377
  // TODO: Remove legacy type when no longer needed
@@ -482,8 +493,46 @@ const VerdocsSign = class {
482
493
  sortFields(recipientFields);
483
494
  return recipientFields;
484
495
  }
496
+ markFieldVisited(fieldName) {
497
+ if (!fieldName || this.visitedFieldNames.includes(fieldName)) {
498
+ return;
499
+ }
500
+ this.visitedFieldNames = [...this.visitedFieldNames, fieldName];
501
+ }
502
+ focusField(field, scrollInline = 'center') {
503
+ var _a;
504
+ if (!field)
505
+ return;
506
+ const id = getFieldId(field);
507
+ const el = document.getElementById(id);
508
+ el === null || el === void 0 ? void 0 : el.scrollIntoView({ behavior: 'smooth', block: 'center', inline: scrollInline });
509
+ (_a = el === null || el === void 0 ? void 0 : el.focusField) === null || _a === void 0 ? void 0 : _a.call(el);
510
+ this.focusedField = field.name;
511
+ this.markFieldVisited(field.name);
512
+ this.checkRecipientFields();
513
+ }
514
+ handleSkipField(fieldToSkip) {
515
+ if (fieldToSkip.required) {
516
+ return;
517
+ }
518
+ this.signingStarted = true;
519
+ this.markFieldVisited(fieldToSkip.name);
520
+ if (!this.skippedOptionalFields.includes(fieldToSkip.name)) {
521
+ this.skippedOptionalFields = [...this.skippedOptionalFields, fieldToSkip.name];
522
+ }
523
+ const fields = this.getSortedFillableFields();
524
+ const currentIndex = fields.findIndex(field => field.name === fieldToSkip.name);
525
+ const nextField = currentIndex >= 0 && currentIndex < fields.length - 1 ? fields[currentIndex + 1] : null;
526
+ if (nextField) {
527
+ this.focusField(nextField);
528
+ return;
529
+ }
530
+ // If this was the last field, still re-evaluate completion/submit state.
531
+ this.checkRecipientFields([fieldToSkip.name]);
532
+ }
485
533
  handleNext() {
486
534
  var _a;
535
+ this.signingStarted = true;
487
536
  if (this.nextSubmits) {
488
537
  try {
489
538
  // Patches the date picker to be forcibly removed if still showing during submission
@@ -501,23 +550,31 @@ const VerdocsSign = class {
501
550
  }
502
551
  return;
503
552
  }
504
- const nextField = this.getNextFieldInOrder();
505
- if (nextField) {
506
- const id = getFieldId(nextField);
507
- const el = document.getElementById(id);
508
- el === null || el === void 0 ? void 0 : el.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'center' });
509
- el === null || el === void 0 ? void 0 : el.focusField();
510
- this.focusedField = nextField.name;
553
+ const fields = this.getSortedFillableFields();
554
+ if (fields.length < 1) {
555
+ return;
511
556
  }
557
+ if (!this.focusedField) {
558
+ this.focusField(fields[0]);
559
+ return;
560
+ }
561
+ const nextField = this.getNextFieldFromList(fields);
562
+ this.focusField(nextField);
512
563
  }
513
564
  getRecipientFields() {
514
565
  var _a;
515
566
  return ((_a = this.envelope) === null || _a === void 0 ? void 0 : _a.fields.filter(field => field.role_name === this.recipient.role_name)) || [];
516
567
  }
517
568
  // See if everything that "needs to be" filled in is, and all "fillable fields" are valid
518
- checkRecipientFields() {
519
- const invalidFields = this.getRecipientFields().filter(field => !isFieldValid(field, this.getRecipientFields()));
520
- if (invalidFields.length < 1) {
569
+ checkRecipientFields(extraVisitedFieldNames = []) {
570
+ const recipientFields = this.getRecipientFields();
571
+ const fillableFields = this.getSortedFillableFields();
572
+ const requiredFields = fillableFields.filter(field => !!field.required);
573
+ const allRequiredFieldsSubmitted = requiredFields.every(field => this.isFieldValidForRecipient(field, recipientFields));
574
+ const visitedFieldNames = new Set([...this.visitedFieldNames, ...extraVisitedFieldNames]);
575
+ const allFieldsVisited = fillableFields.every(field => visitedFieldNames.has(field.name));
576
+ const canSubmit = allRequiredFieldsSubmitted && allFieldsVisited;
577
+ if (canSubmit) {
521
578
  this.nextButtonLabel = 'Finish';
522
579
  if (!this.nextSubmits) {
523
580
  this.nextSubmits = true;
@@ -529,6 +586,12 @@ const VerdocsSign = class {
529
586
  }
530
587
  this.updateAllFlags();
531
588
  }
589
+ isFieldValidForRecipient(field, recipientFields) {
590
+ if (field.type === 'signature' || field.type === 'initial') {
591
+ return !field.required || this.isFieldFilledForNav(field, recipientFields);
592
+ }
593
+ return isFieldValid(field, recipientFields);
594
+ }
532
595
  getNextFieldInOrder() {
533
596
  // Find the next incomplete field in overall order (required + optional).
534
597
  const fields = this.getSortedFillableFields();
@@ -547,13 +610,38 @@ const VerdocsSign = class {
547
610
  return null;
548
611
  }
549
612
  isFieldFilledForNav(field, recipientFields) {
613
+ if (!field.required && this.skippedOptionalFields.includes(field.name)) {
614
+ return true;
615
+ }
550
616
  if (field.type === 'signature' || field.type === 'initial') {
617
+ const settings = (field.settings || {});
618
+ const idKey = field.type === 'signature' ? 'signature_id' : 'initial_id';
619
+ const hasSignatureId = Object.prototype.hasOwnProperty.call(settings, 'signature_id');
620
+ const hasInitialId = Object.prototype.hasOwnProperty.call(settings, 'initial_id');
621
+ // For signature/initial fields, settings.* id is the authoritative state.
622
+ // This avoids stale top-level field.value (e.g. "signed") after clearing.
623
+ if (Object.prototype.hasOwnProperty.call(settings, idKey) || hasSignatureId || hasInitialId) {
624
+ const idValue = Object.prototype.hasOwnProperty.call(settings, idKey)
625
+ ? settings[idKey]
626
+ : hasSignatureId
627
+ ? settings.signature_id
628
+ : settings.initial_id;
629
+ return typeof idValue === 'string' ? idValue.trim().length > 0 : !!idValue;
630
+ }
631
+ if (Object.prototype.hasOwnProperty.call(settings, 'value')) {
632
+ const settingsValue = typeof settings.value === 'string' ? settings.value.trim() : settings.value;
633
+ return !!settingsValue;
634
+ }
635
+ if (Object.prototype.hasOwnProperty.call(settings, 'result')) {
636
+ const settingsResult = typeof settings.result === 'string' ? settings.result.trim() : settings.result;
637
+ return !!settingsResult;
638
+ }
639
+ if (Object.prototype.hasOwnProperty.call(settings, 'base64')) {
640
+ const settingsBase64 = typeof settings.base64 === 'string' ? settings.base64.trim() : settings.base64;
641
+ return !!settingsBase64;
642
+ }
551
643
  const value = typeof field.value === 'string' ? field.value.trim() : field.value;
552
- if (!value)
553
- return false;
554
- if (value === 'signed' || value === 'initialed')
555
- return false;
556
- return true;
644
+ return !!value;
557
645
  }
558
646
  if (field.type === 'dropdown') {
559
647
  return isFieldFilled(field, recipientFields) && !!field.value;
@@ -570,16 +658,11 @@ const VerdocsSign = class {
570
658
  return fields[nextFocusedIndex];
571
659
  }
572
660
  handlePrev() {
573
- var _a;
661
+ this.signingStarted = true;
574
662
  const allFields = this.getSortedFillableFields();
575
663
  const focusedIndex = allFields.findIndex(f => f.name === this.focusedField);
576
664
  if (focusedIndex > 0) {
577
- const prevField = allFields[focusedIndex - 1];
578
- const id = getFieldId(prevField);
579
- const el = document.getElementById(id);
580
- el === null || el === void 0 ? void 0 : el.scrollIntoView({ behavior: 'smooth', block: 'center' });
581
- (_a = el === null || el === void 0 ? void 0 : el.focusField) === null || _a === void 0 ? void 0 : _a.call(el);
582
- this.focusedField = prevField.name;
665
+ this.focusField(allFields[focusedIndex - 1]);
583
666
  }
584
667
  }
585
668
  updateAllFlags() {
@@ -616,8 +699,12 @@ const VerdocsSign = class {
616
699
  variant,
617
700
  label,
618
701
  showSkip,
702
+ onClick: () => {
703
+ this.signingStarted = true;
704
+ this.focusField(nextField);
705
+ },
619
706
  onSkip: () => {
620
- this.handleNext();
707
+ this.handleSkipField(nextField);
621
708
  },
622
709
  });
623
710
  }
@@ -690,8 +777,15 @@ const VerdocsSign = class {
690
777
  el.addEventListener('fieldChange', e => {
691
778
  this.handleFieldChange(field, e).finally(() => this.checkRecipientFields());
692
779
  });
780
+ el.addEventListener('click', () => {
781
+ this.focusedField = field.name;
782
+ this.markFieldVisited(field.name);
783
+ this.checkRecipientFields();
784
+ });
693
785
  el.addEventListener('adopt', () => {
694
786
  this.focusedField = field.name;
787
+ this.markFieldVisited(field.name);
788
+ this.checkRecipientFields();
695
789
  this.adoptingSignature = true;
696
790
  });
697
791
  el.setAttribute('templateid', this.envelope.template_id);
@@ -881,7 +975,8 @@ const VerdocsSign = class {
881
975
  inProgressMenuOptions.unshift({ id: 'delegate', label: 'Delegate' });
882
976
  }
883
977
  console.log('this.getRecipientFields()', this.getRecipientFields());
884
- const invalidFields = this.getRecipientFields().filter(field => !isFieldValid(field, this.getRecipientFields()));
978
+ const recipientFields = this.getRecipientFields();
979
+ const invalidFields = recipientFields.filter(field => !this.isFieldValidForRecipient(field, recipientFields));
885
980
  invalidFields.length > 0
886
981
  ? console.log('[SIGN] Invalid fields remaining', invalidFields.map(field => field.name))
887
982
  : console.log('[SIGN] All field valid');
@@ -894,7 +989,7 @@ const VerdocsSign = class {
894
989
  // Calculate detailed progress
895
990
  const allFields = this.getSortedFillableFields();
896
991
  const recipientFields = this.getRecipientFields();
897
- const isFilled = (f) => isFieldFilled(f, recipientFields) && (f.type !== 'dropdown' || !!f.value);
992
+ const isFilled = (f) => this.isFieldFilledForNav(f, recipientFields);
898
993
  const requiredFields = allFields.filter(f => f.required);
899
994
  const requiredRemaining = requiredFields.filter(f => !isFilled(f)).length;
900
995
  const requiredFilled = requiredFields.length - requiredRemaining;
@@ -926,18 +1021,18 @@ const VerdocsSign = class {
926
1021
  filledFields: recipientFields.filter(f => isFilled(f)).map(f => ({ name: f.name, type: f.type, val: f.value })),
927
1022
  });
928
1023
  let mode = 'start';
929
- // We only consider the user to have started "signing" if they have filled out at least one *fillable* field.
930
- // Readonly fields do not count.
931
- const anyFieldFilled = requiredRemaining < requiredFields.length || optionalRemaining < optionalFields.length;
932
1024
  if (this.nextSubmits) {
933
1025
  mode = 'completed';
934
1026
  }
935
- else if (anyFieldFilled) {
1027
+ else if (this.signingStarted) {
936
1028
  mode = 'signing';
937
1029
  }
938
1030
  return (h("verdocs-signing-progress", { mode: mode, current: Math.max(1, currentIndex), total: totalFields, remainingFields: remainingFields, progress: progress, fieldLabel: getFieldLabel(focusedFieldObj), fieldCompleted: focusedFieldObj ? !!isFilled(focusedFieldObj) : false, onStarted: () => {
1031
+ this.signingStarted = true;
939
1032
  this.adoptingSignature = true;
940
- this.handleNext();
1033
+ const fields = this.getSortedFillableFields();
1034
+ const startField = fields.find(f => f.name === this.focusedField) || fields[0];
1035
+ this.focusField(startField || null);
941
1036
  }, onNext: () => this.handleNext(), onPrevious: () => this.handlePrev(), onExit: () => this.handleNext() }));
942
1037
  })(), h("div", { class: `document signed-document-container zoom-${this.zoomLevel}` }, (this.envelope.documents || []).map(envelopeDocument => {
943
1038
  const pageNumbers = integerSequence(1, envelopeDocument.pages);