@signosoft/signpad-js 0.6.0 → 0.7.1

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.
@@ -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
- html {
4
- font-family: var(--sign-font-family) !important;
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: 1rem;
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: 0.125rem solid var(--sign-line-border-base);
101
+ border-top: var(--borderWidth-m) solid var(--sign-line-border-base);
97
102
  box-sizing: border-box;
98
- padding-top: 0.375rem;
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:hover:not(:disabled) {
147
- cursor: pointer;
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: 0.25rem solid var(--sign-loading-overlay-spinner-border-color);
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: 0.875rem;
212
- margin: 1rem 0 0 0;
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: 3rem;
13
- --spacing-constraints: 1rem 1.5rem;
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: 0.5rem;
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-color-10);
21
- --sign-top-bar-text-base: var(--primary-color-0);
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(--background-color-0);
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: 1.375rem;
38
- --sign-line-margin-bottom: 1rem;
39
- --sign-line-border-base: var(--primary-color-10);
40
- --sign-line-additional-text-color: var(--text-color-0);
41
- --sign-line-margin: 0rem 1.5rem var(--sign-line-margin-bottom) 1.5rem;
42
- --sign-canvas-line-text-font-size: 0.75rem;
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-color-10);
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: 0.75rem;
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: 1rem;
59
- --sign-button-padding: 0.875rem 1rem;
60
- --sign-button-min-height: var(--min-height);
61
- --sign-button-border-radius: var(--sign-common-border-radius);
62
- --sign-button-font-weight: 500;
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(--primary-color-0);
66
- --sign-button-primary-bg-hover: var(--primary-color-10);
67
- --sign-button-primary-bg-disabled: var(--grey-color);
68
- --sign-button-primary-text-base: var(--white-color);
69
- --sign-button-primary-text-hover: var(--white-color);
70
- --sign-button-primary-text-disabled: var(--white-color);
71
- --sign-button-primary-border-base: 0.0625rem solid var(--primary-color-0);
72
- --sign-button-primary-border-hover: 0.0625rem solid var(--primary-color-10);
73
- --sign-button-primary-border-disabled: 0.0625rem solid var(--grey-color);
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: green;
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: rgba(255, 255, 255, 0.8);
92
- --sign-loading-overlay-text-color: var(--text-color-0);
93
- --sign-loading-overlay-spinner-color: var(--primary-color-0);
94
- --sign-loading-overlay-spinner-border-color: rgba(78, 86, 234, 0.1);
95
- --sign-loading-overlay-spinner-size: 1.875rem;
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