@floegence/floe-webapp-core 0.86.60 → 0.86.62
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/chat/blocks/BlockRenderer.js +1 -1
- package/dist/components/chat/blocks/CodeDiffBlock.js +56 -56
- package/dist/components/chat/blocks/ImageBlock.js +1 -1
- package/dist/components/chat/blocks/ToolCallBlock.js +57 -57
- package/dist/components/chat/status/ConnectionStatus.js +10 -10
- package/dist/components/deck/DeckCell.js +25 -25
- package/dist/components/deck/DeckContextMenu.js +20 -20
- package/dist/components/deck/DeckGrid.js +1 -1
- package/dist/components/deck/DeckTopBar.js +42 -42
- package/dist/components/deck/DropZonePreview.js +6 -6
- package/dist/components/deck/LayoutSelector.js +53 -53
- package/dist/components/deck/WidgetFrame.js +28 -28
- package/dist/components/deck/WidgetPalette.js +31 -31
- package/dist/components/deck/WidgetTypeSwitcher.js +31 -31
- package/dist/components/file-browser/Breadcrumb.js +27 -27
- package/dist/components/file-browser/DirectoryTree.js +15 -15
- package/dist/components/file-browser/DragPreview.js +58 -58
- package/dist/components/file-browser/FileBrowser.js +17 -17
- package/dist/components/file-browser/FileBrowserStatusBar.js +18 -18
- package/dist/components/file-browser/FileBrowserToolbar.js +27 -27
- package/dist/components/file-browser/FileContextMenu.js +47 -47
- package/dist/components/file-browser/FileGridView.js +53 -51
- package/dist/components/file-browser/FileItemDecorations.js +30 -27
- package/dist/components/file-browser/FileListView.js +114 -114
- package/dist/components/icons/index.js +1357 -1357
- package/dist/components/launchpad/Launchpad.js +14 -14
- package/dist/components/launchpad/LaunchpadGrid.js +7 -7
- package/dist/components/launchpad/LaunchpadItem.js +11 -11
- package/dist/components/launchpad/LaunchpadPagination.js +16 -16
- package/dist/components/launchpad/LaunchpadSearch.js +9 -9
- package/dist/components/layout/ActivityBar.js +52 -55
- package/dist/components/layout/BottomBar.js +17 -17
- package/dist/components/layout/MobileNavigationPanel.js +36 -36
- package/dist/components/layout/MobileTabBar.js +39 -39
- package/dist/components/layout/Panel.js +16 -16
- package/dist/components/layout/ResizeHandle.js +19 -19
- package/dist/components/layout/Shell.js +50 -50
- package/dist/components/layout/Sidebar.js +37 -36
- package/dist/components/layout/SidebarPane.js +19 -19
- package/dist/components/layout/TopBar.js +16 -16
- package/dist/components/layout/TopBarIconButton.js +15 -15
- package/dist/components/loading/LoadingOverlay.js +9 -9
- package/dist/components/loading/Skeleton.js +11 -11
- package/dist/components/ui/Button.js +36 -36
- package/dist/components/ui/Card.d.ts +11 -62
- package/dist/components/ui/Card.js +64 -237
- package/dist/components/ui/Checkbox.js +79 -79
- package/dist/components/ui/CommandPalette.js +56 -55
- package/dist/components/ui/Dialog.js +91 -93
- package/dist/components/ui/DirectoryInput.js +22 -22
- package/dist/components/ui/DirectoryPicker.js +8 -8
- package/dist/components/ui/Dropdown.js +89 -87
- package/dist/components/ui/FeedbackIndicator.js +57 -57
- package/dist/components/ui/FileOpenPicker.js +37 -37
- package/dist/components/ui/FileSavePicker.js +41 -41
- package/dist/components/ui/FloatingWindow.js +213 -205
- package/dist/components/ui/Form.js +76 -76
- package/dist/components/ui/HighlightBlock.js +14 -14
- package/dist/components/ui/Input.js +106 -109
- package/dist/components/ui/Pagination.js +86 -86
- package/dist/components/ui/Popover.d.ts +33 -0
- package/dist/components/ui/Popover.js +133 -0
- package/dist/components/ui/ProcessingIndicator.js +344 -345
- package/dist/components/ui/Progress.js +94 -97
- package/dist/components/ui/QuoteBlock.js +25 -25
- package/dist/components/ui/Radio.js +91 -91
- package/dist/components/ui/SegmentedControl.js +24 -24
- package/dist/components/ui/Stepper.js +68 -60
- package/dist/components/ui/Switch.js +25 -25
- package/dist/components/ui/Tabs.js +99 -87
- package/dist/components/ui/Tag.js +12 -9
- package/dist/components/ui/Tooltip.js +30 -30
- package/dist/components/ui/floatingPresence.d.ts +7 -0
- package/dist/components/ui/floatingPresence.js +80 -39
- package/dist/components/ui/index.d.ts +2 -1
- package/dist/components/ui/picker/DirectoryFavorites.js +27 -27
- package/dist/components/ui/picker/PickerBase.js +107 -107
- package/dist/context/NotificationContext.js +4 -4
- package/dist/context/ThemeContext.js +71 -70
- package/dist/floe.css +205 -43
- package/dist/full.js +650 -652
- package/dist/language.css +320 -0
- package/dist/primitives.css +23 -17
- package/dist/standalone.css +1 -0
- package/dist/styles/themes/classicSemanticTokens.d.ts +122 -122
- package/dist/styles/themes/classicSemanticTokens.js +140 -138
- package/dist/styles/themes/index.d.ts +3 -1
- package/dist/styles/themes/index.js +10 -10
- package/dist/styles/themes/presets.d.ts +2 -2
- package/dist/styles/themes/presets.js +34 -34
- package/dist/styles/tokens.d.ts +152 -68
- package/dist/styles/tokens.js +87 -49
- package/dist/styles.css +1 -1
- package/dist/surface.css +161 -116
- package/dist/themes/dark.css +64 -64
- package/dist/themes/light.css +64 -64
- package/dist/ui.css +171 -255
- package/dist/ui.js +176 -178
- package/dist/utils/hotInteraction.d.ts +7 -0
- package/dist/utils/hotInteraction.js +12 -12
- package/dist/widgets/TerminalWidget.js +28 -28
- package/dist/workbench-composition.css +15 -15
- package/package.json +1 -1
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import { insert as i, createComponent as r, effect as x, className as b, setAttribute as
|
|
1
|
+
import { insert as i, createComponent as r, effect as x, className as b, setAttribute as y, template as c, delegateEvents as $ } from "solid-js/web";
|
|
2
2
|
import { Show as l } from "solid-js";
|
|
3
3
|
import { cn as _ } from "../../utils/cn.js";
|
|
4
|
-
import { useDeck as
|
|
5
|
-
import { useLayout as
|
|
4
|
+
import { useDeck as k } from "../../context/DeckContext.js";
|
|
5
|
+
import { useLayout as D } from "../../context/LayoutContext.js";
|
|
6
6
|
import { GripVertical as C, X as W } from "../icons/index.js";
|
|
7
|
-
import { WidgetResizeHandle as
|
|
7
|
+
import { WidgetResizeHandle as g } from "./WidgetResizeHandle.js";
|
|
8
8
|
import { WidgetTypeSwitcher as R } from "./WidgetTypeSwitcher.js";
|
|
9
|
-
var S = /* @__PURE__ */
|
|
9
|
+
var S = /* @__PURE__ */ c('<div class="text-[var(--floe-ink-ghost)] pointer-events-none">'), z = /* @__PURE__ */ c('<div class="opacity-0 group-hover:opacity-100 transition-opacity">'), A = /* @__PURE__ */ c('<button class="opacity-0 group-hover:opacity-100 p-0.5 rounded-xs hover:bg-destructive/10 text-[var(--floe-ink-soft)] hover:text-destructive transition-[opacity,background-color,color] cursor-pointer"title="Remove widget">'), E = /* @__PURE__ */ c('<div class="h-full flex flex-col"><div><span class="flex-1 text-xs font-medium text-foreground truncate"></span></div><div class="flex-1 min-h-0 overflow-auto">');
|
|
10
10
|
function T(e) {
|
|
11
|
-
const
|
|
12
|
-
o.stopPropagation(), o.preventDefault(),
|
|
11
|
+
const s = k(), v = D(), m = () => e.widget.title ?? e.widgetDef?.name ?? e.widget.type, d = () => !v.isMobile(), f = (o) => {
|
|
12
|
+
o.stopPropagation(), o.preventDefault(), s.removeWidget(e.widget.id);
|
|
13
13
|
};
|
|
14
14
|
return (() => {
|
|
15
|
-
var o = E(), n = o.firstChild,
|
|
15
|
+
var o = E(), n = o.firstChild, u = n.firstChild, h = n.nextSibling;
|
|
16
16
|
return i(n, r(l, {
|
|
17
17
|
get when() {
|
|
18
|
-
return
|
|
18
|
+
return d();
|
|
19
19
|
},
|
|
20
20
|
get children() {
|
|
21
21
|
var t = S();
|
|
@@ -23,19 +23,19 @@ function T(e) {
|
|
|
23
23
|
class: "w-3.5 h-3.5"
|
|
24
24
|
})), t;
|
|
25
25
|
}
|
|
26
|
-
}),
|
|
26
|
+
}), u), i(n, r(l, {
|
|
27
27
|
get when() {
|
|
28
28
|
return e.widgetDef?.icon;
|
|
29
29
|
},
|
|
30
30
|
children: (t) => {
|
|
31
|
-
const
|
|
32
|
-
return r(
|
|
33
|
-
class: "w-3.5 h-3.5 text-
|
|
31
|
+
const a = t();
|
|
32
|
+
return r(a, {
|
|
33
|
+
class: "w-3.5 h-3.5 text-[var(--floe-ink-soft)]"
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
|
-
}),
|
|
36
|
+
}), u), i(u, m), i(n, r(l, {
|
|
37
37
|
get when() {
|
|
38
|
-
return
|
|
38
|
+
return d();
|
|
39
39
|
},
|
|
40
40
|
get children() {
|
|
41
41
|
var t = z();
|
|
@@ -47,7 +47,7 @@ function T(e) {
|
|
|
47
47
|
}
|
|
48
48
|
}), null), i(n, r(l, {
|
|
49
49
|
get when() {
|
|
50
|
-
return
|
|
50
|
+
return d();
|
|
51
51
|
},
|
|
52
52
|
get children() {
|
|
53
53
|
var t = A();
|
|
@@ -57,45 +57,45 @@ function T(e) {
|
|
|
57
57
|
}
|
|
58
58
|
}), null), i(h, () => e.children), i(o, r(l, {
|
|
59
59
|
get when() {
|
|
60
|
-
return
|
|
60
|
+
return d();
|
|
61
61
|
},
|
|
62
62
|
get children() {
|
|
63
|
-
return [r(
|
|
63
|
+
return [r(g, {
|
|
64
64
|
get widget() {
|
|
65
65
|
return e.widget;
|
|
66
66
|
},
|
|
67
67
|
edge: "e"
|
|
68
|
-
}), r(
|
|
68
|
+
}), r(g, {
|
|
69
69
|
get widget() {
|
|
70
70
|
return e.widget;
|
|
71
71
|
},
|
|
72
72
|
edge: "s"
|
|
73
|
-
}), r(
|
|
73
|
+
}), r(g, {
|
|
74
74
|
get widget() {
|
|
75
75
|
return e.widget;
|
|
76
76
|
},
|
|
77
77
|
edge: "se"
|
|
78
|
-
}), r(
|
|
78
|
+
}), r(g, {
|
|
79
79
|
get widget() {
|
|
80
80
|
return e.widget;
|
|
81
81
|
},
|
|
82
82
|
edge: "w"
|
|
83
|
-
}), r(
|
|
83
|
+
}), r(g, {
|
|
84
84
|
get widget() {
|
|
85
85
|
return e.widget;
|
|
86
86
|
},
|
|
87
87
|
edge: "n"
|
|
88
|
-
}), r(
|
|
88
|
+
}), r(g, {
|
|
89
89
|
get widget() {
|
|
90
90
|
return e.widget;
|
|
91
91
|
},
|
|
92
92
|
edge: "sw"
|
|
93
|
-
}), r(
|
|
93
|
+
}), r(g, {
|
|
94
94
|
get widget() {
|
|
95
95
|
return e.widget;
|
|
96
96
|
},
|
|
97
97
|
edge: "ne"
|
|
98
|
-
}), r(
|
|
98
|
+
}), r(g, {
|
|
99
99
|
get widget() {
|
|
100
100
|
return e.widget;
|
|
101
101
|
},
|
|
@@ -103,15 +103,15 @@ function T(e) {
|
|
|
103
103
|
})];
|
|
104
104
|
}
|
|
105
105
|
}), null), x((t) => {
|
|
106
|
-
var
|
|
107
|
-
return
|
|
106
|
+
var a = _("widget-header flex items-center gap-1 px-2 py-1.5 border-b border-[var(--floe-line)] bg-[var(--floe-well)]", "select-none", d() && !e.isDragging && "cursor-move", e.isDragging && "cursor-grabbing"), w = d() ? e.widget.id : void 0;
|
|
107
|
+
return a !== t.e && b(n, t.e = a), w !== t.t && y(n, "data-widget-drag-handle", t.t = w), t;
|
|
108
108
|
}, {
|
|
109
109
|
e: void 0,
|
|
110
110
|
t: void 0
|
|
111
111
|
}), o;
|
|
112
112
|
})();
|
|
113
113
|
}
|
|
114
|
-
|
|
114
|
+
$(["click"]);
|
|
115
115
|
export {
|
|
116
116
|
T as WidgetFrame
|
|
117
117
|
};
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { createComponent as e, insert as r, effect as O, className as P, template as
|
|
2
|
-
import { createSignal as
|
|
3
|
-
import { cn as
|
|
1
|
+
import { createComponent as e, insert as r, effect as O, className as P, template as n, delegateEvents as j } from "solid-js/web";
|
|
2
|
+
import { createSignal as _, Show as l, For as y } from "solid-js";
|
|
3
|
+
import { cn as h } from "../../utils/cn.js";
|
|
4
4
|
import { useDeck as D } from "../../context/DeckContext.js";
|
|
5
5
|
import { useWidgetRegistry as F } from "../../context/WidgetRegistry.js";
|
|
6
6
|
import { Plus as T, X, ChevronRight as q } from "../icons/index.js";
|
|
7
7
|
import { Button as G } from "../ui/Button.js";
|
|
8
8
|
import { deferNonBlocking as H } from "../../utils/defer.js";
|
|
9
|
-
var J = /* @__PURE__ */
|
|
9
|
+
var J = /* @__PURE__ */ n('<div class="text-center text-[var(--floe-ink-soft)] text-sm py-8">No widgets registered'), K = /* @__PURE__ */ n('<div><div class="flex items-center justify-between p-3 border-b border-[var(--floe-line)]"><h2 class="text-sm font-semibold">Add Widget</h2><button class="p-1 rounded-xs hover:bg-[var(--floe-state-hover)] transition-colors cursor-pointer"></button></div><div class="p-2 overflow-y-auto h-[calc(100%-48px)]">'), L = /* @__PURE__ */ n('<div class="fixed inset-0 bg-black/20 z-40">'), Q = /* @__PURE__ */ n('<div class="ml-4 mt-1 space-y-1">'), U = /* @__PURE__ */ n('<div class=mb-2><button class="w-full flex items-center gap-2 p-2 rounded-xs hover:bg-[var(--floe-state-hover)] transition-colors text-left cursor-pointer"><span class="text-sm font-medium"></span><span class="ml-auto text-xs text-[var(--floe-ink-soft)]">'), V = /* @__PURE__ */ n('<button class="w-full flex items-center gap-2 p-2 rounded-xs hover:bg-[var(--floe-state-hover)] transition-colors text-left cursor-pointer"><span class=text-sm>'), Y = /* @__PURE__ */ n('<div class="w-4 h-4">');
|
|
10
10
|
function ie(C) {
|
|
11
|
-
const p = D(),
|
|
11
|
+
const p = D(), v = F(), [c, s] = _(!1), [W, z] = _(null), S = [{
|
|
12
12
|
key: "metrics",
|
|
13
13
|
label: "Metrics"
|
|
14
14
|
}, {
|
|
@@ -22,21 +22,21 @@ function ie(C) {
|
|
|
22
22
|
}, B = (t) => {
|
|
23
23
|
z((o) => o === t ? null : t);
|
|
24
24
|
};
|
|
25
|
-
return e(
|
|
25
|
+
return e(l, {
|
|
26
26
|
get when() {
|
|
27
27
|
return p.editMode();
|
|
28
28
|
},
|
|
29
29
|
get children() {
|
|
30
|
-
return [e(
|
|
30
|
+
return [e(l, {
|
|
31
31
|
get when() {
|
|
32
|
-
return !
|
|
32
|
+
return !c();
|
|
33
33
|
},
|
|
34
34
|
get children() {
|
|
35
35
|
return e(G, {
|
|
36
36
|
variant: "outline",
|
|
37
37
|
size: "sm",
|
|
38
38
|
get class() {
|
|
39
|
-
return
|
|
39
|
+
return h("fixed bottom-4 right-4 z-50 shadow-[var(--floe-elevation-float)]", C.class);
|
|
40
40
|
},
|
|
41
41
|
onClick: () => s(!0),
|
|
42
42
|
get children() {
|
|
@@ -47,38 +47,38 @@ function ie(C) {
|
|
|
47
47
|
});
|
|
48
48
|
}
|
|
49
49
|
}), (() => {
|
|
50
|
-
var t = K(), o = t.firstChild, E = o.firstChild, x = E.nextSibling,
|
|
50
|
+
var t = K(), o = t.firstChild, E = o.firstChild, x = E.nextSibling, b = o.nextSibling;
|
|
51
51
|
return x.$$click = () => s(!1), r(x, e(X, {
|
|
52
52
|
class: "w-4 h-4"
|
|
53
|
-
})), r(
|
|
53
|
+
})), r(b, e(y, {
|
|
54
54
|
each: S,
|
|
55
55
|
children: (i) => {
|
|
56
|
-
const
|
|
57
|
-
return e(
|
|
56
|
+
const d = () => v.getWidgetsByCategory(i.key), $ = () => W() === i.key, N = () => d().length > 0;
|
|
57
|
+
return e(l, {
|
|
58
58
|
get when() {
|
|
59
59
|
return N();
|
|
60
60
|
},
|
|
61
61
|
get children() {
|
|
62
|
-
var
|
|
63
|
-
return
|
|
62
|
+
var f = U(), u = f.firstChild, g = u.firstChild, R = g.nextSibling;
|
|
63
|
+
return u.$$click = () => B(i.key), r(u, e(q, {
|
|
64
64
|
get class() {
|
|
65
|
-
return
|
|
65
|
+
return h("w-4 h-4 text-[var(--floe-ink-soft)] transition-transform", $() && "rotate-90");
|
|
66
66
|
}
|
|
67
|
-
}), g), r(g, () => i.label), r(R, () =>
|
|
67
|
+
}), g), r(g, () => i.label), r(R, () => d().length), r(f, e(l, {
|
|
68
68
|
get when() {
|
|
69
|
-
return
|
|
69
|
+
return $();
|
|
70
70
|
},
|
|
71
71
|
get children() {
|
|
72
72
|
var w = Q();
|
|
73
73
|
return r(w, e(y, {
|
|
74
74
|
get each() {
|
|
75
|
-
return
|
|
75
|
+
return d();
|
|
76
76
|
},
|
|
77
|
-
children: (
|
|
78
|
-
var a = V(),
|
|
79
|
-
return a.$$click = () => A(
|
|
77
|
+
children: (m) => (() => {
|
|
78
|
+
var a = V(), k = a.firstChild;
|
|
79
|
+
return a.$$click = () => A(m.type), r(a, e(l, {
|
|
80
80
|
get when() {
|
|
81
|
-
return
|
|
81
|
+
return m.icon;
|
|
82
82
|
},
|
|
83
83
|
get fallback() {
|
|
84
84
|
return Y();
|
|
@@ -86,28 +86,28 @@ function ie(C) {
|
|
|
86
86
|
children: (I) => {
|
|
87
87
|
const M = I();
|
|
88
88
|
return e(M, {
|
|
89
|
-
class: "w-4 h-4 text-
|
|
89
|
+
class: "w-4 h-4 text-[var(--floe-ink-soft)]"
|
|
90
90
|
});
|
|
91
91
|
}
|
|
92
|
-
}),
|
|
92
|
+
}), k), r(k, () => m.name), a;
|
|
93
93
|
})()
|
|
94
94
|
})), w;
|
|
95
95
|
}
|
|
96
|
-
}), null),
|
|
96
|
+
}), null), f;
|
|
97
97
|
}
|
|
98
98
|
});
|
|
99
99
|
}
|
|
100
|
-
}), null), r(
|
|
100
|
+
}), null), r(b, e(l, {
|
|
101
101
|
get when() {
|
|
102
|
-
return
|
|
102
|
+
return v.widgets().size === 0;
|
|
103
103
|
},
|
|
104
104
|
get children() {
|
|
105
105
|
return J();
|
|
106
106
|
}
|
|
107
|
-
}), null), O(() => P(t,
|
|
108
|
-
})(), e(
|
|
107
|
+
}), null), O(() => P(t, h("fixed right-0 top-0 bottom-0 w-72 bg-background border-l border-[var(--floe-line)] shadow-[var(--floe-elevation-float-strong)] z-50", "transform transition-transform duration-[var(--floe-duration-base)]", c() ? "translate-x-0" : "translate-x-full"))), t;
|
|
108
|
+
})(), e(l, {
|
|
109
109
|
get when() {
|
|
110
|
-
return
|
|
110
|
+
return c();
|
|
111
111
|
},
|
|
112
112
|
get children() {
|
|
113
113
|
var t = L();
|
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
import { insert as l, createComponent as o, effect as
|
|
2
|
-
import { createSignal as y, createEffect as W, onCleanup as I, Show as
|
|
3
|
-
import { cn as
|
|
1
|
+
import { insert as l, createComponent as o, effect as h, className as x, Portal as E, setStyleProperty as w, template as a, use as R, delegateEvents as T } from "solid-js/web";
|
|
2
|
+
import { createSignal as y, createEffect as W, onCleanup as I, Show as u, For as L } from "solid-js";
|
|
3
|
+
import { cn as v } from "../../utils/cn.js";
|
|
4
4
|
import { useDeck as N } from "../../context/DeckContext.js";
|
|
5
5
|
import { useWidgetRegistry as z } from "../../context/WidgetRegistry.js";
|
|
6
6
|
import { deferNonBlocking as A } from "../../utils/defer.js";
|
|
7
7
|
import { ArrowRightLeft as B, ChevronDown as M } from "../icons/index.js";
|
|
8
|
-
var O = /* @__PURE__ */
|
|
9
|
-
function Z(
|
|
10
|
-
const $ = N(),
|
|
8
|
+
var O = /* @__PURE__ */ a('<button title="Switch widget type">'), F = /* @__PURE__ */ a('<div class="fixed inset-0 z-[9998]">'), K = /* @__PURE__ */ a('<div class="px-2 py-3 text-xs text-[var(--floe-ink-soft)] text-center">No other widget types available'), j = /* @__PURE__ */ a('<div><div class=p-1><div class="px-2 py-1.5 text-xs text-[var(--floe-ink-soft)] font-medium">Switch to'), q = /* @__PURE__ */ a('<button class="w-full flex items-center gap-2 px-2 py-1.5 rounded-xs hover:bg-[var(--floe-state-hover)] transition-colors text-left cursor-pointer"><span class=text-xs>'), G = /* @__PURE__ */ a('<div class="w-4 h-4">');
|
|
9
|
+
function Z(p) {
|
|
10
|
+
const $ = N(), k = z(), [c, f] = y(!1), [g, b] = y({
|
|
11
11
|
top: 0,
|
|
12
12
|
left: 0
|
|
13
13
|
});
|
|
14
|
-
let
|
|
15
|
-
const _ = () =>
|
|
16
|
-
e.stopPropagation(), e.preventDefault(),
|
|
17
|
-
const r =
|
|
14
|
+
let d;
|
|
15
|
+
const _ = () => p.widget.type, m = () => Array.from(k.widgets().values()).filter((t) => t.type !== _()), C = (e, t) => {
|
|
16
|
+
e.stopPropagation(), e.preventDefault(), f(!1);
|
|
17
|
+
const r = p.widget.id, n = $.changeWidgetType;
|
|
18
18
|
A(() => n(r, t));
|
|
19
19
|
}, S = (e) => {
|
|
20
|
-
if (e.stopPropagation(), e.preventDefault(), !c() &&
|
|
21
|
-
const t =
|
|
22
|
-
|
|
20
|
+
if (e.stopPropagation(), e.preventDefault(), !c() && d) {
|
|
21
|
+
const t = d.getBoundingClientRect();
|
|
22
|
+
b({
|
|
23
23
|
top: t.bottom + 4,
|
|
24
24
|
left: t.right - 160
|
|
25
25
|
// Align right edge
|
|
26
26
|
});
|
|
27
27
|
}
|
|
28
|
-
|
|
28
|
+
f((t) => !t);
|
|
29
29
|
}, P = () => {
|
|
30
|
-
|
|
30
|
+
f(!1);
|
|
31
31
|
};
|
|
32
32
|
return W(() => {
|
|
33
33
|
if (!c() || typeof document > "u") return;
|
|
34
34
|
const e = (t) => {
|
|
35
|
-
t.key === "Escape" &&
|
|
35
|
+
t.key === "Escape" && f(!1);
|
|
36
36
|
};
|
|
37
37
|
document.addEventListener("keydown", e), I(() => document.removeEventListener("keydown", e));
|
|
38
38
|
}), [(() => {
|
|
39
39
|
var e = O();
|
|
40
40
|
e.$$click = S;
|
|
41
|
-
var t =
|
|
42
|
-
return typeof t == "function" ? R(t, e) :
|
|
41
|
+
var t = d;
|
|
42
|
+
return typeof t == "function" ? R(t, e) : d = e, l(e, o(B, {
|
|
43
43
|
class: "w-3.5 h-3.5"
|
|
44
44
|
}), null), l(e, o(M, {
|
|
45
45
|
get class() {
|
|
46
|
-
return
|
|
46
|
+
return v("w-3 h-3 transition-transform", c() && "rotate-180");
|
|
47
47
|
}
|
|
48
|
-
}), null),
|
|
49
|
-
})(), o(
|
|
48
|
+
}), null), h(() => x(e, v("p-0.5 rounded-xs hover:bg-[var(--floe-state-hover)] text-[var(--floe-ink-soft)] hover:text-foreground", "transition-colors cursor-pointer pointer-events-auto flex items-center gap-0.5", p.class))), e;
|
|
49
|
+
})(), o(u, {
|
|
50
50
|
get when() {
|
|
51
51
|
return c();
|
|
52
52
|
},
|
|
@@ -60,11 +60,11 @@ function Z(f) {
|
|
|
60
60
|
var e = j(), t = e.firstChild;
|
|
61
61
|
return t.firstChild, l(t, o(L, {
|
|
62
62
|
get each() {
|
|
63
|
-
return
|
|
63
|
+
return m();
|
|
64
64
|
},
|
|
65
65
|
children: (r) => (() => {
|
|
66
|
-
var n = q(),
|
|
67
|
-
return n.$$click = (i) => C(i, r.type), l(n, o(
|
|
66
|
+
var n = q(), s = n.firstChild;
|
|
67
|
+
return n.$$click = (i) => C(i, r.type), l(n, o(u, {
|
|
68
68
|
get when() {
|
|
69
69
|
return r.icon;
|
|
70
70
|
},
|
|
@@ -74,21 +74,21 @@ function Z(f) {
|
|
|
74
74
|
children: (i) => {
|
|
75
75
|
const D = i();
|
|
76
76
|
return o(D, {
|
|
77
|
-
class: "w-4 h-4 text-
|
|
77
|
+
class: "w-4 h-4 text-[var(--floe-ink-soft)]"
|
|
78
78
|
});
|
|
79
79
|
}
|
|
80
|
-
}),
|
|
80
|
+
}), s), l(s, () => r.name), n;
|
|
81
81
|
})()
|
|
82
|
-
}), null), l(t, o(
|
|
82
|
+
}), null), l(t, o(u, {
|
|
83
83
|
get when() {
|
|
84
|
-
return
|
|
84
|
+
return m().length === 0;
|
|
85
85
|
},
|
|
86
86
|
get children() {
|
|
87
87
|
return K();
|
|
88
88
|
}
|
|
89
|
-
}), null),
|
|
90
|
-
var n =
|
|
91
|
-
return n !== r.e && x(e, r.e = n),
|
|
89
|
+
}), null), h((r) => {
|
|
90
|
+
var n = v("fixed z-[9999]", "min-w-[160px] max-h-[240px] overflow-y-auto", "bg-popover border border-[var(--floe-line)] rounded-panel shadow-[var(--floe-elevation-float-strong)]", "animate-in fade-in slide-in-from-top-1 duration-[var(--floe-duration-fast)]"), s = `${g().top}px`, i = `${Math.max(8, g().left)}px`;
|
|
91
|
+
return n !== r.e && x(e, r.e = n), s !== r.t && w(e, "top", r.t = s), i !== r.a && w(e, "left", r.a = i), r;
|
|
92
92
|
}, {
|
|
93
93
|
e: void 0,
|
|
94
94
|
t: void 0,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { insert as E, createComponent as a, memo as $, effect as R, className as D, template as b, use as H, delegateEvents as P } from "solid-js/web";
|
|
2
|
-
import { createSignal as B, onMount as y, createMemo as
|
|
2
|
+
import { createSignal as B, onMount as y, createMemo as _, For as O, Show as I, onCleanup as F } from "solid-js";
|
|
3
3
|
import { cn as x } from "../../utils/cn.js";
|
|
4
4
|
import { useFileBrowser as G } from "./FileBrowserContext.js";
|
|
5
5
|
import { ChevronRight as M } from "../icons/index.js";
|
|
@@ -23,7 +23,7 @@ function ce(n) {
|
|
|
23
23
|
const s = new ResizeObserver(e);
|
|
24
24
|
s.observe(o), F(() => s.disconnect());
|
|
25
25
|
});
|
|
26
|
-
const
|
|
26
|
+
const d = _(() => {
|
|
27
27
|
const e = t.currentPath(), s = t.homeLabel();
|
|
28
28
|
if (e === "/" || e === "")
|
|
29
29
|
return [{
|
|
@@ -35,21 +35,21 @@ function ce(n) {
|
|
|
35
35
|
path: "/"
|
|
36
36
|
}];
|
|
37
37
|
let g = "";
|
|
38
|
-
for (const
|
|
39
|
-
g += "/" +
|
|
40
|
-
name:
|
|
38
|
+
for (const m of l)
|
|
39
|
+
g += "/" + m, i.push({
|
|
40
|
+
name: m,
|
|
41
41
|
path: g
|
|
42
42
|
});
|
|
43
43
|
return i;
|
|
44
|
-
}),
|
|
45
|
-
const e =
|
|
44
|
+
}), f = _(() => {
|
|
45
|
+
const e = d(), s = r();
|
|
46
46
|
if (s < U || e.length <= 2)
|
|
47
47
|
return {
|
|
48
48
|
collapsed: [],
|
|
49
49
|
visible: e,
|
|
50
50
|
shouldCollapse: !1
|
|
51
51
|
};
|
|
52
|
-
const l = e.map((
|
|
52
|
+
const l = e.map((h) => V(h.name)), i = l[0], g = l[e.length - 1], m = p, L = e.length > 1 ? p : 0, C = i + g + m + L;
|
|
53
53
|
if (C > s && e.length > 2)
|
|
54
54
|
return {
|
|
55
55
|
collapsed: e.slice(1, -1),
|
|
@@ -59,18 +59,18 @@ function ce(n) {
|
|
|
59
59
|
const u = e.slice(1, -1), v = [];
|
|
60
60
|
let S = s - C;
|
|
61
61
|
const A = u.length > 0 ? J + p : 0;
|
|
62
|
-
for (let
|
|
63
|
-
const
|
|
64
|
-
if (S - N >=
|
|
65
|
-
v.unshift(u[
|
|
62
|
+
for (let h = u.length - 1; h >= 0; h--) {
|
|
63
|
+
const w = l[h + 1] + p, N = h > 0 ? A : 0;
|
|
64
|
+
if (S - N >= w)
|
|
65
|
+
v.unshift(u[h]), S -= w;
|
|
66
66
|
else
|
|
67
67
|
break;
|
|
68
68
|
}
|
|
69
|
-
const
|
|
69
|
+
const k = u.slice(0, u.length - v.length);
|
|
70
70
|
return {
|
|
71
|
-
collapsed:
|
|
71
|
+
collapsed: k,
|
|
72
72
|
visible: [e[0], ...v, e[e.length - 1]],
|
|
73
|
-
shouldCollapse:
|
|
73
|
+
shouldCollapse: k.length > 0
|
|
74
74
|
};
|
|
75
75
|
}), W = (e) => {
|
|
76
76
|
t.setCurrentPath(e.path);
|
|
@@ -79,35 +79,35 @@ function ce(n) {
|
|
|
79
79
|
var e = X(), s = o;
|
|
80
80
|
return typeof s == "function" ? H(s, e) : o = e, E(e, a(O, {
|
|
81
81
|
get each() {
|
|
82
|
-
return
|
|
82
|
+
return f().visible;
|
|
83
83
|
},
|
|
84
|
-
children: (l, i) => [a(
|
|
84
|
+
children: (l, i) => [a(I, {
|
|
85
85
|
get when() {
|
|
86
86
|
return i() > 0;
|
|
87
87
|
},
|
|
88
88
|
get children() {
|
|
89
89
|
return a(M, {
|
|
90
|
-
class: "w-3 h-3 text-
|
|
90
|
+
class: "w-3 h-3 text-[var(--floe-ink-ghost)] flex-shrink-0"
|
|
91
91
|
});
|
|
92
92
|
}
|
|
93
|
-
}), a(
|
|
93
|
+
}), a(I, {
|
|
94
94
|
get when() {
|
|
95
|
-
return $(() => !!
|
|
95
|
+
return $(() => !!f().shouldCollapse)() && i() === 1;
|
|
96
96
|
},
|
|
97
97
|
get children() {
|
|
98
98
|
return [a(Y, {
|
|
99
99
|
get segments() {
|
|
100
|
-
return
|
|
100
|
+
return f().collapsed;
|
|
101
101
|
},
|
|
102
102
|
onSelect: W
|
|
103
103
|
}), a(M, {
|
|
104
|
-
class: "w-3 h-3 text-
|
|
104
|
+
class: "w-3 h-3 text-[var(--floe-ink-ghost)] flex-shrink-0"
|
|
105
105
|
})];
|
|
106
106
|
}
|
|
107
107
|
}), a(Z, {
|
|
108
108
|
segment: l,
|
|
109
109
|
get isLast() {
|
|
110
|
-
return i() ===
|
|
110
|
+
return i() === f().visible.length - 1;
|
|
111
111
|
},
|
|
112
112
|
onClick: () => W(l)
|
|
113
113
|
})]
|
|
@@ -124,14 +124,14 @@ function Y(n) {
|
|
|
124
124
|
return j();
|
|
125
125
|
},
|
|
126
126
|
get triggerClass() {
|
|
127
|
-
return x("inline-flex items-center text-xs px-1.5 py-0.5 rounded flex-shrink-0", "transition-
|
|
127
|
+
return x("inline-flex items-center text-xs px-1.5 py-0.5 rounded-xs flex-shrink-0", "transition-colors duration-[var(--floe-duration-fast)]", "text-[var(--floe-ink-soft)] hover:text-foreground hover:bg-[var(--floe-state-hover)]");
|
|
128
128
|
},
|
|
129
129
|
triggerAriaLabel: "Show hidden path segments",
|
|
130
130
|
get items() {
|
|
131
131
|
return t();
|
|
132
132
|
},
|
|
133
133
|
onSelect: (r) => {
|
|
134
|
-
const c = n.segments.find((
|
|
134
|
+
const c = n.segments.find((d) => d.path === r);
|
|
135
135
|
c && n.onSelect(c);
|
|
136
136
|
},
|
|
137
137
|
align: "start"
|
|
@@ -141,8 +141,8 @@ function Z(n) {
|
|
|
141
141
|
return (() => {
|
|
142
142
|
var t = q(), o = t.firstChild;
|
|
143
143
|
return t.$$click = () => n.onClick(), E(o, () => n.segment.name), R((r) => {
|
|
144
|
-
var c = n.isLast,
|
|
145
|
-
return c !== r.e && (t.disabled = r.e = c),
|
|
144
|
+
var c = n.isLast, d = x("text-xs px-1.5 py-0.5 rounded-xs cursor-pointer flex-shrink-0", "transition-colors duration-[var(--floe-duration-fast)]", "focus:outline-none focus-visible:ring-1 focus-visible:ring-ring", n.isLast ? "font-medium text-foreground cursor-default" : "text-[var(--floe-ink-soft)] hover:text-foreground hover:bg-[var(--floe-state-hover)]");
|
|
145
|
+
return c !== r.e && (t.disabled = r.e = c), d !== r.t && D(t, r.t = d), r;
|
|
146
146
|
}, {
|
|
147
147
|
e: void 0,
|
|
148
148
|
t: void 0
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { insert as l, createComponent as s, effect as y, className as h, template as v, setAttribute as
|
|
1
|
+
import { insert as l, createComponent as s, effect as y, className as h, template as v, setAttribute as q, spread as G, mergeProps as X, memo as Y, setStyleProperty as J, delegateEvents as K } from "solid-js/web";
|
|
2
2
|
import { createMemo as T, For as Q, untrack as W, createSignal as Z, Show as I } from "solid-js";
|
|
3
3
|
import { cn as u } from "../../utils/cn.js";
|
|
4
4
|
import { useFileBrowser as _ } from "./FileBrowserContext.js";
|
|
@@ -9,7 +9,7 @@ import { ChevronRight as ie } from "../icons/index.js";
|
|
|
9
9
|
import { createLongPressContextMenuHandlers as ae } from "./longPressContextMenu.js";
|
|
10
10
|
import { fileBrowserTouchTargetAttrs as oe } from "./touchInteractionGuard.js";
|
|
11
11
|
import { createItemContextMenuEvent as le } from "./contextMenuEvent.js";
|
|
12
|
-
var M = /* @__PURE__ */ v("<div>"), se = /* @__PURE__ */ v("<button type=button>"), ce = /* @__PURE__ */ v('<span class="ml-auto mr-2 text-
|
|
12
|
+
var M = /* @__PURE__ */ v("<div>"), se = /* @__PURE__ */ v("<button type=button>"), ce = /* @__PURE__ */ v('<span class="ml-auto mr-2 text-caption text-[var(--floe-ink-quiet)] opacity-0 group-hover:opacity-100 transition-opacity">'), ge = /* @__PURE__ */ v('<div class="flex flex-col"><div><button type=button><span class="relative flex-shrink-0 w-4 h-4"></span><span>'), de = /* @__PURE__ */ v('<span class="flex-shrink-0 w-3.5 h-3.5">');
|
|
13
13
|
function Ie(e) {
|
|
14
14
|
const o = _(), i = ee(), P = () => (e.enableDragDrop ?? !0) && !!i, x = () => e.instanceId ?? "default", g = T(() => o.files().filter((r) => r.type === "folder"));
|
|
15
15
|
return (() => {
|
|
@@ -58,11 +58,11 @@ function ue(e) {
|
|
|
58
58
|
source: "tree"
|
|
59
59
|
});
|
|
60
60
|
let r;
|
|
61
|
-
const [w, $] = Z(!1), F = () => r === "touch" || r === "pen",
|
|
61
|
+
const [w, $] = Z(!1), F = () => r === "touch" || r === "pen", k = T(() => e.item.children?.filter((t) => t.type === "folder").length ?? 0), D = () => k() > 0, E = () => {
|
|
62
62
|
if (!e.enableDragDrop || !e.dragContext) return !1;
|
|
63
63
|
const t = e.dragContext.dragState();
|
|
64
64
|
return t.isDragging ? e.dragContext.canDropOn(t.draggedItems, e.item.path, e.item, e.instanceId) : !1;
|
|
65
|
-
}, B = () => e.dragContext?.dragState(), L = () => B()?.isDragging ?? !1,
|
|
65
|
+
}, B = () => e.dragContext?.dragState(), L = () => B()?.isDragging ?? !1, S = () => w() && L() && e.enableDragDrop, A = (t) => {
|
|
66
66
|
r = t.pointerType, g.onPointerDown(t);
|
|
67
67
|
}, N = (t) => {
|
|
68
68
|
r = t.pointerType, g.onPointerMove(t);
|
|
@@ -113,14 +113,14 @@ function ue(e) {
|
|
|
113
113
|
return n.$$click = j, l(n, s(ie, {
|
|
114
114
|
class: "w-3 h-3 opacity-50"
|
|
115
115
|
})), y((c) => {
|
|
116
|
-
var
|
|
117
|
-
return
|
|
116
|
+
var f = u("flex-shrink-0 w-3.5 h-3.5 flex items-center justify-center cursor-pointer", "transition-transform duration-[var(--floe-duration-fast)]", i() && "rotate-90", "focus:outline-none focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-sidebar-ring"), m = i() ? "Collapse folder" : "Expand folder";
|
|
117
|
+
return f !== c.e && h(n, c.e = f), m !== c.t && q(n, "aria-label", c.t = m), c;
|
|
118
118
|
}, {
|
|
119
119
|
e: void 0,
|
|
120
120
|
t: void 0
|
|
121
121
|
}), n;
|
|
122
122
|
}
|
|
123
|
-
}), d),
|
|
123
|
+
}), d), G(d, X(oe, {
|
|
124
124
|
onClick: z,
|
|
125
125
|
onContextMenu: V,
|
|
126
126
|
onPointerDown: A,
|
|
@@ -150,11 +150,11 @@ function ue(e) {
|
|
|
150
150
|
},
|
|
151
151
|
get children() {
|
|
152
152
|
var n = ce();
|
|
153
|
-
return l(n,
|
|
153
|
+
return l(n, k), n;
|
|
154
154
|
}
|
|
155
155
|
}), null), l(t, s(I, {
|
|
156
156
|
get when() {
|
|
157
|
-
return
|
|
157
|
+
return Y(() => !!i())() && D();
|
|
158
158
|
},
|
|
159
159
|
get children() {
|
|
160
160
|
var n = M();
|
|
@@ -174,19 +174,19 @@ function ue(e) {
|
|
|
174
174
|
get dragContext() {
|
|
175
175
|
return e.dragContext;
|
|
176
176
|
}
|
|
177
|
-
})), y(() => h(n, u("overflow-hidden transition-
|
|
177
|
+
})), y(() => h(n, u("overflow-hidden transition-opacity duration-[var(--floe-duration-base)]", i() ? "opacity-100" : "opacity-0"))), n;
|
|
178
178
|
}
|
|
179
179
|
}), null), y((n) => {
|
|
180
180
|
var c = u(
|
|
181
181
|
"group flex items-center w-full min-h-[var(--floe-row-height)] py-1 text-[length:var(--floe-type-control)] leading-[var(--floe-line-control)]",
|
|
182
|
-
"transition-
|
|
182
|
+
"transition-[background-color,box-shadow] duration-[var(--floe-duration-fast)] ease-out",
|
|
183
183
|
"hover:bg-sidebar-accent/60",
|
|
184
184
|
P() && "bg-sidebar-accent text-sidebar-accent-foreground font-medium",
|
|
185
185
|
// Drop target styling - enhanced visual feedback
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
),
|
|
189
|
-
return c !== n.e && h(a, n.e = c),
|
|
186
|
+
S() && E() && ["bg-primary/15 outline outline-2 outline-primary/60", "shadow-[var(--floe-elevation-raised)]"],
|
|
187
|
+
S() && !E() && ["bg-destructive/10 outline outline-2 outline-dashed outline-destructive/50"]
|
|
188
|
+
), f = `${8 + e.depth * 12}px`, m = u("truncate", re(e.item));
|
|
189
|
+
return c !== n.e && h(a, n.e = c), f !== n.t && J(a, "padding-left", n.t = f), m !== n.a && h(C, n.a = m), n;
|
|
190
190
|
}, {
|
|
191
191
|
e: void 0,
|
|
192
192
|
t: void 0,
|