@hubsync/esign-web-sdk 6.9.18 → 6.9.20

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 (53) 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 +9 -5
  4. package/dist/cjs/verdocs-sign.cjs.entry.js +15 -4
  5. package/dist/cjs/verdocs-sign.entry.cjs.js.map +1 -1
  6. package/dist/cjs/verdocs-web-sdk.cjs.js +1 -1
  7. package/dist/collection/components/dialogs/verdocs-signing-progress/verdocs-signing-progress.js +27 -5
  8. package/dist/collection/components/dialogs/verdocs-signing-progress/verdocs-signing-progress.js.map +1 -1
  9. package/dist/collection/components/embeds/verdocs-sign/verdocs-sign.js +15 -4
  10. package/dist/collection/components/embeds/verdocs-sign/verdocs-sign.js.map +1 -1
  11. package/dist/components/{p-D5TpXhYZ.js → p-DO7oSTLI.js} +13 -8
  12. package/dist/components/p-DO7oSTLI.js.map +1 -0
  13. package/dist/components/verdocs-sign.js +16 -5
  14. package/dist/components/verdocs-sign.js.map +1 -1
  15. package/dist/components/verdocs-signing-progress.js +1 -1
  16. package/dist/esm/loader.js +1 -1
  17. 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
  18. package/dist/esm/verdocs-adopt-signature-dialog_8.entry.js +9 -5
  19. package/dist/esm/verdocs-sign.entry.js +15 -4
  20. package/dist/esm/verdocs-sign.entry.js.map +1 -1
  21. package/dist/esm/verdocs-web-sdk.js +1 -1
  22. package/dist/esm-es5/loader.js +1 -1
  23. 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
  24. package/dist/esm-es5/verdocs-adopt-signature-dialog_8.entry.js +1 -1
  25. package/dist/esm-es5/verdocs-adopt-signature-dialog_8.entry.js.map +1 -1
  26. package/dist/esm-es5/verdocs-sign.entry.js +1 -1
  27. package/dist/esm-es5/verdocs-sign.entry.js.map +1 -1
  28. package/dist/esm-es5/verdocs-web-sdk.js +1 -1
  29. package/dist/types/components/dialogs/verdocs-signing-progress/verdocs-signing-progress.d.ts +5 -1
  30. package/dist/types/components.d.ts +10 -0
  31. package/dist/verdocs-web-sdk/{p-4b321497.system.entry.js → p-67b09919.system.entry.js} +2 -2
  32. package/dist/verdocs-web-sdk/p-67b09919.system.entry.js.map +1 -0
  33. package/dist/verdocs-web-sdk/p-99366a30.system.entry.js +2 -0
  34. package/dist/verdocs-web-sdk/p-99366a30.system.entry.js.map +1 -0
  35. package/dist/verdocs-web-sdk/p-B8zpaHu-.system.js +1 -1
  36. package/dist/verdocs-web-sdk/p-BhPGtG0O.system.js.map +1 -0
  37. package/dist/verdocs-web-sdk/{p-DkxUbQAG.system.js.map → p-Dw4daWgN.system.js.map} +1 -1
  38. package/dist/verdocs-web-sdk/p-ceda5116.entry.js +2 -0
  39. package/dist/verdocs-web-sdk/p-ceda5116.entry.js.map +1 -0
  40. package/dist/verdocs-web-sdk/{p-b8b5315b.entry.js → p-dbffd9a8.entry.js} +2 -2
  41. package/dist/verdocs-web-sdk/p-dbffd9a8.entry.js.map +1 -0
  42. 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
  43. package/dist/verdocs-web-sdk/verdocs-sign.entry.esm.js.map +1 -1
  44. package/dist/verdocs-web-sdk/verdocs-web-sdk.esm.js +1 -1
  45. package/package.json +1 -1
  46. package/dist/components/p-D5TpXhYZ.js.map +0 -1
  47. package/dist/verdocs-web-sdk/p-2af69301.system.entry.js +0 -2
  48. package/dist/verdocs-web-sdk/p-2af69301.system.entry.js.map +0 -1
  49. package/dist/verdocs-web-sdk/p-4b321497.system.entry.js.map +0 -1
  50. package/dist/verdocs-web-sdk/p-995b9279.entry.js +0 -2
  51. package/dist/verdocs-web-sdk/p-995b9279.entry.js.map +0 -1
  52. package/dist/verdocs-web-sdk/p-DcRPq1A1.system.js.map +0 -1
  53. package/dist/verdocs-web-sdk/p-b8b5315b.entry.js.map +0 -1
@@ -31,6 +31,10 @@ const VerdocsSigningProgress = /*@__PURE__*/ proxyCustomElement(class VerdocsSig
31
31
  * All fields for the recipient, used to check filled status (may include non-fillable)
32
32
  */
33
33
  this.recipientFields = [];
34
+ /**
35
+ * Names of optional fields the user has explicitly skipped
36
+ */
37
+ this.skippedFields = [];
34
38
  }
35
39
  renderSuccessIcon() {
36
40
  return (h("svg", { width: "24", height: "24", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, h("path", { d: "M10 2C14.4183 2 18 5.58172 18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2ZM10 3C6.13401 3 3 6.13401 3 10C3 13.866 6.13401 17 10 17C13.866 17 17 13.866 17 10C17 6.13401 13.866 3 10 3ZM13.3584 7.64645C13.532 7.82001 13.5513 8.08944 13.4163 8.28431L13.3584 8.35355L9.35355 12.3584C9.17999 12.532 8.91056 12.5513 8.71569 12.4163L8.64645 12.3584L6.64645 10.3584C6.45118 10.1632 6.45118 9.84658 6.64645 9.65131C6.82001 9.47775 7.08944 9.45846 7.28431 9.59346L7.35355 9.65131L9 11.298L12.6513 7.64645C12.8466 7.45118 13.1632 7.45118 13.3584 7.64645Z", fill: "#107C10" })));
@@ -44,13 +48,13 @@ const VerdocsSigningProgress = /*@__PURE__*/ proxyCustomElement(class VerdocsSig
44
48
  }
45
49
  return h("div", { class: "field-label" }, fieldLabel);
46
50
  }
47
- renderFooter(current, total, requiredRemaining) {
51
+ renderFooter(current, _total, requiredRemaining, optionalRemaining) {
48
52
  if (this.mode === 'start') {
49
53
  return (h("button", { class: "btn start", onClick: () => this.started.emit() }, "Start Signing"));
50
54
  }
51
- return (h("div", { class: "nav-buttons" }, requiredRemaining === 0 ? (h("button", { class: "btn submit", onClick: () => this.exit.emit() }, "Submit")) : ([
55
+ return (h("div", { class: "nav-buttons" }, requiredRemaining === 0 && optionalRemaining === 0 ? (h("button", { class: "btn submit", onClick: () => this.exit.emit() }, "Submit")) : ([
52
56
  h("button", { class: "btn previous", disabled: current <= 1, onClick: () => this.previous.emit() }, "Previous"),
53
- h("button", { class: "btn next", disabled: current >= total, onClick: () => this.next.emit() }, "Next"),
57
+ h("button", { class: "btn next", onClick: () => this.next.emit() }, "Next"),
54
58
  ])));
55
59
  }
56
60
  renderCompleted() {
@@ -64,18 +68,19 @@ const VerdocsSigningProgress = /*@__PURE__*/ proxyCustomElement(class VerdocsSig
64
68
  const requiredFields = this.fields.filter(f => f.required);
65
69
  const requiredRemaining = requiredFields.filter(f => !isFilled(f)).length;
66
70
  const optionalFields = this.fields.filter(f => !f.required);
67
- const optionalRemaining = optionalFields.filter(f => !isFilled(f)).length;
71
+ const optionalRemaining = optionalFields.filter(f => !isFilled(f) && !this.skippedFields.includes(f.name)).length;
68
72
  const focusedFieldObj = this.fields.find(f => f.name === this.focusedField);
69
73
  const currentIndex = this.fields.findIndex(f => f.name === this.focusedField) + 1;
70
74
  const totalFields = this.fields.length;
71
- return (h("div", { class: "card" }, h("div", { class: "header" }, h("div", { class: "progress-line" }, requiredRemaining, " of ", requiredFields.length, " required fields remaining"), optionalFields.length > 0 && (h("div", { class: "progress-line optional" }, optionalRemaining, " of ", optionalFields.length, " optional fields remaining"))), h("div", { class: "body" }, this.renderContent(getFieldLabel(focusedFieldObj), focusedFieldObj ? !!isFilled(focusedFieldObj) : false, requiredRemaining === 0)), h("div", { class: "separator" }), this.renderFooter(Math.max(1, currentIndex), totalFields, requiredRemaining)));
75
+ return (h("div", { class: "card" }, h("div", { class: "header" }, h("div", { class: "progress-line" }, requiredRemaining, " of ", requiredFields.length, " required fields remaining"), optionalFields.length > 0 && (h("div", { class: "progress-line optional" }, optionalRemaining, " of ", optionalFields.length, " optional fields remaining"))), h("div", { class: "body" }, this.renderContent(getFieldLabel(focusedFieldObj), focusedFieldObj ? !!isFilled(focusedFieldObj) : false, requiredRemaining === 0)), h("div", { class: "separator" }), this.renderFooter(Math.max(1, currentIndex), totalFields, requiredRemaining, optionalRemaining)));
72
76
  }
73
77
  static get style() { return verdocsSigningProgressCss; }
74
78
  }, [256, "verdocs-signing-progress", {
75
79
  "mode": [1],
76
80
  "focusedField": [1, "focused-field"],
77
81
  "fields": [16],
78
- "recipientFields": [16]
82
+ "recipientFields": [16],
83
+ "skippedFields": [16]
79
84
  }]);
80
85
  function defineCustomElement() {
81
86
  if (typeof customElements === "undefined") {
@@ -97,6 +102,6 @@ function defineCustomElement() {
97
102
  }
98
103
 
99
104
  export { VerdocsSigningProgress as V, defineCustomElement as d };
100
- //# sourceMappingURL=p-D5TpXhYZ.js.map
105
+ //# sourceMappingURL=p-DO7oSTLI.js.map
101
106
 
102
- //# sourceMappingURL=p-D5TpXhYZ.js.map
107
+ //# sourceMappingURL=p-DO7oSTLI.js.map
@@ -0,0 +1 @@
1
+ {"file":"p-DO7oSTLI.js","mappings":"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","names":["__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/dialogs/verdocs-signing-progress/verdocs-signing-progress.scss?tag=verdocs-signing-progress","src/components/dialogs/verdocs-signing-progress/verdocs-signing-progress.tsx"],"sourcesContent":["@import '../../../theme.scss';\n\nverdocs-signing-progress {\n position: fixed;\n top: 64px;\n left: 20px;\n z-index: 900;\n display: block;\n font-family: $verdocs-primary-font;\n\n @media (max-width: 600px) {\n display: none;\n }\n\n .card {\n background: white;\n padding: 16px;\n border-radius: 8px;\n box-shadow:\n 0 4px 6px -1px rgba(0, 0, 0, 0.1),\n 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n width: 240px;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .header {\n font-size: 14px;\n color: #111827;\n display: flex;\n flex-direction: column;\n gap: 6px;\n\n .progress-line.optional {\n color: #6b7280;\n }\n }\n\n .header-completed {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 500;\n color: #111827;\n }\n\n .description {\n font-size: 12px;\n line-height: 16px;\n color: #374151;\n }\n\n .field-label {\n font-family: var(--verdocs-primary-font, $verdocs-primary-font);\n font-size: 0.75rem;\n line-height: 1rem;\n font-weight: 400;\n color: var(--verdocs-body-color, #242424);\n }\n\n .field-completed {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 0.75rem;\n line-height: 1rem;\n font-weight: 400;\n color: var(--verdocs-body-color, #242424);\n\n .text {\n position: relative;\n top: -2px;\n }\n }\n\n .separator {\n height: 1px;\n background-color: #e5e7eb;\n width: 100%;\n }\n\n .btn {\n width: 100%;\n height: 32px;\n border-radius: 4px;\n font-weight: 600;\n font-size: 0.75rem;\n line-height: 1rem;\n cursor: pointer;\n border: 1px solid transparent; // Default border\n transition: all 0.2s;\n display: flex;\n align-items: center;\n justify-content: center;\n\n &:disabled {\n background-color: #f0f0f0;\n border: 1px solid #e0e0e0;\n color: #bdbdbd;\n cursor: not-allowed;\n opacity: 1;\n }\n\n &.start,\n &.submit,\n &.next {\n background-color: var(--verdocs-primary-color, #55bc81);\n color: white;\n\n &:hover:not(:disabled) {\n background-color: var(--verdocs-primary-color-hover, #2b995b);\n }\n\n &:disabled {\n background-color: #f0f0f0;\n border: 1px solid #e0e0e0;\n color: #bdbdbd;\n cursor: not-allowed;\n opacity: 1;\n }\n }\n\n &.prev,\n &.previous {\n background-color: #f3f4f6;\n color: #374151;\n\n &:hover:not(:disabled) {\n background-color: #e5e7eb;\n }\n\n &:disabled {\n background-color: #f0f0f0;\n border: 1px solid #e0e0e0;\n color: #bdbdbd;\n cursor: not-allowed;\n opacity: 1;\n }\n }\n }\n\n .nav-buttons {\n display: flex;\n gap: 12px;\n width: 100%;\n\n .btn {\n flex: 1;\n }\n }\n}\n","import {IEnvelopeField, isFieldFilled} from '@verdocs/js-sdk';\nimport {Component, Prop, h, Event, EventEmitter} from '@stencil/core';\nimport {getFieldLabel} from '../../../utils/utils';\n\n@Component({\n tag: 'verdocs-signing-progress',\n styleUrl: 'verdocs-signing-progress.scss',\n})\nexport class VerdocsSigningProgress {\n /**\n * Display mode\n */\n @Prop() mode: 'start' | 'signing' | 'completed' = 'start';\n\n /**\n * The name of the currently focused field (to highlight it and show its label)\n */\n @Prop() focusedField: string = '';\n\n /**\n * All fillable fields for the current recipient\n */\n @Prop() fields: IEnvelopeField[] = [];\n\n /**\n * All fields for the recipient, used to check filled status (may include non-fillable)\n */\n @Prop() recipientFields: IEnvelopeField[] = [];\n\n /**\n * Names of optional fields the user has explicitly skipped\n */\n @Prop() skippedFields: string[] = [];\n\n /**\n * Emitted when user clicks Start\n */\n @Event({composed: true}) started: EventEmitter;\n\n /**\n * Emitted when user clicks Next\n */\n @Event({composed: true}) next: EventEmitter;\n\n /**\n * Emitted when user clicks Previous\n */\n @Event({composed: true}) previous: EventEmitter;\n\n /**\n * Emitted when user clicks Submit\n */\n @Event({composed: true}) exit: EventEmitter;\n\n renderSuccessIcon() {\n return (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M10 2C14.4183 2 18 5.58172 18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2ZM10 3C6.13401 3 3 6.13401 3 10C3 13.866 6.13401 17 10 17C13.866 17 17 13.866 17 10C17 6.13401 13.866 3 10 3ZM13.3584 7.64645C13.532 7.82001 13.5513 8.08944 13.4163 8.28431L13.3584 8.35355L9.35355 12.3584C9.17999 12.532 8.91056 12.5513 8.71569 12.4163L8.64645 12.3584L6.64645 10.3584C6.45118 10.1632 6.45118 9.84658 6.64645 9.65131C6.82001 9.47775 7.08944 9.45846 7.28431 9.59346L7.35355 9.65131L9 11.298L12.6513 7.64645C12.8466 7.45118 13.1632 7.45118 13.3584 7.64645Z\"\n fill=\"#107C10\"\n />\n </svg>\n );\n }\n\n renderContent(fieldLabel: string, fieldCompleted: boolean, readyToSubmit: boolean) {\n if (this.mode === 'start') {\n return <div class=\"field-label\">{fieldLabel}</div>;\n }\n\n if (fieldCompleted && readyToSubmit) {\n return (\n <div class=\"field-completed\">\n <div class=\"icon\">{this.renderSuccessIcon()}</div>\n <span class=\"text\">Ready to submit.</span>\n </div>\n );\n }\n\n return <div class=\"field-label\">{fieldLabel}</div>;\n }\n\n renderFooter(current: number, _total: number, requiredRemaining: number, optionalRemaining: number) {\n if (this.mode === 'start') {\n return (\n <button class=\"btn start\" onClick={() => this.started.emit()}>\n Start Signing\n </button>\n );\n }\n\n return (\n <div class=\"nav-buttons\">\n {requiredRemaining === 0 && optionalRemaining === 0 ? (\n <button class=\"btn submit\" onClick={() => this.exit.emit()}>\n Submit\n </button>\n ) : (\n [\n <button class=\"btn previous\" disabled={current <= 1} onClick={() => this.previous.emit()}>\n Previous\n </button>,\n <button class=\"btn next\" onClick={() => this.next.emit()}>\n Next\n </button>,\n ]\n )}\n </div>\n );\n }\n\n renderCompleted() {\n return (\n <div class=\"card completed\">\n <div class=\"header-completed\">\n <div class=\"icon\">{this.renderSuccessIcon()}</div>\n Ready to Submit\n </div>\n <div class=\"description\">You have entered all requested signatures. Select Submit to complete the signing process.</div>\n <div class=\"separator\" />\n <button class=\"btn submit\" onClick={() => this.exit.emit()}>\n Submit\n </button>\n </div>\n );\n }\n\n render() {\n if (this.mode === 'completed') {\n return this.renderCompleted();\n }\n\n const isFilled = (f: IEnvelopeField) =>\n isFieldFilled(f, this.recipientFields) && (f.type !== 'dropdown' || !!f.value) && (f.type !== 'radio' || f.value === 'true') && (f.type !== 'checkbox' || f.value === 'true');\n\n const requiredFields = this.fields.filter(f => f.required);\n const requiredRemaining = requiredFields.filter(f => !isFilled(f)).length;\n\n const optionalFields = this.fields.filter(f => !f.required);\n const optionalRemaining = optionalFields.filter(f => !isFilled(f) && !this.skippedFields.includes(f.name)).length;\n\n const focusedFieldObj = this.fields.find(f => f.name === this.focusedField);\n const currentIndex = this.fields.findIndex(f => f.name === this.focusedField) + 1;\n const totalFields = this.fields.length;\n\n return (\n <div class=\"card\">\n <div class=\"header\">\n <div class=\"progress-line\">\n {requiredRemaining} of {requiredFields.length} required fields remaining\n </div>\n {optionalFields.length > 0 && (\n <div class=\"progress-line optional\">\n {optionalRemaining} of {optionalFields.length} optional fields remaining\n </div>\n )}\n </div>\n\n <div class=\"body\">\n {this.renderContent(getFieldLabel(focusedFieldObj), focusedFieldObj ? !!isFilled(focusedFieldObj) : false, requiredRemaining === 0)}\n </div>\n\n <div class=\"separator\" />\n\n {this.renderFooter(Math.max(1, currentIndex), totalFields, requiredRemaining, optionalRemaining)}\n </div>\n );\n }\n}\n"],"version":3}
@@ -26,7 +26,7 @@ import { d as defineCustomElement$9 } from './p-C_Xfg8nQ.js';
26
26
  import { d as defineCustomElement$8 } from './p-ByFUP3AN.js';
27
27
  import { d as defineCustomElement$7 } from './p-C1AtapGD.js';
28
28
  import { d as defineCustomElement$6 } from './p-DyG59pqj.js';
29
- import { d as defineCustomElement$5 } from './p-D5TpXhYZ.js';
29
+ import { d as defineCustomElement$5 } from './p-DO7oSTLI.js';
30
30
  import { d as defineCustomElement$4 } from './p-lE3_dyeh.js';
31
31
  import { d as defineCustomElement$3 } from './p-CcIN7yIE.js';
32
32
  import { d as defineCustomElement$2 } from './p-Yji-KKbG.js';
@@ -463,7 +463,10 @@ const VerdocsSign$1 = /*@__PURE__*/ proxyCustomElement(class VerdocsSign extends
463
463
  }
464
464
  focusNextFieldAfter(field) {
465
465
  setTimeout(() => {
466
- const next = this.getNextUnfilledField(field);
466
+ const allFields = this.getSortedFillableFields();
467
+ const startIndex = allFields.findIndex(f => f.name === field.name) + 1;
468
+ // Only look forward — do not wrap back to optional fields the user already passed
469
+ const next = allFields.slice(startIndex).find(f => !this.isFieldActuallyFilled(f) && !this.skippedFields.includes(f.name));
467
470
  if (next)
468
471
  this.focusFieldElement(next);
469
472
  }, 100);
@@ -778,7 +781,7 @@ const VerdocsSign$1 = /*@__PURE__*/ proxyCustomElement(class VerdocsSign extends
778
781
  // If the currently focused field is unfilled, point the flag to it.
779
782
  // Otherwise find the next unfilled field forward from the current position.
780
783
  let nextField;
781
- if (focusedFieldObj && !this.isFieldActuallyFilled(focusedFieldObj)) {
784
+ if (focusedFieldObj && !this.isFieldActuallyFilled(focusedFieldObj) && !this.skippedFields.includes(focusedFieldObj.name)) {
782
785
  nextField = focusedFieldObj;
783
786
  }
784
787
  else {
@@ -828,7 +831,15 @@ const VerdocsSign$1 = /*@__PURE__*/ proxyCustomElement(class VerdocsSign extends
828
831
  }
829
832
  this.focusedField = nextField.name;
830
833
  this.checkRecipientFields();
831
- this.handleNext();
834
+ // Do NOT call handleNext() here — if this was the last unaddressed field,
835
+ // nextSubmits is now true and handleNext() would auto-submit without user intent.
836
+ // Instead navigate manually only when there are still fields to address.
837
+ if (!this.nextSubmits) {
838
+ const currentField = this.getSortedFillableFields().find(f => f.name === this.focusedField);
839
+ const next = this.getNextUnfilledField(currentField);
840
+ if (next)
841
+ this.focusFieldElement(next);
842
+ }
832
843
  },
833
844
  onClick: () => {
834
845
  this.focusFieldElement(nextField);
@@ -1126,7 +1137,7 @@ const VerdocsSign$1 = /*@__PURE__*/ proxyCustomElement(class VerdocsSign extends
1126
1137
  return (h("span", { class: "remaining-count" }, remaining, " required field", remaining === 1 ? '' : 's', " left"));
1127
1138
  }
1128
1139
  return (h("span", { class: "remaining-count" }, h("span", { class: "check-icon", innerHTML: CheckCircleIcon }), "All required fields complete", optionalLeft > 0 && h("span", { class: "separator" }, "|"), optionalLeft > 0 && (h("span", { class: "review-optional", onClick: () => this.handleNextOptional() }, "Review ", optionalLeft, " optional"))));
1129
- })(), !this.finishLater && (h("verdocs-button", { size: "xsmall", label: this.nextButtonLabel, disabled: !this.agreed || this.submitting, onClick: () => this.handleNext() })), h("div", { class: { 'icon-button': true, 'minus': true, 'disabled': this.zoomLevel === 'normal' }, innerHTML: ToolbarMinusIcon, onClick: () => this.handleZoomOut() }), h("div", { class: { 'icon-button': true, 'plus': true, 'disabled': this.zoomLevel === 'zoom2' }, innerHTML: ToolbarPlusIcon, onClick: () => this.handleZoomIn() }), h("verdocs-dropdown", { options: !this.isDone && !this.finishLater ? inProgressMenuOptions : doneMenuOptions, onOptionSelected: e => this.handleOptionSelected(e) })))), this.toolbarStyle === 'controls' && (h("div", { class: "controls-toolbar" }, h("div", { class: "left-controls" }, h("div", { class: "title" }, this.envelope.name)), h("div", { class: "center-controls", style: { display: 'none' } }, h("span", { class: "label" }, "Page"), h("div", { class: "select-wrapper" }, h("verdocs-select-input", { options: pageOptions, value: this.pageNumber.toString(), onInput: e => this.handlePageSelect(e) })), h("span", { class: "count" }, "of ", totalPages)), h("div", { class: "right-controls" }, h("verdocs-button", { class: "mobile-next-button", label: this.nextButtonLabel, size: "xsmall", disabled: !this.agreed || this.submitting, onClick: () => this.handleNext() }), h("div", { class: { 'icon-button': true, 'minus': true, 'disabled': this.zoomLevel === 'normal' }, innerHTML: ToolbarMinusIcon, onClick: () => this.handleZoomOut() }), h("div", { class: { 'icon-button': true, 'plus': true, 'disabled': this.zoomLevel === 'zoom2' }, innerHTML: ToolbarPlusIcon, onClick: () => this.handleZoomIn() }), h("div", { class: "icon-button download", innerHTML: ToolbarDownloadIcon, onClick: () => this.handleOptionSelected({ detail: { id: 'download' } }) }), h("div", { class: "icon-button print", innerHTML: ToolbarPrintIcon, onClick: () => this.handleOptionSelected({ detail: { id: 'print' } }) })))), h("verdocs-signing-progress", { mode: this.signingProgressMode, focusedField: this.focusedField, fields: this.getSortedFillableFields(), recipientFields: this.getRecipientFields(), onStarted: () => {
1140
+ })(), !this.finishLater && (h("verdocs-button", { size: "xsmall", label: this.nextButtonLabel, disabled: !this.agreed || this.submitting, onClick: () => this.handleNext() })), h("div", { class: { 'icon-button': true, 'minus': true, 'disabled': this.zoomLevel === 'normal' }, innerHTML: ToolbarMinusIcon, onClick: () => this.handleZoomOut() }), h("div", { class: { 'icon-button': true, 'plus': true, 'disabled': this.zoomLevel === 'zoom2' }, innerHTML: ToolbarPlusIcon, onClick: () => this.handleZoomIn() }), h("verdocs-dropdown", { options: !this.isDone && !this.finishLater ? inProgressMenuOptions : doneMenuOptions, onOptionSelected: e => this.handleOptionSelected(e) })))), this.toolbarStyle === 'controls' && (h("div", { class: "controls-toolbar" }, h("div", { class: "left-controls" }, h("div", { class: "title" }, this.envelope.name)), h("div", { class: "center-controls", style: { display: 'none' } }, h("span", { class: "label" }, "Page"), h("div", { class: "select-wrapper" }, h("verdocs-select-input", { options: pageOptions, value: this.pageNumber.toString(), onInput: e => this.handlePageSelect(e) })), h("span", { class: "count" }, "of ", totalPages)), h("div", { class: "right-controls" }, h("verdocs-button", { class: "mobile-next-button", label: this.nextButtonLabel, size: "xsmall", disabled: !this.agreed || this.submitting, onClick: () => this.handleNext() }), h("div", { class: { 'icon-button': true, 'minus': true, 'disabled': this.zoomLevel === 'normal' }, innerHTML: ToolbarMinusIcon, onClick: () => this.handleZoomOut() }), h("div", { class: { 'icon-button': true, 'plus': true, 'disabled': this.zoomLevel === 'zoom2' }, innerHTML: ToolbarPlusIcon, onClick: () => this.handleZoomIn() }), h("div", { class: "icon-button download", innerHTML: ToolbarDownloadIcon, onClick: () => this.handleOptionSelected({ detail: { id: 'download' } }) }), h("div", { class: "icon-button print", innerHTML: ToolbarPrintIcon, onClick: () => this.handleOptionSelected({ detail: { id: 'print' } }) })))), h("verdocs-signing-progress", { mode: this.signingProgressMode, focusedField: this.focusedField, fields: this.getSortedFillableFields(), recipientFields: this.getRecipientFields(), skippedFields: this.skippedFields, onStarted: () => {
1130
1141
  this.handleStartSigning();
1131
1142
  }, onNext: () => this.handleNext(), onPrevious: () => this.handlePrev(), onExit: () => this.handleNext() }), h("div", { class: `document signed-document-container zoom-${this.zoomLevel}` }, (this.envelope.documents || []).map(envelopeDocument => {
1132
1143
  const pageNumbers = integerSequence(1, envelopeDocument.pages);