@vanduo-oss/framework 1.3.9 → 1.4.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 +87 -42
- package/css/components/affix.css +1 -1
- package/css/components/alerts.css +40 -40
- package/css/components/avatar.css +33 -33
- package/css/components/badges.css +42 -42
- package/css/components/breadcrumbs.css +5 -5
- package/css/components/bubble.css +4 -4
- package/css/components/buttons.css +124 -124
- package/css/components/cards.css +10 -10
- package/css/components/chips.css +28 -28
- package/css/components/code-snippet.css +18 -18
- package/css/components/collapsible.css +20 -20
- package/css/components/collections.css +21 -21
- package/css/components/datepicker.css +13 -13
- package/css/components/doc-search.css +46 -53
- package/css/components/doc-tabs.css +10 -10
- package/css/components/draggable.css +34 -34
- package/css/components/dropdown.css +14 -14
- package/css/components/expanding-cards.css +1 -1
- package/css/components/fab.css +7 -7
- package/css/components/flow.css +3 -3
- package/css/components/footer.css +26 -26
- package/css/components/forms.css +95 -83
- package/css/components/image-box.css +13 -17
- package/css/components/modals.css +8 -8
- package/css/components/music-player.css +26 -26
- package/css/components/navbar.css +27 -27
- package/css/components/pagination.css +15 -15
- package/css/components/preloader.css +10 -10
- package/css/components/progress.css +8 -8
- package/css/components/rating.css +4 -4
- package/css/components/sidenav.css +14 -14
- package/css/components/skeleton.css +10 -9
- package/css/components/spinner.css +10 -10
- package/css/components/spotlight.css +7 -7
- package/css/components/stepper.css +13 -13
- package/css/components/suggest.css +10 -10
- package/css/components/tabs.css +22 -22
- package/css/components/theme-customizer.css +87 -87
- package/css/components/timeline.css +14 -14
- package/css/components/timepicker.css +7 -7
- package/css/components/toast.css +31 -31
- package/css/components/tooltips.css +11 -11
- package/css/components/transfer.css +12 -12
- package/css/components/tree.css +9 -9
- package/css/components/waypoint.css +3 -3
- package/css/core/colors.css +34 -34
- package/css/core/grid.css +1 -6
- package/css/core/helpers.css +11 -11
- package/css/core/tokens.css +113 -35
- package/css/core/typography.css +14 -12
- package/css/core/vd-aliases.css +100 -52
- package/css/effects/morph.css +5 -5
- package/css/utilities/media.css +2 -2
- package/css/utilities/table.css +34 -34
- package/css/utilities/transitions.css +22 -10
- package/css/vanduo.css +14 -34
- package/dist/build-info.json +3 -3
- package/dist/vanduo.cjs.js +929 -289
- package/dist/vanduo.cjs.js.map +3 -3
- package/dist/vanduo.cjs.min.js +7 -7
- package/dist/vanduo.cjs.min.js.map +3 -3
- package/dist/vanduo.css +7914 -7823
- package/dist/vanduo.css.map +1 -1
- package/dist/vanduo.esm.js +929 -289
- package/dist/vanduo.esm.js.map +3 -3
- package/dist/vanduo.esm.min.js +7 -7
- package/dist/vanduo.esm.min.js.map +3 -3
- package/dist/vanduo.js +929 -289
- package/dist/vanduo.js.map +3 -3
- package/dist/vanduo.min.css +2 -2
- package/dist/vanduo.min.css.map +1 -1
- package/dist/vanduo.min.js +7 -7
- package/dist/vanduo.min.js.map +3 -3
- package/js/components/affix.js +2 -2
- package/js/components/bubble.js +3 -3
- package/js/components/code-snippet.js +129 -5
- package/js/components/collapsible.js +2 -3
- package/js/components/datepicker.js +2 -2
- package/js/components/doc-search.js +69 -11
- package/js/components/draggable.js +4 -4
- package/js/components/dropdown.js +2 -3
- package/js/components/expanding-cards.js +2 -2
- package/js/components/flow.js +2 -2
- package/js/components/font-switcher.js +23 -13
- package/js/components/glass.js +2 -2
- package/js/components/grid.js +19 -8
- package/js/components/image-box.js +49 -10
- package/js/components/lazy-load.js +81 -9
- package/js/components/modals.js +28 -12
- package/js/components/morph.js +2 -2
- package/js/components/music-player.js +2 -2
- package/js/components/navbar.js +2 -2
- package/js/components/pagination.js +2 -3
- package/js/components/parallax.js +9 -10
- package/js/components/preloader.js +14 -5
- package/js/components/rating.js +2 -2
- package/js/components/ripple.js +2 -2
- package/js/components/select.js +2 -3
- package/js/components/sidenav.js +43 -14
- package/js/components/spotlight.js +2 -2
- package/js/components/stepper.js +2 -2
- package/js/components/suggest.js +9 -3
- package/js/components/tabs.js +2 -2
- package/js/components/theme-customizer.js +151 -21
- package/js/components/theme-switcher.js +27 -16
- package/js/components/timeline.js +41 -12
- package/js/components/timepicker.js +2 -2
- package/js/components/toast.js +1 -1
- package/js/components/tooltips.js +4 -4
- package/js/components/transfer.js +2 -2
- package/js/components/tree.js +2 -2
- package/js/components/validate.js +2 -2
- package/js/components/vd-hex.js +12 -6
- package/js/components/waypoint.js +2 -2
- package/js/utils/helpers.js +7 -4
- package/js/utils/lifecycle.js +158 -83
- package/js/vanduo.js +203 -34
- package/package.json +2 -1
package/css/components/forms.css
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Form components: inputs, textareas, labels, and validation
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
/* stylelint-disable-next-line no-duplicate-selectors -- control-specific tokens stay grouped near their rules. */
|
|
6
7
|
:root {
|
|
7
8
|
/* Input Padding (Fibonacci pairs: x/y ratio ~ phi)
|
|
8
9
|
* sm: 8px/5px = 1.6 ~ phi
|
|
@@ -28,18 +29,18 @@
|
|
|
28
29
|
|
|
29
30
|
/* Input Border */
|
|
30
31
|
--input-border-width: 1px;
|
|
31
|
-
--input-border-color: var(--border-color);
|
|
32
|
+
--input-border-color: var(--vd-border-color);
|
|
32
33
|
--input-border-radius: var(--btn-border-radius);
|
|
33
34
|
--input-border-radius-sm: var(--btn-border-radius-sm);
|
|
34
35
|
--input-border-radius-lg: var(--btn-border-radius-lg);
|
|
35
36
|
|
|
36
37
|
/* Input Background */
|
|
37
|
-
--input-bg: var(--color-white);
|
|
38
|
-
--input-bg-disabled: var(--bg-secondary);
|
|
38
|
+
--input-bg: var(--vd-color-white);
|
|
39
|
+
--input-bg-disabled: var(--vd-bg-secondary);
|
|
39
40
|
|
|
40
41
|
/* Input Focus */
|
|
41
|
-
--input-focus-border-color: var(--color-primary);
|
|
42
|
-
--input-focus-box-shadow: 0 0 0 3px var(--color-primary-alpha-20);
|
|
42
|
+
--input-focus-border-color: var(--vd-color-primary);
|
|
43
|
+
--input-focus-box-shadow: 0 0 0 3px var(--vd-color-primary-alpha-20);
|
|
43
44
|
|
|
44
45
|
/* Input Transitions */
|
|
45
46
|
--input-transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
|
|
@@ -47,18 +48,22 @@
|
|
|
47
48
|
|
|
48
49
|
/* Dark Theme Overrides */
|
|
49
50
|
[data-theme="dark"] {
|
|
50
|
-
--input-bg: var(--bg-secondary);
|
|
51
|
-
--input-bg-disabled: var(--bg-tertiary);
|
|
51
|
+
--input-bg: var(--vd-bg-secondary);
|
|
52
|
+
--input-bg-disabled: var(--vd-bg-tertiary);
|
|
52
53
|
}
|
|
53
54
|
|
|
54
55
|
@media (prefers-color-scheme: dark) {
|
|
55
56
|
:root:not([data-theme]) {
|
|
56
|
-
--input-bg: var(--bg-secondary);
|
|
57
|
-
--input-bg-disabled: var(--bg-tertiary);
|
|
57
|
+
--input-bg: var(--vd-bg-secondary);
|
|
58
|
+
--input-bg-disabled: var(--vd-bg-tertiary);
|
|
58
59
|
}
|
|
59
60
|
}
|
|
60
61
|
|
|
61
|
-
/* Base Input
|
|
62
|
+
/* Base Input
|
|
63
|
+
* The main bundle intentionally styles both `.vd-*` controls and native form
|
|
64
|
+
* elements for full-page framework usage. Keep new raw element selectors in
|
|
65
|
+
* reset/base layers; component-specific styling should prefer `.vd-*` hooks.
|
|
66
|
+
*/
|
|
62
67
|
.vd-input,
|
|
63
68
|
input[type="text"],
|
|
64
69
|
input[type="email"],
|
|
@@ -77,7 +82,7 @@ input[type="datetime-local"] {
|
|
|
77
82
|
font-size: var(--input-font-size);
|
|
78
83
|
font-weight: var(--font-weight-normal);
|
|
79
84
|
line-height: var(--line-height-normal);
|
|
80
|
-
color: var(--text-primary);
|
|
85
|
+
color: var(--vd-text-primary);
|
|
81
86
|
background-color: var(--input-bg);
|
|
82
87
|
border: var(--input-border-width) solid var(--input-border-color);
|
|
83
88
|
border-radius: var(--input-border-radius);
|
|
@@ -103,7 +108,7 @@ input[type="datetime-local"]:focus {
|
|
|
103
108
|
|
|
104
109
|
.vd-input::placeholder,
|
|
105
110
|
input::placeholder {
|
|
106
|
-
color: var(--text-muted);
|
|
111
|
+
color: var(--vd-text-muted);
|
|
107
112
|
opacity: 1;
|
|
108
113
|
}
|
|
109
114
|
|
|
@@ -126,7 +131,7 @@ textarea {
|
|
|
126
131
|
font-size: var(--input-font-size);
|
|
127
132
|
font-weight: var(--font-weight-normal);
|
|
128
133
|
line-height: var(--line-height-normal);
|
|
129
|
-
color: var(--text-primary);
|
|
134
|
+
color: var(--vd-text-primary);
|
|
130
135
|
background-color: var(--input-bg);
|
|
131
136
|
border: var(--input-border-width) solid var(--input-border-color);
|
|
132
137
|
border-radius: var(--input-border-radius);
|
|
@@ -144,7 +149,7 @@ textarea:focus {
|
|
|
144
149
|
|
|
145
150
|
.textarea::placeholder,
|
|
146
151
|
textarea::placeholder {
|
|
147
|
-
color: var(--text-muted);
|
|
152
|
+
color: var(--vd-text-muted);
|
|
148
153
|
opacity: 1;
|
|
149
154
|
}
|
|
150
155
|
|
|
@@ -197,41 +202,41 @@ textarea.textarea-lg {
|
|
|
197
202
|
input.vd-input-error,
|
|
198
203
|
.vd-input.is-error,
|
|
199
204
|
input.is-error {
|
|
200
|
-
border-color: var(--color-error);
|
|
205
|
+
border-color: var(--vd-color-error);
|
|
201
206
|
}
|
|
202
207
|
|
|
203
208
|
.vd-input-invalid,
|
|
204
209
|
input.vd-input-invalid {
|
|
205
|
-
border-color: var(--color-error);
|
|
210
|
+
border-color: var(--vd-color-error);
|
|
206
211
|
}
|
|
207
212
|
|
|
208
213
|
.vd-input-error:focus,
|
|
209
214
|
input.vd-input-error:focus,
|
|
210
215
|
.vd-input.is-error:focus,
|
|
211
216
|
input.is-error:focus {
|
|
212
|
-
border-color: var(--color-error);
|
|
213
|
-
box-shadow: 0 0 0 3px var(--color-error-alpha-10);
|
|
217
|
+
border-color: var(--vd-color-error);
|
|
218
|
+
box-shadow: 0 0 0 3px var(--vd-color-error-alpha-10);
|
|
214
219
|
}
|
|
215
220
|
|
|
216
221
|
.vd-input-invalid:focus,
|
|
217
222
|
input.vd-input-invalid:focus {
|
|
218
|
-
border-color: var(--color-error);
|
|
219
|
-
box-shadow: 0 0 0 3px var(--color-error-alpha-10);
|
|
223
|
+
border-color: var(--vd-color-error);
|
|
224
|
+
box-shadow: 0 0 0 3px var(--vd-color-error-alpha-10);
|
|
220
225
|
}
|
|
221
226
|
|
|
222
227
|
.textarea-error,
|
|
223
228
|
textarea.textarea-error,
|
|
224
229
|
.textarea.is-error,
|
|
225
230
|
textarea.is-error {
|
|
226
|
-
border-color: var(--color-error);
|
|
231
|
+
border-color: var(--vd-color-error);
|
|
227
232
|
}
|
|
228
233
|
|
|
229
234
|
.textarea-error:focus,
|
|
230
235
|
textarea.textarea-error:focus,
|
|
231
236
|
.textarea.is-error:focus,
|
|
232
237
|
textarea.is-error:focus {
|
|
233
|
-
border-color: var(--color-error);
|
|
234
|
-
box-shadow: 0 0 0 3px var(--color-error-alpha-10);
|
|
238
|
+
border-color: var(--vd-color-error);
|
|
239
|
+
box-shadow: 0 0 0 3px var(--vd-color-error-alpha-10);
|
|
235
240
|
}
|
|
236
241
|
|
|
237
242
|
/* Input States - Success */
|
|
@@ -239,41 +244,41 @@ textarea.is-error:focus {
|
|
|
239
244
|
input.vd-input-success,
|
|
240
245
|
.vd-input.is-success,
|
|
241
246
|
input.is-success {
|
|
242
|
-
border-color: var(--color-success);
|
|
247
|
+
border-color: var(--vd-color-success);
|
|
243
248
|
}
|
|
244
249
|
|
|
245
250
|
.vd-input-valid,
|
|
246
251
|
input.vd-input-valid {
|
|
247
|
-
border-color: var(--color-success);
|
|
252
|
+
border-color: var(--vd-color-success);
|
|
248
253
|
}
|
|
249
254
|
|
|
250
255
|
.vd-input-success:focus,
|
|
251
256
|
input.vd-input-success:focus,
|
|
252
257
|
.vd-input.is-success:focus,
|
|
253
258
|
input.is-success:focus {
|
|
254
|
-
border-color: var(--color-success);
|
|
255
|
-
box-shadow: 0 0 0 3px var(--color-success-alpha-10);
|
|
259
|
+
border-color: var(--vd-color-success);
|
|
260
|
+
box-shadow: 0 0 0 3px var(--vd-color-success-alpha-10);
|
|
256
261
|
}
|
|
257
262
|
|
|
258
263
|
.vd-input-valid:focus,
|
|
259
264
|
input.vd-input-valid:focus {
|
|
260
|
-
border-color: var(--color-success);
|
|
261
|
-
box-shadow: 0 0 0 3px var(--color-success-alpha-10);
|
|
265
|
+
border-color: var(--vd-color-success);
|
|
266
|
+
box-shadow: 0 0 0 3px var(--vd-color-success-alpha-10);
|
|
262
267
|
}
|
|
263
268
|
|
|
264
269
|
.textarea-success,
|
|
265
270
|
textarea.textarea-success,
|
|
266
271
|
.textarea.is-success,
|
|
267
272
|
textarea.is-success {
|
|
268
|
-
border-color: var(--color-success);
|
|
273
|
+
border-color: var(--vd-color-success);
|
|
269
274
|
}
|
|
270
275
|
|
|
271
276
|
.textarea-success:focus,
|
|
272
277
|
textarea.textarea-success:focus,
|
|
273
278
|
.textarea.is-success:focus,
|
|
274
279
|
textarea.is-success:focus {
|
|
275
|
-
border-color: var(--color-success);
|
|
276
|
-
box-shadow: 0 0 0 3px var(--color-success-alpha-10);
|
|
280
|
+
border-color: var(--vd-color-success);
|
|
281
|
+
box-shadow: 0 0 0 3px var(--vd-color-success-alpha-10);
|
|
277
282
|
}
|
|
278
283
|
|
|
279
284
|
/* Labels */
|
|
@@ -283,14 +288,14 @@ label {
|
|
|
283
288
|
margin-bottom: 0.5rem;
|
|
284
289
|
font-size: var(--font-size-sm);
|
|
285
290
|
font-weight: var(--font-weight-medium);
|
|
286
|
-
color: var(--text-primary);
|
|
291
|
+
color: var(--vd-text-primary);
|
|
287
292
|
line-height: var(--line-height-normal);
|
|
288
293
|
}
|
|
289
294
|
|
|
290
295
|
.label-required::after,
|
|
291
296
|
label.required::after {
|
|
292
297
|
content: " *";
|
|
293
|
-
color: var(--color-error);
|
|
298
|
+
color: var(--vd-color-error);
|
|
294
299
|
}
|
|
295
300
|
|
|
296
301
|
.label-sm,
|
|
@@ -319,7 +324,7 @@ label.label-lg {
|
|
|
319
324
|
display: block;
|
|
320
325
|
margin-top: 0.5rem;
|
|
321
326
|
font-size: var(--font-size-sm);
|
|
322
|
-
color: var(--color-error);
|
|
327
|
+
color: var(--vd-color-error);
|
|
323
328
|
}
|
|
324
329
|
|
|
325
330
|
.vd-form-feedback {
|
|
@@ -329,7 +334,7 @@ label.label-lg {
|
|
|
329
334
|
}
|
|
330
335
|
|
|
331
336
|
.vd-form-feedback-invalid {
|
|
332
|
-
color: var(--color-error);
|
|
337
|
+
color: var(--vd-color-error);
|
|
333
338
|
}
|
|
334
339
|
|
|
335
340
|
.vd-form-success,
|
|
@@ -337,11 +342,11 @@ label.label-lg {
|
|
|
337
342
|
display: block;
|
|
338
343
|
margin-top: 0.5rem;
|
|
339
344
|
font-size: var(--font-size-sm);
|
|
340
|
-
color: var(--color-success);
|
|
345
|
+
color: var(--vd-color-success);
|
|
341
346
|
}
|
|
342
347
|
|
|
343
348
|
.vd-form-feedback-valid {
|
|
344
|
-
color: var(--color-success);
|
|
349
|
+
color: var(--vd-color-success);
|
|
345
350
|
}
|
|
346
351
|
|
|
347
352
|
.vd-form-help,
|
|
@@ -349,7 +354,7 @@ label.label-lg {
|
|
|
349
354
|
display: block;
|
|
350
355
|
margin-top: 0.5rem;
|
|
351
356
|
font-size: var(--font-size-sm);
|
|
352
|
-
color: var(--text-muted);
|
|
357
|
+
color: var(--vd-text-muted);
|
|
353
358
|
}
|
|
354
359
|
|
|
355
360
|
/* Input Groups (with prefix/suffix) */
|
|
@@ -388,10 +393,10 @@ label.label-lg {
|
|
|
388
393
|
font-size: var(--input-font-size);
|
|
389
394
|
font-weight: var(--font-weight-normal);
|
|
390
395
|
line-height: var(--line-height-normal);
|
|
391
|
-
color: var(--text-secondary);
|
|
396
|
+
color: var(--vd-text-secondary);
|
|
392
397
|
text-align: center;
|
|
393
398
|
white-space: nowrap;
|
|
394
|
-
background-color: var(--bg-secondary);
|
|
399
|
+
background-color: var(--vd-bg-secondary);
|
|
395
400
|
border: var(--input-border-width) solid var(--input-border-color);
|
|
396
401
|
}
|
|
397
402
|
|
|
@@ -420,6 +425,7 @@ label.label-lg {
|
|
|
420
425
|
============================================ */
|
|
421
426
|
|
|
422
427
|
/* Checkbox Variables */
|
|
428
|
+
/* stylelint-disable-next-line no-duplicate-selectors -- control-specific tokens stay grouped near their rules. */
|
|
423
429
|
:root {
|
|
424
430
|
--checkbox-size: 1.3125rem;
|
|
425
431
|
/* 21px - fib */
|
|
@@ -431,9 +437,9 @@ label.label-lg {
|
|
|
431
437
|
/* fib(2) */
|
|
432
438
|
--checkbox-border-radius: var(--radius-fib-3);
|
|
433
439
|
/* 3px */
|
|
434
|
-
--checkbox-check-color: var(--color-white);
|
|
435
|
-
--checkbox-bg-checked: var(--color-primary);
|
|
436
|
-
--checkbox-bg-indeterminate: var(--color-primary);
|
|
440
|
+
--checkbox-check-color: var(--vd-color-white);
|
|
441
|
+
--checkbox-bg-checked: var(--vd-color-primary);
|
|
442
|
+
--checkbox-bg-indeterminate: var(--vd-color-primary);
|
|
437
443
|
--checkbox-border-color: var(--input-border-color);
|
|
438
444
|
--checkbox-transition: var(--transition-base);
|
|
439
445
|
}
|
|
@@ -449,7 +455,7 @@ label.label-lg {
|
|
|
449
455
|
cursor: pointer;
|
|
450
456
|
font-size: var(--input-font-size);
|
|
451
457
|
line-height: var(--line-height-normal);
|
|
452
|
-
color: var(--text-primary);
|
|
458
|
+
color: var(--vd-text-primary);
|
|
453
459
|
user-select: none;
|
|
454
460
|
gap: 0.5rem;
|
|
455
461
|
/* 8px - fib */
|
|
@@ -536,7 +542,7 @@ label.label-lg {
|
|
|
536
542
|
cursor: pointer;
|
|
537
543
|
font-size: var(--input-font-size);
|
|
538
544
|
line-height: var(--line-height-normal);
|
|
539
|
-
color: var(--text-primary);
|
|
545
|
+
color: var(--vd-text-primary);
|
|
540
546
|
user-select: none;
|
|
541
547
|
padding-left: calc(var(--checkbox-size) + 0.5rem);
|
|
542
548
|
position: relative;
|
|
@@ -675,6 +681,7 @@ label.label-lg {
|
|
|
675
681
|
}
|
|
676
682
|
|
|
677
683
|
/* Radio Button Variables */
|
|
684
|
+
/* stylelint-disable-next-line no-duplicate-selectors -- control-specific tokens stay grouped near their rules. */
|
|
678
685
|
:root {
|
|
679
686
|
--radio-size: 1.3125rem;
|
|
680
687
|
/* 21px - fib */
|
|
@@ -690,7 +697,7 @@ label.label-lg {
|
|
|
690
697
|
/* 5px - fib */
|
|
691
698
|
--radio-dot-size-lg: 0.8125rem;
|
|
692
699
|
/* 13px - fib */
|
|
693
|
-
--radio-bg-checked: var(--color-primary);
|
|
700
|
+
--radio-bg-checked: var(--vd-color-primary);
|
|
694
701
|
--radio-border-color: var(--input-border-color);
|
|
695
702
|
--radio-transition: var(--transition-base);
|
|
696
703
|
}
|
|
@@ -705,7 +712,7 @@ label.label-lg {
|
|
|
705
712
|
cursor: pointer;
|
|
706
713
|
font-size: var(--input-font-size);
|
|
707
714
|
line-height: var(--line-height-normal);
|
|
708
|
-
color: var(--text-primary);
|
|
715
|
+
color: var(--vd-text-primary);
|
|
709
716
|
user-select: none;
|
|
710
717
|
gap: 0.5rem;
|
|
711
718
|
}
|
|
@@ -790,7 +797,7 @@ label.label-lg {
|
|
|
790
797
|
cursor: pointer;
|
|
791
798
|
font-size: var(--input-font-size);
|
|
792
799
|
line-height: var(--line-height-normal);
|
|
793
|
-
color: var(--text-primary);
|
|
800
|
+
color: var(--vd-text-primary);
|
|
794
801
|
user-select: none;
|
|
795
802
|
padding-left: calc(var(--radio-size) + 0.5rem);
|
|
796
803
|
position: relative;
|
|
@@ -922,6 +929,7 @@ label.label-lg {
|
|
|
922
929
|
}
|
|
923
930
|
|
|
924
931
|
/* Range Variables */
|
|
932
|
+
/* stylelint-disable-next-line no-duplicate-selectors -- range tokens stay grouped with range control styles. */
|
|
925
933
|
:root {
|
|
926
934
|
--range-track-height: 0.5rem;
|
|
927
935
|
--range-track-height-sm: 0.375rem;
|
|
@@ -929,22 +937,23 @@ label.label-lg {
|
|
|
929
937
|
--range-thumb-size: 1.25rem;
|
|
930
938
|
--range-thumb-size-sm: 1rem;
|
|
931
939
|
--range-thumb-size-lg: 1.5rem;
|
|
932
|
-
--range-track-bg: var(--color-gray-300);
|
|
940
|
+
--range-track-bg: var(--vd-color-gray-300);
|
|
933
941
|
--range-track-border: none;
|
|
934
|
-
--range-track-fill: var(--color-primary);
|
|
935
|
-
--range-thumb-bg: var(--color-primary);
|
|
936
|
-
--range-thumb-border: 2px solid var(--color-white);
|
|
942
|
+
--range-track-fill: var(--vd-color-primary);
|
|
943
|
+
--range-thumb-bg: var(--vd-color-primary);
|
|
944
|
+
--range-thumb-border: 2px solid var(--vd-color-white);
|
|
937
945
|
--range-thumb-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
|
|
938
946
|
}
|
|
939
947
|
|
|
940
948
|
/* Dark Theme Range Overrides - more visible track */
|
|
949
|
+
/* stylelint-disable-next-line no-duplicate-selectors -- dark-mode token overrides stay adjacent to range styles. */
|
|
941
950
|
[data-theme="dark"] {
|
|
942
|
-
--range-track-bg: var(--color-gray-400);
|
|
951
|
+
--range-track-bg: var(--vd-color-gray-400);
|
|
943
952
|
}
|
|
944
953
|
|
|
945
954
|
@media (prefers-color-scheme: dark) {
|
|
946
955
|
:root:not([data-theme]) {
|
|
947
|
-
--range-track-bg: var(--color-gray-400);
|
|
956
|
+
--range-track-bg: var(--vd-color-gray-400);
|
|
948
957
|
}
|
|
949
958
|
}
|
|
950
959
|
|
|
@@ -977,12 +986,12 @@ input[type="range"]:focus {
|
|
|
977
986
|
|
|
978
987
|
input[type="range"].range-input:focus::-webkit-slider-thumb,
|
|
979
988
|
input[type="range"]:focus::-webkit-slider-thumb {
|
|
980
|
-
box-shadow: var(--range-thumb-shadow), 0 0 0 3px var(--color-primary-alpha-10);
|
|
989
|
+
box-shadow: var(--range-thumb-shadow), 0 0 0 3px var(--vd-color-primary-alpha-10);
|
|
981
990
|
}
|
|
982
991
|
|
|
983
992
|
input[type="range"].range-input:focus::-moz-range-thumb,
|
|
984
993
|
input[type="range"]:focus::-moz-range-thumb {
|
|
985
|
-
box-shadow: var(--range-thumb-shadow), 0 0 0 3px var(--color-primary-alpha-10);
|
|
994
|
+
box-shadow: var(--range-thumb-shadow), 0 0 0 3px var(--vd-color-primary-alpha-10);
|
|
986
995
|
}
|
|
987
996
|
|
|
988
997
|
/* Range Track (Webkit - Chrome, Safari, Edge) */
|
|
@@ -1140,11 +1149,11 @@ input[type="range"].range-lg::-moz-range-thumb {
|
|
|
1140
1149
|
display: inline-block;
|
|
1141
1150
|
margin-left: 0.5rem;
|
|
1142
1151
|
padding: 0.25rem 0.5rem;
|
|
1143
|
-
background-color: var(--bg-secondary);
|
|
1152
|
+
background-color: var(--vd-bg-secondary);
|
|
1144
1153
|
border-radius: var(--btn-border-radius-sm);
|
|
1145
1154
|
font-size: var(--font-size-sm);
|
|
1146
1155
|
font-weight: var(--font-weight-medium);
|
|
1147
|
-
color: var(--text-primary);
|
|
1156
|
+
color: var(--vd-text-primary);
|
|
1148
1157
|
min-width: 3rem;
|
|
1149
1158
|
text-align: center;
|
|
1150
1159
|
}
|
|
@@ -1155,7 +1164,7 @@ input[type="range"].range-lg::-moz-range-thumb {
|
|
|
1155
1164
|
margin-bottom: 0.5rem;
|
|
1156
1165
|
font-size: var(--font-size-sm);
|
|
1157
1166
|
font-weight: var(--font-weight-medium);
|
|
1158
|
-
color: var(--text-primary);
|
|
1167
|
+
color: var(--vd-text-primary);
|
|
1159
1168
|
}
|
|
1160
1169
|
|
|
1161
1170
|
.range-min-max {
|
|
@@ -1163,10 +1172,11 @@ input[type="range"].range-lg::-moz-range-thumb {
|
|
|
1163
1172
|
justify-content: space-between;
|
|
1164
1173
|
margin-top: 0.25rem;
|
|
1165
1174
|
font-size: var(--font-size-xs);
|
|
1166
|
-
color: var(--text-muted);
|
|
1175
|
+
color: var(--vd-text-muted);
|
|
1167
1176
|
}
|
|
1168
1177
|
|
|
1169
1178
|
/* Switch Variables */
|
|
1179
|
+
/* stylelint-disable-next-line no-duplicate-selectors -- control-specific tokens stay grouped near their rules. */
|
|
1170
1180
|
:root {
|
|
1171
1181
|
/* Switch: golden rectangle (55x34 outer, 21px thumb) */
|
|
1172
1182
|
--switch-width: 3.4375rem;
|
|
@@ -1189,23 +1199,24 @@ input[type="range"].range-lg::-moz-range-thumb {
|
|
|
1189
1199
|
/* 34px - fib */
|
|
1190
1200
|
--switch-thumb-offset: 0.1875rem;
|
|
1191
1201
|
/* 3px - fib */
|
|
1192
|
-
--switch-bg-off: var(--color-gray-300);
|
|
1193
|
-
--switch-bg-on: var(--color-primary);
|
|
1194
|
-
--switch-bg-on-success: var(--color-success);
|
|
1195
|
-
--switch-bg-on-warning: var(--color-warning);
|
|
1196
|
-
--switch-bg-on-error: var(--color-error);
|
|
1197
|
-
--switch-thumb-bg: var(--color-white);
|
|
1202
|
+
--switch-bg-off: var(--vd-color-gray-300);
|
|
1203
|
+
--switch-bg-on: var(--vd-color-primary);
|
|
1204
|
+
--switch-bg-on-success: var(--vd-color-success);
|
|
1205
|
+
--switch-bg-on-warning: var(--vd-color-warning);
|
|
1206
|
+
--switch-bg-on-error: var(--vd-color-error);
|
|
1207
|
+
--switch-thumb-bg: var(--vd-color-white);
|
|
1198
1208
|
--switch-transition: var(--transition-base);
|
|
1199
1209
|
}
|
|
1200
1210
|
|
|
1201
1211
|
/* Dark Theme Switch Overrides */
|
|
1212
|
+
/* stylelint-disable-next-line no-duplicate-selectors -- dark-mode token overrides stay adjacent to switch styles. */
|
|
1202
1213
|
[data-theme="dark"] {
|
|
1203
|
-
--switch-bg-off: var(--color-gray-600);
|
|
1214
|
+
--switch-bg-off: var(--vd-color-gray-600);
|
|
1204
1215
|
}
|
|
1205
1216
|
|
|
1206
1217
|
@media (prefers-color-scheme: dark) {
|
|
1207
1218
|
:root:not([data-theme]) {
|
|
1208
|
-
--switch-bg-off: var(--color-gray-600);
|
|
1219
|
+
--switch-bg-off: var(--vd-color-gray-600);
|
|
1209
1220
|
}
|
|
1210
1221
|
}
|
|
1211
1222
|
|
|
@@ -1219,7 +1230,7 @@ input[type="range"].range-lg::-moz-range-thumb {
|
|
|
1219
1230
|
cursor: pointer;
|
|
1220
1231
|
font-size: var(--input-font-size);
|
|
1221
1232
|
line-height: var(--line-height-normal);
|
|
1222
|
-
color: var(--text-primary);
|
|
1233
|
+
color: var(--vd-text-primary);
|
|
1223
1234
|
user-select: none;
|
|
1224
1235
|
gap: 0.75rem;
|
|
1225
1236
|
}
|
|
@@ -1306,7 +1317,7 @@ input[type="range"].range-lg::-moz-range-thumb {
|
|
|
1306
1317
|
cursor: pointer;
|
|
1307
1318
|
font-size: var(--input-font-size);
|
|
1308
1319
|
line-height: var(--line-height-normal);
|
|
1309
|
-
color: var(--text-primary);
|
|
1320
|
+
color: var(--vd-text-primary);
|
|
1310
1321
|
user-select: none;
|
|
1311
1322
|
position: relative;
|
|
1312
1323
|
}
|
|
@@ -1479,10 +1490,11 @@ input[type="range"].range-lg::-moz-range-thumb {
|
|
|
1479
1490
|
}
|
|
1480
1491
|
|
|
1481
1492
|
/* Select Variables */
|
|
1493
|
+
/* stylelint-disable-next-line no-duplicate-selectors -- control-specific tokens stay grouped near their rules. */
|
|
1482
1494
|
:root {
|
|
1483
1495
|
--select-arrow-size: 16px;
|
|
1484
|
-
--select-arrow-color: var(--text-secondary);
|
|
1485
|
-
--select-arrow-color-focus: var(--color-primary);
|
|
1496
|
+
--select-arrow-color: var(--vd-text-secondary);
|
|
1497
|
+
--select-arrow-color-focus: var(--vd-color-primary);
|
|
1486
1498
|
}
|
|
1487
1499
|
|
|
1488
1500
|
/* Select Wrapper */
|
|
@@ -1504,7 +1516,7 @@ input[type="range"].range-lg::-moz-range-thumb {
|
|
|
1504
1516
|
font-size: var(--input-font-size);
|
|
1505
1517
|
font-weight: var(--font-weight-normal);
|
|
1506
1518
|
line-height: var(--line-height-normal);
|
|
1507
|
-
color: var(--text-primary);
|
|
1519
|
+
color: var(--vd-text-primary);
|
|
1508
1520
|
text-align: left;
|
|
1509
1521
|
background-color: var(--input-bg);
|
|
1510
1522
|
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23495057' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");
|
|
@@ -1549,7 +1561,7 @@ select,
|
|
|
1549
1561
|
font-size: var(--input-font-size);
|
|
1550
1562
|
font-weight: var(--font-weight-normal);
|
|
1551
1563
|
line-height: var(--line-height-normal);
|
|
1552
|
-
color: var(--text-primary);
|
|
1564
|
+
color: var(--vd-text-primary);
|
|
1553
1565
|
background-color: var(--input-bg);
|
|
1554
1566
|
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23495057' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");
|
|
1555
1567
|
background-repeat: no-repeat;
|
|
@@ -1587,14 +1599,14 @@ select.vd-input.vd-input-error,
|
|
|
1587
1599
|
select.vd-input.is-error,
|
|
1588
1600
|
.select-input.vd-input-error,
|
|
1589
1601
|
.select-input.is-error {
|
|
1590
|
-
border-color: var(--color-error);
|
|
1602
|
+
border-color: var(--vd-color-error);
|
|
1591
1603
|
}
|
|
1592
1604
|
|
|
1593
1605
|
select.vd-input.vd-input-success,
|
|
1594
1606
|
select.vd-input.is-success,
|
|
1595
1607
|
.select-input.vd-input-success,
|
|
1596
1608
|
.select-input.is-success {
|
|
1597
|
-
border-color: var(--color-success);
|
|
1609
|
+
border-color: var(--vd-color-success);
|
|
1598
1610
|
}
|
|
1599
1611
|
|
|
1600
1612
|
/* Select Sizes */
|
|
@@ -1662,7 +1674,7 @@ select[multiple] option,
|
|
|
1662
1674
|
width: 100%;
|
|
1663
1675
|
padding: var(--input-padding-y) var(--input-padding-x);
|
|
1664
1676
|
font-size: var(--input-font-size);
|
|
1665
|
-
color: var(--text-primary);
|
|
1677
|
+
color: var(--vd-text-primary);
|
|
1666
1678
|
background-color: transparent;
|
|
1667
1679
|
border: none;
|
|
1668
1680
|
text-align: left;
|
|
@@ -1672,13 +1684,13 @@ select[multiple] option,
|
|
|
1672
1684
|
|
|
1673
1685
|
.custom-select-option:hover,
|
|
1674
1686
|
.custom-select-option:focus {
|
|
1675
|
-
background-color: var(--color-primary-alpha-10);
|
|
1687
|
+
background-color: var(--vd-color-primary-alpha-10);
|
|
1676
1688
|
outline: none;
|
|
1677
1689
|
}
|
|
1678
1690
|
|
|
1679
1691
|
.custom-select-option.is-selected {
|
|
1680
|
-
background-color: var(--color-primary-alpha-10);
|
|
1681
|
-
color: var(--color-primary);
|
|
1692
|
+
background-color: var(--vd-color-primary-alpha-10);
|
|
1693
|
+
color: var(--vd-color-primary);
|
|
1682
1694
|
font-weight: var(--font-weight-medium);
|
|
1683
1695
|
}
|
|
1684
1696
|
|
|
@@ -1686,14 +1698,14 @@ select[multiple] option,
|
|
|
1686
1698
|
.custom-select-option[data-value=""] {
|
|
1687
1699
|
opacity: 0.6;
|
|
1688
1700
|
cursor: not-allowed;
|
|
1689
|
-
color: var(--text-muted);
|
|
1701
|
+
color: var(--vd-text-muted);
|
|
1690
1702
|
}
|
|
1691
1703
|
|
|
1692
1704
|
.custom-select-option-group {
|
|
1693
1705
|
padding: 0.5rem var(--input-padding-x);
|
|
1694
1706
|
font-size: var(--font-size-sm);
|
|
1695
1707
|
font-weight: var(--font-weight-semibold);
|
|
1696
|
-
color: var(--text-muted);
|
|
1708
|
+
color: var(--vd-text-muted);
|
|
1697
1709
|
text-transform: uppercase;
|
|
1698
1710
|
letter-spacing: 0.05em;
|
|
1699
1711
|
}
|
|
@@ -33,15 +33,18 @@
|
|
|
33
33
|
position: relative;
|
|
34
34
|
min-height: 60px;
|
|
35
35
|
min-width: 60px;
|
|
36
|
+
cursor: zoom-in;
|
|
37
|
+
transition: transform var(--image-box-transition-duration) var(--image-box-transition-easing),
|
|
38
|
+
box-shadow var(--image-box-transition-duration) var(--image-box-transition-easing);
|
|
36
39
|
}
|
|
37
40
|
|
|
38
41
|
/* Hide broken image alt text and show styled placeholder */
|
|
39
42
|
.vd-image-box-trigger.is-broken {
|
|
40
43
|
/* Gradient background for placeholder */
|
|
41
44
|
background: linear-gradient(135deg,
|
|
42
|
-
var(--bg-tertiary, rgba(128, 128, 128, 0.1)) 0%,
|
|
43
|
-
var(--bg-secondary, rgba(128, 128, 128, 0.15)) 100%);
|
|
44
|
-
border: 1px dashed var(--border-color, rgba(128, 128, 128, 0.3));
|
|
45
|
+
var(--vd-bg-tertiary, rgba(128, 128, 128, 0.1)) 0%,
|
|
46
|
+
var(--vd-bg-secondary, rgba(128, 128, 128, 0.15)) 100%);
|
|
47
|
+
border: 1px dashed var(--vd-border-color, rgba(128, 128, 128, 0.3));
|
|
45
48
|
|
|
46
49
|
/* Center the icon using background image */
|
|
47
50
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' fill='%23888888' viewBox='0 0 256 256'%3E%3Cpath d='M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40ZM40,56H216v94.75l-24.29-24.29a16,16,0,0,0-22.63,0L144,151.51l-25.38-25.38a16,16,0,0,0-22.62,0L40,182.12V56Z'/%3E%3Ccircle cx='100' cy='108' r='20'/%3E%3C/svg%3E");
|
|
@@ -54,13 +57,6 @@
|
|
|
54
57
|
overflow: hidden;
|
|
55
58
|
}
|
|
56
59
|
|
|
57
|
-
/* Image Box Trigger - Images that can be enlarged */
|
|
58
|
-
.vd-image-box-trigger {
|
|
59
|
-
cursor: zoom-in;
|
|
60
|
-
transition: transform var(--image-box-transition-duration) var(--image-box-transition-easing),
|
|
61
|
-
box-shadow var(--image-box-transition-duration) var(--image-box-transition-easing);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
60
|
.vd-image-box-trigger:hover {
|
|
65
61
|
transform: scale(1.02);
|
|
66
62
|
box-shadow: var(--shadow-lg);
|
|
@@ -133,7 +129,7 @@
|
|
|
133
129
|
background: rgba(255, 255, 255, 0.1);
|
|
134
130
|
border: none;
|
|
135
131
|
border-radius: 50%;
|
|
136
|
-
color: var(--color-white);
|
|
132
|
+
color: var(--vd-color-white);
|
|
137
133
|
font-size: 24px;
|
|
138
134
|
line-height: 1;
|
|
139
135
|
cursor: pointer;
|
|
@@ -159,7 +155,7 @@
|
|
|
159
155
|
}
|
|
160
156
|
|
|
161
157
|
.vd-image-box-close:focus {
|
|
162
|
-
outline: 2px solid var(--color-primary);
|
|
158
|
+
outline: 2px solid var(--vd-color-primary);
|
|
163
159
|
outline-offset: 2px;
|
|
164
160
|
}
|
|
165
161
|
|
|
@@ -170,7 +166,7 @@
|
|
|
170
166
|
left: 50%;
|
|
171
167
|
transform: translateX(-50%);
|
|
172
168
|
background: rgba(0, 0, 0, 0.7);
|
|
173
|
-
color: var(--color-white);
|
|
169
|
+
color: var(--vd-color-white);
|
|
174
170
|
padding: 8px 16px;
|
|
175
171
|
border-radius: var(--btn-border-radius);
|
|
176
172
|
font-size: var(--font-size-sm);
|
|
@@ -243,7 +239,7 @@
|
|
|
243
239
|
/* Active/selected state for gallery thumbnails */
|
|
244
240
|
.vd-image-box-gallery .vd-image-box-trigger.is-active,
|
|
245
241
|
.vd-image-box-gallery .vd-image-box-trigger[aria-selected="true"] {
|
|
246
|
-
outline: 3px solid var(--color-primary);
|
|
242
|
+
outline: 3px solid var(--vd-color-primary);
|
|
247
243
|
outline-offset: 2px;
|
|
248
244
|
transform: scale(1.05);
|
|
249
245
|
box-shadow: var(--shadow-lg);
|
|
@@ -251,7 +247,7 @@
|
|
|
251
247
|
|
|
252
248
|
/* Keyboard focus for gallery thumbnails */
|
|
253
249
|
.vd-image-box-gallery .vd-image-box-trigger:focus {
|
|
254
|
-
outline: 3px solid var(--color-primary);
|
|
250
|
+
outline: 3px solid var(--vd-color-primary);
|
|
255
251
|
outline-offset: 2px;
|
|
256
252
|
}
|
|
257
253
|
|
|
@@ -262,7 +258,7 @@
|
|
|
262
258
|
|
|
263
259
|
/* Loading State */
|
|
264
260
|
.vd-image-box-trigger.is-loading {
|
|
265
|
-
background: var(--bg-secondary);
|
|
261
|
+
background: var(--vd-bg-secondary);
|
|
266
262
|
animation: image-box-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
|
|
267
263
|
}
|
|
268
264
|
|
|
@@ -276,4 +272,4 @@
|
|
|
276
272
|
50% {
|
|
277
273
|
opacity: 0.5;
|
|
278
274
|
}
|
|
279
|
-
}
|
|
275
|
+
}
|