@huyooo/file-explorer-frontend-vue 0.4.10 → 0.4.12
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/dist/components/CompressDialog.vue.d.ts.map +1 -1
- package/dist/components/FileInfoDialog.vue.d.ts.map +1 -1
- package/dist/components/FileListView.vue.d.ts.map +1 -1
- package/dist/components/ProgressDialog.vue.d.ts.map +1 -1
- package/dist/components/Window.vue.d.ts.map +1 -1
- package/dist/index.css +1 -1
- package/dist/index.js +1096 -2224
- package/dist/index.js.map +1 -1
- package/package.json +2 -3
- package/src/components/CompressDialog.vue +4 -4
- package/src/components/FileInfoDialog.vue +6 -19
- package/src/components/FileListView.vue +2 -2
- package/src/components/ProgressDialog.vue +9 -9
- package/src/components/Window.vue +4 -4
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@huyooo/file-explorer-frontend-vue",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.12",
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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 {
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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 {
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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 {
|
|
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
|
|
119
|
+
const statusIconName = computed(() => {
|
|
120
120
|
switch (props.progress.status) {
|
|
121
|
-
case 'processing': return
|
|
122
|
-
case 'success': return
|
|
123
|
-
case 'error': return
|
|
124
|
-
default: return
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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 {
|
|
100
|
+
import { Icon } from '@iconify/vue';
|
|
101
101
|
import { useWindowDrag } from '../composables/useWindowDrag';
|
|
102
102
|
import { useWindowResize } from '../composables/useWindowResize';
|
|
103
103
|
|