@cyberpunk-vue/theme-chalk 1.13.19 → 1.14.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.
@@ -9,7 +9,7 @@
9
9
  --cp-card-color: var(--cp-border);
10
10
  --cp-card-color-light: rgba(255, 255, 255, 0.1);
11
11
  --cp-card-bg: var(--cp-bg-elevated);
12
- --cp-card-shadow-color: rgba(0, 0, 0, 0.4);
12
+ --cp-card-shadow-color: color-mix(in srgb, var(--cp-card-color) 44%, transparent);
13
13
  --cp-card-clip-path: polygon(12px 0, 100% 0, 100% calc(100% - 12px), calc(100% - 12px) 100%, 0 100%, 0 12px);
14
14
 
15
15
  position: relative;
@@ -23,10 +23,11 @@
23
23
 
24
24
  // 🚀 核心修复 2:彻底移除错误的 flex 和 height 过渡!
25
25
  // 浏览器不支持 auto 高度的动画,强加过渡会导致渲染出错,修复“高度从 0 开始”的 Bug
26
- transition:
27
- color var(--cp-card-dimmed-duration, 0.3s) ease,
28
- filter var(--cp-card-dimmed-duration, 0.3s) ease,
29
- box-shadow var(--cp-card-dimmed-duration, 0.3s) ease;
26
+ transition:
27
+ transform 0.3s cubic-bezier(0.4, 0, 0.2, 1),
28
+ color var(--cp-card-dimmed-duration, 0.3s) ease,
29
+ filter var(--cp-card-dimmed-duration, 0.3s) ease,
30
+ box-shadow var(--cp-card-dimmed-duration, 0.3s) ease;
30
31
 
31
32
  @include e(container) {
32
33
  position: relative;
@@ -140,16 +141,16 @@
140
141
  }
141
142
  }
142
143
 
143
- @include m(outline) {
144
- > .cp-card__container {
145
- background: transparent;
146
- border-color: var(--cp-card-color);
147
-
148
- &:hover {
149
- border-color: var(--cp-card-color);
150
- box-shadow: 0 0 10px var(--cp-card-color-light);
151
- }
152
- }
144
+ @include m(outline) {
145
+ > .cp-card__container {
146
+ background: transparent;
147
+ border-color: var(--cp-card-color);
148
+
149
+ &:hover {
150
+ border-color: var(--cp-card-color);
151
+ box-shadow: none;
152
+ }
153
+ }
153
154
 
154
155
  &.cp-card--default {
155
156
  > .cp-card__container {
@@ -223,10 +224,12 @@
223
224
  }
224
225
  }
225
226
 
226
- @include m(shape-no-clip) {
227
- > .cp-card__container {
228
- clip-path: none;
229
- border-radius: 0;
227
+ @include m(shape-no-clip) {
228
+ border-radius: 0;
229
+
230
+ > .cp-card__container {
231
+ clip-path: none;
232
+ border-radius: 0;
230
233
  overflow: hidden;
231
234
  }
232
235
 
@@ -240,10 +243,12 @@
240
243
  }
241
244
  }
242
245
 
243
- @include m(shape-round) {
244
- > .cp-card__container {
245
- clip-path: none;
246
- border-radius: var(--cp-radius-lg);
246
+ @include m(shape-round) {
247
+ border-radius: var(--cp-radius-lg);
248
+
249
+ > .cp-card__container {
250
+ clip-path: none;
251
+ border-radius: var(--cp-radius-lg);
247
252
  overflow: hidden;
248
253
  }
249
254
 
@@ -257,76 +262,105 @@
257
262
  }
258
263
  }
259
264
 
260
- // ===== 阴影 =====
261
- @include m(shadow-always) {
262
- filter: drop-shadow(0 4px 12px var(--cp-card-shadow-color));
263
- }
264
-
265
- @include m(shadow-hover) {
266
- filter: drop-shadow(0 0 0 var(--cp-card-shadow-color));
267
- // 撤销清理错误的 flex 过渡
268
- transition: filter 0.3s ease;
269
-
270
- &:hover {
271
- filter: drop-shadow(0 4px 12px var(--cp-card-shadow-color));
272
- }
273
- }
274
-
275
- @include m(shadow-never) {
276
- filter: none;
277
- box-shadow: none;
278
- }
279
-
280
- &.cp-card--shape-no-clip,
281
- &.cp-card--shape-round {
282
- &.cp-card--shadow-always {
283
- filter: none;
284
- box-shadow: 0 4px 20px var(--cp-card-shadow-color);
285
- }
286
-
287
- &.cp-card--shadow-hover {
288
- filter: none;
289
- box-shadow: 0 0 0 -100px var(--cp-card-shadow-color);
290
- // 撤销清理错误的 flex 过渡
291
- transition: box-shadow 0.3s ease;
292
-
293
- &:hover {
294
- box-shadow: 0 4px 20px 0 var(--cp-card-shadow-color);
295
- }
296
- }
297
- }
298
-
299
- &.cp-card--semi {
300
- &.cp-card--shadow-always,
301
- &.cp-card--shadow-hover {
302
- filter: none !important;
303
- }
304
-
305
- &.cp-card--shadow-always::before,
306
- &.cp-card--shadow-hover::before {
307
- display: block;
308
- filter: drop-shadow(0 0 12px var(--cp-card-shadow-color));
309
- }
310
-
311
- &.cp-card--shadow-always::before {
312
- opacity: 1;
313
- }
314
-
315
- &.cp-card--shadow-hover::before {
316
- opacity: 0;
317
- }
318
- &.cp-card--shadow-hover:hover::before {
319
- opacity: 1;
320
- }
321
-
322
- &.cp-card--shadow-always > .cp-card__container,
323
- &.cp-card--shadow-hover > .cp-card__container,
324
- &.cp-card--shadow-hover:hover > .cp-card__container {
325
- box-shadow: none !important;
326
- }
327
- }
328
-
329
- // ===== 子元素 =====
265
+ // ===== 阴影 =====
266
+ @include m(shadow-always) {
267
+ filter: none;
268
+ box-shadow:
269
+ 0 8px 22px -8px var(--cp-card-shadow-color),
270
+ 0 0 18px -6px var(--cp-card-shadow-color);
271
+ }
272
+
273
+ @include m(shadow-hover) {
274
+ filter: none;
275
+ box-shadow: 0 0 0 -100px var(--cp-card-shadow-color);
276
+ transition:
277
+ transform 0.3s cubic-bezier(0.4, 0, 0.2, 1),
278
+ box-shadow 0.3s ease;
279
+
280
+ &:hover {
281
+ box-shadow:
282
+ 0 8px 22px -8px var(--cp-card-shadow-color),
283
+ 0 0 18px -6px var(--cp-card-shadow-color);
284
+ }
285
+ }
286
+
287
+ @include m(shadow-never) {
288
+ filter: none;
289
+ box-shadow: none;
290
+
291
+ &::before {
292
+ display: none;
293
+ opacity: 0;
294
+ filter: none;
295
+ }
296
+ }
297
+
298
+ &.cp-card--shape-clip {
299
+ &.cp-card--shadow-always {
300
+ filter: drop-shadow(0 4px 14px var(--cp-card-shadow-color));
301
+ box-shadow: none;
302
+
303
+ &::before {
304
+ display: none;
305
+ opacity: 0;
306
+ filter: none;
307
+ }
308
+ }
309
+
310
+ &.cp-card--shadow-hover {
311
+ filter: drop-shadow(0 0 0 var(--cp-card-shadow-color));
312
+ box-shadow: none;
313
+ transition:
314
+ transform 0.3s cubic-bezier(0.4, 0, 0.2, 1),
315
+ filter 0.3s ease;
316
+
317
+ &::before {
318
+ display: none;
319
+ opacity: 0;
320
+ filter: none;
321
+ }
322
+
323
+ &:hover {
324
+ filter: drop-shadow(0 4px 14px var(--cp-card-shadow-color));
325
+ box-shadow: none;
326
+ }
327
+ }
328
+ }
329
+
330
+ &.cp-card--outline {
331
+ &.cp-card--shadow-always,
332
+ &.cp-card--shadow-hover,
333
+ &.cp-card--shadow-hover:hover {
334
+ filter: none;
335
+ box-shadow: none;
336
+
337
+ &::before {
338
+ display: none;
339
+ opacity: 0;
340
+ filter: none;
341
+ }
342
+ }
343
+
344
+ &.cp-card--shadow-always > .cp-card__container,
345
+ &.cp-card--shadow-hover > .cp-card__container,
346
+ &.cp-card--shadow-hover:hover > .cp-card__container {
347
+ box-shadow: none;
348
+ }
349
+ }
350
+
351
+ &.cp-card--ghost {
352
+ &.cp-card--shadow-always,
353
+ &.cp-card--shadow-hover,
354
+ &.cp-card--shadow-hover:hover {
355
+ &::before {
356
+ display: none;
357
+ opacity: 0;
358
+ filter: none;
359
+ }
360
+ }
361
+ }
362
+
363
+ // ===== 子元素 =====
330
364
  @include e(cover) {
331
365
  width: 100%;
332
366
  overflow: hidden;
@@ -510,14 +544,15 @@
510
544
  }
511
545
  }
512
546
 
513
- @include when(hover-scale) {
514
- // 撤销清理错误的 flex 过渡
515
- transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.3s ease;
516
-
517
- &:hover {
518
- transform: scale(1.02);
519
- box-shadow: 0 8px 30px rgba(0, 0, 0, 0.3);
520
- }
547
+ @include when(hover-scale) {
548
+ transition:
549
+ transform 0.3s cubic-bezier(0.4, 0, 0.2, 1),
550
+ filter 0.3s ease,
551
+ box-shadow 0.3s ease;
552
+
553
+ &:hover {
554
+ transform: scale(1.02);
555
+ }
521
556
 
522
557
  &:active {
523
558
  transform: scale(0.99);
@@ -124,19 +124,78 @@
124
124
  }
125
125
 
126
126
  // ===== 自定义颜色 =====
127
- @include when(custom-color) {
128
- &.is-focused .cp-input-number__inner {
129
- border-color: var(--cp-input-number-custom-color);
130
- box-shadow: 0 0 10px var(--cp-input-number-custom-color-light), inset 0 0 5px var(--cp-input-number-custom-color-light);
127
+ @include when(custom-color) {
128
+ &.is-focused .cp-input-number__inner {
129
+ border-color: var(--cp-input-number-custom-color);
130
+ box-shadow: 0 0 10px var(--cp-input-number-custom-color-light), inset 0 0 5px var(--cp-input-number-custom-color-light);
131
131
  }
132
132
 
133
133
  .cp-input-number__increase:hover:not(.is-disabled),
134
134
  .cp-input-number__decrease:hover:not(.is-disabled) {
135
- color: var(--cp-input-number-custom-color);
136
- }
137
- }
138
-
139
- // ===== 内部元素 =====
135
+ color: var(--cp-input-number-custom-color);
136
+ }
137
+ }
138
+
139
+ // ===== 形状模式 =====
140
+ @include m(shape-no-clip) {
141
+ .cp-input-number__inner,
142
+ .cp-input-number__increase,
143
+ .cp-input-number__decrease {
144
+ clip-path: none;
145
+ border-radius: 0;
146
+ }
147
+
148
+ .cp-input-number__controls {
149
+ overflow: hidden;
150
+ border-radius: 0;
151
+ }
152
+ }
153
+
154
+ @include m(shape-round) {
155
+ .cp-input-number__inner,
156
+ .cp-input-number__increase,
157
+ .cp-input-number__decrease {
158
+ clip-path: none;
159
+ }
160
+
161
+ &.cp-input-number--controls-both {
162
+ .cp-input-number__decrease {
163
+ border-radius: var(--cp-radius-lg) 0 0 var(--cp-radius-lg);
164
+ }
165
+
166
+ .cp-input-number__inner {
167
+ border-radius: 0;
168
+ }
169
+
170
+ .cp-input-number__increase {
171
+ border-radius: 0 var(--cp-radius-lg) var(--cp-radius-lg) 0;
172
+ }
173
+ }
174
+
175
+ &.cp-input-number--controls-right {
176
+ .cp-input-number__inner {
177
+ border-radius: var(--cp-radius-lg);
178
+ }
179
+
180
+ .cp-input-number__controls {
181
+ overflow: hidden;
182
+ border-radius: 0 var(--cp-radius-lg) var(--cp-radius-lg) 0;
183
+ }
184
+
185
+ .cp-input-number__increase,
186
+ .cp-input-number__decrease {
187
+ border-radius: 0;
188
+ }
189
+ }
190
+
191
+ &.is-without-controls {
192
+ .cp-input-number__inner {
193
+ border-radius: var(--cp-radius-lg);
194
+ }
195
+ }
196
+ }
197
+
198
+ // ===== 内部元素 =====
140
199
  @include e(inner) {
141
200
  flex: 1;
142
201
  min-width: 0;
@@ -210,9 +210,17 @@
210
210
  }
211
211
  }
212
212
 
213
- // ===== 状态颜色 =====
214
- @include when(success) {
215
- --cp-progress-color: var(--cp-color-success);
213
+ // ===== 状态颜色 =====
214
+ @include when(primary) {
215
+ --cp-progress-color: var(--cp-color-primary);
216
+
217
+ .cp-progress__text {
218
+ color: var(--cp-color-primary);
219
+ }
220
+ }
221
+
222
+ @include when(success) {
223
+ --cp-progress-color: var(--cp-color-success);
216
224
 
217
225
  .cp-progress__text {
218
226
  color: var(--cp-color-success);
@@ -227,13 +235,21 @@
227
235
  }
228
236
  }
229
237
 
230
- @include when(error) {
231
- --cp-progress-color: var(--cp-color-error);
232
-
233
- .cp-progress__text {
234
- color: var(--cp-color-error);
235
- }
236
- }
238
+ @include when(error) {
239
+ --cp-progress-color: var(--cp-color-error);
240
+
241
+ .cp-progress__text {
242
+ color: var(--cp-color-error);
243
+ }
244
+ }
245
+
246
+ @include when(info) {
247
+ --cp-progress-color: var(--cp-color-info);
248
+
249
+ .cp-progress__text {
250
+ color: var(--cp-color-info);
251
+ }
252
+ }
237
253
 
238
254
  // ===== 条纹效果 =====
239
255
  @include when(striped) {
@@ -304,14 +320,24 @@
304
320
  overflow: visible; // 解决发光裁剪问题
305
321
  }
306
322
 
307
- @include e(track) {
308
- stroke: var(--cp-border);
309
- opacity: 0.35; // 略微提高轨道可见度
310
- }
311
-
312
- @include e(inner-track) {
313
- stroke: var(--cp-text-disabled);
314
- // 静止,无动画,利落感
323
+ @include e(track) {
324
+ stroke: var(--cp-border);
325
+ opacity: 0.35; // 略微提高轨道可见度
326
+ }
327
+
328
+ @include e(track-path) {
329
+ fill: var(--cp-border);
330
+ stroke: none;
331
+ }
332
+
333
+ @include e(track-line) {
334
+ fill: none;
335
+ stroke: var(--cp-border);
336
+ }
337
+
338
+ @include e(inner-track) {
339
+ stroke: var(--cp-text-disabled);
340
+ // 静止,无动画,利落感
315
341
  }
316
342
 
317
343
  @include e(path) {
@@ -180,14 +180,50 @@ $radio-sizes: (
180
180
  }
181
181
 
182
182
  // ===== 自定义尺寸 =====
183
- @include when(custom-size) {
184
- .cp-radio__indicator {
185
- clip-path: #{octagon-clip(28%)};
186
- }
187
- }
188
-
189
- // ===== 选中状态 =====
190
- @include when(checked) {
183
+ @include when(custom-size) {
184
+ .cp-radio__indicator {
185
+ clip-path: #{octagon-clip(28%)};
186
+ }
187
+ }
188
+
189
+ // ===== 形状模式 =====
190
+ @include m(shape-no-clip) {
191
+ .cp-radio__indicator {
192
+ clip-path: none;
193
+ border-radius: 0;
194
+
195
+ &::before,
196
+ &::after {
197
+ clip-path: none;
198
+ }
199
+ }
200
+
201
+ .cp-radio__dot {
202
+ clip-path: none;
203
+ border-radius: 0;
204
+ }
205
+ }
206
+
207
+ @include m(shape-round) {
208
+ .cp-radio__indicator {
209
+ clip-path: none;
210
+ border-radius: 50%;
211
+
212
+ &::before,
213
+ &::after {
214
+ clip-path: none;
215
+ border-radius: 50%;
216
+ }
217
+ }
218
+
219
+ .cp-radio__dot {
220
+ clip-path: none;
221
+ border-radius: 50%;
222
+ }
223
+ }
224
+
225
+ // ===== 选中状态 =====
226
+ @include when(checked) {
191
227
  .cp-radio__indicator {
192
228
  background: var(--cp-radio-active-color);
193
229
  border-color: var(--cp-radio-active-color);
@@ -220,10 +256,10 @@ $radio-sizes: (
220
256
  }
221
257
 
222
258
  // ===== 边框模式 =====
223
- @include when(border) {
224
- padding: 8px 16px;
225
- border: 1px solid var(--cp-border);
226
- background: var(--cp-surface);
259
+ @include when(border) {
260
+ padding: 8px 16px;
261
+ border: 1px solid var(--cp-border);
262
+ background: var(--cp-surface);
227
263
  clip-path: polygon(
228
264
  10px 0,
229
265
  100% 0,
@@ -232,10 +268,28 @@ $radio-sizes: (
232
268
  0 100%,
233
269
  0 10px
234
270
  );
235
- transition: all 0.25s ease;
236
-
237
- // 切角装饰线
238
- &::before {
271
+ transition: all 0.25s ease;
272
+
273
+ &.cp-radio--shape-no-clip {
274
+ clip-path: none;
275
+ border-radius: 0;
276
+
277
+ &::before {
278
+ display: none;
279
+ }
280
+ }
281
+
282
+ &.cp-radio--shape-round {
283
+ clip-path: none;
284
+ border-radius: var(--cp-radius-lg);
285
+
286
+ &::before {
287
+ display: none;
288
+ }
289
+ }
290
+
291
+ // 切角装饰线
292
+ &::before {
239
293
  content: '';
240
294
  position: absolute;
241
295
  top: 0;
@@ -363,6 +363,9 @@
363
363
  }
364
364
 
365
365
  @include e(popper-panel) {
366
+ display: flex;
367
+ flex-direction: column;
368
+ box-sizing: border-box;
366
369
  max-height: inherit;
367
370
  background: var(--cp-bg-elevated);
368
371
  border: 1px solid var(--cp-border);
@@ -371,7 +374,7 @@
371
374
  0 0 1px var(--cp-color-primary),
372
375
  inset 0 0 20px color-mix(in srgb, var(--cp-color-primary) 3%, transparent);
373
376
  backdrop-filter: blur(8px);
374
- overflow: visible;
377
+ overflow: hidden;
375
378
 
376
379
  // 切角样式
377
380
  clip-path: polygon(
@@ -437,6 +440,7 @@
437
440
 
438
441
  // ===== 过滤搜索 =====
439
442
  @include e(filter) {
443
+ flex: 0 0 auto;
440
444
  padding: var(--cp-spacing-sm);
441
445
  border-bottom: 1px solid var(--cp-border);
442
446
  }
@@ -463,11 +467,16 @@
463
467
 
464
468
  // ===== 选项列表 =====
465
469
  @include e(options) {
470
+ flex: 1 1 auto;
471
+ min-height: 0;
472
+ box-sizing: border-box;
466
473
  list-style: none;
467
474
  margin: 0;
468
475
  padding: var(--cp-spacing-xs) 0;
469
476
  overflow-y: auto;
470
- max-height: inherit;
477
+ max-height: none;
478
+ overscroll-behavior: contain;
479
+ -webkit-overflow-scrolling: touch;
471
480
 
472
481
  // scrollbar 跟随 primary 颜色变量
473
482
  scrollbar-width: thin;