vanilla-jui 1.5.36 → 1.5.37

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,69 +1,419 @@
1
1
  @layer themes {
2
2
  .j-menu {
3
- --menu-font-size: var(--font-size-md);
4
3
  --menu-font-weight: var(--font-normal);
5
4
  --menu-item-icon-size: var(--font-size-lg);
6
-
7
- --menu-item-padding: 0.5rem 1rem;
5
+ --menu-item-padding: 0.5rem 0.75rem;
8
6
  --menu-item-height: var(--el-height-md);
9
7
  --menu-item-line-height: var(--line-height);
10
- --menu-item-border-width: 1px;
11
- --menu-item-border-style: solid;
12
- --menu-item-border-color: transparent;
13
8
  --menu-item-border-radius: var(--radius-md);
14
- --menu-item-hover-bg: var(--tone-soft);
15
- --menu-item-hover-fg: var(--tone-text);
16
- --menu-item-error-bg: var(--state-danger-subtle);
17
- --menu-item-error-tip-bg: var(--state-danger);
18
- --menu-item-error-tip-fg: var(--state-danger-fg);
19
- --menu-item-error-tip-font-size: var(--font-size-sm);
20
- --menu-item-error-tip-padding: 0 var(--space);
21
-
22
9
  --menu-link-gap: var(--space);
23
- --menu-link-current-fg: var(--tone-solid);
24
-
25
10
  --sub-menu-bg: var(--ui-surface-subtle);
26
11
  --sub-menu-border-width: 1px;
27
- --sub-menu-border-radius: var(--radius-md);
28
- --sub-menu-min-width: 120px;
29
- --sub-menu-max-width: 240px;
30
12
  --sub-menu-box-shadow: var(--shadow-sm);
31
- --sub-menu-item-hover-bg: var(--tone-solid);
32
- --sub-menu-item-hover-fg: var(--tone-fg);
33
13
  --sub-menu-item-hover-outline-width: 1px;
34
- --sub-menu-item-hover-outline-style: solid;
35
- --sub-menu-item-hover-outline-color: var(--tone-solid);
36
14
  }
37
15
 
16
+ .j-menu .menu .menu-item {
17
+ font-size: var(--font-size-md);
18
+ }
19
+
20
+ .j-menu .menu .menu-item:not(:has(a)) {
21
+ height: var(--menu-item-height);
22
+ line-height: var(--menu-item-line-height);
23
+ font-weight: var(--menu-font-weight);
24
+ text-decoration: underline;
25
+ -webkit-text-decoration-style: wavy;
26
+ text-decoration-style: wavy;
27
+ -webkit-text-decoration-color: var(--state-danger);
28
+ text-decoration-color: var(--state-danger);
29
+ text-underline-offset: 4px;
30
+ padding: 4px 1rem;
31
+ }
32
+
33
+ .j-menu .menu .menu-item a {
34
+ gap: var(--menu-link-gap);
35
+ color: currentColor;
36
+ background-color: inherit;
37
+ font-weight: var(--font-medium);
38
+
39
+ padding: var(--menu-item-padding);
40
+ height: var(--menu-item-height);
41
+ line-height: var(--menu-item-line-height);
42
+ border-width: 1px;
43
+ border-style: solid;
44
+ border-color: transparent;
45
+ border-radius: var(--menu-item-border-radius);
46
+ }
47
+
48
+ .j-menu .menu .menu-item a .el-icon,
49
+ .j-menu .menu .menu-item a svg {
50
+ width: var(--menu-item-icon-size);
51
+ height: var(--menu-item-icon-size);
52
+ }
53
+
54
+ .j-menu .menu .menu-item.menu-item-has-children > a::after {
55
+ content: '';
56
+ width: 0;
57
+ height: 0;
58
+ margin-left: 4px;
59
+ vertical-align: middle;
60
+ border-left: 4px solid transparent;
61
+ border-right: 4px solid transparent;
62
+ border-top: 5px solid currentColor;
63
+ transition: transform 0.2s ease-in-out;
64
+ }
65
+
66
+ .j-menu .menu .menu-item.menu-item-has-children:hover > a::after {
67
+ transform: rotate(180deg);
68
+ }
69
+
70
+ .j-menu .menu .menu-item .sub-menu {
71
+ transform: translateY(1px);
72
+ padding: var(--s2) 0;
73
+ background: var(--sub-menu-bg);
74
+ border-width: var(--sub-menu-border-width);
75
+ border-style: var(--sub-menu-border-style);
76
+ border-color: var(--sub-menu-border-color);
77
+ border-radius: var(--menu-item-border-radius);
78
+ min-width: 120px;
79
+ max-width: 240px;
80
+ box-shadow: var(--sub-menu-box-shadow);
81
+ }
82
+
83
+ .j-menu .menu .menu-item .sub-menu .menu-item:hover a {
84
+ background: var(--tone-solid);
85
+ color: var(--tone-fg);
86
+ outline-width: var(--sub-menu-item-hover-outline-width);
87
+ outline-style: solid;
88
+ outline-color: var(--tone-solid);
89
+ }
90
+
91
+ .j-menu .menu .menu-item a:hover,
92
+ .j-menu .menu .menu-item.menu-item-has-children:hover > a {
93
+ text-decoration: none;
94
+ background: var(--tone-soft);
95
+ color: var(--tone-text);
96
+ }
97
+
98
+ .j-menu .menu > .menu-item.current-menu-item > a {
99
+ color: var(--tone-solid);
100
+ }
101
+
102
+ .j-menu
103
+ .menu
104
+ .menu-item.current-menu-item
105
+ > .sub-menu
106
+ > .menu-item:not(.current-menu-item)
107
+ a {
108
+ color: inherit;
109
+ }
110
+
111
+ .j-menu
112
+ .menu-item.current-menu-item
113
+ > .sub-menu
114
+ > .menu-item:not(.current-menu-item):hover
115
+ a {
116
+ color: var(--tone-fg);
117
+ }
118
+
119
+ .j-menu
120
+ .menu-item.menu-item-has-children:hover
121
+ > .sub-menu
122
+ > .menu-item.current-menu-item
123
+ a {
124
+ color: var(--tone-fg);
125
+ background-color: var(--tone-solid);
126
+ outline: 1px solid var(--tone-solid);
127
+ }
128
+
129
+ .j-menu .menu .menu-item:not(:has(a)):hover,
130
+ .j-menu[data-menu-type='mobile'] .menu .menu-item:not(:has(a)):hover {
131
+ background: var(--state-danger-subtle);
132
+ border-radius: var(--space);
133
+ }
134
+
135
+ .j-menu .menu .menu-item:not(:has(a)):hover::after,
136
+ .j-menu[data-menu-type='mobile'] .menu .menu-item:not(:has(a)):hover::after {
137
+ content: 'Error';
138
+ position: absolute;
139
+ top: 0;
140
+ right: 0;
141
+ background: var(--state-danger);
142
+ color: var(--state-danger-fg);
143
+ font-size: var(--font-size-sm);
144
+ padding: 0 var(--space);
145
+ border-radius: var(--space);
146
+ }
147
+
148
+ /* list card menu */
149
+ .j-menu .menu-item.menu-item-has-children.list-card-menu:hover > .sub-menu {
150
+ width: auto;
151
+ display: grid;
152
+ grid-template-columns: repeat(2, 1fr);
153
+ }
154
+
155
+ .j-menu .menu-item.list-card-menu > .sub-menu > .menu-item > a {
156
+ overflow: hidden;
157
+ display: -webkit-box;
158
+ -webkit-box-orient: vertical;
159
+ -webkit-line-clamp: 1;
160
+ line-clamp: 1;
161
+ }
162
+
163
+ .j-menu .menu-item.menu-item-has-children.list-card-menu:hover > .sub-menu {
164
+ min-width: 240px;
165
+ max-width: 360px;
166
+ transform: translateX(-20%) translateY(1px);
167
+ }
168
+
169
+ .j-menu .menu-item.list-card-menu > .sub-menu > .menu-item > a {
170
+ padding: calc(var(--space) * 1.25) calc(var(--space) * 2.5);
171
+ line-height: 1.75;
172
+ }
173
+
174
+ /* advanced card menu */
175
+ .j-menu
176
+ .menu-item.menu-item-has-children.advanced-card-menu:hover
177
+ > .sub-menu {
178
+ display: grid;
179
+ grid-template-columns: repeat(6, 1fr);
180
+ grid-template-rows: repeat(6, 1fr);
181
+ grid-column-gap: var(--space);
182
+ grid-row-gap: var(--space);
183
+ min-width: 400px;
184
+ max-width: 600px;
185
+ padding-right: var(--s2);
186
+ transform: translateX(-33.33%) translateY(1px);
187
+ }
188
+
189
+ .j-menu
190
+ .menu-item.menu-item-has-children.advanced-card-menu:hover
191
+ > .sub-menu
192
+ img {
193
+ margin: 0;
194
+ }
195
+
196
+ .j-menu
197
+ .menu-item.menu-item-has-children.advanced-card-menu:hover
198
+ > .sub-menu
199
+ > .menu-item:nth-child(1) {
200
+ grid-area: 1 / 1 / 2 / 3;
201
+ }
202
+
203
+ .j-menu
204
+ .menu-item.menu-item-has-children.advanced-card-menu:hover
205
+ > .sub-menu
206
+ > .menu-item:nth-child(2) {
207
+ grid-area: 1 / 3 / 4 / 5;
208
+ }
209
+
210
+ .j-menu
211
+ .menu-item.menu-item-has-children.advanced-card-menu:hover
212
+ > .sub-menu
213
+ > .menu-item:nth-child(3) {
214
+ grid-area: 1 / 5 / 4 / 7;
215
+ }
216
+
217
+ .j-menu
218
+ .menu-item.menu-item-has-children.advanced-card-menu:hover
219
+ > .sub-menu
220
+ > .menu-item:nth-child(4) {
221
+ grid-area: 2 / 1 / 3 / 3;
222
+ }
223
+
224
+ .j-menu
225
+ .menu-item.menu-item-has-children.advanced-card-menu:hover
226
+ > .sub-menu
227
+ > .menu-item:nth-child(5) {
228
+ grid-area: 3 / 1 / 4 / 3;
229
+ }
230
+
231
+ .j-menu
232
+ .menu-item.menu-item-has-children.advanced-card-menu:hover
233
+ > .sub-menu
234
+ > .menu-item:nth-child(6) {
235
+ grid-area: 4 / 1 / 5 / 3;
236
+ }
237
+
238
+ .j-menu
239
+ .menu-item.menu-item-has-children.advanced-card-menu:hover
240
+ > .sub-menu
241
+ > .menu-item:nth-child(7) {
242
+ grid-area: 4 / 3 / 7 / 5;
243
+ }
244
+
245
+ .j-menu
246
+ .menu-item.menu-item-has-children.advanced-card-menu:hover
247
+ > .sub-menu
248
+ > .menu-item:nth-child(8) {
249
+ grid-area: 4 / 5 / 7 / 7;
250
+ }
251
+
252
+ .j-menu
253
+ .menu-item.menu-item-has-children.advanced-card-menu:hover
254
+ > .sub-menu
255
+ > .menu-item:nth-child(9) {
256
+ grid-area: 5 / 1 / 6 / 3;
257
+ }
258
+
259
+ .j-menu
260
+ .menu-item.menu-item-has-children.advanced-card-menu:hover
261
+ > .sub-menu
262
+ > .menu-item:nth-child(10) {
263
+ grid-area: 6 / 1 / 7 / 3;
264
+ }
265
+
266
+ .j-menu
267
+ .menu-item.menu-item-has-children.advanced-card-menu:hover
268
+ > .sub-menu
269
+ > .menu-item:nth-child(2)
270
+ a,
271
+ .j-menu
272
+ .menu-item.menu-item-has-children.advanced-card-menu:hover
273
+ > .sub-menu
274
+ > .menu-item:nth-child(3)
275
+ a,
276
+ .j-menu
277
+ .menu-item.menu-item-has-children.advanced-card-menu:hover
278
+ > .sub-menu
279
+ > .menu-item:nth-child(7)
280
+ a,
281
+ .j-menu
282
+ .menu-item.menu-item-has-children.advanced-card-menu:hover
283
+ > .sub-menu
284
+ > .menu-item:nth-child(8)
285
+ a {
286
+ padding: 0;
287
+ }
288
+
289
+ .j-menu
290
+ .menu-item.menu-item-has-children.advanced-card-menu:hover
291
+ > .sub-menu
292
+ > .menu-item:nth-child(2)
293
+ a:hover,
294
+ .j-menu
295
+ .menu-item.menu-item-has-children.advanced-card-menu:hover
296
+ > .sub-menu
297
+ > .menu-item:nth-child(3)
298
+ a:hover,
299
+ .j-menu
300
+ .menu-item.menu-item-has-children.advanced-card-menu:hover
301
+ > .sub-menu
302
+ > .menu-item:nth-child(7)
303
+ a:hover,
304
+ .j-menu
305
+ .menu-item.menu-item-has-children.advanced-card-menu:hover
306
+ > .sub-menu
307
+ > .menu-item:nth-child(8)
308
+ a:hover {
309
+ background-color: transparent;
310
+ outline-color: transparent;
311
+ }
312
+
313
+ /**
314
+ * 侧边栏菜单
315
+ */
38
316
  .j-menu[data-menu-type='mobile'] {
39
317
  --menu-font-weight: var(--font-medium);
40
318
  --menu-item-line-height: var(--line-height-paragraph);
41
319
  --menu-item-height: var(--el-height-xl);
42
320
  --menu-item-border-radius: none;
43
- --menu-item-hover-bg: inherit;
44
- --menu-item-hover-fg: inherit;
45
321
  --menu-item-active-bg: var(--ui-bg-subtle);
46
322
  --sub-menu-border-width: 0;
47
323
  --sub-menu-item-hover-outline-width: 0;
48
324
  --menu-link-gap: var(--s2);
49
325
  --sub-menu-box-shadow: none;
326
+
327
+ overflow-x: hidden;
328
+ overflow-y: auto;
329
+ scrollbar-width: thin;
330
+ scrollbar-color: var(--ui-border) transparent;
331
+ height: 100%;
332
+ background: var(--ui-bg);
333
+ }
334
+
335
+ .j-menu[data-menu-type='mobile'] .menu {
336
+ flex-direction: column;
337
+ align-items: flex-start;
338
+ position: relative;
339
+ }
340
+
341
+ .j-menu[data-menu-type='mobile'] .menu .menu-item {
342
+ width: 100%;
50
343
  }
51
344
 
345
+ .j-menu[data-menu-type='mobile'] .menu .menu-item:not(:has(a)) {
346
+ padding: var(--menu-item-padding);
347
+ }
348
+
349
+ .j-menu[data-menu-type='mobile'] .menu .menu-item a {
350
+ justify-content: flex-start;
351
+ flex-wrap: wrap;
352
+ white-space: normal;
353
+ position: relative;
354
+
355
+ gap: var(--s2);
356
+ min-height: var(--el-height-2xl);
357
+ line-height: var(--line-height-paragraph);
358
+ }
359
+
360
+ .j-menu[data-menu-type='mobile']
361
+ .menu
362
+ .menu-item.menu-item-has-children
363
+ > a::after {
364
+ vertical-align: middle;
365
+ position: absolute;
366
+ right: 1rem;
367
+ margin: 0;
368
+ border-left: 5px solid currentColor;
369
+ border-bottom: 4px solid transparent;
370
+ border-top: 4px solid transparent;
371
+ }
372
+
373
+ .j-menu[data-menu-type='mobile']
374
+ .menu
375
+ .menu-item.menu-item-has-children:hover
376
+ > a::after {
377
+ transform: none;
378
+ }
379
+
380
+ .j-menu[data-menu-type='mobile'] .menu .menu-item .sub-menu {
381
+ display: block;
382
+ top: 0;
383
+ left: 0;
384
+ width: 100%;
385
+ visibility: hidden;
386
+ opacity: 0;
387
+ transition: opacity 0.3s ease-in-out;
388
+ max-width: 100%;
389
+ background: var(--ui-bg);
390
+ padding-block: 0;
391
+ }
392
+
393
+ .j-menu[data-menu-type='mobile'] .menu .sub-menu .menu-item:hover a {
394
+ background: inherit;
395
+ color: inherit;
396
+ }
397
+
398
+ .j-menu[data-menu-type='mobile'] .menu .menu-item:active {
399
+ background: var(--menu-item-active-bg);
400
+ }
401
+
402
+ .j-menu[data-menu-type='mobile']
403
+ .menu
404
+ .menu-item.menu-item-has-children.is-active
405
+ > .sub-menu {
406
+ visibility: visible;
407
+ opacity: 1;
408
+ z-index: var(--z-submenu);
409
+ height: 100%;
410
+ }
411
+
412
+ /**
413
+ * 底部菜单
414
+ */
52
415
  .j-menu[data-menu-type='bottom'] {
53
- --menu-bg: linear-gradient(
54
- to bottom,
55
- var(--ui-bg-subtle) 20%,
56
- var(--ui-border) 40%,
57
- var(--ui-outline) 50%,
58
- var(--ui-border) 60%,
59
- var(--ui-bg-subtle) 80%
60
- );
61
- --menu-item-bg: var(--ui-bg-subtle);
62
- --menu-item-height: var(--el-height-2xl);
63
416
  --menu-item-border-radius: none;
64
- --menu-item-hover-bg: inherit;
65
- --menu-item-hover-fg: inherit;
66
-
67
417
  --sub-menu-bg: linear-gradient(
68
418
  to right,
69
419
  var(--ui-surface-subtle) 20%,
@@ -72,6 +422,208 @@
72
422
  var(--ui-border) 60%,
73
423
  var(--ui-surface-subtle) 80%
74
424
  );
75
- --sub-menu-border-radius: var(--radius-md);
425
+
426
+ position: fixed;
427
+ bottom: 0;
428
+ left: 0;
429
+ overflow: visible;
430
+ background: var(--ui-bg);
431
+ z-index: var(--z-submenu);
432
+ }
433
+
434
+ .j-menu[data-menu-type='bottom'] .menu {
435
+ position: relative;
436
+ justify-content: space-between;
437
+ gap: 1px;
438
+ border-top: 1px solid var(--ui-border-subtle);
439
+ background: linear-gradient(
440
+ to bottom,
441
+ var(--ui-bg-subtle) 20%,
442
+ var(--ui-border) 40%,
443
+ var(--ui-outline) 50%,
444
+ var(--ui-border) 60%,
445
+ var(--ui-bg-subtle) 80%
446
+ );
447
+ }
448
+
449
+ .j-menu[data-menu-type='bottom'] .menu .menu-item {
450
+ flex-shrink: unset;
451
+ width: 100%;
452
+ display: flex;
453
+ justify-content: center;
454
+ align-items: center;
455
+ background: var(--ui-bg-subtle);
456
+ }
457
+
458
+ .j-menu[data-menu-type='bottom'] .menu .menu-item a {
459
+ width: 100%;
460
+ height: var(--el-height-2xl);
461
+ color: var(--ui-fg);
462
+ }
463
+
464
+ .j-menu[data-menu-type='bottom']
465
+ > .menu
466
+ > .menu-item.menu-item-has-children
467
+ > a::after {
468
+ content: '☰';
469
+ font-size: var(--font-size-sm);
470
+ margin-left: unset;
471
+ border: unset;
472
+ width: unset;
473
+ height: unset;
474
+ transition: unset;
475
+ }
476
+
477
+ .j-menu[data-menu-type='bottom']
478
+ > .menu
479
+ .menu-item.menu-item-has-children:hover
480
+ > a::after {
481
+ transform: none;
482
+ }
483
+
484
+ .j-menu[data-menu-type='bottom'] .menu .menu-item.current-menu-parent > a,
485
+ .j-menu[data-menu-type='bottom'] .menu .menu-item.current-menu-item > a,
486
+ .j-menu[data-menu-type='bottom']
487
+ .menu
488
+ .menu-item.menu-item-has-children.is-active
489
+ > a {
490
+ color: var(--tone-solid);
491
+ }
492
+
493
+ .j-menu[data-menu-type='bottom']
494
+ .menu
495
+ .menu-item.menu-item-has-children
496
+ > .sub-menu {
497
+ opacity: 0;
498
+ visibility: hidden;
499
+ display: flex;
500
+ flex-direction: column;
501
+ align-items: center;
502
+ justify-content: center;
503
+ gap: 1px;
504
+ padding-block: 0;
505
+ min-width: var(--columns-6xs);
506
+ max-width: var(--columns-2xs);
507
+ left: 50%;
508
+ transform: translateX(-50%) translateY(100%);
509
+ bottom: calc(100% + var(--space));
510
+ transition:
511
+ transform 0.3s ease-in-out,
512
+ visibility 0.3s ease-in-out,
513
+ opacity 0.3s ease-in-out;
514
+ z-index: -1;
515
+ }
516
+
517
+ .j-menu[data-menu-type='bottom']
518
+ .menu
519
+ .menu-item.menu-item-has-children.is-active
520
+ > .sub-menu {
521
+ opacity: 1;
522
+ visibility: visible;
523
+ transform: translateX(-50%) translateY(0%);
524
+ }
525
+
526
+ .j-menu[data-menu-type='bottom']
527
+ .menu
528
+ .menu-item.menu-item-has-children
529
+ > .sub-menu
530
+ > .menu-item {
531
+ white-space: normal;
532
+ border: 1px solid transparent;
533
+ }
534
+
535
+ .j-menu[data-menu-type='bottom']
536
+ .menu
537
+ .menu-item.menu-item-has-children
538
+ > .sub-menu
539
+ > .menu-item
540
+ > a {
541
+ min-height: var(--el-height-2xl);
542
+ justify-content: center;
543
+ }
544
+
545
+ .j-menu[data-menu-type='bottom']
546
+ .menu
547
+ .menu-item.menu-item-has-children
548
+ > .sub-menu
549
+ > .menu-item:first-of-type {
550
+ border-top-left-radius: var(--radius-md);
551
+ border-top-right-radius: var(--radius-md);
552
+ }
553
+
554
+ .j-menu[data-menu-type='bottom']
555
+ .menu
556
+ .menu-item.menu-item-has-children
557
+ > .sub-menu
558
+ > .menu-item:last-of-type {
559
+ border-bottom-left-radius: var(--radius-md);
560
+ border-bottom-right-radius: var(--radius-md);
561
+ }
562
+
563
+ .j-menu[data-menu-type='bottom'] .menu .menu-item:not(:has(a)):hover {
564
+ background: var(--ui-bg-subtle);
565
+ }
566
+
567
+ .j-menu[data-menu-type='bottom'] .menu .menu-item:not(:has(a)):hover:after {
568
+ top: -0.5rem;
569
+ right: unset;
570
+ }
571
+
572
+ /*
573
+ * drop menu
574
+ */
575
+ .drop-menu .drop-container {
576
+ min-width: 100px;
577
+ max-width: 200px;
578
+ padding: var(--s2);
579
+ font-size: var(--font-size-md);
580
+ background-color: var(--ui-surface-subtle);
581
+ border-radius: var(--radius-sm);
582
+ }
583
+
584
+ .drop-menu ul,
585
+ .drop-menu ol,
586
+ .drop-menu ul li,
587
+ .drop-menu ol li {
588
+ list-style: none;
589
+ margin: 0;
590
+ padding: 0;
591
+ }
592
+
593
+ .drop-menu .menu-item a {
594
+ display: flex;
595
+ align-items: center;
596
+ gap: var(--s2);
597
+ width: 100%;
598
+ padding: var(--space) var(--s2);
599
+ text-decoration: none;
600
+ color: var(--ui-fg-muted);
601
+ -webkit-user-select: none;
602
+ -moz-user-select: none;
603
+ -ms-user-select: none;
604
+ user-select: none;
605
+ border-radius: var(--radius-sm);
606
+ transition: none;
607
+ }
608
+
609
+ .drop-menu .menu-item a .menu-text {
610
+ flex-grow: 1;
611
+ }
612
+
613
+ .drop-menu .menu-item a:hover {
614
+ background-color: var(--tone-solid);
615
+ color: var(--tone-fg);
616
+ }
617
+
618
+ .drop-menu .el-icon,
619
+ .drop-menu svg {
620
+ width: var(--font-size-lg);
621
+ height: var(--font-size-lg);
622
+ }
623
+
624
+ .drop-menu .menu-item.menu-heading {
625
+ padding: 2px var(--s2);
626
+ color: var(--ui-fg-soft);
627
+ font-size: var(--font-size-sm);
76
628
  }
77
629
  }