@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.
- package/dist/chat.css +32 -33
- package/dist/components/chat/blocks/CodeDiffBlock.js +51 -51
- package/dist/components/chat/blocks/ToolCallBlock.js +3 -3
- package/dist/components/chat/message/MessageMeta.js +1 -1
- package/dist/components/chat/status/ConnectionStatus.js +6 -6
- package/dist/components/deck/DropZonePreview.js +20 -28
- package/dist/components/launchpad/Launchpad.js +78 -62
- package/dist/components/launchpad/LaunchpadGrid.js +1 -1
- package/dist/components/launchpad/LaunchpadItem.js +17 -16
- package/dist/components/launchpad/LaunchpadPagination.js +16 -16
- package/dist/components/launchpad/LaunchpadSearch.js +9 -9
- package/dist/components/ui/Card.js +104 -96
- package/dist/components/ui/Charts.js +125 -135
- package/dist/components/ui/Dialog.js +15 -15
- package/dist/components/ui/FloatingWindow.js +18 -18
- package/dist/components/ui/MobileKeyboard.js +174 -143
- package/dist/components/ui/Progress.js +87 -87
- package/dist/components/ui/Tabs.js +1 -1
- package/dist/components/ui/mobileKeyboardViewport.d.ts +18 -0
- package/dist/components/ui/mobileKeyboardViewport.js +42 -0
- package/dist/components/ui/picker/PickerBase.js +1 -1
- package/dist/floe.css +8 -15
- package/dist/full.js +654 -643
- package/dist/index.d.ts +1 -0
- package/dist/index.js +126 -115
- package/dist/styles/tokens.d.ts +1150 -0
- package/dist/styles/tokens.js +565 -0
- package/dist/styles.css +1 -1
- package/dist/themes/light.css +0 -3
- package/dist/ui.css +48 -143
- package/dist/widgets/MetricsWidget.js +15 -15
- 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:
|
|
250
|
-
background-color:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
1056
|
-
border-color: color-mix(in srgb,
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
1631
|
-
border-color:
|
|
1632
|
-
color:
|
|
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
|
|
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:
|
|
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
|
|
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:
|
|
1748
|
-
color:
|
|
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
|
|
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
|
|
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(
|
|
8
|
-
const
|
|
9
|
-
const [t, r] = I("unified"), [
|
|
10
|
-
let
|
|
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
|
-
|
|
12
|
+
v += 1;
|
|
13
13
|
}), O(() => {
|
|
14
|
-
const
|
|
14
|
+
const g = c.oldCode ?? "", R = c.newCode ?? "", p = ++v;
|
|
15
15
|
u(!0), f(null);
|
|
16
|
-
const C =
|
|
16
|
+
const C = g, $ = R;
|
|
17
17
|
X(() => {
|
|
18
|
-
if (p !==
|
|
19
|
-
if (C.length + $.length >
|
|
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 ===
|
|
24
|
+
p === v && f(e);
|
|
25
25
|
}).catch((e) => {
|
|
26
|
-
console.error("Diff compute error:", e), p ===
|
|
26
|
+
console.error("Diff compute error:", e), p === v && f(null);
|
|
27
27
|
}).finally(() => {
|
|
28
|
-
p ===
|
|
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(
|
|
35
|
-
} catch (
|
|
36
|
-
console.error("Failed to copy:",
|
|
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
|
|
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
|
|
43
|
+
return c.filename;
|
|
44
44
|
},
|
|
45
45
|
get children() {
|
|
46
46
|
var e = J();
|
|
47
|
-
return d(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
|
|
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(
|
|
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(
|
|
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),
|
|
118
|
-
var _ =
|
|
119
|
-
return _ !== e.e && w(
|
|
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
|
-
}),
|
|
125
|
+
}), g;
|
|
126
126
|
})();
|
|
127
127
|
};
|
|
128
|
-
function
|
|
129
|
-
const t = () =>
|
|
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
|
-
}),
|
|
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
|
|
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
|
-
})),
|
|
153
|
-
var u = `${r.paddingTop()}px`,
|
|
154
|
-
return u !== n.e && L(i, "padding-top", n.e = u),
|
|
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(
|
|
162
|
-
const t = () =>
|
|
161
|
+
function ae(c) {
|
|
162
|
+
const t = () => c.line;
|
|
163
163
|
return (() => {
|
|
164
|
-
var r = ie(),
|
|
165
|
-
return d(
|
|
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(
|
|
169
|
-
const t = () =>
|
|
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
|
-
} =
|
|
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,
|
|
183
|
-
return A(i, "scroll",
|
|
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(
|
|
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
|
-
})),
|
|
202
|
-
var k = `${
|
|
203
|
-
return k !== a.e && L(f, "padding-top", a.e = k),
|
|
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(
|
|
211
|
-
const t = () =>
|
|
210
|
+
function W(c) {
|
|
211
|
+
const t = () => c.line;
|
|
212
212
|
return (() => {
|
|
213
|
-
var r = le(),
|
|
214
|
-
return d(
|
|
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-
|
|
20
|
+
return "text-info";
|
|
21
21
|
case "success":
|
|
22
|
-
return "text-
|
|
22
|
+
return "text-success";
|
|
23
23
|
case "error":
|
|
24
|
-
return "text-
|
|
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-
|
|
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
|
|
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-
|
|
11
|
+
color: "text-warning"
|
|
12
12
|
};
|
|
13
13
|
case "connected":
|
|
14
14
|
return {
|
|
15
15
|
label: "Connected",
|
|
16
|
-
color: "text-
|
|
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-
|
|
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),
|
|
39
|
-
return c !== e.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
|
|
2
|
-
import { cn as
|
|
3
|
-
import { positionToGridArea as
|
|
4
|
-
var
|
|
5
|
-
function
|
|
6
|
-
const
|
|
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 =
|
|
9
|
-
return
|
|
10
|
-
var
|
|
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
|
-
|
|
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
|
-
),
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
return
|
|
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
|
-
|
|
32
|
+
V as DropZonePreview
|
|
41
33
|
};
|