@floegence/floe-webapp-core 0.35.4 → 0.35.5
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.
|
@@ -32,6 +32,8 @@ export interface FileBrowserProps {
|
|
|
32
32
|
header?: JSX.Element;
|
|
33
33
|
/** Actions rendered on the right side of the Explorer sidebar header */
|
|
34
34
|
sidebarHeaderActions?: JSX.Element;
|
|
35
|
+
/** Actions rendered at the end of the main file browser toolbar */
|
|
36
|
+
toolbarEndActions?: JSX.Element;
|
|
35
37
|
/** Sidebar width in pixels */
|
|
36
38
|
sidebarWidth?: number;
|
|
37
39
|
/** Persisted sidebar width storage key (defaults to a shared user preference key) */
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { createComponent as n, insert as i, use as
|
|
2
|
-
import { onMount as
|
|
3
|
-
import { cn as
|
|
4
|
-
import { useLayout as
|
|
5
|
-
import { useFileBrowserDrag as
|
|
1
|
+
import { createComponent as n, insert as i, use as F, memo as P, effect as _, className as k, template as w, delegateEvents as z } from "solid-js/web";
|
|
2
|
+
import { onMount as W, onCleanup as E, createEffect as K, Show as u } from "solid-js";
|
|
3
|
+
import { cn as L } from "../../utils/cn.js";
|
|
4
|
+
import { useLayout as B } from "../../context/LayoutContext.js";
|
|
5
|
+
import { useFileBrowserDrag as O } from "../../context/FileBrowserDragContext.js";
|
|
6
6
|
import { deferAfterPaint as V } from "../../utils/defer.js";
|
|
7
7
|
import { FileBrowserProvider as H, useFileBrowser as N } from "./FileBrowserContext.js";
|
|
8
8
|
import { SidebarPane as T } from "../layout/SidebarPane.js";
|
|
@@ -13,7 +13,7 @@ import { FileBrowserToolbar as q } from "./FileBrowserToolbar.js";
|
|
|
13
13
|
import { FileContextMenu as J } from "./FileContextMenu.js";
|
|
14
14
|
import { DragPreview as U } from "./DragPreview.js";
|
|
15
15
|
var X = /* @__PURE__ */ w('<div class="border-b border-border">'), Y = /* @__PURE__ */ w('<div><div class="flex flex-1 min-h-0 relative"><div class="flex-1 min-w-0 flex flex-col"><div class="flex-1 min-h-0"></div><div class="flex items-center justify-between px-3 py-1 border-t border-border text-[10px] text-muted-foreground"><span> items</span><span class="truncate max-w-[200px]">');
|
|
16
|
-
function
|
|
16
|
+
function be(e) {
|
|
17
17
|
return n(H, {
|
|
18
18
|
get files() {
|
|
19
19
|
return e.files;
|
|
@@ -65,6 +65,9 @@ function me(e) {
|
|
|
65
65
|
get sidebarHeaderActions() {
|
|
66
66
|
return e.sidebarHeaderActions;
|
|
67
67
|
},
|
|
68
|
+
get toolbarEndActions() {
|
|
69
|
+
return e.toolbarEndActions;
|
|
70
|
+
},
|
|
68
71
|
get sidebarResizable() {
|
|
69
72
|
return e.sidebarResizable;
|
|
70
73
|
},
|
|
@@ -97,12 +100,12 @@ function me(e) {
|
|
|
97
100
|
});
|
|
98
101
|
}
|
|
99
102
|
function Z(e) {
|
|
100
|
-
const t = N(), I =
|
|
103
|
+
const t = N(), I = B(), o = O(), f = () => I.isMobile(), M = () => t.sidebarWidth(), S = () => e.sidebarResizable ?? !0, a = () => (e.enableDragDrop ?? !0) && !!o, d = () => e.instanceId ?? `filebrowser-${Math.random().toString(36).slice(2, 9)}`;
|
|
101
104
|
let h, C = null, x = null;
|
|
102
|
-
|
|
105
|
+
W(() => {
|
|
103
106
|
if (!o || !a()) return;
|
|
104
107
|
const r = {
|
|
105
|
-
instanceId:
|
|
108
|
+
instanceId: d(),
|
|
106
109
|
currentPath: t.currentPath,
|
|
107
110
|
files: t.files,
|
|
108
111
|
onDragMove: e.onDragMove,
|
|
@@ -112,11 +115,11 @@ function Z(e) {
|
|
|
112
115
|
optimisticInsert: t.optimisticInsert
|
|
113
116
|
};
|
|
114
117
|
o.registerInstance(r);
|
|
115
|
-
}),
|
|
116
|
-
o && a() && o.unregisterInstance(
|
|
118
|
+
}), E(() => {
|
|
119
|
+
o && a() && o.unregisterInstance(d());
|
|
117
120
|
});
|
|
118
121
|
let v = !1, g = !1;
|
|
119
|
-
|
|
122
|
+
K(() => {
|
|
120
123
|
const r = f();
|
|
121
124
|
if (!v) {
|
|
122
125
|
v = !0, g = r, r && e.hideSidebarOnMobile !== !1 && !t.sidebarCollapsed() && t.toggleSidebar();
|
|
@@ -128,7 +131,7 @@ function Z(e) {
|
|
|
128
131
|
(r.metaKey || r.ctrlKey) && r.key.toLowerCase() === "f" && (r.preventDefault(), t.setFilterActive(!0), V(() => h?.focus()));
|
|
129
132
|
}, y = () => !t.sidebarCollapsed() || !f();
|
|
130
133
|
return (() => {
|
|
131
|
-
var r = Y(),
|
|
134
|
+
var r = Y(), b = r.firstChild, m = b.firstChild, c = m.firstChild, R = c.nextSibling, s = R.firstChild, $ = s.firstChild, A = s.nextSibling;
|
|
132
135
|
return r.$$keydown = D, i(r, n(u, {
|
|
133
136
|
get when() {
|
|
134
137
|
return e.header;
|
|
@@ -137,7 +140,7 @@ function Z(e) {
|
|
|
137
140
|
var l = X();
|
|
138
141
|
return i(l, () => e.header), l;
|
|
139
142
|
}
|
|
140
|
-
}),
|
|
143
|
+
}), b), i(b, n(T, {
|
|
141
144
|
title: "Explorer",
|
|
142
145
|
get width() {
|
|
143
146
|
return M();
|
|
@@ -164,16 +167,19 @@ function Z(e) {
|
|
|
164
167
|
get children() {
|
|
165
168
|
return n(j, {
|
|
166
169
|
get instanceId() {
|
|
167
|
-
return
|
|
170
|
+
return d();
|
|
168
171
|
},
|
|
169
172
|
get enableDragDrop() {
|
|
170
173
|
return a();
|
|
171
174
|
}
|
|
172
175
|
});
|
|
173
176
|
}
|
|
174
|
-
}),
|
|
175
|
-
filterInputRef: (l) => h = l
|
|
176
|
-
|
|
177
|
+
}), m), i(m, n(q, {
|
|
178
|
+
filterInputRef: (l) => h = l,
|
|
179
|
+
get endActions() {
|
|
180
|
+
return e.toolbarEndActions;
|
|
181
|
+
}
|
|
182
|
+
}), c), F((l) => {
|
|
177
183
|
C = l;
|
|
178
184
|
}, c), i(c, n(u, {
|
|
179
185
|
get when() {
|
|
@@ -182,7 +188,7 @@ function Z(e) {
|
|
|
182
188
|
get fallback() {
|
|
183
189
|
return n(Q, {
|
|
184
190
|
get instanceId() {
|
|
185
|
-
return
|
|
191
|
+
return d();
|
|
186
192
|
},
|
|
187
193
|
get enableDragDrop() {
|
|
188
194
|
return a();
|
|
@@ -192,28 +198,28 @@ function Z(e) {
|
|
|
192
198
|
get children() {
|
|
193
199
|
return n(G, {
|
|
194
200
|
get instanceId() {
|
|
195
|
-
return
|
|
201
|
+
return d();
|
|
196
202
|
},
|
|
197
203
|
get enableDragDrop() {
|
|
198
204
|
return a();
|
|
199
205
|
}
|
|
200
206
|
});
|
|
201
207
|
}
|
|
202
|
-
})), i(
|
|
208
|
+
})), i(s, () => t.currentFiles().length, $), i(s, n(u, {
|
|
203
209
|
get when() {
|
|
204
210
|
return t.filterQueryApplied().trim();
|
|
205
211
|
},
|
|
206
212
|
get children() {
|
|
207
213
|
return [" ", "(filtered)"];
|
|
208
214
|
}
|
|
209
|
-
}), null), i(
|
|
215
|
+
}), null), i(s, n(u, {
|
|
210
216
|
get when() {
|
|
211
217
|
return t.selectedItems().size > 0;
|
|
212
218
|
},
|
|
213
219
|
get children() {
|
|
214
|
-
return [" · ",
|
|
220
|
+
return [" · ", P(() => t.selectedItems().size), " selected"];
|
|
215
221
|
}
|
|
216
|
-
}), null), i(
|
|
222
|
+
}), null), i(A, () => t.currentPath()), i(r, n(J, {
|
|
217
223
|
get callbacks() {
|
|
218
224
|
return e.contextMenuCallbacks;
|
|
219
225
|
},
|
|
@@ -233,10 +239,10 @@ function Z(e) {
|
|
|
233
239
|
get children() {
|
|
234
240
|
return n(U, {});
|
|
235
241
|
}
|
|
236
|
-
}), null),
|
|
242
|
+
}), null), _(() => k(r, L("flex flex-col h-full min-h-0 bg-background", "border border-border rounded-lg overflow-hidden", "shadow-sm", e.class))), r;
|
|
237
243
|
})();
|
|
238
244
|
}
|
|
239
|
-
|
|
245
|
+
z(["keydown"]);
|
|
240
246
|
export {
|
|
241
|
-
|
|
247
|
+
be as FileBrowser
|
|
242
248
|
};
|
|
@@ -3,6 +3,8 @@ export interface FileBrowserToolbarProps {
|
|
|
3
3
|
class?: string;
|
|
4
4
|
/** Reference to focus the filter input */
|
|
5
5
|
filterInputRef?: (el: HTMLInputElement) => void;
|
|
6
|
+
/** Actions rendered at the end of the toolbar */
|
|
7
|
+
endActions?: JSX.Element;
|
|
6
8
|
}
|
|
7
9
|
/**
|
|
8
10
|
* Toolbar with navigation, breadcrumb, filter, and view mode toggle
|
|
@@ -1,89 +1,89 @@
|
|
|
1
|
-
import { addEventListener as
|
|
2
|
-
import { onMount as R, Show as
|
|
3
|
-
import { cn as
|
|
1
|
+
import { addEventListener as M, insert as n, createComponent as l, use as S, effect as s, className as f, template as a, setAttribute as g, delegateEvents as Q } from "solid-js/web";
|
|
2
|
+
import { onMount as R, Show as k } from "solid-js";
|
|
3
|
+
import { cn as v } from "../../utils/cn.js";
|
|
4
4
|
import { deferAfterPaint as E } from "../../utils/defer.js";
|
|
5
5
|
import { useFileBrowser as L } from "./FileBrowserContext.js";
|
|
6
6
|
import { Breadcrumb as T } from "./Breadcrumb.js";
|
|
7
7
|
import { Grid as V } from "../icons/index.js";
|
|
8
|
-
var N = /* @__PURE__ */
|
|
9
|
-
const
|
|
8
|
+
var N = /* @__PURE__ */ a('<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round><line x1=8 y1=6 x2=21 y2=6></line><line x1=8 y1=12 x2=21 y2=12></line><line x1=8 y1=18 x2=21 y2=18></line><line x1=3 y1=6 x2=3.01 y2=6></line><line x1=3 y1=12 x2=3.01 y2=12></line><line x1=3 y1=18 x2=3.01 y2=18>'), U = /* @__PURE__ */ a('<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round><path d="M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"></path><path d="M12 10v6"></path><path d="m9 13 3-3 3 3">'), G = /* @__PURE__ */ a('<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round><rect width=18 height=18 x=3 y=3 rx=2 ry=2></rect><line x1=9 y1=3 x2=9 y2=21>'), P = /* @__PURE__ */ a('<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round><circle cx=11 cy=11 r=8></circle><path d="m21 21-4.3-4.3">'), D = /* @__PURE__ */ a('<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round><path d="M18 6 6 18"></path><path d="m6 6 12 12">'), H = /* @__PURE__ */ a('<button type=button aria-label="Clear filter">'), K = /* @__PURE__ */ a('<div class="flex items-center flex-1 gap-1 px-2 py-1 bg-muted/50 rounded-md border border-border/50 focus-within:border-ring focus-within:ring-1 focus-within:ring-ring"><input type=text placeholder=Filter... aria-label="Filter files by name">'), X = /* @__PURE__ */ a('<div class="ml-0.5 flex shrink-0 items-center gap-1">'), Z = /* @__PURE__ */ a('<div><button type=button aria-label="Toggle sidebar"></button><button type=button aria-label="Navigate to parent folder"></button><div></div><div></div><div class="flex items-center gap-0.5 p-0.5 bg-muted/50 rounded-md">'), q = /* @__PURE__ */ a('<button type=button aria-label="Filter files">'), z = /* @__PURE__ */ a("<button type=button>");
|
|
9
|
+
const J = (r) => (() => {
|
|
10
10
|
var e = N();
|
|
11
11
|
return s(() => g(e, "class", r.class)), e;
|
|
12
|
-
})(),
|
|
12
|
+
})(), O = (r) => (() => {
|
|
13
13
|
var e = U();
|
|
14
14
|
return s(() => g(e, "class", r.class)), e;
|
|
15
|
-
})(),
|
|
15
|
+
})(), W = (r) => (() => {
|
|
16
16
|
var e = G();
|
|
17
17
|
return s(() => g(e, "class", r.class)), e;
|
|
18
18
|
})(), j = (r) => (() => {
|
|
19
19
|
var e = P();
|
|
20
20
|
return s(() => g(e, "class", r.class)), e;
|
|
21
|
-
})(),
|
|
21
|
+
})(), Y = (r) => (() => {
|
|
22
22
|
var e = D();
|
|
23
23
|
return s(() => g(e, "class", r.class)), e;
|
|
24
24
|
})();
|
|
25
|
-
function
|
|
25
|
+
function se(r) {
|
|
26
26
|
const e = L();
|
|
27
|
-
let
|
|
27
|
+
let i;
|
|
28
28
|
const c = () => {
|
|
29
|
-
const
|
|
30
|
-
return
|
|
31
|
-
},
|
|
32
|
-
e.isFilterActive() ? (e.setFilterQuery(""), e.setFilterActive(!1)) : (e.setFilterActive(!0), E(() =>
|
|
33
|
-
},
|
|
34
|
-
e.setFilterQuery(""),
|
|
35
|
-
},
|
|
36
|
-
|
|
29
|
+
const d = e.currentPath();
|
|
30
|
+
return d !== "/" && d !== "";
|
|
31
|
+
}, b = () => {
|
|
32
|
+
e.isFilterActive() ? (e.setFilterQuery(""), e.setFilterActive(!1)) : (e.setFilterActive(!0), E(() => i?.focus()));
|
|
33
|
+
}, h = () => {
|
|
34
|
+
e.setFilterQuery(""), i?.focus();
|
|
35
|
+
}, w = (d) => {
|
|
36
|
+
d.key === "Escape" && (e.setFilterQuery(""), e.setFilterActive(!1));
|
|
37
37
|
}, I = () => {
|
|
38
38
|
e.filterQuery().trim() || e.setFilterActive(!1);
|
|
39
39
|
};
|
|
40
40
|
return R(() => {
|
|
41
|
-
r.filterInputRef &&
|
|
41
|
+
r.filterInputRef && i && r.filterInputRef(i);
|
|
42
42
|
}), (() => {
|
|
43
|
-
var
|
|
44
|
-
return
|
|
43
|
+
var d = Z(), x = d.firstChild, m = x.nextSibling, p = m.nextSibling, y = p.nextSibling, $ = y.nextSibling;
|
|
44
|
+
return M(x, "click", e.toggleSidebar, !0), n(x, l(W, {
|
|
45
45
|
class: "w-4 h-4"
|
|
46
|
-
})),
|
|
46
|
+
})), M(m, "click", e.navigateUp, !0), n(m, l(O, {
|
|
47
47
|
class: "w-4 h-4"
|
|
48
|
-
})),
|
|
48
|
+
})), n(p, l(T, {})), n(y, l(k, {
|
|
49
49
|
get when() {
|
|
50
50
|
return e.isFilterActive();
|
|
51
51
|
},
|
|
52
52
|
get fallback() {
|
|
53
53
|
return (() => {
|
|
54
|
-
var t =
|
|
55
|
-
return t.$$click =
|
|
54
|
+
var t = q();
|
|
55
|
+
return t.$$click = b, n(t, l(j, {
|
|
56
56
|
class: "w-4 h-4"
|
|
57
|
-
})), s(() =>
|
|
57
|
+
})), s(() => f(t, v("flex items-center justify-center w-7 h-7 rounded cursor-pointer", "transition-colors duration-100", "hover:bg-muted/70", "focus:outline-none focus-visible:ring-1 focus-visible:ring-ring"))), t;
|
|
58
58
|
})();
|
|
59
59
|
},
|
|
60
60
|
get children() {
|
|
61
|
-
var t = K(),
|
|
62
|
-
return
|
|
61
|
+
var t = K(), u = t.firstChild;
|
|
62
|
+
return n(t, l(j, {
|
|
63
63
|
class: "w-3.5 h-3.5 text-muted-foreground flex-shrink-0"
|
|
64
|
-
}),
|
|
65
|
-
|
|
66
|
-
},
|
|
64
|
+
}), u), u.addEventListener("blur", I), u.$$keydown = w, u.$$input = (o) => e.setFilterQuery(o.currentTarget.value), S((o) => {
|
|
65
|
+
i = o, r.filterInputRef && r.filterInputRef(o);
|
|
66
|
+
}, u), n(t, l(k, {
|
|
67
67
|
get when() {
|
|
68
68
|
return e.filterQuery();
|
|
69
69
|
},
|
|
70
70
|
get children() {
|
|
71
|
-
var
|
|
72
|
-
return
|
|
71
|
+
var o = H();
|
|
72
|
+
return o.$$click = h, n(o, l(Y, {
|
|
73
73
|
class: "w-3 h-3"
|
|
74
|
-
})), s(() =>
|
|
74
|
+
})), s(() => f(o, v("flex items-center justify-center w-4 h-4 rounded-sm cursor-pointer", "text-muted-foreground hover:text-foreground", "transition-colors duration-100"))), o;
|
|
75
75
|
}
|
|
76
|
-
}), null), s(() =>
|
|
76
|
+
}), null), s(() => f(u, v("flex-1 min-w-0 bg-transparent text-xs", "outline-none border-0 ring-0 shadow-none appearance-none", "focus:outline-none focus:border-0 focus:ring-0", "placeholder:text-muted-foreground/60"))), s(() => u.value = e.filterQuery()), t;
|
|
77
77
|
}
|
|
78
|
-
})),
|
|
78
|
+
})), n($, l(B, {
|
|
79
79
|
mode: "list",
|
|
80
80
|
get currentMode() {
|
|
81
81
|
return e.viewMode();
|
|
82
82
|
},
|
|
83
83
|
onClick: () => e.setViewMode("list"),
|
|
84
|
-
icon:
|
|
84
|
+
icon: J,
|
|
85
85
|
label: "List view"
|
|
86
|
-
}), null),
|
|
86
|
+
}), null), n($, l(B, {
|
|
87
87
|
mode: "grid",
|
|
88
88
|
get currentMode() {
|
|
89
89
|
return e.viewMode();
|
|
@@ -91,9 +91,17 @@ function le(r) {
|
|
|
91
91
|
onClick: () => e.setViewMode("grid"),
|
|
92
92
|
icon: V,
|
|
93
93
|
label: "Grid view"
|
|
94
|
+
}), null), n(d, l(k, {
|
|
95
|
+
get when() {
|
|
96
|
+
return r.endActions;
|
|
97
|
+
},
|
|
98
|
+
get children() {
|
|
99
|
+
var t = X();
|
|
100
|
+
return n(t, () => r.endActions), t;
|
|
101
|
+
}
|
|
94
102
|
}), null), s((t) => {
|
|
95
|
-
var
|
|
96
|
-
return
|
|
103
|
+
var u = v("flex items-center gap-2 px-2 py-1.5 border-b border-border", "bg-background/50 backdrop-blur-sm", r.class), o = v("md:hidden flex items-center justify-center w-7 h-7 rounded cursor-pointer", "transition-colors duration-100", "hover:bg-muted/70", "focus:outline-none focus-visible:ring-1 focus-visible:ring-ring", !e.sidebarCollapsed() && "bg-muted/50"), F = !c(), _ = v("flex items-center justify-center w-7 h-7 rounded cursor-pointer", "transition-colors duration-100", "hover:bg-muted/70", "focus:outline-none focus-visible:ring-1 focus-visible:ring-ring", "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent"), A = v("flex-1 min-w-0 overflow-hidden transition-all duration-200", e.isFilterActive() && "hidden sm:block sm:flex-1"), C = v("flex items-center gap-1 transition-all duration-200 ease-out", e.isFilterActive() ? "flex-1 sm:flex-none sm:w-48" : "w-7");
|
|
104
|
+
return u !== t.e && f(d, t.e = u), o !== t.t && f(x, t.t = o), F !== t.a && (m.disabled = t.a = F), _ !== t.o && f(m, t.o = _), A !== t.i && f(p, t.i = A), C !== t.n && f(y, t.n = C), t;
|
|
97
105
|
}, {
|
|
98
106
|
e: void 0,
|
|
99
107
|
t: void 0,
|
|
@@ -101,26 +109,26 @@ function le(r) {
|
|
|
101
109
|
o: void 0,
|
|
102
110
|
i: void 0,
|
|
103
111
|
n: void 0
|
|
104
|
-
}),
|
|
112
|
+
}), d;
|
|
105
113
|
})();
|
|
106
114
|
}
|
|
107
115
|
function B(r) {
|
|
108
116
|
const e = () => r.currentMode === r.mode;
|
|
109
117
|
return (() => {
|
|
110
|
-
var
|
|
111
|
-
return
|
|
118
|
+
var i = z();
|
|
119
|
+
return i.$$click = () => r.onClick(), n(i, l(r.icon, {
|
|
112
120
|
class: "w-3.5 h-3.5"
|
|
113
121
|
})), s((c) => {
|
|
114
|
-
var
|
|
115
|
-
return
|
|
122
|
+
var b = v("flex items-center justify-center w-6 h-6 rounded cursor-pointer", "transition-all duration-150", "focus:outline-none focus-visible:ring-1 focus-visible:ring-ring", e() ? "bg-background shadow-sm text-foreground" : "text-muted-foreground hover:text-foreground"), h = r.label, w = e();
|
|
123
|
+
return b !== c.e && f(i, c.e = b), h !== c.t && g(i, "aria-label", c.t = h), w !== c.a && g(i, "aria-pressed", c.a = w), c;
|
|
116
124
|
}, {
|
|
117
125
|
e: void 0,
|
|
118
126
|
t: void 0,
|
|
119
127
|
a: void 0
|
|
120
|
-
}),
|
|
128
|
+
}), i;
|
|
121
129
|
})();
|
|
122
130
|
}
|
|
123
131
|
Q(["click", "input", "keydown"]);
|
|
124
132
|
export {
|
|
125
|
-
|
|
133
|
+
se as FileBrowserToolbar
|
|
126
134
|
};
|