@huyooo/file-explorer-frontend-vue 0.4.10 → 0.4.14

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.10",
3
+ "version": "0.4.14",
4
4
  "description": "File Explorer Frontend - Vue components for file management",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -29,8 +29,7 @@
29
29
  "vue": "^3.4.0"
30
30
  },
31
31
  "dependencies": {
32
- "@iconify/vue": "^5.0.0",
33
- "lucide-vue-next": "^0.460.0"
32
+ "@iconify/vue": "^5.0.0"
34
33
  },
35
34
  "devDependencies": {
36
35
  "@types/node": "^22.0.0",
@@ -5,11 +5,11 @@
5
5
  <!-- 头部 -->
6
6
  <div class="compress-dialog-header">
7
7
  <div class="compress-dialog-title">
8
- <Archive :size="20" />
8
+ <Icon icon="lucide:archive" width="20" height="20" />
9
9
  <span>压缩文件</span>
10
10
  </div>
11
11
  <button class="compress-dialog-close" @click="emit('cancel')">
12
- <X :size="18" />
12
+ <Icon icon="lucide:x" width="18" height="18" />
13
13
  </button>
14
14
  </div>
15
15
 
@@ -17,7 +17,7 @@
17
17
  <div class="compress-dialog-content">
18
18
  <!-- 文件信息 -->
19
19
  <div class="compress-dialog-info">
20
- <FileArchive :size="16" />
20
+ <Icon icon="lucide:file-archive" width="16" height="16" />
21
21
  <span>{{ fileDisplayName }}</span>
22
22
  </div>
23
23
 
@@ -115,7 +115,7 @@
115
115
 
116
116
  <script setup lang="ts">
117
117
  import { ref, computed, watch } from 'vue';
118
- import { Archive, FileArchive, X } from 'lucide-vue-next';
118
+ import { Icon } from '@iconify/vue';
119
119
  import type { CompressFormat, CompressLevel, CompressOptions } from '../types';
120
120
 
121
121
  type CompressDialogOptions = Omit<CompressOptions, 'outputDir'>;
@@ -15,7 +15,7 @@
15
15
  </span>
16
16
  </div>
17
17
  <button class="file-info-dialog-close" @click="emit('close')">
18
- <X :size="18" />
18
+ <Icon icon="lucide:x" width="18" height="18" />
19
19
  </button>
20
20
  </div>
21
21
 
@@ -24,7 +24,7 @@
24
24
  <!-- 类型 -->
25
25
  <div class="file-info-row">
26
26
  <div class="file-info-label">
27
- <File :size="14" />
27
+ <Icon icon="lucide:file" width="14" height="14" />
28
28
  <span>类型</span>
29
29
  </div>
30
30
  <div class="file-info-value">
@@ -35,7 +35,7 @@
35
35
  <!-- 大小 -->
36
36
  <div v-if="item.type !== FileType.FOLDER && item.size" class="file-info-row">
37
37
  <div class="file-info-label">
38
- <HardDrive :size="14" />
38
+ <Icon icon="lucide:hard-drive" width="14" height="14" />
39
39
  <span>大小</span>
40
40
  </div>
41
41
  <div class="file-info-value">
@@ -46,7 +46,7 @@
46
46
  <!-- 位置 -->
47
47
  <div class="file-info-row">
48
48
  <div class="file-info-label">
49
- <MapPin :size="14" />
49
+ <Icon icon="lucide:map-pin" width="14" height="14" />
50
50
  <span>位置</span>
51
51
  </div>
52
52
  <div class="file-info-value file-info-value--path" :title="directory">
@@ -57,7 +57,7 @@
57
57
  <!-- 完整路径 -->
58
58
  <div class="file-info-row">
59
59
  <div class="file-info-label">
60
- <MapPin :size="14" />
60
+ <Icon icon="lucide:map-pin" width="14" height="14" />
61
61
  <span>完整路径</span>
62
62
  </div>
63
63
  <div class="file-info-value file-info-value--path" :title="item.id">
@@ -68,7 +68,7 @@
68
68
  <!-- 修改时间 -->
69
69
  <div v-if="item.dateModified" class="file-info-row">
70
70
  <div class="file-info-label">
71
- <Clock :size="14" />
71
+ <Icon icon="lucide:clock" width="14" height="14" />
72
72
  <span>修改时间</span>
73
73
  </div>
74
74
  <div class="file-info-value">
@@ -91,19 +91,6 @@
91
91
  <script setup lang="ts">
92
92
  import { computed, onMounted, onUnmounted } from 'vue';
93
93
  import { Icon } from '@iconify/vue';
94
- import {
95
- File,
96
- Image,
97
- Video,
98
- Music,
99
- FileText,
100
- Code,
101
- Archive,
102
- X,
103
- MapPin,
104
- HardDrive,
105
- Clock
106
- } from 'lucide-vue-next';
107
94
  import { FileType, type FileItem } from '../types';
108
95
  import { getFileTypeIcon } from '../utils/fileTypeIcon';
109
96
 
@@ -12,7 +12,7 @@
12
12
 
13
13
  <!-- 空文件夹 -->
14
14
  <div v-else-if="items.length === 0" class="file-list-view-empty">
15
- <FolderOpen :size="64" class="file-list-view-empty-icon" />
15
+ <Icon icon="lucide:folder-open" width="64" height="64" class="file-list-view-empty-icon" />
16
16
  <p>文件夹为空</p>
17
17
  </div>
18
18
 
@@ -63,7 +63,7 @@
63
63
 
64
64
  <script setup lang="ts">
65
65
  import { ref, watch, computed } from 'vue';
66
- import { FolderOpen } from 'lucide-vue-next';
66
+ import { Icon } from '@iconify/vue';
67
67
  import FileGrid from './FileGrid.vue';
68
68
  import FileList from './FileList.vue';
69
69
  import { FileType, type FileItem, type SortConfig, type FileExplorerAdapter } from '../types';
@@ -5,11 +5,11 @@
5
5
  <!-- 头部 -->
6
6
  <div class="progress-dialog-header">
7
7
  <div class="progress-dialog-title">
8
- <component :is="statusIcon" :size="24" :class="statusIconClass" />
8
+ <Icon :icon="statusIconName" width="24" height="24" :class="statusIconClass" />
9
9
  <span>{{ title }}</span>
10
10
  </div>
11
11
  <button v-if="isCompleted" class="progress-dialog-close" @click="handleClose">
12
- <X :size="18" />
12
+ <Icon icon="lucide:x" width="18" height="18" />
13
13
  </button>
14
14
  </div>
15
15
 
@@ -65,7 +65,7 @@
65
65
  class="progress-dialog-btn progress-dialog-btn-folder"
66
66
  @click="emit('openFolder', progress.outputPath!)"
67
67
  >
68
- <FolderOpen :size="16" />
68
+ <Icon icon="lucide:folder-open" width="16" height="16" />
69
69
  打开文件夹
70
70
  </button>
71
71
  <button
@@ -83,7 +83,7 @@
83
83
 
84
84
  <script setup lang="ts">
85
85
  import { computed } from 'vue';
86
- import { X, Loader2, CheckCircle, XCircle, Archive, FolderOpen } from 'lucide-vue-next';
86
+ import { Icon } from '@iconify/vue';
87
87
 
88
88
  /** 进度状态 */
89
89
  export type ProgressStatus = 'pending' | 'processing' | 'success' | 'error';
@@ -116,12 +116,12 @@ const emit = defineEmits<{
116
116
  const title = computed(() => props.progress.type === 'compress' ? '压缩文件' : '解压文件');
117
117
  const isCompleted = computed(() => props.progress.status === 'success' || props.progress.status === 'error');
118
118
 
119
- const statusIcon = computed(() => {
119
+ const statusIconName = computed(() => {
120
120
  switch (props.progress.status) {
121
- case 'processing': return Loader2;
122
- case 'success': return CheckCircle;
123
- case 'error': return XCircle;
124
- default: return Archive;
121
+ case 'processing': return 'lucide:loader-2';
122
+ case 'success': return 'lucide:check-circle';
123
+ case 'error': return 'lucide:x-circle';
124
+ default: return 'lucide:archive';
125
125
  }
126
126
  });
127
127
 
@@ -21,21 +21,21 @@
21
21
  @click.stop="handleClose"
22
22
  class="window-control-button window-control-button--close"
23
23
  >
24
- <X :size="7" class="window-control-icon" />
24
+ <Icon icon="lucide:x" width="7" height="7" class="window-control-icon" />
25
25
  </button>
26
26
  <button
27
27
  v-if="showMinimize"
28
28
  @click.stop="handleMinimize"
29
29
  class="window-control-button window-control-button--minimize"
30
30
  >
31
- <Minus :size="7" class="window-control-icon" />
31
+ <Icon icon="lucide:minus" width="7" height="7" class="window-control-icon" />
32
32
  </button>
33
33
  <button
34
34
  v-if="showMaximize"
35
35
  @click.stop="handleMaximize"
36
36
  class="window-control-button window-control-button--maximize"
37
37
  >
38
- <Maximize2 :size="7" class="window-control-icon" />
38
+ <Icon icon="lucide:maximize-2" width="7" height="7" class="window-control-icon" />
39
39
  </button>
40
40
  </div>
41
41
 
@@ -97,7 +97,7 @@
97
97
 
98
98
  <script setup lang="ts">
99
99
  import { computed, ref, onMounted, onUnmounted } from 'vue';
100
- import { X, Minus, Maximize2 } from 'lucide-vue-next';
100
+ import { Icon } from '@iconify/vue';
101
101
  import { useWindowDrag } from '../composables/useWindowDrag';
102
102
  import { useWindowResize } from '../composables/useWindowResize';
103
103