@floegence/floe-webapp-core 0.35.47 → 0.35.49
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/file-browser/FileBrowser.js +38 -37
- package/dist/components/file-browser/FileBrowserContext.js +359 -297
- package/dist/components/file-browser/FileGridView.js +190 -167
- package/dist/components/file-browser/FileListView.js +328 -307
- package/dist/components/file-browser/index.d.ts +1 -1
- package/dist/components/file-browser/longPressContextMenu.js +32 -33
- package/dist/components/file-browser/types.d.ts +10 -0
- package/dist/components/file-browser/useFileBrowserMarqueeSelection.d.ts +16 -0
- package/dist/components/file-browser/useFileBrowserMarqueeSelection.js +69 -0
- package/dist/floe.css +8 -0
- package/dist/full.js +66 -64
- package/dist/index.js +53 -51
- package/dist/styles.css +1 -1
- package/dist/utils/keybind.d.ts +2 -0
- package/dist/utils/keybind.js +24 -16
- package/package.json +1 -1
|
@@ -1,510 +1,531 @@
|
|
|
1
|
-
import { use as ee, insert as
|
|
2
|
-
import { createMemo as te, createEffect as
|
|
3
|
-
import { cn as
|
|
4
|
-
import { useMediaQuery as
|
|
5
|
-
import { useResizeObserver as
|
|
6
|
-
import { useVirtualWindow as
|
|
7
|
-
import { useFileBrowser as
|
|
8
|
-
import { useFileBrowserDrag as
|
|
9
|
-
import { FileItemIcon as
|
|
10
|
-
import { ChevronDown as
|
|
11
|
-
import { createLongPressContextMenuHandlers as
|
|
12
|
-
import { ResizeHandle as
|
|
13
|
-
import { fileBrowserTouchTargetAttrs as
|
|
14
|
-
import { createItemContextMenuEvent as
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
1
|
+
import { use as ee, insert as f, createComponent as m, effect as p, className as N, setStyleProperty as L, addEventListener as ie, style as Ce, template as _, spread as be, mergeProps as Me, memo as ce, delegateEvents as De } from "solid-js/web";
|
|
2
|
+
import { createMemo as te, createEffect as Ie, onCleanup as de, createSignal as ue, Show as P, For as me, untrack as $e } from "solid-js";
|
|
3
|
+
import { cn as E } from "../../utils/cn.js";
|
|
4
|
+
import { useMediaQuery as re } from "../../hooks/useMediaQuery.js";
|
|
5
|
+
import { useResizeObserver as _e } from "../../hooks/useResizeObserver.js";
|
|
6
|
+
import { useVirtualWindow as ze } from "../../hooks/useVirtualWindow.js";
|
|
7
|
+
import { useFileBrowser as fe } from "./FileBrowserContext.js";
|
|
8
|
+
import { useFileBrowserDrag as ye } from "../../context/FileBrowserDragContext.js";
|
|
9
|
+
import { FileItemIcon as Pe } from "./FileIcons.js";
|
|
10
|
+
import { ChevronDown as Re } from "../icons/index.js";
|
|
11
|
+
import { createLongPressContextMenuHandlers as Te } from "./longPressContextMenu.js";
|
|
12
|
+
import { ResizeHandle as oe } from "../layout/ResizeHandle.js";
|
|
13
|
+
import { fileBrowserTouchTargetAttrs as Fe } from "./touchInteractionGuard.js";
|
|
14
|
+
import { createItemContextMenuEvent as ke } from "./contextMenuEvent.js";
|
|
15
|
+
import { createFileBrowserMarqueeSelection as pe, FILE_BROWSER_MARQUEE_OVERLAY_CLASS as Ae } from "./useFileBrowserMarqueeSelection.js";
|
|
16
|
+
import { isPrimaryModKeyPressed as ae } from "../../utils/keybind.js";
|
|
17
|
+
var Ee = /* @__PURE__ */ _("<span class=truncate>"), Le = /* @__PURE__ */ _('<mark class="bg-warning/40 text-inherit rounded-sm">'), We = /* @__PURE__ */ _("<span>"), Be = /* @__PURE__ */ _('<div><button type=button class="group w-full flex items-center justify-start text-left px-3 py-2 cursor-pointer hover:bg-muted/50 transition-colors">Modified'), He = /* @__PURE__ */ _('<div class=shrink-0><button type=button class="group w-full flex items-center justify-start text-left px-3 py-2 cursor-pointer hover:bg-muted/50 transition-colors">Size'), le = /* @__PURE__ */ _("<div>"), qe = /* @__PURE__ */ _('<div><div class="flex items-center border-b border-border text-[11px] text-muted-foreground font-medium"><div><button type=button class="group w-full flex items-center min-w-0 px-3 py-2 cursor-pointer hover:bg-muted/50 transition-colors"><span class="flex items-center gap-2 min-w-0"><span class="flex-shrink-0 w-4 h-4"aria-hidden=true></span><span class="flex items-center min-w-0"><span class=truncate>Name</span></span></span></button></div></div><div class="relative flex-1 min-h-0 overflow-auto">'), Ne = /* @__PURE__ */ _('<span>No files matching "<!>"'), Oe = /* @__PURE__ */ _('<button type=button class="px-2 py-1 rounded bg-muted hover:bg-muted/80 transition-colors">Clear Filter'), Xe = /* @__PURE__ */ _('<div class="flex flex-col items-center justify-center h-32 gap-2 text-xs text-muted-foreground">'), Ye = /* @__PURE__ */ _("<span>This folder is empty"), se = /* @__PURE__ */ _('<div class="shrink-0 px-3 py-1.5 text-left text-muted-foreground truncate">'), Ge = /* @__PURE__ */ _('<button type=button><div class="flex items-center gap-2 flex-1 min-w-0 px-3 py-1.5"><span class="flex-shrink-0 w-4 h-4">');
|
|
18
|
+
function Ve(t) {
|
|
19
|
+
const o = te(() => {
|
|
20
|
+
if (!t.match || t.match.matchedIndices.length === 0)
|
|
19
21
|
return [{
|
|
20
|
-
text:
|
|
22
|
+
text: t.name,
|
|
21
23
|
highlight: !1
|
|
22
24
|
}];
|
|
23
|
-
const D = [], R = new Set(
|
|
24
|
-
let
|
|
25
|
-
for (let
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
text:
|
|
29
|
-
highlight:
|
|
30
|
-
}),
|
|
25
|
+
const D = [], R = new Set(t.match.matchedIndices);
|
|
26
|
+
let I = "", C = !1;
|
|
27
|
+
for (let g = 0; g < t.name.length; g++) {
|
|
28
|
+
const $ = R.has(g);
|
|
29
|
+
g === 0 ? (C = $, I = t.name[g]) : $ === C ? I += t.name[g] : (D.push({
|
|
30
|
+
text: I,
|
|
31
|
+
highlight: C
|
|
32
|
+
}), I = t.name[g], C = $);
|
|
31
33
|
}
|
|
32
|
-
return
|
|
33
|
-
text:
|
|
34
|
-
highlight:
|
|
34
|
+
return I && D.push({
|
|
35
|
+
text: I,
|
|
36
|
+
highlight: C
|
|
35
37
|
}), D;
|
|
36
38
|
});
|
|
37
39
|
return (() => {
|
|
38
|
-
var D =
|
|
39
|
-
return
|
|
40
|
+
var D = Ee();
|
|
41
|
+
return f(D, m(me, {
|
|
40
42
|
get each() {
|
|
41
|
-
return
|
|
43
|
+
return o();
|
|
42
44
|
},
|
|
43
|
-
children: (R) =>
|
|
45
|
+
children: (R) => m(P, {
|
|
44
46
|
get when() {
|
|
45
47
|
return R.highlight;
|
|
46
48
|
},
|
|
47
49
|
get fallback() {
|
|
48
|
-
return
|
|
50
|
+
return ce(() => R.text);
|
|
49
51
|
},
|
|
50
52
|
get children() {
|
|
51
|
-
var
|
|
52
|
-
return
|
|
53
|
+
var I = Le();
|
|
54
|
+
return f(I, () => R.text), I;
|
|
53
55
|
}
|
|
54
56
|
})
|
|
55
57
|
})), D;
|
|
56
58
|
})();
|
|
57
59
|
}
|
|
58
|
-
function
|
|
59
|
-
const
|
|
60
|
-
count: () =>
|
|
61
|
-
itemSize: () =>
|
|
60
|
+
function ut(t) {
|
|
61
|
+
const o = fe(), D = ye(), R = () => (t.enableDragDrop ?? !0) && !!D, I = () => t.instanceId ?? "default", C = 32, g = ze({
|
|
62
|
+
count: () => o.currentFiles().length,
|
|
63
|
+
itemSize: () => C,
|
|
62
64
|
overscan: 12
|
|
63
|
-
}),
|
|
65
|
+
}), $ = te(() => {
|
|
64
66
|
const {
|
|
65
67
|
start: n,
|
|
66
68
|
end: i
|
|
67
|
-
} =
|
|
68
|
-
return
|
|
69
|
-
}),
|
|
70
|
-
let
|
|
71
|
-
const
|
|
69
|
+
} = g.range();
|
|
70
|
+
return o.currentFiles().slice(n, i);
|
|
71
|
+
}), T = /* @__PURE__ */ new Map();
|
|
72
|
+
let z = null, x = 0;
|
|
73
|
+
const U = (n, i) => {
|
|
72
74
|
if (i) {
|
|
73
|
-
|
|
75
|
+
T.set(n, i);
|
|
74
76
|
return;
|
|
75
77
|
}
|
|
76
|
-
|
|
78
|
+
T.delete(n);
|
|
77
79
|
}, Q = (n) => {
|
|
78
|
-
if (!
|
|
79
|
-
const i = n *
|
|
80
|
-
if (i <
|
|
81
|
-
|
|
80
|
+
if (!z) return;
|
|
81
|
+
const i = n * C, l = i + C, c = z.scrollTop, h = c + z.clientHeight;
|
|
82
|
+
if (i < c) {
|
|
83
|
+
z.scrollTop = i, g.onScroll();
|
|
82
84
|
return;
|
|
83
85
|
}
|
|
84
|
-
|
|
86
|
+
l > h && (z.scrollTop = Math.max(0, l - z.clientHeight), g.onScroll());
|
|
85
87
|
};
|
|
86
|
-
|
|
87
|
-
const n =
|
|
88
|
-
if (
|
|
89
|
-
const
|
|
90
|
-
if (
|
|
91
|
-
if (!
|
|
92
|
-
Q(
|
|
88
|
+
Ie(() => {
|
|
89
|
+
const n = o.revealRequest(), i = o.currentFiles();
|
|
90
|
+
if ($(), !n) return;
|
|
91
|
+
const l = i.findIndex((v) => v.id === n.targetId);
|
|
92
|
+
if (l < 0) return;
|
|
93
|
+
if (!T.get(n.targetId)) {
|
|
94
|
+
Q(l);
|
|
93
95
|
return;
|
|
94
96
|
}
|
|
95
|
-
typeof cancelAnimationFrame == "function" &&
|
|
96
|
-
const
|
|
97
|
-
|
|
97
|
+
typeof cancelAnimationFrame == "function" && x && (cancelAnimationFrame(x), x = 0);
|
|
98
|
+
const h = () => {
|
|
99
|
+
o.revealRequest()?.requestId === n.requestId && (T.get(n.targetId)?.scrollIntoView({
|
|
98
100
|
block: "nearest",
|
|
99
101
|
inline: "nearest"
|
|
100
|
-
}),
|
|
102
|
+
}), o.selectItem(n.targetId, !1), o.consumeRevealRequest(n.requestId));
|
|
101
103
|
};
|
|
102
104
|
if (typeof requestAnimationFrame == "function") {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
+
x = requestAnimationFrame(() => {
|
|
106
|
+
x = 0, h();
|
|
105
107
|
});
|
|
106
108
|
return;
|
|
107
109
|
}
|
|
108
|
-
queueMicrotask(
|
|
109
|
-
}),
|
|
110
|
-
typeof cancelAnimationFrame == "function" &&
|
|
110
|
+
queueMicrotask(h);
|
|
111
|
+
}), de(() => {
|
|
112
|
+
typeof cancelAnimationFrame == "function" && x && cancelAnimationFrame(x);
|
|
111
113
|
});
|
|
112
|
-
const
|
|
113
|
-
const i =
|
|
114
|
-
|
|
114
|
+
const k = (n) => {
|
|
115
|
+
const i = o.sortConfig();
|
|
116
|
+
o.setSortConfig({
|
|
115
117
|
field: n,
|
|
116
118
|
direction: i.field === n && i.direction === "asc" ? "desc" : "asc"
|
|
117
119
|
});
|
|
118
|
-
}, j = (n) => n === void 0 ? "-" : n < 1024 ? `${n} B` : n < 1024 * 1024 ? `${(n / 1024).toFixed(1)} KB` : `${(n / (1024 * 1024)).toFixed(1)} MB`,
|
|
120
|
+
}, j = (n) => n === void 0 ? "-" : n < 1024 ? `${n} B` : n < 1024 * 1024 ? `${(n / 1024).toFixed(1)} KB` : `${(n / (1024 * 1024)).toFixed(1)} MB`, O = (n) => n ? n.toLocaleDateString("en-US", {
|
|
119
121
|
month: "short",
|
|
120
122
|
day: "numeric",
|
|
121
123
|
year: "numeric"
|
|
122
|
-
}) : "-",
|
|
123
|
-
|
|
124
|
+
}) : "-", y = pe({
|
|
125
|
+
getContainer: () => z,
|
|
126
|
+
getVisibleItemIdsInOrder: () => o.currentFiles().map((n) => n.id),
|
|
127
|
+
getElementForId: (n) => T.get(n) ?? null,
|
|
128
|
+
getSelectedIds: () => [...o.selectedItems()],
|
|
129
|
+
replaceSelection: (n, i) => o.replaceSelection(n, i),
|
|
130
|
+
clearSelection: o.clearSelection
|
|
131
|
+
}), W = (n) => {
|
|
132
|
+
const i = () => o.sortConfig(), l = () => i().field === n.field;
|
|
124
133
|
return (() => {
|
|
125
|
-
var
|
|
126
|
-
return
|
|
134
|
+
var c = We();
|
|
135
|
+
return f(c, m(Re, {
|
|
127
136
|
get class() {
|
|
128
|
-
return
|
|
137
|
+
return E("w-3 h-3 transition-transform duration-150", l() && i().direction === "asc" && "rotate-180");
|
|
129
138
|
}
|
|
130
|
-
})),
|
|
139
|
+
})), p(() => N(c, E("ml-1 transition-all duration-150", l() ? "opacity-100" : "opacity-0 group-hover:opacity-40"))), c;
|
|
131
140
|
})();
|
|
132
|
-
},
|
|
133
|
-
const n =
|
|
141
|
+
}, B = re("(min-width: 640px)"), X = re("(min-width: 768px)"), [K, Y] = ue(null), J = _e(K), A = (n, i, l) => Math.max(i, Math.min(l, n)), S = te(() => {
|
|
142
|
+
const n = J()?.width ?? 0, i = B(), l = X(), c = o.listColumnRatios(), h = 160, v = 120, b = 80, M = 128, a = 96;
|
|
134
143
|
if (!i || n <= 0)
|
|
135
144
|
return {
|
|
136
145
|
width: n,
|
|
137
146
|
showModified: i,
|
|
138
|
-
showSize:
|
|
139
|
-
minName:
|
|
140
|
-
minModified:
|
|
141
|
-
minSize:
|
|
142
|
-
modifiedWidth:
|
|
143
|
-
sizeWidth:
|
|
147
|
+
showSize: l,
|
|
148
|
+
minName: h,
|
|
149
|
+
minModified: v,
|
|
150
|
+
minSize: b,
|
|
151
|
+
modifiedWidth: M,
|
|
152
|
+
sizeWidth: a
|
|
144
153
|
};
|
|
145
|
-
if (!
|
|
146
|
-
const
|
|
147
|
-
let
|
|
148
|
-
return
|
|
154
|
+
if (!l) {
|
|
155
|
+
const u = c.size, d = Math.max(0, 1 - u);
|
|
156
|
+
let w = (d > 0 ? c.modifiedAt / d : c.modifiedAt) * n;
|
|
157
|
+
return w = A(w, v, Math.max(v, n - h)), {
|
|
149
158
|
width: n,
|
|
150
159
|
showModified: i,
|
|
151
|
-
showSize:
|
|
152
|
-
minName:
|
|
153
|
-
minModified:
|
|
154
|
-
minSize:
|
|
155
|
-
modifiedWidth:
|
|
160
|
+
showSize: l,
|
|
161
|
+
minName: h,
|
|
162
|
+
minModified: v,
|
|
163
|
+
minSize: b,
|
|
164
|
+
modifiedWidth: w,
|
|
156
165
|
sizeWidth: 0
|
|
157
166
|
};
|
|
158
167
|
}
|
|
159
|
-
let r = Math.max(
|
|
160
|
-
const
|
|
161
|
-
if (r +
|
|
162
|
-
const
|
|
163
|
-
|
|
168
|
+
let r = Math.max(v, c.modifiedAt * n), e = Math.max(b, c.size * n);
|
|
169
|
+
const s = Math.max(0, n - h);
|
|
170
|
+
if (r + e > s) {
|
|
171
|
+
const u = r + e - s, d = Math.max(0, r - v), w = Math.max(0, e - b), F = d + w;
|
|
172
|
+
F > 0 && (r -= u * (d / F), e -= u * (w / F));
|
|
164
173
|
}
|
|
165
|
-
return r = Math.max(
|
|
174
|
+
return r = Math.max(v, r), e = Math.max(b, e), {
|
|
166
175
|
width: n,
|
|
167
176
|
showModified: i,
|
|
168
|
-
showSize:
|
|
169
|
-
minName:
|
|
170
|
-
minModified:
|
|
171
|
-
minSize:
|
|
177
|
+
showSize: l,
|
|
178
|
+
minName: h,
|
|
179
|
+
minModified: v,
|
|
180
|
+
minSize: b,
|
|
172
181
|
modifiedWidth: r,
|
|
173
|
-
sizeWidth:
|
|
182
|
+
sizeWidth: e
|
|
174
183
|
};
|
|
175
|
-
}),
|
|
176
|
-
const i =
|
|
184
|
+
}), H = () => S().modifiedWidth, q = () => S().sizeWidth, G = (n) => {
|
|
185
|
+
const i = S();
|
|
177
186
|
if (!i.showModified || i.width <= 0) return;
|
|
178
187
|
if (!i.showSize) {
|
|
179
|
-
const
|
|
180
|
-
if (
|
|
181
|
-
const
|
|
188
|
+
const u = o.listColumnRatios().size, d = Math.max(0, 1 - u);
|
|
189
|
+
if (d <= 0) return;
|
|
190
|
+
const w = i.width, F = i.modifiedWidth, ne = Math.max(0, w - F), ge = i.minName - ne, he = F - i.minModified, Z = A(n, ge, he);
|
|
182
191
|
if (Z === 0) return;
|
|
183
|
-
const
|
|
184
|
-
|
|
185
|
-
name:
|
|
186
|
-
modifiedAt:
|
|
187
|
-
size:
|
|
192
|
+
const xe = ne + Z, ve = F - Z, we = xe / w * d, Se = ve / w * d;
|
|
193
|
+
o.setListColumnRatios({
|
|
194
|
+
name: we,
|
|
195
|
+
modifiedAt: Se,
|
|
196
|
+
size: u
|
|
188
197
|
});
|
|
189
198
|
return;
|
|
190
199
|
}
|
|
191
|
-
const
|
|
192
|
-
if (
|
|
193
|
-
const r =
|
|
194
|
-
|
|
195
|
-
name: r /
|
|
196
|
-
modifiedAt:
|
|
197
|
-
size:
|
|
200
|
+
const l = i.width, c = i.modifiedWidth, h = i.sizeWidth, v = Math.max(0, l - c - h), b = i.minName - v, M = c - i.minModified, a = A(n, b, M);
|
|
201
|
+
if (a === 0) return;
|
|
202
|
+
const r = v + a, e = c - a;
|
|
203
|
+
o.setListColumnRatios({
|
|
204
|
+
name: r / l,
|
|
205
|
+
modifiedAt: e / l,
|
|
206
|
+
size: h / l
|
|
198
207
|
});
|
|
199
|
-
},
|
|
200
|
-
const i =
|
|
208
|
+
}, V = (n) => {
|
|
209
|
+
const i = S();
|
|
201
210
|
if (!i.showSize || i.width <= 0) return;
|
|
202
|
-
const
|
|
203
|
-
if (
|
|
204
|
-
const
|
|
205
|
-
|
|
206
|
-
name:
|
|
207
|
-
modifiedAt:
|
|
208
|
-
size: r /
|
|
211
|
+
const l = i.width, c = i.modifiedWidth, h = i.sizeWidth, v = i.minModified - c, b = h - i.minSize, M = A(n, v, b);
|
|
212
|
+
if (M === 0) return;
|
|
213
|
+
const a = c + M, r = h - M, e = Math.max(0, l - a - r);
|
|
214
|
+
o.setListColumnRatios({
|
|
215
|
+
name: e / l,
|
|
216
|
+
modifiedAt: a / l,
|
|
217
|
+
size: r / l
|
|
209
218
|
});
|
|
210
219
|
};
|
|
211
220
|
return (() => {
|
|
212
|
-
var n =
|
|
213
|
-
|
|
214
|
-
var
|
|
215
|
-
return ee(
|
|
221
|
+
var n = qe(), i = n.firstChild, l = i.firstChild, c = l.firstChild, h = c.firstChild, v = h.firstChild, b = v.nextSibling;
|
|
222
|
+
b.firstChild;
|
|
223
|
+
var M = i.nextSibling;
|
|
224
|
+
return ee(Y, i), c.$$click = () => k("name"), f(b, m(W, {
|
|
216
225
|
field: "name"
|
|
217
|
-
}), null),
|
|
226
|
+
}), null), f(l, m(P, {
|
|
218
227
|
get when() {
|
|
219
|
-
return
|
|
228
|
+
return S().showModified;
|
|
220
229
|
},
|
|
221
230
|
get children() {
|
|
222
|
-
return
|
|
231
|
+
return m(oe, {
|
|
223
232
|
direction: "horizontal",
|
|
224
|
-
onResize:
|
|
233
|
+
onResize: G
|
|
225
234
|
});
|
|
226
235
|
}
|
|
227
|
-
}), null),
|
|
236
|
+
}), null), f(i, m(P, {
|
|
228
237
|
get when() {
|
|
229
|
-
return
|
|
238
|
+
return S().showModified;
|
|
230
239
|
},
|
|
231
240
|
get children() {
|
|
232
|
-
var
|
|
233
|
-
return r.firstChild, r.$$click = () =>
|
|
241
|
+
var a = Be(), r = a.firstChild;
|
|
242
|
+
return r.firstChild, r.$$click = () => k("modifiedAt"), f(r, m(W, {
|
|
234
243
|
field: "modifiedAt"
|
|
235
|
-
}), null),
|
|
244
|
+
}), null), f(a, m(P, {
|
|
236
245
|
get when() {
|
|
237
|
-
return
|
|
246
|
+
return S().showSize;
|
|
238
247
|
},
|
|
239
248
|
get children() {
|
|
240
|
-
return
|
|
249
|
+
return m(oe, {
|
|
241
250
|
direction: "horizontal",
|
|
242
|
-
onResize:
|
|
251
|
+
onResize: V
|
|
243
252
|
});
|
|
244
253
|
}
|
|
245
|
-
}), null),
|
|
246
|
-
var
|
|
247
|
-
return
|
|
254
|
+
}), null), p((e) => {
|
|
255
|
+
var s = E("relative shrink-0", S().showSize && "border-r border-border"), u = `${H()}px`;
|
|
256
|
+
return s !== e.e && N(a, e.e = s), u !== e.t && L(a, "width", e.t = u), e;
|
|
248
257
|
}, {
|
|
249
258
|
e: void 0,
|
|
250
259
|
t: void 0
|
|
251
|
-
}),
|
|
260
|
+
}), a;
|
|
252
261
|
}
|
|
253
|
-
}), null),
|
|
262
|
+
}), null), f(i, m(P, {
|
|
254
263
|
get when() {
|
|
255
|
-
return
|
|
264
|
+
return S().showSize;
|
|
256
265
|
},
|
|
257
266
|
get children() {
|
|
258
|
-
var
|
|
259
|
-
return r.firstChild, r.$$click = () =>
|
|
267
|
+
var a = He(), r = a.firstChild;
|
|
268
|
+
return r.firstChild, r.$$click = () => k("size"), f(r, m(W, {
|
|
260
269
|
field: "size"
|
|
261
|
-
}), null),
|
|
270
|
+
}), null), p((e) => L(a, "width", `${q()}px`)), a;
|
|
262
271
|
}
|
|
263
|
-
}), null),
|
|
264
|
-
|
|
265
|
-
},
|
|
272
|
+
}), null), ie(M, "pointerdown", y.onPointerDown, !0), ie(M, "scroll", g.onScroll), ee((a) => {
|
|
273
|
+
z = a, g.scrollRef(a), o.setScrollContainer(a);
|
|
274
|
+
}, M), f(M, m(P, {
|
|
266
275
|
get when() {
|
|
267
|
-
return
|
|
276
|
+
return o.currentFiles().length > 0;
|
|
268
277
|
},
|
|
269
278
|
get fallback() {
|
|
270
279
|
return (() => {
|
|
271
|
-
var
|
|
272
|
-
return
|
|
280
|
+
var a = Xe();
|
|
281
|
+
return f(a, m(P, {
|
|
273
282
|
get when() {
|
|
274
|
-
return
|
|
283
|
+
return o.filterQueryApplied().trim();
|
|
275
284
|
},
|
|
276
285
|
get fallback() {
|
|
277
|
-
return
|
|
286
|
+
return Ye();
|
|
278
287
|
},
|
|
279
288
|
get children() {
|
|
280
289
|
return [(() => {
|
|
281
|
-
var r =
|
|
282
|
-
return
|
|
290
|
+
var r = Ne(), e = r.firstChild, s = e.nextSibling;
|
|
291
|
+
return s.nextSibling, f(r, () => o.filterQueryApplied(), s), r;
|
|
283
292
|
})(), (() => {
|
|
284
|
-
var r =
|
|
285
|
-
return r.$$click = () =>
|
|
293
|
+
var r = Oe();
|
|
294
|
+
return r.$$click = () => o.setFilterQuery(""), r;
|
|
286
295
|
})()];
|
|
287
296
|
}
|
|
288
|
-
})),
|
|
297
|
+
})), a;
|
|
289
298
|
})();
|
|
290
299
|
},
|
|
291
300
|
get children() {
|
|
292
|
-
var
|
|
293
|
-
return
|
|
301
|
+
var a = le();
|
|
302
|
+
return f(a, m(me, {
|
|
294
303
|
get each() {
|
|
295
|
-
return
|
|
304
|
+
return $();
|
|
296
305
|
},
|
|
297
|
-
children: (r) =>
|
|
306
|
+
children: (r) => m(Ue, {
|
|
298
307
|
item: r,
|
|
299
308
|
formatSize: j,
|
|
300
|
-
formatDate:
|
|
309
|
+
formatDate: O,
|
|
301
310
|
get showModified() {
|
|
302
|
-
return
|
|
311
|
+
return S().showModified;
|
|
303
312
|
},
|
|
304
313
|
get showSize() {
|
|
305
|
-
return
|
|
314
|
+
return S().showSize;
|
|
306
315
|
},
|
|
307
316
|
get modifiedWidthPx() {
|
|
308
|
-
return
|
|
317
|
+
return H();
|
|
309
318
|
},
|
|
310
319
|
get sizeWidthPx() {
|
|
311
|
-
return
|
|
320
|
+
return q();
|
|
312
321
|
},
|
|
313
322
|
get instanceId() {
|
|
314
|
-
return
|
|
323
|
+
return I();
|
|
315
324
|
},
|
|
316
325
|
get enableDragDrop() {
|
|
317
326
|
return R();
|
|
318
327
|
},
|
|
319
328
|
dragContext: D,
|
|
320
|
-
registerRow:
|
|
329
|
+
registerRow: U
|
|
321
330
|
})
|
|
322
|
-
})),
|
|
323
|
-
var
|
|
324
|
-
return
|
|
331
|
+
})), p((r) => {
|
|
332
|
+
var e = `${g.paddingTop()}px`, s = `${g.paddingBottom()}px`;
|
|
333
|
+
return e !== r.e && L(a, "padding-top", r.e = e), s !== r.t && L(a, "padding-bottom", r.t = s), r;
|
|
325
334
|
}, {
|
|
326
335
|
e: void 0,
|
|
327
336
|
t: void 0
|
|
328
|
-
}),
|
|
337
|
+
}), a;
|
|
329
338
|
}
|
|
330
|
-
})),
|
|
331
|
-
|
|
332
|
-
|
|
339
|
+
}), null), f(M, m(P, {
|
|
340
|
+
get when() {
|
|
341
|
+
return y.overlayStyle();
|
|
342
|
+
},
|
|
343
|
+
children: (a) => (() => {
|
|
344
|
+
var r = le();
|
|
345
|
+
return N(r, Ae), p((e) => Ce(r, a(), e)), r;
|
|
346
|
+
})()
|
|
347
|
+
}), null), p((a) => {
|
|
348
|
+
var r = E("flex flex-col h-full min-h-0", t.class), e = E("relative flex-1 min-w-0", S().showModified && "border-r border-border");
|
|
349
|
+
return r !== a.e && N(n, a.e = r), e !== a.t && N(l, a.t = e), a;
|
|
333
350
|
}, {
|
|
334
351
|
e: void 0,
|
|
335
352
|
t: void 0
|
|
336
353
|
}), n;
|
|
337
354
|
})();
|
|
338
355
|
}
|
|
339
|
-
function
|
|
340
|
-
const
|
|
356
|
+
function Ue(t) {
|
|
357
|
+
const o = fe(), D = () => o.isSelected(t.item.id), R = () => o.getFilterMatchForId(t.item.id), I = $e(() => t.item), C = Te(o, I, {
|
|
341
358
|
source: "list"
|
|
342
359
|
});
|
|
343
|
-
let
|
|
344
|
-
const
|
|
345
|
-
let
|
|
346
|
-
const [j,
|
|
347
|
-
if (!
|
|
348
|
-
const
|
|
349
|
-
return
|
|
360
|
+
let g, $ = null, T = 0, z = 0, x = !1;
|
|
361
|
+
const U = 5, Q = 500;
|
|
362
|
+
let k = null;
|
|
363
|
+
const [j, O] = ue(!1), y = () => g === "touch" || g === "pen", W = () => t.item.type === "folder", B = () => W() && t.enableDragDrop && t.dragContext, X = () => {
|
|
364
|
+
if (!B() || !t.dragContext) return !1;
|
|
365
|
+
const e = t.dragContext.dragState();
|
|
366
|
+
return e.isDragging ? t.dragContext.canDropOn(e.draggedItems, t.item.path, t.item, t.instanceId) : !1;
|
|
367
|
+
}, K = () => {
|
|
368
|
+
if (!t.dragContext) return !1;
|
|
369
|
+
const e = t.dragContext.dragState();
|
|
370
|
+
return e.isDragging ? e.draggedItems.some((s) => s.item.id === t.item.id) : !1;
|
|
371
|
+
}, Y = () => {
|
|
372
|
+
k !== null && (clearTimeout(k), k = null);
|
|
350
373
|
}, J = () => {
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
},
|
|
355
|
-
|
|
356
|
-
}, p = () => {
|
|
357
|
-
typeof document > "u" || (document.removeEventListener("pointermove", X, !0), document.removeEventListener("pointerup", G, !0), document.removeEventListener("pointercancel", n, !0));
|
|
358
|
-
}, M = () => {
|
|
359
|
-
typeof document > "u" || (document.addEventListener("pointermove", X, !0), document.addEventListener("pointerup", G, !0), document.addEventListener("pointercancel", n, !0));
|
|
360
|
-
}, A = (t) => {
|
|
361
|
-
O(), p(), v && e.dragContext && e.dragContext.endDrag(t), I = null, v = !1;
|
|
374
|
+
typeof document > "u" || (document.removeEventListener("pointermove", q, !0), document.removeEventListener("pointerup", G, !0), document.removeEventListener("pointercancel", V, !0));
|
|
375
|
+
}, A = () => {
|
|
376
|
+
typeof document > "u" || (document.addEventListener("pointermove", q, !0), document.addEventListener("pointerup", G, !0), document.addEventListener("pointercancel", V, !0));
|
|
377
|
+
}, S = (e) => {
|
|
378
|
+
Y(), J(), x && t.dragContext && t.dragContext.endDrag(e), $ = null, x = !1;
|
|
362
379
|
};
|
|
363
|
-
|
|
364
|
-
|
|
380
|
+
de(() => {
|
|
381
|
+
t.registerRow(t.item.id, null), S(!1);
|
|
365
382
|
});
|
|
366
|
-
const
|
|
367
|
-
if (!
|
|
368
|
-
|
|
369
|
-
const
|
|
370
|
-
item:
|
|
371
|
-
sourceInstanceId:
|
|
372
|
-
sourcePath:
|
|
383
|
+
const H = (e, s) => {
|
|
384
|
+
if (!t.enableDragDrop || !t.dragContext || x) return;
|
|
385
|
+
x = !0, D() || o.selectItem(t.item.id, !1);
|
|
386
|
+
const u = o.getSelectedItemsList(), w = (u.length > 0 && D() ? u : [t.item]).map((F) => ({
|
|
387
|
+
item: F,
|
|
388
|
+
sourceInstanceId: t.instanceId,
|
|
389
|
+
sourcePath: o.currentPath()
|
|
373
390
|
}));
|
|
374
|
-
if (
|
|
391
|
+
if (y() && "vibrate" in navigator)
|
|
375
392
|
try {
|
|
376
393
|
navigator.vibrate(50);
|
|
377
394
|
} catch {
|
|
378
395
|
}
|
|
379
|
-
|
|
380
|
-
},
|
|
381
|
-
if (
|
|
382
|
-
const
|
|
383
|
-
if (
|
|
384
|
-
|
|
396
|
+
t.dragContext.startDrag(w, e, s);
|
|
397
|
+
}, q = (e) => {
|
|
398
|
+
if ($ !== e.pointerId) return;
|
|
399
|
+
const s = e.clientX - T, u = e.clientY - z, d = Math.sqrt(s * s + u * u);
|
|
400
|
+
if (y() && !x && d > 10) {
|
|
401
|
+
S(!1);
|
|
385
402
|
return;
|
|
386
403
|
}
|
|
387
|
-
!
|
|
388
|
-
}, G = (
|
|
389
|
-
|
|
390
|
-
},
|
|
391
|
-
|
|
392
|
-
},
|
|
393
|
-
|
|
394
|
-
|
|
404
|
+
!y() && !x && d > U && H(e.clientX, e.clientY), x && t.dragContext && t.dragContext.updateDrag(e.clientX, e.clientY);
|
|
405
|
+
}, G = (e) => {
|
|
406
|
+
$ === e.pointerId && (C.onPointerUp(), S(!0));
|
|
407
|
+
}, V = (e) => {
|
|
408
|
+
$ === e.pointerId && (C.onPointerCancel(), S(!1));
|
|
409
|
+
}, n = (e) => {
|
|
410
|
+
g = e.pointerType, C.onPointerDown(e), !(e.pointerType === "mouse" && e.button !== 0) && (!t.enableDragDrop || !t.dragContext || ($ = e.pointerId, T = e.clientX, z = e.clientY, x = !1, A(), y() && (Y(), k = setTimeout(() => {
|
|
411
|
+
$ !== null && !x && H(T, z);
|
|
395
412
|
}, Q))));
|
|
396
|
-
},
|
|
397
|
-
|
|
398
|
-
},
|
|
399
|
-
if (!
|
|
400
|
-
const
|
|
401
|
-
if (!
|
|
402
|
-
|
|
403
|
-
const
|
|
404
|
-
|
|
405
|
-
instanceId:
|
|
406
|
-
targetPath:
|
|
407
|
-
targetItem:
|
|
408
|
-
},
|
|
409
|
-
},
|
|
410
|
-
if (!
|
|
411
|
-
|
|
412
|
-
const
|
|
413
|
-
|
|
414
|
-
},
|
|
415
|
-
if (
|
|
416
|
-
|
|
413
|
+
}, i = (e) => {
|
|
414
|
+
g = e.pointerType, C.onPointerMove(e);
|
|
415
|
+
}, l = (e) => {
|
|
416
|
+
if (!B() || !t.dragContext) return;
|
|
417
|
+
const s = t.dragContext.dragState();
|
|
418
|
+
if (!s.isDragging) return;
|
|
419
|
+
O(!0);
|
|
420
|
+
const u = t.dragContext.canDropOn(s.draggedItems, t.item.path, t.item, t.instanceId), w = e.currentTarget?.getBoundingClientRect() ?? null;
|
|
421
|
+
t.dragContext.setDropTarget({
|
|
422
|
+
instanceId: t.instanceId,
|
|
423
|
+
targetPath: t.item.path,
|
|
424
|
+
targetItem: t.item
|
|
425
|
+
}, u, w);
|
|
426
|
+
}, c = (e) => {
|
|
427
|
+
if (!t.dragContext) return;
|
|
428
|
+
O(!1);
|
|
429
|
+
const s = t.dragContext.dragState();
|
|
430
|
+
s.isDragging && s.dropTarget?.targetPath === t.item.path && t.dragContext.setDropTarget(null, !1);
|
|
431
|
+
}, h = (e) => {
|
|
432
|
+
if (x) {
|
|
433
|
+
x = !1;
|
|
417
434
|
return;
|
|
418
435
|
}
|
|
419
|
-
if (!
|
|
420
|
-
if (
|
|
421
|
-
|
|
436
|
+
if (!C.consumeClickSuppression(e)) {
|
|
437
|
+
if (y()) {
|
|
438
|
+
o.openItem(t.item);
|
|
439
|
+
return;
|
|
440
|
+
}
|
|
441
|
+
if (e.shiftKey) {
|
|
442
|
+
o.selectRangeTo(t.item.id, ae(e));
|
|
422
443
|
return;
|
|
423
444
|
}
|
|
424
|
-
|
|
445
|
+
o.selectItem(t.item.id, ae(e));
|
|
425
446
|
}
|
|
426
|
-
},
|
|
427
|
-
|
|
428
|
-
},
|
|
429
|
-
if (
|
|
430
|
-
|
|
431
|
-
const
|
|
432
|
-
|
|
433
|
-
x:
|
|
434
|
-
y:
|
|
435
|
-
triggerItem:
|
|
436
|
-
items:
|
|
447
|
+
}, v = () => {
|
|
448
|
+
y() || o.openItem(t.item);
|
|
449
|
+
}, b = (e) => {
|
|
450
|
+
if (e.preventDefault(), e.stopPropagation(), y()) return;
|
|
451
|
+
o.ensureContextMenuSelection(t.item.id);
|
|
452
|
+
const s = o.getSelectedItemsList(), u = s.length > 0 ? s : [t.item];
|
|
453
|
+
o.showContextMenu(ke({
|
|
454
|
+
x: e.clientX,
|
|
455
|
+
y: e.clientY,
|
|
456
|
+
triggerItem: t.item,
|
|
457
|
+
items: u,
|
|
437
458
|
source: "list"
|
|
438
459
|
}));
|
|
439
|
-
},
|
|
460
|
+
}, M = () => t.dragContext?.dragState(), a = () => M()?.isDragging ?? !1, r = () => j() && a() && B();
|
|
440
461
|
return (() => {
|
|
441
|
-
var
|
|
442
|
-
return ee((
|
|
443
|
-
|
|
444
|
-
},
|
|
462
|
+
var e = Ge(), s = e.firstChild, u = s.firstChild;
|
|
463
|
+
return ee((d) => {
|
|
464
|
+
t.registerRow(t.item.id, d);
|
|
465
|
+
}, e), be(e, Me({
|
|
445
466
|
get "data-file-browser-item-id"() {
|
|
446
|
-
return
|
|
467
|
+
return t.item.id;
|
|
447
468
|
},
|
|
448
469
|
get "data-file-browser-item-path"() {
|
|
449
|
-
return
|
|
470
|
+
return t.item.path;
|
|
450
471
|
}
|
|
451
|
-
},
|
|
452
|
-
onClick:
|
|
453
|
-
onDblClick:
|
|
454
|
-
onContextMenu:
|
|
455
|
-
onPointerDown:
|
|
456
|
-
onPointerMove:
|
|
457
|
-
onPointerEnter:
|
|
458
|
-
onPointerLeave:
|
|
472
|
+
}, Fe, {
|
|
473
|
+
onClick: h,
|
|
474
|
+
onDblClick: v,
|
|
475
|
+
onContextMenu: b,
|
|
476
|
+
onPointerDown: n,
|
|
477
|
+
onPointerMove: i,
|
|
478
|
+
onPointerEnter: l,
|
|
479
|
+
onPointerLeave: c,
|
|
459
480
|
get class() {
|
|
460
|
-
return
|
|
481
|
+
return E(
|
|
461
482
|
"group w-full h-8 flex items-center text-xs cursor-pointer",
|
|
462
483
|
"transition-all duration-150 ease-out",
|
|
463
484
|
"hover:bg-accent/50",
|
|
464
485
|
"focus:outline-none focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-ring",
|
|
465
486
|
D() && "bg-accent text-accent-foreground",
|
|
466
487
|
// Drag state styling - being dragged items become translucent
|
|
467
|
-
|
|
488
|
+
K() && "opacity-40 scale-[0.98]",
|
|
468
489
|
// Drop target styling - enhanced visual feedback
|
|
469
|
-
|
|
470
|
-
|
|
490
|
+
r() && X() && ["bg-primary/15 outline outline-2 outline-primary/60", "scale-[1.01] shadow-sm shadow-primary/10"],
|
|
491
|
+
r() && !X() && ["bg-destructive/10 outline outline-2 outline-dashed outline-destructive/50"]
|
|
471
492
|
);
|
|
472
493
|
}
|
|
473
|
-
}), !1, !0),
|
|
494
|
+
}), !1, !0), f(u, m(Pe, {
|
|
474
495
|
get item() {
|
|
475
|
-
return
|
|
496
|
+
return t.item;
|
|
476
497
|
},
|
|
477
498
|
class: "w-4 h-4"
|
|
478
|
-
})),
|
|
499
|
+
})), f(s, m(Ve, {
|
|
479
500
|
get name() {
|
|
480
|
-
return
|
|
501
|
+
return t.item.name;
|
|
481
502
|
},
|
|
482
503
|
get match() {
|
|
483
504
|
return R();
|
|
484
505
|
}
|
|
485
|
-
}), null),
|
|
506
|
+
}), null), f(e, m(P, {
|
|
486
507
|
get when() {
|
|
487
|
-
return
|
|
508
|
+
return t.showModified;
|
|
488
509
|
},
|
|
489
510
|
get children() {
|
|
490
|
-
var
|
|
491
|
-
return
|
|
511
|
+
var d = se();
|
|
512
|
+
return f(d, () => t.formatDate(t.item.modifiedAt)), p((w) => L(d, "width", `${t.modifiedWidthPx}px`)), d;
|
|
492
513
|
}
|
|
493
|
-
}), null),
|
|
514
|
+
}), null), f(e, m(P, {
|
|
494
515
|
get when() {
|
|
495
|
-
return
|
|
516
|
+
return t.showSize;
|
|
496
517
|
},
|
|
497
518
|
get children() {
|
|
498
|
-
var
|
|
499
|
-
return
|
|
500
|
-
var
|
|
501
|
-
return () =>
|
|
502
|
-
})()),
|
|
519
|
+
var d = se();
|
|
520
|
+
return f(d, (() => {
|
|
521
|
+
var w = ce(() => t.item.type === "folder");
|
|
522
|
+
return () => w() ? "-" : t.formatSize(t.item.size);
|
|
523
|
+
})()), p((w) => L(d, "width", `${t.sizeWidthPx}px`)), d;
|
|
503
524
|
}
|
|
504
|
-
}), null),
|
|
525
|
+
}), null), e;
|
|
505
526
|
})();
|
|
506
527
|
}
|
|
507
|
-
|
|
528
|
+
De(["click", "pointerdown"]);
|
|
508
529
|
export {
|
|
509
|
-
|
|
530
|
+
ut as FileListView
|
|
510
531
|
};
|