@floegence/floe-webapp-core 0.35.32 → 0.35.34
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/DirectoryTree.js +84 -86
- package/dist/components/file-browser/FileContextMenu.d.ts +2 -2
- package/dist/components/file-browser/FileContextMenu.js +300 -142
- package/dist/components/file-browser/FileGridView.js +50 -45
- package/dist/components/file-browser/FileIcons.d.ts +10 -2
- package/dist/components/file-browser/FileIcons.js +289 -181
- package/dist/components/file-browser/FileListView.js +99 -94
- package/dist/components/file-browser/contextMenuEvent.d.ts +10 -0
- package/dist/components/file-browser/contextMenuEvent.js +19 -0
- package/dist/components/file-browser/index.d.ts +2 -2
- package/dist/components/file-browser/longPressContextMenu.d.ts +1 -0
- package/dist/components/file-browser/longPressContextMenu.js +45 -32
- package/dist/components/file-browser/types.d.ts +23 -1
- package/dist/components/layout/Shell.d.ts +8 -0
- package/dist/components/layout/Shell.js +157 -138
- package/dist/components/layout/Sidebar.d.ts +2 -0
- package/dist/components/layout/Sidebar.js +39 -38
- package/dist/components/layout/sidebarVisibilityMotion.d.ts +22 -0
- package/dist/components/layout/sidebarVisibilityMotion.js +16 -0
- package/dist/components/ui/Dropdown.d.ts +0 -1
- package/dist/components/ui/Dropdown.js +150 -204
- package/dist/components/ui/menuUtils.d.ts +15 -0
- package/dist/components/ui/menuUtils.js +60 -0
- package/dist/components/ui/picker/PickerBase.js +90 -96
- package/dist/context/LayoutContext.d.ts +5 -0
- package/dist/context/LayoutContext.js +58 -46
- package/dist/file-browser.js +35 -31
- package/dist/full.js +411 -407
- package/package.json +1 -1
|
@@ -1,39 +1,40 @@
|
|
|
1
|
-
import { insert as
|
|
2
|
-
import { createMemo as
|
|
3
|
-
import { cn as
|
|
4
|
-
import { useFileBrowser as
|
|
1
|
+
import { insert as l, createComponent as s, effect as v, className as D, template as m, setAttribute as X, spread as Y, mergeProps as q, memo as z, setStyleProperty as J, delegateEvents as K } from "solid-js/web";
|
|
2
|
+
import { createMemo as I, For as Q, untrack as W, createSignal as Z, Show as w } from "solid-js";
|
|
3
|
+
import { cn as f } from "../../utils/cn.js";
|
|
4
|
+
import { useFileBrowser as _ } from "./FileBrowserContext.js";
|
|
5
5
|
import { useFileBrowserDrag as ee } from "../../context/FileBrowserDragContext.js";
|
|
6
|
-
import {
|
|
7
|
-
import { ChevronRight as
|
|
8
|
-
import { createLongPressContextMenuHandlers as
|
|
9
|
-
import { fileBrowserTouchTargetAttrs as
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
import { FileItemIcon as te } from "./FileIcons.js";
|
|
7
|
+
import { ChevronRight as ne } from "../icons/index.js";
|
|
8
|
+
import { createLongPressContextMenuHandlers as re } from "./longPressContextMenu.js";
|
|
9
|
+
import { fileBrowserTouchTargetAttrs as ie } from "./touchInteractionGuard.js";
|
|
10
|
+
import { createItemContextMenuEvent as ae } from "./contextMenuEvent.js";
|
|
11
|
+
var k = /* @__PURE__ */ m("<div>"), oe = /* @__PURE__ */ m("<button type=button>"), le = /* @__PURE__ */ m('<span class="ml-auto mr-2 text-[10px] text-muted-foreground/60 opacity-0 group-hover:opacity-100 transition-opacity">'), se = /* @__PURE__ */ m('<div class="flex flex-col"><div><button type=button><span class="flex-shrink-0 w-4 h-4"></span><span class=truncate>'), ce = /* @__PURE__ */ m('<span class="flex-shrink-0 w-3.5 h-3.5">');
|
|
12
|
+
function ye(e) {
|
|
13
|
+
const o = _(), i = ee(), b = () => (e.enableDragDrop ?? !0) && !!i, h = () => e.instanceId ?? "default", g = I(() => o.files().filter((r) => r.type === "folder"));
|
|
13
14
|
return (() => {
|
|
14
|
-
var r =
|
|
15
|
-
return r.$$contextmenu = (
|
|
15
|
+
var r = k();
|
|
16
|
+
return r.$$contextmenu = (C) => C.preventDefault(), l(r, s(M, {
|
|
16
17
|
get items() {
|
|
17
|
-
return
|
|
18
|
+
return g();
|
|
18
19
|
},
|
|
19
20
|
depth: 0,
|
|
20
21
|
get instanceId() {
|
|
21
|
-
return
|
|
22
|
+
return h();
|
|
22
23
|
},
|
|
23
24
|
get enableDragDrop() {
|
|
24
|
-
return
|
|
25
|
+
return b();
|
|
25
26
|
},
|
|
26
27
|
dragContext: i
|
|
27
|
-
})),
|
|
28
|
+
})), v(() => D(r, f("flex flex-col", e.class))), r;
|
|
28
29
|
})();
|
|
29
30
|
}
|
|
30
|
-
function
|
|
31
|
-
const
|
|
32
|
-
return
|
|
31
|
+
function M(e) {
|
|
32
|
+
const o = I(() => e.items.filter((i) => i.type === "folder"));
|
|
33
|
+
return s(Q, {
|
|
33
34
|
get each() {
|
|
34
|
-
return
|
|
35
|
+
return o();
|
|
35
36
|
},
|
|
36
|
-
children: (i) =>
|
|
37
|
+
children: (i) => s(ge, {
|
|
37
38
|
item: i,
|
|
38
39
|
get depth() {
|
|
39
40
|
return e.depth;
|
|
@@ -50,110 +51,107 @@ function F(e) {
|
|
|
50
51
|
})
|
|
51
52
|
});
|
|
52
53
|
}
|
|
53
|
-
function
|
|
54
|
-
const
|
|
55
|
-
selectOnOpen: !1
|
|
54
|
+
function ge(e) {
|
|
55
|
+
const o = _(), i = () => o.isExpanded(e.item.path), b = () => o.currentPath() === e.item.path, h = W(() => e.item), g = re(o, h, {
|
|
56
|
+
selectOnOpen: !1,
|
|
57
|
+
source: "tree"
|
|
56
58
|
});
|
|
57
59
|
let r;
|
|
58
|
-
const [
|
|
60
|
+
const [C, T] = Z(!1), F = () => r === "touch" || r === "pen", $ = I(() => e.item.children?.filter((t) => t.type === "folder").length ?? 0), x = () => $() > 0, p = () => {
|
|
59
61
|
if (!e.enableDragDrop || !e.dragContext) return !1;
|
|
60
62
|
const t = e.dragContext.dragState();
|
|
61
63
|
return t.isDragging ? e.dragContext.canDropOn(t.draggedItems, e.item.path, e.item, e.instanceId) : !1;
|
|
62
|
-
},
|
|
63
|
-
r = t.pointerType,
|
|
64
|
+
}, L = () => e.dragContext?.dragState(), A = () => L()?.isDragging ?? !1, E = () => C() && A() && e.enableDragDrop, B = (t) => {
|
|
65
|
+
r = t.pointerType, g.onPointerDown(t);
|
|
66
|
+
}, O = (t) => {
|
|
67
|
+
r = t.pointerType, g.onPointerMove(t);
|
|
64
68
|
}, H = (t) => {
|
|
65
|
-
r = t.pointerType,
|
|
69
|
+
r = t.pointerType, g.onPointerUp();
|
|
66
70
|
}, N = (t) => {
|
|
67
|
-
r = t.pointerType,
|
|
71
|
+
r = t.pointerType, g.onPointerCancel();
|
|
68
72
|
}, R = (t) => {
|
|
69
|
-
r = t.pointerType, d.onPointerCancel();
|
|
70
|
-
}, U = (t) => {
|
|
71
73
|
if (!e.enableDragDrop || !e.dragContext) return;
|
|
72
74
|
const a = e.dragContext.dragState();
|
|
73
75
|
if (!a.isDragging) return;
|
|
74
|
-
|
|
75
|
-
const
|
|
76
|
+
T(!0);
|
|
77
|
+
const d = e.dragContext.canDropOn(a.draggedItems, e.item.path, e.item, e.instanceId), P = t.currentTarget?.getBoundingClientRect() ?? null;
|
|
76
78
|
e.dragContext.setDropTarget({
|
|
77
79
|
instanceId: e.instanceId,
|
|
78
80
|
targetPath: e.item.path,
|
|
79
81
|
targetItem: e.item
|
|
80
|
-
},
|
|
81
|
-
},
|
|
82
|
+
}, d, P);
|
|
83
|
+
}, U = (t) => {
|
|
82
84
|
if (!e.dragContext) return;
|
|
83
|
-
|
|
85
|
+
T(!1);
|
|
84
86
|
const a = e.dragContext.dragState();
|
|
85
87
|
a.isDragging && a.dropTarget?.targetPath === e.item.path && e.dragContext.setDropTarget(null, !1);
|
|
88
|
+
}, V = (t) => {
|
|
89
|
+
g.consumeClickSuppression(t) || o.navigateTo(h);
|
|
86
90
|
}, j = (t) => {
|
|
87
|
-
|
|
88
|
-
}, G = (t) => {
|
|
89
|
-
t.preventDefault(), t.stopPropagation(), !L() && l.showContextMenu({
|
|
91
|
+
t.preventDefault(), t.stopPropagation(), !F() && o.showContextMenu(ae({
|
|
90
92
|
x: t.clientX,
|
|
91
93
|
y: t.clientY,
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
94
|
+
triggerItem: e.item,
|
|
95
|
+
items: [e.item],
|
|
96
|
+
source: "tree"
|
|
97
|
+
}));
|
|
98
|
+
}, G = () => {
|
|
99
|
+
x() && o.toggleFolder(e.item.path);
|
|
96
100
|
};
|
|
97
101
|
return (() => {
|
|
98
|
-
var t = se(), a = t.firstChild,
|
|
99
|
-
return a.addEventListener("pointerleave",
|
|
102
|
+
var t = se(), a = t.firstChild, d = a.firstChild, y = d.firstChild, P = y.nextSibling;
|
|
103
|
+
return a.addEventListener("pointerleave", U), a.addEventListener("pointerenter", R), l(a, s(w, {
|
|
100
104
|
get when() {
|
|
101
|
-
return
|
|
105
|
+
return x();
|
|
102
106
|
},
|
|
103
107
|
get fallback() {
|
|
104
108
|
return ce();
|
|
105
109
|
},
|
|
106
110
|
get children() {
|
|
107
111
|
var n = oe();
|
|
108
|
-
return n.$$click =
|
|
112
|
+
return n.$$click = G, l(n, s(ne, {
|
|
109
113
|
class: "w-3 h-3 opacity-50"
|
|
110
|
-
})),
|
|
111
|
-
var
|
|
112
|
-
return
|
|
114
|
+
})), v((c) => {
|
|
115
|
+
var u = f("flex-shrink-0 w-3.5 h-3.5 flex items-center justify-center cursor-pointer", "transition-transform duration-150", i() && "rotate-90", "focus:outline-none focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-sidebar-ring"), S = i() ? "Collapse folder" : "Expand folder";
|
|
116
|
+
return u !== c.e && D(n, c.e = u), S !== c.t && X(n, "aria-label", c.t = S), c;
|
|
113
117
|
}, {
|
|
114
118
|
e: void 0,
|
|
115
119
|
t: void 0
|
|
116
120
|
}), n;
|
|
117
121
|
}
|
|
118
|
-
}),
|
|
119
|
-
onClick:
|
|
120
|
-
onContextMenu:
|
|
122
|
+
}), d), Y(d, q(ie, {
|
|
123
|
+
onClick: V,
|
|
124
|
+
onContextMenu: j,
|
|
121
125
|
onPointerDown: B,
|
|
122
|
-
onPointerMove:
|
|
123
|
-
onPointerUp:
|
|
124
|
-
onPointerCancel:
|
|
126
|
+
onPointerMove: O,
|
|
127
|
+
onPointerUp: H,
|
|
128
|
+
onPointerCancel: N,
|
|
125
129
|
get class() {
|
|
126
|
-
return
|
|
130
|
+
return f("flex items-center gap-1 flex-1 min-w-0 text-left cursor-pointer pl-1", "focus:outline-none focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-sidebar-ring");
|
|
127
131
|
}
|
|
128
|
-
}), !1, !0),
|
|
129
|
-
get
|
|
130
|
-
return
|
|
132
|
+
}), !1, !0), l(y, s(te, {
|
|
133
|
+
get item() {
|
|
134
|
+
return e.item;
|
|
131
135
|
},
|
|
132
|
-
get
|
|
133
|
-
return
|
|
134
|
-
class: "w-4 h-4"
|
|
135
|
-
});
|
|
136
|
+
get open() {
|
|
137
|
+
return i();
|
|
136
138
|
},
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
class: "w-4 h-4"
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
})), s(P, () => e.item.name), s(g, o(v, {
|
|
139
|
+
class: "w-4 h-4"
|
|
140
|
+
})), l(P, () => e.item.name), l(d, s(w, {
|
|
143
141
|
get when() {
|
|
144
|
-
return
|
|
142
|
+
return x();
|
|
145
143
|
},
|
|
146
144
|
get children() {
|
|
147
145
|
var n = le();
|
|
148
|
-
return
|
|
146
|
+
return l(n, $), n;
|
|
149
147
|
}
|
|
150
|
-
}), null),
|
|
148
|
+
}), null), l(t, s(w, {
|
|
151
149
|
get when() {
|
|
152
|
-
return
|
|
150
|
+
return z(() => !!i())() && x();
|
|
153
151
|
},
|
|
154
152
|
get children() {
|
|
155
|
-
var n =
|
|
156
|
-
return
|
|
153
|
+
var n = k();
|
|
154
|
+
return l(n, s(M, {
|
|
157
155
|
get items() {
|
|
158
156
|
return e.item.children ?? [];
|
|
159
157
|
},
|
|
@@ -169,19 +167,19 @@ function de(e) {
|
|
|
169
167
|
get dragContext() {
|
|
170
168
|
return e.dragContext;
|
|
171
169
|
}
|
|
172
|
-
})),
|
|
170
|
+
})), v(() => D(n, f("overflow-hidden transition-all duration-200", i() ? "opacity-100" : "opacity-0"))), n;
|
|
173
171
|
}
|
|
174
|
-
}), null),
|
|
175
|
-
var c =
|
|
172
|
+
}), null), v((n) => {
|
|
173
|
+
var c = f(
|
|
176
174
|
"group flex items-center w-full py-1 text-xs",
|
|
177
175
|
"transition-all duration-150 ease-out",
|
|
178
176
|
"hover:bg-sidebar-accent/60",
|
|
179
|
-
|
|
177
|
+
b() && "bg-sidebar-accent text-sidebar-accent-foreground font-medium",
|
|
180
178
|
// Drop target styling - enhanced visual feedback
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
),
|
|
184
|
-
return c !== n.e &&
|
|
179
|
+
E() && p() && ["bg-primary/15 outline outline-2 outline-primary/60", "shadow-sm shadow-primary/10"],
|
|
180
|
+
E() && !p() && ["bg-destructive/10 outline outline-2 outline-dashed outline-destructive/50"]
|
|
181
|
+
), u = `${8 + e.depth * 12}px`;
|
|
182
|
+
return c !== n.e && D(a, n.e = c), u !== n.t && J(a, "padding-left", n.t = u), n;
|
|
185
183
|
}, {
|
|
186
184
|
e: void 0,
|
|
187
185
|
t: void 0
|
|
@@ -190,5 +188,5 @@ function de(e) {
|
|
|
190
188
|
}
|
|
191
189
|
K(["contextmenu", "click"]);
|
|
192
190
|
export {
|
|
193
|
-
|
|
191
|
+
ye as DirectoryTree
|
|
194
192
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ContextMenuActionType, ContextMenuCallbacks, ContextMenuEvent, ContextMenuItem, FileItem } from './types';
|
|
2
2
|
/**
|
|
3
3
|
* Built-in menu action types (excluding 'custom').
|
|
4
4
|
*/
|
|
@@ -29,7 +29,7 @@ export interface FileContextMenuProps {
|
|
|
29
29
|
hideItems?: HideItemsValue;
|
|
30
30
|
}
|
|
31
31
|
export declare function createDefaultContextMenuItems(callbacks?: ContextMenuCallbacks): ContextMenuItem[];
|
|
32
|
-
export declare function dispatchContextMenuAction(item: ContextMenuItem, items: FileItem[], callbacks?: ContextMenuCallbacks): void;
|
|
32
|
+
export declare function dispatchContextMenuAction(item: ContextMenuItem, items: FileItem[], callbacks?: ContextMenuCallbacks, event?: ContextMenuEvent): void;
|
|
33
33
|
/**
|
|
34
34
|
* Context menu for file browser items
|
|
35
35
|
*/
|