@floegence/floe-webapp-core 0.15.4 → 0.15.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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Floegence, Inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -2,7 +2,8 @@ import { type JSX } from 'solid-js';
2
2
  export interface DialogProps {
3
3
  open: boolean;
4
4
  onOpenChange: (open: boolean) => void;
5
- title?: string;
5
+ /** Dialog title - can be a string or JSX element for custom headers */
6
+ title?: string | JSX.Element;
6
7
  description?: string;
7
8
  children: JSX.Element;
8
9
  footer?: JSX.Element;
@@ -17,8 +17,8 @@ export interface BasePickerProps {
17
17
  files: FileItem[];
18
18
  /** Initial directory path (default: '/') */
19
19
  initialPath?: string;
20
- /** Dialog title */
21
- title?: string;
20
+ /** Dialog title - can be a string or JSX element for custom headers */
21
+ title?: string | JSX.Element;
22
22
  /** Confirm button text */
23
23
  confirmText?: string;
24
24
  /** Cancel button text (default: 'Cancel') */
package/dist/index126.js CHANGED
@@ -1,20 +1,126 @@
1
- function W(t) {
2
- const c = t.labels, i = c.length;
3
- if (i <= 2) return;
4
- const n = t.viewBoxWidth;
5
- if (!Number.isFinite(n) || n <= 0) return;
6
- const x = t.padding.left, s = t.padding.right, o = n - x - s;
7
- if (!Number.isFinite(o) || o <= 0) return;
8
- const e = t.viewportWidthPx, m = typeof e == "number" && Number.isFinite(e) && e > 0 ? Math.min(1, e / n) : 1, l = o * m;
9
- let a = 0;
10
- for (const r of c)
11
- r && r.length > a && (a = r.length);
12
- if (a <= 0) return;
13
- const f = t.axisFontSizePx ?? 10, u = t.avgCharWidthFactor ?? 0.6, g = t.minGapPx ?? 6, d = a * f * u + g, h = l / Math.max(1, i - 1);
14
- if (h >= d) return;
15
- const v = Math.max(1, Math.ceil(d / Math.max(1, h))), P = Math.floor((i - 1) / v) + 1;
16
- return Math.max(2, Math.min(i, P));
1
+ import { createComponent as n, Portal as D, insert as o, Dynamic as I, effect as p, className as x, setStyleProperty as F, memo as E, template as l, setAttribute as y } from "solid-js/web";
2
+ import { createMemo as b, Show as m, For as P } from "solid-js";
3
+ import { cn as h } from "./index112.js";
4
+ import { useFileBrowserDrag as R } from "./index104.js";
5
+ import { FolderIcon as T, getFileIcon as O } from "./index55.js";
6
+ var V = /* @__PURE__ */ l('<div class="text-[10px] text-muted-foreground pl-6">and <!> more...'), j = /* @__PURE__ */ l("<span>Drop to move"), $ = /* @__PURE__ */ l("<div>"), z = /* @__PURE__ */ l("<div><div>"), B = /* @__PURE__ */ l('<div class="flex items-center gap-2.5 text-xs text-foreground"><span class="flex-shrink-0 w-4 h-4"></span><span class="truncate font-medium">'), M = /* @__PURE__ */ l("<span>Cannot drop here"), A = /* @__PURE__ */ l('<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><polyline points="20 6 9 17 4 12">'), U = /* @__PURE__ */ l('<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=18 y1=6 x2=6 y2=18></line><line x1=6 y1=6 x2=18 y2=18>');
7
+ const w = 3, X = 16, N = 16;
8
+ function L() {
9
+ const d = R(), r = () => d?.dragState(), k = () => r()?.isDragging ?? !1, c = () => r()?.draggedItems ?? [], v = () => r()?.pointerPosition ?? {
10
+ x: 0,
11
+ y: 0
12
+ }, g = () => r()?.isValidDrop ?? !1, f = () => !!r()?.dropTarget, S = b(() => c().slice(0, w).map((a) => a.item)), _ = b(() => {
13
+ const t = c().length;
14
+ return t > w ? t - w : 0;
15
+ }), C = (t) => t.type === "folder" ? T : O(t.extension);
16
+ return n(m, {
17
+ get when() {
18
+ return E(() => !!k())() && c().length > 0;
19
+ },
20
+ get children() {
21
+ return n(D, {
22
+ get children() {
23
+ var t = z(), a = t.firstChild;
24
+ return o(a, n(P, {
25
+ get each() {
26
+ return S();
27
+ },
28
+ children: (e) => (() => {
29
+ var s = B(), i = s.firstChild, u = i.nextSibling;
30
+ return o(i, n(I, {
31
+ get component() {
32
+ return C(e);
33
+ },
34
+ class: "w-4 h-4"
35
+ })), o(u, () => e.name), s;
36
+ })()
37
+ }), null), o(a, n(m, {
38
+ get when() {
39
+ return _() > 0;
40
+ },
41
+ get children() {
42
+ var e = V(), s = e.firstChild, i = s.nextSibling;
43
+ return i.nextSibling, o(e, _, i), e;
44
+ }
45
+ }), null), o(a, n(m, {
46
+ get when() {
47
+ return f();
48
+ },
49
+ get children() {
50
+ var e = $();
51
+ return o(e, n(m, {
52
+ get when() {
53
+ return g();
54
+ },
55
+ get fallback() {
56
+ return [n(Y, {
57
+ class: "w-3.5 h-3.5"
58
+ }), M()];
59
+ },
60
+ get children() {
61
+ return [n(W, {
62
+ class: "w-3.5 h-3.5"
63
+ }), j()];
64
+ }
65
+ })), p(() => x(e, h("flex items-center gap-1.5 pt-1.5 mt-1 border-t border-border/50 text-[11px] font-medium", "transition-colors duration-150", g() ? "text-primary" : "text-destructive"))), e;
66
+ }
67
+ }), null), o(t, n(m, {
68
+ get when() {
69
+ return c().length > 1;
70
+ },
71
+ get children() {
72
+ var e = $();
73
+ return o(e, () => c().length), p(() => x(e, h(
74
+ "absolute -top-2 -right-2",
75
+ "min-w-[20px] h-5 px-1 rounded-full",
76
+ "bg-primary text-primary-foreground",
77
+ "flex items-center justify-center",
78
+ "text-[10px] font-semibold",
79
+ "shadow-lg shadow-primary/30",
80
+ // Subtle pulse on first render
81
+ "animate-in zoom-in-50 duration-200"
82
+ ))), e;
83
+ }
84
+ }), null), p((e) => {
85
+ var s = h(
86
+ "fixed top-0 left-0 pointer-events-none z-[9999]",
87
+ // GPU-accelerated transform for smooth movement
88
+ "will-change-transform"
89
+ ), i = `translate3d(${v().x + X}px, ${v().y + N}px, 0)`, u = h(
90
+ "flex flex-col gap-1 p-2.5 rounded-lg",
91
+ "bg-popover/95 backdrop-blur-sm border border-border",
92
+ "shadow-xl shadow-black/10",
93
+ "min-w-[150px] max-w-[220px]",
94
+ // Entrance animation
95
+ "animate-in fade-in zoom-in-95 duration-150",
96
+ // Visual feedback for valid/invalid drop with smooth transition
97
+ "transition-[border-color,box-shadow] duration-150",
98
+ f() && g() && "border-primary shadow-primary/20",
99
+ f() && !g() && "border-destructive shadow-destructive/20"
100
+ );
101
+ return s !== e.e && x(t, e.e = s), i !== e.t && F(t, "transform", e.t = i), u !== e.a && x(a, e.a = u), e;
102
+ }, {
103
+ e: void 0,
104
+ t: void 0,
105
+ a: void 0
106
+ }), t;
107
+ }
108
+ });
109
+ }
110
+ });
111
+ }
112
+ function W(d) {
113
+ return (() => {
114
+ var r = A();
115
+ return p(() => y(r, "class", d.class)), r;
116
+ })();
117
+ }
118
+ function Y(d) {
119
+ return (() => {
120
+ var r = U();
121
+ return p(() => y(r, "class", d.class)), r;
122
+ })();
17
123
  }
18
124
  export {
19
- W as computeAutoMaxXAxisLabels
125
+ L as DragPreview
20
126
  };
package/dist/index127.js CHANGED
@@ -1,126 +1,42 @@
1
- import { createComponent as n, Portal as D, insert as o, Dynamic as I, effect as p, className as x, setStyleProperty as F, memo as E, template as l, setAttribute as y } from "solid-js/web";
2
- import { createMemo as b, Show as m, For as P } from "solid-js";
3
- import { cn as h } from "./index112.js";
4
- import { useFileBrowserDrag as R } from "./index104.js";
5
- import { FolderIcon as T, getFileIcon as O } from "./index55.js";
6
- var V = /* @__PURE__ */ l('<div class="text-[10px] text-muted-foreground pl-6">and <!> more...'), j = /* @__PURE__ */ l("<span>Drop to move"), $ = /* @__PURE__ */ l("<div>"), z = /* @__PURE__ */ l("<div><div>"), B = /* @__PURE__ */ l('<div class="flex items-center gap-2.5 text-xs text-foreground"><span class="flex-shrink-0 w-4 h-4"></span><span class="truncate font-medium">'), M = /* @__PURE__ */ l("<span>Cannot drop here"), A = /* @__PURE__ */ l('<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><polyline points="20 6 9 17 4 12">'), U = /* @__PURE__ */ l('<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=18 y1=6 x2=6 y2=18></line><line x1=6 y1=6 x2=18 y2=18>');
7
- const w = 3, X = 16, N = 16;
8
- function L() {
9
- const d = R(), r = () => d?.dragState(), k = () => r()?.isDragging ?? !1, c = () => r()?.draggedItems ?? [], v = () => r()?.pointerPosition ?? {
10
- x: 0,
11
- y: 0
12
- }, g = () => r()?.isValidDrop ?? !1, f = () => !!r()?.dropTarget, S = b(() => c().slice(0, w).map((a) => a.item)), _ = b(() => {
13
- const t = c().length;
14
- return t > w ? t - w : 0;
15
- }), C = (t) => t.type === "folder" ? T : O(t.extension);
16
- return n(m, {
17
- get when() {
18
- return E(() => !!k())() && c().length > 0;
19
- },
20
- get children() {
21
- return n(D, {
22
- get children() {
23
- var t = z(), a = t.firstChild;
24
- return o(a, n(P, {
25
- get each() {
26
- return S();
27
- },
28
- children: (e) => (() => {
29
- var s = B(), i = s.firstChild, u = i.nextSibling;
30
- return o(i, n(I, {
31
- get component() {
32
- return C(e);
33
- },
34
- class: "w-4 h-4"
35
- })), o(u, () => e.name), s;
36
- })()
37
- }), null), o(a, n(m, {
38
- get when() {
39
- return _() > 0;
40
- },
41
- get children() {
42
- var e = V(), s = e.firstChild, i = s.nextSibling;
43
- return i.nextSibling, o(e, _, i), e;
44
- }
45
- }), null), o(a, n(m, {
46
- get when() {
47
- return f();
48
- },
49
- get children() {
50
- var e = $();
51
- return o(e, n(m, {
52
- get when() {
53
- return g();
54
- },
55
- get fallback() {
56
- return [n(Y, {
57
- class: "w-3.5 h-3.5"
58
- }), M()];
59
- },
60
- get children() {
61
- return [n(W, {
62
- class: "w-3.5 h-3.5"
63
- }), j()];
64
- }
65
- })), p(() => x(e, h("flex items-center gap-1.5 pt-1.5 mt-1 border-t border-border/50 text-[11px] font-medium", "transition-colors duration-150", g() ? "text-primary" : "text-destructive"))), e;
66
- }
67
- }), null), o(t, n(m, {
68
- get when() {
69
- return c().length > 1;
70
- },
71
- get children() {
72
- var e = $();
73
- return o(e, () => c().length), p(() => x(e, h(
74
- "absolute -top-2 -right-2",
75
- "min-w-[20px] h-5 px-1 rounded-full",
76
- "bg-primary text-primary-foreground",
77
- "flex items-center justify-center",
78
- "text-[10px] font-semibold",
79
- "shadow-lg shadow-primary/30",
80
- // Subtle pulse on first render
81
- "animate-in zoom-in-50 duration-200"
82
- ))), e;
83
- }
84
- }), null), p((e) => {
85
- var s = h(
86
- "fixed top-0 left-0 pointer-events-none z-[9999]",
87
- // GPU-accelerated transform for smooth movement
88
- "will-change-transform"
89
- ), i = `translate3d(${v().x + X}px, ${v().y + N}px, 0)`, u = h(
90
- "flex flex-col gap-1 p-2.5 rounded-lg",
91
- "bg-popover/95 backdrop-blur-sm border border-border",
92
- "shadow-xl shadow-black/10",
93
- "min-w-[150px] max-w-[220px]",
94
- // Entrance animation
95
- "animate-in fade-in zoom-in-95 duration-150",
96
- // Visual feedback for valid/invalid drop with smooth transition
97
- "transition-[border-color,box-shadow] duration-150",
98
- f() && g() && "border-primary shadow-primary/20",
99
- f() && !g() && "border-destructive shadow-destructive/20"
100
- );
101
- return s !== e.e && x(t, e.e = s), i !== e.t && F(t, "transform", e.t = i), u !== e.a && x(a, e.a = u), e;
102
- }, {
103
- e: void 0,
104
- t: void 0,
105
- a: void 0
106
- }), t;
107
- }
108
- });
1
+ import { onCleanup as T } from "solid-js";
2
+ function v(s, i, u) {
3
+ const d = u?.delayMs ?? 500, p = u?.moveTolerancePx ?? 10, m = u?.selectOnOpen ?? !0;
4
+ let n = null, l = null, c = !1;
5
+ const r = () => {
6
+ n !== null && typeof window < "u" && (window.clearTimeout(n), n = null), l = null;
7
+ }, a = () => {
8
+ c = !0;
9
+ }, w = (e, t) => {
10
+ if (!m) {
11
+ s.showContextMenu({ x: e, y: t, items: [i] }), a();
12
+ return;
109
13
  }
110
- });
111
- }
112
- function W(d) {
113
- return (() => {
114
- var r = A();
115
- return p(() => y(r, "class", d.class)), r;
116
- })();
117
- }
118
- function Y(d) {
119
- return (() => {
120
- var r = U();
121
- return p(() => y(r, "class", d.class)), r;
122
- })();
14
+ const o = i.id;
15
+ s.isSelected(o) || s.selectItem(o, !1);
16
+ const f = s.getSelectedItemsList(), h = f.length > 0 ? f : [i];
17
+ s.showContextMenu({ x: e, y: t, items: h }), a();
18
+ }, y = (e) => {
19
+ if (c = !1, e.pointerType === "mouse" || typeof window > "u") return;
20
+ r(), l = { x: e.clientX, y: e.clientY };
21
+ const t = e.clientX, o = e.clientY;
22
+ n = window.setTimeout(() => {
23
+ n = null, w(t, o);
24
+ }, d);
25
+ }, C = (e) => {
26
+ if (n === null || !l) return;
27
+ const t = e.clientX - l.x, o = e.clientY - l.y;
28
+ Math.hypot(t, o) > p && (r(), a());
29
+ }, M = () => r(), P = () => r(), x = (e) => c ? (c = !1, e.preventDefault(), e.stopPropagation(), !0) : !1;
30
+ return T(() => {
31
+ r();
32
+ }), {
33
+ onPointerDown: y,
34
+ onPointerMove: C,
35
+ onPointerUp: M,
36
+ onPointerCancel: P,
37
+ consumeClickSuppression: x
38
+ };
123
39
  }
124
40
  export {
125
- L as DragPreview
41
+ v as createLongPressContextMenuHandlers
126
42
  };
package/dist/index128.js CHANGED
@@ -1,42 +1,34 @@
1
- import { onCleanup as T } from "solid-js";
2
- function v(s, i, u) {
3
- const d = u?.delayMs ?? 500, p = u?.moveTolerancePx ?? 10, m = u?.selectOnOpen ?? !0;
4
- let n = null, l = null, c = !1;
5
- const r = () => {
6
- n !== null && typeof window < "u" && (window.clearTimeout(n), n = null), l = null;
7
- }, a = () => {
8
- c = !0;
9
- }, w = (e, t) => {
10
- if (!m) {
11
- s.showContextMenu({ x: e, y: t, items: [i] }), a();
12
- return;
1
+ import { createSignal as f, createMemo as i, onCleanup as F } from "solid-js";
2
+ function x(e) {
3
+ const a = e.overscan ?? 8;
4
+ let t = null, o = null, r = null;
5
+ const [m, d] = f(0), [z, S] = f(0), c = () => {
6
+ t && (d(t.scrollTop), S(t.clientHeight));
7
+ }, p = () => {
8
+ if (t && r === null) {
9
+ if (typeof requestAnimationFrame > "u") {
10
+ c();
11
+ return;
12
+ }
13
+ r = requestAnimationFrame(() => {
14
+ r = null, c();
15
+ });
13
16
  }
14
- const o = i.id;
15
- s.isSelected(o) || s.selectItem(o, !1);
16
- const f = s.getSelectedItemsList(), h = f.length > 0 ? f : [i];
17
- s.showContextMenu({ x: e, y: t, items: h }), a();
18
- }, y = (e) => {
19
- if (c = !1, e.pointerType === "mouse" || typeof window > "u") return;
20
- r(), l = { x: e.clientX, y: e.clientY };
21
- const t = e.clientX, o = e.clientY;
22
- n = window.setTimeout(() => {
23
- n = null, w(t, o);
24
- }, d);
25
- }, C = (e) => {
26
- if (n === null || !l) return;
27
- const t = e.clientX - l.x, o = e.clientY - l.y;
28
- Math.hypot(t, o) > p && (r(), a());
29
- }, M = () => r(), P = () => r(), x = (e) => c ? (c = !1, e.preventDefault(), e.stopPropagation(), !0) : !1;
30
- return T(() => {
31
- r();
32
- }), {
33
- onPointerDown: y,
34
- onPointerMove: C,
35
- onPointerUp: M,
36
- onPointerCancel: P,
37
- consumeClickSuppression: x
17
+ }, l = i(() => {
18
+ const n = e.count(), s = e.itemSize(), u = m(), w = z();
19
+ if (n <= 0 || s <= 0) return { start: 0, end: 0 };
20
+ const b = Math.max(0, Math.floor(u / s) - a), A = Math.min(n, Math.ceil((u + w) / s) + a);
21
+ return { start: b, end: A };
22
+ }), v = i(() => l().start * e.itemSize()), h = i(() => {
23
+ const n = e.count();
24
+ return Math.max(0, n - l().end) * e.itemSize();
25
+ }), M = i(() => e.count() * e.itemSize()), g = (n) => {
26
+ t !== n && (o?.disconnect(), o = null, t = n, !(!t || typeof ResizeObserver > "u") && (o = new ResizeObserver(() => c()), o.observe(t), c()));
38
27
  };
28
+ return F(() => {
29
+ o?.disconnect(), r !== null && typeof cancelAnimationFrame < "u" && (cancelAnimationFrame(r), r = null);
30
+ }), { scrollRef: g, onScroll: p, range: l, paddingTop: v, paddingBottom: h, totalSize: M };
39
31
  }
40
32
  export {
41
- v as createLongPressContextMenuHandlers
33
+ x as useVirtualWindow
42
34
  };
package/dist/index129.js CHANGED
@@ -1,34 +1,20 @@
1
- import { createSignal as f, createMemo as i, onCleanup as F } from "solid-js";
2
- function x(e) {
3
- const a = e.overscan ?? 8;
4
- let t = null, o = null, r = null;
5
- const [m, d] = f(0), [z, S] = f(0), c = () => {
6
- t && (d(t.scrollTop), S(t.clientHeight));
7
- }, p = () => {
8
- if (t && r === null) {
9
- if (typeof requestAnimationFrame > "u") {
10
- c();
11
- return;
12
- }
13
- r = requestAnimationFrame(() => {
14
- r = null, c();
15
- });
16
- }
17
- }, l = i(() => {
18
- const n = e.count(), s = e.itemSize(), u = m(), w = z();
19
- if (n <= 0 || s <= 0) return { start: 0, end: 0 };
20
- const b = Math.max(0, Math.floor(u / s) - a), A = Math.min(n, Math.ceil((u + w) / s) + a);
21
- return { start: b, end: A };
22
- }), v = i(() => l().start * e.itemSize()), h = i(() => {
23
- const n = e.count();
24
- return Math.max(0, n - l().end) * e.itemSize();
25
- }), M = i(() => e.count() * e.itemSize()), g = (n) => {
26
- t !== n && (o?.disconnect(), o = null, t = n, !(!t || typeof ResizeObserver > "u") && (o = new ResizeObserver(() => c()), o.observe(t), c()));
27
- };
28
- return F(() => {
29
- o?.disconnect(), r !== null && typeof cancelAnimationFrame < "u" && (cancelAnimationFrame(r), r = null);
30
- }), { scrollRef: g, onScroll: p, range: l, paddingTop: v, paddingBottom: h, totalSize: M };
1
+ function W(t) {
2
+ const c = t.labels, i = c.length;
3
+ if (i <= 2) return;
4
+ const n = t.viewBoxWidth;
5
+ if (!Number.isFinite(n) || n <= 0) return;
6
+ const x = t.padding.left, s = t.padding.right, o = n - x - s;
7
+ if (!Number.isFinite(o) || o <= 0) return;
8
+ const e = t.viewportWidthPx, m = typeof e == "number" && Number.isFinite(e) && e > 0 ? Math.min(1, e / n) : 1, l = o * m;
9
+ let a = 0;
10
+ for (const r of c)
11
+ r && r.length > a && (a = r.length);
12
+ if (a <= 0) return;
13
+ const f = t.axisFontSizePx ?? 10, u = t.avgCharWidthFactor ?? 0.6, g = t.minGapPx ?? 6, d = a * f * u + g, h = l / Math.max(1, i - 1);
14
+ if (h >= d) return;
15
+ const v = Math.max(1, Math.ceil(d / Math.max(1, h))), P = Math.floor((i - 1) / v) + 1;
16
+ return Math.max(2, Math.min(i, P));
31
17
  }
32
18
  export {
33
- x as useVirtualWindow
19
+ W as computeAutoMaxXAxisLabels
34
20
  };
package/dist/index36.js CHANGED
@@ -2,7 +2,7 @@ import { delegateEvents as te, createComponent as $, mergeProps as ee, insert as
2
2
  import { splitProps as _t, createUniqueId as Xt, createMemo as K, createSignal as pt, createEffect as wt, onCleanup as Mt, Show as ot, For as z, untrack as qt } from "solid-js";
3
3
  import { cn as Tt } from "./index112.js";
4
4
  import { useResizeObserver as ne } from "./index107.js";
5
- import { computeAutoMaxXAxisLabels as re } from "./index126.js";
5
+ import { computeAutoMaxXAxisLabels as re } from "./index129.js";
6
6
  var It = /* @__PURE__ */ A("<div class=chart-title>"), Et = /* @__PURE__ */ A("<svg><g class=chart-grid></svg>", !1, !0, !1), ae = /* @__PURE__ */ A("<div class=chart-legend>"), oe = /* @__PURE__ */ A('<div><svg class=chart-svg preserveAspectRatio="xMidYMid meet"><defs></defs><rect fill=transparent class=chart-hover-area></rect><g class=chart-axis-labels></g><g class=chart-axis-labels>'), se = /* @__PURE__ */ A("<svg><linearGradient x1=0% y1=0% x2=0% y2=100%><stop offset=0% style=stop-opacity:0.4></stop><stop offset=100% style=stop-opacity:0.05></svg>", !1, !0, !1), Dt = /* @__PURE__ */ A("<svg><line class=chart-grid-line></svg>", !1, !0, !1), ie = /* @__PURE__ */ A("<svg><text class=chart-axis-label text-anchor=end dominant-baseline=middle></svg>", !1, !0, !1), le = /* @__PURE__ */ A("<svg><text class=chart-axis-label></svg>", !1, !0, !1), ce = /* @__PURE__ */ A("<svg><path class=chart-area></svg>", !1, !0, !1), de = /* @__PURE__ */ A("<svg><path fill=none stroke-width=2 stroke-linecap=round stroke-linejoin=round class=chart-line></svg>", !1, !0, !1), ue = /* @__PURE__ */ A("<svg><circle stroke-width=2 class=chart-point><title></svg>", !1, !0, !1), he = /* @__PURE__ */ A("<svg><line class=chart-crosshair></svg>", !1, !0, !1), ve = /* @__PURE__ */ A("<svg><rect rx=4 class=chart-tooltip-bg></svg>", !1, !0, !1), ge = /* @__PURE__ */ A("<svg><text class=chart-tooltip-label></svg>", !1, !0, !1), me = /* @__PURE__ */ A("<svg><circle r=6 class=chart-crosshair-point></svg>", !1, !0, !1), fe = /* @__PURE__ */ A("<svg><g><circle r=4></circle><text class=chart-tooltip-value>: </svg>", !1, !0, !1), xe = /* @__PURE__ */ A("<div class=chart-legend-item><div class=chart-legend-color></div><span class=chart-legend-label>"), be = /* @__PURE__ */ A('<div><svg class=chart-svg preserveAspectRatio="xMidYMid meet"><defs></defs><g class=chart-axis-labels>'), $e = /* @__PURE__ */ A("<svg><linearGradient x1=0% y1=0% x2=0% y2=100%><stop offset=0% style=stop-opacity:1></stop><stop offset=100% style=stop-opacity:0.7></svg>", !1, !0, !1), ye = /* @__PURE__ */ A("<svg><text class=chart-bar-value text-anchor=middle></svg>", !1, !0, !1), pe = /* @__PURE__ */ A("<svg><g><rect rx=2 class=chart-bar><title></svg>", !1, !0, !1), Me = /* @__PURE__ */ A("<svg><text class=chart-axis-label text-anchor=middle></svg>", !1, !0, !1), we = /* @__PURE__ */ A("<svg><text class=chart-pie-center-label text-anchor=middle dominant-baseline=middle></svg>", !1, !0, !1), Le = /* @__PURE__ */ A("<svg><text class=chart-pie-center-sublabel text-anchor=middle dominant-baseline=middle>Total</svg>", !1, !0, !1), Ae = /* @__PURE__ */ A("<div class=chart-pie-legend>"), Ce = /* @__PURE__ */ A('<div><div class=chart-pie-wrapper><svg class="chart-svg chart-pie-svg"><defs>'), _e = /* @__PURE__ */ A("<svg><linearGradient x1=0% y1=0% x2=100% y2=100%><stop offset=0% style=stop-opacity:1></stop><stop offset=100% style=stop-opacity:0.8></svg>", !1, !0, !1), Pe = /* @__PURE__ */ A("<svg><path class=chart-pie-slice><title></svg>", !1, !0, !1), Se = /* @__PURE__ */ A("<div class=chart-legend-item><div class=chart-legend-color></div><span class=chart-legend-label></span><span class=chart-legend-value>%"), Fe = /* @__PURE__ */ A("<div class=chart-monitoring-status><div class=chart-monitoring-dot></div><span>Live"), Te = /* @__PURE__ */ A("<div><div class=chart-monitoring-header>");
7
7
  const Lt = [
8
8
  "var(--primary)",
package/dist/index47.js CHANGED
@@ -10,7 +10,7 @@ import { FileListView as ee } from "./index50.js";
10
10
  import { FileGridView as te } from "./index51.js";
11
11
  import { FileBrowserToolbar as re } from "./index54.js";
12
12
  import { FileContextMenu as ie } from "./index52.js";
13
- import { DragPreview as ne } from "./index127.js";
13
+ import { DragPreview as ne } from "./index126.js";
14
14
  var le = /* @__PURE__ */ m('<div class="border-b border-border">'), oe = /* @__PURE__ */ m('<button type=button class="flex items-center justify-center w-5 h-5 rounded cursor-pointer hover:bg-sidebar-accent/80 transition-colors"aria-label="Close sidebar"><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 class="w-3.5 h-3.5"><path d="M18 6 6 18"></path><path d="m6 6 12 12">'), ae = /* @__PURE__ */ m('<div class="absolute inset-0 bg-background/60 backdrop-blur-sm z-[9]">'), se = /* @__PURE__ */ m('<div><div class="flex flex-1 min-h-0 relative"><aside><div class="h-full flex flex-col"><div class="flex items-center justify-between px-3 py-2 border-b border-sidebar-border"><span class="text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/60">Explorer</span></div><div class="flex-1 min-h-0 overflow-auto py-1"></div></div></aside><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]">');
15
15
  function Se(e) {
16
16
  return n(U, {
package/dist/index49.js CHANGED
@@ -5,7 +5,7 @@ import { useFileBrowser as _ } from "./index48.js";
5
5
  import { useFileBrowserDrag as W } from "./index104.js";
6
6
  import { FolderOpenIcon as Z, FolderIcon as ee } from "./index55.js";
7
7
  import { ChevronRight as te } from "./index41.js";
8
- import { createLongPressContextMenuHandlers as ne } from "./index128.js";
8
+ import { createLongPressContextMenuHandlers as ne } from "./index127.js";
9
9
  var E = /* @__PURE__ */ x("<div>"), re = /* @__PURE__ */ x("<button type=button>"), ie = /* @__PURE__ */ x('<span class="ml-auto mr-2 text-[10px] text-muted-foreground/60 opacity-0 group-hover:opacity-100 transition-opacity">'), ae = /* @__PURE__ */ x('<div class="flex flex-col"><div><button type=button><span class="flex-shrink-0 w-4 h-4"></span><span class=truncate>'), oe = /* @__PURE__ */ x('<span class="flex-shrink-0 w-3.5 h-3.5">');
10
10
  function ve(e) {
11
11
  const s = _(), i = W(), y = () => (e.enableDragDrop ?? !0) && !!i, D = () => e.instanceId ?? "default", g = w(() => s.files().filter((r) => r.type === "folder"));
package/dist/index50.js CHANGED
@@ -3,12 +3,12 @@ import { createMemo as tt, createSignal as at, Show as W, For as st, untrack as
3
3
  import { cn as H } from "./index112.js";
4
4
  import { useMediaQuery as it } from "./index105.js";
5
5
  import { useResizeObserver as ht } from "./index107.js";
6
- import { useVirtualWindow as gt } from "./index129.js";
6
+ import { useVirtualWindow as gt } from "./index128.js";
7
7
  import { useFileBrowser as lt } from "./index48.js";
8
8
  import { useFileBrowserDrag as xt } from "./index104.js";
9
9
  import { FolderIcon as vt, getFileIcon as wt } from "./index55.js";
10
10
  import { ChevronDown as $t } from "./index41.js";
11
- import { createLongPressContextMenuHandlers as bt } from "./index128.js";
11
+ import { createLongPressContextMenuHandlers as bt } from "./index127.js";
12
12
  import { ResizeHandle as nt } from "./index8.js";
13
13
  var Ct = /* @__PURE__ */ _("<span class=truncate>"), Dt = /* @__PURE__ */ _('<mark class="bg-warning/40 text-inherit rounded-sm">'), St = /* @__PURE__ */ _("<span>"), Mt = /* @__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'), zt = /* @__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'), _t = /* @__PURE__ */ _("<div>"), yt = /* @__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="flex-1 min-h-0 overflow-auto">'), It = /* @__PURE__ */ _('<span>No files matching "<!>"'), Pt = /* @__PURE__ */ _('<button type=button class="px-2 py-1 rounded bg-muted hover:bg-muted/80 transition-colors">Clear Filter'), kt = /* @__PURE__ */ _('<div class="flex flex-col items-center justify-center h-32 gap-2 text-xs text-muted-foreground">'), pt = /* @__PURE__ */ _("<span>This folder is empty"), rt = /* @__PURE__ */ _('<div class="shrink-0 px-3 py-1.5 text-left text-muted-foreground truncate">'), Lt = /* @__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">');
14
14
  function Tt(t) {
package/dist/index51.js CHANGED
@@ -2,11 +2,11 @@ import { delegateEvents as se, addEventListener as de, use as ge, insert as I, c
2
2
  import { createMemo as z, Show as E, For as W, untrack as he, createSignal as ve } from "solid-js";
3
3
  import { cn as T } from "./index112.js";
4
4
  import { useMediaQuery as M } from "./index105.js";
5
- import { useVirtualWindow as xe } from "./index129.js";
5
+ import { useVirtualWindow as xe } from "./index128.js";
6
6
  import { useFileBrowser as J } from "./index48.js";
7
7
  import { useFileBrowserDrag as be } from "./index104.js";
8
8
  import { FolderIcon as De, getFileIcon as Ie } from "./index55.js";
9
- import { createLongPressContextMenuHandlers as we } from "./index128.js";
9
+ import { createLongPressContextMenuHandlers as we } from "./index127.js";
10
10
  var ye = /* @__PURE__ */ x('<mark class="bg-warning/40 text-inherit rounded-sm">'), Ce = /* @__PURE__ */ x('<div class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 gap-2">'), Pe = /* @__PURE__ */ x("<div><div class=p-3>"), Se = /* @__PURE__ */ x('<span>No files matching "<!>"'), $e = /* @__PURE__ */ x('<button type=button class="px-2 py-1 rounded bg-muted hover:bg-muted/80 transition-colors">Clear Filter'), _e = /* @__PURE__ */ x('<div class="flex flex-col items-center justify-center h-32 gap-2 text-xs text-muted-foreground">'), Te = /* @__PURE__ */ x("<span>This folder is empty"), Le = /* @__PURE__ */ x('<div class="absolute top-1.5 right-1.5 w-4 h-4 rounded-full bg-primary flex items-center justify-center"><svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=3 stroke-linecap=round stroke-linejoin=round class="w-2.5 h-2.5 text-primary-foreground"><polyline points="20 6 9 17 4 12">'), ke = /* @__PURE__ */ x("<button type=button><div></div><span></span><div>");
11
11
  function Fe(e) {
12
12
  const n = z(() => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@floegence/floe-webapp-core",
3
- "version": "0.15.4",
3
+ "version": "0.15.5",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -16,14 +16,6 @@
16
16
  "files": [
17
17
  "dist"
18
18
  ],
19
- "scripts": {
20
- "dev": "node ./scripts/dev.mjs",
21
- "build": "pnpm clean && vite build && tsc -p tsconfig.build.json && pnpm build:styles && pnpm build:assets",
22
- "build:assets": "node ./scripts/copy-style-assets.mjs",
23
- "build:styles": "vite build -c vite.styles.config.ts",
24
- "typecheck": "tsc --noEmit",
25
- "clean": "rm -rf dist *.tsbuildinfo"
26
- },
27
19
  "peerDependencies": {
28
20
  "solid-js": "^1.8.0"
29
21
  },
@@ -42,5 +34,13 @@
42
34
  "typescript": "^5.9.3",
43
35
  "vite": "^7.3.1",
44
36
  "vite-plugin-solid": "^2.11.10"
37
+ },
38
+ "scripts": {
39
+ "dev": "node ./scripts/dev.mjs",
40
+ "build": "pnpm clean && vite build && tsc -p tsconfig.build.json && pnpm build:styles && pnpm build:assets",
41
+ "build:assets": "node ./scripts/copy-style-assets.mjs",
42
+ "build:styles": "vite build -c vite.styles.config.ts",
43
+ "typecheck": "tsc --noEmit",
44
+ "clean": "rm -rf dist *.tsbuildinfo"
45
45
  }
46
- }
46
+ }