@dsh-sparrow/dsh-file-manage 0.1.0-alpha.1
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/CHANGELOG.md +10 -0
- package/CHANGELOG.zh-CN.md +10 -0
- package/README.md +42 -0
- package/README.zh-CN.md +42 -0
- package/cordis.patch.yml +5 -0
- package/docs/images/panel.png +0 -0
- package/lib/client/FileManageDock.js +141 -0
- package/lib/client/api.js +50 -0
- package/lib/client/index.js +81 -0
- package/lib/client/quota.js +23 -0
- package/lib/client/styles.js +297 -0
- package/lib/client.js +705 -0
- package/lib/files.js +82 -0
- package/lib/host.js +157 -0
- package/lib/index.js +3 -0
- package/lib/types/client/FileManageDock.d.ts +20 -0
- package/lib/types/client/api.d.ts +19 -0
- package/lib/types/client/index.d.ts +17 -0
- package/lib/types/client/quota.d.ts +6 -0
- package/lib/types/client/styles.d.ts +66 -0
- package/lib/types/files.d.ts +54 -0
- package/lib/types/host.d.ts +10 -0
- package/lib/types/index.d.ts +3 -0
- package/package.json +75 -0
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
/** dsh-file-manage 客户端样式层:注入样式表 + 面板内联样式(官方设计 token;按 data 属性去重)。 @module dsh-file-manage/client/styles */
|
|
2
|
+
/** 注入触发键 / 面板 / 确认框样式;HMR / 重载按 data 属性去重不叠加。 */
|
|
3
|
+
export function ensureFileManageStyles() {
|
|
4
|
+
if (document.querySelector('style[data-dsh-file-manage]') !== null)
|
|
5
|
+
return;
|
|
6
|
+
const style = document.createElement('style');
|
|
7
|
+
style.dataset.dshFileManage = '';
|
|
8
|
+
style.textContent = `/* 官方 .footerActions 是横向 flex 行,slot 包裹层为行内 display:contents:
|
|
9
|
+
* 多插件各自的全宽按钮会并排挤到右缘外(只剩一条边)。这里把包裹层改回真实盒子纵排,
|
|
10
|
+
* Archive / 云端文件两个按钮上下堆叠、各自占满一行(!important 压过行内 contents)。 */
|
|
11
|
+
[data-slot='sidebar.footer.action'] {
|
|
12
|
+
display: flex !important;
|
|
13
|
+
flex-direction: column;
|
|
14
|
+
/* 包裹层是 .footerActions 行容器里的 flex item,需显式撑满,否则两个全宽按钮按内容宽度收缩。 */
|
|
15
|
+
width: 100%;
|
|
16
|
+
}
|
|
17
|
+
.dsh-file-manage-trigger {
|
|
18
|
+
flex: none;
|
|
19
|
+
display: flex;
|
|
20
|
+
align-items: center;
|
|
21
|
+
gap: 8px;
|
|
22
|
+
width: calc(100% + 4px);
|
|
23
|
+
height: 42px;
|
|
24
|
+
margin: 4px -2px;
|
|
25
|
+
padding: 0 10px 0 8px;
|
|
26
|
+
box-sizing: border-box;
|
|
27
|
+
border: none;
|
|
28
|
+
border-radius: 12px;
|
|
29
|
+
background: transparent;
|
|
30
|
+
cursor: pointer;
|
|
31
|
+
overflow: hidden;
|
|
32
|
+
color: var(--dsw-alias-label-primary);
|
|
33
|
+
font-family: inherit;
|
|
34
|
+
font-size: 14px;
|
|
35
|
+
line-height: 22px;
|
|
36
|
+
}
|
|
37
|
+
.dsh-file-manage-trigger:hover {
|
|
38
|
+
background: var(--dsw-alias-interactive-bg-hover);
|
|
39
|
+
}
|
|
40
|
+
.dsh-file-manage-trigger-rail {
|
|
41
|
+
width: 36px;
|
|
42
|
+
height: 36px;
|
|
43
|
+
margin: 8px 0 10px;
|
|
44
|
+
justify-content: center;
|
|
45
|
+
gap: 0;
|
|
46
|
+
padding: 0;
|
|
47
|
+
border-radius: 50%;
|
|
48
|
+
}
|
|
49
|
+
.dsh-file-manage-trigger-icon {
|
|
50
|
+
flex: none;
|
|
51
|
+
}
|
|
52
|
+
.dsh-file-manage-trigger-label {
|
|
53
|
+
overflow: hidden;
|
|
54
|
+
text-overflow: ellipsis;
|
|
55
|
+
white-space: nowrap;
|
|
56
|
+
}
|
|
57
|
+
/* 面板滚动区:官方 settings 同款——elevated surface 重绑 l2 滚动条 token(base 默认 l1,浮层上对比度不对)。 */
|
|
58
|
+
.dsh-file-manage-body {
|
|
59
|
+
--dsh-scrollbar-thumb: var(--dsw-alias-scrollbar-bg-l2);
|
|
60
|
+
--dsh-scrollbar-thumb-hover: var(--dsw-alias-scrollbar-hover-l2);
|
|
61
|
+
}
|
|
62
|
+
/* 面板头:官方 settings 面板同款(54px 高、标题起点 24px)。 */
|
|
63
|
+
.dsh-file-manage-panel-header {
|
|
64
|
+
flex: none;
|
|
65
|
+
display: flex;
|
|
66
|
+
align-items: flex-start;
|
|
67
|
+
justify-content: space-between;
|
|
68
|
+
gap: 8px;
|
|
69
|
+
height: 54px;
|
|
70
|
+
padding: 20px 14px 8px 24px;
|
|
71
|
+
box-sizing: border-box;
|
|
72
|
+
}
|
|
73
|
+
.dsh-file-manage-panel-title {
|
|
74
|
+
font-size: 16px;
|
|
75
|
+
font-weight: 500;
|
|
76
|
+
line-height: 24px;
|
|
77
|
+
color: var(--dsw-alias-label-primary);
|
|
78
|
+
}
|
|
79
|
+
.dsh-file-manage-close {
|
|
80
|
+
display: inline-flex;
|
|
81
|
+
align-items: center;
|
|
82
|
+
justify-content: center;
|
|
83
|
+
width: 28px;
|
|
84
|
+
height: 28px;
|
|
85
|
+
padding: 0;
|
|
86
|
+
border: none;
|
|
87
|
+
border-radius: 28px;
|
|
88
|
+
outline: none;
|
|
89
|
+
background: transparent;
|
|
90
|
+
cursor: pointer;
|
|
91
|
+
color: var(--dsw-alias-label-primary);
|
|
92
|
+
}
|
|
93
|
+
.dsh-file-manage-close:hover {
|
|
94
|
+
background: var(--dsw-alias-interactive-bg-hover);
|
|
95
|
+
}
|
|
96
|
+
.dsh-file-manage-badge {
|
|
97
|
+
flex: none;
|
|
98
|
+
padding: 1px 6px;
|
|
99
|
+
border: 1px solid var(--dsw-alias-border-l2, #e2e5ea);
|
|
100
|
+
border-radius: 999px;
|
|
101
|
+
color: var(--dsw-alias-label-caption, #8a919f);
|
|
102
|
+
font-size: 11px;
|
|
103
|
+
line-height: 16px;
|
|
104
|
+
}
|
|
105
|
+
.dsh-file-manage-btn {
|
|
106
|
+
height: 28px;
|
|
107
|
+
padding: 0 12px;
|
|
108
|
+
border: 1px solid var(--dsw-alias-border-l1, #d4d8e0);
|
|
109
|
+
border-radius: 999px;
|
|
110
|
+
outline: none;
|
|
111
|
+
background: transparent;
|
|
112
|
+
color: var(--dsw-alias-label-primary, #1f2329);
|
|
113
|
+
font-size: 13px;
|
|
114
|
+
line-height: 20px;
|
|
115
|
+
white-space: nowrap;
|
|
116
|
+
cursor: pointer;
|
|
117
|
+
}
|
|
118
|
+
.dsh-file-manage-btn:hover:not(:disabled) {
|
|
119
|
+
background: var(--dsw-alias-interactive-bg-hover);
|
|
120
|
+
}
|
|
121
|
+
.dsh-file-manage-btn:disabled {
|
|
122
|
+
opacity: 0.5;
|
|
123
|
+
cursor: default;
|
|
124
|
+
}
|
|
125
|
+
.dsh-file-manage-btn-danger {
|
|
126
|
+
color: var(--dsw-alias-state-error-primary, #c62828);
|
|
127
|
+
}
|
|
128
|
+
/* 删除确认框:官方 web 确认框同款(mask + 毛玻璃 + 480 卡片)。 */
|
|
129
|
+
.dsh-file-manage-confirm-overlay {
|
|
130
|
+
position: fixed;
|
|
131
|
+
inset: 0;
|
|
132
|
+
z-index: 1100;
|
|
133
|
+
display: flex;
|
|
134
|
+
align-items: center;
|
|
135
|
+
justify-content: center;
|
|
136
|
+
background: var(--dsw-alias-bg-mask-1, rgba(0, 0, 0, 0.28));
|
|
137
|
+
backdrop-filter: var(--dsw-mask-blur);
|
|
138
|
+
}
|
|
139
|
+
.dsh-file-manage-confirm-card {
|
|
140
|
+
display: flex;
|
|
141
|
+
flex-direction: column;
|
|
142
|
+
gap: 12px;
|
|
143
|
+
width: min(480px, calc(100vw - 48px));
|
|
144
|
+
padding: 20px;
|
|
145
|
+
border-radius: 16px;
|
|
146
|
+
background: var(--dsw-alias-bg-layer-2, #f6f7f9);
|
|
147
|
+
color: var(--dsw-alias-label-primary, #1f2329);
|
|
148
|
+
box-shadow: var(--dsw-shadow-lv3, 0 12px 40px rgba(0,0,0,0.22));
|
|
149
|
+
}
|
|
150
|
+
.dsh-file-manage-confirm-title {
|
|
151
|
+
margin: 0;
|
|
152
|
+
font-size: 16px;
|
|
153
|
+
font-weight: 500;
|
|
154
|
+
line-height: 24px;
|
|
155
|
+
}
|
|
156
|
+
.dsh-file-manage-confirm-desc {
|
|
157
|
+
margin: 0;
|
|
158
|
+
font-size: 14px;
|
|
159
|
+
line-height: 22px;
|
|
160
|
+
color: var(--dsw-alias-label-secondary, #6b7280);
|
|
161
|
+
white-space: pre-line;
|
|
162
|
+
}
|
|
163
|
+
.dsh-file-manage-confirm-actions {
|
|
164
|
+
display: flex;
|
|
165
|
+
justify-content: flex-end;
|
|
166
|
+
gap: 8px;
|
|
167
|
+
}
|
|
168
|
+
/* 用量/进度条固定区:面板头下方、不随列表滚动;左侧 24px 与区块卡线框齐平,
|
|
169
|
+
右侧额外让出滚动条宽度(列表区 scrollbar-gutter: stable 固定占位 8px)。 */
|
|
170
|
+
.dsh-file-manage-summary {
|
|
171
|
+
flex: none;
|
|
172
|
+
padding: 12px calc(24px + var(--dsh-scrollbar-width, 8px)) 8px 24px;
|
|
173
|
+
}
|
|
174
|
+
.dsh-file-manage-count {
|
|
175
|
+
margin: 6px 0 0;
|
|
176
|
+
font-size: 12px;
|
|
177
|
+
line-height: 18px;
|
|
178
|
+
color: var(--dsw-alias-label-secondary, #6b7280);
|
|
179
|
+
}
|
|
180
|
+
/* 列表区块卡:存档页归档区/备份区同款 token(border-l2 + r12)。 */
|
|
181
|
+
.dsh-file-manage-card {
|
|
182
|
+
box-sizing: border-box;
|
|
183
|
+
display: flex;
|
|
184
|
+
flex-direction: column;
|
|
185
|
+
margin: 0 0 12px;
|
|
186
|
+
padding: 8px 12px 12px;
|
|
187
|
+
border: 1px solid var(--dsw-alias-border-l2, #e2e5ea);
|
|
188
|
+
border-radius: 12px;
|
|
189
|
+
}
|
|
190
|
+
/* 配额容量条:加厚 + 未使用区斜纹(repeating-linear-gradient),与分割线区分;填充盖住斜纹。
|
|
191
|
+
容量文字绝对定位居中叠加在条上。 */
|
|
192
|
+
.dsh-file-manage-quota-track {
|
|
193
|
+
position: relative;
|
|
194
|
+
height: 16px;
|
|
195
|
+
border-radius: 8px;
|
|
196
|
+
background-color: var(--dsw-alias-interactive-bg-hover);
|
|
197
|
+
background-image: repeating-linear-gradient(
|
|
198
|
+
45deg,
|
|
199
|
+
transparent 0px,
|
|
200
|
+
transparent 5px,
|
|
201
|
+
var(--dsw-alias-border-l1, #d4d8e0) 5px,
|
|
202
|
+
var(--dsw-alias-border-l1, #d4d8e0) 7px
|
|
203
|
+
);
|
|
204
|
+
overflow: hidden;
|
|
205
|
+
}
|
|
206
|
+
.dsh-file-manage-quota-text {
|
|
207
|
+
position: absolute;
|
|
208
|
+
inset: 0;
|
|
209
|
+
z-index: 1;
|
|
210
|
+
display: flex;
|
|
211
|
+
align-items: center;
|
|
212
|
+
justify-content: center;
|
|
213
|
+
font-size: 11px;
|
|
214
|
+
line-height: 16px;
|
|
215
|
+
white-space: nowrap;
|
|
216
|
+
color: var(--dsw-alias-label-primary, #1f2329);
|
|
217
|
+
/* 高用量时蓝填充垫底,加一圈底色光晕保证可读。 */
|
|
218
|
+
text-shadow: 0 0 4px var(--dsw-alias-bg-layer-2, #f6f7f9);
|
|
219
|
+
pointer-events: none;
|
|
220
|
+
}
|
|
221
|
+
.dsh-file-manage-quota-fill {
|
|
222
|
+
height: 100%;
|
|
223
|
+
/* 用量极小时(0.01% 量级)宽度趋近 0,兜底 4px 银条让「有使用」可见(网盘同款)。
|
|
224
|
+
不加自身圆角:最小宽度下圆角会长成圆点、视觉鼓出轨道左端,改由轨道 overflow:hidden + 圆角裁切两端。 */
|
|
225
|
+
min-width: 4px;
|
|
226
|
+
background: var(--dsw-alias-state-business-primary);
|
|
227
|
+
transition: width 220ms ease-out;
|
|
228
|
+
}
|
|
229
|
+
`;
|
|
230
|
+
document.head.appendChild(style);
|
|
231
|
+
}
|
|
232
|
+
/** 面板与行内联样式(对齐官方 Settings / Archive 的面板几何)。 */
|
|
233
|
+
export const styles = {
|
|
234
|
+
overlay: {
|
|
235
|
+
position: 'fixed',
|
|
236
|
+
inset: 0,
|
|
237
|
+
zIndex: 1000,
|
|
238
|
+
display: 'flex',
|
|
239
|
+
alignItems: 'center',
|
|
240
|
+
justifyContent: 'center',
|
|
241
|
+
background: 'var(--dsw-alias-bg-mask-1, rgba(0, 0, 0, 0.28))',
|
|
242
|
+
backdropFilter: 'var(--dsw-mask-blur)',
|
|
243
|
+
},
|
|
244
|
+
panel: {
|
|
245
|
+
position: 'relative',
|
|
246
|
+
display: 'flex',
|
|
247
|
+
flexDirection: 'column',
|
|
248
|
+
width: 'min(800px, calc(100vw - 48px))',
|
|
249
|
+
// 高度随内容自适应、上限钳到视口(官方 settings 同款上限)。
|
|
250
|
+
maxHeight: 'min(800px, calc(100vh - 48px))',
|
|
251
|
+
borderRadius: 24,
|
|
252
|
+
overflow: 'hidden',
|
|
253
|
+
padding: 0,
|
|
254
|
+
background: 'var(--dsw-alias-bg-layer-2, #f6f7f9)',
|
|
255
|
+
color: 'var(--dsw-alias-label-primary, #1f2329)',
|
|
256
|
+
boxShadow: 'var(--dsw-shadow-lv3, 0 12px 40px rgba(0,0,0,0.22))',
|
|
257
|
+
},
|
|
258
|
+
body: {
|
|
259
|
+
flex: 1,
|
|
260
|
+
minHeight: 0,
|
|
261
|
+
overflow: 'auto',
|
|
262
|
+
// 滚动条固定占位:卡片右缘不因滚动条出现/消失而左右漂移(与顶部进度条对齐)。
|
|
263
|
+
scrollbarGutter: 'stable',
|
|
264
|
+
padding: '0 24px 24px',
|
|
265
|
+
},
|
|
266
|
+
row: {
|
|
267
|
+
display: 'flex',
|
|
268
|
+
justifyContent: 'space-between',
|
|
269
|
+
gap: 8,
|
|
270
|
+
alignItems: 'center',
|
|
271
|
+
padding: '8px 0',
|
|
272
|
+
borderBottom: '1px solid var(--dsw-alias-border-l1, #e2e5ea)',
|
|
273
|
+
},
|
|
274
|
+
actions: {
|
|
275
|
+
display: 'flex',
|
|
276
|
+
gap: 6,
|
|
277
|
+
alignItems: 'center',
|
|
278
|
+
},
|
|
279
|
+
title: {
|
|
280
|
+
overflow: 'hidden',
|
|
281
|
+
textOverflow: 'ellipsis',
|
|
282
|
+
whiteSpace: 'nowrap',
|
|
283
|
+
},
|
|
284
|
+
secondarySmall: {
|
|
285
|
+
color: 'var(--dsw-alias-label-secondary, #6b7280)',
|
|
286
|
+
fontSize: 12,
|
|
287
|
+
lineHeight: '18px',
|
|
288
|
+
},
|
|
289
|
+
footerBar: {
|
|
290
|
+
flex: 'none',
|
|
291
|
+
display: 'flex',
|
|
292
|
+
justifyContent: 'center',
|
|
293
|
+
// 列表已包区块卡,不再加顶部分隔线(避免与卡片叠加显乱)。
|
|
294
|
+
padding: '10px 24px 14px',
|
|
295
|
+
},
|
|
296
|
+
};
|
|
297
|
+
//# sourceMappingURL=styles.js.map
|