codebay 0.6.0 → 0.7.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 +46 -39
- package/.mochi/svelte-client/_hydrate-AppShell_2rtnxn6pgp2rh-fkna7bj2.js +2 -0
- package/.mochi/svelte-compile/{App-v5mwmv6t.server.js → App-6rcf0d74.server.js} +87 -44
- package/.mochi/svelte-css/InstanceFilter-3q6x0jt0hcgpz.css +1 -0
- package/package.json +1 -1
- package/src/components/DashboardView.svelte +15 -2
- package/src/components/InstanceFilter.svelte +68 -0
- package/src/components/TopBar.svelte +9 -1
- package/src/types.ts +3 -0
- package/.mochi/svelte-client/_hydrate-AppShell_2rtnxn6pgp2rh-1y0r9tae.js +0 -2
package/.mochi/manifest.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"assetPrefix": "/_mochi",
|
|
4
4
|
"bootstrapUrl": "/_mochi/client/HydratableIsland-qyjx1d98.js",
|
|
5
5
|
"componentEntryUrls": {
|
|
6
|
-
"AppShell_2rtnxn6pgp2rh": "/_mochi/client/_hydrate-AppShell_2rtnxn6pgp2rh-
|
|
6
|
+
"AppShell_2rtnxn6pgp2rh": "/_mochi/client/_hydrate-AppShell_2rtnxn6pgp2rh-fkna7bj2.js",
|
|
7
7
|
"InstanceView_2ma45l9bybfhl": "/_mochi/client/_hydrate-InstanceView_2ma45l9bybfhl-eamnbyqk.js",
|
|
8
8
|
"AvatarsView_257s9yq1wwr4f": "/_mochi/client/_hydrate-AvatarsView_257s9yq1wwr4f-89wtkb86.js",
|
|
9
9
|
"SettingsView_8hmarwmf8onq": "/_mochi/client/_hydrate-SettingsView_8hmarwmf8onq-kdra4mcb.js"
|
|
@@ -28,22 +28,23 @@
|
|
|
28
28
|
"src/components/Skeleton.svelte": "/_mochi/css/Skeleton-8k69usiju43h.css",
|
|
29
29
|
"src/components/StatusBadge.svelte": "/_mochi/css/StatusBadge-3mq0j7z6aq4j.css",
|
|
30
30
|
"src/components/HealthBox.svelte": "/_mochi/css/HealthBox-er2her0jukwl.css",
|
|
31
|
-
"src/components/Avatar.svelte": "/_mochi/css/Avatar-3pi30db6ozvf0.css",
|
|
32
31
|
"src/components/AvatarEditor.svelte": "/_mochi/css/AvatarEditor-2ewwtejaml4e2.css",
|
|
33
32
|
"src/components/AppBar.svelte": "/_mochi/css/AppBar-3bxinv4pabv8l.css",
|
|
33
|
+
"src/components/Avatar.svelte": "/_mochi/css/Avatar-3pi30db6ozvf0.css",
|
|
34
34
|
"src/components/Button.svelte": "/_mochi/css/Button-2vtbrzb5kgu25.css",
|
|
35
35
|
"src/components/ThemePicker.svelte": "/_mochi/css/ThemePicker-1ir8jyocm8mvi.css",
|
|
36
36
|
"src/components/CoinButton.svelte": "/_mochi/css/CoinButton-1rej3sh3tkjud.css",
|
|
37
|
+
"src/components/FolderBrowser.svelte": "/_mochi/css/FolderBrowser-1x428zb3f2kti.css",
|
|
38
|
+
"src/components/InstanceCard.svelte": "/_mochi/css/InstanceCard-3vnltxnbxkvay.css",
|
|
37
39
|
"src/components/TopBar.svelte": "/_mochi/css/TopBar-2q87li6yt8ids.css",
|
|
38
40
|
"node_modules/svelte-french-toast/dist/components/ToastWrapper.svelte": "/_mochi/css/ToastWrapper-1fbnym10rm2nv.css",
|
|
39
41
|
"node_modules/svelte-french-toast/dist/components/ToastMessage.svelte": "/_mochi/css/ToastMessage-2jfwb2og2lfa8.css",
|
|
40
|
-
"src/components/InstanceCard.svelte": "/_mochi/css/InstanceCard-3vnltxnbxkvay.css",
|
|
41
|
-
"src/components/FolderBrowser.svelte": "/_mochi/css/FolderBrowser-1x428zb3f2kti.css",
|
|
42
|
-
"src/components/CredMenu.svelte": "/_mochi/css/CredMenu-9hwgeptp7crb.css",
|
|
43
|
-
"src/components/SettingsCog.svelte": "/_mochi/css/SettingsCog-jftyadvo64qo.css",
|
|
44
42
|
"src/components/PortsBox.svelte": "/_mochi/css/PortsBox-1t25b5yg7jva3.css",
|
|
45
43
|
"src/components/BranchBox.svelte": "/_mochi/css/BranchBox-1yqu1q2mgnjwz.css",
|
|
46
|
-
"src/components/Brand.svelte": "/_mochi/css/Brand-1bh2b800g5vrn.css"
|
|
44
|
+
"src/components/Brand.svelte": "/_mochi/css/Brand-1bh2b800g5vrn.css",
|
|
45
|
+
"src/components/InstanceFilter.svelte": "/_mochi/css/InstanceFilter-3q6x0jt0hcgpz.css",
|
|
46
|
+
"src/components/CredMenu.svelte": "/_mochi/css/CredMenu-9hwgeptp7crb.css",
|
|
47
|
+
"src/components/SettingsCog.svelte": "/_mochi/css/SettingsCog-jftyadvo64qo.css"
|
|
47
48
|
},
|
|
48
49
|
"clientFiles": {
|
|
49
50
|
"/_mochi/css/DefaultError-2b0daamydxgb2.css": "svelte-css/DefaultError-2b0daamydxgb2.css",
|
|
@@ -65,22 +66,23 @@
|
|
|
65
66
|
"/_mochi/css/Skeleton-8k69usiju43h.css": "svelte-css/Skeleton-8k69usiju43h.css",
|
|
66
67
|
"/_mochi/css/StatusBadge-3mq0j7z6aq4j.css": "svelte-css/StatusBadge-3mq0j7z6aq4j.css",
|
|
67
68
|
"/_mochi/css/HealthBox-er2her0jukwl.css": "svelte-css/HealthBox-er2her0jukwl.css",
|
|
68
|
-
"/_mochi/css/Avatar-3pi30db6ozvf0.css": "svelte-css/Avatar-3pi30db6ozvf0.css",
|
|
69
69
|
"/_mochi/css/AvatarEditor-2ewwtejaml4e2.css": "svelte-css/AvatarEditor-2ewwtejaml4e2.css",
|
|
70
70
|
"/_mochi/css/AppBar-3bxinv4pabv8l.css": "svelte-css/AppBar-3bxinv4pabv8l.css",
|
|
71
|
+
"/_mochi/css/Avatar-3pi30db6ozvf0.css": "svelte-css/Avatar-3pi30db6ozvf0.css",
|
|
71
72
|
"/_mochi/css/Button-2vtbrzb5kgu25.css": "svelte-css/Button-2vtbrzb5kgu25.css",
|
|
72
73
|
"/_mochi/css/ThemePicker-1ir8jyocm8mvi.css": "svelte-css/ThemePicker-1ir8jyocm8mvi.css",
|
|
73
74
|
"/_mochi/css/CoinButton-1rej3sh3tkjud.css": "svelte-css/CoinButton-1rej3sh3tkjud.css",
|
|
75
|
+
"/_mochi/css/FolderBrowser-1x428zb3f2kti.css": "svelte-css/FolderBrowser-1x428zb3f2kti.css",
|
|
76
|
+
"/_mochi/css/InstanceCard-3vnltxnbxkvay.css": "svelte-css/InstanceCard-3vnltxnbxkvay.css",
|
|
74
77
|
"/_mochi/css/TopBar-2q87li6yt8ids.css": "svelte-css/TopBar-2q87li6yt8ids.css",
|
|
75
78
|
"/_mochi/css/ToastWrapper-1fbnym10rm2nv.css": "svelte-css/ToastWrapper-1fbnym10rm2nv.css",
|
|
76
79
|
"/_mochi/css/ToastMessage-2jfwb2og2lfa8.css": "svelte-css/ToastMessage-2jfwb2og2lfa8.css",
|
|
77
|
-
"/_mochi/css/InstanceCard-3vnltxnbxkvay.css": "svelte-css/InstanceCard-3vnltxnbxkvay.css",
|
|
78
|
-
"/_mochi/css/FolderBrowser-1x428zb3f2kti.css": "svelte-css/FolderBrowser-1x428zb3f2kti.css",
|
|
79
|
-
"/_mochi/css/CredMenu-9hwgeptp7crb.css": "svelte-css/CredMenu-9hwgeptp7crb.css",
|
|
80
|
-
"/_mochi/css/SettingsCog-jftyadvo64qo.css": "svelte-css/SettingsCog-jftyadvo64qo.css",
|
|
81
80
|
"/_mochi/css/PortsBox-1t25b5yg7jva3.css": "svelte-css/PortsBox-1t25b5yg7jva3.css",
|
|
82
81
|
"/_mochi/css/BranchBox-1yqu1q2mgnjwz.css": "svelte-css/BranchBox-1yqu1q2mgnjwz.css",
|
|
83
82
|
"/_mochi/css/Brand-1bh2b800g5vrn.css": "svelte-css/Brand-1bh2b800g5vrn.css",
|
|
83
|
+
"/_mochi/css/InstanceFilter-3q6x0jt0hcgpz.css": "svelte-css/InstanceFilter-3q6x0jt0hcgpz.css",
|
|
84
|
+
"/_mochi/css/CredMenu-9hwgeptp7crb.css": "svelte-css/CredMenu-9hwgeptp7crb.css",
|
|
85
|
+
"/_mochi/css/SettingsCog-jftyadvo64qo.css": "svelte-css/SettingsCog-jftyadvo64qo.css",
|
|
84
86
|
"/_mochi/import-css/index-0nwv3654.css": "import-css/index-0nwv3654.css",
|
|
85
87
|
"/_mochi/import-css/index-xndx4980.css": "import-css/index-xndx4980.css",
|
|
86
88
|
"/_mochi/client/HydratableIsland-qyjx1d98.js": "svelte-client/HydratableIsland-qyjx1d98.js",
|
|
@@ -90,7 +92,7 @@
|
|
|
90
92
|
"/_mochi/client/chunk-k5m4kt20.js": "svelte-client/chunk-k5m4kt20.js",
|
|
91
93
|
"/_mochi/client/chunk-330mrspw.js": "svelte-client/chunk-330mrspw.js",
|
|
92
94
|
"/_mochi/client/chunk-qj7zy2d9.js": "svelte-client/chunk-qj7zy2d9.js",
|
|
93
|
-
"/_mochi/client/_hydrate-AppShell_2rtnxn6pgp2rh-
|
|
95
|
+
"/_mochi/client/_hydrate-AppShell_2rtnxn6pgp2rh-fkna7bj2.js": "svelte-client/_hydrate-AppShell_2rtnxn6pgp2rh-fkna7bj2.js",
|
|
94
96
|
"/_mochi/client/_hydrate-InstanceView_2ma45l9bybfhl-eamnbyqk.js": "svelte-client/_hydrate-InstanceView_2ma45l9bybfhl-eamnbyqk.js",
|
|
95
97
|
"/_mochi/client/_hydrate-AvatarsView_257s9yq1wwr4f-89wtkb86.js": "svelte-client/_hydrate-AvatarsView_257s9yq1wwr4f-89wtkb86.js",
|
|
96
98
|
"/_mochi/client/_hydrate-SettingsView_8hmarwmf8onq-kdra4mcb.js": "svelte-client/_hydrate-SettingsView_8hmarwmf8onq-kdra4mcb.js"
|
|
@@ -112,7 +114,7 @@
|
|
|
112
114
|
]
|
|
113
115
|
},
|
|
114
116
|
"src/pages/App.svelte": {
|
|
115
|
-
"ssrModule": "svelte-compile/App-
|
|
117
|
+
"ssrModule": "svelte-compile/App-6rcf0d74.server.js",
|
|
116
118
|
"hydratables": [
|
|
117
119
|
{
|
|
118
120
|
"name": "AppShell_2rtnxn6pgp2rh",
|
|
@@ -127,6 +129,7 @@
|
|
|
127
129
|
"src/components/PortsBox.svelte",
|
|
128
130
|
"src/components/InstanceCard.svelte",
|
|
129
131
|
"src/components/Brand.svelte",
|
|
132
|
+
"src/components/InstanceFilter.svelte",
|
|
130
133
|
"src/components/SettingsCog.svelte",
|
|
131
134
|
"src/components/CredMenu.svelte",
|
|
132
135
|
"src/components/TopBar.svelte",
|
|
@@ -862,16 +865,16 @@
|
|
|
862
865
|
]
|
|
863
866
|
},
|
|
864
867
|
{
|
|
865
|
-
"name": "_hydrate-AppShell_2rtnxn6pgp2rh-
|
|
866
|
-
"size":
|
|
868
|
+
"name": "_hydrate-AppShell_2rtnxn6pgp2rh-fkna7bj2.js",
|
|
869
|
+
"size": 39308,
|
|
867
870
|
"inputs": [
|
|
868
871
|
{
|
|
869
872
|
"path": "src/components/FolderBrowser.svelte",
|
|
870
|
-
"size":
|
|
873
|
+
"size": 6586
|
|
871
874
|
},
|
|
872
875
|
{
|
|
873
876
|
"path": "src/components/AppShell.svelte",
|
|
874
|
-
"size":
|
|
877
|
+
"size": 4998
|
|
875
878
|
},
|
|
876
879
|
{
|
|
877
880
|
"path": "src/components/InstanceCard.svelte",
|
|
@@ -879,15 +882,15 @@
|
|
|
879
882
|
},
|
|
880
883
|
{
|
|
881
884
|
"path": "src/components/DashboardView.svelte",
|
|
882
|
-
"size":
|
|
885
|
+
"size": 4048
|
|
883
886
|
},
|
|
884
887
|
{
|
|
885
888
|
"path": "src/components/CredMenu.svelte",
|
|
886
|
-
"size":
|
|
889
|
+
"size": 1775
|
|
887
890
|
},
|
|
888
891
|
{
|
|
889
892
|
"path": "src/components/IdeBar.svelte",
|
|
890
|
-
"size":
|
|
893
|
+
"size": 1717
|
|
891
894
|
},
|
|
892
895
|
{
|
|
893
896
|
"path": "node_modules/svelte/src/reactivity/url.js",
|
|
@@ -895,7 +898,7 @@
|
|
|
895
898
|
},
|
|
896
899
|
{
|
|
897
900
|
"path": "src/components/IdeLoader.svelte",
|
|
898
|
-
"size":
|
|
901
|
+
"size": 1475
|
|
899
902
|
},
|
|
900
903
|
{
|
|
901
904
|
"path": "node_modules/svelte/src/reactivity/map.js",
|
|
@@ -906,20 +909,20 @@
|
|
|
906
909
|
"size": 1190
|
|
907
910
|
},
|
|
908
911
|
{
|
|
909
|
-
"path": "
|
|
910
|
-
"size":
|
|
912
|
+
"path": "src/components/TopBar.svelte",
|
|
913
|
+
"size": 1177
|
|
911
914
|
},
|
|
912
915
|
{
|
|
913
|
-
"path": "src/
|
|
914
|
-
"size":
|
|
916
|
+
"path": "node_modules/svelte/src/reactivity/url-search-params.js",
|
|
917
|
+
"size": 1096
|
|
915
918
|
},
|
|
916
919
|
{
|
|
917
920
|
"path": "src/components/PortsBox.svelte",
|
|
918
|
-
"size":
|
|
921
|
+
"size": 710
|
|
919
922
|
},
|
|
920
923
|
{
|
|
921
924
|
"path": "node_modules/@lucide/svelte/dist/icons/component.svelte",
|
|
922
|
-
"size":
|
|
925
|
+
"size": 702
|
|
923
926
|
},
|
|
924
927
|
{
|
|
925
928
|
"path": "src/lib/repo-url.ts",
|
|
@@ -929,45 +932,49 @@
|
|
|
929
932
|
"path": "node_modules/svelte/src/reactivity/date.js",
|
|
930
933
|
"size": 595
|
|
931
934
|
},
|
|
935
|
+
{
|
|
936
|
+
"path": "src/components/InstanceFilter.svelte",
|
|
937
|
+
"size": 580
|
|
938
|
+
},
|
|
932
939
|
{
|
|
933
940
|
"path": "node_modules/@lucide/svelte/dist/icons/settings.svelte",
|
|
934
|
-
"size":
|
|
941
|
+
"size": 524
|
|
935
942
|
},
|
|
936
943
|
{
|
|
937
944
|
"path": "node_modules/@lucide/svelte/dist/icons/cable.svelte",
|
|
938
|
-
"size":
|
|
945
|
+
"size": 467
|
|
939
946
|
},
|
|
940
947
|
{
|
|
941
948
|
"path": "src/components/Brand.svelte",
|
|
942
|
-
"size":
|
|
949
|
+
"size": 447
|
|
943
950
|
},
|
|
944
951
|
{
|
|
945
952
|
"path": "node_modules/@lucide/svelte/dist/icons/package.svelte",
|
|
946
|
-
"size":
|
|
953
|
+
"size": 383
|
|
947
954
|
},
|
|
948
955
|
{
|
|
949
956
|
"path": "node_modules/@lucide/svelte/dist/icons/folder-clock.svelte",
|
|
950
|
-
"size":
|
|
957
|
+
"size": 333
|
|
951
958
|
},
|
|
952
959
|
{
|
|
953
960
|
"path": "node_modules/@lucide/svelte/dist/icons/link.svelte",
|
|
954
|
-
"size":
|
|
961
|
+
"size": 293
|
|
955
962
|
},
|
|
956
963
|
{
|
|
957
964
|
"path": "node_modules/@lucide/svelte/dist/icons/triangle-alert.svelte",
|
|
958
|
-
"size":
|
|
965
|
+
"size": 289
|
|
959
966
|
},
|
|
960
967
|
{
|
|
961
968
|
"path": "node_modules/@lucide/svelte/dist/icons/folder.svelte",
|
|
962
|
-
"size":
|
|
969
|
+
"size": 278
|
|
963
970
|
},
|
|
964
971
|
{
|
|
965
972
|
"path": "src/components/SettingsCog.svelte",
|
|
966
|
-
"size":
|
|
973
|
+
"size": 255
|
|
967
974
|
},
|
|
968
975
|
{
|
|
969
976
|
"path": "node_modules/@lucide/svelte/dist/icons/git-branch.svelte",
|
|
970
|
-
"size":
|
|
977
|
+
"size": 253
|
|
971
978
|
},
|
|
972
979
|
{
|
|
973
980
|
"path": "src/components/BranchBox.svelte",
|
|
@@ -975,7 +982,7 @@
|
|
|
975
982
|
},
|
|
976
983
|
{
|
|
977
984
|
"path": "node_modules/@lucide/svelte/dist/icons/arrow-up.svelte",
|
|
978
|
-
"size":
|
|
985
|
+
"size": 199
|
|
979
986
|
},
|
|
980
987
|
{
|
|
981
988
|
"path": "node_modules/svelte/src/reactivity/reactive-value.js",
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as ti,b as Nt,c as De,d as Ht,e as Et,f as Jt,h as ni}from"/_mochi/client/chunk-fqg2qzj8.js";import{i as gt,l as je,m as ri}from"/_mochi/client/chunk-rpdphch7.js";import{n as Xe}from"/_mochi/client/chunk-4jgkak13.js";import{u as ii,v as Re,w as $e,x as ai,y as Ue,z as jt}from"/_mochi/client/chunk-k5m4kt20.js";import{A as te,B as Ve}from"/_mochi/client/chunk-330mrspw.js";import{$ as xe,Aa as de,Da as Xt,G as s,Ga as le,H as j,Ja as Te,L as X,M as U,Ma as H,Oa as ye,Pa as Zt,Qa as Gt,Ra as q,S as ft,Sa as ee,T as wt,Ta as Se,U as L,W as it,X as S,Xa as Ut,Z as l,Za as li,_ as fe,aa as d,ba as ue,ca as $,da as ne,ga as M,ha as ht,ia as xt,ja as Qe,ka as Yt,la as e,oa as ei,pa as Ae,qa as W,ra as _e,sa as m,ua as ce,va as ot,wa as f,xa as V,ya as C,za as qt}from"/_mochi/client/chunk-qj7zy2d9.js";var zt=!1;class bt extends Date{#e=S(super.getTime());#t=new Map;#i=ht;constructor(...i){super(...i);if(!zt)this.#a()}#a(){zt=!0;var i=bt.prototype,t=Date.prototype,a=Object.getOwnPropertyNames(t);for(let r of a){if(r.startsWith("get")||r.startsWith("to")||r==="valueOf")i[r]=function(...b){if(b.length>0)return e(this.#e),t[r].apply(this,b);var g=this.#t.get(r);if(g===void 0){let p=ht;xt(this.#i),g=L(()=>{return e(this.#e),t[r].apply(this,b)}),this.#t.set(r,g),xt(p)}return e(g)};if(r.startsWith("set"))i[r]=function(...b){var g=t[r].apply(this,b);return l(this.#e,t.getTime.call(this)),g}}}}var di=["forEach","isDisjointFrom","isSubsetOf","isSupersetOf"],oi=["difference","intersection","symmetricDifference","union"],Vt=!1;class Le extends Set{#e=new Map;#t=S(0);#i=S(0);#a=Qe||-1;constructor(i){super();if(i){for(var t of i)super.add(t);this.#i.v=super.size}if(!Vt)this.#n()}#r(i){return Qe===this.#a?S(i):it(i)}#n(){Vt=!0;var i=Le.prototype,t=Set.prototype;for(let a of di)i[a]=function(...r){return e(this.#t),t[a].apply(this,r)};for(let a of oi)i[a]=function(...r){e(this.#t);var b=t[a].apply(this,r);return new Le(b)}}has(i){var t=super.has(i),a=this.#e,r=a.get(i);if(r===void 0){if(!t)return e(this.#t),!1;r=this.#r(!0),a.set(i,r)}return e(r),t}add(i){if(!super.has(i))super.add(i),l(this.#i,super.size),fe(this.#t);return this}delete(i){var t=super.delete(i),a=this.#e,r=a.get(i);if(r!==void 0)a.delete(i),l(r,!1);if(t)l(this.#i,super.size),fe(this.#t);return t}clear(){if(super.size===0)return;super.clear();var i=this.#e;for(var t of i.values())l(t,!1);i.clear(),l(this.#i,0),fe(this.#t)}keys(){return this.values()}values(){return e(this.#t),super.values()}entries(){return e(this.#t),super.entries()}[Symbol.iterator](){return this.keys()}get size(){return e(this.#i)}}class Rt extends Map{#e=new Map;#t=S(0);#i=S(0);#a=Qe||-1;constructor(i){super();if(i){for(var[t,a]of i)super.set(t,a);this.#i.v=super.size}}#r(i){return Qe===this.#a?S(i):it(i)}has(i){var t=this.#e,a=t.get(i);if(a===void 0)if(super.has(i))a=this.#r(0),t.set(i,a);else return e(this.#t),!1;return e(a),!0}forEach(i,t){this.#n(),super.forEach(i,t)}get(i){var t=this.#e,a=t.get(i);if(a===void 0)if(super.has(i))a=this.#r(0),t.set(i,a);else{e(this.#t);return}return e(a),super.get(i)}set(i,t){var a=this.#e,r=a.get(i),b=super.get(i),g=super.set(i,t),p=this.#t;if(r===void 0)r=this.#r(0),a.set(i,r),l(this.#i,super.size),fe(p);else if(b!==t){fe(r);var x=p.reactions===null?null:new Set(p.reactions),w=x===null||!r.reactions?.every((A)=>x.has(A));if(w)fe(p)}return g}delete(i){var t=this.#e,a=t.get(i),r=super.delete(i);if(a!==void 0)t.delete(i),l(a,-1);if(r)l(this.#i,super.size),fe(this.#t);return r}clear(){if(super.size===0)return;super.clear();var i=this.#e;l(this.#i,0);for(var t of i.values())l(t,-1);fe(this.#t),i.clear()}#n(){e(this.#t);var i=this.#e;if(this.#i.v!==i.size){for(var t of super.keys())if(!i.has(t)){var a=this.#r(0);i.set(t,a)}}for([,a]of this.#e)e(a)}keys(){return e(this.#t),super.keys()}values(){return this.#n(),super.values()}entries(){return this.#n(),super.entries()}[Symbol.iterator](){return this.entries()}get size(){return e(this.#i),super.size}}var at=Symbol("replace");class rt extends URLSearchParams{#e=S(0);#t=Wt();#i=!1;#a(){if(!this.#t||this.#i)return;this.#i=!0;let i=this.toString();this.#t.search=i&&`?${i}`,this.#i=!1}[at](i){if(this.#i)return;if(i.toString()===super.toString())return;this.#i=!0;for(let t of[...super.keys()])super.delete(t);for(let[t,a]of i)super.append(t,a);fe(this.#e),this.#i=!1}append(i,t){super.append(i,t),this.#a(),fe(this.#e)}delete(i,t){var a=super.has(i,t);if(super.delete(i,t),a)this.#a(),fe(this.#e)}get(i){return e(this.#e),super.get(i)}getAll(i){return e(this.#e),super.getAll(i)}has(i,t){return e(this.#e),super.has(i,t)}keys(){return e(this.#e),super.keys()}forEach(i,t){e(this.#e),super.forEach(i,t)}set(i,t){var a=super.getAll(i);super.set(i,t);var r=super.getAll(i);if(a.length!==r.length||a.some((b,g)=>b!==r[g]))this.#a(),fe(this.#e)}sort(){super.sort(),this.#a(),fe(this.#e)}toString(){return e(this.#e),super.toString()}values(){return e(this.#e),super.values()}entries(){return e(this.#e),super.entries()}[Symbol.iterator](){return this.entries()}get size(){return e(this.#e),super.size}}var St=null;function Wt(){return St}class Kt extends URL{#e=S(super.protocol);#t=S(super.username);#i=S(super.password);#a=S(super.hostname);#r=S(super.port);#n=S(super.pathname);#l=S(super.hash);#s=S(super.search);#d;constructor(i,t){i=new URL(i,t);super(i);St=this,this.#d=new rt(i.searchParams),St=null}get hash(){return e(this.#l)}set hash(i){super.hash=i,l(this.#l,super.hash)}get host(){return e(this.#a),e(this.#r),super.host}set host(i){super.host=i,l(this.#a,super.hostname),l(this.#r,super.port)}get hostname(){return e(this.#a)}set hostname(i){super.hostname=i,l(this.#a,super.hostname)}get href(){return e(this.#e),e(this.#t),e(this.#i),e(this.#a),e(this.#r),e(this.#n),e(this.#l),e(this.#s),super.href}set href(i){super.href=i,l(this.#e,super.protocol),l(this.#t,super.username),l(this.#i,super.password),l(this.#a,super.hostname),l(this.#r,super.port),l(this.#n,super.pathname),l(this.#l,super.hash),l(this.#s,super.search),this.#d[at](super.searchParams)}get password(){return e(this.#i)}set password(i){super.password=i,l(this.#i,super.password)}get pathname(){return e(this.#n)}set pathname(i){super.pathname=i,l(this.#n,super.pathname)}get port(){return e(this.#r)}set port(i){super.port=i,l(this.#r,super.port)}get protocol(){return e(this.#e)}set protocol(i){super.protocol=i,l(this.#e,super.protocol)}get search(){return e(this.#s)}set search(i){super.search=i,l(this.#s,super.search),this.#d[at](super.searchParams)}get username(){return e(this.#t)}set username(i){super.username=i,l(this.#t,super.username)}get origin(){return e(this.#e),e(this.#a),e(this.#r),super.origin}get searchParams(){return this.#d}toString(){return this.href}toJSON(){return this.href}}class Ot{#e;#t;constructor(i,t){this.#e=i,this.#t=wt(t)}get current(){return this.#t(),this.#e()}}var Qt=/^[A-Za-z0-9._-]+$/;function ci(i){let t=i.trim();if(!t)return null;let a,r,b=t.match(/^[A-Za-z0-9._-]+@([A-Za-z0-9.-]+):(.+)$/);if(b)a=b[1],r=b[2];else if(/^[a-z][a-z0-9+.-]*:\/\//i.test(t)){let w;try{w=new URL(t)}catch{return null}if(w.protocol!=="http:"&&w.protocol!=="https:"&&w.protocol!=="ssh:")return null;a=w.hostname,r=w.pathname}else{let w=t.match(/^([A-Za-z0-9-]+\.[A-Za-z0-9.-]+)\/(.+)$/);if(!w)return null;a=w[1],r=w[2]}if(!a||!r)return null;let g=r.replace(/\.git$/i,"").split("/").filter(Boolean),[p,x]=g;if(!p||!x||!Qt.test(p)||!Qt.test(x))return null;return{host:a,owner:p,repo:x,cloneUrl:`https://${a}/${p}/${x}.git`}}function It(i){return ci(i)!==null}var $i=new Set(["$$slots","$$events","$$legacy"]);function nt(i,t){let a=q(t,$i),r=[["path",{d:"M16 14v2.2l1.6 1"}],["path",{d:"M7 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2"}],["circle",{cx:"16",cy:"16",r:"6"}]];te(i,ee({name:"folder-clock"},()=>a,{get iconNode(){return r}}))}var mi=new Set(["$$slots","$$events","$$legacy"]);function Ye(i,t){let a=q(t,mi),r=[["path",{d:"M15 6a9 9 0 0 0-9 9V3"}],["circle",{cx:"18",cy:"6",r:"3"}],["circle",{cx:"6",cy:"18",r:"3"}]];te(i,ee({name:"git-branch"},()=>a,{get iconNode(){return r}}))}var gi=new Set(["$$slots","$$events","$$legacy"]);function lt(i,t){let a=q(t,gi),r=[["path",{d:"m5 12 7-7 7 7"}],["path",{d:"M12 19V5"}]];te(i,ee({name:"arrow-up"},()=>a,{get iconNode(){return r}}))}var vi=new Set(["$$slots","$$events","$$legacy"]);function st(i,t){let a=q(t,vi),r=[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"}]];te(i,ee({name:"folder"},()=>a,{get iconNode(){return r}}))}var pi=new Set(["$$slots","$$events","$$legacy"]);function Ze(i,t){let a=q(t,pi),r=[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"}],["path",{d:"M12 9v4"}],["path",{d:"M12 17h.01"}]];te(i,ee({name:"triangle-alert"},()=>a,{get iconNode(){return r}}))}var ui=m('<div class="recent-row svelte-oq97c4"><button class="recent-pick svelte-oq97c4"><span class="icon svelte-oq97c4"><!></span> <span class="recent-text svelte-oq97c4"><span class="recent-name svelte-oq97c4"> </span> <span class="recent-path svelte-oq97c4"> </span></span></button> <button class="recent-x svelte-oq97c4" title="Remove from history"><!></button></div>'),hi=m('<button class="recent-toggle svelte-oq97c4"> </button>'),xi=m('<div class="recent svelte-oq97c4"><div class="recent-label svelte-oq97c4">Recent</div> <!> <!></div>'),bi=m('<div class="muted svelte-oq97c4">Loading…</div>'),Si=m('<div class="muted err svelte-oq97c4"> </div>'),wi=m('<div class="row svelte-oq97c4"><button class="nav svelte-oq97c4"><span class="icon svelte-oq97c4"><!></span> <span class="ename svelte-oq97c4">..</span></button></div>'),Ii=m('<div class="muted svelte-oq97c4"> </div>'),Ni=m('<span class="badge svelte-oq97c4">devcontainer</span>'),Ci=m('<div><button class="nav svelte-oq97c4"><span class="icon svelte-oq97c4"><!></span> <span class="ename svelte-oq97c4"> </span> <!></button> <button class="pick-inline svelte-oq97c4">Select</button></div>'),_i=m("<!> <!> <!>",1),Ei=m(`<div class="warn svelte-oq97c4"><!> <span>No <code class="svelte-oq97c4">devcontainer.json</code> in this folder — a default image will be used if you select
|
|
2
|
+
it.</span></div>`),Mi=m('<div class="overlay svelte-oq97c4" role="button" tabindex="0"><div class="modal panel svelte-oq97c4" role="dialog" aria-modal="true" aria-label="Pick a project folder" tabindex="-1"><div class="head svelte-oq97c4"><h2 class="svelte-oq97c4">Pick a project folder</h2> <button class="x svelte-oq97c4" aria-label="Close"><!></button></div> <div class="clone svelte-oq97c4"><div class="clone-label svelte-oq97c4">Clone a Git repository</div> <div class="clone-row svelte-oq97c4"><input class="clone-url svelte-oq97c4" type="text" placeholder="https://github.com/owner/repo" spellcheck="false" autocomplete="off"/> <input class="clone-branch svelte-oq97c4" type="text" placeholder="branch (optional)" spellcheck="false" autocomplete="off"/> <button class="clone-btn svelte-oq97c4">Clone</button></div></div> <div class="crumbs svelte-oq97c4"><code class="svelte-oq97c4"> </code></div> <!> <div class="search svelte-oq97c4"><input type="text" placeholder="Filter folders…" spellcheck="false" autocomplete="off" class="svelte-oq97c4"/></div> <div class="list svelte-oq97c4"><!></div> <!> <div class="foot svelte-oq97c4"><span class="hint svelte-oq97c4">Browse to a folder, then select this folder or any subfolder.</span> <button class="primary svelte-oq97c4">Select this folder</button></div></div></div>');function Ct(i,t){X(t,!0);let a=S(null),r=S(!0),b=S(null),g=S(""),p=S(null),x=S(xe([])),w=S(!1),A=S(""),D=S(""),z=L(()=>It(e(A)));function O(){if(!e(z))return;t.onpick(e(A).trim(),{branch:e(D).trim()||void 0})}let u=L(()=>e(a)?e(a).entries.filter((h)=>h.name.toLowerCase().includes(e(g).trim().toLowerCase())):[]),T=L(()=>e(w)?e(x):e(x).slice(0,5));async function P(){try{let h=await Nt("/api/history");l(x,h.history??[],!0)}catch{}}async function I(h){let K=e(x);l(x,e(x).filter((pe)=>pe.source_path!==h),!0);try{await Ht("/api/history",{sourcePath:h})}catch{l(x,K,!0)}}async function B(h=null){l(r,!0),l(b,null),l(g,"");try{let K=h?`/api/browse?path=${encodeURIComponent(h)}`:"/api/browse";l(a,await Nt(K,void 0,"Could not list folder"),!0)}catch(K){l(b,K.message,!0)}finally{l(r,!1)}await Yt(),e(p)?.focus()}ne(()=>{B(),P()});var F=Mi(),E=d(F),k=d(E),Y=$(d(k),2),Z=d(Y);Xe(Z,{size:16}),s(Y),s(k);var re=$(k,2),we=$(d(re),2),ve=d(we);Te(ve);var he=$(ve,2);Te(he);var Ie=$(he,2);s(we),s(re);var Ee=$(re,2),Pe=d(Ee),Me=d(Pe,!0);s(Pe),s(Ee);var Ne=$(Ee,2);{var v=(h)=>{var K=xi(),pe=$(d(K),2);de(pe,17,()=>e(T),(be)=>be.source_path,(be,me)=>{var ie=ui(),ae=d(ie),J=d(ae),ge=d(J);{var Be=(Ce)=>{Ye(Ce,{size:16})},Ke=L(()=>It(e(me).source_path)),Ge=(Ce)=>{nt(Ce,{size:16})};C(ge,(Ce)=>{if(e(Ke))Ce(Be);else Ce(Ge,-1)})}s(J);var qe=$(J,2),Fe=d(qe),pt=d(Fe,!0);s(Fe);var et=$(Fe,2),ut=d(et,!0);s(et),s(qe),s(ae);var Oe=$(ae,2),ze=d(Oe);Xe(ze,{size:14}),s(Oe),s(ie),M(()=>{V(pt,e(me).name),V(ut,e(me).source_path),H(Oe,"aria-label",`Remove ${e(me).name??""} from history`)}),W("click",ae,()=>t.onpick(e(me).source_path)),W("click",Oe,(Ce)=>{Ce.stopPropagation(),I(e(me).source_path)}),f(be,ie)});var Je=$(pe,2);{var We=(be)=>{var me=hi(),ie=d(me,!0);s(me),M(()=>V(ie,e(w)?"Show fewer":`Show all (${e(x).length})`)),W("click",me,()=>l(w,!e(w))),f(be,me)};C(Je,(be)=>{if(e(x).length>5)be(We)})}s(K),f(h,K)};C(Ne,(h)=>{if(e(x).length>0)h(v)})}var N=$(Ne,2),y=d(N);Te(y),Zt(y,(h)=>l(p,h),()=>e(p)),s(N);var c=$(N,2),n=d(c);{var o=(h)=>{var K=bi();f(h,K)},_=(h)=>{var K=Si(),pe=d(K,!0);s(K),M(()=>V(pe,e(b))),f(h,K)},Q=(h)=>{var K=_i(),pe=ue(K);{var Je=(ie)=>{var ae=wi(),J=d(ae),ge=d(J),Be=d(ge);lt(Be,{size:16}),s(ge),j(2),s(J),s(ae),W("click",J,()=>B(e(a)?.parent??null)),f(ie,ae)};C(pe,(ie)=>{if(e(a).parent&&!e(g))ie(Je)})}var We=$(pe,2);{var be=(ie)=>{var ae=Ii(),J=d(ae,!0);s(ae),M(()=>V(J,e(g)?"No folders match.":"No subfolders here.")),f(ie,ae)};C(We,(ie)=>{if(e(u).length===0)ie(be)})}var me=$(We,2);de(me,19,()=>e(u),(ie)=>ie.path,(ie,ae,J)=>{var ge=Ci();let Be;var Ke=d(ge),Ge=d(Ke),qe=d(Ge);st(qe,{size:16}),s(Ge);var Fe=$(Ge,2),pt=d(Fe,!0);s(Fe);var et=$(Fe,2);{var ut=(ze)=>{var Ce=Ni();f(ze,Ce)};C(et,(ze)=>{if(e(ae).hasDevcontainer)ze(ut)})}s(Ke);var Oe=$(Ke,2);s(ge),M((ze)=>{Be=le(ge,1,"row svelte-oq97c4",null,Be,ze),V(pt,e(ae).name)},[()=>({"first-match":e(g).trim()&&e(J)===0})]),W("click",Ke,()=>B(e(ae).path)),W("click",Oe,()=>t.onpick(e(ae).path)),f(ie,ge)}),f(h,K)};C(n,(h)=>{if(e(r))h(o);else if(e(b))h(_,1);else if(e(a))h(Q,2)})}s(c);var se=$(c,2);{var R=(h)=>{var K=Ei(),pe=d(K);Ze(pe,{size:15}),j(2),s(K),f(h,K)};C(se,(h)=>{if(e(a)&&!e(a).hasDevcontainer)h(R)})}var oe=$(se,2),ke=$(d(oe),2);s(oe),s(E),s(F),M(()=>{Ie.disabled=!e(z),V(Me,e(a)?.path??"…"),ke.disabled=!e(a)}),W("click",F,function(...h){t.onclose?.apply(this,h)}),W("keydown",F,(h)=>h.key==="Escape"&&t.onclose()),W("click",E,(h)=>h.stopPropagation()),W("keydown",E,()=>{}),W("click",Y,function(...h){t.onclose?.apply(this,h)}),W("keydown",ve,(h)=>{if(h.key==="Enter")h.preventDefault(),O()}),ye(ve,()=>e(A),(h)=>l(A,h)),W("keydown",he,(h)=>{if(h.key==="Enter")h.preventDefault(),O()}),ye(he,()=>e(D),(h)=>l(D,h)),W("click",Ie,O),W("keydown",y,(h)=>{let K=e(u)[0];if(h.key==="Enter"&&K)h.preventDefault(),B(K.path)}),ye(y,()=>e(g),(h)=>l(g,h)),W("click",ke,()=>e(a)&&t.onpick(e(a).path)),f(i,F),U()}_e(["click","keydown"]);var Li=m('<div class="branch svelte-jv8lut" title="Branch checked out in the container"><!><span class="svelte-jv8lut"> </span></div>');function _t(i,t){var a=Li(),r=d(a);Ye(r,{size:12});var b=$(r),g=d(b,!0);s(b),s(a),M(()=>V(g,t.branch)),f(i,a)}var Pi=new Set(["$$slots","$$events","$$legacy"]);function dt(i,t){let a=q(t,Pi),r=[["path",{d:"M17 19a1 1 0 0 1-1-1v-2a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2a1 1 0 0 1-1 1z"}],["path",{d:"M17 21v-2"}],["path",{d:"M19 14V6.5a1 1 0 0 0-7 0v11a1 1 0 0 1-7 0V10"}],["path",{d:"M21 21v-2"}],["path",{d:"M3 5V3"}],["path",{d:"M4 10a2 2 0 0 1-2-2V6a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2a2 2 0 0 1-2 2z"}],["path",{d:"M7 5V3"}]];te(i,ee({name:"cable"},()=>a,{get iconNode(){return r}}))}var Bi=m('<a target="_blank" rel="noopener"> </a>'),Ti=m('<div class="fports svelte-1uaz383" title="Forwarded ports — click to open"><!> <span class="list svelte-1uaz383"></span></div>');function Mt(i,t){X(t,!0);var a=ot(),r=ue(a);{var b=(g)=>{var p=Ti(),x=d(p);dt(x,{size:12});var w=$(x,2);de(w,21,()=>t.ports,(A)=>A.container_port,(A,D)=>{var z=Bi();let O;var u=d(z,!0);s(z),M((T,P)=>{O=le(z,1,"fport svelte-1uaz383",null,O,{open:e(D).open}),H(z,"href",T),H(z,"title",P),V(u,e(D).container_port)},[()=>Et(e(D).host_port),()=>`container :${e(D).container_port} → ${Et(e(D).host_port)} ${e(D).open?"(open)":"(not published yet)"}`]),f(A,z)}),s(w),s(p),f(g,p)};C(r,(g)=>{if(t.ports.length)g(b)})}f(i,a),U()}var yi=m('<div class="busy-overlay svelte-13338y7" aria-live="polite"><span class="busy-label svelte-13338y7"> </span></div>'),Ai=m('<input class="name-edit svelte-13338y7"/>'),Di=m('<button class="name svelte-13338y7" title="Click to rename"> </button>'),ki=m("<span></span>"),Fi=m('<div class="card-error svelte-13338y7"> </div>'),zi=m("<!> <!>",1),Vi=m('<li><!> <div class="card-head svelte-13338y7"><!> <!> <!> <!></div> <div class="path svelte-13338y7"> </div> <!> <!> <!> <div class="actions svelte-13338y7"><!> <!> <!> <!></div></li>');function Lt(i,t){X(t,!0);let a=Se(t,"editingName",15),r=Se(t,"pending",3,null),b=L(()=>t.instance.status==="running"||t.instance.status==="stopped"||t.instance.status==="error"&&!!t.instance.container_id),g={start:"Starting…",stop:"Stopping…",delete:"Deleting…",rebuild:"Rebuilding…"};var p=Vi();let x;var w=d(p);{var A=(c)=>{var n=yi(),o=d(n),_=d(o,!0);s(o),s(n),M(()=>V(_,g[r()])),f(c,n)};C(w,(c)=>{if(r())c(A)})}var D=$(w,2),z=d(D);Re(z,{get id(){return t.instance.id},get name(){return t.instance.name},interactive:!0});var O=$(z,2);{var u=(c)=>{var n=Ai();Te(n),ft(n,!0),Ae("focus",n,(o)=>o.currentTarget.select()),Ae("blur",n,function(...o){t.oncommitrename?.apply(this,o)}),W("keydown",n,(o)=>{if(o.key==="Enter")o.currentTarget.blur();else if(o.key==="Escape")t.oncancelrename()}),ye(n,a),f(c,n)},T=(c)=>{var n=Di(),o=d(n,!0);s(n),M(()=>V(o,t.instance.name)),W("click",n,function(..._){t.onstartrename?.apply(this,_)}),f(c,n)};C(O,(c)=>{if(t.editing)c(u);else c(T,-1)})}var P=$(O,2);{var I=(c)=>{var n=ki();let o;M(()=>{o=le(n,1,"attn svelte-13338y7",null,o,{"attn-done":t.instance.attention==="done","attn-waiting":t.instance.attention==="waiting"}),H(n,"title",t.instance.attention==="waiting"?"Claude is waiting for input":"Claude finished"),H(n,"aria-label",t.instance.attention==="waiting"?"Claude is waiting for input":"Claude finished")}),f(c,n)};C(P,(c)=>{if(t.instance.attention)c(I)})}var B=$(P,2);Jt(B,{get status(){return t.instance.status}}),s(D);var F=$(D,2),E=d(F,!0);s(F);var k=$(F,2);{var Y=(c)=>{Mt(c,{get ports(){return t.instance.forwarded_ports}})};C(k,(c)=>{if(t.instance.status==="running")c(Y)})}var Z=$(k,2);{var re=(c)=>{_t(c,{get branch(){return t.instance.git_branch}})};C(Z,(c)=>{if(t.instance.git_branch)c(re)})}var we=$(Z,2);{var ve=(c)=>{var n=Fi(),o=d(n,!0);s(n),M(()=>V(o,t.instance.error)),f(c,n)};C(we,(c)=>{if(t.instance.status==="error"&&t.instance.error)c(ve)})}var he=$(we,2),Ie=d(he);{var Ee=(c)=>{var n=zi(),o=ue(n);{let Q=L(()=>`/ide/${t.instance.id}`);$e(o,{variant:"primary",size:"sm",get href(){return e(Q)},children:(se,R)=>{j();var oe=ce("Open IDE");f(se,oe)},$$slots:{default:!0}})}var _=$(o,2);$e(_,{size:"sm",onclick:()=>t.onact("stop"),children:(Q,se)=>{j();var R=ce("Stop");f(Q,R)},$$slots:{default:!0}}),f(c,n)},Pe=(c)=>{$e(c,{size:"sm",onclick:()=>t.onact("start"),children:(n,o)=>{j();var _=ce("Start");f(n,_)},$$slots:{default:!0}})},Me=(c)=>{{let n=L(()=>Ve(`/instances/${t.instance.id}`));$e(c,{size:"sm",get href(){return e(n)},target:"_blank",rel:"noopener noreferrer",children:(o,_)=>{j();var Q=ce("View logs");f(o,Q)},$$slots:{default:!0}})}};C(Ie,(c)=>{if(t.instance.status==="running")c(Ee);else if(t.instance.status==="stopped"||t.instance.status==="error"&&t.instance.container_id)c(Pe,1);else if(t.instance.status==="creating")c(Me,2)})}var Ne=$(Ie,2);{var v=(c)=>{$e(c,{size:"sm",title:"Recreate the container and re-run setup (credentials, hooks, port forwards)",onclick:()=>t.onact("rebuild"),children:(n,o)=>{j();var _=ce("Rebuild");f(n,_)},$$slots:{default:!0}})};C(Ne,(c)=>{if(e(b))c(v)})}var N=$(Ne,2);{let c=L(()=>Ve(`/instances/${t.instance.id}`));$e(N,{size:"sm",ghost:!0,get href(){return e(c)},target:"_blank",rel:"noopener noreferrer",children:(n,o)=>{j();var _=ce("Details");f(n,_)},$$slots:{default:!0}})}var y=$(N,2);$e(y,{variant:"danger",size:"sm",onclick:()=>t.onact("delete"),children:(c,n)=>{j();var o=ce("Delete");f(c,o)},$$slots:{default:!0}}),s(he),s(p),M(()=>{x=le(p,1,"card panel svelte-13338y7",null,x,{busy:!!r()}),H(p,"aria-busy",!!r()||void 0),H(F,"title",t.instance.source_path),V(E,t.instance.source_path)}),f(i,p),U()}_e(["keydown","click"]);var Ri=new Set(["$$slots","$$events","$$legacy"]);function ct(i,t){let a=q(t,Ri),r=[["path",{d:"M15.536 11.293a1 1 0 0 0 0 1.414l2.376 2.377a1 1 0 0 0 1.414 0l2.377-2.377a1 1 0 0 0 0-1.414l-2.377-2.377a1 1 0 0 0-1.414 0z"}],["path",{d:"M2.297 11.293a1 1 0 0 0 0 1.414l2.377 2.377a1 1 0 0 0 1.414 0l2.377-2.377a1 1 0 0 0 0-1.414L6.088 8.916a1 1 0 0 0-1.414 0z"}],["path",{d:"M8.916 17.912a1 1 0 0 0 0 1.415l2.377 2.376a1 1 0 0 0 1.414 0l2.377-2.376a1 1 0 0 0 0-1.415l-2.377-2.376a1 1 0 0 0-1.414 0z"}],["path",{d:"M8.916 4.674a1 1 0 0 0 0 1.414l2.377 2.376a1 1 0 0 0 1.414 0l2.377-2.376a1 1 0 0 0 0-1.414l-2.377-2.377a1 1 0 0 0-1.414 0z"}]];te(i,ee({name:"component"},()=>a,{get iconNode(){return r}}))}var Wi=new Set(["$$slots","$$events","$$legacy"]);function $t(i,t){let a=q(t,Wi),r=[["path",{d:"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z"}],["path",{d:"M12 22V12"}],["polyline",{points:"3.29 7 12 12 20.71 7"}],["path",{d:"m7.5 4.27 9 5.15"}]];te(i,ee({name:"package"},()=>a,{get iconNode(){return r}}))}var Ki=m('<a class="brand svelte-94cd8h" href="/"><span class="logo svelte-94cd8h"><!></span><span class="words svelte-94cd8h"><span>Codebay</span><span class="tagline svelte-94cd8h">devcontainer manager</span></span></a>');function Pt(i,t){X(t,!0);var a=Ki(),r=d(a),b=d(r);{var g=(x)=>{Re(x,{get art(){return t.pet},get name(){return t.pet.name},scale:4})},p=(x)=>{$t(x,{size:22})};C(b,(x)=>{if(t.pet)x(g);else x(p,-1)})}s(r),j(),s(a),f(i,a),U()}var Oi=m('<button type="button" role="radio"> </button>'),Qi=m('<div class="picker svelte-12yor8r" role="radiogroup" aria-label="Filter instances"></div>');function Bt(i,t){X(t,!0);let a=[{value:"all",label:"All"},{value:"active",label:"Active"},{value:"stopped",label:"Stopped"}];var r=Qi();de(r,21,()=>a,(b)=>b.value,(b,g)=>{var p=Oi();let x;var w=d(p,!0);s(p),M(()=>{x=le(p,1,"segment svelte-12yor8r",null,x,{active:t.value===e(g).value}),H(p,"aria-checked",t.value===e(g).value),V(w,e(g).label)}),W("click",p,()=>t.onchange(e(g).value)),f(b,p)}),s(r),f(i,r),U()}_e(["click"]);var Yi=new Set(["$$slots","$$events","$$legacy"]);function He(i,t){let a=q(t,Yi),r=[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"}],["circle",{cx:"12",cy:"12",r:"3"}]];te(i,ee({name:"settings"},()=>a,{get iconNode(){return r}}))}var Zi=m('<a class="cog svelte-1e745g8" target="_blank" rel="noopener noreferrer" aria-label="Settings" title="Settings"><!></a>');function Tt(i,t){X(t,!1),Gt();var a=Zi(),r=d(a);He(r,{size:16}),s(a),M((b)=>H(a,"href",b),[()=>Ve("/settings")]),f(i,a),U()}var Hi=new Set(["$$slots","$$events","$$legacy"]);function mt(i,t){let a=q(t,Hi),r=[["path",{d:"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"}],["path",{d:"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"}]];te(i,ee({name:"link"},()=>a,{get iconNode(){return r}}))}var Ji=m('<button type="button" class="cred-row svelte-vongf9" role="menuitem"><span></span> <span class="cred-label"> </span> <span class="cred-state svelte-vongf9"> </span></button>'),Gi=m('<div class="cred-dropdown panel svelte-vongf9" role="menu"></div>'),Xi=m('<div class="cred-menu svelte-vongf9"><button aria-haspopup="menu" aria-label="Credentials" title="Credentials"><!></button> <!></div>');function yt(i,t){X(t,!0);let a=S(!1),r=L(()=>t.auth.filter((u)=>u.available).length),b=L(()=>e(r)===t.auth.length?"ok":e(r)===0?"error":"warn"),g={ok:mt,warn:Ze,error:Xe},p=L(()=>g[e(b)]);function x(u){if(u.available)Ue.success(`${u.label} credentials come from ${u.source}.`);else{let T=u.hint?` — ${u.hint}`:"";Ue.error(`No ${u.label} credentials found${T}.`)}}ne(()=>{if(!e(a))return;let u=(P)=>{if(!P.target?.closest(".cred-menu"))l(a,!1)},T=(P)=>{if(P.key==="Escape")l(a,!1)};return window.addEventListener("click",u),window.addEventListener("keydown",T),()=>{window.removeEventListener("click",u),window.removeEventListener("keydown",T)}});var w=Xi(),A=d(w),D=d(A);Xt(D,()=>e(p),(u,T)=>{T(u,{size:16})}),s(A);var z=$(A,2);{var O=(u)=>{var T=Gi();de(T,21,()=>t.auth,(P)=>P.id,(P,I)=>{var B=Ji(),F=d(B),E=$(F,2),k=d(E,!0);s(E);var Y=$(E,2),Z=d(Y,!0);s(Y),s(B),M(()=>{H(B,"title",e(I).available?`Credentials from ${e(I).source}, copied into each new instance.`:`No credentials found on this computer${e(I).hint?` — ${e(I).hint}`:""}.`),le(F,1,`dot ${e(I).available?"on":"off"}`,"svelte-vongf9"),V(k,e(I).label),V(Z,e(I).available?"Authorized":"Not found")}),W("click",B,()=>x(e(I))),f(P,B)}),s(T),f(u,T)};C(z,(u)=>{if(e(a))u(O)})}s(w),M(()=>{le(A,1,`cred ${e(b)??""}`,"svelte-vongf9"),H(A,"aria-expanded",e(a))}),W("click",A,()=>l(a,!e(a))),f(i,w),U()}_e(["click"]);var Ui=m('<header class="topbar svelte-1h259us"><!> <div class="topbar-actions svelte-1h259us"><!> <!> <!> <!> <!> <!></div></header>');function At(i,t){let a=Se(t,"canDelete",3,!1),r=Se(t,"ready",3,!0),b=Se(t,"creating",3,!1);var g=Ui(),p=d(g);Pt(p,{get pet(){return t.pet}});var x=$(p,2),w=d(x);{var A=(I)=>{$e(I,{variant:"default",size:"sm",get icon(){return ct},href:"/debug",children:(B,F)=>{j();var E=ce("Debug");f(B,E)},$$slots:{default:!0}})};C(w,(I)=>{if(Ut)I(A)})}var D=$(w,2);{var z=(I)=>{Bt(I,{get value(){return t.filter},get onchange(){return t.onFilter}})};C(D,(I)=>{if(t.filter&&t.onFilter)I(z)})}var O=$(D,2);Tt(O,{});var u=$(O,2);yt(u,{get auth(){return t.auth}});var T=$(u,2);{let I=L(()=>!a());$e(T,{variant:"danger",size:"sm",get onclick(){return t.onDeleteAll},get disabled(){return e(I)},children:(B,F)=>{j();var E=ce("Delete all");f(B,E)},$$slots:{default:!0}})}var P=$(T,2);{let I=L(()=>b()?void 0:gt),B=L(()=>!r()||b());$e(P,{variant:"primary",get icon(){return e(I)},get onclick(){return t.onNew},get disabled(){return e(B)},children:(F,E)=>{j();var k=ce();M(()=>V(k,b()?"Creating…":"New instance")),f(F,k)},$$slots:{default:!0}})}s(x),s(g),f(i,g)}var ji=m("<span>Docker daemon is not reachable.</span>"),qi=m("<span>The devcontainer CLI is not available.</span>"),ea=m('<div class="banner error svelte-146pixd"><strong>Setup needed.</strong> <!> <!></div>'),ta=m('<div class="banner error svelte-146pixd"><strong>Error.</strong> <span> </span></div>'),ia=m('<div class="empty svelte-146pixd"><p class="empty-sub svelte-146pixd">Loading…</p></div>'),aa=m('<div class="empty svelte-146pixd"><p class="empty-title svelte-146pixd">No instances yet</p> <p class="empty-sub svelte-146pixd">Pick a project folder to spin up an isolated devcontainer.</p> <!></div>'),ra=m('<div class="empty svelte-146pixd"><p class="empty-sub svelte-146pixd"> </p></div>'),na=m('<ul class="grid svelte-146pixd"></ul>'),la=m('<!> <main class="stage svelte-146pixd"><!> <!> <!></main> <!>',1);function Dt(i,t){X(t,!0);let a=S(!1),r=S("all"),b=S(!1),g=S(null),p=S(null),x=S(""),w=S(xe({})),A=L(()=>t.preflight.docker&&t.preflight.cli),D=L(()=>t.instances.filter((v)=>{if(e(r)==="active")return v.status==="running"||v.status==="creating";if(e(r)==="stopped")return v.status==="stopped"||v.status==="error";return!0}));ne(()=>{for(let[v,{since:N}]of Object.entries(e(w))){let y=t.instances.find((c)=>c.id===v);if(!y||y.status!==N)z(v)}});function z(v){let{[v]:N,...y}=e(w);l(w,y,!0)}async function O(v,N){l(a,!1),l(b,!0),l(g,null);try{await De("/api/instances",{sourcePath:v,branch:N?.branch},"Failed to create instance")}catch(y){l(g,y.message,!0)}finally{l(b,!1)}}async function u(v,N){if(l(g,null),N==="delete"&&!confirm("Delete this instance and its copied files?"))return;if(N==="rebuild"&&!confirm("Recreate this container and re-run setup? The workspace is kept."))return;let y=t.instances.find((c)=>c.id===v)?.status;if(y)l(w,{...e(w),[v]:{action:N,since:y}},!0);try{await De(`/api/instances/${v}/${N}`,void 0,`Failed to ${N}`)}catch(c){l(g,c.message,!0),z(v)}}function T(v){l(p,v.id,!0),l(x,v.name,!0)}function P(){l(p,null),l(x,"")}async function I(v){let N=e(x).trim(),y=t.instances.find((c)=>c.id===v)?.name;if(!N||N===y){P();return}P(),l(g,null);try{await De(`/api/instances/${v}/rename`,{name:N},"Failed to rename")}catch(c){l(g,c.message,!0)}}async function B(){if(l(g,null),!confirm(`Delete all ${t.instances.length} instances and their copied files?`))return;try{await De("/api/instances/delete-all",void 0,"Failed to delete all")}catch(v){l(g,v.message,!0)}}var F=la(),E=ue(F);{let v=L(()=>t.instances.length>0);At(E,{get auth(){return t.preflight.auth},get pet(){return t.pet},get canDelete(){return e(v)},get ready(){return e(A)},get creating(){return e(b)},get filter(){return e(r)},onFilter:(N)=>l(r,N,!0),onNew:()=>l(a,!0),onDeleteAll:B})}var k=$(E,2),Y=d(k);{var Z=(v)=>{var N=ea(),y=$(d(N),2);{var c=(_)=>{var Q=ji();f(_,Q)};C(y,(_)=>{if(!t.preflight.docker)_(c)})}var n=$(y,2);{var o=(_)=>{var Q=qi();f(_,Q)};C(n,(_)=>{if(!t.preflight.cli)_(o)})}s(N),f(v,N)};C(Y,(v)=>{if(!e(A))v(Z)})}var re=$(Y,2);{var we=(v)=>{var N=ta(),y=$(d(N),2),c=d(y,!0);s(y),s(N),M(()=>V(c,e(g))),f(v,N)};C(re,(v)=>{if(e(g))v(we)})}var ve=$(re,2);{var he=(v)=>{var N=ia();f(v,N)},Ie=(v)=>{var N=aa(),y=$(d(N),4);{let c=L(()=>!e(A));$e(y,{variant:"primary",get icon(){return gt},onclick:()=>l(a,!0),get disabled(){return e(c)},children:(n,o)=>{j();var _=ce("New instance");f(n,_)},$$slots:{default:!0}})}s(N),f(v,N)},Ee=(v)=>{var N=ra(),y=d(N),c=d(y);s(y),s(N),M(()=>V(c,`No ${e(r)??""} instances.`)),f(v,N)},Pe=(v)=>{var N=na();de(N,21,()=>e(D),(y)=>y.id,(y,c)=>{{let n=L(()=>e(p)===e(c).id),o=L(()=>e(w)[e(c).id]?.action??null);Lt(y,{get instance(){return e(c)},get editing(){return e(n)},get pending(){return e(o)},onact:(_)=>u(e(c).id,_),onstartrename:()=>T(e(c)),oncommitrename:()=>I(e(c).id),oncancelrename:P,get editingName(){return e(x)},set editingName(_){l(x,_,!0)}})}}),s(N),f(v,N)};C(ve,(v)=>{if(!t.loaded)v(he);else if(t.instances.length===0)v(Ie,1);else if(e(D).length===0)v(Ee,2);else v(Pe,-1)})}s(k);var Me=$(k,2);{var Ne=(v)=>{Ct(v,{onpick:O,onclose:()=>l(a,!1)})};C(Me,(v)=>{if(e(a))v(Ne)})}f(i,F),U()}var sa=m('<div class="tab-label editing svelte-r39acv"><!> <input class="tab-name-edit svelte-r39acv"/></div>'),da=m('<button type="button" class="tab-label svelte-r39acv"><!> <span class="tab-name svelte-r39acv"> </span></button>'),oa=m("<div><!></div>"),fa=m('<nav class="tabs svelte-r39acv"></nav>'),ca=m('<!> <a class="cog svelte-r39acv" target="_blank" rel="noopener noreferrer" title="Settings" aria-label="Settings"><!></a>',1);function kt(i,t){X(t,!0);let a=Se(t,"editingName",15);jt(i,{children:(r,b)=>{var g=ca(),p=ue(g);{var x=(D)=>{var z=fa();de(z,21,()=>t.running,(O)=>O.id,(O,u)=>{var T=oa();let P;var I=d(T);{var B=(E)=>{var k=sa(),Y=d(k);Re(Y,{get id(){return e(u).id},get name(){return e(u).name},scale:4});var Z=$(Y,2);Te(Z),ft(Z,!0),s(k),Ae("focus",Z,(re)=>re.currentTarget.select()),Ae("blur",Z,()=>t.oncommitrename(e(u).id)),W("keydown",Z,(re)=>{if(re.key==="Enter")re.currentTarget.blur();else if(re.key==="Escape")t.oncancelrename()}),ye(Z,a),f(E,k)},F=(E)=>{var k=da(),Y=d(k);Re(Y,{get id(){return e(u).id},get name(){return e(u).name},scale:4});var Z=$(Y,2),re=d(Z,!0);s(Z),s(k),M(()=>{H(k,"title",e(u).name),V(re,e(u).name)}),W("click",k,()=>t.onselect(e(u).id)),W("dblclick",k,()=>t.onstartrename(e(u))),f(E,k)};C(I,(E)=>{if(t.editingId===e(u).id)E(B);else E(F,-1)})}s(T),M(()=>P=le(T,1,"tab svelte-r39acv",null,P,{active:e(u).id===t.active,"attn-done":e(u).id!==t.active&&t.attention[e(u).id]==="done","attn-waiting":e(u).id!==t.active&&t.attention[e(u).id]==="waiting"})),f(O,T)}),s(z),f(D,z)};C(p,(D)=>{if(t.running.length>0)D(x)})}var w=$(p,2),A=d(w);He(A,{size:18}),s(w),M((D)=>H(w,"href",D),[()=>Ve("/settings")]),f(r,g)},$$slots:{default:!0}}),U()}_e(["keydown","click","dblclick"]);var $a=m('<div class="row svelte-w5e143"> </div>'),ma=m('<div class="stalled svelte-w5e143"><p class="svelte-w5e143">Waiting for code-server to answer inside the container.</p> <!></div>'),ga=m('<div class="loader svelte-w5e143"><div class="grid svelte-w5e143" aria-hidden="true"></div> <div class="label svelte-w5e143">Loading editor<span class="dot svelte-w5e143">.</span><span class="dot svelte-w5e143">.</span><span class="dot svelte-w5e143">.</span></div> <!></div>');function vt(i,t){X(t,!0);let a=Se(t,"speed",3,1),r=S(!1);ne(()=>{if(t.stalledAfterMs===void 0)return;let P=setTimeout(()=>l(r,!0),t.stalledAfterMs);return()=>clearTimeout(P)});let b=3,g=22,p=140,x=7,w=L(()=>Math.max(20,p/a())),D=S(xe((()=>Array.from({length:b},()=>Array.from({length:g},()=>Math.random()<0.5?0:1)))()));ne(()=>{if(window.matchMedia?.("(prefers-reduced-motion: reduce)").matches)return;let P=setInterval(()=>{let I=e(D).map((B)=>B.slice());for(let B=0;B<x;B++){let F=I[Math.floor(Math.random()*b)],E=Math.floor(Math.random()*g);F[E]=F[E]?0:1}l(D,I,!0)},e(w));return()=>clearInterval(P)});var z=ga(),O=d(z);de(O,21,()=>e(D),qt,(P,I)=>{var B=$a(),F=d(B,!0);s(B),M((E)=>V(F,E),[()=>e(I).join("")]),f(P,B)}),s(O);var u=$(O,4);{var T=(P)=>{var I=ma(),B=$(d(I),2);{var F=(E)=>{$e(E,{size:"sm",get onclick(){return t.onoverride},children:(k,Y)=>{j();var Z=ce("Open anyway");f(k,Z)},$$slots:{default:!0}})};C(B,(E)=>{if(t.onoverride)E(F)})}s(I),f(P,I)};C(u,(P)=>{if(e(r))P(T)})}s(z),f(i,z),U()}var va=m('<iframe class="svelte-1duc7gd"></iframe>'),pa=m("<div><!> <!></div>"),ua=m('<div class="empty svelte-1duc7gd">No running instances.</div>'),ha=m("<div><!> <div><!> <!></div></div> <!>",1);function Ft(i,t){X(t,!0);let a=S(xe(t.snapshot)),r=S(xe(t.preflight)),b=S(xe(t.pet)),g=S(t.snapshot.length>0),p=L(()=>e(a).filter((n)=>n.status==="running")),x=S(xe(Object.fromEntries(t.snapshot.map((n)=>[n.id,n.attention])))),w=S(null),A=S("");function D(n){l(w,n.id,!0),l(A,n.name,!0)}function z(){l(w,null),l(A,"")}async function O(n){let o=e(A).trim(),_=e(a).find((Q)=>Q.id===n)?.name;if(!o||o===_){z();return}z();try{await De(`/api/instances/${n}/rename`,{name:o},"Failed to rename")}catch(Q){Ue.error(Q.message)}}let u=S(xe(t.initialPath)),T=L(()=>e(u).startsWith("/ide")),P=L(()=>e(u).startsWith("/ide/")?e(u).slice(5):""),I=L(()=>e(T)?e(p).some((n)=>n.id===e(P))?e(P):e(p)[0]?.id??"":"");function B(n){if(n===e(u))return;history.pushState({},"",n),l(u,n,!0)}ne(()=>{function n(o){if(o.defaultPrevented||o.button!==0||o.metaKey||o.ctrlKey||o.shiftKey||o.altKey)return;let _=o.target?.closest?.("a");if(!_)return;let Q=_.getAttribute("href");if(!Q||_.target==="_blank"||_.hasAttribute("download"))return;let se=new URL(Q,location.href);if(se.origin!==location.origin)return;if(se.pathname==="/"||se.pathname.startsWith("/ide/"))o.preventDefault(),B(se.pathname)}return document.addEventListener("click",n),()=>document.removeEventListener("click",n)}),ne(()=>{function n(){l(u,location.pathname,!0)}return window.addEventListener("popstate",n),()=>window.removeEventListener("popstate",n)}),ne(()=>{if(e(p).length===0)return;function n(o){o.preventDefault(),o.returnValue=""}return window.addEventListener("beforeunload",n),()=>window.removeEventListener("beforeunload",n)});let F=new Le;ne(()=>{if(e(I))F.add(e(I))});let E=new Le,k=new Le,Y=new Le,Z=(n)=>k.has(n)||Y.has(n),re=1e4;ne(()=>{let n=e(p).find((o)=>o.id===e(I));document.title=e(T)&&n?`${n.name} — Codebay`:"Codebay"}),ne(()=>{return window.addEventListener("pointerdown",je),window.addEventListener("keydown",je),()=>{window.removeEventListener("pointerdown",je),window.removeEventListener("keydown",je)}}),ne(()=>{let n=!1;return ni((o)=>{if(o.type==="preflight"){l(r,{...e(r),docker:o.data.docker,cli:o.data.cli},!0);return}if(o.type==="pet"){l(b,ii(o.data.name??void 0),!0);return}if(o.type==="health"){let R=e(a).find((oe)=>oe.id===o.data.id);if(o.data.health.codeServerAccessible&&R?.status==="running")k.add(o.data.id);return}if(o.type!=="instances")return;let _=o.data,Q=new Set(_.filter((R)=>R.status==="running").map((R)=>R.id));for(let R of[...k])if(!Q.has(R))k.delete(R);for(let R of[...Y])if(!Q.has(R))Y.delete(R);for(let R of[...E])if(!Q.has(R))E.delete(R);let se={};for(let R of _)se[R.id]=R.attention;if(n)for(let R in se){let oe=se[R];if(oe&&oe!==e(x)[R])if(R===e(I))console.log(`[chime] attention id=${R} state=${oe} — skipped (tab is active/focused)`);else console.log(`[chime] attention id=${R} state=${oe} → playChime`),ri(oe)}else console.log("[chime] first frame after (re)connect — baselining, no chimes");n=!0,l(a,_,!0),l(x,se,!0),l(g,!0)},()=>{n=!1})}),ne(()=>{if(!e(I)||!e(x)[e(I)])return;let n=()=>{if(document.visibilityState==="visible")De(`/api/instances/${e(I)}/attention/clear`).catch(()=>{})};return n(),document.addEventListener("visibilitychange",n),()=>document.removeEventListener("visibilitychange",n)});var we=ha(),ve=ue(we);let he;var Ie=d(ve);{var Ee=(n)=>{kt(n,{get running(){return e(p)},get active(){return e(I)},get attention(){return e(x)},get editingId(){return e(w)},onselect:(o)=>B(`/ide/${o}`),onstartrename:D,oncommitrename:O,oncancelrename:z,get editingName(){return e(A)},set editingName(o){l(A,o,!0)}})},Pe=(n)=>{Dt(n,{get preflight(){return e(r)},get instances(){return e(a)},get loaded(){return e(g)},get pet(){return e(b)}})};C(Ie,(n)=>{if(e(T))n(Ee);else n(Pe,-1)})}var Me=$(Ie,2);let Ne;var v=d(Me);de(v,17,()=>e(p),(n)=>n.id,(n,o)=>{var _=ot(),Q=ue(_);{var se=(oe)=>{var ke=pa();let h;var K=d(ke);{var pe=(J)=>{var ge=va();M((Be)=>{H(ge,"src",Be),H(ge,"title",e(o).name)},[()=>ti(e(o))]),Ae("load",ge,()=>E.add(e(o).id)),ei(ge),f(J,ge)},Je=L(()=>Z(e(o).id));C(K,(J)=>{if(e(Je))J(pe)})}var We=$(K,2);{var be=(J)=>{vt(J,{stalledAfterMs:re,onoverride:()=>Y.add(e(o).id)})},me=L(()=>!Z(e(o).id)),ie=(J)=>{vt(J,{})},ae=L(()=>!E.has(e(o).id));C(We,(J)=>{if(e(me))J(be);else if(e(ae))J(ie,1)})}s(ke),M(()=>h=le(ke,1,"pane svelte-1duc7gd",null,h,{active:e(o).id===e(I)})),f(oe,ke)},R=L(()=>F.has(e(o).id));C(Q,(oe)=>{if(e(R))oe(se)})}f(n,_)});var N=$(v,2);{var y=(n)=>{var o=ua();f(n,o)};C(N,(n)=>{if(e(T)&&e(p).length===0)n(y)})}s(Me),s(ve);var c=$(ve,2);ai(c,{toastOptions:{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;"}}),M(()=>{he=le(ve,1,"app svelte-1duc7gd",null,he,{ide:e(T)}),Ne=le(Me,1,"panes svelte-1duc7gd",null,Ne,{hidden:!e(T)})}),f(i,we),U()}li("AppShell_2rtnxn6pgp2rh",Ft);
|
|
@@ -31,16 +31,16 @@ import"./chunk-we0ggtws.js";
|
|
|
31
31
|
|
|
32
32
|
// src/pages/App.svelte
|
|
33
33
|
import"svelte/internal/flags/async";
|
|
34
|
-
import * as $
|
|
34
|
+
import * as $24 from "svelte/internal/server";
|
|
35
35
|
|
|
36
36
|
// src/components/AppShell.svelte
|
|
37
37
|
import"svelte/internal/flags/async";
|
|
38
|
-
import * as $
|
|
38
|
+
import * as $23 from "svelte/internal/server";
|
|
39
39
|
import { SvelteSet } from "svelte/reactivity";
|
|
40
40
|
|
|
41
41
|
// src/components/DashboardView.svelte
|
|
42
42
|
import"svelte/internal/flags/async";
|
|
43
|
-
import * as $
|
|
43
|
+
import * as $20 from "svelte/internal/server";
|
|
44
44
|
|
|
45
45
|
// src/components/FolderBrowser.svelte
|
|
46
46
|
import"svelte/internal/flags/async";
|
|
@@ -532,7 +532,7 @@ function InstanceCard($$renderer, $$props) {
|
|
|
532
532
|
|
|
533
533
|
// src/components/TopBar.svelte
|
|
534
534
|
import"svelte/internal/flags/async";
|
|
535
|
-
import * as $
|
|
535
|
+
import * as $19 from "svelte/internal/server";
|
|
536
536
|
|
|
537
537
|
// node_modules/@lucide/svelte/dist/icons/component.svelte
|
|
538
538
|
import"svelte/internal/flags/async";
|
|
@@ -605,13 +605,34 @@ function Brand($$renderer, $$props) {
|
|
|
605
605
|
});
|
|
606
606
|
}
|
|
607
607
|
|
|
608
|
+
// src/components/InstanceFilter.svelte
|
|
609
|
+
import"svelte/internal/flags/async";
|
|
610
|
+
import * as $14 from "svelte/internal/server";
|
|
611
|
+
function InstanceFilter($$renderer, $$props) {
|
|
612
|
+
$$renderer.component(($$renderer2) => {
|
|
613
|
+
let { value, onchange } = $$props;
|
|
614
|
+
const options = [
|
|
615
|
+
{ value: "all", label: "All" },
|
|
616
|
+
{ value: "active", label: "Active" },
|
|
617
|
+
{ value: "stopped", label: "Stopped" }
|
|
618
|
+
];
|
|
619
|
+
$$renderer2.push(`<div class="picker svelte-12yor8r" role="radiogroup" aria-label="Filter instances"><!--[-->`);
|
|
620
|
+
const each_array = $14.ensure_array_like(options);
|
|
621
|
+
for (let $$index = 0, $$length = each_array.length;$$index < $$length; $$index++) {
|
|
622
|
+
let opt = each_array[$$index];
|
|
623
|
+
$$renderer2.push(`<button type="button"${$14.attr_class("segment svelte-12yor8r", undefined, { active: value === opt.value })} role="radio"${$14.attr("aria-checked", value === opt.value)}>${$14.escape(opt.label)}</button>`);
|
|
624
|
+
}
|
|
625
|
+
$$renderer2.push(`<!--]--></div>`);
|
|
626
|
+
});
|
|
627
|
+
}
|
|
628
|
+
|
|
608
629
|
// src/components/SettingsCog.svelte
|
|
609
630
|
import"svelte/internal/flags/async";
|
|
610
|
-
import * as $
|
|
631
|
+
import * as $16 from "svelte/internal/server";
|
|
611
632
|
|
|
612
633
|
// node_modules/@lucide/svelte/dist/icons/settings.svelte
|
|
613
634
|
import"svelte/internal/flags/async";
|
|
614
|
-
import * as $
|
|
635
|
+
import * as $15 from "svelte/internal/server";
|
|
615
636
|
function Settings($$renderer, $$props) {
|
|
616
637
|
let { $$slots, $$events, ...props } = $$props;
|
|
617
638
|
const iconNode = [
|
|
@@ -623,12 +644,12 @@ function Settings($$renderer, $$props) {
|
|
|
623
644
|
],
|
|
624
645
|
["circle", { cx: "12", cy: "12", r: "3" }]
|
|
625
646
|
];
|
|
626
|
-
Icon($$renderer, $
|
|
647
|
+
Icon($$renderer, $15.spread_props([{ name: "settings" }, props, { iconNode }]));
|
|
627
648
|
}
|
|
628
649
|
// src/components/SettingsCog.svelte
|
|
629
650
|
function SettingsCog($$renderer, $$props) {
|
|
630
651
|
$$renderer.component(($$renderer2) => {
|
|
631
|
-
$$renderer2.push(`<a class="cog svelte-1e745g8"${$
|
|
652
|
+
$$renderer2.push(`<a class="cog svelte-1e745g8"${$16.attr("href", withPopupMarker("/settings"))} target="_blank" rel="noopener noreferrer" aria-label="Settings" title="Settings">`);
|
|
632
653
|
Settings($$renderer2, { size: 16 });
|
|
633
654
|
$$renderer2.push(`<!----></a>`);
|
|
634
655
|
});
|
|
@@ -636,11 +657,11 @@ function SettingsCog($$renderer, $$props) {
|
|
|
636
657
|
|
|
637
658
|
// src/components/CredMenu.svelte
|
|
638
659
|
import"svelte/internal/flags/async";
|
|
639
|
-
import * as $
|
|
660
|
+
import * as $18 from "svelte/internal/server";
|
|
640
661
|
|
|
641
662
|
// node_modules/@lucide/svelte/dist/icons/link.svelte
|
|
642
663
|
import"svelte/internal/flags/async";
|
|
643
|
-
import * as $
|
|
664
|
+
import * as $17 from "svelte/internal/server";
|
|
644
665
|
function Link($$renderer, $$props) {
|
|
645
666
|
let { $$slots, $$events, ...props } = $$props;
|
|
646
667
|
const iconNode = [
|
|
@@ -657,17 +678,17 @@ function Link($$renderer, $$props) {
|
|
|
657
678
|
}
|
|
658
679
|
]
|
|
659
680
|
];
|
|
660
|
-
Icon($$renderer, $
|
|
681
|
+
Icon($$renderer, $17.spread_props([{ name: "link" }, props, { iconNode }]));
|
|
661
682
|
}
|
|
662
683
|
// src/components/CredMenu.svelte
|
|
663
684
|
function CredMenu($$renderer, $$props) {
|
|
664
685
|
$$renderer.component(($$renderer2) => {
|
|
665
686
|
let { auth } = $$props;
|
|
666
687
|
let credOpen = false;
|
|
667
|
-
const authedCount = $
|
|
668
|
-
const credState = $
|
|
688
|
+
const authedCount = $18.derived(() => auth.filter((a) => a.available).length);
|
|
689
|
+
const credState = $18.derived(() => authedCount() === auth.length ? "ok" : authedCount() === 0 ? "error" : "warn");
|
|
669
690
|
const credIcon = { ok: Link, warn: Triangle_alert, error: X };
|
|
670
|
-
const CredIcon = $
|
|
691
|
+
const CredIcon = $18.derived(() => credIcon[credState()]);
|
|
671
692
|
function explainProvider(provider) {
|
|
672
693
|
if (provider.available) {
|
|
673
694
|
dist_default.success(`${provider.label} credentials come from ${provider.source}.`);
|
|
@@ -676,7 +697,7 @@ function CredMenu($$renderer, $$props) {
|
|
|
676
697
|
dist_default.error(`No ${provider.label} credentials found${hint}.`);
|
|
677
698
|
}
|
|
678
699
|
}
|
|
679
|
-
$$renderer2.push(`<div class="cred-menu svelte-vongf9"><button${$
|
|
700
|
+
$$renderer2.push(`<div class="cred-menu svelte-vongf9"><button${$18.attr_class(`cred ${credState()}`, "svelte-vongf9")}${$18.attr("aria-expanded", credOpen)} aria-haspopup="menu" aria-label="Credentials" title="Credentials">`);
|
|
680
701
|
if (CredIcon()) {
|
|
681
702
|
$$renderer2.push("<!--[-->");
|
|
682
703
|
CredIcon()($$renderer2, { size: 16 });
|
|
@@ -689,10 +710,10 @@ function CredMenu($$renderer, $$props) {
|
|
|
689
710
|
if (credOpen) {
|
|
690
711
|
$$renderer2.push("<!--[0-->");
|
|
691
712
|
$$renderer2.push(`<div class="cred-dropdown panel svelte-vongf9" role="menu"><!--[-->`);
|
|
692
|
-
const each_array = $
|
|
713
|
+
const each_array = $18.ensure_array_like(auth);
|
|
693
714
|
for (let $$index = 0, $$length = each_array.length;$$index < $$length; $$index++) {
|
|
694
715
|
let provider = each_array[$$index];
|
|
695
|
-
$$renderer2.push(`<button type="button" class="cred-row svelte-vongf9" role="menuitem"${$
|
|
716
|
+
$$renderer2.push(`<button type="button" class="cred-row svelte-vongf9" role="menuitem"${$18.attr("title", provider.available ? `Credentials from ${provider.source}, copied into each new instance.` : `No credentials found on this computer${provider.hint ? ` \u2014 ${provider.hint}` : ""}.`)}><span${$18.attr_class(`dot ${provider.available ? "on" : "off"}`, "svelte-vongf9")}></span> <span class="cred-label">${$18.escape(provider.label)}</span> <span class="cred-state svelte-vongf9">${$18.escape(provider.available ? "Authorized" : "Not found")}</span></button>`);
|
|
696
717
|
}
|
|
697
718
|
$$renderer2.push(`<!--]--></div>`);
|
|
698
719
|
} else {
|
|
@@ -710,6 +731,8 @@ function TopBar($$renderer, $$props) {
|
|
|
710
731
|
canDelete = false,
|
|
711
732
|
ready = true,
|
|
712
733
|
creating = false,
|
|
734
|
+
filter,
|
|
735
|
+
onFilter,
|
|
713
736
|
onNew,
|
|
714
737
|
onDeleteAll
|
|
715
738
|
} = $$props;
|
|
@@ -732,6 +755,13 @@ function TopBar($$renderer, $$props) {
|
|
|
732
755
|
$$renderer.push("<!--[-1-->");
|
|
733
756
|
}
|
|
734
757
|
$$renderer.push(`<!--]--> `);
|
|
758
|
+
if (filter && onFilter) {
|
|
759
|
+
$$renderer.push("<!--[0-->");
|
|
760
|
+
InstanceFilter($$renderer, { value: filter, onchange: onFilter });
|
|
761
|
+
} else {
|
|
762
|
+
$$renderer.push("<!--[-1-->");
|
|
763
|
+
}
|
|
764
|
+
$$renderer.push(`<!--]--> `);
|
|
735
765
|
SettingsCog($$renderer, {});
|
|
736
766
|
$$renderer.push(`<!----> `);
|
|
737
767
|
CredMenu($$renderer, { auth });
|
|
@@ -753,7 +783,7 @@ function TopBar($$renderer, $$props) {
|
|
|
753
783
|
onclick: onNew,
|
|
754
784
|
disabled: !ready || creating,
|
|
755
785
|
children: ($$renderer2) => {
|
|
756
|
-
$$renderer2.push(`<!---->${$
|
|
786
|
+
$$renderer2.push(`<!---->${$19.escape(creating ? "Creating\u2026" : "New instance")}`);
|
|
757
787
|
},
|
|
758
788
|
$$slots: { default: true }
|
|
759
789
|
});
|
|
@@ -765,12 +795,20 @@ function DashboardView($$renderer, $$props) {
|
|
|
765
795
|
$$renderer.component(($$renderer2) => {
|
|
766
796
|
let { preflight, instances, loaded, pet } = $$props;
|
|
767
797
|
let browserOpen = false;
|
|
798
|
+
let filter = "all";
|
|
768
799
|
let creating = false;
|
|
769
800
|
let actionError = null;
|
|
770
801
|
let editingId = null;
|
|
771
802
|
let editingName = "";
|
|
772
803
|
let pending = {};
|
|
773
|
-
const ready = $
|
|
804
|
+
const ready = $20.derived(() => preflight.docker && preflight.cli);
|
|
805
|
+
const visible = $20.derived(() => instances.filter((i) => {
|
|
806
|
+
if (filter === "active")
|
|
807
|
+
return i.status === "running" || i.status === "creating";
|
|
808
|
+
if (filter === "stopped")
|
|
809
|
+
return i.status === "stopped" || i.status === "error";
|
|
810
|
+
return true;
|
|
811
|
+
}));
|
|
774
812
|
function clearPending(id) {
|
|
775
813
|
const { [id]: _, ...rest } = pending;
|
|
776
814
|
pending = rest;
|
|
@@ -845,6 +883,8 @@ function DashboardView($$renderer, $$props) {
|
|
|
845
883
|
canDelete: instances.length > 0,
|
|
846
884
|
ready: ready(),
|
|
847
885
|
creating,
|
|
886
|
+
filter,
|
|
887
|
+
onFilter: (v) => filter = v,
|
|
848
888
|
onNew: () => browserOpen = true,
|
|
849
889
|
onDeleteAll: deleteAll
|
|
850
890
|
});
|
|
@@ -872,7 +912,7 @@ function DashboardView($$renderer, $$props) {
|
|
|
872
912
|
$$renderer3.push(`<!--]--> `);
|
|
873
913
|
if (actionError) {
|
|
874
914
|
$$renderer3.push("<!--[0-->");
|
|
875
|
-
$$renderer3.push(`<div class="banner error svelte-146pixd"><strong>Error.</strong> <span>${$
|
|
915
|
+
$$renderer3.push(`<div class="banner error svelte-146pixd"><strong>Error.</strong> <span>${$20.escape(actionError)}</span></div>`);
|
|
876
916
|
} else {
|
|
877
917
|
$$renderer3.push("<!--[-1-->");
|
|
878
918
|
}
|
|
@@ -894,10 +934,13 @@ function DashboardView($$renderer, $$props) {
|
|
|
894
934
|
$$slots: { default: true }
|
|
895
935
|
});
|
|
896
936
|
$$renderer3.push(`<!----></div>`);
|
|
937
|
+
} else if (visible().length === 0) {
|
|
938
|
+
$$renderer3.push("<!--[2-->");
|
|
939
|
+
$$renderer3.push(`<div class="empty svelte-146pixd"><p class="empty-sub svelte-146pixd">No ${$20.escape(filter)} instances.</p></div>`);
|
|
897
940
|
} else {
|
|
898
941
|
$$renderer3.push("<!--[-1-->");
|
|
899
942
|
$$renderer3.push(`<ul class="grid svelte-146pixd"><!--[-->`);
|
|
900
|
-
const each_array = $
|
|
943
|
+
const each_array = $20.ensure_array_like(visible());
|
|
901
944
|
for (let $$index = 0, $$length = each_array.length;$$index < $$length; $$index++) {
|
|
902
945
|
let instance = each_array[$$index];
|
|
903
946
|
InstanceCard($$renderer3, {
|
|
@@ -939,7 +982,7 @@ function DashboardView($$renderer, $$props) {
|
|
|
939
982
|
|
|
940
983
|
// src/components/IdeBar.svelte
|
|
941
984
|
import"svelte/internal/flags/async";
|
|
942
|
-
import * as $
|
|
985
|
+
import * as $21 from "svelte/internal/server";
|
|
943
986
|
function IdeBar($$renderer, $$props) {
|
|
944
987
|
$$renderer.component(($$renderer2) => {
|
|
945
988
|
let {
|
|
@@ -958,10 +1001,10 @@ function IdeBar($$renderer, $$props) {
|
|
|
958
1001
|
if (running.length > 0) {
|
|
959
1002
|
$$renderer3.push("<!--[0-->");
|
|
960
1003
|
$$renderer3.push(`<nav class="tabs svelte-r39acv"><!--[-->`);
|
|
961
|
-
const each_array = $
|
|
1004
|
+
const each_array = $21.ensure_array_like(running);
|
|
962
1005
|
for (let $$index = 0, $$length = each_array.length;$$index < $$length; $$index++) {
|
|
963
1006
|
let inst = each_array[$$index];
|
|
964
|
-
$$renderer3.push(`<div${$
|
|
1007
|
+
$$renderer3.push(`<div${$21.attr_class("tab svelte-r39acv", undefined, {
|
|
965
1008
|
active: inst.id === active,
|
|
966
1009
|
"attn-done": inst.id !== active && attention[inst.id] === "done",
|
|
967
1010
|
"attn-waiting": inst.id !== active && attention[inst.id] === "waiting"
|
|
@@ -970,12 +1013,12 @@ function IdeBar($$renderer, $$props) {
|
|
|
970
1013
|
$$renderer3.push("<!--[0-->");
|
|
971
1014
|
$$renderer3.push(`<div class="tab-label editing svelte-r39acv">`);
|
|
972
1015
|
Avatar($$renderer3, { id: inst.id, name: inst.name, scale: 4 });
|
|
973
|
-
$$renderer3.push(`<!----> <input class="tab-name-edit svelte-r39acv"${$
|
|
1016
|
+
$$renderer3.push(`<!----> <input class="tab-name-edit svelte-r39acv"${$21.attr("value", editingName)} autofocus=""/></div>`);
|
|
974
1017
|
} else {
|
|
975
1018
|
$$renderer3.push("<!--[-1-->");
|
|
976
|
-
$$renderer3.push(`<button type="button" class="tab-label svelte-r39acv"${$
|
|
1019
|
+
$$renderer3.push(`<button type="button" class="tab-label svelte-r39acv"${$21.attr("title", inst.name)}>`);
|
|
977
1020
|
Avatar($$renderer3, { id: inst.id, name: inst.name, scale: 4 });
|
|
978
|
-
$$renderer3.push(`<!----> <span class="tab-name svelte-r39acv">${$
|
|
1021
|
+
$$renderer3.push(`<!----> <span class="tab-name svelte-r39acv">${$21.escape(inst.name)}</span></button>`);
|
|
979
1022
|
}
|
|
980
1023
|
$$renderer3.push(`<!--]--></div>`);
|
|
981
1024
|
}
|
|
@@ -983,19 +1026,19 @@ function IdeBar($$renderer, $$props) {
|
|
|
983
1026
|
} else {
|
|
984
1027
|
$$renderer3.push("<!--[-1-->");
|
|
985
1028
|
}
|
|
986
|
-
$$renderer3.push(`<!--]--> <a class="cog svelte-r39acv"${$
|
|
1029
|
+
$$renderer3.push(`<!--]--> <a class="cog svelte-r39acv"${$21.attr("href", withPopupMarker("/settings"))} target="_blank" rel="noopener noreferrer" title="Settings" aria-label="Settings">`);
|
|
987
1030
|
Settings($$renderer3, { size: 18 });
|
|
988
1031
|
$$renderer3.push(`<!----></a>`);
|
|
989
1032
|
},
|
|
990
1033
|
$$slots: { default: true }
|
|
991
1034
|
});
|
|
992
|
-
$
|
|
1035
|
+
$21.bind_props($$props, { editingName });
|
|
993
1036
|
});
|
|
994
1037
|
}
|
|
995
1038
|
|
|
996
1039
|
// src/components/IdeLoader.svelte
|
|
997
1040
|
import"svelte/internal/flags/async";
|
|
998
|
-
import * as $
|
|
1041
|
+
import * as $22 from "svelte/internal/server";
|
|
999
1042
|
function IdeLoader($$renderer, $$props) {
|
|
1000
1043
|
$$renderer.component(($$renderer2) => {
|
|
1001
1044
|
let { speed = 1, stalledAfterMs, onoverride } = $$props;
|
|
@@ -1004,14 +1047,14 @@ function IdeLoader($$renderer, $$props) {
|
|
|
1004
1047
|
const COLS = 22;
|
|
1005
1048
|
const BASE_TICK_MS = 140;
|
|
1006
1049
|
const FLIPS_PER_TICK = 7;
|
|
1007
|
-
const tickMs = $
|
|
1050
|
+
const tickMs = $22.derived(() => Math.max(20, BASE_TICK_MS / speed));
|
|
1008
1051
|
const seed = () => Array.from({ length: ROWS }, () => Array.from({ length: COLS }, () => Math.random() < 0.5 ? 0 : 1));
|
|
1009
1052
|
let grid = seed();
|
|
1010
1053
|
$$renderer2.push(`<div class="loader svelte-w5e143"><div class="grid svelte-w5e143" aria-hidden="true"><!--[-->`);
|
|
1011
|
-
const each_array = $
|
|
1054
|
+
const each_array = $22.ensure_array_like(grid);
|
|
1012
1055
|
for (let i = 0, $$length = each_array.length;i < $$length; i++) {
|
|
1013
1056
|
let row = each_array[i];
|
|
1014
|
-
$$renderer2.push(`<div class="row svelte-w5e143">${$
|
|
1057
|
+
$$renderer2.push(`<div class="row svelte-w5e143">${$22.escape(row.join(""))}</div>`);
|
|
1015
1058
|
}
|
|
1016
1059
|
$$renderer2.push(`<!--]--></div> <div class="label svelte-w5e143">Loading editor<span class="dot svelte-w5e143">.</span><span class="dot svelte-w5e143">.</span><span class="dot svelte-w5e143">.</span></div> `);
|
|
1017
1060
|
if (stalled) {
|
|
@@ -1046,7 +1089,7 @@ function AppShell($$renderer, $$props) {
|
|
|
1046
1089
|
let livePreflight = preflight;
|
|
1047
1090
|
let livePet = pet;
|
|
1048
1091
|
let loaded = snapshot.length > 0;
|
|
1049
|
-
const running = $
|
|
1092
|
+
const running = $23.derived(() => instances.filter((i) => i.status === "running"));
|
|
1050
1093
|
let attention = Object.fromEntries(snapshot.map((i) => [i.id, i.attention]));
|
|
1051
1094
|
let editingId = null;
|
|
1052
1095
|
let editingName = "";
|
|
@@ -1073,9 +1116,9 @@ function AppShell($$renderer, $$props) {
|
|
|
1073
1116
|
}
|
|
1074
1117
|
}
|
|
1075
1118
|
let path = initialPath;
|
|
1076
|
-
const onIde = $
|
|
1077
|
-
const requestedId = $
|
|
1078
|
-
const active = $
|
|
1119
|
+
const onIde = $23.derived(() => path.startsWith("/ide"));
|
|
1120
|
+
const requestedId = $23.derived(() => path.startsWith("/ide/") ? path.slice("/ide/".length) : "");
|
|
1121
|
+
const active = $23.derived(() => onIde() ? running().some((i) => i.id === requestedId()) ? requestedId() : running()[0]?.id ?? "" : "");
|
|
1079
1122
|
function navigate(to) {
|
|
1080
1123
|
if (to === path)
|
|
1081
1124
|
return;
|
|
@@ -1091,7 +1134,7 @@ function AppShell($$renderer, $$props) {
|
|
|
1091
1134
|
let $$settled = true;
|
|
1092
1135
|
let $$inner_renderer;
|
|
1093
1136
|
function $$render_inner($$renderer3) {
|
|
1094
|
-
$$renderer3.push(`<div${$
|
|
1137
|
+
$$renderer3.push(`<div${$23.attr_class("app svelte-1duc7gd", undefined, { ide: onIde() })}>`);
|
|
1095
1138
|
if (onIde()) {
|
|
1096
1139
|
$$renderer3.push("<!--[0-->");
|
|
1097
1140
|
IdeBar($$renderer3, {
|
|
@@ -1115,16 +1158,16 @@ function AppShell($$renderer, $$props) {
|
|
|
1115
1158
|
$$renderer3.push("<!--[-1-->");
|
|
1116
1159
|
DashboardView($$renderer3, { preflight: livePreflight, instances, loaded, pet: livePet });
|
|
1117
1160
|
}
|
|
1118
|
-
$$renderer3.push(`<!--]--> <div${$
|
|
1119
|
-
const each_array = $
|
|
1161
|
+
$$renderer3.push(`<!--]--> <div${$23.attr_class("panes svelte-1duc7gd", undefined, { hidden: !onIde() })}><!--[-->`);
|
|
1162
|
+
const each_array = $23.ensure_array_like(running());
|
|
1120
1163
|
for (let $$index = 0, $$length = each_array.length;$$index < $$length; $$index++) {
|
|
1121
1164
|
let inst = each_array[$$index];
|
|
1122
1165
|
if (visited.has(inst.id)) {
|
|
1123
1166
|
$$renderer3.push("<!--[0-->");
|
|
1124
|
-
$$renderer3.push(`<div${$
|
|
1167
|
+
$$renderer3.push(`<div${$23.attr_class("pane svelte-1duc7gd", undefined, { active: inst.id === active() })}>`);
|
|
1125
1168
|
if (mountable(inst.id)) {
|
|
1126
1169
|
$$renderer3.push("<!--[0-->");
|
|
1127
|
-
$$renderer3.push(`<iframe${$
|
|
1170
|
+
$$renderer3.push(`<iframe${$23.attr("src", ideUrl(inst))}${$23.attr("title", inst.name)} class="svelte-1duc7gd" onload="this.__e=event"></iframe>`);
|
|
1128
1171
|
} else {
|
|
1129
1172
|
$$renderer3.push("<!--[-1-->");
|
|
1130
1173
|
}
|
|
@@ -1177,7 +1220,7 @@ function App($$renderer, $$props) {
|
|
|
1177
1220
|
let { preflight, initialPath, snapshot, pet } = $$props;
|
|
1178
1221
|
if (true) {
|
|
1179
1222
|
let failed = function($$renderer3, error) {
|
|
1180
|
-
$$renderer3.push(`<mochi-island-failure data-component="AppShell"${$
|
|
1223
|
+
$$renderer3.push(`<mochi-island-failure data-component="AppShell"${$24.attr("data-message", error.message)}></mochi-island-failure>`);
|
|
1181
1224
|
};
|
|
1182
1225
|
$$renderer2.push("<!--[0-->");
|
|
1183
1226
|
$$renderer2.boundary({ failed }, ($$renderer3) => {
|
|
@@ -1185,7 +1228,7 @@ function App($$renderer, $$props) {
|
|
|
1185
1228
|
{
|
|
1186
1229
|
HydratableBoundary($$renderer3, {
|
|
1187
1230
|
children: ($$renderer4) => {
|
|
1188
|
-
$$renderer4.push(`<mochi-hydratable-island component-name="AppShell_2rtnxn6pgp2rh" component-url="__MOCHI_COMPONENT_URL__AppShell_2rtnxn6pgp2rh__"${$
|
|
1231
|
+
$$renderer4.push(`<mochi-hydratable-island component-name="AppShell_2rtnxn6pgp2rh" component-url="__MOCHI_COMPONENT_URL__AppShell_2rtnxn6pgp2rh__"${$24.attr("props-ref", emitIslandProps({ preflight, initialPath, snapshot, pet }))}>`);
|
|
1189
1232
|
$$renderer4.push(`<!--[-->`);
|
|
1190
1233
|
{
|
|
1191
1234
|
AppShell($$renderer4, { preflight, initialPath, snapshot, pet });
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.picker.svelte-12yor8r{display:inline-flex;border:1px solid var(--ink);background:var(--bg-card);flex:none}.segment.svelte-12yor8r{display:inline-flex;font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.06em;color:var(--ink);cursor:pointer;background:0 0;border:none;align-items: center;gap:6px;padding:7px 12px;font-size:12px;font-weight:600}.segment.svelte-12yor8r+.segment:where(.svelte-12yor8r){border-left:1px solid var(--ink)}.segment.svelte-12yor8r:hover:not(.active){background:var(--ink);color:var(--bg)}.segment.active.svelte-12yor8r{background:var(--ink);color:var(--bg);cursor:default;font-weight:700}.segment.svelte-12yor8r:focus-visible{outline:2px solid var(--ink);outline-offset:-2px}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codebay",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "Web UI for spinning up isolated devcontainer instances from any local folder, each with a browser-based VS Code (code-server) — built for parallel Claude Code workflows.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import { type Instance, type Preflight } from '../types.ts';
|
|
2
|
+
import { type Instance, type InstanceFilter, type Preflight } from '../types.ts';
|
|
3
3
|
import type { AvatarArt } from '../avatars/index.ts';
|
|
4
4
|
import FolderBrowser from './FolderBrowser.svelte';
|
|
5
5
|
import InstanceCard from './InstanceCard.svelte';
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
type Action = 'start' | 'stop' | 'delete' | 'rebuild';
|
|
20
20
|
|
|
21
21
|
let browserOpen = $state(false);
|
|
22
|
+
let filter = $state<InstanceFilter>('all');
|
|
22
23
|
let creating = $state(false);
|
|
23
24
|
let actionError = $state<string | null>(null);
|
|
24
25
|
let editingId = $state<string | null>(null);
|
|
@@ -29,6 +30,14 @@
|
|
|
29
30
|
|
|
30
31
|
const ready = $derived(preflight.docker && preflight.cli);
|
|
31
32
|
|
|
33
|
+
const visible = $derived(
|
|
34
|
+
instances.filter((i) => {
|
|
35
|
+
if (filter === 'active') return i.status === 'running' || i.status === 'creating';
|
|
36
|
+
if (filter === 'stopped') return i.status === 'stopped' || i.status === 'error';
|
|
37
|
+
return true;
|
|
38
|
+
})
|
|
39
|
+
);
|
|
40
|
+
|
|
32
41
|
// Drop a pending entry once its instance is gone (deleted) or its status has moved on.
|
|
33
42
|
$effect(() => {
|
|
34
43
|
for (const [id, { since }] of Object.entries(pending)) {
|
|
@@ -126,6 +135,8 @@
|
|
|
126
135
|
canDelete={instances.length > 0}
|
|
127
136
|
{ready}
|
|
128
137
|
{creating}
|
|
138
|
+
{filter}
|
|
139
|
+
onFilter={(v) => (filter = v)}
|
|
129
140
|
onNew={() => (browserOpen = true)}
|
|
130
141
|
onDeleteAll={deleteAll}
|
|
131
142
|
/>
|
|
@@ -153,9 +164,11 @@
|
|
|
153
164
|
New instance
|
|
154
165
|
</Button>
|
|
155
166
|
</div>
|
|
167
|
+
{:else if visible.length === 0}
|
|
168
|
+
<div class="empty"><p class="empty-sub">No {filter} instances.</p></div>
|
|
156
169
|
{:else}
|
|
157
170
|
<ul class="grid">
|
|
158
|
-
{#each
|
|
171
|
+
{#each visible as instance (instance.id)}
|
|
159
172
|
<InstanceCard
|
|
160
173
|
{instance}
|
|
161
174
|
editing={editingId === instance.id}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { InstanceFilter } from '../types.ts';
|
|
3
|
+
|
|
4
|
+
let { value, onchange }: { value: InstanceFilter; onchange: (v: InstanceFilter) => void } =
|
|
5
|
+
$props();
|
|
6
|
+
|
|
7
|
+
const options: { value: InstanceFilter; label: string }[] = [
|
|
8
|
+
{ value: 'all', label: 'All' },
|
|
9
|
+
{ value: 'active', label: 'Active' },
|
|
10
|
+
{ value: 'stopped', label: 'Stopped' }
|
|
11
|
+
];
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<div class="picker" role="radiogroup" aria-label="Filter instances">
|
|
15
|
+
{#each options as opt (opt.value)}
|
|
16
|
+
<button
|
|
17
|
+
type="button"
|
|
18
|
+
class="segment"
|
|
19
|
+
class:active={value === opt.value}
|
|
20
|
+
role="radio"
|
|
21
|
+
aria-checked={value === opt.value}
|
|
22
|
+
onclick={() => onchange(opt.value)}
|
|
23
|
+
>
|
|
24
|
+
{opt.label}
|
|
25
|
+
</button>
|
|
26
|
+
{/each}
|
|
27
|
+
</div>
|
|
28
|
+
|
|
29
|
+
<style>
|
|
30
|
+
.picker {
|
|
31
|
+
display: inline-flex;
|
|
32
|
+
flex: none;
|
|
33
|
+
border: 1px solid var(--ink);
|
|
34
|
+
background: var(--bg-card);
|
|
35
|
+
}
|
|
36
|
+
.segment {
|
|
37
|
+
display: inline-flex;
|
|
38
|
+
align-items: center;
|
|
39
|
+
gap: 6px;
|
|
40
|
+
padding: 7px 12px;
|
|
41
|
+
font-family: var(--font-mono);
|
|
42
|
+
font-weight: 600;
|
|
43
|
+
font-size: 12px;
|
|
44
|
+
text-transform: uppercase;
|
|
45
|
+
letter-spacing: 0.06em;
|
|
46
|
+
border: none;
|
|
47
|
+
background: transparent;
|
|
48
|
+
color: var(--ink);
|
|
49
|
+
cursor: pointer;
|
|
50
|
+
}
|
|
51
|
+
.segment + .segment {
|
|
52
|
+
border-left: 1px solid var(--ink);
|
|
53
|
+
}
|
|
54
|
+
.segment:hover:not(.active) {
|
|
55
|
+
background: var(--ink);
|
|
56
|
+
color: var(--bg);
|
|
57
|
+
}
|
|
58
|
+
.segment.active {
|
|
59
|
+
font-weight: 700;
|
|
60
|
+
background: var(--ink);
|
|
61
|
+
color: var(--bg);
|
|
62
|
+
cursor: default;
|
|
63
|
+
}
|
|
64
|
+
.segment:focus-visible {
|
|
65
|
+
outline: 2px solid var(--ink);
|
|
66
|
+
outline-offset: -2px;
|
|
67
|
+
}
|
|
68
|
+
</style>
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
import Plus from '@lucide/svelte/icons/plus';
|
|
3
3
|
import Component from '@lucide/svelte/icons/component';
|
|
4
4
|
import { isDev } from 'mochi-framework';
|
|
5
|
-
import type { AuthProvider } from '../types.ts';
|
|
5
|
+
import type { AuthProvider, InstanceFilter } from '../types.ts';
|
|
6
6
|
import type { AvatarArt } from '../avatars/index.ts';
|
|
7
7
|
import Brand from './Brand.svelte';
|
|
8
|
+
import InstanceFilterControl from './InstanceFilter.svelte';
|
|
8
9
|
import SettingsCog from './SettingsCog.svelte';
|
|
9
10
|
import CredMenu from './CredMenu.svelte';
|
|
10
11
|
import Button from './Button.svelte';
|
|
@@ -16,6 +17,8 @@
|
|
|
16
17
|
canDelete = false,
|
|
17
18
|
ready = true,
|
|
18
19
|
creating = false,
|
|
20
|
+
filter,
|
|
21
|
+
onFilter,
|
|
19
22
|
onNew,
|
|
20
23
|
onDeleteAll
|
|
21
24
|
}: {
|
|
@@ -24,6 +27,8 @@
|
|
|
24
27
|
canDelete?: boolean;
|
|
25
28
|
ready?: boolean;
|
|
26
29
|
creating?: boolean;
|
|
30
|
+
filter?: InstanceFilter;
|
|
31
|
+
onFilter?: (v: InstanceFilter) => void;
|
|
27
32
|
onNew?: () => void;
|
|
28
33
|
onDeleteAll?: () => void;
|
|
29
34
|
} = $props();
|
|
@@ -35,6 +40,9 @@
|
|
|
35
40
|
{#if isDev}
|
|
36
41
|
<Button variant="default" size="sm" icon={Component} href="/debug">Debug</Button>
|
|
37
42
|
{/if}
|
|
43
|
+
{#if filter && onFilter}
|
|
44
|
+
<InstanceFilterControl value={filter} onchange={onFilter} />
|
|
45
|
+
{/if}
|
|
38
46
|
<SettingsCog />
|
|
39
47
|
<CredMenu {auth} />
|
|
40
48
|
<Button variant="danger" size="sm" onclick={onDeleteAll} disabled={!canDelete}>
|
package/src/types.ts
CHANGED
|
@@ -25,6 +25,9 @@ export interface Instance {
|
|
|
25
25
|
forwarded_ports: PortForward[];
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
+
/** Dashboard run-state view filter: All | Active (running/creating) | Stopped (stopped/error). */
|
|
29
|
+
export type InstanceFilter = 'all' | 'active' | 'stopped';
|
|
30
|
+
|
|
28
31
|
/** Live only — never persisted, so it always reflects the most recent probe. */
|
|
29
32
|
export interface InstanceHealth {
|
|
30
33
|
containerRunning: boolean;
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as ei,b as Nt,c as ye,d as Zt,e as Mt,f as Ht,h as ri}from"/_mochi/client/chunk-fqg2qzj8.js";import{i as gt,l as je,m as ai}from"/_mochi/client/chunk-rpdphch7.js";import{n as Xe}from"/_mochi/client/chunk-4jgkak13.js";import{u as ti,v as Re,w as $e,x as ii,y as Ue,z as Ut}from"/_mochi/client/chunk-k5m4kt20.js";import{A as ee,B as Fe}from"/_mochi/client/chunk-330mrspw.js";import{$ as we,Aa as ve,Da as Gt,G as d,Ga as fe,H as G,Ja as Be,L as te,M as ie,Ma as X,Oa as Te,Pa as Yt,Qa as Jt,Ra as j,S as ft,Sa as q,T as wt,Ta as Ne,U as L,W as it,X as h,Xa as Xt,Z as l,Za as ni,_ as se,aa as o,ba as be,ca as c,da as ne,ga as _,ha as ht,ia as xt,ja as Qe,ka as Qt,la as e,oa as qt,pa as Ae,qa as O,ra as De,sa as m,ua as ce,va as st,wa as f,xa as K,ya as w,za as jt}from"/_mochi/client/chunk-qj7zy2d9.js";var kt=!1;class bt extends Date{#e=h(super.getTime());#t=new Map;#i=ht;constructor(...i){super(...i);if(!kt)this.#a()}#a(){kt=!0;var i=bt.prototype,t=Date.prototype,a=Object.getOwnPropertyNames(t);for(let r of a){if(r.startsWith("get")||r.startsWith("to")||r==="valueOf")i[r]=function(...g){if(g.length>0)return e(this.#e),t[r].apply(this,g);var S=this.#t.get(r);if(S===void 0){let x=ht;xt(this.#i),S=L(()=>{return e(this.#e),t[r].apply(this,g)}),this.#t.set(r,S),xt(x)}return e(S)};if(r.startsWith("set"))i[r]=function(...g){var S=t[r].apply(this,g);return l(this.#e,t.getTime.call(this)),S}}}}var di=["forEach","isDisjointFrom","isSubsetOf","isSupersetOf"],oi=["difference","intersection","symmetricDifference","union"],Vt=!1;class Pe extends Set{#e=new Map;#t=h(0);#i=h(0);#a=Qe||-1;constructor(i){super();if(i){for(var t of i)super.add(t);this.#i.v=super.size}if(!Vt)this.#n()}#r(i){return Qe===this.#a?h(i):it(i)}#n(){Vt=!0;var i=Pe.prototype,t=Set.prototype;for(let a of di)i[a]=function(...r){return e(this.#t),t[a].apply(this,r)};for(let a of oi)i[a]=function(...r){e(this.#t);var g=t[a].apply(this,r);return new Pe(g)}}has(i){var t=super.has(i),a=this.#e,r=a.get(i);if(r===void 0){if(!t)return e(this.#t),!1;r=this.#r(!0),a.set(i,r)}return e(r),t}add(i){if(!super.has(i))super.add(i),l(this.#i,super.size),se(this.#t);return this}delete(i){var t=super.delete(i),a=this.#e,r=a.get(i);if(r!==void 0)a.delete(i),l(r,!1);if(t)l(this.#i,super.size),se(this.#t);return t}clear(){if(super.size===0)return;super.clear();var i=this.#e;for(var t of i.values())l(t,!1);i.clear(),l(this.#i,0),se(this.#t)}keys(){return this.values()}values(){return e(this.#t),super.values()}entries(){return e(this.#t),super.entries()}[Symbol.iterator](){return this.keys()}get size(){return e(this.#i)}}class Ft extends Map{#e=new Map;#t=h(0);#i=h(0);#a=Qe||-1;constructor(i){super();if(i){for(var[t,a]of i)super.set(t,a);this.#i.v=super.size}}#r(i){return Qe===this.#a?h(i):it(i)}has(i){var t=this.#e,a=t.get(i);if(a===void 0)if(super.has(i))a=this.#r(0),t.set(i,a);else return e(this.#t),!1;return e(a),!0}forEach(i,t){this.#n(),super.forEach(i,t)}get(i){var t=this.#e,a=t.get(i);if(a===void 0)if(super.has(i))a=this.#r(0),t.set(i,a);else{e(this.#t);return}return e(a),super.get(i)}set(i,t){var a=this.#e,r=a.get(i),g=super.get(i),S=super.set(i,t),x=this.#t;if(r===void 0)r=this.#r(0),a.set(i,r),l(this.#i,super.size),se(x);else if(g!==t){se(r);var u=x.reactions===null?null:new Set(x.reactions),I=u===null||!r.reactions?.every((T)=>u.has(T));if(I)se(x)}return S}delete(i){var t=this.#e,a=t.get(i),r=super.delete(i);if(a!==void 0)t.delete(i),l(a,-1);if(r)l(this.#i,super.size),se(this.#t);return r}clear(){if(super.size===0)return;super.clear();var i=this.#e;l(this.#i,0);for(var t of i.values())l(t,-1);se(this.#t),i.clear()}#n(){e(this.#t);var i=this.#e;if(this.#i.v!==i.size){for(var t of super.keys())if(!i.has(t)){var a=this.#r(0);i.set(t,a)}}for([,a]of this.#e)e(a)}keys(){return e(this.#t),super.keys()}values(){return this.#n(),super.values()}entries(){return this.#n(),super.entries()}[Symbol.iterator](){return this.entries()}get size(){return e(this.#i),super.size}}var at=Symbol("replace");class rt extends URLSearchParams{#e=h(0);#t=Rt();#i=!1;#a(){if(!this.#t||this.#i)return;this.#i=!0;let i=this.toString();this.#t.search=i&&`?${i}`,this.#i=!1}[at](i){if(this.#i)return;if(i.toString()===super.toString())return;this.#i=!0;for(let t of[...super.keys()])super.delete(t);for(let[t,a]of i)super.append(t,a);se(this.#e),this.#i=!1}append(i,t){super.append(i,t),this.#a(),se(this.#e)}delete(i,t){var a=super.has(i,t);if(super.delete(i,t),a)this.#a(),se(this.#e)}get(i){return e(this.#e),super.get(i)}getAll(i){return e(this.#e),super.getAll(i)}has(i,t){return e(this.#e),super.has(i,t)}keys(){return e(this.#e),super.keys()}forEach(i,t){e(this.#e),super.forEach(i,t)}set(i,t){var a=super.getAll(i);super.set(i,t);var r=super.getAll(i);if(a.length!==r.length||a.some((g,S)=>g!==r[S]))this.#a(),se(this.#e)}sort(){super.sort(),this.#a(),se(this.#e)}toString(){return e(this.#e),super.toString()}values(){return e(this.#e),super.values()}entries(){return e(this.#e),super.entries()}[Symbol.iterator](){return this.entries()}get size(){return e(this.#e),super.size}}var St=null;function Rt(){return St}class Wt extends URL{#e=h(super.protocol);#t=h(super.username);#i=h(super.password);#a=h(super.hostname);#r=h(super.port);#n=h(super.pathname);#l=h(super.hash);#d=h(super.search);#o;constructor(i,t){i=new URL(i,t);super(i);St=this,this.#o=new rt(i.searchParams),St=null}get hash(){return e(this.#l)}set hash(i){super.hash=i,l(this.#l,super.hash)}get host(){return e(this.#a),e(this.#r),super.host}set host(i){super.host=i,l(this.#a,super.hostname),l(this.#r,super.port)}get hostname(){return e(this.#a)}set hostname(i){super.hostname=i,l(this.#a,super.hostname)}get href(){return e(this.#e),e(this.#t),e(this.#i),e(this.#a),e(this.#r),e(this.#n),e(this.#l),e(this.#d),super.href}set href(i){super.href=i,l(this.#e,super.protocol),l(this.#t,super.username),l(this.#i,super.password),l(this.#a,super.hostname),l(this.#r,super.port),l(this.#n,super.pathname),l(this.#l,super.hash),l(this.#d,super.search),this.#o[at](super.searchParams)}get password(){return e(this.#i)}set password(i){super.password=i,l(this.#i,super.password)}get pathname(){return e(this.#n)}set pathname(i){super.pathname=i,l(this.#n,super.pathname)}get port(){return e(this.#r)}set port(i){super.port=i,l(this.#r,super.port)}get protocol(){return e(this.#e)}set protocol(i){super.protocol=i,l(this.#e,super.protocol)}get search(){return e(this.#d)}set search(i){super.search=i,l(this.#d,super.search),this.#o[at](super.searchParams)}get username(){return e(this.#t)}set username(i){super.username=i,l(this.#t,super.username)}get origin(){return e(this.#e),e(this.#a),e(this.#r),super.origin}get searchParams(){return this.#o}toString(){return this.href}toJSON(){return this.href}}class Kt{#e;#t;constructor(i,t){this.#e=i,this.#t=wt(t)}get current(){return this.#t(),this.#e()}}var Ot=/^[A-Za-z0-9._-]+$/;function fi(i){let t=i.trim();if(!t)return null;let a,r,g=t.match(/^[A-Za-z0-9._-]+@([A-Za-z0-9.-]+):(.+)$/);if(g)a=g[1],r=g[2];else if(/^[a-z][a-z0-9+.-]*:\/\//i.test(t)){let I;try{I=new URL(t)}catch{return null}if(I.protocol!=="http:"&&I.protocol!=="https:"&&I.protocol!=="ssh:")return null;a=I.hostname,r=I.pathname}else{let I=t.match(/^([A-Za-z0-9-]+\.[A-Za-z0-9.-]+)\/(.+)$/);if(!I)return null;a=I[1],r=I[2]}if(!a||!r)return null;let S=r.replace(/\.git$/i,"").split("/").filter(Boolean),[x,u]=S;if(!x||!u||!Ot.test(x)||!Ot.test(u))return null;return{host:a,owner:x,repo:u,cloneUrl:`https://${a}/${x}/${u}.git`}}function It(i){return fi(i)!==null}var ci=new Set(["$$slots","$$events","$$legacy"]);function nt(i,t){let a=j(t,ci),r=[["path",{d:"M16 14v2.2l1.6 1"}],["path",{d:"M7 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2"}],["circle",{cx:"16",cy:"16",r:"6"}]];ee(i,q({name:"folder-clock"},()=>a,{get iconNode(){return r}}))}var $i=new Set(["$$slots","$$events","$$legacy"]);function Ye(i,t){let a=j(t,$i),r=[["path",{d:"M15 6a9 9 0 0 0-9 9V3"}],["circle",{cx:"18",cy:"6",r:"3"}],["circle",{cx:"6",cy:"18",r:"3"}]];ee(i,q({name:"git-branch"},()=>a,{get iconNode(){return r}}))}var mi=new Set(["$$slots","$$events","$$legacy"]);function lt(i,t){let a=j(t,mi),r=[["path",{d:"m5 12 7-7 7 7"}],["path",{d:"M12 19V5"}]];ee(i,q({name:"arrow-up"},()=>a,{get iconNode(){return r}}))}var gi=new Set(["$$slots","$$events","$$legacy"]);function dt(i,t){let a=j(t,gi),r=[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"}]];ee(i,q({name:"folder"},()=>a,{get iconNode(){return r}}))}var vi=new Set(["$$slots","$$events","$$legacy"]);function Ze(i,t){let a=j(t,vi),r=[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"}],["path",{d:"M12 9v4"}],["path",{d:"M12 17h.01"}]];ee(i,q({name:"triangle-alert"},()=>a,{get iconNode(){return r}}))}var pi=m('<div class="recent-row svelte-oq97c4"><button class="recent-pick svelte-oq97c4"><span class="icon svelte-oq97c4"><!></span> <span class="recent-text svelte-oq97c4"><span class="recent-name svelte-oq97c4"> </span> <span class="recent-path svelte-oq97c4"> </span></span></button> <button class="recent-x svelte-oq97c4" title="Remove from history"><!></button></div>'),ui=m('<button class="recent-toggle svelte-oq97c4"> </button>'),hi=m('<div class="recent svelte-oq97c4"><div class="recent-label svelte-oq97c4">Recent</div> <!> <!></div>'),xi=m('<div class="muted svelte-oq97c4">Loading…</div>'),bi=m('<div class="muted err svelte-oq97c4"> </div>'),Si=m('<div class="row svelte-oq97c4"><button class="nav svelte-oq97c4"><span class="icon svelte-oq97c4"><!></span> <span class="ename svelte-oq97c4">..</span></button></div>'),wi=m('<div class="muted svelte-oq97c4"> </div>'),Ii=m('<span class="badge svelte-oq97c4">devcontainer</span>'),Ni=m('<div><button class="nav svelte-oq97c4"><span class="icon svelte-oq97c4"><!></span> <span class="ename svelte-oq97c4"> </span> <!></button> <button class="pick-inline svelte-oq97c4">Select</button></div>'),Ci=m("<!> <!> <!>",1),Ei=m(`<div class="warn svelte-oq97c4"><!> <span>No <code class="svelte-oq97c4">devcontainer.json</code> in this folder — a default image will be used if you select
|
|
2
|
-
it.</span></div>`),Mi=m('<div class="overlay svelte-oq97c4" role="button" tabindex="0"><div class="modal panel svelte-oq97c4" role="dialog" aria-modal="true" aria-label="Pick a project folder" tabindex="-1"><div class="head svelte-oq97c4"><h2 class="svelte-oq97c4">Pick a project folder</h2> <button class="x svelte-oq97c4" aria-label="Close"><!></button></div> <div class="clone svelte-oq97c4"><div class="clone-label svelte-oq97c4">Clone a Git repository</div> <div class="clone-row svelte-oq97c4"><input class="clone-url svelte-oq97c4" type="text" placeholder="https://github.com/owner/repo" spellcheck="false" autocomplete="off"/> <input class="clone-branch svelte-oq97c4" type="text" placeholder="branch (optional)" spellcheck="false" autocomplete="off"/> <button class="clone-btn svelte-oq97c4">Clone</button></div></div> <div class="crumbs svelte-oq97c4"><code class="svelte-oq97c4"> </code></div> <!> <div class="search svelte-oq97c4"><input type="text" placeholder="Filter folders…" spellcheck="false" autocomplete="off" class="svelte-oq97c4"/></div> <div class="list svelte-oq97c4"><!></div> <!> <div class="foot svelte-oq97c4"><span class="hint svelte-oq97c4">Browse to a folder, then select this folder or any subfolder.</span> <button class="primary svelte-oq97c4">Select this folder</button></div></div></div>');function Ct(i,t){te(t,!0);let a=h(null),r=h(!0),g=h(null),S=h(""),x=h(null),u=h(we([])),I=h(!1),T=h(""),D=h(""),z=L(()=>It(e(T)));function Q(){if(!e(z))return;t.onpick(e(T).trim(),{branch:e(D).trim()||void 0})}let v=L(()=>e(a)?e(a).entries.filter((p)=>p.name.toLowerCase().includes(e(S).trim().toLowerCase())):[]),N=L(()=>e(I)?e(u):e(u).slice(0,5));async function M(){try{let p=await Nt("/api/history");l(u,p.history??[],!0)}catch{}}async function C(p){let W=e(u);l(u,e(u).filter((xe)=>xe.source_path!==p),!0);try{await Zt("/api/history",{sourcePath:p})}catch{l(u,W,!0)}}async function P(p=null){l(r,!0),l(g,null),l(S,"");try{let W=p?`/api/browse?path=${encodeURIComponent(p)}`:"/api/browse";l(a,await Nt(W,void 0,"Could not list folder"),!0)}catch(W){l(g,W.message,!0)}finally{l(r,!1)}await Qt(),e(x)?.focus()}ne(()=>{P(),M()});var A=Mi(),B=o(A),F=o(B),Y=c(o(F),2),Z=o(Y);Xe(Z,{size:16}),d(Y),d(F);var le=c(F,2),Ce=c(o(le),2),ue=o(Ce);Be(ue);var Se=c(ue,2);Be(Se);var Ee=c(Se,2);d(Ce),d(le);var Le=c(le,2),b=o(Le),E=o(b,!0);d(b),d(Le);var y=c(Le,2);{var V=(p)=>{var W=hi(),xe=c(o(W),2);ve(xe,17,()=>e(N),(Ie)=>Ie.source_path,(Ie,me)=>{var ae=pi(),re=o(ae),H=o(re),ge=o(H);{var _e=(Me)=>{Ye(Me,{size:16})},Ke=L(()=>It(e(me).source_path)),Ge=(Me)=>{nt(Me,{size:16})};w(ge,(Me)=>{if(e(Ke))Me(_e);else Me(Ge,-1)})}d(H);var qe=c(H,2),ke=o(qe),pt=o(ke,!0);d(ke);var et=c(ke,2),ut=o(et,!0);d(et),d(qe),d(re);var Oe=c(re,2),Ve=o(Oe);Xe(Ve,{size:14}),d(Oe),d(ae),_(()=>{K(pt,e(me).name),K(ut,e(me).source_path),X(Oe,"aria-label",`Remove ${e(me).name??""} from history`)}),O("click",re,()=>t.onpick(e(me).source_path)),O("click",Oe,(Me)=>{Me.stopPropagation(),C(e(me).source_path)}),f(Ie,ae)});var Je=c(xe,2);{var We=(Ie)=>{var me=ui(),ae=o(me,!0);d(me),_(()=>K(ae,e(I)?"Show fewer":`Show all (${e(u).length})`)),O("click",me,()=>l(I,!e(I))),f(Ie,me)};w(Je,(Ie)=>{if(e(u).length>5)Ie(We)})}d(W),f(p,W)};w(y,(p)=>{if(e(u).length>0)p(V)})}var pe=c(y,2),he=o(pe);Be(he),Yt(he,(p)=>l(x,p),()=>e(x)),d(pe);var $=c(pe,2),n=o($);{var s=(p)=>{var W=xi();f(p,W)},R=(p)=>{var W=bi(),xe=o(W,!0);d(W),_(()=>K(xe,e(g))),f(p,W)},U=(p)=>{var W=Ci(),xe=be(W);{var Je=(ae)=>{var re=Si(),H=o(re),ge=o(H),_e=o(ge);lt(_e,{size:16}),d(ge),G(2),d(H),d(re),O("click",H,()=>P(e(a)?.parent??null)),f(ae,re)};w(xe,(ae)=>{if(e(a).parent&&!e(S))ae(Je)})}var We=c(xe,2);{var Ie=(ae)=>{var re=wi(),H=o(re,!0);d(re),_(()=>K(H,e(S)?"No folders match.":"No subfolders here.")),f(ae,re)};w(We,(ae)=>{if(e(v).length===0)ae(Ie)})}var me=c(We,2);ve(me,19,()=>e(v),(ae)=>ae.path,(ae,re,H)=>{var ge=Ni();let _e;var Ke=o(ge),Ge=o(Ke),qe=o(Ge);dt(qe,{size:16}),d(Ge);var ke=c(Ge,2),pt=o(ke,!0);d(ke);var et=c(ke,2);{var ut=(Ve)=>{var Me=Ii();f(Ve,Me)};w(et,(Ve)=>{if(e(re).hasDevcontainer)Ve(ut)})}d(Ke);var Oe=c(Ke,2);d(ge),_((Ve)=>{_e=fe(ge,1,"row svelte-oq97c4",null,_e,Ve),K(pt,e(re).name)},[()=>({"first-match":e(S).trim()&&e(H)===0})]),O("click",Ke,()=>P(e(re).path)),O("click",Oe,()=>t.onpick(e(re).path)),f(ae,ge)}),f(p,W)};w(n,(p)=>{if(e(r))p(s);else if(e(g))p(R,1);else if(e(a))p(U,2)})}d($);var de=c($,2);{var k=(p)=>{var W=Ei(),xe=o(W);Ze(xe,{size:15}),G(2),d(W),f(p,W)};w(de,(p)=>{if(e(a)&&!e(a).hasDevcontainer)p(k)})}var oe=c(de,2),ze=c(o(oe),2);d(oe),d(B),d(A),_(()=>{Ee.disabled=!e(z),K(E,e(a)?.path??"…"),ze.disabled=!e(a)}),O("click",A,function(...p){t.onclose?.apply(this,p)}),O("keydown",A,(p)=>p.key==="Escape"&&t.onclose()),O("click",B,(p)=>p.stopPropagation()),O("keydown",B,()=>{}),O("click",Y,function(...p){t.onclose?.apply(this,p)}),O("keydown",ue,(p)=>{if(p.key==="Enter")p.preventDefault(),Q()}),Te(ue,()=>e(T),(p)=>l(T,p)),O("keydown",Se,(p)=>{if(p.key==="Enter")p.preventDefault(),Q()}),Te(Se,()=>e(D),(p)=>l(D,p)),O("click",Ee,Q),O("keydown",he,(p)=>{let W=e(v)[0];if(p.key==="Enter"&&W)p.preventDefault(),P(W.path)}),Te(he,()=>e(S),(p)=>l(S,p)),O("click",ze,()=>e(a)&&t.onpick(e(a).path)),f(i,A),ie()}De(["click","keydown"]);var Li=m('<div class="branch svelte-jv8lut" title="Branch checked out in the container"><!><span class="svelte-jv8lut"> </span></div>');function Et(i,t){var a=Li(),r=o(a);Ye(r,{size:12});var g=c(r),S=o(g,!0);d(g),d(a),_(()=>K(S,t.branch)),f(i,a)}var Pi=new Set(["$$slots","$$events","$$legacy"]);function ot(i,t){let a=j(t,Pi),r=[["path",{d:"M17 19a1 1 0 0 1-1-1v-2a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2a1 1 0 0 1-1 1z"}],["path",{d:"M17 21v-2"}],["path",{d:"M19 14V6.5a1 1 0 0 0-7 0v11a1 1 0 0 1-7 0V10"}],["path",{d:"M21 21v-2"}],["path",{d:"M3 5V3"}],["path",{d:"M4 10a2 2 0 0 1-2-2V6a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2a2 2 0 0 1-2 2z"}],["path",{d:"M7 5V3"}]];ee(i,q({name:"cable"},()=>a,{get iconNode(){return r}}))}var _i=m('<a target="_blank" rel="noopener"> </a>'),Bi=m('<div class="fports svelte-1uaz383" title="Forwarded ports — click to open"><!> <span class="list svelte-1uaz383"></span></div>');function Lt(i,t){te(t,!0);var a=st(),r=be(a);{var g=(S)=>{var x=Bi(),u=o(x);ot(u,{size:12});var I=c(u,2);ve(I,21,()=>t.ports,(T)=>T.container_port,(T,D)=>{var z=_i();let Q;var v=o(z,!0);d(z),_((N,M)=>{Q=fe(z,1,"fport svelte-1uaz383",null,Q,{open:e(D).open}),X(z,"href",N),X(z,"title",M),K(v,e(D).container_port)},[()=>Mt(e(D).host_port),()=>`container :${e(D).container_port} → ${Mt(e(D).host_port)} ${e(D).open?"(open)":"(not published yet)"}`]),f(T,z)}),d(I),d(x),f(S,x)};w(r,(S)=>{if(t.ports.length)S(g)})}f(i,a),ie()}var Ti=m('<div class="busy-overlay svelte-13338y7" aria-live="polite"><span class="busy-label svelte-13338y7"> </span></div>'),Di=m('<input class="name-edit svelte-13338y7"/>'),Ai=m('<button class="name svelte-13338y7" title="Click to rename"> </button>'),yi=m("<span></span>"),zi=m('<div class="card-error svelte-13338y7"> </div>'),ki=m("<!> <!>",1),Vi=m('<li><!> <div class="card-head svelte-13338y7"><!> <!> <!> <!></div> <div class="path svelte-13338y7"> </div> <!> <!> <!> <div class="actions svelte-13338y7"><!> <!> <!> <!></div></li>');function Pt(i,t){te(t,!0);let a=Ne(t,"editingName",15),r=Ne(t,"pending",3,null),g=L(()=>t.instance.status==="running"||t.instance.status==="stopped"||t.instance.status==="error"&&!!t.instance.container_id),S={start:"Starting…",stop:"Stopping…",delete:"Deleting…",rebuild:"Rebuilding…"};var x=Vi();let u;var I=o(x);{var T=($)=>{var n=Ti(),s=o(n),R=o(s,!0);d(s),d(n),_(()=>K(R,S[r()])),f($,n)};w(I,($)=>{if(r())$(T)})}var D=c(I,2),z=o(D);Re(z,{get id(){return t.instance.id},get name(){return t.instance.name},interactive:!0});var Q=c(z,2);{var v=($)=>{var n=Di();Be(n),ft(n,!0),Ae("focus",n,(s)=>s.currentTarget.select()),Ae("blur",n,function(...s){t.oncommitrename?.apply(this,s)}),O("keydown",n,(s)=>{if(s.key==="Enter")s.currentTarget.blur();else if(s.key==="Escape")t.oncancelrename()}),Te(n,a),f($,n)},N=($)=>{var n=Ai(),s=o(n,!0);d(n),_(()=>K(s,t.instance.name)),O("click",n,function(...R){t.onstartrename?.apply(this,R)}),f($,n)};w(Q,($)=>{if(t.editing)$(v);else $(N,-1)})}var M=c(Q,2);{var C=($)=>{var n=yi();let s;_(()=>{s=fe(n,1,"attn svelte-13338y7",null,s,{"attn-done":t.instance.attention==="done","attn-waiting":t.instance.attention==="waiting"}),X(n,"title",t.instance.attention==="waiting"?"Claude is waiting for input":"Claude finished"),X(n,"aria-label",t.instance.attention==="waiting"?"Claude is waiting for input":"Claude finished")}),f($,n)};w(M,($)=>{if(t.instance.attention)$(C)})}var P=c(M,2);Ht(P,{get status(){return t.instance.status}}),d(D);var A=c(D,2),B=o(A,!0);d(A);var F=c(A,2);{var Y=($)=>{Lt($,{get ports(){return t.instance.forwarded_ports}})};w(F,($)=>{if(t.instance.status==="running")$(Y)})}var Z=c(F,2);{var le=($)=>{Et($,{get branch(){return t.instance.git_branch}})};w(Z,($)=>{if(t.instance.git_branch)$(le)})}var Ce=c(Z,2);{var ue=($)=>{var n=zi(),s=o(n,!0);d(n),_(()=>K(s,t.instance.error)),f($,n)};w(Ce,($)=>{if(t.instance.status==="error"&&t.instance.error)$(ue)})}var Se=c(Ce,2),Ee=o(Se);{var Le=($)=>{var n=ki(),s=be(n);{let U=L(()=>`/ide/${t.instance.id}`);$e(s,{variant:"primary",size:"sm",get href(){return e(U)},children:(de,k)=>{G();var oe=ce("Open IDE");f(de,oe)},$$slots:{default:!0}})}var R=c(s,2);$e(R,{size:"sm",onclick:()=>t.onact("stop"),children:(U,de)=>{G();var k=ce("Stop");f(U,k)},$$slots:{default:!0}}),f($,n)},b=($)=>{$e($,{size:"sm",onclick:()=>t.onact("start"),children:(n,s)=>{G();var R=ce("Start");f(n,R)},$$slots:{default:!0}})},E=($)=>{{let n=L(()=>Fe(`/instances/${t.instance.id}`));$e($,{size:"sm",get href(){return e(n)},target:"_blank",rel:"noopener noreferrer",children:(s,R)=>{G();var U=ce("View logs");f(s,U)},$$slots:{default:!0}})}};w(Ee,($)=>{if(t.instance.status==="running")$(Le);else if(t.instance.status==="stopped"||t.instance.status==="error"&&t.instance.container_id)$(b,1);else if(t.instance.status==="creating")$(E,2)})}var y=c(Ee,2);{var V=($)=>{$e($,{size:"sm",title:"Recreate the container and re-run setup (credentials, hooks, port forwards)",onclick:()=>t.onact("rebuild"),children:(n,s)=>{G();var R=ce("Rebuild");f(n,R)},$$slots:{default:!0}})};w(y,($)=>{if(e(g))$(V)})}var pe=c(y,2);{let $=L(()=>Fe(`/instances/${t.instance.id}`));$e(pe,{size:"sm",ghost:!0,get href(){return e($)},target:"_blank",rel:"noopener noreferrer",children:(n,s)=>{G();var R=ce("Details");f(n,R)},$$slots:{default:!0}})}var he=c(pe,2);$e(he,{variant:"danger",size:"sm",onclick:()=>t.onact("delete"),children:($,n)=>{G();var s=ce("Delete");f($,s)},$$slots:{default:!0}}),d(Se),d(x),_(()=>{u=fe(x,1,"card panel svelte-13338y7",null,u,{busy:!!r()}),X(x,"aria-busy",!!r()||void 0),X(A,"title",t.instance.source_path),K(B,t.instance.source_path)}),f(i,x),ie()}De(["keydown","click"]);var Fi=new Set(["$$slots","$$events","$$legacy"]);function ct(i,t){let a=j(t,Fi),r=[["path",{d:"M15.536 11.293a1 1 0 0 0 0 1.414l2.376 2.377a1 1 0 0 0 1.414 0l2.377-2.377a1 1 0 0 0 0-1.414l-2.377-2.377a1 1 0 0 0-1.414 0z"}],["path",{d:"M2.297 11.293a1 1 0 0 0 0 1.414l2.377 2.377a1 1 0 0 0 1.414 0l2.377-2.377a1 1 0 0 0 0-1.414L6.088 8.916a1 1 0 0 0-1.414 0z"}],["path",{d:"M8.916 17.912a1 1 0 0 0 0 1.415l2.377 2.376a1 1 0 0 0 1.414 0l2.377-2.376a1 1 0 0 0 0-1.415l-2.377-2.376a1 1 0 0 0-1.414 0z"}],["path",{d:"M8.916 4.674a1 1 0 0 0 0 1.414l2.377 2.376a1 1 0 0 0 1.414 0l2.377-2.376a1 1 0 0 0 0-1.414l-2.377-2.377a1 1 0 0 0-1.414 0z"}]];ee(i,q({name:"component"},()=>a,{get iconNode(){return r}}))}var Ri=new Set(["$$slots","$$events","$$legacy"]);function $t(i,t){let a=j(t,Ri),r=[["path",{d:"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z"}],["path",{d:"M12 22V12"}],["polyline",{points:"3.29 7 12 12 20.71 7"}],["path",{d:"m7.5 4.27 9 5.15"}]];ee(i,q({name:"package"},()=>a,{get iconNode(){return r}}))}var Wi=m('<a class="brand svelte-94cd8h" href="/"><span class="logo svelte-94cd8h"><!></span><span class="words svelte-94cd8h"><span>Codebay</span><span class="tagline svelte-94cd8h">devcontainer manager</span></span></a>');function _t(i,t){te(t,!0);var a=Wi(),r=o(a),g=o(r);{var S=(u)=>{Re(u,{get art(){return t.pet},get name(){return t.pet.name},scale:4})},x=(u)=>{$t(u,{size:22})};w(g,(u)=>{if(t.pet)u(S);else u(x,-1)})}d(r),G(),d(a),f(i,a),ie()}var Ki=new Set(["$$slots","$$events","$$legacy"]);function He(i,t){let a=j(t,Ki),r=[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"}],["circle",{cx:"12",cy:"12",r:"3"}]];ee(i,q({name:"settings"},()=>a,{get iconNode(){return r}}))}var Oi=m('<a class="cog svelte-1e745g8" target="_blank" rel="noopener noreferrer" aria-label="Settings" title="Settings"><!></a>');function Bt(i,t){te(t,!1),Jt();var a=Oi(),r=o(a);He(r,{size:16}),d(a),_((g)=>X(a,"href",g),[()=>Fe("/settings")]),f(i,a),ie()}var Qi=new Set(["$$slots","$$events","$$legacy"]);function mt(i,t){let a=j(t,Qi),r=[["path",{d:"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"}],["path",{d:"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"}]];ee(i,q({name:"link"},()=>a,{get iconNode(){return r}}))}var Yi=m('<button type="button" class="cred-row svelte-vongf9" role="menuitem"><span></span> <span class="cred-label"> </span> <span class="cred-state svelte-vongf9"> </span></button>'),Zi=m('<div class="cred-dropdown panel svelte-vongf9" role="menu"></div>'),Hi=m('<div class="cred-menu svelte-vongf9"><button aria-haspopup="menu" aria-label="Credentials" title="Credentials"><!></button> <!></div>');function Tt(i,t){te(t,!0);let a=h(!1),r=L(()=>t.auth.filter((v)=>v.available).length),g=L(()=>e(r)===t.auth.length?"ok":e(r)===0?"error":"warn"),S={ok:mt,warn:Ze,error:Xe},x=L(()=>S[e(g)]);function u(v){if(v.available)Ue.success(`${v.label} credentials come from ${v.source}.`);else{let N=v.hint?` — ${v.hint}`:"";Ue.error(`No ${v.label} credentials found${N}.`)}}ne(()=>{if(!e(a))return;let v=(M)=>{if(!M.target?.closest(".cred-menu"))l(a,!1)},N=(M)=>{if(M.key==="Escape")l(a,!1)};return window.addEventListener("click",v),window.addEventListener("keydown",N),()=>{window.removeEventListener("click",v),window.removeEventListener("keydown",N)}});var I=Hi(),T=o(I),D=o(T);Gt(D,()=>e(x),(v,N)=>{N(v,{size:16})}),d(T);var z=c(T,2);{var Q=(v)=>{var N=Zi();ve(N,21,()=>t.auth,(M)=>M.id,(M,C)=>{var P=Yi(),A=o(P),B=c(A,2),F=o(B,!0);d(B);var Y=c(B,2),Z=o(Y,!0);d(Y),d(P),_(()=>{X(P,"title",e(C).available?`Credentials from ${e(C).source}, copied into each new instance.`:`No credentials found on this computer${e(C).hint?` — ${e(C).hint}`:""}.`),fe(A,1,`dot ${e(C).available?"on":"off"}`,"svelte-vongf9"),K(F,e(C).label),K(Z,e(C).available?"Authorized":"Not found")}),O("click",P,()=>u(e(C))),f(M,P)}),d(N),f(v,N)};w(z,(v)=>{if(e(a))v(Q)})}d(I),_(()=>{fe(T,1,`cred ${e(g)??""}`,"svelte-vongf9"),X(T,"aria-expanded",e(a))}),O("click",T,()=>l(a,!e(a))),f(i,I),ie()}De(["click"]);var Ji=m('<header class="topbar svelte-1h259us"><!> <div class="topbar-actions svelte-1h259us"><!> <!> <!> <!> <!></div></header>');function Dt(i,t){let a=Ne(t,"canDelete",3,!1),r=Ne(t,"ready",3,!0),g=Ne(t,"creating",3,!1);var S=Ji(),x=o(S);_t(x,{get pet(){return t.pet}});var u=c(x,2),I=o(u);{var T=(N)=>{$e(N,{variant:"default",size:"sm",get icon(){return ct},href:"/debug",children:(M,C)=>{G();var P=ce("Debug");f(M,P)},$$slots:{default:!0}})};w(I,(N)=>{if(Xt)N(T)})}var D=c(I,2);Bt(D,{});var z=c(D,2);Tt(z,{get auth(){return t.auth}});var Q=c(z,2);{let N=L(()=>!a());$e(Q,{variant:"danger",size:"sm",get onclick(){return t.onDeleteAll},get disabled(){return e(N)},children:(M,C)=>{G();var P=ce("Delete all");f(M,P)},$$slots:{default:!0}})}var v=c(Q,2);{let N=L(()=>g()?void 0:gt),M=L(()=>!r()||g());$e(v,{variant:"primary",get icon(){return e(N)},get onclick(){return t.onNew},get disabled(){return e(M)},children:(C,P)=>{G();var A=ce();_(()=>K(A,g()?"Creating…":"New instance")),f(C,A)},$$slots:{default:!0}})}d(u),d(S),f(i,S)}var Gi=m("<span>Docker daemon is not reachable.</span>"),Xi=m("<span>The devcontainer CLI is not available.</span>"),Ui=m('<div class="banner error svelte-146pixd"><strong>Setup needed.</strong> <!> <!></div>'),ji=m('<div class="banner error svelte-146pixd"><strong>Error.</strong> <span> </span></div>'),qi=m('<div class="empty svelte-146pixd"><p class="empty-sub svelte-146pixd">Loading…</p></div>'),ea=m('<div class="empty svelte-146pixd"><p class="empty-title svelte-146pixd">No instances yet</p> <p class="empty-sub svelte-146pixd">Pick a project folder to spin up an isolated devcontainer.</p> <!></div>'),ta=m('<ul class="grid svelte-146pixd"></ul>'),ia=m('<!> <main class="stage svelte-146pixd"><!> <!> <!></main> <!>',1);function At(i,t){te(t,!0);let a=h(!1),r=h(!1),g=h(null),S=h(null),x=h(""),u=h(we({})),I=L(()=>t.preflight.docker&&t.preflight.cli);ne(()=>{for(let[b,{since:E}]of Object.entries(e(u))){let y=t.instances.find((V)=>V.id===b);if(!y||y.status!==E)T(b)}});function T(b){let{[b]:E,...y}=e(u);l(u,y,!0)}async function D(b,E){l(a,!1),l(r,!0),l(g,null);try{await ye("/api/instances",{sourcePath:b,branch:E?.branch},"Failed to create instance")}catch(y){l(g,y.message,!0)}finally{l(r,!1)}}async function z(b,E){if(l(g,null),E==="delete"&&!confirm("Delete this instance and its copied files?"))return;if(E==="rebuild"&&!confirm("Recreate this container and re-run setup? The workspace is kept."))return;let y=t.instances.find((V)=>V.id===b)?.status;if(y)l(u,{...e(u),[b]:{action:E,since:y}},!0);try{await ye(`/api/instances/${b}/${E}`,void 0,`Failed to ${E}`)}catch(V){l(g,V.message,!0),T(b)}}function Q(b){l(S,b.id,!0),l(x,b.name,!0)}function v(){l(S,null),l(x,"")}async function N(b){let E=e(x).trim(),y=t.instances.find((V)=>V.id===b)?.name;if(!E||E===y){v();return}v(),l(g,null);try{await ye(`/api/instances/${b}/rename`,{name:E},"Failed to rename")}catch(V){l(g,V.message,!0)}}async function M(){if(l(g,null),!confirm(`Delete all ${t.instances.length} instances and their copied files?`))return;try{await ye("/api/instances/delete-all",void 0,"Failed to delete all")}catch(b){l(g,b.message,!0)}}var C=ia(),P=be(C);{let b=L(()=>t.instances.length>0);Dt(P,{get auth(){return t.preflight.auth},get pet(){return t.pet},get canDelete(){return e(b)},get ready(){return e(I)},get creating(){return e(r)},onNew:()=>l(a,!0),onDeleteAll:M})}var A=c(P,2),B=o(A);{var F=(b)=>{var E=Ui(),y=c(o(E),2);{var V=($)=>{var n=Gi();f($,n)};w(y,($)=>{if(!t.preflight.docker)$(V)})}var pe=c(y,2);{var he=($)=>{var n=Xi();f($,n)};w(pe,($)=>{if(!t.preflight.cli)$(he)})}d(E),f(b,E)};w(B,(b)=>{if(!e(I))b(F)})}var Y=c(B,2);{var Z=(b)=>{var E=ji(),y=c(o(E),2),V=o(y,!0);d(y),d(E),_(()=>K(V,e(g))),f(b,E)};w(Y,(b)=>{if(e(g))b(Z)})}var le=c(Y,2);{var Ce=(b)=>{var E=qi();f(b,E)},ue=(b)=>{var E=ea(),y=c(o(E),4);{let V=L(()=>!e(I));$e(y,{variant:"primary",get icon(){return gt},onclick:()=>l(a,!0),get disabled(){return e(V)},children:(pe,he)=>{G();var $=ce("New instance");f(pe,$)},$$slots:{default:!0}})}d(E),f(b,E)},Se=(b)=>{var E=ta();ve(E,21,()=>t.instances,(y)=>y.id,(y,V)=>{{let pe=L(()=>e(S)===e(V).id),he=L(()=>e(u)[e(V).id]?.action??null);Pt(y,{get instance(){return e(V)},get editing(){return e(pe)},get pending(){return e(he)},onact:($)=>z(e(V).id,$),onstartrename:()=>Q(e(V)),oncommitrename:()=>N(e(V).id),oncancelrename:v,get editingName(){return e(x)},set editingName($){l(x,$,!0)}})}}),d(E),f(b,E)};w(le,(b)=>{if(!t.loaded)b(Ce);else if(t.instances.length===0)b(ue,1);else b(Se,-1)})}d(A);var Ee=c(A,2);{var Le=(b)=>{Ct(b,{onpick:D,onclose:()=>l(a,!1)})};w(Ee,(b)=>{if(e(a))b(Le)})}f(i,C),ie()}var aa=m('<div class="tab-label editing svelte-r39acv"><!> <input class="tab-name-edit svelte-r39acv"/></div>'),ra=m('<button type="button" class="tab-label svelte-r39acv"><!> <span class="tab-name svelte-r39acv"> </span></button>'),na=m("<div><!></div>"),la=m('<nav class="tabs svelte-r39acv"></nav>'),da=m('<!> <a class="cog svelte-r39acv" target="_blank" rel="noopener noreferrer" title="Settings" aria-label="Settings"><!></a>',1);function yt(i,t){te(t,!0);let a=Ne(t,"editingName",15);Ut(i,{children:(r,g)=>{var S=da(),x=be(S);{var u=(D)=>{var z=la();ve(z,21,()=>t.running,(Q)=>Q.id,(Q,v)=>{var N=na();let M;var C=o(N);{var P=(B)=>{var F=aa(),Y=o(F);Re(Y,{get id(){return e(v).id},get name(){return e(v).name},scale:4});var Z=c(Y,2);Be(Z),ft(Z,!0),d(F),Ae("focus",Z,(le)=>le.currentTarget.select()),Ae("blur",Z,()=>t.oncommitrename(e(v).id)),O("keydown",Z,(le)=>{if(le.key==="Enter")le.currentTarget.blur();else if(le.key==="Escape")t.oncancelrename()}),Te(Z,a),f(B,F)},A=(B)=>{var F=ra(),Y=o(F);Re(Y,{get id(){return e(v).id},get name(){return e(v).name},scale:4});var Z=c(Y,2),le=o(Z,!0);d(Z),d(F),_(()=>{X(F,"title",e(v).name),K(le,e(v).name)}),O("click",F,()=>t.onselect(e(v).id)),O("dblclick",F,()=>t.onstartrename(e(v))),f(B,F)};w(C,(B)=>{if(t.editingId===e(v).id)B(P);else B(A,-1)})}d(N),_(()=>M=fe(N,1,"tab svelte-r39acv",null,M,{active:e(v).id===t.active,"attn-done":e(v).id!==t.active&&t.attention[e(v).id]==="done","attn-waiting":e(v).id!==t.active&&t.attention[e(v).id]==="waiting"})),f(Q,N)}),d(z),f(D,z)};w(x,(D)=>{if(t.running.length>0)D(u)})}var I=c(x,2),T=o(I);He(T,{size:18}),d(I),_((D)=>X(I,"href",D),[()=>Fe("/settings")]),f(r,S)},$$slots:{default:!0}}),ie()}De(["keydown","click","dblclick"]);var oa=m('<div class="row svelte-w5e143"> </div>'),sa=m('<div class="stalled svelte-w5e143"><p class="svelte-w5e143">Waiting for code-server to answer inside the container.</p> <!></div>'),fa=m('<div class="loader svelte-w5e143"><div class="grid svelte-w5e143" aria-hidden="true"></div> <div class="label svelte-w5e143">Loading editor<span class="dot svelte-w5e143">.</span><span class="dot svelte-w5e143">.</span><span class="dot svelte-w5e143">.</span></div> <!></div>');function vt(i,t){te(t,!0);let a=Ne(t,"speed",3,1),r=h(!1);ne(()=>{if(t.stalledAfterMs===void 0)return;let M=setTimeout(()=>l(r,!0),t.stalledAfterMs);return()=>clearTimeout(M)});let g=3,S=22,x=140,u=7,I=L(()=>Math.max(20,x/a())),D=h(we((()=>Array.from({length:g},()=>Array.from({length:S},()=>Math.random()<0.5?0:1)))()));ne(()=>{if(window.matchMedia?.("(prefers-reduced-motion: reduce)").matches)return;let M=setInterval(()=>{let C=e(D).map((P)=>P.slice());for(let P=0;P<u;P++){let A=C[Math.floor(Math.random()*g)],B=Math.floor(Math.random()*S);A[B]=A[B]?0:1}l(D,C,!0)},e(I));return()=>clearInterval(M)});var z=fa(),Q=o(z);ve(Q,21,()=>e(D),jt,(M,C)=>{var P=oa(),A=o(P,!0);d(P),_((B)=>K(A,B),[()=>e(C).join("")]),f(M,P)}),d(Q);var v=c(Q,4);{var N=(M)=>{var C=sa(),P=c(o(C),2);{var A=(B)=>{$e(B,{size:"sm",get onclick(){return t.onoverride},children:(F,Y)=>{G();var Z=ce("Open anyway");f(F,Z)},$$slots:{default:!0}})};w(P,(B)=>{if(t.onoverride)B(A)})}d(C),f(M,C)};w(v,(M)=>{if(e(r))M(N)})}d(z),f(i,z),ie()}var ca=m('<iframe class="svelte-1duc7gd"></iframe>'),$a=m("<div><!> <!></div>"),ma=m('<div class="empty svelte-1duc7gd">No running instances.</div>'),ga=m("<div><!> <div><!> <!></div></div> <!>",1);function zt(i,t){te(t,!0);let a=h(we(t.snapshot)),r=h(we(t.preflight)),g=h(we(t.pet)),S=h(t.snapshot.length>0),x=L(()=>e(a).filter((n)=>n.status==="running")),u=h(we(Object.fromEntries(t.snapshot.map((n)=>[n.id,n.attention])))),I=h(null),T=h("");function D(n){l(I,n.id,!0),l(T,n.name,!0)}function z(){l(I,null),l(T,"")}async function Q(n){let s=e(T).trim(),R=e(a).find((U)=>U.id===n)?.name;if(!s||s===R){z();return}z();try{await ye(`/api/instances/${n}/rename`,{name:s},"Failed to rename")}catch(U){Ue.error(U.message)}}let v=h(we(t.initialPath)),N=L(()=>e(v).startsWith("/ide")),M=L(()=>e(v).startsWith("/ide/")?e(v).slice(5):""),C=L(()=>e(N)?e(x).some((n)=>n.id===e(M))?e(M):e(x)[0]?.id??"":"");function P(n){if(n===e(v))return;history.pushState({},"",n),l(v,n,!0)}ne(()=>{function n(s){if(s.defaultPrevented||s.button!==0||s.metaKey||s.ctrlKey||s.shiftKey||s.altKey)return;let R=s.target?.closest?.("a");if(!R)return;let U=R.getAttribute("href");if(!U||R.target==="_blank"||R.hasAttribute("download"))return;let de=new URL(U,location.href);if(de.origin!==location.origin)return;if(de.pathname==="/"||de.pathname.startsWith("/ide/"))s.preventDefault(),P(de.pathname)}return document.addEventListener("click",n),()=>document.removeEventListener("click",n)}),ne(()=>{function n(){l(v,location.pathname,!0)}return window.addEventListener("popstate",n),()=>window.removeEventListener("popstate",n)}),ne(()=>{if(e(x).length===0)return;function n(s){s.preventDefault(),s.returnValue=""}return window.addEventListener("beforeunload",n),()=>window.removeEventListener("beforeunload",n)});let A=new Pe;ne(()=>{if(e(C))A.add(e(C))});let B=new Pe,F=new Pe,Y=new Pe,Z=(n)=>F.has(n)||Y.has(n),le=1e4;ne(()=>{let n=e(x).find((s)=>s.id===e(C));document.title=e(N)&&n?`${n.name} — Codebay`:"Codebay"}),ne(()=>{return window.addEventListener("pointerdown",je),window.addEventListener("keydown",je),()=>{window.removeEventListener("pointerdown",je),window.removeEventListener("keydown",je)}}),ne(()=>{let n=!1;return ri((s)=>{if(s.type==="preflight"){l(r,{...e(r),docker:s.data.docker,cli:s.data.cli},!0);return}if(s.type==="pet"){l(g,ti(s.data.name??void 0),!0);return}if(s.type==="health"){let k=e(a).find((oe)=>oe.id===s.data.id);if(s.data.health.codeServerAccessible&&k?.status==="running")F.add(s.data.id);return}if(s.type!=="instances")return;let R=s.data,U=new Set(R.filter((k)=>k.status==="running").map((k)=>k.id));for(let k of[...F])if(!U.has(k))F.delete(k);for(let k of[...Y])if(!U.has(k))Y.delete(k);for(let k of[...B])if(!U.has(k))B.delete(k);let de={};for(let k of R)de[k.id]=k.attention;if(n)for(let k in de){let oe=de[k];if(oe&&oe!==e(u)[k])if(k===e(C))console.log(`[chime] attention id=${k} state=${oe} — skipped (tab is active/focused)`);else console.log(`[chime] attention id=${k} state=${oe} → playChime`),ai(oe)}else console.log("[chime] first frame after (re)connect — baselining, no chimes");n=!0,l(a,R,!0),l(u,de,!0),l(S,!0)},()=>{n=!1})}),ne(()=>{if(!e(C)||!e(u)[e(C)])return;let n=()=>{if(document.visibilityState==="visible")ye(`/api/instances/${e(C)}/attention/clear`).catch(()=>{})};return n(),document.addEventListener("visibilitychange",n),()=>document.removeEventListener("visibilitychange",n)});var Ce=ga(),ue=be(Ce);let Se;var Ee=o(ue);{var Le=(n)=>{yt(n,{get running(){return e(x)},get active(){return e(C)},get attention(){return e(u)},get editingId(){return e(I)},onselect:(s)=>P(`/ide/${s}`),onstartrename:D,oncommitrename:Q,oncancelrename:z,get editingName(){return e(T)},set editingName(s){l(T,s,!0)}})},b=(n)=>{At(n,{get preflight(){return e(r)},get instances(){return e(a)},get loaded(){return e(S)},get pet(){return e(g)}})};w(Ee,(n)=>{if(e(N))n(Le);else n(b,-1)})}var E=c(Ee,2);let y;var V=o(E);ve(V,17,()=>e(x),(n)=>n.id,(n,s)=>{var R=st(),U=be(R);{var de=(oe)=>{var ze=$a();let p;var W=o(ze);{var xe=(H)=>{var ge=ca();_((_e)=>{X(ge,"src",_e),X(ge,"title",e(s).name)},[()=>ei(e(s))]),Ae("load",ge,()=>B.add(e(s).id)),qt(ge),f(H,ge)},Je=L(()=>Z(e(s).id));w(W,(H)=>{if(e(Je))H(xe)})}var We=c(W,2);{var Ie=(H)=>{vt(H,{stalledAfterMs:le,onoverride:()=>Y.add(e(s).id)})},me=L(()=>!Z(e(s).id)),ae=(H)=>{vt(H,{})},re=L(()=>!B.has(e(s).id));w(We,(H)=>{if(e(me))H(Ie);else if(e(re))H(ae,1)})}d(ze),_(()=>p=fe(ze,1,"pane svelte-1duc7gd",null,p,{active:e(s).id===e(C)})),f(oe,ze)},k=L(()=>A.has(e(s).id));w(U,(oe)=>{if(e(k))oe(de)})}f(n,R)});var pe=c(V,2);{var he=(n)=>{var s=ma();f(n,s)};w(pe,(n)=>{if(e(N)&&e(x).length===0)n(he)})}d(E),d(ue);var $=c(ue,2);ii($,{toastOptions:{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;"}}),_(()=>{Se=fe(ue,1,"app svelte-1duc7gd",null,Se,{ide:e(N)}),y=fe(E,1,"panes svelte-1duc7gd",null,y,{hidden:!e(N)})}),f(i,Ce),ie()}ni("AppShell_2rtnxn6pgp2rh",zt);
|