vanilla-jui 1.7.35 → 1.7.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vanilla-jui",
3
- "version": "1.7.35",
3
+ "version": "1.7.37",
4
4
  "private": false,
5
5
  "description": "A lightweight, reactive, and fully customizable vanilla JS UI library.",
6
6
  "keywords": [
@@ -131,7 +131,7 @@ const DEFAULT_CLASS_NAMES: AccordionClassNames = {
131
131
  title: 'header-title',
132
132
  arrow: 'header-arrow j-btn is-ghost is-icon',
133
133
  panel: 'accordion-panel',
134
- content: 'panel-content',
134
+ content: 'panel-body',
135
135
  };
136
136
 
137
137
  const ACCORDION_ITEM_RULE = {
@@ -175,7 +175,7 @@ const TOC_PROPS_SCHEMA = {
175
175
  const ACTIVE_OFFSET_TOLERANCE = 1;
176
176
  const INDICATOR_TRANSITION_MAX_MS = 1200;
177
177
  const INDICATOR_TRANSITION_MIN_MS = 120;
178
- const INDICATOR_TRANSITION_TIMING = 'ease-in-out';
178
+ const INDICATOR_TRANSITION_TIMING = 'ease';
179
179
  const PROGRAMMATIC_SCROLL_TIMEOUT_MS = 2400;
180
180
  const SCROLL_REACHED_TOLERANCE = 2;
181
181
 
@@ -212,7 +212,7 @@
212
212
  opacity: 0;
213
213
  transform: translateY(12px);
214
214
 
215
- animation: reveal 0.62s ease forwards;
215
+ animation: reveal 0.6s ease forwards;
216
216
  }
217
217
 
218
218
  [data-reveal='2'] {
@@ -77,7 +77,7 @@
77
77
  border-right: 0;
78
78
  }
79
79
 
80
- .j-accordion .accordion-panel .panel-content {
80
+ .j-accordion .accordion-panel .panel-body {
81
81
  margin: 0;
82
82
  padding: 0 12px 8px;
83
83
 
@@ -85,9 +85,7 @@
85
85
  min-height: inherit;
86
86
  }
87
87
 
88
- .j-accordion.is-horizontal
89
- .accordion-panel[aria-hidden='false']
90
- .panel-content {
88
+ .j-accordion.is-horizontal .accordion-panel[aria-hidden='false'] .panel-body {
91
89
  display: flex;
92
90
  flex-direction: column;
93
91
  justify-content: center;
@@ -25,7 +25,7 @@
25
25
  touch-action: manipulation;
26
26
  transition-property: box-shadow, opacity, transform;
27
27
  transition-duration: 0.15s;
28
- transition-timing-function: var(--bezier);
28
+ transition-timing-function: ease;
29
29
  }
30
30
 
31
31
  .j-btn svg {
@@ -23,7 +23,7 @@
23
23
  line-height: 18px;
24
24
  text-align: start;
25
25
  cursor: pointer;
26
- transition: all 0.15s ease-in-out;
26
+ transition: all 0.2s ease;
27
27
  }
28
28
 
29
29
  .j-cap-field .cap-control[data-state='idle']:hover {
@@ -366,7 +366,7 @@
366
366
  height: 1rem;
367
367
  margin: 0;
368
368
  appearance: none;
369
- transition: all 0.05s ease-in-out;
369
+ transition: all 0.2s ease;
370
370
  }
371
371
 
372
372
  .j-editor:not(:has(.j-checkbox)) input[type='checkbox']:checked {
@@ -7,7 +7,7 @@
7
7
 
8
8
  .j-flow .flow-steps {
9
9
  display: flex;
10
- gap: 8px;
10
+ gap: 16px;
11
11
  list-style: none;
12
12
  margin: 0;
13
13
  padding: 0;
@@ -58,11 +58,9 @@
58
58
  }
59
59
 
60
60
  .j-flow .flow-footer {
61
- border-top: 1px solid var(--ui-border-subtle);
62
61
  display: flex;
63
- gap: 4px;
62
+ gap: 8px;
64
63
  justify-content: flex-end;
65
- padding-top: 8px;
66
64
  position: relative;
67
65
  }
68
66
  }
@@ -164,7 +164,7 @@
164
164
  top: 50%;
165
165
  left: 50%;
166
166
  transform: translate(-50%, -50%) scale(0);
167
- transition: transform 0.15s ease-in-out;
167
+ transition: transform 0.2s ease;
168
168
  }
169
169
 
170
170
  .j-radio label input[type='radio']:checked::before {
@@ -203,7 +203,7 @@
203
203
  user-select: none;
204
204
  transition-property: box-shadow, color, background-color;
205
205
  transition-duration: 0.2s;
206
- transition-timing-function: ease-in-out;
206
+ transition-timing-function: ease;
207
207
  }
208
208
 
209
209
  .j-radio.is-group label:not(:first-child) span.radio-text {
@@ -324,7 +324,7 @@
324
324
  inset: 0;
325
325
  border-radius: 50px;
326
326
  background-color: var(--ui-border);
327
- transition: all 0.2s var(--bezier);
327
+ transition: all 0.2s ease;
328
328
  }
329
329
 
330
330
  .j-switch .switch-slider:after {
@@ -332,7 +332,7 @@
332
332
  position: absolute;
333
333
  border-radius: 50%;
334
334
  background-color: #fff;
335
- transition: all 0.2s var(--bezier);
335
+ transition: all 0.2s ease;
336
336
  }
337
337
 
338
338
  .j-switch.is-sm .switch-slider:after {
@@ -685,11 +685,6 @@
685
685
  /*************************
686
686
  * .mobile
687
687
  *************************/
688
- .mobile input.j-input[type='file'] {
689
- --input-padding: 8px;
690
- }
691
-
692
- .mobile .j-input[type='file'],
693
688
  .mobile .j-textarea {
694
689
  width: 100%;
695
690
  }
@@ -55,7 +55,7 @@
55
55
 
56
56
  .j-menu .menu .menu-item:not(:has(a)):hover {
57
57
  background: var(--state-error-subtle);
58
- border-radius: 4px;
58
+ border-radius: var(--menu-radius);
59
59
  }
60
60
 
61
61
  .j-menu .menu .menu-item:not(:has(a)):hover::after {
@@ -73,7 +73,7 @@
73
73
  .j-menu .menu .menu-item a {
74
74
  gap: 8px;
75
75
  color: currentColor;
76
- padding: 0.5rem 0.75rem;
76
+ padding: 8px 12px;
77
77
  height: var(--menu-height);
78
78
  line-height: var(--menu-line-height);
79
79
  border-radius: var(--menu-radius);
@@ -100,10 +100,7 @@
100
100
  }
101
101
 
102
102
  .j-menu .menu .menu-item.menu-item-has-children > a::after {
103
- /* width: 0; */
104
- /* height: 0; */
105
- /* vertical-align: middle; */
106
- transition: transform 0.2s ease-in-out;
103
+ transition: transform 0.2s ease;
107
104
 
108
105
  content: '';
109
106
  border-left: 3px solid transparent;
@@ -120,26 +117,20 @@
120
117
  border-radius: var(--menu-radius);
121
118
  min-width: 120px;
122
119
  max-width: 240px;
120
+ backdrop-filter: blur(4px);
121
+ display: none;
122
+ position: absolute;
123
123
 
124
- background-color: var(--ui-bg-subtle);
124
+ background-color: var(--ui-bg);
125
125
 
126
126
  @supports (color: color-mix(in srgb, red 50%, blue)) {
127
- background-color: color-mix(
128
- in srgb,
129
- var(--ui-bg-subtle) 75%,
130
- transparent
131
- );
127
+ background-color: color-mix(in srgb, var(--ui-bg) 70%, transparent);
132
128
  }
133
-
134
- backdrop-filter: blur(4px);
135
-
136
- display: none;
137
- position: absolute;
138
129
  }
139
130
 
140
131
  .j-menu:not([data-menu-type='mobile']) .menu .menu-item .sub-menu {
141
132
  box-shadow: var(--shadow-sm);
142
- border: 1px solid var(--ui-border-subtle);
133
+ border: var(--border-soft);
143
134
  }
144
135
 
145
136
  .j-menu .menu .menu-item .sub-menu .menu-item a {
@@ -180,7 +171,7 @@
180
171
  > .sub-menu
181
172
  > .menu-item.current-menu-item
182
173
  a {
183
- background: var(--tone-soft);
174
+ background: var(--tone-subtle);
184
175
  color: var(--tone-text);
185
176
  }
186
177
 
@@ -292,7 +283,7 @@
292
283
  width: 100%;
293
284
  visibility: hidden;
294
285
  opacity: 0;
295
- transition: opacity 0.3s ease-in-out;
286
+ transition: opacity 0.2s ease;
296
287
  max-width: 100%;
297
288
  background: var(--ui-bg);
298
289
  padding: 0;
@@ -326,20 +317,32 @@
326
317
  * 底部菜单
327
318
  */
328
319
  .j-menu[data-menu-type='bottom'] {
329
- position: fixed;
330
- bottom: 0;
331
- left: 0;
320
+ --menu-radius: 99px;
332
321
  overflow: visible;
333
- background-color: var(--ui-bg);
334
322
  z-index: var(--z-submenu);
323
+ position: fixed;
324
+ bottom: 8px;
325
+ left: 50%;
326
+ transform: translateX(-50%);
327
+ min-width: 288px;
328
+ max-width: 93.75%;
335
329
  }
336
330
 
337
331
  .j-menu[data-menu-type='bottom'] .menu {
338
332
  position: relative;
339
333
  justify-content: space-between;
340
334
  gap: 1px;
341
- border-top: 1px solid var(--ui-border-subtle);
342
335
  padding: 4px;
336
+ border: var(--border-soft);
337
+ border-radius: var(--menu-radius);
338
+ box-shadow: var(--shadow-sm);
339
+ backdrop-filter: blur(4px);
340
+
341
+ background-color: var(--ui-bg);
342
+
343
+ @supports (color: color-mix(in srgb, red 50%, blue)) {
344
+ background-color: color-mix(in srgb, var(--ui-bg) 70%, transparent);
345
+ }
343
346
  }
344
347
 
345
348
  .j-menu[data-menu-type='bottom'] .menu .menu-item {
@@ -360,13 +363,7 @@
360
363
  > .menu
361
364
  > .menu-item.menu-item-has-children
362
365
  > a::after {
363
- content: '☰';
364
- font-size: var(--font-size-sm);
365
- border: none;
366
- /* margin-left: unset; */
367
- /* width: unset; */
368
- /* height: unset; */
369
- /* transition: unset; */
366
+ content: none;
370
367
  }
371
368
 
372
369
  .j-menu[data-menu-type='bottom']
@@ -383,6 +380,7 @@
383
380
  .menu-item.menu-item-has-children.is-active
384
381
  > a {
385
382
  color: var(--tone-solid);
383
+ background-color: var(--tone-subtle);
386
384
  }
387
385
 
388
386
  .j-menu[data-menu-type='bottom']
@@ -397,13 +395,15 @@
397
395
  justify-content: center;
398
396
  min-width: 10rem;
399
397
  max-width: 18rem;
398
+ border-radius: 16px;
399
+ background-color: var(--ui-bg);
400
400
  left: 50%;
401
401
  transform: translateX(-50%) translateY(100%);
402
- bottom: calc(100% + 4px);
402
+ bottom: calc(100% + 8px);
403
403
  transition:
404
- transform 0.3s ease-in-out,
405
- visibility 0.3s ease-in-out,
406
- opacity 0.3s ease-in-out;
404
+ transform 0.2s ease,
405
+ visibility 0.2s ease,
406
+ opacity 0.2s ease;
407
407
  z-index: -1;
408
408
  }
409
409
 
@@ -5,7 +5,7 @@
5
5
  border: var(--border);
6
6
  border-radius: var(--radius-md);
7
7
  box-shadow: var(--shadow-md);
8
- min-width: 300px;
8
+ min-width: 304px;
9
9
  max-width: 500px;
10
10
  max-height: 90lvh;
11
11
  max-height: 90dvh;
@@ -39,7 +39,7 @@
39
39
 
40
40
  .j-swiper .swiper-slide::before {
41
41
  color: var(--ui-fg-soft);
42
- font-size: var(--font-size-md);
42
+ font-size: var(--font-size-xl);
43
43
  background-color: var(--tone-wash);
44
44
  background-image: radial-gradient(
45
45
  circle,
@@ -49,7 +49,8 @@
49
49
  background-size: 20px 20px;
50
50
 
51
51
  position: absolute;
52
- content: 'loading';
52
+ content: 'LOADING';
53
+ font-family: Courier, monospace;
53
54
  top: 0;
54
55
  left: 0;
55
56
  width: 100%;
@@ -83,7 +84,7 @@
83
84
  font-size: var(--swiper-font-size);
84
85
  font-weight: 700;
85
86
  background: rgba(0, 0, 0, 0.35);
86
- border-radius: var(--radius-sm);
87
+ border-radius: inherit;
87
88
  line-height: var(--line-height-heading);
88
89
 
89
90
  display: block;
@@ -121,7 +122,7 @@
121
122
  cursor: pointer;
122
123
  border-radius: 999px;
123
124
  outline: none;
124
- transition: width 0.5s var(--bezier);
125
+ transition: width 0.2s ease;
125
126
  }
126
127
 
127
128
  .j-swiper .swiper-pagination-indicator:hover,
@@ -153,7 +154,7 @@
153
154
  justify-content: center;
154
155
  cursor: pointer;
155
156
  border-radius: 999px;
156
- transition: opacity 0.3s ease-in-out;
157
+ transition: opacity 0.2s ease;
157
158
  }
158
159
 
159
160
  .j-swiper:hover .swiper-navigation {
@@ -58,20 +58,20 @@
58
58
  margin: 0;
59
59
  }
60
60
 
61
- .j-tip .tip-content {
61
+ .j-tip .tip-body {
62
62
  grid-column-start: 2;
63
63
  color: var(--tone-body);
64
64
  }
65
65
 
66
- .j-tip .tip-content p {
66
+ .j-tip .tip-body p {
67
67
  margin: 6px 0;
68
68
  }
69
69
 
70
- .j-tip .tip-content > *:first-child {
70
+ .j-tip .tip-body > *:first-child {
71
71
  margin-top: 0;
72
72
  }
73
73
 
74
- .j-tip .tip-content > *:last-child {
74
+ .j-tip .tip-body > *:last-child {
75
75
  margin-bottom: 0;
76
76
  }
77
77
 
@@ -1,9 +1,8 @@
1
1
  @layer components {
2
2
  .j-tree {
3
3
  padding: 14px;
4
- border: 1px solid var(--ui-border-subtle);
4
+ border: var(--border-subtle);
5
5
  border-radius: var(--radius-md);
6
- background: var(--ui-surface);
7
6
  color: var(--tone-heading);
8
7
  font-size: var(--font-size-sm);
9
8
  line-height: 1.45;
@@ -45,12 +45,12 @@
45
45
  --opacity-disabled: 0.5;
46
46
 
47
47
  /* --- Animation --- */
48
- --speed: 0.2s;
49
-
50
48
  --bezier: cubic-bezier(0.4, 0, 0.2, 1);
51
49
 
52
50
  /* border */
53
51
  --border: 1px solid var(--ui-border);
52
+ --border-subtle: 1px solid var(--ui-border-subtle);
53
+ --border-soft: 1px solid var(--ui-border-soft);
54
54
  }
55
55
 
56
56
  /* ============================================