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.
@@ -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-1y0r9tae.js",
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-1y0r9tae.js": "svelte-client/_hydrate-AppShell_2rtnxn6pgp2rh-1y0r9tae.js",
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-v5mwmv6t.server.js",
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-1y0r9tae.js",
866
- "size": 38145,
868
+ "name": "_hydrate-AppShell_2rtnxn6pgp2rh-fkna7bj2.js",
869
+ "size": 39308,
867
870
  "inputs": [
868
871
  {
869
872
  "path": "src/components/FolderBrowser.svelte",
870
- "size": 6589
873
+ "size": 6586
871
874
  },
872
875
  {
873
876
  "path": "src/components/AppShell.svelte",
874
- "size": 4995
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": 3605
885
+ "size": 4048
883
886
  },
884
887
  {
885
888
  "path": "src/components/CredMenu.svelte",
886
- "size": 1777
889
+ "size": 1775
887
890
  },
888
891
  {
889
892
  "path": "src/components/IdeBar.svelte",
890
- "size": 1719
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": 1477
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": "node_modules/svelte/src/reactivity/url-search-params.js",
910
- "size": 1096
912
+ "path": "src/components/TopBar.svelte",
913
+ "size": 1177
911
914
  },
912
915
  {
913
- "path": "src/components/TopBar.svelte",
914
- "size": 1034
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": 712
921
+ "size": 710
919
922
  },
920
923
  {
921
924
  "path": "node_modules/@lucide/svelte/dist/icons/component.svelte",
922
- "size": 701
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": 523
941
+ "size": 524
935
942
  },
936
943
  {
937
944
  "path": "node_modules/@lucide/svelte/dist/icons/cable.svelte",
938
- "size": 466
945
+ "size": 467
939
946
  },
940
947
  {
941
948
  "path": "src/components/Brand.svelte",
942
- "size": 449
949
+ "size": 447
943
950
  },
944
951
  {
945
952
  "path": "node_modules/@lucide/svelte/dist/icons/package.svelte",
946
- "size": 382
953
+ "size": 383
947
954
  },
948
955
  {
949
956
  "path": "node_modules/@lucide/svelte/dist/icons/folder-clock.svelte",
950
- "size": 332
957
+ "size": 333
951
958
  },
952
959
  {
953
960
  "path": "node_modules/@lucide/svelte/dist/icons/link.svelte",
954
- "size": 292
961
+ "size": 293
955
962
  },
956
963
  {
957
964
  "path": "node_modules/@lucide/svelte/dist/icons/triangle-alert.svelte",
958
- "size": 288
965
+ "size": 289
959
966
  },
960
967
  {
961
968
  "path": "node_modules/@lucide/svelte/dist/icons/folder.svelte",
962
- "size": 277
969
+ "size": 278
963
970
  },
964
971
  {
965
972
  "path": "src/components/SettingsCog.svelte",
966
- "size": 257
973
+ "size": 255
967
974
  },
968
975
  {
969
976
  "path": "node_modules/@lucide/svelte/dist/icons/git-branch.svelte",
970
- "size": 252
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": 198
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 $23 from "svelte/internal/server";
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 $22 from "svelte/internal/server";
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 $19 from "svelte/internal/server";
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 $18 from "svelte/internal/server";
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 $15 from "svelte/internal/server";
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 $14 from "svelte/internal/server";
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, $14.spread_props([{ name: "settings" }, props, { iconNode }]));
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"${$15.attr("href", withPopupMarker("/settings"))} target="_blank" rel="noopener noreferrer" aria-label="Settings" title="Settings">`);
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 $17 from "svelte/internal/server";
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 $16 from "svelte/internal/server";
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, $16.spread_props([{ name: "link" }, props, { iconNode }]));
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 = $17.derived(() => auth.filter((a) => a.available).length);
668
- const credState = $17.derived(() => authedCount() === auth.length ? "ok" : authedCount() === 0 ? "error" : "warn");
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 = $17.derived(() => credIcon[credState()]);
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${$17.attr_class(`cred ${credState()}`, "svelte-vongf9")}${$17.attr("aria-expanded", credOpen)} aria-haspopup="menu" aria-label="Credentials" title="Credentials">`);
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 = $17.ensure_array_like(auth);
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"${$17.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${$17.attr_class(`dot ${provider.available ? "on" : "off"}`, "svelte-vongf9")}></span> <span class="cred-label">${$17.escape(provider.label)}</span> <span class="cred-state svelte-vongf9">${$17.escape(provider.available ? "Authorized" : "Not found")}</span></button>`);
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(`<!---->${$18.escape(creating ? "Creating\u2026" : "New instance")}`);
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 = $19.derived(() => preflight.docker && preflight.cli);
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>${$19.escape(actionError)}</span></div>`);
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 = $19.ensure_array_like(instances);
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 $20 from "svelte/internal/server";
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 = $20.ensure_array_like(running);
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${$20.attr_class("tab svelte-r39acv", undefined, {
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"${$20.attr("value", editingName)} autofocus=""/></div>`);
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"${$20.attr("title", inst.name)}>`);
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">${$20.escape(inst.name)}</span></button>`);
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"${$20.attr("href", withPopupMarker("/settings"))} target="_blank" rel="noopener noreferrer" title="Settings" aria-label="Settings">`);
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
- $20.bind_props($$props, { editingName });
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 $21 from "svelte/internal/server";
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 = $21.derived(() => Math.max(20, BASE_TICK_MS / speed));
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 = $21.ensure_array_like(grid);
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">${$21.escape(row.join(""))}</div>`);
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 = $22.derived(() => instances.filter((i) => i.status === "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 = $22.derived(() => path.startsWith("/ide"));
1077
- const requestedId = $22.derived(() => path.startsWith("/ide/") ? path.slice("/ide/".length) : "");
1078
- const active = $22.derived(() => onIde() ? running().some((i) => i.id === requestedId()) ? requestedId() : running()[0]?.id ?? "" : "");
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${$22.attr_class("app svelte-1duc7gd", undefined, { ide: onIde() })}>`);
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${$22.attr_class("panes svelte-1duc7gd", undefined, { hidden: !onIde() })}><!--[-->`);
1119
- const each_array = $22.ensure_array_like(running());
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${$22.attr_class("pane svelte-1duc7gd", undefined, { active: inst.id === active() })}>`);
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${$22.attr("src", ideUrl(inst))}${$22.attr("title", inst.name)} class="svelte-1duc7gd" onload="this.__e=event"></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"${$23.attr("data-message", error.message)}></mochi-island-failure>`);
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__"${$23.attr("props-ref", emitIslandProps({ preflight, initialPath, snapshot, pet }))}>`);
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.6.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 instances as instance (instance.id)}
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);