@floegence/floe-webapp-core 0.35.9 → 0.35.11

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 (32) hide show
  1. package/dist/chat.css +32 -33
  2. package/dist/components/chat/blocks/CodeDiffBlock.js +51 -51
  3. package/dist/components/chat/blocks/ToolCallBlock.js +3 -3
  4. package/dist/components/chat/message/MessageMeta.js +1 -1
  5. package/dist/components/chat/status/ConnectionStatus.js +6 -6
  6. package/dist/components/deck/DropZonePreview.js +20 -28
  7. package/dist/components/launchpad/Launchpad.js +78 -62
  8. package/dist/components/launchpad/LaunchpadGrid.js +1 -1
  9. package/dist/components/launchpad/LaunchpadItem.js +17 -16
  10. package/dist/components/launchpad/LaunchpadPagination.js +16 -16
  11. package/dist/components/launchpad/LaunchpadSearch.js +9 -9
  12. package/dist/components/ui/Card.js +104 -96
  13. package/dist/components/ui/Charts.js +125 -135
  14. package/dist/components/ui/Dialog.js +15 -15
  15. package/dist/components/ui/FloatingWindow.js +18 -18
  16. package/dist/components/ui/MobileKeyboard.js +174 -143
  17. package/dist/components/ui/Progress.js +87 -87
  18. package/dist/components/ui/Tabs.js +1 -1
  19. package/dist/components/ui/mobileKeyboardViewport.d.ts +18 -0
  20. package/dist/components/ui/mobileKeyboardViewport.js +42 -0
  21. package/dist/components/ui/picker/PickerBase.js +1 -1
  22. package/dist/floe.css +8 -15
  23. package/dist/full.js +654 -643
  24. package/dist/index.d.ts +1 -0
  25. package/dist/index.js +126 -115
  26. package/dist/styles/tokens.d.ts +1150 -0
  27. package/dist/styles/tokens.js +565 -0
  28. package/dist/styles.css +1 -1
  29. package/dist/themes/light.css +0 -3
  30. package/dist/ui.css +48 -143
  31. package/dist/widgets/MetricsWidget.js +15 -15
  32. package/package.json +1 -1
package/dist/chat.css CHANGED
@@ -246,8 +246,8 @@
246
246
  }
247
247
 
248
248
  .chat-message-bubble-error {
249
- border-color: rgb(239 68 68 / 0.3);
250
- background-color: rgb(239 68 68 / 0.05);
249
+ border-color: color-mix(in srgb, var(--error) 30%, transparent);
250
+ background-color: color-mix(in srgb, var(--error) 5%, transparent);
251
251
  }
252
252
 
253
253
  .chat-message-error {
@@ -256,7 +256,7 @@
256
256
  gap: 0.5rem;
257
257
  margin-top: 0.5rem;
258
258
  font-size: 0.75rem;
259
- color: rgb(239 68 68);
259
+ color: var(--error);
260
260
  }
261
261
 
262
262
  /* ============================================
@@ -368,7 +368,7 @@
368
368
  padding: 0.125rem 0.375rem;
369
369
  border-radius: 0.25rem;
370
370
  background-color: color-mix(in srgb, var(--muted) 70%, transparent);
371
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
371
+ font-family: var(--font-mono);
372
372
  font-size: 0.6875rem;
373
373
  color: var(--primary);
374
374
  }
@@ -486,7 +486,7 @@ pre.chat-md-code-block code {
486
486
  font-size: 0.75rem;
487
487
  font-weight: 500;
488
488
  color: #e6edf3;
489
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
489
+ font-family: var(--font-mono);
490
490
  }
491
491
 
492
492
  .chat-code-language {
@@ -526,7 +526,7 @@ pre.chat-md-code-block code {
526
526
 
527
527
  .chat-code-content code {
528
528
  font-size: 0.6875rem;
529
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
529
+ font-family: var(--font-mono);
530
530
  line-height: 1.5;
531
531
  color: #e6edf3;
532
532
  }
@@ -539,7 +539,7 @@ pre.chat-md-code-block code {
539
539
  padding: 0.875rem 1rem;
540
540
  background-color: #0d1117;
541
541
  font-size: 0.6875rem;
542
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
542
+ font-family: var(--font-mono);
543
543
  overflow-x: auto;
544
544
  color: #e6edf3;
545
545
  }
@@ -581,12 +581,12 @@ pre.chat-md-code-block code {
581
581
  font-size: 0.75rem;
582
582
  font-weight: 500;
583
583
  color: #e6edf3;
584
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
584
+ font-family: var(--font-mono);
585
585
  }
586
586
 
587
587
  .chat-code-diff-stats {
588
588
  font-size: 0.75rem;
589
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
589
+ font-family: var(--font-mono);
590
590
  color: #e6edf3;
591
591
  }
592
592
 
@@ -630,7 +630,7 @@ pre.chat-md-code-block code {
630
630
  .chat-code-diff-content {
631
631
  overflow-x: auto;
632
632
  font-size: 0.6875rem;
633
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
633
+ font-family: var(--font-mono);
634
634
  line-height: 1.5;
635
635
  color: #e6edf3;
636
636
  background-color: #0d1117;
@@ -759,14 +759,14 @@ pre.chat-md-code-block code {
759
759
 
760
760
  .chat-shell-prompt {
761
761
  color: #58a6ff;
762
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
762
+ font-family: var(--font-mono);
763
763
  font-size: 0.6875rem;
764
764
  font-weight: 500;
765
765
  }
766
766
 
767
767
  .chat-shell-command-text {
768
768
  flex: 1;
769
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
769
+ font-family: var(--font-mono);
770
770
  font-size: 0.6875rem;
771
771
  color: #e6edf3;
772
772
  }
@@ -778,7 +778,7 @@ pre.chat-md-code-block code {
778
778
  .chat-shell-output {
779
779
  padding: 0.75rem 0.875rem;
780
780
  font-size: 0.75rem;
781
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
781
+ font-family: var(--font-mono);
782
782
  overflow-x: auto;
783
783
  max-height: 16rem;
784
784
  overflow-y: auto;
@@ -797,7 +797,7 @@ pre.chat-md-code-block code {
797
797
  .chat-shell-exit-code {
798
798
  padding: 0.375rem 0.875rem;
799
799
  font-size: 0.6875rem;
800
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
800
+ font-family: var(--font-mono);
801
801
  border-top: 1px solid #30363d;
802
802
  background-color: #161b22;
803
803
  }
@@ -833,7 +833,7 @@ pre.chat-md-code-block code {
833
833
  }
834
834
 
835
835
  .chat-mermaid-error {
836
- color: rgb(239 68 68);
836
+ color: var(--error);
837
837
  }
838
838
 
839
839
  .chat-mermaid-content {
@@ -965,7 +965,7 @@ pre.chat-md-code-block code {
965
965
  margin-top: 0.5rem;
966
966
  font-size: 0.6875rem;
967
967
  color: var(--muted-foreground);
968
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
968
+ font-family: var(--font-mono);
969
969
  white-space: pre-wrap;
970
970
  font-style: italic;
971
971
  }
@@ -1022,7 +1022,7 @@ pre.chat-md-code-block code {
1022
1022
  .chat-tool-name {
1023
1023
  font-size: 0.6875rem;
1024
1024
  font-weight: 600;
1025
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
1025
+ font-family: var(--font-mono);
1026
1026
  }
1027
1027
 
1028
1028
  .chat-tool-approval-actions {
@@ -1052,8 +1052,8 @@ pre.chat-md-code-block code {
1052
1052
  }
1053
1053
 
1054
1054
  .chat-tool-approval-btn-reject {
1055
- color: rgb(239 68 68);
1056
- border-color: color-mix(in srgb, rgb(239 68 68) 40%, var(--border));
1055
+ color: var(--error);
1056
+ border-color: color-mix(in srgb, var(--error) 40%, var(--border));
1057
1057
  }
1058
1058
 
1059
1059
  .chat-tool-summary {
@@ -1137,7 +1137,7 @@ pre.chat-md-code-block code {
1137
1137
  .chat-tool-args,
1138
1138
  .chat-tool-result {
1139
1139
  font-size: 0.75rem;
1140
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
1140
+ font-family: var(--font-mono);
1141
1141
  background-color: color-mix(in srgb, var(--muted) 30%, transparent);
1142
1142
  border-radius: 0.375rem;
1143
1143
  padding: 0.625rem 0.75rem;
@@ -1149,12 +1149,12 @@ pre.chat-md-code-block code {
1149
1149
  }
1150
1150
 
1151
1151
  .chat-tool-error-section {
1152
- background-color: rgb(239 68 68 / 0.05);
1152
+ background-color: color-mix(in srgb, var(--error) 5%, transparent);
1153
1153
  }
1154
1154
 
1155
1155
  .chat-tool-error {
1156
1156
  font-size: 0.6875rem;
1157
- color: rgb(239 68 68);
1157
+ color: var(--error);
1158
1158
  }
1159
1159
 
1160
1160
  .chat-tool-children {
@@ -1523,7 +1523,7 @@ pre.chat-md-code-block code {
1523
1523
  border-radius: 0.25rem;
1524
1524
  background-color: color-mix(in srgb, var(--muted) 60%, transparent);
1525
1525
  border: 1px solid color-mix(in srgb, var(--border) 70%, transparent);
1526
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
1526
+ font-family: var(--font-mono);
1527
1527
  font-size: 0.5625rem;
1528
1528
  }
1529
1529
 
@@ -1610,7 +1610,7 @@ pre.chat-md-code-block code {
1610
1610
  }
1611
1611
 
1612
1612
  .chat-attachment-error {
1613
- color: rgb(239 68 68);
1613
+ color: var(--error);
1614
1614
  }
1615
1615
 
1616
1616
  .chat-attachment-remove-btn {
@@ -1627,9 +1627,9 @@ pre.chat-md-code-block code {
1627
1627
  }
1628
1628
 
1629
1629
  .chat-attachment-remove-btn:hover {
1630
- background-color: rgb(239 68 68);
1631
- border-color: rgb(239 68 68);
1632
- color: white;
1630
+ background-color: var(--error);
1631
+ border-color: var(--error);
1632
+ color: var(--error-foreground);
1633
1633
  }
1634
1634
 
1635
1635
  /* ============================================
@@ -1718,11 +1718,11 @@ pre.chat-md-code-block code {
1718
1718
 
1719
1719
  Design notes:
1720
1720
  1. These rules live in @layer components so they can override the global @layer base selection styles in floe.css.
1721
- 2. Code blocks use hard-coded colors because they always have a fixed dark background (#0d1117).
1721
+ 2. Code blocks consume dedicated selection tokens because they always sit on a fixed dark surface.
1722
1722
  3. User message bubbles use theme variables because bubble colors vary by theme.
1723
1723
 
1724
1724
  Color scheme:
1725
- - Code blocks: bright blue background (#57a5ff) + dark text (#0d1117)
1725
+ - Code blocks: dedicated code selection tokens
1726
1726
  - User bubbles (light theme): yellow background + black text (bubble background is dark)
1727
1727
  - User bubbles (dark theme): dark blue background + white text (bubble background is light)
1728
1728
  */
@@ -1734,8 +1734,7 @@ pre.chat-md-code-block code {
1734
1734
  }
1735
1735
 
1736
1736
  /* Code-block selection
1737
- Code blocks always use a dark background (#0d1117), so we use a fixed bright selection style.
1738
- Hard-coded colors ensure visibility in all cases. */
1737
+ Code blocks always use a dark background, so they consume dedicated selection tokens. */
1739
1738
  .chat-code-block ::selection,
1740
1739
  .chat-code-block *::selection,
1741
1740
  .chat-code-diff-block ::selection,
@@ -1744,8 +1743,8 @@ pre.chat-md-code-block ::selection,
1744
1743
  pre.chat-md-code-block *::selection,
1745
1744
  .chat-shell-block ::selection,
1746
1745
  .chat-shell-block *::selection {
1747
- background-color: #57a5ff;
1748
- color: #0d1117;
1746
+ background-color: var(--selection-code-bg);
1747
+ color: var(--selection-code-fg);
1749
1748
  }
1750
1749
 
1751
1750
  /* User message bubble selection
@@ -1,50 +1,50 @@
1
- import { insert as d, createComponent as o, effect as x, className as w, setAttribute as U, template as h, addEventListener as A, use as H, setStyleProperty as L, delegateEvents as z } from "solid-js/web";
1
+ import { insert as d, createComponent as o, effect as y, className as w, setAttribute as U, template as h, addEventListener as A, use as H, setStyleProperty as L, delegateEvents as z } from "solid-js/web";
2
2
  import { createSignal as I, onCleanup as G, createEffect as O, createMemo as E, Show as m, For as B } from "solid-js";
3
- import { cn as y } from "../../../utils/cn.js";
3
+ import { cn as x } from "../../../utils/cn.js";
4
4
  import { deferAfterPaint as X } from "../../../utils/defer.js";
5
5
  import { useVirtualWindow as N } from "../../../hooks/useVirtualWindow.js";
6
6
  import { hasDiffWorker as V, computeCodeDiff as j, computeCodeDiffSync as q } from "../hooks/useCodeDiff.js";
7
- var J = /* @__PURE__ */ h("<span class=chat-code-diff-filename>"), K = /* @__PURE__ */ h('<span class=chat-code-diff-stats><span style="color:rgb(34 197 94)">+</span><span style="color:rgb(239 68 68);margin-left:0.5rem">-'), Q = /* @__PURE__ */ h("<div><div class=chat-code-diff-header><div class=chat-code-diff-info></div><div class=chat-code-diff-actions><div class=chat-code-diff-view-toggle><button type=button>Unified</button><button type=button>Split</button></div><button type=button class=chat-code-copy-btn>"), Y = /* @__PURE__ */ h('<span class="chat-code-diff-stats text-muted-foreground">...'), Z = /* @__PURE__ */ h('<div class="p-3 text-xs text-muted-foreground">Computing diff...'), ee = /* @__PURE__ */ h('<div class="p-3 text-xs text-muted-foreground">Diff is too large to render without a worker. Configure `configureDiffWorker(createDiffWorker())`.'), te = /* @__PURE__ */ h("<div class=chat-code-diff-content>"), ne = /* @__PURE__ */ h("<div class=chat-code-diff-content><div><div class=chat-diff-unified>"), ie = /* @__PURE__ */ h("<div style=height:18px><span class=chat-diff-line-number></span><span class=chat-diff-line-sign></span><span class=chat-diff-line-content>"), re = /* @__PURE__ */ h("<div class=chat-code-diff-content><div><div class=chat-diff-split><div class=chat-diff-split-side></div><div class=chat-diff-split-side>"), le = /* @__PURE__ */ h("<div style=height:18px><span class=chat-diff-line-number></span><span class=chat-diff-line-content>"), oe = /* @__PURE__ */ h('<svg width=14 height=14 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2><rect x=9 y=9 width=13 height=13 rx=2 ry=2></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">'), de = /* @__PURE__ */ h('<svg width=14 height=14 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2><polyline points="20 6 9 17 4 12">');
8
- const ce = 8e4, P = 18, Ce = (s) => {
9
- const [t, r] = I("unified"), [c, l] = I(!1), [i, f] = I(null), [n, u] = I(!0);
10
- let g = 0;
7
+ var J = /* @__PURE__ */ h("<span class=chat-code-diff-filename>"), K = /* @__PURE__ */ h("<span class=chat-code-diff-stats><span class=text-success>+</span><span class=text-error style=margin-left:0.5rem>-"), Q = /* @__PURE__ */ h("<div><div class=chat-code-diff-header><div class=chat-code-diff-info></div><div class=chat-code-diff-actions><div class=chat-code-diff-view-toggle><button type=button>Unified</button><button type=button>Split</button></div><button type=button class=chat-code-copy-btn>"), Y = /* @__PURE__ */ h('<span class="chat-code-diff-stats text-muted-foreground">...'), Z = /* @__PURE__ */ h('<div class="p-3 text-xs text-muted-foreground">Computing diff...'), ee = /* @__PURE__ */ h('<div class="p-3 text-xs text-muted-foreground">Diff is too large to render without a worker. Configure `configureDiffWorker(createDiffWorker())`.'), te = /* @__PURE__ */ h("<div class=chat-code-diff-content>"), ne = /* @__PURE__ */ h("<div class=chat-code-diff-content><div><div class=chat-diff-unified>"), ie = /* @__PURE__ */ h("<div style=height:18px><span class=chat-diff-line-number></span><span class=chat-diff-line-sign></span><span class=chat-diff-line-content>"), re = /* @__PURE__ */ h("<div class=chat-code-diff-content><div><div class=chat-diff-split><div class=chat-diff-split-side></div><div class=chat-diff-split-side>"), le = /* @__PURE__ */ h("<div style=height:18px><span class=chat-diff-line-number></span><span class=chat-diff-line-content>"), oe = /* @__PURE__ */ h('<svg width=14 height=14 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2><rect x=9 y=9 width=13 height=13 rx=2 ry=2></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">'), de = /* @__PURE__ */ h('<svg width=14 height=14 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2><polyline points="20 6 9 17 4 12">');
8
+ const se = 8e4, P = 18, Ce = (c) => {
9
+ const [t, r] = I("unified"), [s, l] = I(!1), [i, f] = I(null), [n, u] = I(!0);
10
+ let v = 0;
11
11
  G(() => {
12
- g += 1;
12
+ v += 1;
13
13
  }), O(() => {
14
- const v = s.oldCode ?? "", R = s.newCode ?? "", p = ++g;
14
+ const g = c.oldCode ?? "", R = c.newCode ?? "", p = ++v;
15
15
  u(!0), f(null);
16
- const C = v, $ = R;
16
+ const C = g, $ = R;
17
17
  X(() => {
18
- if (p !== g) return;
19
- if (C.length + $.length > ce && !V()) {
18
+ if (p !== v) return;
19
+ if (C.length + $.length > se && !V()) {
20
20
  u(!1);
21
21
  return;
22
22
  }
23
23
  (V() ? j(C, $) : Promise.resolve(q(C, $))).then((e) => {
24
- p === g && f(e);
24
+ p === v && f(e);
25
25
  }).catch((e) => {
26
- console.error("Diff compute error:", e), p === g && f(null);
26
+ console.error("Diff compute error:", e), p === v && f(null);
27
27
  }).finally(() => {
28
- p === g && u(!1);
28
+ p === v && u(!1);
29
29
  });
30
30
  });
31
31
  });
32
32
  const a = E(() => i()?.stats), k = async () => {
33
33
  try {
34
- await navigator.clipboard.writeText(s.newCode), l(!0), setTimeout(() => l(!1), 2e3);
35
- } catch (v) {
36
- console.error("Failed to copy:", v);
34
+ await navigator.clipboard.writeText(c.newCode), l(!0), setTimeout(() => l(!1), 2e3);
35
+ } catch (g) {
36
+ console.error("Failed to copy:", g);
37
37
  }
38
38
  };
39
39
  return (() => {
40
- var v = Q(), R = v.firstChild, p = R.firstChild, C = p.nextSibling, $ = C.firstChild, S = $.firstChild, F = S.nextSibling, D = $.nextSibling;
40
+ var g = Q(), R = g.firstChild, p = R.firstChild, C = p.nextSibling, $ = C.firstChild, S = $.firstChild, F = S.nextSibling, D = $.nextSibling;
41
41
  return d(p, o(m, {
42
42
  get when() {
43
- return s.filename;
43
+ return c.filename;
44
44
  },
45
45
  get children() {
46
46
  var e = J();
47
- return d(e, () => s.filename), e;
47
+ return d(e, () => c.filename), e;
48
48
  }
49
49
  }), null), d(p, o(m, {
50
50
  get when() {
@@ -61,7 +61,7 @@ const ce = 8e4, P = 18, Ce = (s) => {
61
61
  }
62
62
  }), null), S.$$click = () => r("unified"), F.$$click = () => r("split"), D.$$click = k, d(D, o(m, {
63
63
  get when() {
64
- return c();
64
+ return s();
65
65
  },
66
66
  get fallback() {
67
67
  return o(ue, {});
@@ -69,7 +69,7 @@ const ce = 8e4, P = 18, Ce = (s) => {
69
69
  get children() {
70
70
  return o(he, {});
71
71
  }
72
- })), d(v, o(m, {
72
+ })), d(g, o(m, {
73
73
  get when() {
74
74
  return i();
75
75
  },
@@ -106,7 +106,7 @@ const ce = 8e4, P = 18, Ce = (s) => {
106
106
  });
107
107
  },
108
108
  get children() {
109
- return o(se, {
109
+ return o(ce, {
110
110
  get model() {
111
111
  return i();
112
112
  }
@@ -114,23 +114,23 @@ const ce = 8e4, P = 18, Ce = (s) => {
114
114
  }
115
115
  });
116
116
  }
117
- }), null), x((e) => {
118
- var _ = y("chat-code-diff-block", s.class), b = y("chat-code-diff-view-btn", t() === "unified" && "active"), M = y("chat-code-diff-view-btn", t() === "split" && "active"), T = c() ? "Copied!" : "Copy new code";
119
- return _ !== e.e && w(v, e.e = _), b !== e.t && w(S, e.t = b), M !== e.a && w(F, e.a = M), T !== e.o && U(D, "title", e.o = T), e;
117
+ }), null), y((e) => {
118
+ var _ = x("chat-code-diff-block", c.class), b = x("chat-code-diff-view-btn", t() === "unified" && "active"), M = x("chat-code-diff-view-btn", t() === "split" && "active"), T = s() ? "Copied!" : "Copy new code";
119
+ return _ !== e.e && w(g, e.e = _), b !== e.t && w(S, e.t = b), M !== e.a && w(F, e.a = M), T !== e.o && U(D, "title", e.o = T), e;
120
120
  }, {
121
121
  e: void 0,
122
122
  t: void 0,
123
123
  a: void 0,
124
124
  o: void 0
125
- }), v;
125
+ }), g;
126
126
  })();
127
127
  };
128
- function se(s) {
129
- const t = () => s.model.unifiedLines, r = N({
128
+ function ce(c) {
129
+ const t = () => c.model.unifiedLines, r = N({
130
130
  count: () => t().length,
131
131
  itemSize: () => P,
132
132
  overscan: 12
133
- }), c = E(() => {
133
+ }), s = E(() => {
134
134
  const {
135
135
  start: l,
136
136
  end: i
@@ -142,31 +142,31 @@ function se(s) {
142
142
  var l = ne(), i = l.firstChild, f = i.firstChild;
143
143
  return A(l, "scroll", r.onScroll), H((n) => r.scrollRef(n), l), d(f, o(B, {
144
144
  get each() {
145
- return c();
145
+ return s();
146
146
  },
147
147
  children: (n) => o(ae, {
148
148
  get line() {
149
149
  return t()[n];
150
150
  }
151
151
  })
152
- })), x((n) => {
153
- var u = `${r.paddingTop()}px`, g = `${r.paddingBottom()}px`;
154
- return u !== n.e && L(i, "padding-top", n.e = u), g !== n.t && L(i, "padding-bottom", n.t = g), n;
152
+ })), y((n) => {
153
+ var u = `${r.paddingTop()}px`, v = `${r.paddingBottom()}px`;
154
+ return u !== n.e && L(i, "padding-top", n.e = u), v !== n.t && L(i, "padding-bottom", n.t = v), n;
155
155
  }, {
156
156
  e: void 0,
157
157
  t: void 0
158
158
  }), l;
159
159
  })();
160
160
  }
161
- function ae(s) {
162
- const t = () => s.line;
161
+ function ae(c) {
162
+ const t = () => c.line;
163
163
  return (() => {
164
- var r = ie(), c = r.firstChild, l = c.nextSibling, i = l.nextSibling;
165
- return d(c, () => t()?.lineNumber ?? ""), d(l, () => t()?.sign ?? " "), d(i, () => t()?.content ?? " "), x(() => w(r, y("chat-diff-line", t()?.type === "added" && "chat-diff-line-added", t()?.type === "removed" && "chat-diff-line-removed"))), r;
164
+ var r = ie(), s = r.firstChild, l = s.nextSibling, i = l.nextSibling;
165
+ return d(s, () => t()?.lineNumber ?? ""), d(l, () => t()?.sign ?? " "), d(i, () => t()?.content ?? " "), y(() => w(r, x("chat-diff-line", t()?.type === "added" && "chat-diff-line-added", t()?.type === "removed" && "chat-diff-line-removed"))), r;
166
166
  })();
167
167
  }
168
- function fe(s) {
169
- const t = () => s.model.split.left, r = () => s.model.split.right, c = N({
168
+ function fe(c) {
169
+ const t = () => c.model.split.left, r = () => c.model.split.right, s = N({
170
170
  count: () => t().length,
171
171
  itemSize: () => P,
172
172
  overscan: 12
@@ -174,13 +174,13 @@ function fe(s) {
174
174
  const {
175
175
  start: i,
176
176
  end: f
177
- } = c.range(), n = [];
177
+ } = s.range(), n = [];
178
178
  for (let u = i; u < f; u += 1) n.push(u);
179
179
  return n;
180
180
  });
181
181
  return (() => {
182
- var i = re(), f = i.firstChild, n = f.firstChild, u = n.firstChild, g = u.nextSibling;
183
- return A(i, "scroll", c.onScroll), H((a) => c.scrollRef(a), i), d(u, o(B, {
182
+ var i = re(), f = i.firstChild, n = f.firstChild, u = n.firstChild, v = u.nextSibling;
183
+ return A(i, "scroll", s.onScroll), H((a) => s.scrollRef(a), i), d(u, o(B, {
184
184
  get each() {
185
185
  return l();
186
186
  },
@@ -189,7 +189,7 @@ function fe(s) {
189
189
  return t()[a];
190
190
  }
191
191
  })
192
- })), d(g, o(B, {
192
+ })), d(v, o(B, {
193
193
  get each() {
194
194
  return l();
195
195
  },
@@ -198,20 +198,20 @@ function fe(s) {
198
198
  return r()[a];
199
199
  }
200
200
  })
201
- })), x((a) => {
202
- var k = `${c.paddingTop()}px`, v = `${c.paddingBottom()}px`;
203
- return k !== a.e && L(f, "padding-top", a.e = k), v !== a.t && L(f, "padding-bottom", a.t = v), a;
201
+ })), y((a) => {
202
+ var k = `${s.paddingTop()}px`, g = `${s.paddingBottom()}px`;
203
+ return k !== a.e && L(f, "padding-top", a.e = k), g !== a.t && L(f, "padding-bottom", a.t = g), a;
204
204
  }, {
205
205
  e: void 0,
206
206
  t: void 0
207
207
  }), i;
208
208
  })();
209
209
  }
210
- function W(s) {
211
- const t = () => s.line;
210
+ function W(c) {
211
+ const t = () => c.line;
212
212
  return (() => {
213
- var r = le(), c = r.firstChild, l = c.nextSibling;
214
- return d(c, () => t()?.lineNumber ?? ""), d(l, () => t()?.content ?? " "), x(() => w(r, y("chat-diff-line", t()?.type === "added" && "chat-diff-line-added", t()?.type === "removed" && "chat-diff-line-removed", t()?.type === "empty" && "chat-diff-line-empty"))), r;
213
+ var r = le(), s = r.firstChild, l = s.nextSibling;
214
+ return d(s, () => t()?.lineNumber ?? ""), d(l, () => t()?.content ?? " "), y(() => w(r, x("chat-diff-line", t()?.type === "added" && "chat-diff-line-added", t()?.type === "removed" && "chat-diff-line-removed", t()?.type === "empty" && "chat-diff-line-empty"))), r;
215
215
  })();
216
216
  }
217
217
  const ue = () => oe(), he = () => de();
@@ -17,11 +17,11 @@ const It = (t) => {
17
17
  case "pending":
18
18
  return "text-muted-foreground";
19
19
  case "running":
20
- return "text-blue-500";
20
+ return "text-info";
21
21
  case "success":
22
- return "text-green-500";
22
+ return "text-success";
23
23
  case "error":
24
- return "text-red-500";
24
+ return "text-error";
25
25
  default:
26
26
  return "text-muted-foreground";
27
27
  }
@@ -1,7 +1,7 @@
1
1
  import { insert as o, createComponent as i, memo as l, effect as m, className as u, template as n } from "solid-js/web";
2
2
  import { Show as g } from "solid-js";
3
3
  import { cn as h } from "../../../utils/cn.js";
4
- var d = /* @__PURE__ */ n("<span class=chat-message-status>"), w = /* @__PURE__ */ n("<div><span class=chat-message-time>"), f = /* @__PURE__ */ n('<svg width=12 height=12 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 class=animate-pulse><circle cx=12 cy=12 r=10>'), x = /* @__PURE__ */ n('<svg width=12 height=12 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 class=animate-spin><path d="M21 12a9 9 0 1 1-6.219-8.56">'), p = /* @__PURE__ */ n('<svg width=12 height=12 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 class=text-red-500><circle cx=12 cy=12 r=10></circle><line x1=15 y1=9 x2=9 y2=15></line><line x1=9 y1=9 x2=15 y2=15>');
4
+ var d = /* @__PURE__ */ n("<span class=chat-message-status>"), w = /* @__PURE__ */ n("<div><span class=chat-message-time>"), f = /* @__PURE__ */ n('<svg width=12 height=12 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 class=animate-pulse><circle cx=12 cy=12 r=10>'), x = /* @__PURE__ */ n('<svg width=12 height=12 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 class=animate-spin><path d="M21 12a9 9 0 1 1-6.219-8.56">'), p = /* @__PURE__ */ n('<svg width=12 height=12 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 class=text-error><circle cx=12 cy=12 r=10></circle><line x1=15 y1=9 x2=9 y2=15></line><line x1=9 y1=9 x2=15 y2=15>');
5
5
  const D = (e) => {
6
6
  const a = (t) => {
7
7
  const r = new Date(t), s = /* @__PURE__ */ new Date();
@@ -1,4 +1,4 @@
1
- import { insert as d, effect as m, className as a, template as f } from "solid-js/web";
1
+ import { insert as d, effect as m, className as l, template as f } from "solid-js/web";
2
2
  import "solid-js";
3
3
  import { cn as s } from "../../../utils/cn.js";
4
4
  var b = /* @__PURE__ */ f("<div><span></span><span class=chat-connection-label>");
@@ -8,12 +8,12 @@ const h = (t) => {
8
8
  case "connecting":
9
9
  return {
10
10
  label: "Connecting...",
11
- color: "text-yellow-500"
11
+ color: "text-warning"
12
12
  };
13
13
  case "connected":
14
14
  return {
15
15
  label: "Connected",
16
- color: "text-green-500"
16
+ color: "text-success"
17
17
  };
18
18
  case "disconnected":
19
19
  return {
@@ -23,7 +23,7 @@ const h = (t) => {
23
23
  case "error":
24
24
  return {
25
25
  label: "Connection Error",
26
- color: "text-red-500"
26
+ color: "text-error"
27
27
  };
28
28
  default:
29
29
  return {
@@ -35,8 +35,8 @@ const h = (t) => {
35
35
  return (() => {
36
36
  var n = b(), r = n.firstChild, u = r.nextSibling;
37
37
  return d(u, () => o().label), m((e) => {
38
- var c = s("chat-connection-status", o().color, t.class), l = s("chat-connection-dot", t.state === "connecting" && "animate-pulse");
39
- return c !== e.e && a(n, e.e = c), l !== e.t && a(r, e.t = l), e;
38
+ var c = s("chat-connection-status", o().color, t.class), a = s("chat-connection-dot", t.state === "connecting" && "animate-pulse");
39
+ return c !== e.e && l(n, e.e = c), a !== e.t && l(r, e.t = a), e;
40
40
  }, {
41
41
  e: void 0,
42
42
  t: void 0
@@ -1,41 +1,33 @@
1
- import { effect as v, className as i, setStyleProperty as b, template as m } from "solid-js/web";
2
- import { cn as n } from "../../utils/cn.js";
3
- import { positionToGridArea as f } from "../../utils/gridLayout.js";
4
- var g = /* @__PURE__ */ m("<div><div>");
5
- function _(a) {
6
- const s = () => f(a.position);
1
+ import { effect as m, className as c, setStyleProperty as i, template as b } from "solid-js/web";
2
+ import { cn as f } from "../../utils/cn.js";
3
+ import { positionToGridArea as g } from "../../utils/gridLayout.js";
4
+ var u = /* @__PURE__ */ b('<div><div class="absolute inset-0 rounded-md">');
5
+ function V(o) {
6
+ const v = () => g(o.position), a = () => o.isValid !== !1 ? "--info" : "--error";
7
7
  return (() => {
8
- var e = g(), l = e.firstChild;
9
- return v((r) => {
10
- var t = n(
8
+ var e = u(), l = e.firstChild;
9
+ return m((r) => {
10
+ var n = f(
11
11
  "pointer-events-none rounded-md relative",
12
12
  "border-2 border-dashed",
13
- // Theme-adaptive colors
14
- a.isValid !== !1 ? [
15
- // Light mode: darker colors for contrast
16
- "border-slate-400 bg-slate-200/60",
17
- // Dark mode: lighter colors for contrast
18
- "dark:border-slate-400 dark:bg-slate-600/40"
19
- ] : ["border-red-400 bg-red-200/60", "dark:border-red-400 dark:bg-red-500/30"],
20
- // Theme-adaptive shadow
21
- "shadow-[0_4px_16px_rgba(0,0,0,0.12)]",
22
- "dark:shadow-[0_4px_16px_rgba(255,255,255,0.08)]",
13
+ o.isValid !== !1 ? "border-info/50 bg-info/10" : "border-error/50 bg-error/10",
23
14
  // Subtle animation
24
15
  "animate-in fade-in duration-150"
25
- ), d = s(), o = n("absolute inset-0 rounded-md", a.isValid !== !1 ? [
26
- // Light mode: subtle dark gradient
27
- "bg-gradient-to-br from-slate-300/40 via-transparent to-slate-400/20",
28
- // Dark mode: subtle light gradient
29
- "dark:from-slate-400/20 dark:via-transparent dark:to-slate-300/10"
30
- ] : ["bg-gradient-to-br from-red-300/40 via-transparent to-red-400/20", "dark:from-red-400/20 dark:via-transparent dark:to-red-300/10"]);
31
- return t !== r.e && i(e, r.e = t), d !== r.t && b(e, "grid-area", r.t = d), o !== r.a && i(l, r.a = o), r;
16
+ ), t = v(), d = `0 4px 16px color-mix(in srgb, var(${a()}) 18%, transparent)`, s = `linear-gradient(
17
+ 135deg,
18
+ color-mix(in srgb, var(${a()}) 18%, transparent) 0%,
19
+ transparent 55%,
20
+ color-mix(in srgb, var(${a()}) 10%, var(--card)) 100%
21
+ )`;
22
+ return n !== r.e && c(e, r.e = n), t !== r.t && i(e, "grid-area", r.t = t), d !== r.a && i(e, "box-shadow", r.a = d), s !== r.o && i(l, "background", r.o = s), r;
32
23
  }, {
33
24
  e: void 0,
34
25
  t: void 0,
35
- a: void 0
26
+ a: void 0,
27
+ o: void 0
36
28
  }), e;
37
29
  })();
38
30
  }
39
31
  export {
40
- _ as DropZonePreview
32
+ V as DropZonePreview
41
33
  };