codebay 0.10.1 → 0.11.0
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/.mochi/manifest.json +199 -173
- package/.mochi/svelte-client/HydratableIsland-dammyce5.js +1 -0
- package/.mochi/svelte-client/_hydrate-AppShell_2rtnxn6pgp2rh-v65ctd99.js +2 -0
- package/.mochi/svelte-client/_hydrate-AvatarsView_257s9yq1wwr4f-htjfv8q9.js +14 -0
- package/.mochi/svelte-client/_hydrate-InstanceView_2ma45l9bybfhl-v07seqge.js +1 -0
- package/.mochi/svelte-client/_hydrate-SettingsView_8hmarwmf8onq-hj9yvqc4.js +38 -0
- package/.mochi/svelte-client/chunk-0zkdsrth.js +2 -0
- package/.mochi/svelte-client/{chunk-bn731rda.js → chunk-566rqq4c.js} +2 -2
- package/.mochi/svelte-client/chunk-79aj59e0.js +2 -0
- package/.mochi/svelte-client/{chunk-wvtkwfsh.js → chunk-czkxd74n.js} +1 -1
- package/.mochi/svelte-client/{chunk-p20tkpde.js → chunk-hxydjtda.js} +1 -1
- package/.mochi/svelte-client/chunk-qx1defbm.js +2 -0
- package/.mochi/svelte-client/chunk-r3wxmmc0.js +2 -0
- package/.mochi/svelte-client/{chunk-j72r8pkk.js → chunk-vs6pd2b4.js} +2 -2
- package/.mochi/svelte-client/{chunk-t0ap7q89.js → chunk-wjagstre.js} +1 -1
- package/.mochi/svelte-client/{chunk-0fjx3z3r.js → chunk-y9yy1004.js} +1 -1
- package/.mochi/svelte-compile/{App-59cdj86f.server.js → App-mzn3dqjm.server.js} +182 -72
- package/.mochi/svelte-compile/{Avatars-fmagfyj2.server.js → Avatars-c0k5jx8q.server.js} +3 -6
- package/.mochi/svelte-compile/{Instance-s1gqwzmx.server.js → Instance-hj76qnha.server.js} +4 -4
- package/.mochi/svelte-compile/{Settings-k447mt0x.server.js → Settings-tvc5yp08.server.js} +39 -28
- package/.mochi/svelte-compile/chunk-ed46m58e.js +22 -0
- package/.mochi/svelte-compile/{chunk-th2dbqvc.js → chunk-gz6hv1h5.js} +5 -1
- package/.mochi/svelte-compile/chunk-zd49axkf.js +65 -0
- package/.mochi/svelte-css/{AppBar-3bxinv4pabv8l.css → AppBar-1gtu2me3fni8e.css} +1 -1
- package/.mochi/svelte-css/AvatarEditor-1mjvec6bwdkv8.css +1 -0
- package/.mochi/svelte-css/{AvatarsView-2llo48w0wt0xn.css → AvatarsView-26ya4ep5n1ze7.css} +1 -1
- package/.mochi/svelte-css/Button-208u50wkms8ya.css +1 -0
- package/.mochi/svelte-css/CoinButton-2727devjtsn10.css +1 -0
- package/.mochi/svelte-css/CredMenu-7qowd1oxujet.css +1 -0
- package/.mochi/svelte-css/DashboardView-17a0b8epjurhb.css +1 -0
- package/.mochi/svelte-css/FolderBrowser-i0uj58dph27f.css +1 -0
- package/.mochi/svelte-css/HealthBox-r0giuhjn2wj4.css +1 -0
- package/.mochi/svelte-css/IdeBar-1mtgemqfuvqzi.css +1 -0
- package/.mochi/svelte-css/InstanceCard-25z7nas7y98zk.css +1 -0
- package/.mochi/svelte-css/InstanceFilter-2vglmyy0yrbbc.css +1 -0
- package/.mochi/svelte-css/InstanceView-oozmmctp8m3p.css +1 -0
- package/.mochi/svelte-css/SettingsCog-1jdeprd3ilczz.css +1 -0
- package/.mochi/svelte-css/{SettingsView-n3oy75uonzp2.css → SettingsView-bccw34agd2bj.css} +1 -1
- package/.mochi/svelte-css/StatusBadge-2eisdtnrsnfdc.css +1 -0
- package/.mochi/svelte-css/TerminalPane-2ywc86rhtmr9l.css +1 -0
- package/.mochi/svelte-css/ThemePicker-3fw4synubier0.css +1 -0
- package/migrations/0008_config_migrated.sql +1 -0
- package/package.json +8 -8
- package/src/components/AppBar.svelte +2 -2
- package/src/components/AppShell.svelte +71 -7
- package/src/components/AvatarEditor.svelte +10 -10
- package/src/components/AvatarsView.svelte +0 -0
- package/src/components/Button.svelte +13 -9
- package/src/components/CoinButton.svelte +2 -2
- package/src/components/CredMenu.svelte +8 -6
- package/src/components/DashboardView.svelte +2 -2
- package/src/components/FolderBrowser.svelte +39 -36
- package/src/components/HealthBox.svelte +5 -4
- package/src/components/IdeBar.svelte +286 -112
- package/src/components/InstanceCard.svelte +7 -7
- package/src/components/InstanceFilter.svelte +6 -6
- package/src/components/InstanceView.svelte +27 -21
- package/src/components/SettingsCog.svelte +4 -3
- package/src/components/SettingsView.svelte +7 -11
- package/src/components/StatusBadge.svelte +8 -6
- package/src/components/TerminalPane.svelte +19 -7
- package/src/components/ThemePicker.svelte +150 -8
- package/src/components/TopBar.svelte +1 -1
- package/src/components/UiShowcase.svelte +300 -64
- package/src/lib/db.server.ts +7 -3
- package/src/lib/devcontainer.server.ts +181 -33
- package/src/lib/docker.server.ts +10 -0
- package/src/lib/git.server.ts +28 -0
- package/src/lib/instances.server.ts +47 -6
- package/src/lib/tab-nav.ts +30 -0
- package/src/routes.ts +12 -0
- package/src/shell.html +56 -23
- package/src/theme.ts +8 -1
- package/src/toast.ts +9 -0
- package/src/types.ts +7 -0
- package/.mochi/svelte-client/HydratableIsland-aebn1fa1.js +0 -1
- package/.mochi/svelte-client/_hydrate-AppShell_2rtnxn6pgp2rh-rx6arrv5.js +0 -2
- package/.mochi/svelte-client/_hydrate-AvatarsView_257s9yq1wwr4f-jpjdmgpe.js +0 -14
- package/.mochi/svelte-client/_hydrate-InstanceView_2ma45l9bybfhl-c9y47dat.js +0 -1
- package/.mochi/svelte-client/_hydrate-SettingsView_8hmarwmf8onq-d61feq89.js +0 -38
- package/.mochi/svelte-client/chunk-8xvr02wh.js +0 -2
- package/.mochi/svelte-client/chunk-9143wy3j.js +0 -2
- package/.mochi/svelte-client/chunk-k37wj1jm.js +0 -2
- package/.mochi/svelte-client/chunk-pc0fm37c.js +0 -2
- package/.mochi/svelte-compile/chunk-3t7v4hk0.js +0 -52
- package/.mochi/svelte-compile/chunk-gkjgybb2.js +0 -15
- package/.mochi/svelte-css/AvatarEditor-2mdq8ss346drw.css +0 -1
- package/.mochi/svelte-css/Button-oharop2xz6am.css +0 -1
- package/.mochi/svelte-css/CoinButton-1rej3sh3tkjud.css +0 -1
- package/.mochi/svelte-css/CredMenu-9hwgeptp7crb.css +0 -1
- package/.mochi/svelte-css/DashboardView-1cy4xpqhja9sx.css +0 -1
- package/.mochi/svelte-css/FolderBrowser-2pxp9z1o7zixk.css +0 -1
- package/.mochi/svelte-css/HealthBox-er2her0jukwl.css +0 -1
- package/.mochi/svelte-css/IdeBar-3bgr3m5z0lpeg.css +0 -1
- package/.mochi/svelte-css/InstanceCard-3vnltxnbxkvay.css +0 -1
- package/.mochi/svelte-css/InstanceFilter-3q6x0jt0hcgpz.css +0 -1
- package/.mochi/svelte-css/InstanceView-1pd7j16bd2b16.css +0 -1
- package/.mochi/svelte-css/SettingsCog-jftyadvo64qo.css +0 -1
- package/.mochi/svelte-css/StatusBadge-3mq0j7z6aq4j.css +0 -1
- package/.mochi/svelte-css/TerminalPane-3bwgk6ulzq6b3.css +0 -1
- package/.mochi/svelte-css/ThemePicker-1ir8jyocm8mvi.css +0 -1
|
@@ -1,27 +1,28 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import {
|
|
3
3
|
StatusBadge,
|
|
4
|
-
apiDelete,
|
|
5
|
-
apiFetch,
|
|
6
|
-
apiPost,
|
|
7
4
|
forwardedPortUrl
|
|
8
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-ed46m58e.js";
|
|
9
6
|
import {
|
|
10
7
|
Layout_template,
|
|
11
8
|
Plus,
|
|
12
9
|
Terminal
|
|
13
10
|
} from "./chunk-bpqwf1nw.js";
|
|
14
11
|
import {
|
|
12
|
+
apiDelete,
|
|
13
|
+
apiFetch,
|
|
14
|
+
apiPost,
|
|
15
15
|
ideUrl
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-zd49axkf.js";
|
|
17
17
|
import {
|
|
18
18
|
AppBar,
|
|
19
19
|
Avatar,
|
|
20
20
|
Button,
|
|
21
|
+
TOAST_OPTIONS,
|
|
21
22
|
Toaster,
|
|
22
23
|
dist_default,
|
|
23
24
|
findAvatar
|
|
24
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-gz6hv1h5.js";
|
|
25
26
|
import {
|
|
26
27
|
HydratableBoundary,
|
|
27
28
|
Icon,
|
|
@@ -36,13 +37,40 @@ import {
|
|
|
36
37
|
|
|
37
38
|
// src/pages/App.svelte
|
|
38
39
|
import"svelte/internal/flags/async";
|
|
39
|
-
import * as $
|
|
40
|
+
import * as $31 from "svelte/internal/server";
|
|
40
41
|
|
|
41
42
|
// src/components/AppShell.svelte
|
|
42
43
|
import"svelte/internal/flags/async";
|
|
43
|
-
import * as $
|
|
44
|
+
import * as $30 from "svelte/internal/server";
|
|
45
|
+
import { tick as tick2 } from "svelte";
|
|
44
46
|
import { SvelteSet } from "svelte/reactivity";
|
|
45
47
|
|
|
48
|
+
// src/lib/tab-nav.ts
|
|
49
|
+
function digitTarget(digit, count) {
|
|
50
|
+
return digit === 9 ? count - 1 : digit - 1;
|
|
51
|
+
}
|
|
52
|
+
function nextTabIndex(current, key, count) {
|
|
53
|
+
if (count <= 0)
|
|
54
|
+
return null;
|
|
55
|
+
const from = current < 0 || current >= count ? 0 : current;
|
|
56
|
+
switch (key) {
|
|
57
|
+
case "ArrowRight":
|
|
58
|
+
return (from + 1) % count;
|
|
59
|
+
case "ArrowLeft":
|
|
60
|
+
return (from - 1 + count) % count;
|
|
61
|
+
case "Home":
|
|
62
|
+
return 0;
|
|
63
|
+
case "End":
|
|
64
|
+
return count - 1;
|
|
65
|
+
default: {
|
|
66
|
+
if (!/^[1-9]$/.test(key))
|
|
67
|
+
return null;
|
|
68
|
+
const target = digitTarget(Number(key), count);
|
|
69
|
+
return target < count ? target : null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
46
74
|
// src/components/DashboardView.svelte
|
|
47
75
|
import"svelte/internal/flags/async";
|
|
48
76
|
import * as $20 from "svelte/internal/server";
|
|
@@ -808,7 +836,7 @@ function TopBar($$renderer, $$props) {
|
|
|
808
836
|
});
|
|
809
837
|
$$renderer2.push(`<!----> `);
|
|
810
838
|
Button($$renderer2, {
|
|
811
|
-
variant: "
|
|
839
|
+
variant: "default",
|
|
812
840
|
size: "sm",
|
|
813
841
|
square: true,
|
|
814
842
|
icon: altMode() === "terminal" ? Terminal : Layout_template,
|
|
@@ -1023,7 +1051,7 @@ function DashboardView($$renderer, $$props) {
|
|
|
1023
1051
|
|
|
1024
1052
|
// src/components/IdeBar.svelte
|
|
1025
1053
|
import"svelte/internal/flags/async";
|
|
1026
|
-
import * as $
|
|
1054
|
+
import * as $24 from "svelte/internal/server";
|
|
1027
1055
|
|
|
1028
1056
|
// node_modules/@lucide/svelte/dist/icons/rotate-cw.svelte
|
|
1029
1057
|
import"svelte/internal/flags/async";
|
|
@@ -1039,6 +1067,22 @@ function Rotate_cw($$renderer, $$props) {
|
|
|
1039
1067
|
];
|
|
1040
1068
|
Icon($$renderer, $21.spread_props([{ name: "rotate-cw" }, props, { iconNode }]));
|
|
1041
1069
|
}
|
|
1070
|
+
// node_modules/@lucide/svelte/dist/icons/chevron-left.svelte
|
|
1071
|
+
import"svelte/internal/flags/async";
|
|
1072
|
+
import * as $22 from "svelte/internal/server";
|
|
1073
|
+
function Chevron_left($$renderer, $$props) {
|
|
1074
|
+
let { $$slots, $$events, ...props } = $$props;
|
|
1075
|
+
const iconNode = [["path", { d: "m15 18-6-6 6-6" }]];
|
|
1076
|
+
Icon($$renderer, $22.spread_props([{ name: "chevron-left" }, props, { iconNode }]));
|
|
1077
|
+
}
|
|
1078
|
+
// node_modules/@lucide/svelte/dist/icons/chevron-right.svelte
|
|
1079
|
+
import"svelte/internal/flags/async";
|
|
1080
|
+
import * as $23 from "svelte/internal/server";
|
|
1081
|
+
function Chevron_right($$renderer, $$props) {
|
|
1082
|
+
let { $$slots, $$events, ...props } = $$props;
|
|
1083
|
+
const iconNode = [["path", { d: "m9 18 6-6-6-6" }]];
|
|
1084
|
+
Icon($$renderer, $23.spread_props([{ name: "chevron-right" }, props, { iconNode }]));
|
|
1085
|
+
}
|
|
1042
1086
|
// src/components/IdeBar.svelte
|
|
1043
1087
|
function IdeBar($$renderer, $$props) {
|
|
1044
1088
|
$$renderer.component(($$renderer2) => {
|
|
@@ -1054,53 +1098,102 @@ function IdeBar($$renderer, $$props) {
|
|
|
1054
1098
|
oncommitrename,
|
|
1055
1099
|
oncancelrename
|
|
1056
1100
|
} = $$props;
|
|
1101
|
+
const activeIndex = $24.derived(() => running.findIndex((i) => i.id === active));
|
|
1102
|
+
const focusIndex = $24.derived(() => activeIndex() >= 0 ? activeIndex() : 0);
|
|
1103
|
+
let viewport = null;
|
|
1104
|
+
let content = null;
|
|
1105
|
+
let atStart = true;
|
|
1106
|
+
let atEnd = true;
|
|
1107
|
+
const tabEls = {};
|
|
1108
|
+
const overflowing = $24.derived(() => !atStart || !atEnd);
|
|
1109
|
+
function measure() {
|
|
1110
|
+
if (!viewport)
|
|
1111
|
+
return;
|
|
1112
|
+
atStart = viewport.scrollLeft <= 1;
|
|
1113
|
+
atEnd = viewport.scrollLeft + viewport.clientWidth >= viewport.scrollWidth - 1;
|
|
1114
|
+
}
|
|
1115
|
+
function select(index) {
|
|
1116
|
+
const inst = running[index];
|
|
1117
|
+
if (!inst)
|
|
1118
|
+
return;
|
|
1119
|
+
onselect(inst.id);
|
|
1120
|
+
tabEls[inst.id]?.focus();
|
|
1121
|
+
}
|
|
1122
|
+
function onTabKeydown(e) {
|
|
1123
|
+
const next = nextTabIndex(activeIndex(), e.key, running.length);
|
|
1124
|
+
if (next === null)
|
|
1125
|
+
return;
|
|
1126
|
+
e.preventDefault();
|
|
1127
|
+
select(next);
|
|
1128
|
+
}
|
|
1129
|
+
function page(direction) {
|
|
1130
|
+
if (!viewport)
|
|
1131
|
+
return;
|
|
1132
|
+
viewport.scrollBy({ left: direction * Math.max(160, viewport.clientWidth * 0.7) });
|
|
1133
|
+
}
|
|
1057
1134
|
AppBar($$renderer2, {
|
|
1058
1135
|
children: ($$renderer3) => {
|
|
1059
1136
|
if (running.length > 0) {
|
|
1060
1137
|
$$renderer3.push("<!--[0-->");
|
|
1061
|
-
$$renderer3.push(`<
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
$$renderer3
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1138
|
+
$$renderer3.push(`<div class="strip svelte-r39acv">`);
|
|
1139
|
+
if (overflowing()) {
|
|
1140
|
+
$$renderer3.push("<!--[0-->");
|
|
1141
|
+
$$renderer3.push(`<button type="button" class="page svelte-r39acv"${$24.attr("disabled", atStart, true)} aria-label="Scroll tabs left">`);
|
|
1142
|
+
Chevron_left($$renderer3, { size: 16 });
|
|
1143
|
+
$$renderer3.push(`<!----></button>`);
|
|
1144
|
+
} else {
|
|
1145
|
+
$$renderer3.push("<!--[-1-->");
|
|
1146
|
+
}
|
|
1147
|
+
$$renderer3.push(`<!--]--> <div class="viewport svelte-r39acv"><div class="tabs svelte-r39acv" role="tablist" aria-label="Instances"><!--[-->`);
|
|
1148
|
+
const each_array = $24.ensure_array_like(running);
|
|
1149
|
+
for (let i = 0, $$length = each_array.length;i < $$length; i++) {
|
|
1150
|
+
let inst = each_array[i];
|
|
1070
1151
|
if (editingId === inst.id) {
|
|
1071
1152
|
$$renderer3.push("<!--[0-->");
|
|
1072
|
-
$$renderer3.push(`<div class="tab
|
|
1153
|
+
$$renderer3.push(`<div class="tab editing svelte-r39acv">`);
|
|
1073
1154
|
Avatar($$renderer3, {
|
|
1074
1155
|
name: inst.name,
|
|
1075
1156
|
art: findAvatar(inst.avatar ?? undefined) ?? null,
|
|
1076
|
-
scale:
|
|
1157
|
+
scale: 3
|
|
1077
1158
|
});
|
|
1078
|
-
$$renderer3.push(`<!----> <input class="tab-name-edit svelte-r39acv"${$
|
|
1159
|
+
$$renderer3.push(`<!----> <input class="tab-name-edit svelte-r39acv"${$24.attr("value", editingName)} autofocus=""/></div>`);
|
|
1079
1160
|
} else {
|
|
1080
1161
|
$$renderer3.push("<!--[-1-->");
|
|
1081
|
-
$$renderer3.push(`<button type="button"
|
|
1162
|
+
$$renderer3.push(`<button type="button"${$24.attr_class("tab svelte-r39acv", undefined, { active: inst.id === active })}${$24.attr("id", `tab-${$24.stringify(inst.id)}`)} role="tab"${$24.attr("aria-selected", inst.id === active)}${$24.attr("tabindex", i === focusIndex() ? 0 : -1)}${$24.attr("title", inst.name)}>`);
|
|
1082
1163
|
Avatar($$renderer3, {
|
|
1083
1164
|
name: inst.name,
|
|
1084
1165
|
art: findAvatar(inst.avatar ?? undefined) ?? null,
|
|
1085
|
-
scale:
|
|
1166
|
+
scale: 3
|
|
1086
1167
|
});
|
|
1087
|
-
$$renderer3.push(`<!----> <span class="tab-name svelte-r39acv">${$
|
|
1168
|
+
$$renderer3.push(`<!----> <span class="tab-name svelte-r39acv">${$24.escape(inst.name)}</span> <span class="tab-mode svelte-r39acv"${$24.attr("aria-label", inst.mode === "terminal" ? "Terminal-only instance" : "Full IDE instance")}>`);
|
|
1088
1169
|
if (inst.mode === "terminal") {
|
|
1089
1170
|
$$renderer3.push("<!--[0-->");
|
|
1090
|
-
$$renderer3
|
|
1091
|
-
|
|
1092
|
-
$$renderer3.push(
|
|
1171
|
+
Terminal($$renderer3, { size: 11 });
|
|
1172
|
+
} else {
|
|
1173
|
+
$$renderer3.push("<!--[-1-->");
|
|
1174
|
+
Layout_template($$renderer3, { size: 11 });
|
|
1175
|
+
}
|
|
1176
|
+
$$renderer3.push(`<!--]--></span> `);
|
|
1177
|
+
if (inst.id !== active && attention[inst.id]) {
|
|
1178
|
+
$$renderer3.push("<!--[0-->");
|
|
1179
|
+
$$renderer3.push(`<span${$24.attr_class(`attn ${$24.stringify(attention[inst.id])}`, "svelte-r39acv")}${$24.attr("aria-label", attention[inst.id] === "waiting" ? "Claude is waiting for input" : "Claude finished")}></span>`);
|
|
1093
1180
|
} else {
|
|
1094
1181
|
$$renderer3.push("<!--[-1-->");
|
|
1095
|
-
$$renderer3.push(`<span class="tab-mode svelte-r39acv" title="Full IDE instance">`);
|
|
1096
|
-
Layout_template($$renderer3, { size: 13 });
|
|
1097
|
-
$$renderer3.push(`<!----></span>`);
|
|
1098
1182
|
}
|
|
1099
1183
|
$$renderer3.push(`<!--]--></button>`);
|
|
1100
1184
|
}
|
|
1101
|
-
$$renderer3.push(`<!--]
|
|
1185
|
+
$$renderer3.push(`<!--]-->`);
|
|
1186
|
+
}
|
|
1187
|
+
$$renderer3.push(`<!--]--></div></div> `);
|
|
1188
|
+
if (overflowing()) {
|
|
1189
|
+
$$renderer3.push("<!--[0-->");
|
|
1190
|
+
$$renderer3.push(`<button type="button" class="page trailing svelte-r39acv"${$24.attr("disabled", atEnd, true)} aria-label="Scroll tabs right">`);
|
|
1191
|
+
Chevron_right($$renderer3, { size: 16 });
|
|
1192
|
+
$$renderer3.push(`<!----></button>`);
|
|
1193
|
+
} else {
|
|
1194
|
+
$$renderer3.push("<!--[-1-->");
|
|
1102
1195
|
}
|
|
1103
|
-
$$renderer3.push(`<!--]--></
|
|
1196
|
+
$$renderer3.push(`<!--]--></div>`);
|
|
1104
1197
|
} else {
|
|
1105
1198
|
$$renderer3.push("<!--[-1-->");
|
|
1106
1199
|
}
|
|
@@ -1113,41 +1206,41 @@ function IdeBar($$renderer, $$props) {
|
|
|
1113
1206
|
} else {
|
|
1114
1207
|
$$renderer3.push("<!--[-1-->");
|
|
1115
1208
|
}
|
|
1116
|
-
$$renderer3.push(`<!--]--> <a class="cog svelte-r39acv"${$
|
|
1209
|
+
$$renderer3.push(`<!--]--> <a class="cog svelte-r39acv"${$24.attr("href", withPopupMarker("/settings"))} target="_blank" rel="noopener noreferrer" title="Settings" aria-label="Settings">`);
|
|
1117
1210
|
Settings($$renderer3, { size: 18 });
|
|
1118
1211
|
$$renderer3.push(`<!----></a></div>`);
|
|
1119
1212
|
},
|
|
1120
1213
|
$$slots: { default: true }
|
|
1121
1214
|
});
|
|
1122
|
-
$
|
|
1215
|
+
$24.bind_props($$props, { editingName });
|
|
1123
1216
|
});
|
|
1124
1217
|
}
|
|
1125
1218
|
|
|
1126
1219
|
// src/components/IdeLoader.svelte
|
|
1127
1220
|
import"svelte/internal/flags/async";
|
|
1128
|
-
import * as $
|
|
1221
|
+
import * as $25 from "svelte/internal/server";
|
|
1129
1222
|
function IdeLoader($$renderer, $$props) {
|
|
1130
1223
|
$$renderer.component(($$renderer2) => {
|
|
1131
1224
|
let { speed = 1, mode = "ide", stalledAfterMs, onoverride } = $$props;
|
|
1132
|
-
const isTerminal = $
|
|
1225
|
+
const isTerminal = $25.derived(() => mode === "terminal");
|
|
1133
1226
|
let stalled = false;
|
|
1134
1227
|
const ROWS = 3;
|
|
1135
1228
|
const COLS = 22;
|
|
1136
1229
|
const BASE_TICK_MS = 140;
|
|
1137
1230
|
const FLIPS_PER_TICK = 7;
|
|
1138
|
-
const tickMs = $
|
|
1231
|
+
const tickMs = $25.derived(() => Math.max(20, BASE_TICK_MS / speed));
|
|
1139
1232
|
const seed = () => Array.from({ length: ROWS }, () => Array.from({ length: COLS }, () => Math.random() < 0.5 ? 0 : 1));
|
|
1140
1233
|
let grid = seed();
|
|
1141
1234
|
$$renderer2.push(`<div class="loader svelte-w5e143"><div class="grid svelte-w5e143" aria-hidden="true"><!--[-->`);
|
|
1142
|
-
const each_array = $
|
|
1235
|
+
const each_array = $25.ensure_array_like(grid);
|
|
1143
1236
|
for (let i = 0, $$length = each_array.length;i < $$length; i++) {
|
|
1144
1237
|
let row = each_array[i];
|
|
1145
|
-
$$renderer2.push(`<div class="row svelte-w5e143">${$
|
|
1238
|
+
$$renderer2.push(`<div class="row svelte-w5e143">${$25.escape(row.join(""))}</div>`);
|
|
1146
1239
|
}
|
|
1147
|
-
$$renderer2.push(`<!--]--></div> <div class="label svelte-w5e143">Loading ${$
|
|
1240
|
+
$$renderer2.push(`<!--]--></div> <div class="label svelte-w5e143">Loading ${$25.escape(isTerminal() ? "terminal" : "editor")}<span class="dot svelte-w5e143">.</span><span class="dot svelte-w5e143">.</span><span class="dot svelte-w5e143">.</span></div> `);
|
|
1148
1241
|
if (stalled) {
|
|
1149
1242
|
$$renderer2.push("<!--[0-->");
|
|
1150
|
-
$$renderer2.push(`<div class="stalled svelte-w5e143"><p class="svelte-w5e143">Waiting for ${$
|
|
1243
|
+
$$renderer2.push(`<div class="stalled svelte-w5e143"><p class="svelte-w5e143">Waiting for ${$25.escape(isTerminal() ? "the terminal" : "code-server")} to answer inside the container.</p> `);
|
|
1151
1244
|
if (onoverride) {
|
|
1152
1245
|
$$renderer2.push("<!--[0-->");
|
|
1153
1246
|
Button($$renderer2, {
|
|
@@ -1171,11 +1264,11 @@ function IdeLoader($$renderer, $$props) {
|
|
|
1171
1264
|
|
|
1172
1265
|
// src/components/TerminalSplit.svelte
|
|
1173
1266
|
import"svelte/internal/flags/async";
|
|
1174
|
-
import * as $
|
|
1267
|
+
import * as $29 from "svelte/internal/server";
|
|
1175
1268
|
|
|
1176
1269
|
// node_modules/@lucide/svelte/dist/icons/panel-right-open.svelte
|
|
1177
1270
|
import"svelte/internal/flags/async";
|
|
1178
|
-
import * as $
|
|
1271
|
+
import * as $26 from "svelte/internal/server";
|
|
1179
1272
|
function Panel_right_open($$renderer, $$props) {
|
|
1180
1273
|
let { $$slots, $$events, ...props } = $$props;
|
|
1181
1274
|
const iconNode = [
|
|
@@ -1186,11 +1279,11 @@ function Panel_right_open($$renderer, $$props) {
|
|
|
1186
1279
|
["path", { d: "M15 3v18" }],
|
|
1187
1280
|
["path", { d: "m10 15-3-3 3-3" }]
|
|
1188
1281
|
];
|
|
1189
|
-
Icon($$renderer, $
|
|
1282
|
+
Icon($$renderer, $26.spread_props([{ name: "panel-right-open" }, props, { iconNode }]));
|
|
1190
1283
|
}
|
|
1191
1284
|
// node_modules/@lucide/svelte/dist/icons/panel-right-close.svelte
|
|
1192
1285
|
import"svelte/internal/flags/async";
|
|
1193
|
-
import * as $
|
|
1286
|
+
import * as $27 from "svelte/internal/server";
|
|
1194
1287
|
function Panel_right_close($$renderer, $$props) {
|
|
1195
1288
|
let { $$slots, $$events, ...props } = $$props;
|
|
1196
1289
|
const iconNode = [
|
|
@@ -1201,11 +1294,11 @@ function Panel_right_close($$renderer, $$props) {
|
|
|
1201
1294
|
["path", { d: "M15 3v18" }],
|
|
1202
1295
|
["path", { d: "m8 9 3 3-3 3" }]
|
|
1203
1296
|
];
|
|
1204
|
-
Icon($$renderer, $
|
|
1297
|
+
Icon($$renderer, $27.spread_props([{ name: "panel-right-close" }, props, { iconNode }]));
|
|
1205
1298
|
}
|
|
1206
1299
|
// src/components/TerminalPane.svelte
|
|
1207
1300
|
import"svelte/internal/flags/async";
|
|
1208
|
-
import * as $
|
|
1301
|
+
import * as $28 from "svelte/internal/server";
|
|
1209
1302
|
import { onMount } from "svelte";
|
|
1210
1303
|
function TerminalPane($$renderer, $$props) {
|
|
1211
1304
|
$$renderer.component(($$renderer2) => {
|
|
@@ -1302,15 +1395,18 @@ function TerminalPane($$renderer, $$props) {
|
|
|
1302
1395
|
}
|
|
1303
1396
|
}
|
|
1304
1397
|
function applyTheme() {
|
|
1305
|
-
if (!term)
|
|
1398
|
+
if (!term || !el)
|
|
1306
1399
|
return;
|
|
1307
|
-
const cs = getComputedStyle(
|
|
1308
|
-
const bg = cs.
|
|
1309
|
-
const fg = cs.
|
|
1400
|
+
const cs = getComputedStyle(el);
|
|
1401
|
+
const bg = cs.backgroundColor || "#0d0e0a";
|
|
1402
|
+
const fg = cs.color || "#d8d9cf";
|
|
1310
1403
|
term.options.theme = { background: bg, foreground: fg, cursor: fg, cursorAccent: bg };
|
|
1311
1404
|
}
|
|
1312
1405
|
onMount(() => {
|
|
1313
1406
|
let themeObs;
|
|
1407
|
+
const scheme = window.matchMedia("(prefers-color-scheme: dark)");
|
|
1408
|
+
const onScheme = () => applyTheme();
|
|
1409
|
+
scheme.addEventListener("change", onScheme);
|
|
1314
1410
|
(async () => {
|
|
1315
1411
|
const [{ Terminal: Terminal2 }, { FitAddon }] = await Promise.all([import("./chunk-9nqc2r0y.js"), import("./chunk-rtdne1m8.js")]);
|
|
1316
1412
|
if (disposed)
|
|
@@ -1341,6 +1437,7 @@ function TerminalPane($$renderer, $$props) {
|
|
|
1341
1437
|
disposed = true;
|
|
1342
1438
|
sizeObs.disconnect();
|
|
1343
1439
|
themeObs?.disconnect();
|
|
1440
|
+
scheme.removeEventListener("change", onScheme);
|
|
1344
1441
|
if (retry)
|
|
1345
1442
|
clearTimeout(retry);
|
|
1346
1443
|
try {
|
|
@@ -1406,7 +1503,7 @@ function TerminalSplit($$renderer, $$props) {
|
|
|
1406
1503
|
e.preventDefault();
|
|
1407
1504
|
}
|
|
1408
1505
|
function splitToggle($$renderer3) {
|
|
1409
|
-
$$renderer3.push(`<button type="button"${$
|
|
1506
|
+
$$renderer3.push(`<button type="button"${$29.attr("aria-pressed", open)}${$29.attr("title", open ? "Hide the shell pane" : "Open a shell alongside Claude")}${$29.attr("aria-label", open ? "Hide the shell pane" : "Open a shell alongside Claude")}>`);
|
|
1410
1507
|
if (open) {
|
|
1411
1508
|
$$renderer3.push("<!--[0-->");
|
|
1412
1509
|
Panel_right_close($$renderer3, { size: 14 });
|
|
@@ -1416,7 +1513,7 @@ function TerminalSplit($$renderer, $$props) {
|
|
|
1416
1513
|
}
|
|
1417
1514
|
$$renderer3.push(`<!--]--></button>`);
|
|
1418
1515
|
}
|
|
1419
|
-
$$renderer2.push(`<div class="split svelte-1ysvu88"><div class="side svelte-1ysvu88"${$
|
|
1516
|
+
$$renderer2.push(`<div class="split svelte-1ysvu88"><div class="side svelte-1ysvu88"${$29.attr_style("", { "flex-basis": open ? `${ratio}%` : "100%" })}>`);
|
|
1420
1517
|
TerminalPane($$renderer2, {
|
|
1421
1518
|
id,
|
|
1422
1519
|
active,
|
|
@@ -1426,7 +1523,7 @@ function TerminalSplit($$renderer, $$props) {
|
|
|
1426
1523
|
$$renderer2.push(`<!----></div> `);
|
|
1427
1524
|
if (mounted) {
|
|
1428
1525
|
$$renderer2.push("<!--[0-->");
|
|
1429
|
-
$$renderer2.push(`<div${$
|
|
1526
|
+
$$renderer2.push(`<div${$29.attr_class("divider svelte-1ysvu88", undefined, { hidden: !open })} role="separator" aria-orientation="vertical" aria-label="Resize terminal panes"${$29.attr("aria-valuenow", Math.round(ratio))}${$29.attr("aria-valuemin", 20)}${$29.attr("aria-valuemax", 80)} tabindex="0"></div> <div${$29.attr_class("side svelte-1ysvu88", undefined, { hidden: !open })}${$29.attr_style("", { "flex-basis": `${$29.stringify(100 - ratio)}%` })}>`);
|
|
1430
1527
|
TerminalPane($$renderer2, {
|
|
1431
1528
|
id,
|
|
1432
1529
|
arg: "shell",
|
|
@@ -1451,7 +1548,7 @@ function AppShell($$renderer, $$props) {
|
|
|
1451
1548
|
let livePet = pet;
|
|
1452
1549
|
let liveFilter = filter;
|
|
1453
1550
|
let loaded = snapshot.length > 0;
|
|
1454
|
-
const running = $
|
|
1551
|
+
const running = $30.derived(() => instances.filter((i) => i.status === "running"));
|
|
1455
1552
|
let attention = Object.fromEntries(snapshot.map((i) => [i.id, i.attention]));
|
|
1456
1553
|
let editingId = null;
|
|
1457
1554
|
let editingName = "";
|
|
@@ -1482,9 +1579,9 @@ function AppShell($$renderer, $$props) {
|
|
|
1482
1579
|
apiPost("/api/settings/filter", { value: v }).catch(() => {});
|
|
1483
1580
|
}
|
|
1484
1581
|
let path = initialPath;
|
|
1485
|
-
const onIde = $
|
|
1486
|
-
const requestedId = $
|
|
1487
|
-
const active = $
|
|
1582
|
+
const onIde = $30.derived(() => path.startsWith("/ide"));
|
|
1583
|
+
const requestedId = $30.derived(() => path.startsWith("/ide/") ? path.slice("/ide/".length) : "");
|
|
1584
|
+
const active = $30.derived(() => onIde() ? running().some((i) => i.id === requestedId()) ? requestedId() : running()[0]?.id ?? "" : "");
|
|
1488
1585
|
function navigate(to) {
|
|
1489
1586
|
if (to === path)
|
|
1490
1587
|
return;
|
|
@@ -1497,7 +1594,7 @@ function AppShell($$renderer, $$props) {
|
|
|
1497
1594
|
const forced = new SvelteSet;
|
|
1498
1595
|
const mountable = (id) => everReady.has(id) || forced.has(id);
|
|
1499
1596
|
const STALLED_AFTER_MS = 1e4;
|
|
1500
|
-
const activeInstance = $
|
|
1597
|
+
const activeInstance = $30.derived(() => running().find((i) => i.id === active()));
|
|
1501
1598
|
const frames = {};
|
|
1502
1599
|
function reloadActive() {
|
|
1503
1600
|
const inst = activeInstance();
|
|
@@ -1506,10 +1603,27 @@ function AppShell($$renderer, $$props) {
|
|
|
1506
1603
|
loadedFrames.delete(inst.id);
|
|
1507
1604
|
frames[inst.id]?.contentWindow?.location.replace(ideUrl(inst));
|
|
1508
1605
|
}
|
|
1606
|
+
function jumpToTab(e, fromFrame) {
|
|
1607
|
+
if (!e.altKey || e.ctrlKey || e.metaKey || editingId)
|
|
1608
|
+
return;
|
|
1609
|
+
const digit = /^Digit([1-9])$/.exec(e.code)?.[1];
|
|
1610
|
+
if (!digit)
|
|
1611
|
+
return;
|
|
1612
|
+
const next = nextTabIndex(running().findIndex((i) => i.id === active()), digit, running().length);
|
|
1613
|
+
const target = next === null ? undefined : running()[next];
|
|
1614
|
+
if (!target)
|
|
1615
|
+
return;
|
|
1616
|
+
e.preventDefault();
|
|
1617
|
+
e.stopPropagation();
|
|
1618
|
+
navigate(`/ide/${target.id}`);
|
|
1619
|
+
if (fromFrame)
|
|
1620
|
+
tick2().then(() => frames[target.id]?.contentWindow?.focus());
|
|
1621
|
+
}
|
|
1622
|
+
const framedTabIds = $30.derived(() => running().filter((i) => i.mode !== "terminal" && loadedFrames.has(i.id)).map((i) => i.id).join(" "));
|
|
1509
1623
|
let $$settled = true;
|
|
1510
1624
|
let $$inner_renderer;
|
|
1511
1625
|
function $$render_inner($$renderer3) {
|
|
1512
|
-
$$renderer3.push(`<div${$
|
|
1626
|
+
$$renderer3.push(`<div${$30.attr_class("app svelte-1duc7gd", undefined, { ide: onIde() })}>`);
|
|
1513
1627
|
if (onIde()) {
|
|
1514
1628
|
$$renderer3.push("<!--[0-->");
|
|
1515
1629
|
IdeBar($$renderer3, {
|
|
@@ -1541,13 +1655,13 @@ function AppShell($$renderer, $$props) {
|
|
|
1541
1655
|
onFilter: setFilter
|
|
1542
1656
|
});
|
|
1543
1657
|
}
|
|
1544
|
-
$$renderer3.push(`<!--]--> <div${$
|
|
1545
|
-
const each_array = $
|
|
1658
|
+
$$renderer3.push(`<!--]--> <div${$30.attr_class("panes svelte-1duc7gd", undefined, { hidden: !onIde() })}><!--[-->`);
|
|
1659
|
+
const each_array = $30.ensure_array_like(running());
|
|
1546
1660
|
for (let $$index = 0, $$length = each_array.length;$$index < $$length; $$index++) {
|
|
1547
1661
|
let inst = each_array[$$index];
|
|
1548
1662
|
if (visited.has(inst.id)) {
|
|
1549
1663
|
$$renderer3.push("<!--[0-->");
|
|
1550
|
-
$$renderer3.push(`<div${$
|
|
1664
|
+
$$renderer3.push(`<div${$30.attr_class("pane svelte-1duc7gd", undefined, { active: inst.id === active() })} role="tabpanel"${$30.attr("aria-labelledby", `tab-${$30.stringify(inst.id)}`)}>`);
|
|
1551
1665
|
if (mountable(inst.id)) {
|
|
1552
1666
|
$$renderer3.push("<!--[0-->");
|
|
1553
1667
|
if (inst.mode === "terminal") {
|
|
@@ -1559,7 +1673,7 @@ function AppShell($$renderer, $$props) {
|
|
|
1559
1673
|
});
|
|
1560
1674
|
} else {
|
|
1561
1675
|
$$renderer3.push("<!--[-1-->");
|
|
1562
|
-
$$renderer3.push(`<iframe${$
|
|
1676
|
+
$$renderer3.push(`<iframe${$30.attr("src", ideUrl(inst))}${$30.attr("title", inst.name)} class="svelte-1duc7gd" onload="this.__e=event"></iframe>`);
|
|
1563
1677
|
}
|
|
1564
1678
|
$$renderer3.push(`<!--]-->`);
|
|
1565
1679
|
} else {
|
|
@@ -1593,11 +1707,7 @@ function AppShell($$renderer, $$props) {
|
|
|
1593
1707
|
$$renderer3.push("<!--[-1-->");
|
|
1594
1708
|
}
|
|
1595
1709
|
$$renderer3.push(`<!--]--></div></div> `);
|
|
1596
|
-
Toaster($$renderer3, {
|
|
1597
|
-
toastOptions: {
|
|
1598
|
-
style: "border:1px solid var(--ink); background:var(--bg-card); color:var(--ink); box-shadow:4px 4px 0 var(--ink); font-family:var(--font-mono); font-size:13px;"
|
|
1599
|
-
}
|
|
1600
|
-
});
|
|
1710
|
+
Toaster($$renderer3, { toastOptions: TOAST_OPTIONS });
|
|
1601
1711
|
$$renderer3.push(`<!---->`);
|
|
1602
1712
|
}
|
|
1603
1713
|
do {
|
|
@@ -1615,7 +1725,7 @@ function App($$renderer, $$props) {
|
|
|
1615
1725
|
let { preflight, initialPath, snapshot, pet, filter } = $$props;
|
|
1616
1726
|
if (true) {
|
|
1617
1727
|
let failed = function($$renderer3, error) {
|
|
1618
|
-
$$renderer3.push(`<mochi-island-failure data-component="AppShell"${$
|
|
1728
|
+
$$renderer3.push(`<mochi-island-failure data-component="AppShell"${$31.attr("data-message", error.message)}></mochi-island-failure>`);
|
|
1619
1729
|
};
|
|
1620
1730
|
$$renderer2.push("<!--[0-->");
|
|
1621
1731
|
$$renderer2.boundary({ failed }, ($$renderer3) => {
|
|
@@ -1623,7 +1733,7 @@ function App($$renderer, $$props) {
|
|
|
1623
1733
|
{
|
|
1624
1734
|
HydratableBoundary($$renderer3, {
|
|
1625
1735
|
children: ($$renderer4) => {
|
|
1626
|
-
$$renderer4.push(`<mochi-hydratable-island component-name="AppShell_2rtnxn6pgp2rh" component-url="__MOCHI_COMPONENT_URL__AppShell_2rtnxn6pgp2rh__"${$
|
|
1736
|
+
$$renderer4.push(`<mochi-hydratable-island component-name="AppShell_2rtnxn6pgp2rh" component-url="__MOCHI_COMPONENT_URL__AppShell_2rtnxn6pgp2rh__"${$31.attr("props-ref", emitIslandProps({ preflight, initialPath, snapshot, pet, filter }))}>`);
|
|
1627
1737
|
$$renderer4.push(`<!--[-->`);
|
|
1628
1738
|
{
|
|
1629
1739
|
AppShell($$renderer4, { preflight, initialPath, snapshot, pet, filter });
|
|
@@ -11,11 +11,12 @@ import {
|
|
|
11
11
|
OFF,
|
|
12
12
|
ON,
|
|
13
13
|
ROWS,
|
|
14
|
+
TOAST_OPTIONS,
|
|
14
15
|
Toaster,
|
|
15
16
|
avatars,
|
|
16
17
|
decode,
|
|
17
18
|
dist_default
|
|
18
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-gz6hv1h5.js";
|
|
19
20
|
import {
|
|
20
21
|
HydratableBoundary,
|
|
21
22
|
Icon,
|
|
@@ -452,11 +453,7 @@ function AvatarsView($$renderer, $$props) {
|
|
|
452
453
|
$$renderer2.push(`<!--]--></li>`);
|
|
453
454
|
}
|
|
454
455
|
$$renderer2.push(`<!--]--></ul></section></main></div> `);
|
|
455
|
-
Toaster($$renderer2, {
|
|
456
|
-
toastOptions: {
|
|
457
|
-
style: "border:1px solid var(--ink); background:var(--bg-card); color:var(--ink); box-shadow:4px 4px 0 var(--ink); font-family:var(--font-mono); font-size:13px;"
|
|
458
|
-
}
|
|
459
|
-
});
|
|
456
|
+
Toaster($$renderer2, { toastOptions: TOAST_OPTIONS });
|
|
460
457
|
$$renderer2.push(`<!---->`);
|
|
461
458
|
});
|
|
462
459
|
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import {
|
|
3
3
|
StatusBadge,
|
|
4
|
-
apiDelete,
|
|
5
|
-
apiPost,
|
|
6
4
|
forwardedPortUrl
|
|
7
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-ed46m58e.js";
|
|
8
6
|
import {
|
|
7
|
+
apiDelete,
|
|
8
|
+
apiPost,
|
|
9
9
|
ideUrl
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-zd49axkf.js";
|
|
11
11
|
import {
|
|
12
12
|
HydratableBoundary,
|
|
13
13
|
Icon,
|