@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.
Files changed (103) hide show
  1. package/dist/components/chat/blocks/BlockRenderer.js +1 -1
  2. package/dist/components/chat/blocks/CodeDiffBlock.js +56 -56
  3. package/dist/components/chat/blocks/ImageBlock.js +1 -1
  4. package/dist/components/chat/blocks/ToolCallBlock.js +57 -57
  5. package/dist/components/chat/status/ConnectionStatus.js +10 -10
  6. package/dist/components/deck/DeckCell.js +25 -25
  7. package/dist/components/deck/DeckContextMenu.js +20 -20
  8. package/dist/components/deck/DeckGrid.js +1 -1
  9. package/dist/components/deck/DeckTopBar.js +42 -42
  10. package/dist/components/deck/DropZonePreview.js +6 -6
  11. package/dist/components/deck/LayoutSelector.js +53 -53
  12. package/dist/components/deck/WidgetFrame.js +28 -28
  13. package/dist/components/deck/WidgetPalette.js +31 -31
  14. package/dist/components/deck/WidgetTypeSwitcher.js +31 -31
  15. package/dist/components/file-browser/Breadcrumb.js +27 -27
  16. package/dist/components/file-browser/DirectoryTree.js +15 -15
  17. package/dist/components/file-browser/DragPreview.js +58 -58
  18. package/dist/components/file-browser/FileBrowser.js +17 -17
  19. package/dist/components/file-browser/FileBrowserStatusBar.js +18 -18
  20. package/dist/components/file-browser/FileBrowserToolbar.js +27 -27
  21. package/dist/components/file-browser/FileContextMenu.js +47 -47
  22. package/dist/components/file-browser/FileGridView.js +53 -51
  23. package/dist/components/file-browser/FileItemDecorations.js +30 -27
  24. package/dist/components/file-browser/FileListView.js +114 -114
  25. package/dist/components/icons/index.js +1357 -1357
  26. package/dist/components/launchpad/Launchpad.js +14 -14
  27. package/dist/components/launchpad/LaunchpadGrid.js +7 -7
  28. package/dist/components/launchpad/LaunchpadItem.js +11 -11
  29. package/dist/components/launchpad/LaunchpadPagination.js +16 -16
  30. package/dist/components/launchpad/LaunchpadSearch.js +9 -9
  31. package/dist/components/layout/ActivityBar.js +52 -55
  32. package/dist/components/layout/BottomBar.js +17 -17
  33. package/dist/components/layout/MobileNavigationPanel.js +36 -36
  34. package/dist/components/layout/MobileTabBar.js +39 -39
  35. package/dist/components/layout/Panel.js +16 -16
  36. package/dist/components/layout/ResizeHandle.js +19 -19
  37. package/dist/components/layout/Shell.js +50 -50
  38. package/dist/components/layout/Sidebar.js +37 -36
  39. package/dist/components/layout/SidebarPane.js +19 -19
  40. package/dist/components/layout/TopBar.js +16 -16
  41. package/dist/components/layout/TopBarIconButton.js +15 -15
  42. package/dist/components/loading/LoadingOverlay.js +9 -9
  43. package/dist/components/loading/Skeleton.js +11 -11
  44. package/dist/components/ui/Button.js +36 -36
  45. package/dist/components/ui/Card.d.ts +11 -62
  46. package/dist/components/ui/Card.js +64 -237
  47. package/dist/components/ui/Checkbox.js +79 -79
  48. package/dist/components/ui/CommandPalette.js +56 -55
  49. package/dist/components/ui/Dialog.js +91 -93
  50. package/dist/components/ui/DirectoryInput.js +22 -22
  51. package/dist/components/ui/DirectoryPicker.js +8 -8
  52. package/dist/components/ui/Dropdown.js +89 -87
  53. package/dist/components/ui/FeedbackIndicator.js +57 -57
  54. package/dist/components/ui/FileOpenPicker.js +37 -37
  55. package/dist/components/ui/FileSavePicker.js +41 -41
  56. package/dist/components/ui/FloatingWindow.js +213 -205
  57. package/dist/components/ui/Form.js +76 -76
  58. package/dist/components/ui/HighlightBlock.js +14 -14
  59. package/dist/components/ui/Input.js +106 -109
  60. package/dist/components/ui/Pagination.js +86 -86
  61. package/dist/components/ui/Popover.d.ts +33 -0
  62. package/dist/components/ui/Popover.js +133 -0
  63. package/dist/components/ui/ProcessingIndicator.js +344 -345
  64. package/dist/components/ui/Progress.js +94 -97
  65. package/dist/components/ui/QuoteBlock.js +25 -25
  66. package/dist/components/ui/Radio.js +91 -91
  67. package/dist/components/ui/SegmentedControl.js +24 -24
  68. package/dist/components/ui/Stepper.js +68 -60
  69. package/dist/components/ui/Switch.js +25 -25
  70. package/dist/components/ui/Tabs.js +99 -87
  71. package/dist/components/ui/Tag.js +12 -9
  72. package/dist/components/ui/Tooltip.js +30 -30
  73. package/dist/components/ui/floatingPresence.d.ts +7 -0
  74. package/dist/components/ui/floatingPresence.js +80 -39
  75. package/dist/components/ui/index.d.ts +2 -1
  76. package/dist/components/ui/picker/DirectoryFavorites.js +27 -27
  77. package/dist/components/ui/picker/PickerBase.js +107 -107
  78. package/dist/context/NotificationContext.js +4 -4
  79. package/dist/context/ThemeContext.js +71 -70
  80. package/dist/floe.css +205 -43
  81. package/dist/full.js +650 -652
  82. package/dist/language.css +320 -0
  83. package/dist/primitives.css +23 -17
  84. package/dist/standalone.css +1 -0
  85. package/dist/styles/themes/classicSemanticTokens.d.ts +122 -122
  86. package/dist/styles/themes/classicSemanticTokens.js +140 -138
  87. package/dist/styles/themes/index.d.ts +3 -1
  88. package/dist/styles/themes/index.js +10 -10
  89. package/dist/styles/themes/presets.d.ts +2 -2
  90. package/dist/styles/themes/presets.js +34 -34
  91. package/dist/styles/tokens.d.ts +152 -68
  92. package/dist/styles/tokens.js +87 -49
  93. package/dist/styles.css +1 -1
  94. package/dist/surface.css +161 -116
  95. package/dist/themes/dark.css +64 -64
  96. package/dist/themes/light.css +64 -64
  97. package/dist/ui.css +171 -255
  98. package/dist/ui.js +176 -178
  99. package/dist/utils/hotInteraction.d.ts +7 -0
  100. package/dist/utils/hotInteraction.js +12 -12
  101. package/dist/widgets/TerminalWidget.js +28 -28
  102. package/dist/workbench-composition.css +15 -15
  103. 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 $, template as a, delegateEvents as y } from "solid-js/web";
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 D } from "../../context/DeckContext.js";
5
- import { useLayout as k } from "../../context/LayoutContext.js";
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 d } from "./WidgetResizeHandle.js";
7
+ import { WidgetResizeHandle as g } from "./WidgetResizeHandle.js";
8
8
  import { WidgetTypeSwitcher as R } from "./WidgetTypeSwitcher.js";
9
- var S = /* @__PURE__ */ a('<div class="text-muted-foreground/50 pointer-events-none">'), z = /* @__PURE__ */ a('<div class="opacity-0 group-hover:opacity-100 transition-opacity">'), A = /* @__PURE__ */ a('<button class="opacity-0 group-hover:opacity-100 p-0.5 rounded hover:bg-destructive/10 text-muted-foreground hover:text-destructive transition-all cursor-pointer"title="Remove widget">'), E = /* @__PURE__ */ a('<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">');
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 m = D(), s = k(), v = () => e.widget.title ?? e.widgetDef?.name ?? e.widget.type, g = () => !s.isMobile(), f = (o) => {
12
- o.stopPropagation(), o.preventDefault(), m.removeWidget(e.widget.id);
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, c = n.firstChild, h = n.nextSibling;
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 g();
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
- }), c), i(n, r(l, {
26
+ }), u), i(n, r(l, {
27
27
  get when() {
28
28
  return e.widgetDef?.icon;
29
29
  },
30
30
  children: (t) => {
31
- const u = t();
32
- return r(u, {
33
- class: "w-3.5 h-3.5 text-muted-foreground"
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
- }), c), i(c, v), i(n, r(l, {
36
+ }), u), i(u, m), i(n, r(l, {
37
37
  get when() {
38
- return g();
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 g();
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 g();
60
+ return d();
61
61
  },
62
62
  get children() {
63
- return [r(d, {
63
+ return [r(g, {
64
64
  get widget() {
65
65
  return e.widget;
66
66
  },
67
67
  edge: "e"
68
- }), r(d, {
68
+ }), r(g, {
69
69
  get widget() {
70
70
  return e.widget;
71
71
  },
72
72
  edge: "s"
73
- }), r(d, {
73
+ }), r(g, {
74
74
  get widget() {
75
75
  return e.widget;
76
76
  },
77
77
  edge: "se"
78
- }), r(d, {
78
+ }), r(g, {
79
79
  get widget() {
80
80
  return e.widget;
81
81
  },
82
82
  edge: "w"
83
- }), r(d, {
83
+ }), r(g, {
84
84
  get widget() {
85
85
  return e.widget;
86
86
  },
87
87
  edge: "n"
88
- }), r(d, {
88
+ }), r(g, {
89
89
  get widget() {
90
90
  return e.widget;
91
91
  },
92
92
  edge: "sw"
93
- }), r(d, {
93
+ }), r(g, {
94
94
  get widget() {
95
95
  return e.widget;
96
96
  },
97
97
  edge: "ne"
98
- }), r(d, {
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 u = _("widget-header flex items-center gap-1 px-2 py-1.5 border-b border-border bg-muted/30", "select-none", g() && !e.isDragging && "cursor-move", e.isDragging && "cursor-grabbing"), w = g() ? e.widget.id : void 0;
107
- return u !== t.e && b(n, t.e = u), w !== t.t && $(n, "data-widget-drag-handle", t.t = w), t;
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
- y(["click"]);
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 l, delegateEvents as j } from "solid-js/web";
2
- import { createSignal as k, Show as n, For as y } from "solid-js";
3
- import { cn as f } from "../../utils/cn.js";
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__ */ l('<div class="text-center text-muted-foreground text-sm py-8">No widgets registered'), K = /* @__PURE__ */ l('<div><div class="flex items-center justify-between p-3 border-b border-border"><h2 class="text-sm font-semibold">Add Widget</h2><button class="p-1 rounded hover:bg-muted transition-colors cursor-pointer"></button></div><div class="p-2 overflow-y-auto h-[calc(100%-48px)]">'), L = /* @__PURE__ */ l('<div class="fixed inset-0 bg-black/20 z-40">'), Q = /* @__PURE__ */ l('<div class="ml-4 mt-1 space-y-1">'), U = /* @__PURE__ */ l('<div class=mb-2><button class="w-full flex items-center gap-2 p-2 rounded hover:bg-muted transition-colors text-left cursor-pointer"><span class="text-sm font-medium"></span><span class="ml-auto text-xs text-muted-foreground">'), V = /* @__PURE__ */ l('<button class="w-full flex items-center gap-2 p-2 rounded hover:bg-muted transition-colors text-left cursor-pointer"><span class=text-sm>'), Y = /* @__PURE__ */ l('<div class="w-4 h-4">');
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(), b = F(), [d, s] = k(!1), [W, z] = k(null), S = [{
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(n, {
25
+ return e(l, {
26
26
  get when() {
27
27
  return p.editMode();
28
28
  },
29
29
  get children() {
30
- return [e(n, {
30
+ return [e(l, {
31
31
  get when() {
32
- return !d();
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 f("fixed bottom-4 right-4 z-50 shadow-lg", C.class);
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, $ = o.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($, e(y, {
53
+ })), r(b, e(y, {
54
54
  each: S,
55
55
  children: (i) => {
56
- const c = () => b.getWidgetsByCategory(i.key), v = () => W() === i.key, N = () => c().length > 0;
57
- return e(n, {
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 u = U(), m = u.firstChild, g = m.firstChild, R = g.nextSibling;
63
- return m.$$click = () => B(i.key), r(m, e(q, {
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 f("w-4 h-4 text-muted-foreground transition-transform", v() && "rotate-90");
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, () => c().length), r(u, e(n, {
67
+ }), g), r(g, () => i.label), r(R, () => d().length), r(f, e(l, {
68
68
  get when() {
69
- return v();
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 c();
75
+ return d();
76
76
  },
77
- children: (h) => (() => {
78
- var a = V(), _ = a.firstChild;
79
- return a.$$click = () => A(h.type), r(a, e(n, {
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 h.icon;
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-muted-foreground"
89
+ class: "w-4 h-4 text-[var(--floe-ink-soft)]"
90
90
  });
91
91
  }
92
- }), _), r(_, () => h.name), a;
92
+ }), k), r(k, () => m.name), a;
93
93
  })()
94
94
  })), w;
95
95
  }
96
- }), null), u;
96
+ }), null), f;
97
97
  }
98
98
  });
99
99
  }
100
- }), null), r($, e(n, {
100
+ }), null), r(b, e(l, {
101
101
  get when() {
102
- return b.widgets().size === 0;
102
+ return v.widgets().size === 0;
103
103
  },
104
104
  get children() {
105
105
  return J();
106
106
  }
107
- }), null), O(() => P(t, f("fixed right-0 top-0 bottom-0 w-72 bg-background border-l border-border shadow-xl z-50", "transform transition-transform duration-200", d() ? "translate-x-0" : "translate-x-full"))), t;
108
- })(), e(n, {
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 d();
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 v, className as x, Portal as E, setStyleProperty as w, template as s, use as R, delegateEvents as T } from "solid-js/web";
2
- import { createSignal as y, createEffect as W, onCleanup as I, Show as p, For as L } from "solid-js";
3
- import { cn as m } from "../../utils/cn.js";
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__ */ s('<button title="Switch widget type">'), F = /* @__PURE__ */ s('<div class="fixed inset-0 z-[9998]">'), K = /* @__PURE__ */ s('<div class="px-2 py-3 text-xs text-muted-foreground text-center">No other widget types available'), j = /* @__PURE__ */ s('<div><div class=p-1><div class="px-2 py-1.5 text-xs text-muted-foreground font-medium">Switch to'), q = /* @__PURE__ */ s('<button class="w-full flex items-center gap-2 px-2 py-1.5 rounded hover:bg-muted transition-colors text-left cursor-pointer"><span class=text-xs>'), G = /* @__PURE__ */ s('<div class="w-4 h-4">');
9
- function Z(f) {
10
- const $ = N(), b = z(), [c, d] = y(!1), [g, k] = y({
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 u;
15
- const _ = () => f.widget.type, h = () => Array.from(b.widgets().values()).filter((t) => t.type !== _()), C = (e, t) => {
16
- e.stopPropagation(), e.preventDefault(), d(!1);
17
- const r = f.widget.id, n = $.changeWidgetType;
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() && u) {
21
- const t = u.getBoundingClientRect();
22
- k({
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
- d((t) => !t);
28
+ f((t) => !t);
29
29
  }, P = () => {
30
- d(!1);
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" && d(!1);
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 = u;
42
- return typeof t == "function" ? R(t, e) : u = e, l(e, o(B, {
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 m("w-3 h-3 transition-transform", c() && "rotate-180");
46
+ return v("w-3 h-3 transition-transform", c() && "rotate-180");
47
47
  }
48
- }), null), v(() => x(e, m("p-0.5 rounded hover:bg-muted text-muted-foreground hover:text-foreground", "transition-colors cursor-pointer pointer-events-auto flex items-center gap-0.5", f.class))), e;
49
- })(), o(p, {
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 h();
63
+ return m();
64
64
  },
65
65
  children: (r) => (() => {
66
- var n = q(), a = n.firstChild;
67
- return n.$$click = (i) => C(i, r.type), l(n, o(p, {
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-muted-foreground"
77
+ class: "w-4 h-4 text-[var(--floe-ink-soft)]"
78
78
  });
79
79
  }
80
- }), a), l(a, () => r.name), n;
80
+ }), s), l(s, () => r.name), n;
81
81
  })()
82
- }), null), l(t, o(p, {
82
+ }), null), l(t, o(u, {
83
83
  get when() {
84
- return h().length === 0;
84
+ return m().length === 0;
85
85
  },
86
86
  get children() {
87
87
  return K();
88
88
  }
89
- }), null), v((r) => {
90
- var n = m("fixed z-[9999]", "min-w-[160px] max-h-[240px] overflow-y-auto", "bg-popover border border-border rounded-md shadow-xl", "animate-in fade-in slide-in-from-top-1 duration-150"), a = `${g().top}px`, i = `${Math.max(8, g().left)}px`;
91
- return n !== r.e && x(e, r.e = n), a !== r.t && w(e, "top", r.t = a), i !== r.a && w(e, "left", r.a = i), r;
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 I, For as O, Show as k, onCleanup as F } from "solid-js";
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 h = I(() => {
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 f of l)
39
- g += "/" + f, i.push({
40
- name: f,
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
- }), m = I(() => {
45
- const e = h(), s = r();
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((d) => V(d.name)), i = l[0], g = l[e.length - 1], f = p, L = e.length > 1 ? p : 0, C = i + g + f + L;
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 d = u.length - 1; d >= 0; d--) {
63
- const _ = l[d + 1] + p, N = d > 0 ? A : 0;
64
- if (S - N >= _)
65
- v.unshift(u[d]), S -= _;
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 w = u.slice(0, u.length - v.length);
69
+ const k = u.slice(0, u.length - v.length);
70
70
  return {
71
- collapsed: w,
71
+ collapsed: k,
72
72
  visible: [e[0], ...v, e[e.length - 1]],
73
- shouldCollapse: w.length > 0
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 m().visible;
82
+ return f().visible;
83
83
  },
84
- children: (l, i) => [a(k, {
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-muted-foreground/50 flex-shrink-0"
90
+ class: "w-3 h-3 text-[var(--floe-ink-ghost)] flex-shrink-0"
91
91
  });
92
92
  }
93
- }), a(k, {
93
+ }), a(I, {
94
94
  get when() {
95
- return $(() => !!m().shouldCollapse)() && i() === 1;
95
+ return $(() => !!f().shouldCollapse)() && i() === 1;
96
96
  },
97
97
  get children() {
98
98
  return [a(Y, {
99
99
  get segments() {
100
- return m().collapsed;
100
+ return f().collapsed;
101
101
  },
102
102
  onSelect: W
103
103
  }), a(M, {
104
- class: "w-3 h-3 text-muted-foreground/50 flex-shrink-0"
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() === m().visible.length - 1;
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-all duration-100", "text-muted-foreground hover:text-foreground hover:bg-muted/50");
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((h) => h.path === r);
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, h = x("text-xs px-1.5 py-0.5 rounded cursor-pointer flex-shrink-0", "transition-all duration-100", "focus:outline-none focus-visible:ring-1 focus-visible:ring-ring", n.isLast ? "font-medium text-foreground cursor-default" : "text-muted-foreground hover:text-foreground hover:bg-muted/50");
145
- return c !== r.e && (t.disabled = r.e = c), h !== r.t && D(t, r.t = h), r;
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 G, spread as X, mergeProps as Y, memo as q, setStyleProperty as J, delegateEvents as K } from "solid-js/web";
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-[10px] text-muted-foreground/60 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">');
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", E = T(() => e.item.children?.filter((t) => t.type === "folder").length ?? 0), D = () => E() > 0, S = () => {
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, k = () => w() && L() && e.enableDragDrop, A = (t) => {
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 m = u("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"), f = i() ? "Collapse folder" : "Expand folder";
117
- return m !== c.e && h(n, c.e = m), f !== c.t && G(n, "aria-label", c.t = f), c;
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), X(d, Y(oe, {
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, E), n;
153
+ return l(n, k), n;
154
154
  }
155
155
  }), null), l(t, s(I, {
156
156
  get when() {
157
- return q(() => !!i())() && D();
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-all duration-200", i() ? "opacity-100" : "opacity-0"))), n;
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-all duration-150 ease-out",
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
- k() && S() && ["bg-primary/15 outline outline-2 outline-primary/60", "shadow-sm shadow-primary/10"],
187
- k() && !S() && ["bg-destructive/10 outline outline-2 outline-dashed outline-destructive/50"]
188
- ), m = `${8 + e.depth * 12}px`, f = u("truncate", re(e.item));
189
- return c !== n.e && h(a, n.e = c), m !== n.t && J(a, "padding-left", n.t = m), f !== n.a && h(C, n.a = f), n;
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,