vanilla-jui 1.7.10 → 1.7.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/index.js +1 -1
  2. package/dist/index.umd.js +1 -1
  3. package/dist/style.css +1 -1
  4. package/package.json +1 -1
  5. package/src/components/accordion.ts +1 -1
  6. package/src/components/flow.ts +1 -1
  7. package/src/components/form.ts +1 -1
  8. package/src/components/modal.ts +1 -1
  9. package/src/css/index.css +1 -2
  10. package/src/css/layout.css +156 -63
  11. package/src/css/status.css +0 -1
  12. package/src/css/themes/default/accordion.css +37 -1
  13. package/src/css/themes/default/avatar.css +23 -1
  14. package/src/css/themes/default/badge.css +20 -3
  15. package/src/css/themes/default/breadcrumb.css +65 -1
  16. package/src/css/themes/default/button.css +64 -11
  17. package/src/css/themes/default/drop.css +19 -1
  18. package/src/css/themes/default/editor.css +781 -7
  19. package/src/css/themes/default/form.css +650 -2
  20. package/src/css/themes/default/index.css +17 -14
  21. package/src/css/themes/default/loading.css +144 -2
  22. package/src/css/themes/default/menu.css +113 -125
  23. package/src/css/themes/default/modal.css +26 -4
  24. package/src/css/themes/default/offcanvas.css +19 -1
  25. package/src/css/themes/default/pagination.css +13 -1
  26. package/src/css/themes/default/swiper.css +99 -1
  27. package/src/css/themes/default/tabs.css +50 -1
  28. package/src/css/themes/default/theme-palette.css +24 -1
  29. package/src/css/themes/default/tip.css +36 -1
  30. package/src/css/themes/default/toast.css +42 -1
  31. package/src/css/themes/default/toc.css +1 -1
  32. package/src/css/themes/default/toolbar.css +29 -1
  33. package/src/css/themes/default/tooltip.css +8 -2
  34. package/src/css/themes/default/tree.css +40 -3
  35. package/src/css/accordion.css +0 -47
  36. package/src/css/avatar.css +0 -27
  37. package/src/css/badge.css +0 -8
  38. package/src/css/breadcrumb.css +0 -71
  39. package/src/css/button.css +0 -32
  40. package/src/css/components.css +0 -28
  41. package/src/css/divider.css +0 -9
  42. package/src/css/drop.css +0 -21
  43. package/src/css/editor.css +0 -794
  44. package/src/css/form.css +0 -657
  45. package/src/css/loading.css +0 -150
  46. package/src/css/menu.css +0 -74
  47. package/src/css/modal.css +0 -33
  48. package/src/css/offcanvas.css +0 -23
  49. package/src/css/pagination.css +0 -15
  50. package/src/css/popup.css +0 -66
  51. package/src/css/skeleton.css +0 -72
  52. package/src/css/swiper.css +0 -107
  53. package/src/css/tabs.css +0 -58
  54. package/src/css/tag.css +0 -36
  55. package/src/css/theme-palette.css +0 -28
  56. package/src/css/themes/default/popup.css +0 -7
  57. package/src/css/themes/default/tag.css +0 -85
  58. package/src/css/tip.css +0 -40
  59. package/src/css/toast.css +0 -54
  60. package/src/css/toolbar.css +0 -34
  61. package/src/css/tooltip.css +0 -12
  62. package/src/css/tree.css +0 -51
  63. /package/src/css/{flow.css → themes/default/flow.css} +0 -0
@@ -1,14 +1,84 @@
1
- @layer themes {
1
+ @layer components {
2
+ .j-form,
3
+ .j-form .form-field,
4
+ .j-form .form-field .field-legend {
5
+ display: flex;
6
+ }
7
+
8
+ .j-form {
9
+ flex-direction: column;
10
+ gap: var(--s3);
11
+ }
12
+
13
+ .j-form .form-field {
14
+ gap: var(--space);
15
+ margin: 0;
16
+ }
17
+
18
+ .j-form fieldset.form-field {
19
+ border: 0;
20
+ padding: 0;
21
+ }
22
+
23
+ .j-form .form-field {
24
+ flex-direction: column;
25
+ }
26
+
27
+ .j-form .form-field .field-legend {
28
+ color: var(--ui-fg-muted);
29
+ font-size: var(--font-size-sm);
30
+ gap: var(--space);
31
+ }
32
+
33
+ .j-form .field-legend.is-required::after {
34
+ content: '*';
35
+ color: var(--state-danger);
36
+ }
37
+
38
+ .j-form .form-field .field-control .help-block {
39
+ font-size: var(--font-size-sm);
40
+ color: var(--ui-fg-soft);
41
+ margin: 0;
42
+ }
43
+
44
+ .j-form .form-field .field-control .help-block[data-valid='false'] {
45
+ color: var(--state-danger);
46
+ }
47
+
48
+ .j-form .form-buttons {
49
+ display: flex;
50
+ gap: var(--s2);
51
+ margin-top: var(--s2);
52
+ }
53
+
54
+ .j-form [data-field-buttons] button {
55
+ position: relative;
56
+ }
57
+
58
+ /* input */
2
59
  .j-input {
3
60
  --input-font-size: var(--font-size-md);
4
61
  --input-bg: inherit;
5
62
  --input-fg: inherit;
63
+
64
+ font-size: var(--input-font-size);
65
+ background-color: var(--input-bg);
66
+ color: var(--input-fg);
6
67
  }
7
68
 
8
69
  .j-input:not([type='checkbox']) {
9
70
  --input-padding: calc(var(--space) * 1.5) var(--s2);
10
71
  --input-height: var(--el-height-md);
11
72
  --input-line-height: var(--line-height);
73
+
74
+ border-width: 1px;
75
+ border-style: solid;
76
+ border-color: var(--ui-border);
77
+ border-radius: var(--radius-md);
78
+ padding: var(--input-padding);
79
+ height: var(--input-height);
80
+ line-height: var(--input-line-height);
81
+ letter-spacing: 0.5px;
12
82
  }
13
83
 
14
84
  .j-input.is-sm {
@@ -59,10 +129,370 @@
59
129
  border: 0;
60
130
  }
61
131
 
132
+ .j-input[type='file'] {
133
+ appearance: none;
134
+ background-clip: padding-box;
135
+ overflow: hidden;
136
+ cursor: pointer;
137
+ background-color: var(--ui-surface-subtle);
138
+ }
139
+
140
+ .j-input[type='file']::file-selector-button {
141
+ color: var(--ui-fg-muted);
142
+ appearance: none;
143
+ border-width: 0;
144
+ border-inline-end-width: 1px;
145
+ border-radius: 0;
146
+ border-color: var(--ui-border);
147
+ background-color: transparent;
148
+ margin: calc(var(--space) * -2);
149
+ font-size: var(--input-font-size);
150
+ }
151
+
152
+ .j-input[type='file']::file-selector-button,
153
+ .j-font-sm .j-input[type='file']::file-selector-button {
154
+ margin-inline-end: var(--s2);
155
+ padding: var(--s2);
156
+ }
157
+
158
+ .j-font-md .j-input[type='file']::file-selector-button {
159
+ margin-inline-end: calc(var(--space) * 2.75);
160
+ padding: calc(var(--space) * 2.75);
161
+ }
162
+
163
+ /* type radio */
164
+ .j-radio {
165
+ display: flex;
166
+ flex-wrap: wrap;
167
+ }
168
+
169
+ .j-radio.is-vertical {
170
+ flex-direction: column;
171
+ }
172
+
173
+ .j-radio,
174
+ .j-radio.is-horizontal {
175
+ flex-direction: row;
176
+ }
177
+
178
+ .j-radio label {
179
+ display: flex;
180
+ align-items: center;
181
+ gap: calc(var(--space)*1.5);
182
+ font-size: var(--font-size-md);
183
+ padding: calc(var(--space)*2);
184
+ border-radius: var(--radius-md);
185
+ }
186
+
187
+ .j-radio label:not(:has(input[type='radio']:disabled)):hover {
188
+ background-color: var(--ui-surface-hover);
189
+ }
190
+
191
+ .j-radio label input[type='radio'] {
192
+ appearance: none;
193
+ width: 1rem;
194
+ height: 1rem;
195
+ border-radius: 50%;
196
+ border-width: 1px;
197
+ border-style: solid;
198
+ border-color: var(--ui-border);
199
+ background-color: var(--ui-bg);
200
+ cursor: pointer;
201
+ position: relative;
202
+ margin: 0;
203
+ }
204
+
205
+ .j-radio label input[type='radio']:checked {
206
+ border-color: var(--tone-solid);
207
+ background-color: var(--tone-solid);
208
+ }
209
+
210
+ .j-radio label input[type='radio']:focus-visible {
211
+ outline: 2px solid var(--tone-ring);
212
+ outline-offset: 1px;
213
+ }
214
+
215
+ .j-radio label input[type='radio']:before {
216
+ content: '';
217
+ position: absolute;
218
+ width: 6px;
219
+ height: 6px;
220
+ border-radius: 50%;
221
+ background-color: var(--ui-bg);
222
+ top: 50%;
223
+ left: 50%;
224
+ transform: translate(-50%, -50%) scale(0);
225
+ transition: transform 0.1s cubic-bezier(0.165, 0.84, 0.44, 1);
226
+ }
227
+
228
+ .j-radio label input[type='radio']:checked::before {
229
+ transform: translate(-50%, -50%) scale(1);
230
+ }
231
+
232
+ .j-radio label:has(input[type='radio']:disabled) {
233
+ cursor: not-allowed;
234
+ color: var(--ui-disabled-fg);
235
+ }
236
+
237
+ .j-radio label input[type='radio']:disabled {
238
+ background-color: var(--ui-disabled-bg);
239
+ border-color: var(--ui-border);
240
+ cursor: not-allowed;
241
+ }
242
+
243
+ /* radio group */
244
+ .j-radio.is-group {
245
+ gap: 0;
246
+ flex-wrap: nowrap;
247
+ }
248
+
249
+ .j-radio.is-group input[type='radio'] {
250
+ clip: rect(0 0 0 0);
251
+ clip-path: inset(100%);
252
+ height: 1px;
253
+ overflow: hidden;
254
+ position: absolute;
255
+ white-space: nowrap;
256
+ width: 1px;
257
+ }
258
+
259
+ .j-radio.is-group label span.radio-text {
260
+ color: var(--ui-fg);
261
+ background-color: var(--ui-bg);
262
+ padding: var(--radio-group-padding, calc(var(--space) * 1.5) var(--s3));
263
+ height: var(--el-height-md);
264
+ line-height: var(--line-height);
265
+ box-shadow: 0 0 0 1px var(--ui-input-border);
266
+ cursor: pointer;
267
+ position: relative;
268
+ display: flex;
269
+ justify-content: center;
270
+ align-items: center;
271
+ text-align: center;
272
+ user-select: none;
273
+ letter-spacing: 0.5px;
274
+ }
275
+
276
+ .j-radio.is-group label:not(:first-child) span.radio-text {
277
+ margin-left: 1px;
278
+ }
279
+
280
+ .j-radio.is-group input[type='radio']:checked + span.radio-text {
281
+ box-shadow: 0 0 0 1px var(--tone-solid);
282
+ background-color: var(--tone-solid);
283
+ z-index: 1;
284
+ color: var(--tone-fg);
285
+ }
286
+
287
+ .j-radio.is-group label:first-child span {
288
+ border-radius: var(--radius-md) 0 0 var(--radius-md);
289
+ }
290
+
291
+ .j-radio.is-group label:last-child span {
292
+ border-radius: 0 var(--radius-md) var(--radius-md) 0;
293
+ }
294
+
295
+ .j-radio.is-group label {
296
+ padding: 0;
297
+ }
298
+
299
+ .j-radio.is-group.is-sm label {
300
+ font-size: var(--font-size-sm);
301
+ }
302
+
303
+ .j-radio.is-group.is-sm label span.radio-text {
304
+ --radio-group-padding: var(--space) calc(var(--space) * 2.5);
305
+ height: var(--el-height-sm);
306
+ }
307
+
308
+ .j-radio.is-group.is-lg label {
309
+ font-size: var(--font-size-lg);
310
+ }
311
+
312
+ .j-radio.is-group.is-lg label span.radio-text {
313
+ --radio-group-padding: var(--s3) calc(var(--space) * 3.5);
314
+ height: var(--el-height-lg);
315
+ }
316
+
317
+ /* type checkbox */
318
+ .j-checkbox {
319
+ display: flex;
320
+ flex-wrap: wrap;
321
+ margin: 0;
322
+ }
323
+
324
+ .j-checkbox.is-vertical {
325
+ flex-direction: column;
326
+ }
327
+
328
+ .j-checkbox,
329
+ .j-checkbox.is-horizontal {
330
+ flex-direction: row;
331
+ }
332
+
333
+ .j-checkbox label {
334
+ display: flex;
335
+ align-items: center;
336
+ gap: var(--checkbox-label-gap, var(--s2));
337
+ font-size: var(--checkbox-label-font-size, var(--font-size-md));
338
+ height: var(--el-height-md);
339
+ padding: calc(var(--space)*2);
340
+ border-radius: var(--checkbox-label-border-radius, var(--radius-md));
341
+ }
342
+
343
+ .j-radio label,
344
+ .j-checkbox label {
345
+ width: fit-content;
346
+ }
347
+
348
+ .j-checkbox label:not(:has(input[type='checkbox']:disabled)):hover {
349
+ background-color: var(--checkbox-hover-bg-color, var(--ui-surface-hover));
350
+ }
351
+
352
+ .j-checkbox input[type='checkbox'] {
353
+ appearance: none;
354
+ width: 1rem;
355
+ height: 1rem;
356
+ aspect-ratio: 1/1;
357
+ border-width: 1px;
358
+ border-style: solid;
359
+ border-color: var(--ui-border);
360
+ border-radius: var(--radius-md);
361
+ cursor: pointer;
362
+ position: relative;
363
+ margin: 0;
364
+ }
365
+
366
+ .j-checkbox input[type='checkbox']:checked {
367
+ border-color: transparent;
368
+ border-radius: var(--radius-md);
369
+ background-color: var(--tone-solid);
370
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e");
371
+ background-repeat: no-repeat;
372
+ background-position: center;
373
+ background-size: contain;
374
+ print-color-adjust: exact;
375
+ }
376
+
377
+ .dark .j-checkbox input[type='checkbox']:checked {
378
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23000000' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e");
379
+ }
380
+
381
+ /* switch checkbox */
382
+ .j-switch {
383
+ display: inline-block;
384
+ position: relative;
385
+ }
386
+
387
+ .j-switch.is-sm {
388
+ width: 1.75rem;
389
+ height: var(--switch-height-sm, calc(var(--space, 0 0.25rem) * 4));
390
+ }
391
+
392
+ .j-switch.is-md {
393
+ width: 2.625rem;
394
+ height: var(--switch-height-md, calc(var(--space, 0 0.25rem) * 6));
395
+ }
396
+
397
+ .j-switch.is-lg {
398
+ width: 3.5rem;
399
+ height: var(--switch-height-lg, calc(var(--space, 0 0.25rem) * 8));
400
+ }
401
+
402
+ .j-switch input[type='checkbox'] {
403
+ width: 0;
404
+ height: 0;
405
+ opacity: 0;
406
+ }
407
+
408
+ .j-switch .switch-slider {
409
+ position: absolute;
410
+ cursor: pointer;
411
+ inset: 0;
412
+ border-radius: 50px;
413
+ background-color: var(--ui-border);
414
+ transition: all 0.3s ease;
415
+ }
416
+
417
+ .j-switch .switch-slider:after {
418
+ content: '';
419
+ position: absolute;
420
+ border-radius: 50%;
421
+ background-color: #fff;
422
+ transition: all 0.3s ease;
423
+ }
424
+
425
+ .j-switch.is-sm .switch-slider:after {
426
+ left: 0.125rem;
427
+ bottom: 0.125rem;
428
+ width: 0.75rem;
429
+ height: 0.75rem;
430
+ }
431
+
432
+ .j-switch.is-md .switch-slider:after {
433
+ left: 0.1875rem;
434
+ bottom: 0.1875rem;
435
+ width: 1.125rem;
436
+ height: 1.125rem;
437
+ }
438
+
439
+ .j-switch.is-lg .switch-slider:after {
440
+ left: 0.25rem;
441
+ bottom: 0.25rem;
442
+ width: 1.5rem;
443
+ height: 1.5rem;
444
+ }
445
+
446
+ .j-switch input[type='checkbox']:checked + .switch-slider {
447
+ background-color: var(--tone-solid);
448
+ }
449
+
450
+ .j-switch.is-sm input[type='checkbox']:checked + .switch-slider:after {
451
+ transform: translateX(0.75rem);
452
+ }
453
+
454
+ .j-switch.is-md input[type='checkbox']:checked + .switch-slider:after {
455
+ transform: translateX(1.125rem);
456
+ }
457
+
458
+ .j-switch.is-lg input[type='checkbox']:checked + .switch-slider:after {
459
+ transform: translateX(1.5rem);
460
+ }
461
+
462
+ .j-theme-gray
463
+ .j-switch
464
+ input[type='checkbox']:checked
465
+ + .switch-slider:after {
466
+ background-color: var(--ui-bg);
467
+ }
468
+
469
+ .j-theme-olive
470
+ .j-switch
471
+ input[type='checkbox']:checked
472
+ + .switch-slider:after {
473
+ background-color: var(--ui-bg);
474
+ }
475
+
476
+ .j-switch .switch-slider:hover {
477
+ opacity: var(--opacity-hover, 0.9);
478
+ }
479
+
480
+ /* select */
62
481
  select.j-select {
63
482
  --input-padding: calc(var(--space) * 1.5);
64
483
  --input-height: var(--el-height-md);
65
484
  --input-font-size: var(--font-size-md);
485
+
486
+ padding: var(--input-padding);
487
+ border-width: 1px;
488
+ border-style: solid;
489
+ border-color: var(--ui-border);
490
+ border-radius: var(--radius-md);
491
+ height: var(--input-height);
492
+ line-height: var(--input-line-height, var(--line-height));
493
+ background-color: var(--input-background-color, inherit);
494
+ font-size: var(--input-font-size);
495
+ letter-spacing: 0.5px;
66
496
  }
67
497
 
68
498
  select.j-select.is-sm {
@@ -77,11 +507,53 @@
77
507
  --input-font-size: var(--font-size-lg);
78
508
  }
79
509
 
510
+ /* textarea */
511
+ textarea.j-textarea {
512
+ min-height: var(--textarea-min-height, calc(var(--space) * 18));
513
+ border-width: 1px;
514
+ border-style: solid;
515
+ border-color: var(--ui-border);
516
+ border-radius: var(--radius-md);
517
+ background-color: var(--input-background-color, var(--ui-bg));
518
+ color: var(--input-color, var(--ui-input-color));
519
+ resize: vertical;
520
+ padding: var(--space) var(--s2);
521
+ font-family: inherit;
522
+ font-size: var(--textarea-font-size, var(--font-size-md));
523
+ line-height: var(--textarea-line-height, var(--line-height));
524
+ }
525
+
526
+ textarea.j-textarea:disabled {
527
+ background-color: var(--ui-disabled-bg);
528
+ color: var(--ui-disabled-fg);
529
+ cursor: not-allowed;
530
+ }
531
+
532
+ .j-form input.j-input:not([type='checkbox']):not([type='radio']),
533
+ .j-form select.j-select,
534
+ .j-form textarea.j-textarea {
535
+ width: 100%;
536
+ }
537
+
538
+ /* input group */
539
+ .input-group {
540
+ display: flex;
541
+ align-items: stretch;
542
+ }
543
+
544
+ .input-group input.j-input,
545
+ .input-group select.j-select {
546
+ position: relative;
547
+ flex: 1 1 auto;
548
+ min-width: 0;
549
+ }
550
+
80
551
  .input-group .j-button {
81
552
  --btn-border-color: var(--ui-border);
82
553
  --btn-fg: var(--ui-fg-muted);
83
554
  --btn-bg: var(--ui-bg-muted);
84
555
  --btn-padding: 0 var(--s2);
556
+ --btn-box-shadow: none;
85
557
  }
86
558
 
87
559
  .input-group .el-addon .is-text {
@@ -92,6 +564,9 @@
92
564
  height: var(--el-height-md);
93
565
  border-color: var(--ui-border);
94
566
  border-radius: var(--radius-md);
567
+
568
+ border-width: 1px;
569
+ border-style: solid;
95
570
  }
96
571
 
97
572
  .input-group .el-addon .icon-close,
@@ -128,6 +603,26 @@
128
603
  border-bottom-right-radius: 0;
129
604
  }
130
605
 
606
+ /* input inner group */
607
+ .input-group,
608
+ .input-inner-group {
609
+ position: relative;
610
+ width: 100%;
611
+ display: flex;
612
+ flex-wrap: nowrap;
613
+ }
614
+
615
+ .input-inner-group {
616
+ border: 1px solid var(--ui-border);
617
+ border-radius: var(--radius-md);
618
+ }
619
+
620
+ .input-inner-group input.j-input,
621
+ .input-inner-group select.j-select {
622
+ width: 100%;
623
+ letter-spacing: 0.4px;
624
+ }
625
+
131
626
  .input-inner-group .j-button {
132
627
  --btn-box-shadow: none;
133
628
  }
@@ -142,6 +637,10 @@
142
637
 
143
638
  .input-inner-group .el-addon {
144
639
  color: var(--ui-fg-muted);
640
+
641
+ display: flex;
642
+ align-items: center;
643
+ justify-content: center;
145
644
  }
146
645
 
147
646
  .input-inner-group .el-addon .j-button:not(.is-icon) {
@@ -160,6 +659,156 @@
160
659
  box-shadow: 0 0 0 4px var(--tone-ring);
161
660
  }
162
661
 
662
+ .input-inner-group .el-addon svg {
663
+ width: var(--font-size-xl);
664
+ height: var(--font-size-xl);
665
+ }
666
+
667
+ .input-group .el-addon .is-text,
668
+ .input-inner-group .el-addon.is-text {
669
+ display: flex;
670
+ align-items: center;
671
+ padding-inline: var(--s2);
672
+ user-select: none;
673
+ }
674
+
675
+ .input-inner-group .el-addon.inner-wrap {
676
+ gap: var(--space);
677
+ padding-inline: var(--space);
678
+ }
679
+
680
+ /* input style */
681
+ .j-input.is-line:not([type='checkbox']) {
682
+ border-top-color: transparent;
683
+ border-left-color: transparent;
684
+ border-right-color: transparent;
685
+ padding-left: 0;
686
+ padding-right: 0;
687
+ border-radius: 0;
688
+ }
689
+
690
+ .j-input.is-ghost:not([type='checkbox']) {
691
+ border-color: transparent;
692
+ background-color: var(--tone-subtle);
693
+ }
694
+
695
+ .j-input.is-blank:not([type='checkbox']) {
696
+ border-color: transparent;
697
+ padding-left: 0;
698
+ padding-right: 0;
699
+ }
700
+
701
+ .j-input[data-valid='false'],
702
+ .j-select[data-valid='false'],
703
+ .j-textarea[data-valid='false'] {
704
+ border-color: var(--state-danger);
705
+ /* background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23d63939' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cline x1='18' y1='6' x2='6' y2='18'%3e%3c/line%3e%3cline x1='6' y1='6' x2='18' y2='18'%3e%3c/line%3e%3c/svg%3e"); */
706
+ }
707
+
708
+ /* status active */
709
+ .input-group .j-button:not(:disabled):active,
710
+ .inner-group .j-input:focus,
711
+ .input-group .j-input:focus-within,
712
+ .inner-group .j-input:focus-visible,
713
+ .input-group select.j-select:focus {
714
+ z-index: 1;
715
+ }
716
+
717
+ /* status focus */
718
+ .j-input:focus,
719
+ .j-input:focus-within,
720
+ .j-input:focus-visible,
721
+ .j-textarea:focus,
722
+ .j-textarea:focus-within,
723
+ .j-textarea:focus-visible,
724
+ select.j-select:focus,
725
+ select.j-select:focus-within,
726
+ select.j-select:focus-visible,
727
+ .j-input[data-valid='false']:focus-within,
728
+ .j-select[data-valid='false']:focus-within,
729
+ .input-group .j-button:not(:disabled):active {
730
+ outline: 0;
731
+ border-color: var(--tone-solid);
732
+ box-shadow: 0 0 0 4px var(--tone-ring);
733
+ }
734
+
735
+ .j-radio label input[type='radio']:focus-within {
736
+ border-color: transparent;
737
+ outline-offset: 1px;
738
+ }
739
+
740
+ .j-checkbox input[type='checkbox']:focus-within {
741
+ border-color: var(--tone-solid);
742
+ outline-offset: 1px;
743
+ }
744
+
745
+ .input-inner-group input.j-input,
746
+ .input-inner-group select.j-select {
747
+ border: 0;
748
+ box-shadow: none;
749
+ }
750
+
751
+ /* status readonly */
752
+ .j-input:not([type='file']):not(.is-line):not(.is-blank)[readonly],
753
+ .j-textarea[readonly] {
754
+ background-color: var(--ui-surface-active);
755
+ }
756
+
757
+ /* status disabled */
758
+ .j-input:disabled:not(.is-line):not(.is-ghost):not(.is-blank),
759
+ .j-textarea[disabled] {
760
+ background-color: var(--ui-disabled-bg);
761
+ }
762
+
763
+ /* radio disabled */
764
+ .j-radio label:has(input[type='radio']:disabled) {
765
+ cursor: not-allowed;
766
+ opacity: var(--opacity-disabled);
767
+ color: var(--ui-disabled-fg);
768
+ }
769
+
770
+ .j-radio label input[type='radio']:disabled {
771
+ background-color: var(--ui-disabled-bg);
772
+ border-color: var(--ui-border);
773
+ }
774
+
775
+ .j-radio.is-group label input[type='radio']:disabled + .radio-text {
776
+ cursor: not-allowed;
777
+ background-color: var(--ui-disabled-bg);
778
+ color: var(--ui-disabled-fg);
779
+ }
780
+
781
+ /* checkbox disabled */
782
+ .j-checkbox label:has(input[type='checkbox']:disabled) {
783
+ cursor: not-allowed;
784
+ color: var(--ui-disabled-fg);
785
+ }
786
+
787
+ .j-checkbox label input[type='checkbox']:disabled {
788
+ background-color: var(--ui-disabled-bg);
789
+ border-color: var(--ui-border);
790
+ }
791
+
792
+ /* switch disabled */
793
+ .j-switch:has(input[type='checkbox']:disabled),
794
+ .j-switch.is-line:has(input[type='checkbox']:disabled) {
795
+ opacity: var(--opacity-disabled);
796
+ cursor: not-allowed;
797
+ }
798
+
799
+ .j-switch:has(input[type='checkbox']:disabled) .switch-slider,
800
+ .j-switch.is-line:has(input[type='checkbox']:disabled) .switch-slider {
801
+ cursor: not-allowed;
802
+ }
803
+
804
+ .j-switch:has(input[type='checkbox']:disabled) .switch-slider:before,
805
+ .j-switch.is-line:has(input[type='checkbox']:disabled) .switch-slider:before {
806
+ background-color: var(--ui-border);
807
+ }
808
+
809
+ /*************************
810
+ * .mobile
811
+ *************************/
163
812
  .mobile .j-input[type='file']::file-selector-button {
164
813
  padding: var(--s3);
165
814
  margin: calc(var(--space) * -1.7);
@@ -170,7 +819,6 @@
170
819
  margin: calc(var(--space) * -1.4);
171
820
  }
172
821
 
173
- /* .mobile .j-input, */
174
822
  .mobile .j-textarea {
175
823
  width: 100%;
176
824
  }