@hubsync/esign-web-sdk 6.5.6 → 6.5.8

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 +129 -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 +133 -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 +133 -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 +129 -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-2b277797.system.entry.js +2 -0
  50. package/dist/verdocs-web-sdk/p-2b277797.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-e1de2584.entry.js +2 -0
  62. package/dist/verdocs-web-sdk/p-e1de2584.entry.js.map +1 -0
  63. package/dist/verdocs-web-sdk/p-ojX3wTEW.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
@@ -4469,20 +4469,13 @@ const VerdocsSigningProgress = class {
4469
4469
  if (this.mode === 'start') {
4470
4470
  return index.h("div", { class: "field-label" }, this.fieldLabel);
4471
4471
  }
4472
- const allRequiredFieldsCompleted = this.progress && this.progress.required.filled >= this.progress.required.total;
4473
- if (this.fieldCompleted && allRequiredFieldsCompleted) {
4474
- return (index.h("div", { class: "field-completed" }, index.h("div", { class: "icon" }, this.renderSuccessIcon()), index.h("span", { class: "text" }, "Ready to submit.")));
4475
- }
4476
4472
  return index.h("div", { class: "field-label" }, this.fieldLabel);
4477
4473
  }
4478
4474
  renderFooter() {
4479
4475
  if (this.mode === 'start') {
4480
4476
  return (index.h("button", { class: "btn start", onClick: () => this.started.emit() }, "Start Signing"));
4481
4477
  }
4482
- return (index.h("div", { class: "nav-buttons" }, this.progress && this.progress.required.filled >= this.progress.required.total ? (index.h("button", { class: "btn submit", onClick: () => this.exit.emit() }, "Submit")) : ([
4483
- index.h("button", { class: "btn previous", disabled: this.current <= 1, onClick: () => this.previous.emit() }, "Previous"),
4484
- index.h("button", { class: "btn next", disabled: this.current >= this.total, onClick: () => this.next.emit() }, "Next"),
4485
- ])));
4478
+ return (index.h("div", { class: "nav-buttons" }, index.h("button", { class: "btn previous", disabled: this.current <= 1, onClick: () => this.previous.emit() }, "Previous"), index.h("button", { class: "btn next", disabled: this.current >= this.total, onClick: () => this.next.emit() }, "Next")));
4486
4479
  }
4487
4480
  renderCompleted() {
4488
4481
  return (index.h("div", { class: "card completed" }, index.h("div", { class: "header-completed" }, index.h("div", { class: "icon" }, this.renderSuccessIcon()), "Ready to Submit"), index.h("div", { class: "description" }, "You have entered all requested signatures. Select Submit to complete the signing process."), index.h("div", { class: "separator" }), index.h("button", { class: "btn submit", onClick: () => this.exit.emit() }, "Submit")));
@@ -679,7 +679,7 @@ const VerdocsFieldInitial = class {
679
679
  };
680
680
  VerdocsFieldInitial.style = verdocsFieldInitialCss;
681
681
 
682
- 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)}}";
682
+ 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)}}";
683
683
 
684
684
  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>`;
685
685
  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>`;
@@ -48,7 +48,7 @@ const VerdocsSign = class {
48
48
  /**
49
49
  * The endpoint to use to communicate with Verdocs. If not set, the default endpoint will be used.
50
50
  */
51
- this.endpoint = new jsSdk.VerdocsEndpoint({ sessionType: 'signing' });
51
+ this.endpoint = new jsSdk.VerdocsEndpoint({ sessionType: 'signing', baseURL: 'https://esign-dev.hubsync.com/api' });
52
52
  /**
53
53
  * The ID of the envelope to sign.
54
54
  */
@@ -107,6 +107,9 @@ const VerdocsSign = class {
107
107
  this.delegated = false;
108
108
  this.kbaChoices = [];
109
109
  this.showDownloadDialog = false;
110
+ this.signingStarted = false;
111
+ this.skippedOptionalFields = [];
112
+ this.visitedFieldNames = [];
110
113
  this.loading = true;
111
114
  this.envelope = null;
112
115
  this.zoomLevel = 'normal';
@@ -219,6 +222,9 @@ const VerdocsSign = class {
219
222
  this.agreed = recipient.agreed;
220
223
  this.signatureId = ((_e = (_d = response.signatures) === null || _d === void 0 ? void 0 : _d[0]) === null || _e === void 0 ? void 0 : _e.id) || null;
221
224
  this.initialId = ((_g = (_f = response.initials) === null || _f === void 0 ? void 0 : _f[0]) === null || _g === void 0 ? void 0 : _g.id) || null;
225
+ this.signingStarted = false;
226
+ this.skippedOptionalFields = [];
227
+ this.visitedFieldNames = [];
222
228
  this.submitted = recipient.status === 'submitted';
223
229
  this.loading = false;
224
230
  this.isDone = this.submitted;
@@ -326,6 +332,9 @@ const VerdocsSign = class {
326
332
  }
327
333
  updateRecipientFieldValue(fieldName, updateResult) {
328
334
  console.log('[SIGN] updateRecipientFieldValue', fieldName, updateResult);
335
+ if (this.skippedOptionalFields.includes(fieldName)) {
336
+ this.skippedOptionalFields = this.skippedOptionalFields.filter(name => name !== fieldName);
337
+ }
329
338
  this.getRecipientFields().forEach(oldField => {
330
339
  if (oldField.name === fieldName) {
331
340
  oldField.value = updateResult.value;
@@ -363,6 +372,8 @@ const VerdocsSign = class {
363
372
  });
364
373
  }
365
374
  async handleFieldChange(field, e) {
375
+ this.signingStarted = true;
376
+ this.markFieldVisited(field.name);
366
377
  const { value, checked } = e.target;
367
378
  switch (field.type) {
368
379
  // TODO: Remove legacy type when no longer needed
@@ -484,8 +495,46 @@ const VerdocsSign = class {
484
495
  jsSdk.sortFields(recipientFields);
485
496
  return recipientFields;
486
497
  }
498
+ markFieldVisited(fieldName) {
499
+ if (!fieldName || this.visitedFieldNames.includes(fieldName)) {
500
+ return;
501
+ }
502
+ this.visitedFieldNames = [...this.visitedFieldNames, fieldName];
503
+ }
504
+ focusField(field, scrollInline = 'center') {
505
+ var _a;
506
+ if (!field)
507
+ return;
508
+ const id = utils.getFieldId(field);
509
+ const el = document.getElementById(id);
510
+ el === null || el === void 0 ? void 0 : el.scrollIntoView({ behavior: 'smooth', block: 'center', inline: scrollInline });
511
+ (_a = el === null || el === void 0 ? void 0 : el.focusField) === null || _a === void 0 ? void 0 : _a.call(el);
512
+ this.focusedField = field.name;
513
+ this.markFieldVisited(field.name);
514
+ this.checkRecipientFields();
515
+ }
516
+ handleSkipField(fieldToSkip) {
517
+ if (fieldToSkip.required) {
518
+ return;
519
+ }
520
+ this.signingStarted = true;
521
+ this.markFieldVisited(fieldToSkip.name);
522
+ if (!this.skippedOptionalFields.includes(fieldToSkip.name)) {
523
+ this.skippedOptionalFields = [...this.skippedOptionalFields, fieldToSkip.name];
524
+ }
525
+ const fields = this.getSortedFillableFields();
526
+ const currentIndex = fields.findIndex(field => field.name === fieldToSkip.name);
527
+ const nextField = currentIndex >= 0 && currentIndex < fields.length - 1 ? fields[currentIndex + 1] : null;
528
+ if (nextField) {
529
+ this.focusField(nextField);
530
+ return;
531
+ }
532
+ // If this was the last field, still re-evaluate completion/submit state.
533
+ this.checkRecipientFields([fieldToSkip.name]);
534
+ }
487
535
  handleNext() {
488
536
  var _a;
537
+ this.signingStarted = true;
489
538
  if (this.nextSubmits) {
490
539
  try {
491
540
  // Patches the date picker to be forcibly removed if still showing during submission
@@ -503,23 +552,34 @@ const VerdocsSign = class {
503
552
  }
504
553
  return;
505
554
  }
506
- const nextField = this.getNextFieldInOrder();
507
- if (nextField) {
508
- const id = utils.getFieldId(nextField);
509
- const el = document.getElementById(id);
510
- el === null || el === void 0 ? void 0 : el.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'center' });
511
- el === null || el === void 0 ? void 0 : el.focusField();
512
- this.focusedField = nextField.name;
555
+ const fields = this.getSortedFillableFields();
556
+ if (fields.length < 1) {
557
+ return;
513
558
  }
559
+ if (!this.focusedField) {
560
+ this.focusField(fields[0]);
561
+ return;
562
+ }
563
+ const nextField = this.getNextFieldFromList(fields);
564
+ this.focusField(nextField);
514
565
  }
515
566
  getRecipientFields() {
516
567
  var _a;
517
568
  return ((_a = this.envelope) === null || _a === void 0 ? void 0 : _a.fields.filter(field => field.role_name === this.recipient.role_name)) || [];
518
569
  }
519
570
  // See if everything that "needs to be" filled in is, and all "fillable fields" are valid
520
- checkRecipientFields() {
521
- const invalidFields = this.getRecipientFields().filter(field => !jsSdk.isFieldValid(field, this.getRecipientFields()));
522
- if (invalidFields.length < 1) {
571
+ checkRecipientFields(extraVisitedFieldNames = []) {
572
+ const recipientFields = this.getRecipientFields();
573
+ const fillableFields = this.getSortedFillableFields();
574
+ const requiredFields = fillableFields.filter(field => !!field.required);
575
+ const allRequiredFieldsSubmitted = requiredFields.every(field => this.isFieldValidForRecipient(field, recipientFields));
576
+ const visitedFieldNames = new Set([...this.visitedFieldNames, ...extraVisitedFieldNames]);
577
+ // A field is considered "handled" if it's visited OR if it's an optional field that was skipped OR if it's already filled
578
+ const allFieldsHandled = fillableFields.every(field => visitedFieldNames.has(field.name) ||
579
+ this.skippedOptionalFields.includes(field.name) ||
580
+ this.isFieldFilledForNav(field, recipientFields));
581
+ const canSubmit = allRequiredFieldsSubmitted && allFieldsHandled;
582
+ if (canSubmit) {
523
583
  this.nextButtonLabel = 'Finish';
524
584
  if (!this.nextSubmits) {
525
585
  this.nextSubmits = true;
@@ -531,6 +591,12 @@ const VerdocsSign = class {
531
591
  }
532
592
  this.updateAllFlags();
533
593
  }
594
+ isFieldValidForRecipient(field, recipientFields) {
595
+ if (field.type === 'signature' || field.type === 'initial') {
596
+ return !field.required || this.isFieldFilledForNav(field, recipientFields);
597
+ }
598
+ return jsSdk.isFieldValid(field, recipientFields);
599
+ }
534
600
  getNextFieldInOrder() {
535
601
  // Find the next incomplete field in overall order (required + optional).
536
602
  const fields = this.getSortedFillableFields();
@@ -549,13 +615,38 @@ const VerdocsSign = class {
549
615
  return null;
550
616
  }
551
617
  isFieldFilledForNav(field, recipientFields) {
618
+ if (!field.required && this.skippedOptionalFields.includes(field.name)) {
619
+ return true;
620
+ }
552
621
  if (field.type === 'signature' || field.type === 'initial') {
622
+ const settings = (field.settings || {});
623
+ const idKey = field.type === 'signature' ? 'signature_id' : 'initial_id';
624
+ const hasSignatureId = Object.prototype.hasOwnProperty.call(settings, 'signature_id');
625
+ const hasInitialId = Object.prototype.hasOwnProperty.call(settings, 'initial_id');
626
+ // For signature/initial fields, settings.* id is the authoritative state.
627
+ // This avoids stale top-level field.value (e.g. "signed") after clearing.
628
+ if (Object.prototype.hasOwnProperty.call(settings, idKey) || hasSignatureId || hasInitialId) {
629
+ const idValue = Object.prototype.hasOwnProperty.call(settings, idKey)
630
+ ? settings[idKey]
631
+ : hasSignatureId
632
+ ? settings.signature_id
633
+ : settings.initial_id;
634
+ return typeof idValue === 'string' ? idValue.trim().length > 0 : !!idValue;
635
+ }
636
+ if (Object.prototype.hasOwnProperty.call(settings, 'value')) {
637
+ const settingsValue = typeof settings.value === 'string' ? settings.value.trim() : settings.value;
638
+ return !!settingsValue;
639
+ }
640
+ if (Object.prototype.hasOwnProperty.call(settings, 'result')) {
641
+ const settingsResult = typeof settings.result === 'string' ? settings.result.trim() : settings.result;
642
+ return !!settingsResult;
643
+ }
644
+ if (Object.prototype.hasOwnProperty.call(settings, 'base64')) {
645
+ const settingsBase64 = typeof settings.base64 === 'string' ? settings.base64.trim() : settings.base64;
646
+ return !!settingsBase64;
647
+ }
553
648
  const value = typeof field.value === 'string' ? field.value.trim() : field.value;
554
- if (!value)
555
- return false;
556
- if (value === 'signed' || value === 'initialed')
557
- return false;
558
- return true;
649
+ return !!value;
559
650
  }
560
651
  if (field.type === 'dropdown') {
561
652
  return jsSdk.isFieldFilled(field, recipientFields) && !!field.value;
@@ -572,16 +663,11 @@ const VerdocsSign = class {
572
663
  return fields[nextFocusedIndex];
573
664
  }
574
665
  handlePrev() {
575
- var _a;
666
+ this.signingStarted = true;
576
667
  const allFields = this.getSortedFillableFields();
577
668
  const focusedIndex = allFields.findIndex(f => f.name === this.focusedField);
578
669
  if (focusedIndex > 0) {
579
- const prevField = allFields[focusedIndex - 1];
580
- const id = utils.getFieldId(prevField);
581
- const el = document.getElementById(id);
582
- el === null || el === void 0 ? void 0 : el.scrollIntoView({ behavior: 'smooth', block: 'center' });
583
- (_a = el === null || el === void 0 ? void 0 : el.focusField) === null || _a === void 0 ? void 0 : _a.call(el);
584
- this.focusedField = prevField.name;
670
+ this.focusField(allFields[focusedIndex - 1]);
585
671
  }
586
672
  }
587
673
  updateAllFlags() {
@@ -618,8 +704,12 @@ const VerdocsSign = class {
618
704
  variant,
619
705
  label,
620
706
  showSkip,
707
+ onClick: () => {
708
+ this.signingStarted = true;
709
+ this.focusField(nextField);
710
+ },
621
711
  onSkip: () => {
622
- this.handleNext();
712
+ this.handleSkipField(nextField);
623
713
  },
624
714
  });
625
715
  }
@@ -692,8 +782,15 @@ const VerdocsSign = class {
692
782
  el.addEventListener('fieldChange', e => {
693
783
  this.handleFieldChange(field, e).finally(() => this.checkRecipientFields());
694
784
  });
785
+ el.addEventListener('click', () => {
786
+ this.focusedField = field.name;
787
+ this.markFieldVisited(field.name);
788
+ this.checkRecipientFields();
789
+ });
695
790
  el.addEventListener('adopt', () => {
696
791
  this.focusedField = field.name;
792
+ this.markFieldVisited(field.name);
793
+ this.checkRecipientFields();
697
794
  this.adoptingSignature = true;
698
795
  });
699
796
  el.setAttribute('templateid', this.envelope.template_id);
@@ -883,7 +980,8 @@ const VerdocsSign = class {
883
980
  inProgressMenuOptions.unshift({ id: 'delegate', label: 'Delegate' });
884
981
  }
885
982
  console.log('this.getRecipientFields()', this.getRecipientFields());
886
- const invalidFields = this.getRecipientFields().filter(field => !jsSdk.isFieldValid(field, this.getRecipientFields()));
983
+ const recipientFields = this.getRecipientFields();
984
+ const invalidFields = recipientFields.filter(field => !this.isFieldValidForRecipient(field, recipientFields));
887
985
  invalidFields.length > 0
888
986
  ? console.log('[SIGN] Invalid fields remaining', invalidFields.map(field => field.name))
889
987
  : console.log('[SIGN] All field valid');
@@ -896,7 +994,7 @@ const VerdocsSign = class {
896
994
  // Calculate detailed progress
897
995
  const allFields = this.getSortedFillableFields();
898
996
  const recipientFields = this.getRecipientFields();
899
- const isFilled = (f) => jsSdk.isFieldFilled(f, recipientFields) && (f.type !== 'dropdown' || !!f.value);
997
+ const isFilled = (f) => this.isFieldFilledForNav(f, recipientFields);
900
998
  const requiredFields = allFields.filter(f => f.required);
901
999
  const requiredRemaining = requiredFields.filter(f => !isFilled(f)).length;
902
1000
  const requiredFilled = requiredFields.length - requiredRemaining;
@@ -928,18 +1026,18 @@ const VerdocsSign = class {
928
1026
  filledFields: recipientFields.filter(f => isFilled(f)).map(f => ({ name: f.name, type: f.type, val: f.value })),
929
1027
  });
930
1028
  let mode = 'start';
931
- // We only consider the user to have started "signing" if they have filled out at least one *fillable* field.
932
- // Readonly fields do not count.
933
- const anyFieldFilled = requiredRemaining < requiredFields.length || optionalRemaining < optionalFields.length;
934
1029
  if (this.nextSubmits) {
935
1030
  mode = 'completed';
936
1031
  }
937
- else if (anyFieldFilled) {
1032
+ else if (this.signingStarted) {
938
1033
  mode = 'signing';
939
1034
  }
940
1035
  return (index.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: () => {
1036
+ this.signingStarted = true;
941
1037
  this.adoptingSignature = true;
942
- this.handleNext();
1038
+ const fields = this.getSortedFillableFields();
1039
+ const startField = fields.find(f => f.name === this.focusedField) || fields[0];
1040
+ this.focusField(startField || null);
943
1041
  }, onNext: () => this.handleNext(), onPrevious: () => this.handlePrev(), onExit: () => this.handleNext() }));
944
1042
  })(), index.h("div", { class: `document signed-document-container zoom-${this.zoomLevel}` }, (this.envelope.documents || []).map(envelopeDocument => {
945
1043
  const pageNumbers = jsSdk.integerSequence(1, envelopeDocument.pages);