@verdocs/web-sdk 6.5.0-beta.10 → 6.5.0-beta.11
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.
- package/dist/cjs/index-CQ5bTnED.js +10 -2
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{verdocs-field-attachment_13.cjs.entry.js → verdocs-field-attachment_11.cjs.entry.js} +14 -623
- package/dist/cjs/verdocs-initial-dialog.cjs.entry.js +229 -0
- package/dist/cjs/verdocs-initial-dialog.entry.cjs.js.map +1 -0
- package/dist/cjs/verdocs-sign.cjs.entry.js +72 -5
- package/dist/cjs/verdocs-sign.entry.cjs.js.map +1 -1
- package/dist/cjs/verdocs-signature-dialog.cjs.entry.js +355 -0
- package/dist/cjs/verdocs-signature-dialog.entry.cjs.js.map +1 -0
- package/dist/cjs/verdocs-web-sdk.cjs.js +1 -1
- package/dist/collection/components/embeds/verdocs-sign/verdocs-sign.js +72 -5
- package/dist/collection/components/embeds/verdocs-sign/verdocs-sign.js.map +1 -1
- package/dist/collection/components/fields/verdocs-field-initial/verdocs-field-initial.js +17 -26
- package/dist/collection/components/fields/verdocs-field-initial/verdocs-field-initial.js.map +1 -1
- package/dist/collection/components/fields/verdocs-field-signature/verdocs-field-signature.js +32 -26
- package/dist/collection/components/fields/verdocs-field-signature/verdocs-field-signature.js.map +1 -1
- package/dist/components/{p-CYoBhLFP.js → p-B4XIUesD.js} +42 -54
- package/dist/components/p-B4XIUesD.js.map +1 -0
- package/dist/components/{p-DjOK66Dt.js → p-BoIZ0eWm.js} +43 -55
- package/dist/components/p-BoIZ0eWm.js.map +1 -0
- package/dist/components/{p-BxnX5zPJ.js → p-BzCNCMTQ.js} +24 -53
- package/dist/components/p-BzCNCMTQ.js.map +1 -0
- package/dist/components/{p-DKJPJj6P.js → p-CaA92LBj.js} +43 -55
- package/dist/components/p-CaA92LBj.js.map +1 -0
- package/dist/components/{p-Bygkg9Ho.js → p-DlWkjPea.js} +17 -41
- package/dist/components/p-DlWkjPea.js.map +1 -0
- package/dist/components/verdocs-build.js +56 -68
- package/dist/components/verdocs-build.js.map +1 -1
- package/dist/components/verdocs-field-initial.js +1 -1
- package/dist/components/verdocs-field-signature.js +1 -1
- package/dist/components/verdocs-initial-dialog.js +263 -1
- package/dist/components/verdocs-initial-dialog.js.map +1 -1
- package/dist/components/verdocs-preview.js +1 -1
- package/dist/components/verdocs-sign.js +72 -5
- package/dist/components/verdocs-sign.js.map +1 -1
- package/dist/components/verdocs-signature-dialog.js +393 -1
- package/dist/components/verdocs-signature-dialog.js.map +1 -1
- package/dist/components/verdocs-template-document-page.js +1 -1
- package/dist/components/verdocs-template-fields.js +1 -1
- package/dist/esm/index-BIRwgFLv.js +10 -2
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{verdocs-field-attachment_13.entry.js → verdocs-field-attachment_11.entry.js} +15 -622
- package/dist/{components/p-Daqfz15U.js → esm/verdocs-initial-dialog.entry.js} +8 -49
- package/dist/esm/verdocs-initial-dialog.entry.js.map +1 -0
- package/dist/esm/verdocs-sign.entry.js +72 -5
- package/dist/esm/verdocs-sign.entry.js.map +1 -1
- package/dist/{components/p-0L80sqd9.js → esm/verdocs-signature-dialog.entry.js} +8 -53
- package/dist/esm/verdocs-signature-dialog.entry.js.map +1 -0
- package/dist/esm/verdocs-web-sdk.js +1 -1
- package/dist/esm-es5/index-BIRwgFLv.js +1 -1
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/verdocs-field-attachment_11.entry.js +2 -0
- package/dist/esm-es5/verdocs-field-attachment_11.entry.js.map +1 -0
- package/dist/esm-es5/verdocs-initial-dialog.entry.js +2 -0
- package/dist/esm-es5/verdocs-initial-dialog.entry.js.map +1 -0
- package/dist/esm-es5/verdocs-sign.entry.js +1 -1
- package/dist/esm-es5/verdocs-sign.entry.js.map +1 -1
- package/dist/esm-es5/verdocs-signature-dialog.entry.js +2 -0
- package/dist/esm-es5/verdocs-signature-dialog.entry.js.map +1 -0
- package/dist/esm-es5/verdocs-web-sdk.js +1 -1
- package/dist/types/components/fields/verdocs-field-initial/verdocs-field-initial.d.ts +1 -4
- package/dist/types/components/fields/verdocs-field-signature/verdocs-field-signature.d.ts +2 -4
- package/dist/types/components.d.ts +10 -8
- package/dist/verdocs-web-sdk/p-12422d5d.system.entry.js +2 -0
- package/dist/verdocs-web-sdk/p-12422d5d.system.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/p-2fb3119a.entry.js +2 -0
- package/dist/verdocs-web-sdk/p-2fb3119a.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/p-36659fcd.entry.js +2 -0
- package/dist/verdocs-web-sdk/p-36659fcd.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/p-48d217b4.system.entry.js +2 -0
- package/dist/verdocs-web-sdk/p-48d217b4.system.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/p-5d720de7.entry.js +2 -0
- package/dist/verdocs-web-sdk/p-5d720de7.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/p-8052a9b8.system.entry.js +2 -0
- package/dist/verdocs-web-sdk/p-8052a9b8.system.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/p-B8zpaHu-.system.js +1 -1
- package/dist/verdocs-web-sdk/p-BYyqNgjP.system.js.map +1 -0
- package/dist/verdocs-web-sdk/p-D2FLn0Fu.system.js.map +1 -0
- package/dist/verdocs-web-sdk/p-DQr2_l0b.system.js.map +1 -0
- package/dist/verdocs-web-sdk/p-c7243201.system.entry.js +2 -0
- package/dist/verdocs-web-sdk/p-c7243201.system.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/p-f0c0e64f.entry.js +2 -0
- package/dist/verdocs-web-sdk/p-f0c0e64f.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/p-u99GfztJ.system.js.map +1 -0
- package/dist/verdocs-web-sdk/verdocs-initial-dialog.entry.esm.js.map +1 -0
- package/dist/verdocs-web-sdk/verdocs-sign.entry.esm.js.map +1 -1
- package/dist/verdocs-web-sdk/verdocs-signature-dialog.entry.esm.js.map +1 -0
- package/dist/verdocs-web-sdk/verdocs-web-sdk.esm.js +1 -1
- package/package.json +2 -2
- package/dist/components/p-0L80sqd9.js.map +0 -1
- package/dist/components/p-BxnX5zPJ.js.map +0 -1
- package/dist/components/p-Bygkg9Ho.js.map +0 -1
- package/dist/components/p-CYoBhLFP.js.map +0 -1
- package/dist/components/p-DKJPJj6P.js.map +0 -1
- package/dist/components/p-Daqfz15U.js.map +0 -1
- package/dist/components/p-DjOK66Dt.js.map +0 -1
- package/dist/esm-es5/verdocs-field-attachment_13.entry.js +0 -2
- package/dist/esm-es5/verdocs-field-attachment_13.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-198d3577.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-198d3577.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-25b3c1d6.system.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-25b3c1d6.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-644689ce.system.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-644689ce.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-71ab2ea9.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-71ab2ea9.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-BBoL1FXa.system.js.map +0 -1
- package/dist/verdocs-web-sdk/p-DSPz-5FG.system.js.map +0 -1
|
@@ -1,4 +1,396 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { p as proxyCustomElement, H, c as createEvent, h } from './p-CUAGH_8P.js';
|
|
2
|
+
import { d as defineCustomElement$4 } from './p-D5_KiFFr.js';
|
|
3
|
+
import { d as defineCustomElement$3 } from './p-D9zjm5AL.js';
|
|
4
|
+
import { d as defineCustomElement$2 } from './p-CbtdkfOR.js';
|
|
5
|
+
|
|
6
|
+
const verdocsSignatureDialogCss = "@-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-signature-dialog{font-family:\"Inter\", \"Barlow\", sans-serif;-webkit-box-sizing:border-box;box-sizing:border-box}verdocs-signature-dialog .content{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}verdocs-signature-dialog canvas{background:#ffffff;width:300px;height:79px;max-width:100%;margin:20px auto;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:0 0 6px 0 rgba(0, 0, 0, 0.1215686275);box-shadow:0 0 6px 0 rgba(0, 0, 0, 0.1215686275)}verdocs-signature-dialog .disclaimer{padding:8px 0;font-size:11px;line-height:14px;text-align:justify;color:rgba(0, 0, 0, 0.54)}verdocs-signature-dialog .tabs{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;margin:-20px -20px 0 -20px;border-bottom:1px solid #eeeeee}verdocs-signature-dialog .tabs .tab{-ms-flex:1;flex:1;gap:4px;display:-ms-flexbox;display:flex;cursor:pointer;font-size:12px;font-weight:500;padding:6px 10px;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}verdocs-signature-dialog .tabs .tab.active{background:#f9f5fe;border-bottom:2px solid #707ae5}verdocs-signature-dialog .tabs .tab:hover{color:#55bc81}verdocs-signature-dialog .tabs .tab .icon{width:16px;height:16px}verdocs-signature-dialog .type{display:none;height:100px;margin-top:20px;-ms-flex-direction:column;flex-direction:column}verdocs-signature-dialog .type.active{display:-ms-flexbox;display:flex}verdocs-signature-dialog .draw{height:100px;display:none;margin-top:20px;-ms-flex-direction:column;flex-direction:column}verdocs-signature-dialog .draw.active{display:-ms-flexbox;display:flex}verdocs-signature-dialog .draw .draw-instructions{font-size:13px;color:rgba(0, 0, 0, 0.6);margin-bottom:8px;text-align:center}verdocs-signature-dialog .draw canvas{cursor:crosshair;-ms-touch-action:none;touch-action:none}verdocs-signature-dialog .draw .draw-actions{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-top:12px}verdocs-signature-dialog .draw .draw-actions .clear-button{border:1px solid #d0d0d0;background-color:#ffffff;color:#333333;padding:6px 16px;font-size:13px;cursor:pointer;border-radius:4px;-webkit-transition:all 0.2s ease;transition:all 0.2s ease}verdocs-signature-dialog .draw .draw-actions .clear-button:hover:not(:disabled){background-color:#f5f5f5;border-color:#b0b0b0}verdocs-signature-dialog .draw .draw-actions .clear-button:disabled{opacity:0.5;cursor:not-allowed}verdocs-signature-dialog .upload{height:100px;display:none;margin-top:20px;-ms-flex-direction:column;flex-direction:column}verdocs-signature-dialog .upload.active{display:-ms-flexbox;display:flex}verdocs-signature-dialog .upload .upload-instructions{font-size:13px;color:rgba(0, 0, 0, 0.6);margin-bottom:8px;text-align:center}verdocs-signature-dialog .upload .upload-actions{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;gap:12px;margin-top:8px}verdocs-signature-dialog .upload .upload-actions .upload-button{border:1px solid #55bc81;background-color:#55bc81;color:#ffffff;padding:8px 20px;font-size:13px;cursor:pointer;border-radius:4px;-webkit-transition:all 0.2s ease;transition:all 0.2s ease}verdocs-signature-dialog .upload .upload-actions .upload-button:hover{background-color:rgb(62.7594936709, 159.2405063291, 103.9746835443);border-color:rgb(62.7594936709, 159.2405063291, 103.9746835443)}verdocs-signature-dialog .upload .upload-actions .clear-button{border:1px solid #d0d0d0;background-color:#ffffff;color:#333333;padding:8px 16px;font-size:13px;cursor:pointer;border-radius:4px;-webkit-transition:all 0.2s ease;transition:all 0.2s ease}verdocs-signature-dialog .upload .upload-actions .clear-button:hover:not(:disabled){background-color:#f5f5f5;border-color:#b0b0b0}verdocs-signature-dialog .upload .upload-actions .clear-button:disabled{opacity:0.5;cursor:not-allowed}verdocs-signature-dialog .upload .upload-filename{font-size:12px;color:rgba(0, 0, 0, 0.6);text-align:center;margin-top:8px;font-style:italic}verdocs-signature-dialog{}verdocs-signature-dialog .buttons{gap:20px;display:-ms-flexbox;display:flex;margin-top:14px;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:end;justify-content:flex-end}verdocs-signature-dialog .buttons button{-ms-flex:1;flex:1;border:0;height:38px;display:-ms-flexbox;display:flex;color:#ffffff;font-size:14px;cursor:pointer;-ms-flex-align:center;align-items:center;border-radius:6px;-ms-flex-pack:center;justify-content:center}verdocs-signature-dialog .buttons button.cancel{background-color:#654dcb}verdocs-signature-dialog .buttons button.proceed{background-color:#55bc81}verdocs-signature-dialog .buttons button:disabled{background-color:#6c727f}";
|
|
7
|
+
|
|
8
|
+
const Keyboard = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 8h.01"/><path d="M12 12h.01"/><path d="M14 8h.01"/><path d="M16 12h.01"/><path d="M18 8h.01"/><path d="M6 8h.01"/><path d="M7 16h10"/><path d="M8 12h.01"/><rect width="20" height="16" x="2" y="4" rx="2"/></svg>`;
|
|
9
|
+
const Pencil = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z"/><path d="m15 5 4 4"/></svg>`;
|
|
10
|
+
const Upload = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.3 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v10l-3.1-3.1a2 2 0 0 0-2.814.014L6 21"/><path d="m14 19.5 3-3 3 3"/><path d="M17 22v-5.5"/><circle cx="9" cy="9" r="2"/></svg>`;
|
|
11
|
+
const VerdocsSignatureDialog$1 = /*@__PURE__*/ proxyCustomElement(class VerdocsSignatureDialog extends H {
|
|
12
|
+
constructor(registerHost) {
|
|
13
|
+
super();
|
|
14
|
+
if (registerHost !== false) {
|
|
15
|
+
this.__registerHost();
|
|
16
|
+
}
|
|
17
|
+
this.next = createEvent(this, "next");
|
|
18
|
+
this.exit = createEvent(this, "exit");
|
|
19
|
+
/**
|
|
20
|
+
* Initial signature text
|
|
21
|
+
*/
|
|
22
|
+
this.name = '';
|
|
23
|
+
this.fontLoaded = false;
|
|
24
|
+
this.enteredName = '';
|
|
25
|
+
this.mode = 'type';
|
|
26
|
+
// Drawing state
|
|
27
|
+
this.isDrawing = false;
|
|
28
|
+
this.hasDrawnSignature = false;
|
|
29
|
+
// Upload state
|
|
30
|
+
this.hasUploadedImage = false;
|
|
31
|
+
this.uploadedFileName = '';
|
|
32
|
+
this.currentStroke = [];
|
|
33
|
+
this.allStrokes = [];
|
|
34
|
+
this.lastPoint = null;
|
|
35
|
+
this.uploadedImage = null;
|
|
36
|
+
this.handlePointerDown = (e) => {
|
|
37
|
+
e.preventDefault();
|
|
38
|
+
if (!this.canvasElement || !this.drawingContext) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
this.isDrawing = true;
|
|
42
|
+
this.hasDrawnSignature = true;
|
|
43
|
+
const point = this.getCanvasCoordinates(e);
|
|
44
|
+
this.currentStroke = [point];
|
|
45
|
+
this.lastPoint = point;
|
|
46
|
+
// Start a new path
|
|
47
|
+
this.drawingContext.beginPath();
|
|
48
|
+
this.drawingContext.moveTo(point.x, point.y);
|
|
49
|
+
// Capture pointer to ensure we get all events even if pointer leaves canvas
|
|
50
|
+
this.canvasElement.setPointerCapture(e.pointerId);
|
|
51
|
+
};
|
|
52
|
+
this.handlePointerMove = (e) => {
|
|
53
|
+
e.preventDefault();
|
|
54
|
+
if (!this.isDrawing || !this.drawingContext || !this.lastPoint) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const point = this.getCanvasCoordinates(e);
|
|
58
|
+
this.currentStroke.push(point);
|
|
59
|
+
// Use quadratic curves for smooth drawing
|
|
60
|
+
// The control point is the last point, and we draw to the midpoint
|
|
61
|
+
const midPoint = {
|
|
62
|
+
x: (this.lastPoint.x + point.x) / 2,
|
|
63
|
+
y: (this.lastPoint.y + point.y) / 2,
|
|
64
|
+
};
|
|
65
|
+
this.drawingContext.quadraticCurveTo(this.lastPoint.x, this.lastPoint.y, midPoint.x, midPoint.y);
|
|
66
|
+
this.drawingContext.stroke();
|
|
67
|
+
this.lastPoint = point;
|
|
68
|
+
};
|
|
69
|
+
this.handlePointerUp = (e) => {
|
|
70
|
+
e.preventDefault();
|
|
71
|
+
if (!this.isDrawing || !this.drawingContext) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
// Complete the stroke
|
|
75
|
+
if (this.lastPoint && this.currentStroke.length > 0) {
|
|
76
|
+
this.drawingContext.lineTo(this.lastPoint.x, this.lastPoint.y);
|
|
77
|
+
this.drawingContext.stroke();
|
|
78
|
+
}
|
|
79
|
+
// Save the completed stroke
|
|
80
|
+
if (this.currentStroke.length > 0) {
|
|
81
|
+
this.allStrokes.push([...this.currentStroke]);
|
|
82
|
+
}
|
|
83
|
+
this.isDrawing = false;
|
|
84
|
+
this.currentStroke = [];
|
|
85
|
+
this.lastPoint = null;
|
|
86
|
+
// Release pointer capture
|
|
87
|
+
if (this.canvasElement) {
|
|
88
|
+
this.canvasElement.releasePointerCapture(e.pointerId);
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
this.handlePointerCancel = (e) => {
|
|
92
|
+
// Handle cases where drawing is interrupted (e.g., phone call, notification)
|
|
93
|
+
this.isDrawing = false;
|
|
94
|
+
this.currentStroke = [];
|
|
95
|
+
this.lastPoint = null;
|
|
96
|
+
if (this.canvasElement) {
|
|
97
|
+
this.canvasElement.releasePointerCapture(e.pointerId);
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
this.handleSelectFile = (e) => {
|
|
101
|
+
var _a;
|
|
102
|
+
e.stopPropagation();
|
|
103
|
+
e.preventDefault();
|
|
104
|
+
(_a = this.fileInputElement) === null || _a === void 0 ? void 0 : _a.click();
|
|
105
|
+
};
|
|
106
|
+
this.handleFileChange = (e) => {
|
|
107
|
+
var _a;
|
|
108
|
+
const input = e.target;
|
|
109
|
+
const file = (_a = input.files) === null || _a === void 0 ? void 0 : _a[0];
|
|
110
|
+
if (!file) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
// Validate file type
|
|
114
|
+
if (!file.type.startsWith('image/png')) {
|
|
115
|
+
alert('Please select a PNG image file.');
|
|
116
|
+
input.value = '';
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
// Load and display the image
|
|
120
|
+
const reader = new FileReader();
|
|
121
|
+
reader.onload = (event) => {
|
|
122
|
+
var _a;
|
|
123
|
+
const img = new Image();
|
|
124
|
+
img.onload = () => {
|
|
125
|
+
this.uploadedImage = img;
|
|
126
|
+
this.uploadedFileName = file.name;
|
|
127
|
+
this.hasUploadedImage = true;
|
|
128
|
+
this.drawUploadedImage();
|
|
129
|
+
};
|
|
130
|
+
img.onerror = () => {
|
|
131
|
+
alert('Failed to load image. Please try a different file.');
|
|
132
|
+
input.value = '';
|
|
133
|
+
};
|
|
134
|
+
img.src = (_a = event.target) === null || _a === void 0 ? void 0 : _a.result;
|
|
135
|
+
};
|
|
136
|
+
reader.onerror = () => {
|
|
137
|
+
alert('Failed to read file. Please try again.');
|
|
138
|
+
input.value = '';
|
|
139
|
+
};
|
|
140
|
+
reader.readAsDataURL(file);
|
|
141
|
+
};
|
|
142
|
+
this.handleClearUpload = (e) => {
|
|
143
|
+
e.stopPropagation();
|
|
144
|
+
e.preventDefault();
|
|
145
|
+
this.uploadedImage = null;
|
|
146
|
+
this.uploadedFileName = '';
|
|
147
|
+
this.hasUploadedImage = false;
|
|
148
|
+
// Clear the file input
|
|
149
|
+
if (this.fileInputElement) {
|
|
150
|
+
this.fileInputElement.value = '';
|
|
151
|
+
}
|
|
152
|
+
// Clear the canvas
|
|
153
|
+
if (this.canvasElement) {
|
|
154
|
+
const ctx = this.canvasElement.getContext('2d');
|
|
155
|
+
if (ctx) {
|
|
156
|
+
ctx.clearRect(0, 0, this.canvasElement.width, this.canvasElement.height);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
componentWillLoad() {
|
|
162
|
+
this.enteredName = this.name;
|
|
163
|
+
const ds = new FontFace('Dancing Script', 'url(https://fonts.gstatic.com/s/dancingscript/v19/If2cXTr6YS-zF4S-kcSWSVi_sxjsohD9F50Ruu7BMSo3Sup6hNX6plRP.woff)');
|
|
164
|
+
ds.load().then(font => {
|
|
165
|
+
document.fonts.add(font);
|
|
166
|
+
this.fontLoaded = true;
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
componentDidLoad() {
|
|
170
|
+
this.redrawSignature();
|
|
171
|
+
this.setupDrawingCanvas();
|
|
172
|
+
}
|
|
173
|
+
componentDidUpdate() {
|
|
174
|
+
this.redrawSignature();
|
|
175
|
+
this.setupDrawingCanvas();
|
|
176
|
+
// Redraw uploaded image when in upload mode
|
|
177
|
+
if (this.mode === 'upload' && this.hasUploadedImage) {
|
|
178
|
+
this.drawUploadedImage();
|
|
179
|
+
}
|
|
180
|
+
// Redraw drawn signature when in draw mode
|
|
181
|
+
if (this.mode === 'draw' && this.allStrokes.length > 0) {
|
|
182
|
+
this.redrawDrawnSignature();
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
redrawSignature() {
|
|
186
|
+
if (!this.canvasElement || this.mode !== 'type') {
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
const canvasWidth = this.canvasElement.width;
|
|
190
|
+
const context = this.canvasElement.getContext('2d');
|
|
191
|
+
context.clearRect(0, 0, this.canvasElement.width, this.canvasElement.height);
|
|
192
|
+
let fontSize = 100;
|
|
193
|
+
do {
|
|
194
|
+
fontSize -= 2;
|
|
195
|
+
context.font = `${fontSize}px Dancing Script`;
|
|
196
|
+
} while (context.measureText(this.enteredName).width > canvasWidth - 32); // 32px padding each side
|
|
197
|
+
context.textAlign = 'center';
|
|
198
|
+
context.textBaseline = 'middle';
|
|
199
|
+
context.font = `${fontSize}px Dancing Script`;
|
|
200
|
+
context.fillText(this.enteredName, this.canvasElement.width / 2, this.canvasElement.height / 2);
|
|
201
|
+
}
|
|
202
|
+
redrawDrawnSignature() {
|
|
203
|
+
if (!this.canvasElement || !this.drawingContext || this.allStrokes.length === 0) {
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
// Clear the canvas first
|
|
207
|
+
this.drawingContext.clearRect(0, 0, this.canvasElement.width, this.canvasElement.height);
|
|
208
|
+
// Redraw all strokes
|
|
209
|
+
for (const stroke of this.allStrokes) {
|
|
210
|
+
if (stroke.length === 0) {
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
// Start the path at the first point
|
|
214
|
+
this.drawingContext.beginPath();
|
|
215
|
+
this.drawingContext.moveTo(stroke[0].x, stroke[0].y);
|
|
216
|
+
// Draw smooth curves through all points in the stroke
|
|
217
|
+
for (let i = 1; i < stroke.length; i++) {
|
|
218
|
+
const currentPoint = stroke[i];
|
|
219
|
+
const previousPoint = stroke[i - 1];
|
|
220
|
+
// Use quadratic curves for smooth lines
|
|
221
|
+
const midPoint = {
|
|
222
|
+
x: (previousPoint.x + currentPoint.x) / 2,
|
|
223
|
+
y: (previousPoint.y + currentPoint.y) / 2,
|
|
224
|
+
};
|
|
225
|
+
this.drawingContext.quadraticCurveTo(previousPoint.x, previousPoint.y, midPoint.x, midPoint.y);
|
|
226
|
+
}
|
|
227
|
+
// Draw to the last point
|
|
228
|
+
if (stroke.length > 1) {
|
|
229
|
+
const lastPoint = stroke[stroke.length - 1];
|
|
230
|
+
this.drawingContext.lineTo(lastPoint.x, lastPoint.y);
|
|
231
|
+
}
|
|
232
|
+
this.drawingContext.stroke();
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
handleNameChange(e) {
|
|
236
|
+
this.enteredName = e.target.value;
|
|
237
|
+
}
|
|
238
|
+
handleCancel(e) {
|
|
239
|
+
e.stopPropagation();
|
|
240
|
+
e.preventDefault();
|
|
241
|
+
this.exit.emit();
|
|
242
|
+
}
|
|
243
|
+
handleAdopt(e) {
|
|
244
|
+
e.stopPropagation();
|
|
245
|
+
e.preventDefault();
|
|
246
|
+
const data = this.canvasElement.toDataURL('image/png');
|
|
247
|
+
this.next.emit(data);
|
|
248
|
+
}
|
|
249
|
+
isAdoptButtonDisabled() {
|
|
250
|
+
switch (this.mode) {
|
|
251
|
+
case 'type':
|
|
252
|
+
// Disable if no name has been entered
|
|
253
|
+
return !this.enteredName || this.enteredName.trim().length === 0;
|
|
254
|
+
case 'draw':
|
|
255
|
+
// Disable if nothing has been drawn
|
|
256
|
+
return !this.hasDrawnSignature || this.allStrokes.length === 0;
|
|
257
|
+
case 'upload':
|
|
258
|
+
// Disable if no file has been uploaded
|
|
259
|
+
return !this.hasUploadedImage;
|
|
260
|
+
default:
|
|
261
|
+
return true;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
setupDrawingCanvas() {
|
|
265
|
+
if (!this.canvasElement) {
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
// Set up drawing context when in draw mode
|
|
269
|
+
if (this.mode === 'draw') {
|
|
270
|
+
// Always get fresh context from the current canvas element
|
|
271
|
+
const ctx = this.canvasElement.getContext('2d');
|
|
272
|
+
// Only initialize if we don't have a context or it's different
|
|
273
|
+
if (ctx && ctx !== this.drawingContext) {
|
|
274
|
+
this.drawingContext = ctx;
|
|
275
|
+
// Configure drawing style for smooth signatures
|
|
276
|
+
this.drawingContext.strokeStyle = '#000000';
|
|
277
|
+
this.drawingContext.lineWidth = 2;
|
|
278
|
+
this.drawingContext.lineCap = 'round';
|
|
279
|
+
this.drawingContext.lineJoin = 'round';
|
|
280
|
+
// Clear canvas only if there are no existing strokes
|
|
281
|
+
if (this.allStrokes.length === 0) {
|
|
282
|
+
this.drawingContext.clearRect(0, 0, this.canvasElement.width, this.canvasElement.height);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
// Reset drawing context when switching away from draw mode
|
|
287
|
+
// NOTE: We don't clear allStrokes here so drawing persists when returning to draw mode
|
|
288
|
+
if (this.mode !== 'draw' && this.drawingContext) {
|
|
289
|
+
this.drawingContext = null;
|
|
290
|
+
this.currentStroke = [];
|
|
291
|
+
this.lastPoint = null;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
clearDrawingCanvas() {
|
|
295
|
+
if (!this.canvasElement || !this.drawingContext) {
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
this.drawingContext.clearRect(0, 0, this.canvasElement.width, this.canvasElement.height);
|
|
299
|
+
this.currentStroke = [];
|
|
300
|
+
this.allStrokes = [];
|
|
301
|
+
this.lastPoint = null;
|
|
302
|
+
this.hasDrawnSignature = false;
|
|
303
|
+
}
|
|
304
|
+
handleClearDrawing(e) {
|
|
305
|
+
e.stopPropagation();
|
|
306
|
+
e.preventDefault();
|
|
307
|
+
this.clearDrawingCanvas();
|
|
308
|
+
}
|
|
309
|
+
getCanvasCoordinates(e) {
|
|
310
|
+
if (!this.canvasElement) {
|
|
311
|
+
return { x: 0, y: 0 };
|
|
312
|
+
}
|
|
313
|
+
const rect = this.canvasElement.getBoundingClientRect();
|
|
314
|
+
// Calculate the scale factor between canvas size and display size
|
|
315
|
+
const scaleX = this.canvasElement.width / rect.width;
|
|
316
|
+
const scaleY = this.canvasElement.height / rect.height;
|
|
317
|
+
return {
|
|
318
|
+
x: (e.clientX - rect.left) * scaleX,
|
|
319
|
+
y: (e.clientY - rect.top) * scaleY,
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
drawUploadedImage() {
|
|
323
|
+
if (!this.canvasElement || !this.uploadedImage) {
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
const ctx = this.canvasElement.getContext('2d');
|
|
327
|
+
if (!ctx) {
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
// Clear the canvas
|
|
331
|
+
ctx.clearRect(0, 0, this.canvasElement.width, this.canvasElement.height);
|
|
332
|
+
// Calculate scaling to fit image within canvas while maintaining aspect ratio
|
|
333
|
+
const canvasWidth = this.canvasElement.width;
|
|
334
|
+
const canvasHeight = this.canvasElement.height;
|
|
335
|
+
const imageWidth = this.uploadedImage.width;
|
|
336
|
+
const imageHeight = this.uploadedImage.height;
|
|
337
|
+
// Calculate scale to fit within canvas (with some padding)
|
|
338
|
+
const padding = 10;
|
|
339
|
+
const availableWidth = canvasWidth - padding * 2;
|
|
340
|
+
const availableHeight = canvasHeight - padding * 2;
|
|
341
|
+
const scaleX = availableWidth / imageWidth;
|
|
342
|
+
const scaleY = availableHeight / imageHeight;
|
|
343
|
+
const scale = Math.min(scaleX, scaleY);
|
|
344
|
+
// Calculate dimensions and position to center the image
|
|
345
|
+
const scaledWidth = imageWidth * scale;
|
|
346
|
+
const scaledHeight = imageHeight * scale;
|
|
347
|
+
const x = (canvasWidth - scaledWidth) / 2;
|
|
348
|
+
const y = (canvasHeight - scaledHeight) / 2;
|
|
349
|
+
// Draw the image centered and scaled
|
|
350
|
+
ctx.drawImage(this.uploadedImage, x, y, scaledWidth, scaledHeight);
|
|
351
|
+
}
|
|
352
|
+
render() {
|
|
353
|
+
return (h("verdocs-dialog", { key: 'd838183810455ddd1cb36e160b5cf601bf31db65' }, h("div", { key: 'e086f4ac7e2fdeb84ce71cf2030a677152033f7e', slot: "heading", class: "heading" }, h("div", { key: '5695fd95e4e3d5769d63e0436491451fadfca4a4', class: "icon" }, h("svg", { key: 'a58836ecf7dd0bce31b6cc0a41ee21641c3a5e46', width: "22", height: "19", viewBox: "0 0 22 19", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, h("g", { key: '119572170e51d5ab36fd7ad09513a09d1cfdb632', "clip-path": "url(#clip0_34208_4881)" }, h("path", { key: 'b0ec47c70c63c58bf46a5d7ce63b2f95ec4d2bb1', d: "M3.125 0.75C1.88398 0.75 0.875 1.75898 0.875 3V16.5C0.875 17.741 1.88398 18.75 3.125 18.75H12.125C13.366 18.75 14.375 17.741 14.375 16.5V15.8215C14.2801 15.8602 14.1852 15.8918 14.0867 15.9164L11.9738 16.4437C11.8684 16.4684 11.7629 16.4859 11.6574 16.493C11.6258 16.4965 11.5941 16.5 11.5625 16.5H9.3125C9.09805 16.5 8.90469 16.3805 8.80977 16.1906L8.50039 15.5684C8.44062 15.4488 8.32109 15.375 8.19102 15.375C8.06094 15.375 7.93789 15.4488 7.88164 15.5684L7.57227 16.1906C7.47031 16.398 7.24883 16.5211 7.02031 16.5C6.7918 16.4789 6.59492 16.3207 6.53164 16.1027L5.9375 14.1445L5.59297 15.2977C5.37852 16.0113 4.72109 16.5 3.97578 16.5H3.6875C3.37812 16.5 3.125 16.2469 3.125 15.9375C3.125 15.6281 3.37812 15.375 3.6875 15.375H3.97578C4.22539 15.375 4.44336 15.2133 4.51367 14.9742L5.0375 13.234C5.15703 12.8367 5.52266 12.5625 5.9375 12.5625C6.35234 12.5625 6.71797 12.8367 6.8375 13.234L7.24531 14.591C7.50547 14.373 7.83594 14.25 8.1875 14.25C8.74648 14.25 9.25625 14.5664 9.50586 15.0656L9.66055 15.375H9.97344C9.86445 15.0656 9.84336 14.7281 9.92422 14.3977L10.4516 12.2848C10.55 11.8875 10.7539 11.5289 11.0422 11.2406L14.375 7.90781V6.375H9.875C9.25273 6.375 8.75 5.87227 8.75 5.25V0.75H3.125ZM9.875 0.75V5.25H14.375L9.875 0.75ZM20.2039 5.66133C19.6555 5.11289 18.766 5.11289 18.2141 5.66133L17.1805 6.69492L19.6766 9.19102L20.7102 8.15742C21.2586 7.60898 21.2586 6.71953 20.7102 6.16758L20.2039 5.66133ZM11.8402 12.0352C11.6961 12.1793 11.5941 12.3586 11.5449 12.559L11.0176 14.6719C10.9684 14.8652 11.0246 15.0656 11.1652 15.2063C11.3059 15.3469 11.5062 15.4031 11.6996 15.3539L13.8125 14.8266C14.0094 14.7773 14.1922 14.6754 14.3363 14.5312L18.8785 9.98555L16.3824 7.48945L11.8402 12.0352Z", fill: "white" })), h("defs", { key: 'b435fa99e9ab36cff1c5ee12df81d6644d1e8b3b' }, h("clipPath", { key: 'ea95f0abb5d9e08c8e95a8f345cd02917b3c46db', id: "clip0_34208_4881" }, h("path", { key: '2e5f0f1e4fd960e21614a46735acc0c869b87437', d: "M0.875 0.75H21.125V18.75H0.875V0.75Z", fill: "white" }))))), h("div", { key: 'c36d8d6aa53bdba02dea4a8885ad531f4bf55fe8', class: "title" }, "Adopt Signature")), h("div", { key: '9616e43bfd7dfcdb38acc54bff69eeab12239d94', slot: "content", class: "content" }, h("div", { key: '421ac8a9a88a53bd535c8202e383583181146e34', class: "tabs" }, h("div", { key: '8ebc6cc05e11553afa53685dc528c1e58e7bd43a', class: { tab: true, active: this.mode === 'type' }, onClick: () => (this.mode = 'type') }, h("div", { key: '22373fb7e6fdd5a78d5d36b5740da0a2fee38f8c', innerHTML: Keyboard, class: "icon" }), h("div", { key: '835b389a3e4b56a9c085650530c32f0af0354b17' }, "Type")), h("div", { key: '589afcff232ca9cef56cf042d9bac75884892974', class: { tab: true, active: this.mode === 'draw' }, onClick: () => (this.mode = 'draw') }, h("div", { key: '5573796f4f12093489e151a020da56ed0579956a', innerHTML: Pencil, class: "icon" }), h("div", { key: '12e652e05d33c50abd0b8b730562b45264c3e6c0' }, "Draw")), h("div", { key: '41a795695850d155991f2175acf203c674a51dad', class: { tab: true, active: this.mode === 'upload' }, onClick: () => (this.mode = 'upload') }, h("div", { key: '0c0248b88c77b3a1fb334f785b5bbbe389d31f97', innerHTML: Upload, class: "icon" }), h("div", { key: '04de2e449f9e6c943a219387d4c6340673e24041' }, "Upload"))), h("div", { key: '53fc1dcf9b5d29e613da7079a267c3e30625dfc7', class: { type: true, active: this.mode === 'type' } }, h("verdocs-text-input", { key: '53e1a6653495665effb048f3a936f0f1b4124c2d', label: "Full Name", value: this.enteredName, placeholder: "Full Name...", description: "As shown on driver's license or govt. ID card.", onInput: e => this.handleNameChange(e), onClick: e => e.stopPropagation() })), h("div", { key: 'fc156dcb001bd84b6db225840dcc95a9abab34bb', class: { draw: true, active: this.mode === 'draw' } }, h("div", { key: '299bd972c18922c192b21949069633e275da4d24', class: "draw-instructions" }, "Draw your signature below using your mouse or finger"), h("div", { key: 'fb3796bbd36fe6269392903a75268820a17858c0', class: "draw-actions" }, h("button", { key: 'ebe9b40d645352229a0be444c822314320387fd4', class: "clear-button", onClick: e => this.handleClearDrawing(e), disabled: !this.hasDrawnSignature }, "Clear"))), h("div", { key: 'c92a9661aabd3362dba6933f953f6cd8b32374e2', class: { upload: true, active: this.mode === 'upload' } }, h("div", { key: 'faf6d5d34f48e5eb078bc039f1a4c3dddbbe40c3', class: "upload-instructions" }, "Upload a PNG image of your signature"), h("input", { key: 'bf0f0e47f5db36b6d87b1e01f8781d29bbfcd63c', ref: el => (this.fileInputElement = el), type: "file", accept: "image/png", onChange: this.handleFileChange, style: { display: 'none' } }), h("div", { key: '54a1d918f66c6d0f2f4e7f7498410c50c204dd6d', class: "upload-actions" }, h("button", { key: '08b1536cec63081c48483d5da15cbea42b2e8e4f', class: "upload-button", onClick: this.handleSelectFile }, this.hasUploadedImage ? 'Change Image' : 'Select PNG File'), this.hasUploadedImage && (h("button", { key: 'e201f4042c323e4eb88f48a72f28e40bd06c5600', class: "clear-button", onClick: this.handleClearUpload }, "Clear"))), this.uploadedFileName && h("div", { key: '1a3b6b0a3dbb196ebd66302b6c50cb3238925532', class: "upload-filename" }, this.uploadedFileName)), h("canvas", { key: '23f76d5797a4daaea89970062653204af53da5bc', ref: el => (this.canvasElement = el), width: "300", height: "79", onPointerDown: this.handlePointerDown, onPointerMove: this.handlePointerMove, onPointerUp: this.handlePointerUp, onPointerCancel: this.handlePointerCancel, style: { touchAction: 'none', cursor: 'crosshair' } }), h("div", { key: '5b652d1f2b484fedc47c93107a33375979ebb7e5', class: "disclaimer" }, "By clicking Adopt, I agree that the signature will be the electronic representation of my signature for all purposes when I (or my agent) use them on documents, including legally binding contracts \u2014 just the same as a pen-and-paper signature or initial.")), h("div", { key: 'c039995afc96ddebd96d8a974ffa41353cadb118', class: "footer", slot: "footer" }, h("div", { key: 'b87e6fdb90a30e049f03a40f7cf5a065858f7303', class: "buttons" }, h("button", { key: 'dd96285ada5f5428e8205dd13f405f5ee56a51ba', class: "cancel", onClick: e => this.handleCancel(e) }, "Cancel"), h("button", { key: '46b3af475fded0383a7590c2253a3dd39f1de9ca', class: "proceed", onClick: e => this.handleAdopt(e), disabled: this.isAdoptButtonDisabled() }, "Adopt & Sign")))));
|
|
354
|
+
}
|
|
355
|
+
static get style() { return verdocsSignatureDialogCss; }
|
|
356
|
+
}, [256, "verdocs-signature-dialog", {
|
|
357
|
+
"name": [1],
|
|
358
|
+
"fontLoaded": [32],
|
|
359
|
+
"enteredName": [32],
|
|
360
|
+
"mode": [32],
|
|
361
|
+
"isDrawing": [32],
|
|
362
|
+
"hasDrawnSignature": [32],
|
|
363
|
+
"hasUploadedImage": [32],
|
|
364
|
+
"uploadedFileName": [32]
|
|
365
|
+
}]);
|
|
366
|
+
function defineCustomElement$1() {
|
|
367
|
+
if (typeof customElements === "undefined") {
|
|
368
|
+
return;
|
|
369
|
+
}
|
|
370
|
+
const components = ["verdocs-signature-dialog", "verdocs-dialog", "verdocs-help-icon", "verdocs-text-input"];
|
|
371
|
+
components.forEach(tagName => { switch (tagName) {
|
|
372
|
+
case "verdocs-signature-dialog":
|
|
373
|
+
if (!customElements.get(tagName)) {
|
|
374
|
+
customElements.define(tagName, VerdocsSignatureDialog$1);
|
|
375
|
+
}
|
|
376
|
+
break;
|
|
377
|
+
case "verdocs-dialog":
|
|
378
|
+
if (!customElements.get(tagName)) {
|
|
379
|
+
defineCustomElement$4();
|
|
380
|
+
}
|
|
381
|
+
break;
|
|
382
|
+
case "verdocs-help-icon":
|
|
383
|
+
if (!customElements.get(tagName)) {
|
|
384
|
+
defineCustomElement$3();
|
|
385
|
+
}
|
|
386
|
+
break;
|
|
387
|
+
case "verdocs-text-input":
|
|
388
|
+
if (!customElements.get(tagName)) {
|
|
389
|
+
defineCustomElement$2();
|
|
390
|
+
}
|
|
391
|
+
break;
|
|
392
|
+
} });
|
|
393
|
+
}
|
|
2
394
|
|
|
3
395
|
const VerdocsSignatureDialog = VerdocsSignatureDialog$1;
|
|
4
396
|
const defineCustomElement = defineCustomElement$1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"verdocs-signature-dialog.js","mappings":";;;;;;;","names":[],"sources":[],"sourcesContent":[],"version":3}
|
|
1
|
+
{"file":"verdocs-signature-dialog.js","mappings":"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","names":["VerdocsSignatureDialog","__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/dialogs/verdocs-signature-dialog/verdocs-signature-dialog.scss?tag=verdocs-signature-dialog","src/components/dialogs/verdocs-signature-dialog/verdocs-signature-dialog.tsx"],"sourcesContent":["@import '../../../theme.scss';\n\nverdocs-signature-dialog {\n font-family: $primary-font;\n box-sizing: border-box;\n\n .content {\n display: flex;\n flex-direction: column;\n }\n\n canvas {\n background: $verdocs-grey-4;\n width: 300px;\n height: 79px;\n max-width: 100%;\n margin: 20px auto;\n box-sizing: border-box;\n box-shadow: 0 0 6px 0 #0000001f;\n }\n\n .disclaimer {\n padding: 8px 0;\n font-size: 11px;\n line-height: 14px;\n text-align: justify;\n color: rgba(0, 0, 0, 0.54);\n }\n\n .tabs {\n display: flex;\n flex-direction: row;\n margin: -20px -20px 0 -20px;\n border-bottom: 1px solid #eeeeee;\n\n .tab {\n flex: 1;\n gap: 4px;\n display: flex;\n cursor: pointer;\n font-size: 12px;\n font-weight: 500;\n padding: 6px 10px;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n\n &.active {\n background: #f9f5fe;\n border-bottom: 2px solid $border-color;\n }\n\n &:hover {\n color: $primary-color;\n }\n\n .icon {\n width: 16px;\n height: 16px;\n }\n }\n }\n\n // We use fixed heights for these sections to avoid layout shifts when switching tabs.\n .type {\n display: none;\n height: 100px;\n margin-top: 20px;\n flex-direction: column;\n\n &.active {\n display: flex;\n }\n }\n\n .draw {\n height: 100px;\n display: none;\n margin-top: 20px;\n flex-direction: column;\n\n &.active {\n display: flex;\n }\n\n .draw-instructions {\n font-size: 13px;\n color: rgba(0, 0, 0, 0.6);\n margin-bottom: 8px;\n text-align: center;\n }\n\n canvas {\n cursor: crosshair;\n touch-action: none;\n }\n\n .draw-actions {\n display: flex;\n justify-content: center;\n margin-top: 12px;\n\n .clear-button {\n border: 1px solid #d0d0d0;\n background-color: #ffffff;\n color: #333333;\n padding: 6px 16px;\n font-size: 13px;\n cursor: pointer;\n border-radius: 4px;\n transition: all 0.2s ease;\n\n &:hover:not(:disabled) {\n background-color: #f5f5f5;\n border-color: #b0b0b0;\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n }\n }\n }\n\n .upload {\n height: 100px;\n display: none;\n margin-top: 20px;\n flex-direction: column;\n\n &.active {\n display: flex;\n }\n\n .upload-instructions {\n font-size: 13px;\n color: rgba(0, 0, 0, 0.6);\n margin-bottom: 8px;\n text-align: center;\n }\n\n .upload-actions {\n display: flex;\n justify-content: center;\n gap: 12px;\n margin-top: 8px;\n\n .upload-button {\n border: 1px solid $primary-color;\n background-color: $primary-color;\n color: #ffffff;\n padding: 8px 20px;\n font-size: 13px;\n cursor: pointer;\n border-radius: 4px;\n transition: all 0.2s ease;\n\n &:hover {\n background-color: darken($primary-color, 10%);\n border-color: darken($primary-color, 10%);\n }\n }\n\n .clear-button {\n border: 1px solid #d0d0d0;\n background-color: #ffffff;\n color: #333333;\n padding: 8px 16px;\n font-size: 13px;\n cursor: pointer;\n border-radius: 4px;\n transition: all 0.2s ease;\n\n &:hover:not(:disabled) {\n background-color: #f5f5f5;\n border-color: #b0b0b0;\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n }\n }\n\n .upload-filename {\n font-size: 12px;\n color: rgba(0, 0, 0, 0.6);\n text-align: center;\n margin-top: 8px;\n font-style: italic;\n }\n }\n\n /* TODO: We're getting positive feedback. Add this as a formal button variant. */\n .buttons {\n gap: 20px;\n display: flex;\n margin-top: 14px;\n flex-direction: row;\n justify-content: flex-end;\n\n button {\n flex: 1;\n border: 0;\n height: 38px;\n display: flex;\n color: #ffffff;\n font-size: 14px;\n //font-size: 16px;\n cursor: pointer;\n align-items: center;\n border-radius: 6px;\n justify-content: center;\n\n &.cancel {\n background-color: $verdocs-button-purple;\n }\n\n &.proceed {\n background-color: $verdocs-button-green;\n }\n\n &:disabled {\n background-color: $verdocs-button-disabled;\n }\n }\n }\n}\n","import {Component, Prop, h, Event, EventEmitter, State} from '@stencil/core';\n\nconst Keyboard = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M10 8h.01\"/><path d=\"M12 12h.01\"/><path d=\"M14 8h.01\"/><path d=\"M16 12h.01\"/><path d=\"M18 8h.01\"/><path d=\"M6 8h.01\"/><path d=\"M7 16h10\"/><path d=\"M8 12h.01\"/><rect width=\"20\" height=\"16\" x=\"2\" y=\"4\" rx=\"2\"/></svg>`;\nconst Pencil = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\"/><path d=\"m15 5 4 4\"/></svg>`;\nconst Upload = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M10.3 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v10l-3.1-3.1a2 2 0 0 0-2.814.014L6 21\"/><path d=\"m14 19.5 3-3 3 3\"/><path d=\"M17 22v-5.5\"/><circle cx=\"9\" cy=\"9\" r=\"2\"/></svg>`;\n\n/**\n * Display a dialog that allows the user to specify a signature image, either by using a signature-font-generated image\n * based on their full name, or by hand-drawing their signature with a mouse or tablet.\n */\n@Component({\n tag: 'verdocs-signature-dialog',\n styleUrl: 'verdocs-signature-dialog.scss',\n})\nexport class VerdocsSignatureDialog {\n private canvasElement?: HTMLCanvasElement;\n private drawingContext?: CanvasRenderingContext2D;\n private fileInputElement?: HTMLInputElement;\n\n /**\n * Initial signature text\n */\n @Prop() name: string = '';\n\n /**\n * Fired when the user completes the dialog and clicks Adopt. The event detail will contain a base64-encoded string\n * representation of the signature adopted.\n */\n @Event({composed: true}) next: EventEmitter<string>;\n\n /**\n * Event fired when the step is cancelled. This is called exit to avoid conflicts with the JS-reserved \"cancel\" event name.\n */\n @Event({composed: true}) exit: EventEmitter;\n\n @State() fontLoaded = false;\n\n @State() enteredName: string = '';\n\n @State() mode: string = 'type';\n\n // Drawing state\n @State() isDrawing = false;\n\n @State() hasDrawnSignature = false;\n\n // Upload state\n @State() hasUploadedImage = false;\n\n @State() uploadedFileName: string = '';\n\n private currentStroke: Array<{x: number; y: number}> = [];\n private allStrokes: Array<Array<{x: number; y: number}>> = [];\n private lastPoint: {x: number; y: number} | null = null;\n private uploadedImage: HTMLImageElement | null = null;\n\n componentWillLoad() {\n this.enteredName = this.name;\n\n const ds = new FontFace('Dancing Script', 'url(https://fonts.gstatic.com/s/dancingscript/v19/If2cXTr6YS-zF4S-kcSWSVi_sxjsohD9F50Ruu7BMSo3Sup6hNX6plRP.woff)');\n ds.load().then(font => {\n document.fonts.add(font);\n this.fontLoaded = true;\n });\n }\n\n componentDidLoad() {\n this.redrawSignature();\n this.setupDrawingCanvas();\n }\n\n componentDidUpdate() {\n this.redrawSignature();\n this.setupDrawingCanvas();\n\n // Redraw uploaded image when in upload mode\n if (this.mode === 'upload' && this.hasUploadedImage) {\n this.drawUploadedImage();\n }\n\n // Redraw drawn signature when in draw mode\n if (this.mode === 'draw' && this.allStrokes.length > 0) {\n this.redrawDrawnSignature();\n }\n }\n\n redrawSignature() {\n if (!this.canvasElement || this.mode !== 'type') {\n return;\n }\n\n const canvasWidth = this.canvasElement.width;\n\n const context = this.canvasElement.getContext('2d');\n context.clearRect(0, 0, this.canvasElement.width, this.canvasElement.height);\n\n let fontSize = 100;\n do {\n fontSize -= 2;\n context.font = `${fontSize}px Dancing Script`;\n } while (context.measureText(this.enteredName).width > canvasWidth - 32); // 32px padding each side\n\n context.textAlign = 'center';\n context.textBaseline = 'middle';\n context.font = `${fontSize}px Dancing Script`;\n context.fillText(this.enteredName, this.canvasElement.width / 2, this.canvasElement.height / 2);\n }\n\n redrawDrawnSignature() {\n if (!this.canvasElement || !this.drawingContext || this.allStrokes.length === 0) {\n return;\n }\n\n // Clear the canvas first\n this.drawingContext.clearRect(0, 0, this.canvasElement.width, this.canvasElement.height);\n\n // Redraw all strokes\n for (const stroke of this.allStrokes) {\n if (stroke.length === 0) {\n continue;\n }\n\n // Start the path at the first point\n this.drawingContext.beginPath();\n this.drawingContext.moveTo(stroke[0].x, stroke[0].y);\n\n // Draw smooth curves through all points in the stroke\n for (let i = 1; i < stroke.length; i++) {\n const currentPoint = stroke[i];\n const previousPoint = stroke[i - 1];\n\n // Use quadratic curves for smooth lines\n const midPoint = {\n x: (previousPoint.x + currentPoint.x) / 2,\n y: (previousPoint.y + currentPoint.y) / 2,\n };\n\n this.drawingContext.quadraticCurveTo(previousPoint.x, previousPoint.y, midPoint.x, midPoint.y);\n }\n\n // Draw to the last point\n if (stroke.length > 1) {\n const lastPoint = stroke[stroke.length - 1];\n this.drawingContext.lineTo(lastPoint.x, lastPoint.y);\n }\n\n this.drawingContext.stroke();\n }\n }\n\n handleNameChange(e: any) {\n this.enteredName = e.target.value;\n }\n\n handleCancel(e: any) {\n e.stopPropagation();\n e.preventDefault();\n this.exit.emit();\n }\n\n handleAdopt(e: any) {\n e.stopPropagation();\n e.preventDefault();\n const data = this.canvasElement.toDataURL('image/png');\n this.next.emit(data);\n }\n\n isAdoptButtonDisabled(): boolean {\n switch (this.mode) {\n case 'type':\n // Disable if no name has been entered\n return !this.enteredName || this.enteredName.trim().length === 0;\n case 'draw':\n // Disable if nothing has been drawn\n return !this.hasDrawnSignature || this.allStrokes.length === 0;\n case 'upload':\n // Disable if no file has been uploaded\n return !this.hasUploadedImage;\n default:\n return true;\n }\n }\n\n setupDrawingCanvas() {\n if (!this.canvasElement) {\n return;\n }\n\n // Set up drawing context when in draw mode\n if (this.mode === 'draw') {\n // Always get fresh context from the current canvas element\n const ctx = this.canvasElement.getContext('2d');\n\n // Only initialize if we don't have a context or it's different\n if (ctx && ctx !== this.drawingContext) {\n this.drawingContext = ctx;\n\n // Configure drawing style for smooth signatures\n this.drawingContext.strokeStyle = '#000000';\n this.drawingContext.lineWidth = 2;\n this.drawingContext.lineCap = 'round';\n this.drawingContext.lineJoin = 'round';\n\n // Clear canvas only if there are no existing strokes\n if (this.allStrokes.length === 0) {\n this.drawingContext.clearRect(0, 0, this.canvasElement.width, this.canvasElement.height);\n }\n }\n }\n\n // Reset drawing context when switching away from draw mode\n // NOTE: We don't clear allStrokes here so drawing persists when returning to draw mode\n if (this.mode !== 'draw' && this.drawingContext) {\n this.drawingContext = null;\n this.currentStroke = [];\n this.lastPoint = null;\n }\n }\n\n clearDrawingCanvas() {\n if (!this.canvasElement || !this.drawingContext) {\n return;\n }\n\n this.drawingContext.clearRect(0, 0, this.canvasElement.width, this.canvasElement.height);\n this.currentStroke = [];\n this.allStrokes = [];\n this.lastPoint = null;\n this.hasDrawnSignature = false;\n }\n\n handleClearDrawing(e: any) {\n e.stopPropagation();\n e.preventDefault();\n this.clearDrawingCanvas();\n }\n\n getCanvasCoordinates(e: PointerEvent): {x: number; y: number} {\n if (!this.canvasElement) {\n return {x: 0, y: 0};\n }\n\n const rect = this.canvasElement.getBoundingClientRect();\n\n // Calculate the scale factor between canvas size and display size\n const scaleX = this.canvasElement.width / rect.width;\n const scaleY = this.canvasElement.height / rect.height;\n\n return {\n x: (e.clientX - rect.left) * scaleX,\n y: (e.clientY - rect.top) * scaleY,\n };\n }\n\n handlePointerDown = (e: PointerEvent) => {\n e.preventDefault();\n\n if (!this.canvasElement || !this.drawingContext) {\n return;\n }\n\n this.isDrawing = true;\n this.hasDrawnSignature = true;\n\n const point = this.getCanvasCoordinates(e);\n this.currentStroke = [point];\n this.lastPoint = point;\n\n // Start a new path\n this.drawingContext.beginPath();\n this.drawingContext.moveTo(point.x, point.y);\n\n // Capture pointer to ensure we get all events even if pointer leaves canvas\n this.canvasElement.setPointerCapture(e.pointerId);\n };\n\n handlePointerMove = (e: PointerEvent) => {\n e.preventDefault();\n\n if (!this.isDrawing || !this.drawingContext || !this.lastPoint) {\n return;\n }\n\n const point = this.getCanvasCoordinates(e);\n this.currentStroke.push(point);\n\n // Use quadratic curves for smooth drawing\n // The control point is the last point, and we draw to the midpoint\n const midPoint = {\n x: (this.lastPoint.x + point.x) / 2,\n y: (this.lastPoint.y + point.y) / 2,\n };\n\n this.drawingContext.quadraticCurveTo(this.lastPoint.x, this.lastPoint.y, midPoint.x, midPoint.y);\n this.drawingContext.stroke();\n\n this.lastPoint = point;\n };\n\n handlePointerUp = (e: PointerEvent) => {\n e.preventDefault();\n\n if (!this.isDrawing || !this.drawingContext) {\n return;\n }\n\n // Complete the stroke\n if (this.lastPoint && this.currentStroke.length > 0) {\n this.drawingContext.lineTo(this.lastPoint.x, this.lastPoint.y);\n this.drawingContext.stroke();\n }\n\n // Save the completed stroke\n if (this.currentStroke.length > 0) {\n this.allStrokes.push([...this.currentStroke]);\n }\n\n this.isDrawing = false;\n this.currentStroke = [];\n this.lastPoint = null;\n\n // Release pointer capture\n if (this.canvasElement) {\n this.canvasElement.releasePointerCapture(e.pointerId);\n }\n };\n\n handlePointerCancel = (e: PointerEvent) => {\n // Handle cases where drawing is interrupted (e.g., phone call, notification)\n this.isDrawing = false;\n this.currentStroke = [];\n this.lastPoint = null;\n\n if (this.canvasElement) {\n this.canvasElement.releasePointerCapture(e.pointerId);\n }\n };\n\n handleSelectFile = (e: any) => {\n e.stopPropagation();\n e.preventDefault();\n this.fileInputElement?.click();\n };\n\n handleFileChange = (e: Event) => {\n const input = e.target as HTMLInputElement;\n const file = input.files?.[0];\n\n if (!file) {\n return;\n }\n\n // Validate file type\n if (!file.type.startsWith('image/png')) {\n alert('Please select a PNG image file.');\n input.value = '';\n return;\n }\n\n // Load and display the image\n const reader = new FileReader();\n reader.onload = (event: ProgressEvent<FileReader>) => {\n const img = new Image();\n img.onload = () => {\n this.uploadedImage = img;\n this.uploadedFileName = file.name;\n this.hasUploadedImage = true;\n this.drawUploadedImage();\n };\n img.onerror = () => {\n alert('Failed to load image. Please try a different file.');\n input.value = '';\n };\n img.src = event.target?.result as string;\n };\n reader.onerror = () => {\n alert('Failed to read file. Please try again.');\n input.value = '';\n };\n reader.readAsDataURL(file);\n };\n\n drawUploadedImage() {\n if (!this.canvasElement || !this.uploadedImage) {\n return;\n }\n\n const ctx = this.canvasElement.getContext('2d');\n if (!ctx) {\n return;\n }\n\n // Clear the canvas\n ctx.clearRect(0, 0, this.canvasElement.width, this.canvasElement.height);\n\n // Calculate scaling to fit image within canvas while maintaining aspect ratio\n const canvasWidth = this.canvasElement.width;\n const canvasHeight = this.canvasElement.height;\n const imageWidth = this.uploadedImage.width;\n const imageHeight = this.uploadedImage.height;\n\n // Calculate scale to fit within canvas (with some padding)\n const padding = 10;\n const availableWidth = canvasWidth - padding * 2;\n const availableHeight = canvasHeight - padding * 2;\n\n const scaleX = availableWidth / imageWidth;\n const scaleY = availableHeight / imageHeight;\n const scale = Math.min(scaleX, scaleY);\n\n // Calculate dimensions and position to center the image\n const scaledWidth = imageWidth * scale;\n const scaledHeight = imageHeight * scale;\n const x = (canvasWidth - scaledWidth) / 2;\n const y = (canvasHeight - scaledHeight) / 2;\n\n // Draw the image centered and scaled\n ctx.drawImage(this.uploadedImage, x, y, scaledWidth, scaledHeight);\n }\n\n handleClearUpload = (e: any) => {\n e.stopPropagation();\n e.preventDefault();\n\n this.uploadedImage = null;\n this.uploadedFileName = '';\n this.hasUploadedImage = false;\n\n // Clear the file input\n if (this.fileInputElement) {\n this.fileInputElement.value = '';\n }\n\n // Clear the canvas\n if (this.canvasElement) {\n const ctx = this.canvasElement.getContext('2d');\n if (ctx) {\n ctx.clearRect(0, 0, this.canvasElement.width, this.canvasElement.height);\n }\n }\n };\n\n render() {\n return (\n <verdocs-dialog>\n <div slot=\"heading\" class=\"heading\">\n <div class=\"icon\">\n <svg width=\"22\" height=\"19\" viewBox=\"0 0 22 19\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_34208_4881)\">\n <path\n d=\"M3.125 0.75C1.88398 0.75 0.875 1.75898 0.875 3V16.5C0.875 17.741 1.88398 18.75 3.125 18.75H12.125C13.366 18.75 14.375 17.741 14.375 16.5V15.8215C14.2801 15.8602 14.1852 15.8918 14.0867 15.9164L11.9738 16.4437C11.8684 16.4684 11.7629 16.4859 11.6574 16.493C11.6258 16.4965 11.5941 16.5 11.5625 16.5H9.3125C9.09805 16.5 8.90469 16.3805 8.80977 16.1906L8.50039 15.5684C8.44062 15.4488 8.32109 15.375 8.19102 15.375C8.06094 15.375 7.93789 15.4488 7.88164 15.5684L7.57227 16.1906C7.47031 16.398 7.24883 16.5211 7.02031 16.5C6.7918 16.4789 6.59492 16.3207 6.53164 16.1027L5.9375 14.1445L5.59297 15.2977C5.37852 16.0113 4.72109 16.5 3.97578 16.5H3.6875C3.37812 16.5 3.125 16.2469 3.125 15.9375C3.125 15.6281 3.37812 15.375 3.6875 15.375H3.97578C4.22539 15.375 4.44336 15.2133 4.51367 14.9742L5.0375 13.234C5.15703 12.8367 5.52266 12.5625 5.9375 12.5625C6.35234 12.5625 6.71797 12.8367 6.8375 13.234L7.24531 14.591C7.50547 14.373 7.83594 14.25 8.1875 14.25C8.74648 14.25 9.25625 14.5664 9.50586 15.0656L9.66055 15.375H9.97344C9.86445 15.0656 9.84336 14.7281 9.92422 14.3977L10.4516 12.2848C10.55 11.8875 10.7539 11.5289 11.0422 11.2406L14.375 7.90781V6.375H9.875C9.25273 6.375 8.75 5.87227 8.75 5.25V0.75H3.125ZM9.875 0.75V5.25H14.375L9.875 0.75ZM20.2039 5.66133C19.6555 5.11289 18.766 5.11289 18.2141 5.66133L17.1805 6.69492L19.6766 9.19102L20.7102 8.15742C21.2586 7.60898 21.2586 6.71953 20.7102 6.16758L20.2039 5.66133ZM11.8402 12.0352C11.6961 12.1793 11.5941 12.3586 11.5449 12.559L11.0176 14.6719C10.9684 14.8652 11.0246 15.0656 11.1652 15.2063C11.3059 15.3469 11.5062 15.4031 11.6996 15.3539L13.8125 14.8266C14.0094 14.7773 14.1922 14.6754 14.3363 14.5312L18.8785 9.98555L16.3824 7.48945L11.8402 12.0352Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_34208_4881\">\n <path d=\"M0.875 0.75H21.125V18.75H0.875V0.75Z\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </div>\n\n <div class=\"title\">Adopt Signature</div>\n </div>\n\n <div slot=\"content\" class=\"content\">\n <div class=\"tabs\">\n <div class={{tab: true, active: this.mode === 'type'}} onClick={() => (this.mode = 'type')}>\n <div innerHTML={Keyboard} class=\"icon\" />\n <div>Type</div>\n </div>\n <div class={{tab: true, active: this.mode === 'draw'}} onClick={() => (this.mode = 'draw')}>\n <div innerHTML={Pencil} class=\"icon\" />\n <div>Draw</div>\n </div>\n <div class={{tab: true, active: this.mode === 'upload'}} onClick={() => (this.mode = 'upload')}>\n <div innerHTML={Upload} class=\"icon\" />\n <div>Upload</div>\n </div>\n </div>\n\n <div class={{type: true, active: this.mode === 'type'}}>\n <verdocs-text-input\n label=\"Full Name\"\n value={this.enteredName}\n placeholder=\"Full Name...\"\n description=\"As shown on driver's license or govt. ID card.\"\n onInput={e => this.handleNameChange(e)}\n onClick={e => e.stopPropagation()}\n />\n </div>\n\n <div class={{draw: true, active: this.mode === 'draw'}}>\n <div class=\"draw-instructions\">Draw your signature below using your mouse or finger</div>\n <div class=\"draw-actions\">\n <button class=\"clear-button\" onClick={e => this.handleClearDrawing(e)} disabled={!this.hasDrawnSignature}>\n Clear\n </button>\n </div>\n </div>\n\n <div class={{upload: true, active: this.mode === 'upload'}}>\n <div class=\"upload-instructions\">Upload a PNG image of your signature</div>\n <input ref={el => (this.fileInputElement = el as HTMLInputElement)} type=\"file\" accept=\"image/png\" onChange={this.handleFileChange} style={{display: 'none'}} />\n <div class=\"upload-actions\">\n <button class=\"upload-button\" onClick={this.handleSelectFile}>\n {this.hasUploadedImage ? 'Change Image' : 'Select PNG File'}\n </button>\n {this.hasUploadedImage && (\n <button class=\"clear-button\" onClick={this.handleClearUpload}>\n Clear\n </button>\n )}\n </div>\n {this.uploadedFileName && <div class=\"upload-filename\">{this.uploadedFileName}</div>}\n </div>\n\n <canvas\n ref={el => (this.canvasElement = el as HTMLCanvasElement)}\n width=\"300\"\n height=\"79\"\n onPointerDown={this.handlePointerDown}\n onPointerMove={this.handlePointerMove}\n onPointerUp={this.handlePointerUp}\n onPointerCancel={this.handlePointerCancel}\n style={{touchAction: 'none', cursor: 'crosshair'}}\n />\n\n <div class=\"disclaimer\">\n By clicking Adopt, I agree that the signature will be the electronic representation of my signature for all purposes when I (or my agent) use them on documents,\n including legally binding contracts — just the same as a pen-and-paper signature or initial.\n </div>\n </div>\n\n <div class=\"footer\" slot=\"footer\">\n <div class=\"buttons\">\n <button class=\"cancel\" onClick={e => this.handleCancel(e)}>\n Cancel\n </button>\n <button class=\"proceed\" onClick={e => this.handleAdopt(e)} disabled={this.isAdoptButtonDisabled()}>\n Adopt & Sign\n </button>\n </div>\n </div>\n </verdocs-dialog>\n );\n }\n}\n"],"version":3}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { V as VerdocsTemplateDocumentPage$1, d as defineCustomElement$1 } from './p-
|
|
1
|
+
import { V as VerdocsTemplateDocumentPage$1, d as defineCustomElement$1 } from './p-B4XIUesD.js';
|
|
2
2
|
|
|
3
3
|
const VerdocsTemplateDocumentPage = VerdocsTemplateDocumentPage$1;
|
|
4
4
|
const defineCustomElement = defineCustomElement$1;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { V as VerdocsTemplateFields$1, d as defineCustomElement$1 } from './p-
|
|
1
|
+
import { V as VerdocsTemplateFields$1, d as defineCustomElement$1 } from './p-CaA92LBj.js';
|
|
2
2
|
|
|
3
3
|
const VerdocsTemplateFields = VerdocsTemplateFields$1;
|
|
4
4
|
const defineCustomElement = defineCustomElement$1;
|
|
@@ -135,6 +135,10 @@ var loadModule = (cmpMeta, hostRef, hmrVersionId) => {
|
|
|
135
135
|
return import(
|
|
136
136
|
/* webpackMode: "lazy" */
|
|
137
137
|
'./verdocs-field-payment.entry.js').then(processMod, consoleError);
|
|
138
|
+
case 'verdocs-initial-dialog':
|
|
139
|
+
return import(
|
|
140
|
+
/* webpackMode: "lazy" */
|
|
141
|
+
'./verdocs-initial-dialog.entry.js').then(processMod, consoleError);
|
|
138
142
|
case 'verdocs-multiselect':
|
|
139
143
|
return import(
|
|
140
144
|
/* webpackMode: "lazy" */
|
|
@@ -155,6 +159,10 @@ var loadModule = (cmpMeta, hostRef, hmrVersionId) => {
|
|
|
155
159
|
return import(
|
|
156
160
|
/* webpackMode: "lazy" */
|
|
157
161
|
'./verdocs-sign.entry.js').then(processMod, consoleError);
|
|
162
|
+
case 'verdocs-signature-dialog':
|
|
163
|
+
return import(
|
|
164
|
+
/* webpackMode: "lazy" */
|
|
165
|
+
'./verdocs-signature-dialog.entry.js').then(processMod, consoleError);
|
|
158
166
|
case 'verdocs-table':
|
|
159
167
|
return import(
|
|
160
168
|
/* webpackMode: "lazy" */
|
|
@@ -263,10 +271,10 @@ var loadModule = (cmpMeta, hostRef, hmrVersionId) => {
|
|
|
263
271
|
return import(
|
|
264
272
|
/* webpackMode: "lazy" */
|
|
265
273
|
'./verdocs-preview_7.entry.js').then(processMod, consoleError);
|
|
266
|
-
case 'verdocs-field-
|
|
274
|
+
case 'verdocs-field-attachment_11':
|
|
267
275
|
return import(
|
|
268
276
|
/* webpackMode: "lazy" */
|
|
269
|
-
'./verdocs-field-
|
|
277
|
+
'./verdocs-field-attachment_11.entry.js').then(processMod, consoleError);
|
|
270
278
|
case 'verdocs-adopt-signature-dialog_8':
|
|
271
279
|
return import(
|
|
272
280
|
/* webpackMode: "lazy" */
|