@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
@@ -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,31 @@ 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
+ const allFieldsVisited = fillableFields.every(field => visitedFieldNames.has(field.name));
578
+ const canSubmit = allRequiredFieldsSubmitted && allFieldsVisited;
579
+ if (canSubmit) {
523
580
  this.nextButtonLabel = 'Finish';
524
581
  if (!this.nextSubmits) {
525
582
  this.nextSubmits = true;
@@ -531,6 +588,12 @@ const VerdocsSign = class {
531
588
  }
532
589
  this.updateAllFlags();
533
590
  }
591
+ isFieldValidForRecipient(field, recipientFields) {
592
+ if (field.type === 'signature' || field.type === 'initial') {
593
+ return !field.required || this.isFieldFilledForNav(field, recipientFields);
594
+ }
595
+ return jsSdk.isFieldValid(field, recipientFields);
596
+ }
534
597
  getNextFieldInOrder() {
535
598
  // Find the next incomplete field in overall order (required + optional).
536
599
  const fields = this.getSortedFillableFields();
@@ -549,13 +612,38 @@ const VerdocsSign = class {
549
612
  return null;
550
613
  }
551
614
  isFieldFilledForNav(field, recipientFields) {
615
+ if (!field.required && this.skippedOptionalFields.includes(field.name)) {
616
+ return true;
617
+ }
552
618
  if (field.type === 'signature' || field.type === 'initial') {
619
+ const settings = (field.settings || {});
620
+ const idKey = field.type === 'signature' ? 'signature_id' : 'initial_id';
621
+ const hasSignatureId = Object.prototype.hasOwnProperty.call(settings, 'signature_id');
622
+ const hasInitialId = Object.prototype.hasOwnProperty.call(settings, 'initial_id');
623
+ // For signature/initial fields, settings.* id is the authoritative state.
624
+ // This avoids stale top-level field.value (e.g. "signed") after clearing.
625
+ if (Object.prototype.hasOwnProperty.call(settings, idKey) || hasSignatureId || hasInitialId) {
626
+ const idValue = Object.prototype.hasOwnProperty.call(settings, idKey)
627
+ ? settings[idKey]
628
+ : hasSignatureId
629
+ ? settings.signature_id
630
+ : settings.initial_id;
631
+ return typeof idValue === 'string' ? idValue.trim().length > 0 : !!idValue;
632
+ }
633
+ if (Object.prototype.hasOwnProperty.call(settings, 'value')) {
634
+ const settingsValue = typeof settings.value === 'string' ? settings.value.trim() : settings.value;
635
+ return !!settingsValue;
636
+ }
637
+ if (Object.prototype.hasOwnProperty.call(settings, 'result')) {
638
+ const settingsResult = typeof settings.result === 'string' ? settings.result.trim() : settings.result;
639
+ return !!settingsResult;
640
+ }
641
+ if (Object.prototype.hasOwnProperty.call(settings, 'base64')) {
642
+ const settingsBase64 = typeof settings.base64 === 'string' ? settings.base64.trim() : settings.base64;
643
+ return !!settingsBase64;
644
+ }
553
645
  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;
646
+ return !!value;
559
647
  }
560
648
  if (field.type === 'dropdown') {
561
649
  return jsSdk.isFieldFilled(field, recipientFields) && !!field.value;
@@ -572,16 +660,11 @@ const VerdocsSign = class {
572
660
  return fields[nextFocusedIndex];
573
661
  }
574
662
  handlePrev() {
575
- var _a;
663
+ this.signingStarted = true;
576
664
  const allFields = this.getSortedFillableFields();
577
665
  const focusedIndex = allFields.findIndex(f => f.name === this.focusedField);
578
666
  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;
667
+ this.focusField(allFields[focusedIndex - 1]);
585
668
  }
586
669
  }
587
670
  updateAllFlags() {
@@ -618,8 +701,12 @@ const VerdocsSign = class {
618
701
  variant,
619
702
  label,
620
703
  showSkip,
704
+ onClick: () => {
705
+ this.signingStarted = true;
706
+ this.focusField(nextField);
707
+ },
621
708
  onSkip: () => {
622
- this.handleNext();
709
+ this.handleSkipField(nextField);
623
710
  },
624
711
  });
625
712
  }
@@ -692,8 +779,15 @@ const VerdocsSign = class {
692
779
  el.addEventListener('fieldChange', e => {
693
780
  this.handleFieldChange(field, e).finally(() => this.checkRecipientFields());
694
781
  });
782
+ el.addEventListener('click', () => {
783
+ this.focusedField = field.name;
784
+ this.markFieldVisited(field.name);
785
+ this.checkRecipientFields();
786
+ });
695
787
  el.addEventListener('adopt', () => {
696
788
  this.focusedField = field.name;
789
+ this.markFieldVisited(field.name);
790
+ this.checkRecipientFields();
697
791
  this.adoptingSignature = true;
698
792
  });
699
793
  el.setAttribute('templateid', this.envelope.template_id);
@@ -883,7 +977,8 @@ const VerdocsSign = class {
883
977
  inProgressMenuOptions.unshift({ id: 'delegate', label: 'Delegate' });
884
978
  }
885
979
  console.log('this.getRecipientFields()', this.getRecipientFields());
886
- const invalidFields = this.getRecipientFields().filter(field => !jsSdk.isFieldValid(field, this.getRecipientFields()));
980
+ const recipientFields = this.getRecipientFields();
981
+ const invalidFields = recipientFields.filter(field => !this.isFieldValidForRecipient(field, recipientFields));
887
982
  invalidFields.length > 0
888
983
  ? console.log('[SIGN] Invalid fields remaining', invalidFields.map(field => field.name))
889
984
  : console.log('[SIGN] All field valid');
@@ -896,7 +991,7 @@ const VerdocsSign = class {
896
991
  // Calculate detailed progress
897
992
  const allFields = this.getSortedFillableFields();
898
993
  const recipientFields = this.getRecipientFields();
899
- const isFilled = (f) => jsSdk.isFieldFilled(f, recipientFields) && (f.type !== 'dropdown' || !!f.value);
994
+ const isFilled = (f) => this.isFieldFilledForNav(f, recipientFields);
900
995
  const requiredFields = allFields.filter(f => f.required);
901
996
  const requiredRemaining = requiredFields.filter(f => !isFilled(f)).length;
902
997
  const requiredFilled = requiredFields.length - requiredRemaining;
@@ -928,18 +1023,18 @@ const VerdocsSign = class {
928
1023
  filledFields: recipientFields.filter(f => isFilled(f)).map(f => ({ name: f.name, type: f.type, val: f.value })),
929
1024
  });
930
1025
  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
1026
  if (this.nextSubmits) {
935
1027
  mode = 'completed';
936
1028
  }
937
- else if (anyFieldFilled) {
1029
+ else if (this.signingStarted) {
938
1030
  mode = 'signing';
939
1031
  }
940
1032
  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: () => {
1033
+ this.signingStarted = true;
941
1034
  this.adoptingSignature = true;
942
- this.handleNext();
1035
+ const fields = this.getSortedFillableFields();
1036
+ const startField = fields.find(f => f.name === this.focusedField) || fields[0];
1037
+ this.focusField(startField || null);
943
1038
  }, onNext: () => this.handleNext(), onPrevious: () => this.handlePrev(), onExit: () => this.handleNext() }));
944
1039
  })(), index.h("div", { class: `document signed-document-container zoom-${this.zoomLevel}` }, (this.envelope.documents || []).map(envelopeDocument => {
945
1040
  const pageNumbers = jsSdk.integerSequence(1, envelopeDocument.pages);