@huyooo/file-explorer-frontend-vue 0.4.12 → 0.4.15

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": "@huyooo/file-explorer-frontend-vue",
3
- "version": "0.4.12",
3
+ "version": "0.4.15",
4
4
  "description": "File Explorer Frontend - Vue components for file management",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -81,30 +81,30 @@ const handleClick = (item: BreadcrumbItem, index: number) => {
81
81
  border: none;
82
82
  background: transparent;
83
83
  cursor: pointer;
84
- color: rgb(75, 85, 99);
84
+ color: var(--huyooo-text-muted);
85
85
  overflow: hidden;
86
86
  text-overflow: ellipsis;
87
87
  white-space: nowrap;
88
88
  }
89
89
 
90
90
  .file-breadcrumb-link:hover {
91
- background: rgba(229, 231, 233, 0.6);
92
- color: rgb(17, 24, 39);
91
+ background: var(--huyooo-muted-hover);
92
+ color: var(--huyooo-text);
93
93
  }
94
94
 
95
95
  .file-breadcrumb-link--current {
96
96
  font-weight: 600;
97
- color: rgb(17, 24, 39);
98
- background: rgba(229, 231, 233, 0.5);
97
+ color: var(--huyooo-text);
98
+ background: var(--huyooo-muted);
99
99
  cursor: default;
100
100
  }
101
101
 
102
102
  .file-breadcrumb-link--current:hover {
103
- background: rgba(229, 231, 233, 0.5);
103
+ background: var(--huyooo-muted);
104
104
  }
105
105
 
106
106
  .file-breadcrumb-separator {
107
- color: rgb(156, 163, 175);
107
+ color: var(--huyooo-text-disabled);
108
108
  margin: 0 0.25rem;
109
109
  flex-shrink: 0;
110
110
  }
@@ -214,7 +214,7 @@ const handleConfirm = () => {
214
214
  .compress-dialog-overlay {
215
215
  position: fixed;
216
216
  inset: 0;
217
- background: rgba(0, 0, 0, 0.5);
217
+ background: var(--huyooo-overlay);
218
218
  display: flex;
219
219
  align-items: center;
220
220
  justify-content: center;
@@ -222,9 +222,9 @@ const handleConfirm = () => {
222
222
  }
223
223
 
224
224
  .compress-dialog {
225
- background: white;
225
+ background: var(--huyooo-panel-bg);
226
226
  border-radius: 12px;
227
- box-shadow: 0 20px 40px rgba(0, 0, 0, 0.2);
227
+ box-shadow: var(--huyooo-shadow-lg);
228
228
  width: 420px;
229
229
  max-width: 90vw;
230
230
  max-height: 90vh;
@@ -238,7 +238,7 @@ const handleConfirm = () => {
238
238
  align-items: center;
239
239
  justify-content: space-between;
240
240
  padding: 16px 20px;
241
- border-bottom: 1px solid rgb(229, 231, 233);
241
+ border-bottom: 1px solid var(--huyooo-border);
242
242
  }
243
243
 
244
244
  .compress-dialog-title {
@@ -247,7 +247,7 @@ const handleConfirm = () => {
247
247
  gap: 8px;
248
248
  font-weight: 600;
249
249
  font-size: 16px;
250
- color: rgb(17, 24, 39);
250
+ color: var(--huyooo-text);
251
251
  }
252
252
 
253
253
  .compress-dialog-close {
@@ -255,7 +255,7 @@ const handleConfirm = () => {
255
255
  border: none;
256
256
  padding: 4px;
257
257
  cursor: pointer;
258
- color: rgb(107, 114, 128);
258
+ color: var(--huyooo-text-muted);
259
259
  border-radius: 4px;
260
260
  display: flex;
261
261
  align-items: center;
@@ -263,8 +263,8 @@ const handleConfirm = () => {
263
263
  }
264
264
 
265
265
  .compress-dialog-close:hover {
266
- background: rgb(243, 244, 246);
267
- color: rgb(55, 65, 81);
266
+ background: var(--huyooo-muted);
267
+ color: var(--huyooo-text);
268
268
  }
269
269
 
270
270
  .compress-dialog-content {
@@ -280,9 +280,9 @@ const handleConfirm = () => {
280
280
  align-items: center;
281
281
  gap: 8px;
282
282
  padding: 12px;
283
- background: rgb(249, 250, 251);
283
+ background: var(--huyooo-surface);
284
284
  border-radius: 8px;
285
- color: rgb(55, 65, 81);
285
+ color: var(--huyooo-text);
286
286
  font-size: 14px;
287
287
  }
288
288
 
@@ -295,7 +295,7 @@ const handleConfirm = () => {
295
295
  .compress-dialog-field > label {
296
296
  font-size: 13px;
297
297
  font-weight: 500;
298
- color: rgb(55, 65, 81);
298
+ color: var(--huyooo-text);
299
299
  }
300
300
 
301
301
  .compress-dialog-input-group {
@@ -306,54 +306,57 @@ const handleConfirm = () => {
306
306
  .compress-dialog-input-group input {
307
307
  flex: 1;
308
308
  padding: 8px 12px;
309
- border: 1px solid rgb(209, 213, 219);
309
+ border: 1px solid var(--huyooo-border);
310
310
  border-radius: 6px 0 0 6px;
311
311
  font-size: 14px;
312
312
  outline: none;
313
313
  transition: border-color 0.2s;
314
+ background: var(--huyooo-surface-2);
315
+ color: var(--huyooo-text);
314
316
  }
315
317
 
316
318
  .compress-dialog-input-group input:focus {
317
- border-color: rgb(59, 130, 246);
319
+ border-color: var(--huyooo-primary);
318
320
  }
319
321
 
320
322
  .compress-dialog-ext {
321
323
  padding: 8px 12px;
322
- background: rgb(243, 244, 246);
323
- border: 1px solid rgb(209, 213, 219);
324
+ background: var(--huyooo-muted);
325
+ border: 1px solid var(--huyooo-border);
324
326
  border-left: none;
325
327
  border-radius: 0 6px 6px 0;
326
328
  font-size: 14px;
327
- color: rgb(107, 114, 128);
329
+ color: var(--huyooo-text-muted);
328
330
  }
329
331
 
330
332
  .compress-dialog-toggle-password {
331
333
  padding: 8px 12px;
332
- background: rgb(243, 244, 246);
333
- border: 1px solid rgb(209, 213, 219);
334
+ background: var(--huyooo-muted);
335
+ border: 1px solid var(--huyooo-border);
334
336
  border-left: none;
335
337
  border-radius: 0 6px 6px 0;
336
338
  font-size: 12px;
337
- color: rgb(59, 130, 246);
339
+ color: var(--huyooo-primary);
338
340
  cursor: pointer;
339
341
  }
340
342
 
341
343
  .compress-dialog-toggle-password:hover {
342
- background: rgb(229, 231, 235);
344
+ background: var(--huyooo-muted-hover);
343
345
  }
344
346
 
345
347
  .compress-dialog-field select {
346
348
  padding: 8px 12px;
347
- border: 1px solid rgb(209, 213, 219);
349
+ border: 1px solid var(--huyooo-border);
348
350
  border-radius: 6px;
349
351
  font-size: 14px;
350
352
  outline: none;
351
- background: white;
353
+ background: var(--huyooo-surface-2);
354
+ color: var(--huyooo-text);
352
355
  cursor: pointer;
353
356
  }
354
357
 
355
358
  .compress-dialog-field select:focus {
356
- border-color: rgb(59, 130, 246);
359
+ border-color: var(--huyooo-primary);
357
360
  }
358
361
 
359
362
  .compress-dialog-levels {
@@ -367,19 +370,19 @@ const handleConfirm = () => {
367
370
  align-items: center;
368
371
  gap: 8px;
369
372
  padding: 8px 12px;
370
- border: 1px solid rgb(229, 231, 233);
373
+ border: 1px solid var(--huyooo-border);
371
374
  border-radius: 6px;
372
375
  cursor: pointer;
373
376
  transition: all 0.2s;
374
377
  }
375
378
 
376
379
  .compress-dialog-level:hover {
377
- background: rgb(249, 250, 251);
380
+ background: var(--huyooo-surface);
378
381
  }
379
382
 
380
383
  .compress-dialog-level:has(input:checked) {
381
- border-color: rgb(59, 130, 246);
382
- background: rgb(239, 246, 255);
384
+ border-color: var(--huyooo-primary);
385
+ background: var(--huyooo-focus-ring);
383
386
  }
384
387
 
385
388
  .compress-dialog-level input {
@@ -389,12 +392,12 @@ const handleConfirm = () => {
389
392
  .compress-dialog-level-label {
390
393
  font-size: 14px;
391
394
  font-weight: 500;
392
- color: rgb(17, 24, 39);
395
+ color: var(--huyooo-text);
393
396
  }
394
397
 
395
398
  .compress-dialog-level-desc {
396
399
  font-size: 12px;
397
- color: rgb(107, 114, 128);
400
+ color: var(--huyooo-text-muted);
398
401
  margin-left: auto;
399
402
  }
400
403
 
@@ -404,7 +407,7 @@ const handleConfirm = () => {
404
407
  gap: 8px;
405
408
  cursor: pointer;
406
409
  font-size: 14px;
407
- color: rgb(55, 65, 81);
410
+ color: var(--huyooo-text);
408
411
  }
409
412
 
410
413
  .compress-dialog-checkbox input {
@@ -415,7 +418,7 @@ const handleConfirm = () => {
415
418
 
416
419
  .compress-dialog-preview {
417
420
  padding: 10px 12px;
418
- background: rgb(249, 250, 251);
421
+ background: var(--huyooo-surface);
419
422
  border-radius: 6px;
420
423
  font-size: 12px;
421
424
  display: flex;
@@ -424,11 +427,11 @@ const handleConfirm = () => {
424
427
  }
425
428
 
426
429
  .compress-dialog-preview-label {
427
- color: rgb(107, 114, 128);
430
+ color: var(--huyooo-text-muted);
428
431
  }
429
432
 
430
433
  .compress-dialog-preview-path {
431
- color: rgb(55, 65, 81);
434
+ color: var(--huyooo-text);
432
435
  word-break: break-all;
433
436
  }
434
437
 
@@ -437,7 +440,7 @@ const handleConfirm = () => {
437
440
  justify-content: flex-end;
438
441
  gap: 12px;
439
442
  padding: 16px 20px;
440
- border-top: 1px solid rgb(229, 231, 233);
443
+ border-top: 1px solid var(--huyooo-border);
441
444
  }
442
445
 
443
446
  .compress-dialog-btn {
@@ -450,28 +453,28 @@ const handleConfirm = () => {
450
453
  }
451
454
 
452
455
  .compress-dialog-btn-cancel {
453
- background: white;
454
- border: 1px solid rgb(209, 213, 219);
455
- color: rgb(55, 65, 81);
456
+ background: var(--huyooo-surface-2);
457
+ border: 1px solid var(--huyooo-border);
458
+ color: var(--huyooo-text);
456
459
  }
457
460
 
458
461
  .compress-dialog-btn-cancel:hover {
459
- background: rgb(249, 250, 251);
462
+ background: var(--huyooo-surface);
460
463
  }
461
464
 
462
465
  .compress-dialog-btn-confirm {
463
- background: rgb(59, 130, 246);
464
- border: 1px solid rgb(59, 130, 246);
466
+ background: var(--huyooo-primary);
467
+ border: 1px solid var(--huyooo-primary);
465
468
  color: white;
466
469
  }
467
470
 
468
471
  .compress-dialog-btn-confirm:hover {
469
- background: rgb(37, 99, 235);
472
+ background: var(--huyooo-primary-hover, var(--huyooo-primary));
470
473
  }
471
474
 
472
475
  .compress-dialog-btn-confirm:disabled {
473
- background: rgb(156, 163, 175);
474
- border-color: rgb(156, 163, 175);
476
+ background: var(--huyooo-text-disabled);
477
+ border-color: var(--huyooo-text-disabled);
475
478
  cursor: not-allowed;
476
479
  }
477
480
  </style>
@@ -405,11 +405,11 @@ const closeSubmenu = () => {
405
405
  position: fixed;
406
406
  z-index: 10000;
407
407
  width: 220px; /* 固定宽度,与 calculateMenuPosition 中的 MENU_WIDTH 一致 */
408
- background: rgba(255, 255, 255, 0.95);
408
+ background: var(--huyooo-menu-bg);
409
409
  backdrop-filter: blur(24px);
410
- border: 1px solid rgba(229, 231, 233, 0.5);
410
+ border: 1px solid var(--huyooo-border);
411
411
  border-radius: 0.5rem;
412
- box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.15), 0 4px 6px -2px rgba(0, 0, 0, 0.1);
412
+ box-shadow: var(--huyooo-menu-shadow);
413
413
  padding: 0.25rem 0;
414
414
  font-size: 0.875rem;
415
415
  user-select: none;
@@ -434,7 +434,7 @@ const closeSubmenu = () => {
434
434
  align-items: center;
435
435
  gap: 0.5rem;
436
436
  padding: 0.375rem 1rem;
437
- color: rgb(55, 65, 81);
437
+ color: var(--huyooo-text);
438
438
  transition: all 200ms;
439
439
  border: none;
440
440
  background: transparent;
@@ -442,7 +442,7 @@ const closeSubmenu = () => {
442
442
  }
443
443
 
444
444
  .context-menu-item:hover {
445
- background: rgb(59, 130, 246);
445
+ background: var(--huyooo-primary);
446
446
  color: white;
447
447
  }
448
448
 
@@ -451,7 +451,7 @@ const closeSubmenu = () => {
451
451
  }
452
452
 
453
453
  .context-menu-item:hover .context-menu-item-shortcut {
454
- color: rgba(255, 255, 255, 0.7);
454
+ color: var(--huyooo-on-primary-muted);
455
455
  }
456
456
 
457
457
  .context-menu-item--disabled {
@@ -461,24 +461,24 @@ const closeSubmenu = () => {
461
461
 
462
462
  .context-menu-item--disabled:hover {
463
463
  background: transparent;
464
- color: rgb(55, 65, 81);
464
+ color: var(--huyooo-text);
465
465
  }
466
466
 
467
467
  .context-menu-item--disabled:hover .context-menu-item-icon {
468
- color: rgb(107, 114, 128);
468
+ color: var(--huyooo-text-muted);
469
469
  }
470
470
 
471
471
  .context-menu-item--danger {
472
- color: rgb(220, 38, 38);
472
+ color: var(--huyooo-danger);
473
473
  }
474
474
 
475
475
  .context-menu-item--danger:hover {
476
- background: rgb(220, 38, 38);
476
+ background: var(--huyooo-danger);
477
477
  color: white;
478
478
  }
479
479
 
480
480
  .context-menu-item--danger .context-menu-item-icon {
481
- color: rgb(220, 38, 38);
481
+ color: var(--huyooo-danger);
482
482
  }
483
483
 
484
484
  .context-menu-item--danger:hover .context-menu-item-icon {
@@ -490,7 +490,7 @@ const closeSubmenu = () => {
490
490
  }
491
491
 
492
492
  .context-menu-item--active {
493
- background: rgb(59, 130, 246);
493
+ background: var(--huyooo-primary);
494
494
  color: white;
495
495
  }
496
496
 
@@ -499,11 +499,11 @@ const closeSubmenu = () => {
499
499
  }
500
500
 
501
501
  .context-menu-item--active .context-menu-item-shortcut {
502
- color: rgba(255, 255, 255, 0.7);
502
+ color: var(--huyooo-on-primary-muted);
503
503
  }
504
504
 
505
505
  .context-menu-item-icon {
506
- color: rgb(107, 114, 128);
506
+ color: var(--huyooo-text-muted);
507
507
  flex-shrink: 0;
508
508
  }
509
509
 
@@ -512,18 +512,18 @@ const closeSubmenu = () => {
512
512
  }
513
513
 
514
514
  .context-menu-item-shortcut {
515
- color: rgb(156, 163, 175);
515
+ color: var(--huyooo-text-disabled);
516
516
  font-size: 0.6875rem;
517
517
  }
518
518
 
519
519
  .context-menu-separator {
520
520
  height: 1px;
521
- background: rgb(229, 231, 233);
521
+ background: var(--huyooo-border);
522
522
  margin: 0.25rem 0.5rem;
523
523
  }
524
524
 
525
525
  .context-menu-item-check {
526
- color: rgb(107, 114, 128);
526
+ color: var(--huyooo-text-muted);
527
527
  flex-shrink: 0;
528
528
  margin-left: auto;
529
529
  }
@@ -534,7 +534,7 @@ const closeSubmenu = () => {
534
534
  }
535
535
 
536
536
  .context-menu-item-arrow {
537
- color: rgb(156, 163, 175);
537
+ color: var(--huyooo-text-disabled);
538
538
  flex-shrink: 0;
539
539
  margin-left: auto;
540
540
  }
@@ -278,23 +278,23 @@ const handleEscapeKey = (e: KeyboardEvent) => {
278
278
 
279
279
  /* 悬停效果 - 类似 macOS */
280
280
  .file-grid-item--normal:hover {
281
- background: rgba(0, 0, 0, 0.04);
281
+ background: var(--huyooo-muted-hover);
282
282
  }
283
283
 
284
284
  /* 选中状态 - macOS 风格的蓝色高亮 */
285
285
  .file-grid-item--selected {
286
- background: rgba(0, 122, 255, 0.12);
287
- border-color: rgba(0, 122, 255, 0.2);
286
+ background: var(--huyooo-focus-ring);
287
+ border-color: var(--huyooo-primary);
288
288
  }
289
289
 
290
290
  .file-grid-item--selected:hover {
291
- background: rgba(0, 122, 255, 0.16);
291
+ background: var(--huyooo-focus-ring);
292
292
  }
293
293
 
294
294
  /* 拖拽悬停 */
295
295
  .file-grid-item--drag-over {
296
- background: rgba(0, 122, 255, 0.2);
297
- border-color: rgba(0, 122, 255, 0.4);
296
+ background: var(--huyooo-focus-ring);
297
+ border-color: var(--huyooo-primary);
298
298
  }
299
299
 
300
300
  /* 图标/缩略图容器 - 统一尺寸 */
@@ -319,8 +319,8 @@ const handleEscapeKey = (e: KeyboardEvent) => {
319
319
  object-position: center;
320
320
  border-radius: 4px;
321
321
  /* 轻微阴影增加层次感 */
322
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08), 0 0 0 1px rgba(0, 0, 0, 0.04);
323
- background: #f5f5f5;
322
+ box-shadow: var(--huyooo-shadow-sm);
323
+ background: var(--huyooo-muted);
324
324
  /* 确保图片能作为加载占位符,平滑过渡到原图 */
325
325
  display: block;
326
326
  }
@@ -334,7 +334,7 @@ const handleEscapeKey = (e: KeyboardEvent) => {
334
334
  }
335
335
 
336
336
  .file-grid-item-thumbnail--selected {
337
- box-shadow: 0 2px 6px rgba(0, 122, 255, 0.2), 0 0 0 2px rgba(0, 122, 255, 0.3);
337
+ box-shadow: 0 0 0 2px var(--huyooo-primary), 0 0 0 6px var(--huyooo-focus-ring);
338
338
  }
339
339
 
340
340
  /* 视频缩略图容器 */
@@ -342,10 +342,10 @@ const handleEscapeKey = (e: KeyboardEvent) => {
342
342
  position: relative;
343
343
  border-radius: 4px;
344
344
  overflow: hidden;
345
- background: #000;
345
+ background: var(--huyooo-overlay-strong);
346
346
  width: 48px;
347
347
  height: 48px;
348
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12);
348
+ box-shadow: var(--huyooo-shadow-sm);
349
349
  display: flex;
350
350
  align-items: center;
351
351
  justify-content: center;
@@ -380,7 +380,7 @@ const handleEscapeKey = (e: KeyboardEvent) => {
380
380
  width: 20px;
381
381
  height: 20px;
382
382
  border-radius: 50%;
383
- background: rgba(0, 0, 0, 0.5);
383
+ background: var(--huyooo-overlay);
384
384
  backdrop-filter: blur(4px);
385
385
  display: flex;
386
386
  align-items: center;
@@ -416,7 +416,7 @@ const handleEscapeKey = (e: KeyboardEvent) => {
416
416
  user-select: none;
417
417
  cursor: default;
418
418
  transition: color 100ms;
419
- color: #1d1d1f;
419
+ color: var(--huyooo-text);
420
420
  width: 100%;
421
421
  /* 使用 flexbox 布局,让扩展名始终显示 */
422
422
  display: flex;
@@ -458,47 +458,14 @@ const handleEscapeKey = (e: KeyboardEvent) => {
458
458
  line-height: 1.3;
459
459
  text-align: center;
460
460
  padding: 2px 4px;
461
- border: 1px solid #007aff;
461
+ border: 1px solid var(--huyooo-primary);
462
462
  border-radius: 3px;
463
463
  outline: none;
464
- box-shadow: 0 0 0 3px rgba(0, 122, 255, 0.2);
465
- background: white;
464
+ box-shadow: 0 0 0 3px var(--huyooo-focus-ring);
465
+ background: var(--huyooo-surface-2);
466
+ color: var(--huyooo-text);
466
467
  cursor: text;
467
468
  }
468
469
 
469
- /* 深色模式支持 */
470
- @media (prefers-color-scheme: dark) {
471
- .file-grid-item--normal:hover {
472
- background: rgba(255, 255, 255, 0.06);
473
- }
474
-
475
- .file-grid-item--selected {
476
- background: rgba(10, 132, 255, 0.25);
477
- border-color: rgba(10, 132, 255, 0.3);
478
- }
479
-
480
- .file-grid-item--selected:hover {
481
- background: rgba(10, 132, 255, 0.3);
482
- }
483
-
484
- .file-grid-item--drag-over {
485
- background: rgba(10, 132, 255, 0.35);
486
- border-color: rgba(10, 132, 255, 0.5);
487
- }
488
-
489
- .file-grid-item-thumbnail {
490
- background: #2c2c2e;
491
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2), 0 0 0 1px rgba(255, 255, 255, 0.05);
492
- }
493
-
494
- .file-grid-item-name {
495
- color: #f5f5f7;
496
- }
497
-
498
- .file-grid-item-rename-input {
499
- background: #1c1c1e;
500
- border-color: #0a84ff;
501
- color: #f5f5f7;
502
- }
503
- }
470
+ /* 深色模式由 token 负责 */
504
471
  </style>
@@ -90,43 +90,43 @@ const iconClass = computed(() => {
90
90
 
91
91
  <style scoped>
92
92
  .file-icon--folder {
93
- color: rgb(96, 165, 250);
94
- fill: rgb(96, 165, 250);
93
+ color: var(--huyooo-primary);
94
+ fill: var(--huyooo-primary);
95
95
  }
96
96
 
97
97
  .file-icon--image {
98
- color: rgb(168, 85, 247);
98
+ color: var(--huyooo-filetype-image);
99
99
  }
100
100
 
101
101
  .file-icon--text {
102
- color: rgb(107, 114, 128);
102
+ color: var(--huyooo-text-muted);
103
103
  }
104
104
 
105
105
  .file-icon--code {
106
- color: rgb(34, 197, 94);
106
+ color: var(--huyooo-success);
107
107
  }
108
108
 
109
109
  .file-icon--music {
110
- color: rgb(248, 113, 113);
110
+ color: var(--huyooo-filetype-music);
111
111
  }
112
112
 
113
113
  .file-icon--video {
114
- color: rgb(37, 99, 235);
114
+ color: var(--huyooo-filetype-video);
115
115
  }
116
116
 
117
117
  .file-icon--pdf {
118
- color: rgb(220, 38, 38);
118
+ color: var(--huyooo-danger);
119
119
  }
120
120
 
121
121
  .file-icon--application {
122
- color: rgb(139, 92, 246);
122
+ color: var(--huyooo-primary);
123
123
  }
124
124
 
125
125
  .file-icon--archive {
126
- color: rgb(234, 179, 8);
126
+ color: var(--huyooo-filetype-archive);
127
127
  }
128
128
 
129
129
  .file-icon--default {
130
- color: rgb(156, 163, 175);
130
+ color: var(--huyooo-text-disabled);
131
131
  }
132
132
  </style>