@signosoft/signpad-js 0.5.3 → 0.7.0
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/README.md +884 -639
- package/dist/index.d.ts +88 -471
- package/dist/signosoft-signpad.js +2221 -2110
- package/dist/signosoft-signpad.umd.cjs +73 -43
- package/package.json +15 -4
- package/presentation.gif +0 -0
- package/src/i18n/cs.json +38 -0
- package/src/i18n/en.json +38 -0
- package/src/i18n/pt.json +38 -0
- package/src/styles/primitive.css +292 -0
- package/src/styles/semantic-dark.css +82 -0
- package/src/styles/semantic.css +144 -0
- package/src/styles/signosoft-signpad.css +116 -36
- package/src/styles/styles-variables.css +61 -55
- package/docsVideo.gif +0 -0
|
@@ -1,7 +1,12 @@
|
|
|
1
|
+
@import "./primitive.css";
|
|
2
|
+
@import "./semantic.css";
|
|
3
|
+
@import "./semantic-dark.css";
|
|
1
4
|
@import "./styles-variables.css";
|
|
2
5
|
|
|
3
|
-
|
|
4
|
-
|
|
6
|
+
:host {
|
|
7
|
+
display: block;
|
|
8
|
+
width: var(--signpad-width);
|
|
9
|
+
height: var(--signpad-height);
|
|
5
10
|
}
|
|
6
11
|
|
|
7
12
|
.signpad-canvas-container {
|
|
@@ -41,7 +46,7 @@ html {
|
|
|
41
46
|
.signpad-canvas-wrapper {
|
|
42
47
|
position: relative;
|
|
43
48
|
width: 100%;
|
|
44
|
-
padding-top:
|
|
49
|
+
padding-top: var(--spacing-16);
|
|
45
50
|
padding-bottom: 56.25%;
|
|
46
51
|
height: 0;
|
|
47
52
|
background-color: var(--sign-canvas-bg-base);
|
|
@@ -93,28 +98,25 @@ html {
|
|
|
93
98
|
align-items: center;
|
|
94
99
|
height: var(--sign-line-height);
|
|
95
100
|
padding-top: 0;
|
|
96
|
-
border-top:
|
|
101
|
+
border-top: var(--borderWidth-m) solid var(--sign-line-border-base);
|
|
97
102
|
box-sizing: border-box;
|
|
98
|
-
padding-top:
|
|
103
|
+
padding-top: var(--spacing-4);
|
|
99
104
|
margin: var(--sign-line-margin);
|
|
100
105
|
}
|
|
101
106
|
.signpad-canvas-line-additional-text,
|
|
102
|
-
.signpad-canvas-line-state
|
|
103
|
-
.signpad-canvas-line-state.connected {
|
|
107
|
+
.signpad-canvas-line-state {
|
|
104
108
|
font-family: var(--sign-font-family);
|
|
105
109
|
font-size: var(--sign-canvas-line-text-font-size);
|
|
110
|
+
user-select: none;
|
|
111
|
+
-webkit-user-select: none;
|
|
106
112
|
}
|
|
107
113
|
.signpad-canvas-line-additional-text {
|
|
108
114
|
color: var(--sign-line-additional-text-color);
|
|
109
115
|
margin: 0;
|
|
110
116
|
}
|
|
111
117
|
.signpad-canvas-line-state {
|
|
112
|
-
color: var(--sign-device-state-text-color-disconnected);
|
|
113
|
-
margin: 0;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
.signpad-canvas-line-state.connected {
|
|
117
118
|
color: var(--sign-device-state-text-color-connected);
|
|
119
|
+
margin: 0;
|
|
118
120
|
}
|
|
119
121
|
|
|
120
122
|
.signpad-bottom-bar {
|
|
@@ -138,16 +140,20 @@ html {
|
|
|
138
140
|
width: 100%;
|
|
139
141
|
font-size: var(--sign-button-font-size);
|
|
140
142
|
border-radius: var(--sign-button-border-radius);
|
|
143
|
+
}
|
|
144
|
+
/* Animate only hover/press. Enabling a button (disabled -> enabled) must be instant,
|
|
145
|
+
otherwise it visibly fades through in-between colors when drawing starts. */
|
|
146
|
+
.btn:hover:not(:disabled),
|
|
147
|
+
.btn:active:not(:disabled) {
|
|
148
|
+
cursor: pointer;
|
|
141
149
|
transition:
|
|
142
150
|
background-color 0.3s ease,
|
|
143
151
|
color 0.3s ease,
|
|
144
152
|
transform 0.1s ease;
|
|
145
153
|
}
|
|
146
|
-
.btn:
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
.btn:focus:not(:disabled) {
|
|
150
|
-
outline: none;
|
|
154
|
+
.btn:focus-visible:not(:disabled) {
|
|
155
|
+
outline: var(--borderWidth-m) solid var(--border-focus);
|
|
156
|
+
outline-offset: var(--unit-2);
|
|
151
157
|
}
|
|
152
158
|
|
|
153
159
|
.btn-primary {
|
|
@@ -160,28 +166,17 @@ html {
|
|
|
160
166
|
color: var(--sign-button-primary-text-hover);
|
|
161
167
|
border: var(--sign-button-primary-border-hover);
|
|
162
168
|
}
|
|
169
|
+
.btn-primary:active:not(:disabled) {
|
|
170
|
+
background-color: var(--sign-button-primary-bg-pressed);
|
|
171
|
+
}
|
|
163
172
|
.btn-primary:disabled {
|
|
164
173
|
background-color: var(--sign-button-primary-bg-disabled);
|
|
165
174
|
color: var(--sign-button-primary-text-disabled);
|
|
166
175
|
border: var(--sign-button-primary-border-disabled);
|
|
167
176
|
}
|
|
168
|
-
.btn-link {
|
|
169
|
-
background-color: var(--sign-button-link-bg-base);
|
|
170
|
-
color: var(--sign-button-link-text-base);
|
|
171
|
-
border: var(--sign-button-link-border-base);
|
|
172
|
-
}
|
|
173
|
-
.btn-link:hover:not(:disabled) {
|
|
174
|
-
background-color: var(--sign-button-link-bg-hover);
|
|
175
|
-
color: var(--sign-button-link-text-hover);
|
|
176
|
-
border: var(--sign-button-link-border-hover);
|
|
177
|
-
}
|
|
178
|
-
.btn-link:disabled {
|
|
179
|
-
background-color: var(--sign-button-link-bg-disabled);
|
|
180
|
-
color: var(--sign-button-link-text-disabled);
|
|
181
|
-
border: var(--sign-button-link-border-disabled);
|
|
182
|
-
}
|
|
183
177
|
|
|
184
178
|
.signpad-loading-overlay {
|
|
179
|
+
cursor: default;
|
|
185
180
|
position: absolute;
|
|
186
181
|
top: 0;
|
|
187
182
|
left: 0;
|
|
@@ -194,22 +189,107 @@ html {
|
|
|
194
189
|
align-items: center;
|
|
195
190
|
z-index: 10;
|
|
196
191
|
text-align: center;
|
|
197
|
-
gap: 0.625rem;
|
|
198
192
|
}
|
|
199
193
|
.signpad-loading-overlay .spinner {
|
|
200
|
-
border:
|
|
194
|
+
border: var(--borderWidth-l) solid
|
|
195
|
+
var(--sign-loading-overlay-spinner-border-color);
|
|
201
196
|
border-left-color: var(--sign-loading-overlay-spinner-color);
|
|
202
197
|
border-radius: 50%;
|
|
203
198
|
width: var(--sign-loading-overlay-spinner-size);
|
|
204
199
|
height: var(--sign-loading-overlay-spinner-size);
|
|
205
200
|
animation: spin 1s linear infinite;
|
|
201
|
+
margin-bottom: var(--spacing-16);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
.signpad-loading-overlay-message {
|
|
205
|
+
display: flex;
|
|
206
|
+
align-items: center;
|
|
207
|
+
justify-content: center;
|
|
208
|
+
max-width: 90%;
|
|
209
|
+
/* Fixed slot for up to 2 lines so the text is centered in it and a longer
|
|
210
|
+
message does not push the code line / restart button around. */
|
|
211
|
+
min-height: calc(2 * var(--text-m-regular-lineHeight));
|
|
206
212
|
}
|
|
207
213
|
|
|
208
214
|
.signpad-loading-overlay-text {
|
|
209
215
|
font-family: var(--sign-font-family);
|
|
210
216
|
color: var(--sign-loading-overlay-text-color);
|
|
211
|
-
font-size:
|
|
212
|
-
|
|
217
|
+
font-size: var(--text-m-regular-fontSize);
|
|
218
|
+
line-height: var(--text-m-regular-lineHeight);
|
|
219
|
+
margin: 0;
|
|
220
|
+
overflow-wrap: anywhere;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
.signpad-restart-button {
|
|
224
|
+
width: auto;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
.signpad-sr-only {
|
|
228
|
+
position: absolute;
|
|
229
|
+
width: 1px;
|
|
230
|
+
height: 1px;
|
|
231
|
+
margin: -1px;
|
|
232
|
+
padding: 0;
|
|
233
|
+
overflow: hidden;
|
|
234
|
+
clip-path: inset(50%);
|
|
235
|
+
white-space: nowrap;
|
|
236
|
+
border: 0;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
@media (prefers-reduced-motion: reduce) {
|
|
240
|
+
.signpad-loading-overlay .spinner {
|
|
241
|
+
animation-duration: 3s;
|
|
242
|
+
}
|
|
243
|
+
.btn {
|
|
244
|
+
transition: none;
|
|
245
|
+
}
|
|
246
|
+
.btn:active {
|
|
247
|
+
transform: none;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/* High-contrast / forced-colors mode: system colors keep every control visible. */
|
|
252
|
+
@media (forced-colors: active) {
|
|
253
|
+
/* Background colors are replaced by system colors, so outline the visible regions
|
|
254
|
+
(bars + canvas) instead of the container, which is taller than its content. */
|
|
255
|
+
.signpad-top-bar,
|
|
256
|
+
.signpad-bottom-bar {
|
|
257
|
+
border: 1px solid CanvasText;
|
|
258
|
+
}
|
|
259
|
+
.signpad-canvas-wrapper {
|
|
260
|
+
border-left: 1px solid CanvasText;
|
|
261
|
+
border-right: 1px solid CanvasText;
|
|
262
|
+
/* The ink is drawn in JS (black by default), so the signing surface must keep its own
|
|
263
|
+
light background; a forced dark Canvas would hide the signature. */
|
|
264
|
+
forced-color-adjust: none;
|
|
265
|
+
}
|
|
266
|
+
.signpad-canvas-container:not(:has(.signpad-top-bar))
|
|
267
|
+
.signpad-canvas-wrapper {
|
|
268
|
+
border-top: 1px solid CanvasText;
|
|
269
|
+
}
|
|
270
|
+
.signpad-canvas-container:not(:has(.signpad-bottom-bar))
|
|
271
|
+
.signpad-canvas-wrapper {
|
|
272
|
+
border-bottom: 1px solid CanvasText;
|
|
273
|
+
}
|
|
274
|
+
.btn {
|
|
275
|
+
border: 1px solid ButtonText;
|
|
276
|
+
}
|
|
277
|
+
.btn:disabled {
|
|
278
|
+
border-color: GrayText;
|
|
279
|
+
color: GrayText;
|
|
280
|
+
}
|
|
281
|
+
.btn:focus-visible:not(:disabled) {
|
|
282
|
+
outline-color: Highlight;
|
|
283
|
+
}
|
|
284
|
+
.signpad-loading-overlay {
|
|
285
|
+
forced-color-adjust: auto;
|
|
286
|
+
background-color: Canvas;
|
|
287
|
+
color: CanvasText;
|
|
288
|
+
}
|
|
289
|
+
.signpad-loading-overlay .spinner {
|
|
290
|
+
border-color: GrayText;
|
|
291
|
+
border-left-color: Highlight;
|
|
292
|
+
}
|
|
213
293
|
}
|
|
214
294
|
|
|
215
295
|
@keyframes spin {
|
|
@@ -1,24 +1,19 @@
|
|
|
1
1
|
:host {
|
|
2
|
-
/* Color Variables */
|
|
3
|
-
--primary-color-0: #4e56ea;
|
|
4
|
-
--primary-color-10: #7178ee;
|
|
5
|
-
--background-color-0: #f1f2fd;
|
|
6
|
-
--background-color-10: #e3e4fc;
|
|
7
|
-
--text-color-0: #333e4a;
|
|
8
|
-
--white-color: #ffffff;
|
|
9
|
-
--grey-color: #b5b9be;
|
|
10
|
-
|
|
11
2
|
/* Constraints */
|
|
12
|
-
--min-height:
|
|
13
|
-
--spacing-constraints:
|
|
3
|
+
--min-height: var(--unit-48);
|
|
4
|
+
--spacing-constraints: var(--spacing-12) var(--spacing-16);
|
|
5
|
+
|
|
6
|
+
/* Host Sizing (override to make the component fluid, e.g. width: 100%; height: 100vh;) */
|
|
7
|
+
--signpad-width: 25rem;
|
|
8
|
+
--signpad-height: 31.25rem;
|
|
14
9
|
|
|
15
10
|
/* CSS Variables */
|
|
16
|
-
--sign-font-family: Arial, Helvetica, sans-serif;
|
|
17
|
-
--sign-common-border-radius:
|
|
11
|
+
--sign-font-family: var(--fontFamily-primary), Arial, Helvetica, sans-serif;
|
|
12
|
+
--sign-common-border-radius: var(--borderRadius-s);
|
|
18
13
|
|
|
19
14
|
/* Top Bar */
|
|
20
|
-
--sign-top-bar-bg-base: var(--background-
|
|
21
|
-
--sign-top-bar-text-base: var(--
|
|
15
|
+
--sign-top-bar-bg-base: var(--background-brandSubtle);
|
|
16
|
+
--sign-top-bar-text-base: var(--brand-650);
|
|
22
17
|
--sign-top-bar-padding: var(--spacing-constraints);
|
|
23
18
|
--sign-top-bar-min-height: var(--min-height);
|
|
24
19
|
--sign-top-bar-border-top-left-radius: var(--sign-common-border-radius);
|
|
@@ -27,26 +22,27 @@
|
|
|
27
22
|
--sign-top-bar-border-bottom-right-radius: 0;
|
|
28
23
|
|
|
29
24
|
/* Canvas Area */
|
|
30
|
-
--sign-canvas-bg-base: var(--
|
|
25
|
+
--sign-canvas-bg-base: var(--brandBeige-100);
|
|
31
26
|
--sign-canvas-wrapper-border-top-left-radius: 0;
|
|
32
27
|
--sign-canvas-wrapper-border-top-right-radius: 0;
|
|
33
28
|
--sign-canvas-wrapper-border-bottom-left-radius: 0;
|
|
34
29
|
--sign-canvas-wrapper-border-bottom-right-radius: 0;
|
|
35
30
|
|
|
36
31
|
/* Line */
|
|
37
|
-
--sign-line-height:
|
|
38
|
-
--sign-line-margin-bottom:
|
|
39
|
-
--sign-line-border-base: var(--
|
|
40
|
-
--sign-line-additional-text-color: var(--
|
|
41
|
-
--sign-line-margin:
|
|
42
|
-
|
|
32
|
+
--sign-line-height: var(--unit-24);
|
|
33
|
+
--sign-line-margin-bottom: var(--spacing-16);
|
|
34
|
+
--sign-line-border-base: var(--border-secondary);
|
|
35
|
+
--sign-line-additional-text-color: var(--content-tertiary);
|
|
36
|
+
--sign-line-margin: 0 var(--spacing-16) var(--sign-line-margin-bottom)
|
|
37
|
+
var(--spacing-16);
|
|
38
|
+
--sign-canvas-line-text-font-size: var(--text-s-regular-fontSize);
|
|
43
39
|
--sign-canvas-height-offset: var(--sign-line-height);
|
|
44
40
|
|
|
45
41
|
/* Bottom Bar */
|
|
46
|
-
--sign-bottom-bar-bg-base: var(--background-
|
|
42
|
+
--sign-bottom-bar-bg-base: var(--background-brandSubtle);
|
|
47
43
|
--sign-bottom-bar-padding: var(--spacing-constraints);
|
|
48
44
|
--sign-bottom-bar-min-height: var(--min-height);
|
|
49
|
-
--sign-bottom-bar-gap:
|
|
45
|
+
--sign-bottom-bar-gap: var(--spacing-8);
|
|
50
46
|
--sign-bottom-bar-border-top-left-radius: 0;
|
|
51
47
|
--sign-bottom-bar-border-top-right-radius: 0;
|
|
52
48
|
--sign-bottom-bar-border-bottom-left-radius: var(--sign-common-border-radius);
|
|
@@ -55,42 +51,52 @@
|
|
|
55
51
|
);
|
|
56
52
|
|
|
57
53
|
/* Button general settings */
|
|
58
|
-
--sign-button-font-size:
|
|
59
|
-
--sign-button-padding:
|
|
60
|
-
--sign-button-min-height: var(--
|
|
61
|
-
--sign-button-border-radius: var(--
|
|
62
|
-
--sign-button-font-weight:
|
|
54
|
+
--sign-button-font-size: var(--text-m-semibold-fontSize);
|
|
55
|
+
--sign-button-padding: var(--spacing-10);
|
|
56
|
+
--sign-button-min-height: var(--unit-48);
|
|
57
|
+
--sign-button-border-radius: var(--borderRadius-pill);
|
|
58
|
+
--sign-button-font-weight: var(--text-m-semibold-fontWeight);
|
|
63
59
|
|
|
64
60
|
/* Primary Buttons (OK, Clear, Cancel) */
|
|
65
|
-
--sign-button-primary-bg-base: var(--
|
|
66
|
-
--sign-button-primary-bg-hover: var(--
|
|
67
|
-
--sign-button-primary-bg-
|
|
68
|
-
--sign-button-primary-
|
|
69
|
-
--sign-button-primary-text-
|
|
70
|
-
--sign-button-primary-text-
|
|
71
|
-
--sign-button-primary-
|
|
72
|
-
--sign-button-primary-border-
|
|
73
|
-
--sign-button-primary-border-
|
|
61
|
+
--sign-button-primary-bg-base: var(--background-brand);
|
|
62
|
+
--sign-button-primary-bg-hover: var(--background-brandHover);
|
|
63
|
+
--sign-button-primary-bg-pressed: var(--background-brandPressed);
|
|
64
|
+
--sign-button-primary-bg-disabled: var(--background-disabled);
|
|
65
|
+
--sign-button-primary-text-base: var(--content-primaryInverse);
|
|
66
|
+
--sign-button-primary-text-hover: var(--content-primaryInverse);
|
|
67
|
+
--sign-button-primary-text-disabled: var(--content-disabled);
|
|
68
|
+
--sign-button-primary-border-base: var(--borderWidth-xs) solid transparent;
|
|
69
|
+
--sign-button-primary-border-hover: var(--borderWidth-xs) solid transparent;
|
|
70
|
+
--sign-button-primary-border-disabled: var(--borderWidth-xs) solid transparent;
|
|
74
71
|
|
|
75
|
-
/* Link Buttons (Connect signpad) */
|
|
76
|
-
--sign-button-link-bg-base: transparent;
|
|
77
|
-
--sign-button-link-bg-hover: var(--background-color-10);
|
|
78
|
-
--sign-button-link-bg-disabled: transparent;
|
|
79
|
-
--sign-button-link-text-base: var(--primary-color-0);
|
|
80
|
-
--sign-button-link-text-hover: var(--primary-color-10);
|
|
81
|
-
--sign-button-link-text-disabled: var(--grey-color);
|
|
82
|
-
--sign-button-link-border-base: 0.0625rem solid var(--primary-color-0);
|
|
83
|
-
--sign-button-link-border-hover: 0.0625rem solid var(--primary-color-10);
|
|
84
|
-
--sign-button-link-border-disabled: 0.0625rem solid var(--grey-color);
|
|
85
72
|
|
|
86
73
|
/* Device State Text Colors */
|
|
87
|
-
--sign-device-state-text-color-connected:
|
|
88
|
-
--sign-device-state-text-color-disconnected: red;
|
|
74
|
+
--sign-device-state-text-color-connected: var(--brand-650);
|
|
89
75
|
|
|
90
76
|
/* Loading Overlay */
|
|
91
|
-
--sign-loading-overlay-bg-color:
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
77
|
+
--sign-loading-overlay-bg-color: color-mix(
|
|
78
|
+
in srgb,
|
|
79
|
+
var(--background-primary) 75%,
|
|
80
|
+
transparent
|
|
81
|
+
);
|
|
82
|
+
--sign-loading-overlay-text-color: var(--content-primary);
|
|
83
|
+
--sign-loading-overlay-spinner-color: var(--content-brand);
|
|
84
|
+
--sign-loading-overlay-spinner-border-color: var(--background-brandSubtle);
|
|
85
|
+
--sign-loading-overlay-spinner-size: var(--unit-32);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/* Dark theme (config.theme = "dark"). The signature canvas stays light on purpose: the default ink is
|
|
89
|
+
black, so a dark canvas would hide the signature. Bars, buttons and the overlay go dark. */
|
|
90
|
+
:host([data-theme="dark"]) {
|
|
91
|
+
--sign-top-bar-text-base: var(--content-brand);
|
|
92
|
+
--sign-canvas-bg-base: var(--brandBeige-100);
|
|
93
|
+
--sign-line-border-base: var(--neutral-400);
|
|
94
|
+
--sign-line-additional-text-color: var(--neutral-600);
|
|
95
|
+
--sign-button-primary-bg-base: var(--brand-650);
|
|
96
|
+
--sign-button-primary-bg-hover: var(--brand-700);
|
|
97
|
+
--sign-button-primary-bg-pressed: var(--brand-750);
|
|
98
|
+
--sign-button-primary-text-base: var(--neutral-0);
|
|
99
|
+
--sign-button-primary-text-hover: var(--neutral-0);
|
|
100
|
+
--sign-button-primary-bg-disabled: var(--neutral-600);
|
|
101
|
+
--sign-button-primary-text-disabled: var(--neutral-200);
|
|
96
102
|
}
|
package/docsVideo.gif
DELETED
|
Binary file
|