claude-mux 0.30.13 → 0.30.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +14 -3
- package/dist/fleet-places.d.ts +7 -1
- package/dist/fleet-places.d.ts.map +1 -1
- package/dist/fleet-places.js +14 -1
- package/dist/fleet-places.js.map +1 -1
- package/dist/server/dictation-marks.d.ts.map +1 -1
- package/dist/server/dictation-marks.js +23 -1
- package/dist/server/dictation-marks.js.map +1 -1
- package/dist/transcript/parser.d.ts +7 -0
- package/dist/transcript/parser.d.ts.map +1 -1
- package/dist/transcript/parser.js +19 -3
- package/dist/transcript/parser.js.map +1 -1
- package/dist/transcript/past-sessions.d.ts.map +1 -1
- package/dist/transcript/past-sessions.js +4 -1
- package/dist/transcript/past-sessions.js.map +1 -1
- package/dist/utils/version.d.ts +1 -1
- package/dist/utils/version.js +1 -1
- package/dist/web/client/_app/immutable/chunks/{sULMfRFG.js → B4FaHfAQ.js} +2 -2
- package/dist/web/client/_app/immutable/chunks/{sULMfRFG.js.map → B4FaHfAQ.js.map} +1 -1
- package/dist/web/client/_app/immutable/chunks/{W5_HMZ5E.js → B5Hkb2u5.js} +2 -2
- package/dist/web/client/_app/immutable/chunks/{W5_HMZ5E.js.map → B5Hkb2u5.js.map} +1 -1
- package/{web/.svelte-kit/output/client/_app/immutable/chunks/BQzv8cqz.js → dist/web/client/_app/immutable/chunks/BOpEbBRb.js} +2 -2
- package/{web/.svelte-kit/output/client/_app/immutable/chunks/BQzv8cqz.js.map → dist/web/client/_app/immutable/chunks/BOpEbBRb.js.map} +1 -1
- package/dist/web/client/_app/immutable/chunks/{Q5yhzux8.js → BeYjnogg.js} +2 -2
- package/{web/.svelte-kit/output/client/_app/immutable/chunks/Q5yhzux8.js.map → dist/web/client/_app/immutable/chunks/BeYjnogg.js.map} +1 -1
- package/dist/web/client/_app/immutable/chunks/{VceCNUd7.js → C00rm3mY.js} +2 -2
- package/{web/.svelte-kit/output/client/_app/immutable/chunks/VceCNUd7.js.map → dist/web/client/_app/immutable/chunks/C00rm3mY.js.map} +1 -1
- package/dist/web/client/_app/immutable/chunks/{CtjkAirr.js → CKg7gbPm.js} +9 -9
- package/dist/web/client/_app/immutable/chunks/CKg7gbPm.js.map +1 -0
- package/dist/web/client/_app/immutable/chunks/CPEphjdk.js +4 -0
- package/dist/web/client/_app/immutable/chunks/CPEphjdk.js.map +1 -0
- package/dist/web/client/_app/immutable/chunks/{BQQ3-rqs.js → CPlFo88J.js} +2 -2
- package/dist/web/client/_app/immutable/chunks/{BQQ3-rqs.js.map → CPlFo88J.js.map} +1 -1
- package/dist/web/client/_app/immutable/chunks/{BvX4FYxp.js → CtnjySwS.js} +2 -2
- package/dist/web/client/_app/immutable/chunks/{BvX4FYxp.js.map → CtnjySwS.js.map} +1 -1
- package/dist/web/client/_app/immutable/chunks/{XgSsj0QY.js → D3EW0jRH.js} +2 -2
- package/{web/.svelte-kit/output/client/_app/immutable/chunks/XgSsj0QY.js.map → dist/web/client/_app/immutable/chunks/D3EW0jRH.js.map} +1 -1
- package/dist/web/client/_app/immutable/chunks/{CtlIfY1C.js → D3umr-Qr.js} +2 -2
- package/{web/.svelte-kit/output/client/_app/immutable/chunks/CtlIfY1C.js.map → dist/web/client/_app/immutable/chunks/D3umr-Qr.js.map} +1 -1
- package/dist/web/client/_app/immutable/chunks/{CM0CI9GL.js → D8-_Y-M6.js} +3 -3
- package/dist/web/client/_app/immutable/chunks/{CM0CI9GL.js.map → D8-_Y-M6.js.map} +1 -1
- package/dist/web/client/_app/immutable/chunks/{cvsGFvDx.js → DDvK7Qo9.js} +2 -2
- package/{web/.svelte-kit/output/client/_app/immutable/chunks/cvsGFvDx.js.map → dist/web/client/_app/immutable/chunks/DDvK7Qo9.js.map} +1 -1
- package/dist/web/client/_app/immutable/chunks/{CiU8KBun.js → _VFi-7U7.js} +2 -2
- package/dist/web/client/_app/immutable/chunks/{CiU8KBun.js.map → _VFi-7U7.js.map} +1 -1
- package/dist/web/client/_app/immutable/chunks/{DlENCZqZ.js → mQ6hkLuy.js} +2 -2
- package/dist/web/client/_app/immutable/chunks/{DlENCZqZ.js.map → mQ6hkLuy.js.map} +1 -1
- package/dist/web/client/_app/immutable/entry/{app.BwTbN8wB.js → app.CTFza_OS.js} +3 -3
- package/{web/.svelte-kit/output/client/_app/immutable/entry/app.BwTbN8wB.js.map → dist/web/client/_app/immutable/entry/app.CTFza_OS.js.map} +1 -1
- package/dist/web/client/_app/immutable/entry/start.B-zlkyrt.js +2 -0
- package/dist/web/client/_app/immutable/entry/start.B-zlkyrt.js.map +1 -0
- package/{web/.svelte-kit/output/client/_app/immutable/nodes/0.BnHV-ElR.js → dist/web/client/_app/immutable/nodes/0.Cztuq8Ih.js} +2 -2
- package/dist/web/client/_app/immutable/nodes/{0.BnHV-ElR.js.map → 0.Cztuq8Ih.js.map} +1 -1
- package/dist/web/client/_app/immutable/nodes/{1.Dc3ryOCf.js → 1.BOOL0V7K.js} +2 -2
- package/dist/web/client/_app/immutable/nodes/{1.Dc3ryOCf.js.map → 1.BOOL0V7K.js.map} +1 -1
- package/dist/web/client/_app/immutable/nodes/{2.DUrpAceY.js → 2.CArUpZNe.js} +2 -2
- package/dist/web/client/_app/immutable/nodes/{2.DUrpAceY.js.map → 2.CArUpZNe.js.map} +1 -1
- package/dist/web/client/_app/immutable/nodes/{3.BaCofjAn.js → 3.DSvIWalA.js} +2 -2
- package/dist/web/client/_app/immutable/nodes/{3.BaCofjAn.js.map → 3.DSvIWalA.js.map} +1 -1
- package/dist/web/client/_app/immutable/nodes/{4.v1wYkrvS.js → 4.H6RMG_cy.js} +2 -2
- package/dist/web/client/_app/immutable/nodes/{4.v1wYkrvS.js.map → 4.H6RMG_cy.js.map} +1 -1
- package/dist/web/client/_app/immutable/nodes/{5.Bn4A77jK.js → 5.BHSt0Suo.js} +2 -2
- package/dist/web/client/_app/immutable/nodes/{5.Bn4A77jK.js.map → 5.BHSt0Suo.js.map} +1 -1
- package/dist/web/client/_app/immutable/nodes/{6.C2hEoITj.js → 6.CzLoA0w7.js} +2 -2
- package/dist/web/client/_app/immutable/nodes/{6.C2hEoITj.js.map → 6.CzLoA0w7.js.map} +1 -1
- package/dist/web/client/_app/immutable/nodes/{7.BcHOjWdp.js → 7.fqq2vVa9.js} +2 -2
- package/dist/web/client/_app/immutable/nodes/{7.BcHOjWdp.js.map → 7.fqq2vVa9.js.map} +1 -1
- package/dist/web/client/_app/immutable/nodes/{8.D7NtqIYy.js → 8.DNFFjTla.js} +2 -2
- package/dist/web/client/_app/immutable/nodes/{8.D7NtqIYy.js.map → 8.DNFFjTla.js.map} +1 -1
- package/dist/web/client/_app/immutable/nodes/{9.D-211z9-.js → 9.0kMPrp2-.js} +2 -2
- package/dist/web/client/_app/immutable/nodes/{9.D-211z9-.js.map → 9.0kMPrp2-.js.map} +1 -1
- package/dist/web/client/_app/version.json +1 -1
- package/dist/web/server/chunks/{0-CvglVGCY.js → 0-B_KxXX-N.js} +14 -14
- package/dist/web/server/chunks/{0-CvglVGCY.js.map → 0-B_KxXX-N.js.map} +1 -1
- package/dist/web/server/chunks/{1-D-gJDFrG.js → 1-BmEKuUDK.js} +4 -4
- package/dist/web/server/chunks/{1-D-gJDFrG.js.map → 1-BmEKuUDK.js.map} +1 -1
- package/dist/web/server/chunks/{2-BCmEU5Qq.js → 2-BJ3dzws2.js} +13 -13
- package/dist/web/server/chunks/{2-BCmEU5Qq.js.map → 2-BJ3dzws2.js.map} +1 -1
- package/dist/web/server/chunks/{3-CHn5Kw-T.js → 3-CLYKGzT3.js} +10 -10
- package/dist/web/server/chunks/{3-CHn5Kw-T.js.map → 3-CLYKGzT3.js.map} +1 -1
- package/dist/web/server/chunks/{4-Cxg7VcZ7.js → 4-CsoWHVgX.js} +12 -12
- package/dist/web/server/chunks/{4-Cxg7VcZ7.js.map → 4-CsoWHVgX.js.map} +1 -1
- package/dist/web/server/chunks/{5-DSgvnHF_.js → 5-oPM6ncgT.js} +9 -9
- package/dist/web/server/chunks/{5-DSgvnHF_.js.map → 5-oPM6ncgT.js.map} +1 -1
- package/dist/web/server/chunks/{6-B0rymWRR.js → 6-gvgju2ZN.js} +5 -5
- package/dist/web/server/chunks/{6-B0rymWRR.js.map → 6-gvgju2ZN.js.map} +1 -1
- package/dist/web/server/chunks/{7-CNomBJux.js → 7-D8hylKrz.js} +10 -10
- package/dist/web/server/chunks/{7-CNomBJux.js.map → 7-D8hylKrz.js.map} +1 -1
- package/dist/web/server/chunks/{8-TYbX-1bO.js → 8-Br4hTtby.js} +12 -12
- package/dist/web/server/chunks/{8-TYbX-1bO.js.map → 8-Br4hTtby.js.map} +1 -1
- package/dist/web/server/chunks/{9-XGQQvTLc.js → 9-9uvmfsEs.js} +9 -9
- package/dist/web/server/chunks/{9-XGQQvTLc.js.map → 9-9uvmfsEs.js.map} +1 -1
- package/dist/web/server/chunks/{_layout.svelte-yrPX5VFm.js → _layout.svelte-DamAAFpK.js} +58 -37
- package/dist/web/server/chunks/_layout.svelte-DamAAFpK.js.map +1 -0
- package/dist/web/server/chunks/{_page.svelte-C_kFA0Lq.js → _page.svelte-DFE4jmT9.js} +4 -4
- package/dist/web/server/chunks/{_page.svelte-C_kFA0Lq.js.map → _page.svelte-DFE4jmT9.js.map} +1 -1
- package/dist/web/server/chunks/{_page.svelte-DvxpwsgS.js → _page.svelte-DHPGbCS1.js} +6 -6
- package/dist/web/server/chunks/{_page.svelte-DvxpwsgS.js.map → _page.svelte-DHPGbCS1.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-Dz01Gvhk.js → _server.ts-0RT4n9LX.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-Dz01Gvhk.js.map → _server.ts-0RT4n9LX.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-D2Tvcncu.js → _server.ts-3kbpguQ1.js} +3 -3
- package/dist/web/server/chunks/{_server.ts-D2Tvcncu.js.map → _server.ts-3kbpguQ1.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-TN_Ka6cR.js → _server.ts-4m17ESHV.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-TN_Ka6cR.js.map → _server.ts-4m17ESHV.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-Bj1Eewby.js → _server.ts-8Bs2jUgD.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-Bj1Eewby.js.map → _server.ts-8Bs2jUgD.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-BWVtnpJh.js → _server.ts-95cbXKdT.js} +3 -3
- package/dist/web/server/chunks/{_server.ts-BWVtnpJh.js.map → _server.ts-95cbXKdT.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-CyOA1rOq.js → _server.ts-B56-XF-Z.js} +3 -3
- package/dist/web/server/chunks/{_server.ts-CyOA1rOq.js.map → _server.ts-B56-XF-Z.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-1ZhqL5o8.js → _server.ts-BAC_No-1.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-1ZhqL5o8.js.map → _server.ts-BAC_No-1.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-ji7L8HUR.js → _server.ts-BCpfYsYw.js} +3 -3
- package/dist/web/server/chunks/{_server.ts-ji7L8HUR.js.map → _server.ts-BCpfYsYw.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-9iRpDv9e.js → _server.ts-BGToJuLp.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-9iRpDv9e.js.map → _server.ts-BGToJuLp.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-DQJ-tygD.js → _server.ts-BW87LYkE.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-DQJ-tygD.js.map → _server.ts-BW87LYkE.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-VgbTPrqV.js → _server.ts-BXjUy61V.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-VgbTPrqV.js.map → _server.ts-BXjUy61V.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-FoPsfjo3.js → _server.ts-BYyaN7ik.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-FoPsfjo3.js.map → _server.ts-BYyaN7ik.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-CNBy2p2U.js → _server.ts-Bjzi1JAu.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-CNBy2p2U.js.map → _server.ts-Bjzi1JAu.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-CSK1ReRS.js → _server.ts-CBU5vhD8.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-CSK1ReRS.js.map → _server.ts-CBU5vhD8.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-Cv8SUkC5.js → _server.ts-CG-7TORV.js} +3 -3
- package/dist/web/server/chunks/{_server.ts-Cv8SUkC5.js.map → _server.ts-CG-7TORV.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-DPctaiWC.js → _server.ts-COCrEIiW.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-DPctaiWC.js.map → _server.ts-COCrEIiW.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-C7uhdF7Y.js → _server.ts-CPCsEz_B.js} +4 -4
- package/dist/web/server/chunks/{_server.ts-C7uhdF7Y.js.map → _server.ts-CPCsEz_B.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-DsyqZudf.js → _server.ts-CPGa_LDW.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-DsyqZudf.js.map → _server.ts-CPGa_LDW.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-B9RfKfyc.js → _server.ts-CT1m86tm.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-B9RfKfyc.js.map → _server.ts-CT1m86tm.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-CwFbAWCg.js → _server.ts-CXzAFIps.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-CwFbAWCg.js.map → _server.ts-CXzAFIps.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-DHuyjZQx.js → _server.ts-C_H2gKKu.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-DHuyjZQx.js.map → _server.ts-C_H2gKKu.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-DVgdt6Zu.js → _server.ts-CjH9MxGk.js} +3 -3
- package/dist/web/server/chunks/{_server.ts-DVgdt6Zu.js.map → _server.ts-CjH9MxGk.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-DrFiP32b.js → _server.ts-CrQk3PtI.js} +3 -3
- package/dist/web/server/chunks/{_server.ts-DrFiP32b.js.map → _server.ts-CrQk3PtI.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-CA8nszPb.js → _server.ts-Cy5Matw4.js} +3 -3
- package/dist/web/server/chunks/{_server.ts-CA8nszPb.js.map → _server.ts-Cy5Matw4.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-CovkmnvY.js → _server.ts-D9PPu5p4.js} +3 -3
- package/dist/web/server/chunks/{_server.ts-CovkmnvY.js.map → _server.ts-D9PPu5p4.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-vhti5VvF.js → _server.ts-DGvNQ4Mq.js} +3 -3
- package/dist/web/server/chunks/{_server.ts-vhti5VvF.js.map → _server.ts-DGvNQ4Mq.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-iK8ih9Bi.js → _server.ts-DJOSnwXV.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-iK8ih9Bi.js.map → _server.ts-DJOSnwXV.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-DK-6ddNq.js → _server.ts-DPoluZc6.js} +3 -3
- package/dist/web/server/chunks/{_server.ts-DK-6ddNq.js.map → _server.ts-DPoluZc6.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-BozsVs8t.js → _server.ts-DS6kibxL.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-BozsVs8t.js.map → _server.ts-DS6kibxL.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-DozhhYwq.js → _server.ts-DUl0ucUP.js} +3 -3
- package/dist/web/server/chunks/{_server.ts-DozhhYwq.js.map → _server.ts-DUl0ucUP.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-78nODRDJ.js → _server.ts-DWj22oj9.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-78nODRDJ.js.map → _server.ts-DWj22oj9.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-CA1j9wWk.js → _server.ts-DZrVaelC.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-CA1j9wWk.js.map → _server.ts-DZrVaelC.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-CzcknkWq.js → _server.ts-DrG3j6Ao.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-CzcknkWq.js.map → _server.ts-DrG3j6Ao.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-AAllMdwT.js → _server.ts-Dwy38J9J.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-AAllMdwT.js.map → _server.ts-Dwy38J9J.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-CgChlIKq.js → _server.ts-DxGjRezI.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-CgChlIKq.js.map → _server.ts-DxGjRezI.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-KbQyErIR.js → _server.ts-XMUjHO61.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-KbQyErIR.js.map → _server.ts-XMUjHO61.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-DGTSZoLn.js → _server.ts-dvT2bXEB.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-DGTSZoLn.js.map → _server.ts-dvT2bXEB.js.map} +1 -1
- package/dist/web/server/chunks/{_server.ts-BxscGs8D.js → _server.ts-m835uDm6.js} +2 -2
- package/dist/web/server/chunks/{_server.ts-BxscGs8D.js.map → _server.ts-m835uDm6.js.map} +1 -1
- package/dist/web/server/chunks/{checkbox-DiJTAtHi.js → checkbox-BYzlWW56.js} +2 -2
- package/dist/web/server/chunks/{checkbox-DiJTAtHi.js.map → checkbox-BYzlWW56.js.map} +1 -1
- package/dist/web/server/chunks/{create-id-DpoSQWrl.js → create-id-s6T_m-1j.js} +3 -3
- package/dist/web/server/chunks/{create-id-DpoSQWrl.js.map → create-id-s6T_m-1j.js.map} +1 -1
- package/dist/web/server/chunks/{discover-DjR28OqK.js → discover-DykzHz0t.js} +2 -2
- package/dist/web/server/chunks/{discover-DjR28OqK.js.map → discover-DykzHz0t.js.map} +1 -1
- package/dist/web/server/chunks/{drafts.svelte-DsFAtH-s.js → drafts.svelte-c94J-DBB.js} +3 -3
- package/dist/web/server/chunks/{drafts.svelte-DsFAtH-s.js.map → drafts.svelte-c94J-DBB.js.map} +1 -1
- package/dist/web/server/chunks/{end-session-BbBa9yD0.js → end-session-Czy_WW42.js} +2 -2
- package/dist/web/server/chunks/{end-session-BbBa9yD0.js.map → end-session-Czy_WW42.js.map} +1 -1
- package/dist/web/server/chunks/{files-4i3igWea.js → files-DNH191y7.js} +2 -2
- package/dist/web/server/chunks/{files-4i3igWea.js.map → files-DNH191y7.js.map} +1 -1
- package/dist/web/server/chunks/{fleet-DZJSFWuH.js → fleet-CWHlZjSd.js} +4 -4
- package/dist/web/server/chunks/{fleet-DZJSFWuH.js.map → fleet-CWHlZjSd.js.map} +1 -1
- package/dist/web/server/chunks/{git-D9dLEKUF.js → git-CHO9UIOQ.js} +13 -5
- package/dist/web/server/chunks/git-CHO9UIOQ.js.map +1 -0
- package/dist/web/server/chunks/{git-history-De9t0yF-.js → git-history-CxyH4jQb.js} +2 -2
- package/dist/web/server/chunks/{git-history-De9t0yF-.js.map → git-history-CxyH4jQb.js.map} +1 -1
- package/dist/web/server/chunks/{hooks.server-C3Uglne7.js → hooks.server-DgHxEf6H.js} +6 -6
- package/dist/web/server/chunks/{hooks.server-C3Uglne7.js.map → hooks.server-DgHxEf6H.js.map} +1 -1
- package/dist/web/server/chunks/{message-queue-sFcJCRjz.js → message-queue-DhLshpoF.js} +13 -2
- package/dist/web/server/chunks/message-queue-DhLshpoF.js.map +1 -0
- package/dist/web/server/chunks/{project-CbPa8Mu7.js → project-CBPdIh2n.js} +2 -2
- package/dist/web/server/chunks/{project-CbPa8Mu7.js.map → project-CBPdIh2n.js.map} +1 -1
- package/dist/web/server/chunks/{project-icons-CSb1bfT9.js → project-icons-bWhaFSVy.js} +4 -4
- package/dist/web/server/chunks/{project-icons-CSb1bfT9.js.map → project-icons-bWhaFSVy.js.map} +1 -1
- package/dist/web/server/chunks/{push-BJ7P9DGd.js → push-LMlCp4Lc.js} +5 -5
- package/dist/web/server/chunks/{push-BJ7P9DGd.js.map → push-LMlCp4Lc.js.map} +1 -1
- package/dist/web/server/chunks/{remote-control-C1d9R3w4.js → remote-control-BvYkVDhx.js} +2 -2
- package/dist/web/server/chunks/{remote-control-C1d9R3w4.js.map → remote-control-BvYkVDhx.js.map} +1 -1
- package/dist/web/server/chunks/{start-session-CKbupnLS.js → start-session-HljgutDe.js} +3 -3
- package/dist/web/server/chunks/{start-session-CKbupnLS.js.map → start-session-HljgutDe.js.map} +1 -1
- package/dist/web/server/chunks/{version-BqEJmw2g.js → version-ox9yLZ0P.js} +2 -2
- package/dist/web/server/chunks/version-ox9yLZ0P.js.map +1 -0
- package/dist/web/server/chunks/{web-preview-Bi5fjydK.js → web-preview-H5eiWlBD.js} +2 -2
- package/dist/web/server/chunks/{web-preview-Bi5fjydK.js.map → web-preview-H5eiWlBD.js.map} +1 -1
- package/dist/web/server/chunks/{ws-handlers-zemeJ8Si.js → ws-handlers-k_sOue-0.js} +6 -5
- package/dist/web/server/chunks/ws-handlers-k_sOue-0.js.map +1 -0
- package/dist/web/server/chunks/{ws-managers-C5VXKb_r.js → ws-managers-D2qC6Gla.js} +2 -2
- package/dist/web/server/chunks/{ws-managers-C5VXKb_r.js.map → ws-managers-D2qC6Gla.js.map} +1 -1
- package/dist/web/server/chunks/{ws-messages-jOSwT1Yq.js → ws-messages-B81v2RXg.js} +7 -2
- package/dist/web/server/chunks/ws-messages-B81v2RXg.js.map +1 -0
- package/dist/web/server/index.js +2 -2
- package/dist/web/server/index.js.map +1 -1
- package/dist/web/server/manifest.js +53 -53
- package/dist/web/server/manifest.js.map +1 -1
- package/package.json +1 -1
- package/src/fleet-places.ts +17 -1
- package/src/server/dictation-marks.ts +24 -1
- package/src/transcript/parser.ts +20 -3
- package/src/transcript/past-sessions.ts +3 -1
- package/src/utils/version.ts +1 -1
- package/tests/fleet-places.test.ts +20 -0
- package/tests/server/dictation-marks.test.ts +16 -0
- package/tests/transcript/parser.test.ts +34 -0
- package/tests/transcript/past-sessions.test.ts +5 -0
- package/web/.svelte-kit/adapter-bun/chunks/git.js +13 -4
- package/web/.svelte-kit/adapter-bun/chunks/git.js.map +1 -1
- package/web/.svelte-kit/adapter-bun/chunks/internal2.js +1 -1
- package/web/.svelte-kit/adapter-bun/chunks/internal2.js.map +1 -1
- package/web/.svelte-kit/adapter-bun/chunks/message-queue.js +14 -1
- package/web/.svelte-kit/adapter-bun/chunks/message-queue.js.map +1 -1
- package/web/.svelte-kit/adapter-bun/chunks/version.js +1 -1
- package/web/.svelte-kit/adapter-bun/chunks/version.js.map +1 -1
- package/web/.svelte-kit/adapter-bun/chunks/ws-handlers.js +2 -1
- package/web/.svelte-kit/adapter-bun/chunks/ws-handlers.js.map +1 -1
- package/web/.svelte-kit/adapter-bun/chunks/ws-messages.js +6 -1
- package/web/.svelte-kit/adapter-bun/chunks/ws-messages.js.map +1 -1
- package/web/.svelte-kit/adapter-bun/entries/pages/_layout.svelte.js +72 -45
- package/web/.svelte-kit/adapter-bun/entries/pages/_layout.svelte.js.map +1 -1
- package/web/.svelte-kit/adapter-bun/manifest-full.js +1 -1
- package/web/.svelte-kit/adapter-bun/manifest.js +1 -1
- package/web/.svelte-kit/adapter-bun/nodes/0.js +1 -1
- package/web/.svelte-kit/adapter-bun/nodes/1.js +1 -1
- package/web/.svelte-kit/adapter-bun/nodes/2.js +1 -1
- package/web/.svelte-kit/adapter-bun/nodes/3.js +1 -1
- package/web/.svelte-kit/adapter-bun/nodes/4.js +1 -1
- package/web/.svelte-kit/adapter-bun/nodes/5.js +1 -1
- package/web/.svelte-kit/adapter-bun/nodes/6.js +1 -1
- package/web/.svelte-kit/adapter-bun/nodes/7.js +1 -1
- package/web/.svelte-kit/adapter-bun/nodes/8.js +1 -1
- package/web/.svelte-kit/adapter-bun/nodes/9.js +1 -1
- package/web/.svelte-kit/generated/server/internal.js +1 -1
- package/web/.svelte-kit/output/client/.vite/manifest.json +237 -237
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{sULMfRFG.js → B4FaHfAQ.js} +2 -2
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{sULMfRFG.js.map → B4FaHfAQ.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{W5_HMZ5E.js → B5Hkb2u5.js} +2 -2
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{W5_HMZ5E.js.map → B5Hkb2u5.js.map} +1 -1
- package/{dist/web/client/_app/immutable/chunks/BQzv8cqz.js → web/.svelte-kit/output/client/_app/immutable/chunks/BOpEbBRb.js} +2 -2
- package/{dist/web/client/_app/immutable/chunks/BQzv8cqz.js.map → web/.svelte-kit/output/client/_app/immutable/chunks/BOpEbBRb.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{Q5yhzux8.js → BeYjnogg.js} +2 -2
- package/{dist/web/client/_app/immutable/chunks/Q5yhzux8.js.map → web/.svelte-kit/output/client/_app/immutable/chunks/BeYjnogg.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{VceCNUd7.js → C00rm3mY.js} +2 -2
- package/{dist/web/client/_app/immutable/chunks/VceCNUd7.js.map → web/.svelte-kit/output/client/_app/immutable/chunks/C00rm3mY.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{CtjkAirr.js → CKg7gbPm.js} +9 -9
- package/web/.svelte-kit/output/client/_app/immutable/chunks/CKg7gbPm.js.map +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/CPEphjdk.js +4 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/CPEphjdk.js.map +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{BQQ3-rqs.js → CPlFo88J.js} +2 -2
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{BQQ3-rqs.js.map → CPlFo88J.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{BvX4FYxp.js → CtnjySwS.js} +2 -2
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{BvX4FYxp.js.map → CtnjySwS.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{XgSsj0QY.js → D3EW0jRH.js} +2 -2
- package/{dist/web/client/_app/immutable/chunks/XgSsj0QY.js.map → web/.svelte-kit/output/client/_app/immutable/chunks/D3EW0jRH.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{CtlIfY1C.js → D3umr-Qr.js} +2 -2
- package/{dist/web/client/_app/immutable/chunks/CtlIfY1C.js.map → web/.svelte-kit/output/client/_app/immutable/chunks/D3umr-Qr.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{CM0CI9GL.js → D8-_Y-M6.js} +3 -3
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{CM0CI9GL.js.map → D8-_Y-M6.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{cvsGFvDx.js → DDvK7Qo9.js} +2 -2
- package/{dist/web/client/_app/immutable/chunks/cvsGFvDx.js.map → web/.svelte-kit/output/client/_app/immutable/chunks/DDvK7Qo9.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{CiU8KBun.js → _VFi-7U7.js} +2 -2
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{CiU8KBun.js.map → _VFi-7U7.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{DlENCZqZ.js → mQ6hkLuy.js} +2 -2
- package/web/.svelte-kit/output/client/_app/immutable/chunks/{DlENCZqZ.js.map → mQ6hkLuy.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/entry/{app.BwTbN8wB.js → app.CTFza_OS.js} +3 -3
- package/{dist/web/client/_app/immutable/entry/app.BwTbN8wB.js.map → web/.svelte-kit/output/client/_app/immutable/entry/app.CTFza_OS.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/entry/start.B-zlkyrt.js +2 -0
- package/web/.svelte-kit/output/client/_app/immutable/entry/start.B-zlkyrt.js.map +1 -0
- package/{dist/web/client/_app/immutable/nodes/0.BnHV-ElR.js → web/.svelte-kit/output/client/_app/immutable/nodes/0.Cztuq8Ih.js} +2 -2
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{0.BnHV-ElR.js.map → 0.Cztuq8Ih.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{1.Dc3ryOCf.js → 1.BOOL0V7K.js} +2 -2
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{1.Dc3ryOCf.js.map → 1.BOOL0V7K.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{2.DUrpAceY.js → 2.CArUpZNe.js} +2 -2
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{2.DUrpAceY.js.map → 2.CArUpZNe.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{3.BaCofjAn.js → 3.DSvIWalA.js} +2 -2
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{3.BaCofjAn.js.map → 3.DSvIWalA.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/4.H6RMG_cy.js +2 -0
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{4.v1wYkrvS.js.map → 4.H6RMG_cy.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/5.BHSt0Suo.js +2 -0
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{5.Bn4A77jK.js.map → 5.BHSt0Suo.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{6.C2hEoITj.js → 6.CzLoA0w7.js} +2 -2
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{6.C2hEoITj.js.map → 6.CzLoA0w7.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{7.BcHOjWdp.js → 7.fqq2vVa9.js} +2 -2
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{7.BcHOjWdp.js.map → 7.fqq2vVa9.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/8.DNFFjTla.js +2 -0
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{8.D7NtqIYy.js.map → 8.DNFFjTla.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/9.0kMPrp2-.js +2 -0
- package/web/.svelte-kit/output/client/_app/immutable/nodes/{9.D-211z9-.js.map → 9.0kMPrp2-.js.map} +1 -1
- package/web/.svelte-kit/output/client/_app/version.json +1 -1
- package/web/.svelte-kit/output/server/chunks/git.js +13 -4
- package/web/.svelte-kit/output/server/chunks/git.js.map +1 -1
- package/web/.svelte-kit/output/server/chunks/internal2.js +1 -1
- package/web/.svelte-kit/output/server/chunks/internal2.js.map +1 -1
- package/web/.svelte-kit/output/server/chunks/message-queue.js +14 -1
- package/web/.svelte-kit/output/server/chunks/message-queue.js.map +1 -1
- package/web/.svelte-kit/output/server/chunks/version.js +1 -1
- package/web/.svelte-kit/output/server/chunks/version.js.map +1 -1
- package/web/.svelte-kit/output/server/chunks/ws-handlers.js +2 -1
- package/web/.svelte-kit/output/server/chunks/ws-handlers.js.map +1 -1
- package/web/.svelte-kit/output/server/chunks/ws-messages.js +6 -1
- package/web/.svelte-kit/output/server/chunks/ws-messages.js.map +1 -1
- package/web/.svelte-kit/output/server/entries/pages/_layout.svelte.js +72 -45
- package/web/.svelte-kit/output/server/entries/pages/_layout.svelte.js.map +1 -1
- package/web/.svelte-kit/output/server/manifest-full.js +1 -1
- package/web/.svelte-kit/output/server/manifest.js +1 -1
- package/web/.svelte-kit/output/server/nodes/0.js +1 -1
- package/web/.svelte-kit/output/server/nodes/1.js +1 -1
- package/web/.svelte-kit/output/server/nodes/2.js +1 -1
- package/web/.svelte-kit/output/server/nodes/3.js +1 -1
- package/web/.svelte-kit/output/server/nodes/4.js +1 -1
- package/web/.svelte-kit/output/server/nodes/5.js +1 -1
- package/web/.svelte-kit/output/server/nodes/6.js +1 -1
- package/web/.svelte-kit/output/server/nodes/7.js +1 -1
- package/web/.svelte-kit/output/server/nodes/8.js +1 -1
- package/web/.svelte-kit/output/server/nodes/9.js +1 -1
- package/web/src/lib/components/AllSessionsPanel.svelte +9 -1
- package/web/src/lib/components/FolderPicker.svelte +49 -21
- package/dist/web/client/_app/immutable/chunks/CtjkAirr.js.map +0 -1
- package/dist/web/client/_app/immutable/chunks/Dck--FBb.js +0 -4
- package/dist/web/client/_app/immutable/chunks/Dck--FBb.js.map +0 -1
- package/dist/web/client/_app/immutable/entry/start.B2ZPizAt.js +0 -2
- package/dist/web/client/_app/immutable/entry/start.B2ZPizAt.js.map +0 -1
- package/dist/web/server/chunks/_layout.svelte-yrPX5VFm.js.map +0 -1
- package/dist/web/server/chunks/git-D9dLEKUF.js.map +0 -1
- package/dist/web/server/chunks/message-queue-sFcJCRjz.js.map +0 -1
- package/dist/web/server/chunks/version-BqEJmw2g.js.map +0 -1
- package/dist/web/server/chunks/ws-handlers-zemeJ8Si.js.map +0 -1
- package/dist/web/server/chunks/ws-messages-jOSwT1Yq.js.map +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/CtjkAirr.js.map +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/chunks/Dck--FBb.js +0 -4
- package/web/.svelte-kit/output/client/_app/immutable/chunks/Dck--FBb.js.map +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/entry/start.B2ZPizAt.js +0 -2
- package/web/.svelte-kit/output/client/_app/immutable/entry/start.B2ZPizAt.js.map +0 -1
- package/web/.svelte-kit/output/client/_app/immutable/nodes/4.v1wYkrvS.js +0 -2
- package/web/.svelte-kit/output/client/_app/immutable/nodes/5.Bn4A77jK.js +0 -2
- package/web/.svelte-kit/output/client/_app/immutable/nodes/8.D7NtqIYy.js +0 -2
- package/web/.svelte-kit/output/client/_app/immutable/nodes/9.D-211z9-.js +0 -2
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Dck--FBb.js","sources":["../../../../../../../node_modules/.bun/runed@0.35.1+ec0a64a97e9eb16b/node_modules/runed/dist/utilities/extract/extract.svelte.js","../../../../../../../node_modules/.bun/runed@0.35.1+ec0a64a97e9eb16b/node_modules/runed/dist/utilities/use-debounce/use-debounce.svelte.js","../../../../../../../node_modules/.bun/runed@0.35.1+ec0a64a97e9eb16b/node_modules/runed/dist/utilities/is-mounted/is-mounted.svelte.js","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/avatar/avatar.svelte.js","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/avatar/components/avatar.svelte","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/avatar/components/avatar-image.svelte","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/avatar/components/avatar-fallback.svelte","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/command/utils.js","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/internal/css-escape.js","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/command/command.svelte.js","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/command/components/_command-label.svelte","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/command/components/command.svelte","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/command/components/command-empty.svelte","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/command/components/command-group.svelte","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/command/components/command-group-heading.svelte","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/command/components/command-group-items.svelte","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/command/components/command-input.svelte","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/command/components/command-item.svelte","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/command/components/command-list.svelte","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/command/compute-command-score.js","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/internal/svelte-resize-observer.svelte.js","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/utilities/presence-layer/presence.svelte.js","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/utilities/presence-layer/presence-layer.svelte","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/internal/clamp.js","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/internal/state-machine.js","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/scroll-area/scroll-area.svelte.js","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/scroll-area/components/scroll-area.svelte","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/scroll-area/components/scroll-area-viewport.svelte","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/scroll-area/components/scroll-area-scrollbar-shared.svelte","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/scroll-area/components/scroll-area-scrollbar-x.svelte","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/scroll-area/components/scroll-area-scrollbar-y.svelte","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/scroll-area/components/scroll-area-scrollbar-visible.svelte","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/scroll-area/components/scroll-area-scrollbar-auto.svelte","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/scroll-area/components/scroll-area-scrollbar-scroll.svelte","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/scroll-area/components/scroll-area-scrollbar-hover.svelte","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/scroll-area/components/scroll-area-scrollbar.svelte","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/scroll-area/components/scroll-area-thumb-impl.svelte","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/scroll-area/components/scroll-area-thumb.svelte","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/scroll-area/components/scroll-area-corner-impl.svelte","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/scroll-area/components/scroll-area-corner.svelte","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/tabs/tabs.svelte.js","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/tabs/components/tabs.svelte","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/tabs/components/tabs-list.svelte","../../../../../../../node_modules/.bun/bits-ui@2.20.2+2df16ea90105ef5c/node_modules/bits-ui/dist/bits/tabs/components/tabs-trigger.svelte","../../../../../../src/lib/components/SessionRow.svelte","../../../../../../src/lib/components/SubagentRow.svelte","../../../../../../src/lib/components/MachineFilter.svelte","../../../../../../../src/folder-marks.ts","../../../../../../../src/folder-name.ts","../../../../../../src/lib/components/ui/scroll-area/scroll-area-scrollbar.svelte","../../../../../../src/lib/components/ui/scroll-area/scroll-area.svelte","../../../../../../src/lib/components/ui/tabs/tabs-trigger.svelte","../../../../../../src/lib/components/ui/tabs/tabs.svelte","../../../../../../src/lib/components/ui/tabs/tabs-list.svelte","../../../../../../src/lib/components/ui/avatar/avatar-fallback.svelte","../../../../../../src/lib/components/ui/avatar/avatar-image.svelte","../../../../../../src/lib/components/ui/avatar/avatar.svelte","../../../../../../src/lib/components/ProjectTile.svelte","../../../../../../src/lib/components/FolderPicker.svelte","../../../../../../src/lib/components/NeedsYou.svelte","../../../../../../../src/fleet-rail.ts","../../../../../../src/lib/components/ProjectRail.svelte","../../../../../../src/lib/components/ui/command/command.svelte","../../../../../../src/lib/components/ui/command/command-dialog.svelte","../../../../../../src/lib/components/ui/command/command-empty.svelte","../../../../../../src/lib/components/ui/command/command-group.svelte","../../../../../../src/lib/components/ui/input-group/input-group-addon.svelte","../../../../../../src/lib/components/ui/input-group/input-group-button.svelte","../../../../../../src/lib/components/ui/input-group/input-group-input.svelte","../../../../../../src/lib/components/ui/input-group/input-group.svelte","../../../../../../../node_modules/.bun/@lucide+svelte@0.561.0+ec0a64a97e9eb16b/node_modules/@lucide/svelte/dist/icons/search.svelte","../../../../../../src/lib/components/ui/command/command-input.svelte","../../../../../../src/lib/components/ui/command/command-item.svelte","../../../../../../src/lib/components/ui/command/command-list.svelte","../../../../../../src/lib/components/QuickSwitch.svelte","../../../../../../src/lib/stores/quick-switch.svelte.ts","../../../../../../src/lib/stores/split.svelte.ts","../../../../../../src/lib/components/AllSessionsPanel.svelte"],"sourcesContent":["import { isFunction } from \"../../internal/utils/is.js\";\nexport function extract(value, defaultValue) {\n if (isFunction(value)) {\n const getter = value;\n const gotten = getter();\n if (gotten === undefined)\n return defaultValue;\n return gotten;\n }\n if (value === undefined)\n return defaultValue;\n return value;\n}\n","import { extract } from \"../extract/extract.svelte.js\";\n/**\n * Function that takes a callback, and returns a debounced version of it.\n * When calling the debounced function, it will wait for the specified time\n * before calling the original callback. If the debounced function is called\n * again before the time has passed, the timer will be reset.\n *\n * You can await the debounced function to get the value when it is eventually\n * called.\n *\n * The second parameter is the time to wait before calling the original callback.\n * Alternatively, it can also be a getter function that returns the time to wait.\n *\n * @see {@link https://runed.dev/docs/utilities/use-debounce}\n *\n * @param callback The callback to call when the time has passed.\n * @param wait The length of time to wait in ms, defaults to 250.\n */\nexport function useDebounce(callback, wait) {\n let context = $state(null);\n const wait$ = $derived(extract(wait, 250));\n function debounced(...args) {\n if (context) {\n // Old context will be reused so callers awaiting the promise will get the\n // new value\n if (context.timeout) {\n clearTimeout(context.timeout);\n }\n }\n else {\n // No old context, create a new one\n let resolve;\n let reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n context = {\n timeout: null,\n runner: null,\n promise,\n resolve: resolve,\n reject: reject,\n };\n }\n context.runner = async () => {\n // Grab the context and reset it\n // -> new debounced calls will create a new context\n if (!context)\n return;\n const ctx = context;\n context = null;\n try {\n ctx.resolve(await callback.apply(this, args));\n }\n catch (error) {\n ctx.reject(error);\n }\n };\n context.timeout = setTimeout(context.runner, wait$);\n return context.promise;\n }\n debounced.cancel = async () => {\n if (!context || context.timeout === null) {\n // Wait one event loop to see if something triggered the debounced function\n await new Promise((resolve) => setTimeout(resolve, 0));\n if (!context || context.timeout === null)\n return;\n }\n clearTimeout(context.timeout);\n context.reject(\"Cancelled\");\n context = null;\n };\n debounced.runScheduledNow = async () => {\n if (!context || !context.timeout) {\n // Wait one event loop to see if something triggered the debounced function\n await new Promise((resolve) => setTimeout(resolve, 0));\n if (!context || !context.timeout)\n return;\n }\n clearTimeout(context.timeout);\n context.timeout = null;\n await context.runner?.();\n };\n Object.defineProperty(debounced, \"pending\", {\n enumerable: true,\n get() {\n return !!context?.timeout;\n },\n });\n return debounced;\n}\n","import { untrack } from \"svelte\";\n/**\n * Returns an object with the mounted state of the component\n * that invokes this function.\n *\n * @see {@link https://runed.dev/docs/utilities/is-mounted}\n */\nexport class IsMounted {\n #isMounted = $state(false);\n constructor() {\n $effect(() => {\n untrack(() => (this.#isMounted = true));\n return () => {\n this.#isMounted = false;\n };\n });\n }\n get current() {\n return this.#isMounted;\n }\n}\n","import { DOMContext, attachRef, } from \"svelte-toolbelt\";\nimport { Context, watch } from \"runed\";\nimport { createBitsAttrs } from \"../../internal/attrs.js\";\nconst avatarAttrs = createBitsAttrs({\n component: \"avatar\",\n parts: [\"root\", \"image\", \"fallback\"],\n});\nconst AvatarRootContext = new Context(\"Avatar.Root\");\nexport class AvatarRootState {\n static create(opts) {\n return AvatarRootContext.set(new AvatarRootState(opts));\n }\n opts;\n domContext;\n attachment;\n constructor(opts) {\n this.opts = opts;\n this.domContext = new DOMContext(this.opts.ref);\n this.loadImage = this.loadImage.bind(this);\n this.attachment = attachRef(this.opts.ref);\n }\n loadImage(src, crossorigin, referrerPolicy) {\n if (this.opts.loadingStatus.current === \"loaded\")\n return;\n let imageTimerId;\n const image = new Image();\n image.src = src;\n if (crossorigin !== undefined)\n image.crossOrigin = crossorigin;\n if (referrerPolicy)\n image.referrerPolicy = referrerPolicy;\n this.opts.loadingStatus.current = \"loading\";\n image.onload = () => {\n imageTimerId = this.domContext.setTimeout(() => {\n this.opts.loadingStatus.current = \"loaded\";\n }, this.opts.delayMs.current);\n };\n image.onerror = () => {\n this.opts.loadingStatus.current = \"error\";\n };\n return () => {\n // Detach the handlers before anything else: the request may still be in\n // flight, and `onload` would otherwise fire after teardown and reach\n // `domContext`'s destroyed `$derived` via `setTimeout` → `derived_inert`.\n image.onload = null;\n image.onerror = null;\n if (!imageTimerId)\n return;\n this.domContext.clearTimeout(imageTimerId);\n };\n }\n props = $derived.by(() => ({\n id: this.opts.id.current,\n [avatarAttrs.root]: \"\",\n \"data-status\": this.opts.loadingStatus.current,\n ...this.attachment,\n }));\n}\nexport class AvatarImageState {\n static create(opts) {\n return new AvatarImageState(opts, AvatarRootContext.get());\n }\n opts;\n root;\n attachment;\n constructor(opts, root) {\n this.opts = opts;\n this.root = root;\n this.attachment = attachRef(this.opts.ref);\n watch.pre([() => this.opts.src.current, () => this.opts.crossOrigin.current], ([src, crossOrigin]) => {\n if (!src) {\n this.root.opts.loadingStatus.current = \"error\";\n return;\n }\n // Returned so the watch runs it on re-run and on destroy. Without this\n // the cleanup `loadImage` builds was constructed and then dropped, so\n // a `src` change left the previous image's handlers attached.\n return this.root.loadImage(src, crossOrigin, this.opts.referrerPolicy.current);\n });\n }\n props = $derived.by(() => ({\n id: this.opts.id.current,\n style: {\n display: this.root.opts.loadingStatus.current === \"loaded\" ? \"block\" : \"none\",\n },\n \"data-status\": this.root.opts.loadingStatus.current,\n [avatarAttrs.image]: \"\",\n src: this.opts.src.current,\n crossorigin: this.opts.crossOrigin.current,\n referrerpolicy: this.opts.referrerPolicy.current,\n ...this.attachment,\n }));\n}\nexport class AvatarFallbackState {\n static create(opts) {\n return new AvatarFallbackState(opts, AvatarRootContext.get());\n }\n opts;\n root;\n attachment;\n constructor(opts, root) {\n this.opts = opts;\n this.root = root;\n this.attachment = attachRef(this.opts.ref);\n }\n style = $derived.by(() => this.root.opts.loadingStatus.current === \"loaded\" ? { display: \"none\" } : undefined);\n props = $derived.by(() => ({\n style: this.style,\n \"data-status\": this.root.opts.loadingStatus.current,\n [avatarAttrs.fallback]: \"\",\n ...this.attachment,\n }));\n}\n","<script lang=\"ts\">\n\timport { boxWith, mergeProps } from \"svelte-toolbelt\";\n\timport type { AvatarRootProps } from \"../types.js\";\n\timport { AvatarRootState } from \"../avatar.svelte.js\";\n\timport { createId } from \"../../../internal/create-id.js\";\n\n\tconst uid = $props.id();\n\n\tlet {\n\t\tdelayMs = 0,\n\t\tloadingStatus = $bindable(\"loading\"),\n\t\tonLoadingStatusChange,\n\t\tchild,\n\t\tchildren,\n\t\tid = createId(uid),\n\t\tref = $bindable(null),\n\t\t...restProps\n\t}: AvatarRootProps = $props();\n\n\tconst rootState = AvatarRootState.create({\n\t\tdelayMs: boxWith(() => delayMs),\n\t\tloadingStatus: boxWith(\n\t\t\t() => loadingStatus,\n\t\t\t(v) => {\n\t\t\t\tif (loadingStatus !== v) {\n\t\t\t\t\tloadingStatus = v;\n\t\t\t\t\tonLoadingStatusChange?.(v);\n\t\t\t\t}\n\t\t\t}\n\t\t),\n\t\tid: boxWith(() => id),\n\t\tref: boxWith(\n\t\t\t() => ref,\n\t\t\t(v) => (ref = v)\n\t\t),\n\t});\n\n\tconst mergedProps = $derived(mergeProps(restProps, rootState.props));\n</script>\n\n{#if child}\n\t{@render child({ props: mergedProps })}\n{:else}\n\t<div {...mergedProps}>\n\t\t{@render children?.()}\n\t</div>\n{/if}\n","<script lang=\"ts\">\n\timport { boxWith, mergeProps } from \"svelte-toolbelt\";\n\timport type { AvatarImageProps } from \"../types.js\";\n\timport { AvatarImageState } from \"../avatar.svelte.js\";\n\timport { createId } from \"../../../internal/create-id.js\";\n\n\tconst uid = $props.id();\n\n\tlet {\n\t\tsrc,\n\t\tchild,\n\t\tid = createId(uid),\n\t\tref = $bindable(null),\n\t\tcrossorigin = undefined,\n\t\treferrerpolicy = undefined,\n\t\t...restProps\n\t}: AvatarImageProps = $props();\n\n\tconst imageState = AvatarImageState.create({\n\t\tsrc: boxWith(() => src),\n\t\tid: boxWith(() => id),\n\t\tref: boxWith(\n\t\t\t() => ref,\n\t\t\t(v) => (ref = v)\n\t\t),\n\t\tcrossOrigin: boxWith(() => crossorigin),\n\t\treferrerPolicy: boxWith(() => referrerpolicy),\n\t});\n\n\tconst mergedProps = $derived(mergeProps(restProps, imageState.props));\n</script>\n\n{#if child}\n\t{@render child({ props: mergedProps })}\n{:else}\n\t<img {...mergedProps} {src} />\n{/if}\n","<script lang=\"ts\">\n\timport { boxWith, mergeProps } from \"svelte-toolbelt\";\n\timport type { AvatarFallbackProps } from \"../types.js\";\n\timport { AvatarFallbackState } from \"../avatar.svelte.js\";\n\timport { createId } from \"../../../internal/create-id.js\";\n\n\tconst uid = $props.id();\n\n\tlet {\n\t\tchildren,\n\t\tchild,\n\t\tid = createId(uid),\n\t\tref = $bindable(null),\n\t\t...restProps\n\t}: AvatarFallbackProps = $props();\n\n\tconst fallbackState = AvatarFallbackState.create({\n\t\tid: boxWith(() => id),\n\t\tref: boxWith(\n\t\t\t() => ref,\n\t\t\t(v) => (ref = v)\n\t\t),\n\t});\n\n\tconst mergedProps = $derived(mergeProps(restProps, fallbackState.props));\n</script>\n\n{#if child}\n\t{@render child({ props: mergedProps })}\n{:else}\n\t<span {...mergedProps}>\n\t\t{@render children?.()}\n\t</span>\n{/if}\n","export function findNextSibling(el, selector) {\n let sibling = el.nextElementSibling;\n while (sibling) {\n if (sibling.matches(selector))\n return sibling;\n sibling = sibling.nextElementSibling;\n }\n}\nexport function findPreviousSibling(el, selector) {\n let sibling = el.previousElementSibling;\n while (sibling) {\n if (sibling.matches(selector))\n return sibling;\n sibling = sibling.previousElementSibling;\n }\n}\nexport function findFirstStartMarkerWithImmediateSiblingAsEnd(el, type) {\n const startMarkers = el.querySelectorAll(`[data-bits-command-${type}-start]`);\n for (const startMarker of startMarkers) {\n const endMarker = startMarker.nextElementSibling;\n if (endMarker && endMarker.hasAttribute(`data-bits-command-${type}-end`)) {\n return startMarker;\n }\n }\n return null;\n}\n","/**\n * https://github.com/mathiasbynens/CSS.escape\n *\n * @param value - The value to escape for use as a CSS identifier\n * @returns The escaped CSS identifier string\n */\nexport function cssEscape(value) {\n if (typeof CSS !== \"undefined\" && typeof CSS.escape === \"function\") {\n return CSS.escape(value);\n }\n const length = value.length;\n let index = -1;\n let codeUnit;\n let result = \"\";\n const firstCodeUnit = value.charCodeAt(0);\n // If the character is the first character and is a `-` (U+002D), and\n // there is no second character, escape it\n if (length === 1 && firstCodeUnit === 0x002d)\n return \"\\\\\" + value;\n while (++index < length) {\n codeUnit = value.charCodeAt(index);\n // If the character is NULL (U+0000), then the REPLACEMENT CHARACTER (U+FFFD)\n if (codeUnit === 0x0000) {\n result += \"\\uFFFD\";\n continue;\n }\n if (\n // If the character is in the range [\\1-\\1F] (U+0001 to U+001F) or is U+007F\n (codeUnit >= 0x0001 && codeUnit <= 0x001f) ||\n codeUnit === 0x007f ||\n // If the character is the first character and is in the range [0-9] (U+0030 to U+0039)\n (index === 0 && codeUnit >= 0x0030 && codeUnit <= 0x0039) ||\n // If the character is the second character and is in the range [0-9] (U+0030 to U+0039)\n // and the first character is a `-` (U+002D)\n (index === 1 && codeUnit >= 0x0030 && codeUnit <= 0x0039 && firstCodeUnit === 0x002d)) {\n // https://drafts.csswg.org/cssom/#escape-a-character-as-code-point\n result += \"\\\\\" + codeUnit.toString(16) + \" \";\n continue;\n }\n // If the character is not handled by one of the above rules and is\n // greater than or equal to U+0080, is `-` (U+002D) or `_` (U+005F), or\n // is in one of the ranges [0-9] (U+0030 to U+0039), [A-Z] (U+0041 to U+005A),\n // or [a-z] (U+0061 to U+007A)\n if (codeUnit >= 0x0080 ||\n codeUnit === 0x002d ||\n codeUnit === 0x005f ||\n (codeUnit >= 0x0030 && codeUnit <= 0x0039) ||\n (codeUnit >= 0x0041 && codeUnit <= 0x005a) ||\n (codeUnit >= 0x0061 && codeUnit <= 0x007a)) {\n // Use the character itself\n result += value.charAt(index);\n continue;\n }\n // Otherwise, escape the character\n // https://drafts.csswg.org/cssom/#escape-a-character\n result += \"\\\\\" + value.charAt(index);\n }\n return result;\n}\n","import { afterSleep, afterTick, onDestroyEffect, srOnlyStyles, attachRef, } from \"svelte-toolbelt\";\nimport { Context, watch } from \"runed\";\nimport { findNextSibling, findPreviousSibling } from \"./utils.js\";\nimport { kbd } from \"../../internal/kbd.js\";\nimport { createBitsAttrs, boolToStr, boolToEmptyStrOrUndef } from \"../../internal/attrs.js\";\nimport { getFirstNonCommentChild } from \"../../internal/dom.js\";\nimport { computeCommandScore } from \"./index.js\";\nimport { cssEscape } from \"../../internal/css-escape.js\";\nconst COMMAND_VALUE_ATTR = \"data-value\";\nconst commandAttrs = createBitsAttrs({\n component: \"command\",\n parts: [\n \"root\",\n \"list\",\n \"input\",\n \"separator\",\n \"loading\",\n \"empty\",\n \"group\",\n \"group-items\",\n \"group-heading\",\n \"item\",\n \"viewport\",\n \"input-label\",\n ],\n});\n// selectors\nconst COMMAND_GROUP_SELECTOR = commandAttrs.selector(\"group\");\nconst COMMAND_GROUP_ITEMS_SELECTOR = commandAttrs.selector(\"group-items\");\nconst COMMAND_GROUP_HEADING_SELECTOR = commandAttrs.selector(\"group-heading\");\nconst COMMAND_ITEM_SELECTOR = commandAttrs.selector(\"item\");\nconst COMMAND_VALID_ITEM_SELECTOR = `${commandAttrs.selector(\"item\")}:not([aria-disabled=\"true\"])`;\nconst CommandRootContext = new Context(\"Command.Root\");\nconst CommandListContext = new Context(\"Command.List\");\nconst CommandGroupContainerContext = new Context(\"Command.Group\");\nconst defaultState = {\n /** Value of the search query */\n search: \"\",\n /** Currently selected item value */\n value: \"\",\n filtered: {\n /** The count of all visible items. */\n count: 0,\n /** Map from visible item id to its search store. */\n items: new Map(),\n /** Set of groups with at least one visible item. */\n groups: new Set(),\n },\n};\nexport class CommandRootState {\n static create(opts) {\n return CommandRootContext.set(new CommandRootState(opts));\n }\n opts;\n attachment;\n #updateScheduled = false;\n #isInitialMount = true;\n #isDestroyed = false;\n sortAfterTick = false;\n sortAndFilterAfterTick = false;\n allItems = new Set();\n allGroups = new Map();\n allIds = new Map();\n // attempt to prevent the harsh delay when user is typing fast\n key = $state(0);\n viewportNode = $state(null);\n inputNode = $state(null);\n labelNode = $state(null);\n // published state that the components and other things can react to\n commandState = $state.raw(defaultState);\n // internal state that we mutate in batches and publish to the `state` at once\n _commandState = $state(defaultState);\n #snapshot() {\n return $state.snapshot(this._commandState);\n }\n /** `afterTick` that skips `fn` if the root was destroyed in the meantime. */\n #afterTick(fn) {\n afterTick(() => {\n if (this.#isDestroyed)\n return;\n fn();\n });\n }\n #scheduleUpdate() {\n if (this.#updateScheduled)\n return;\n this.#updateScheduled = true;\n this.#afterTick(() => {\n this.#updateScheduled = false;\n const currentState = this.#snapshot();\n const hasStateChanged = !Object.is(this.commandState, currentState);\n if (hasStateChanged) {\n this.commandState = currentState;\n this.opts.onStateChange?.current?.(currentState);\n }\n });\n }\n setState(key, value, preventScroll) {\n if (Object.is(this._commandState[key], value))\n return;\n this._commandState[key] = value;\n if (key === \"search\") {\n // Filter synchronously before emitting back to children\n this.#filterItems();\n this.#sort({ forceSelectFirst: !this.#isInitialMount });\n }\n else if (key === \"value\") {\n if (!preventScroll)\n this.#scrollSelectedIntoView();\n }\n this.#scheduleUpdate();\n }\n constructor(opts) {\n this.opts = opts;\n this.attachment = attachRef(this.opts.ref);\n const defaults = { ...this._commandState, value: this.opts.value.current ?? \"\" };\n this._commandState = defaults;\n this.commandState = defaults;\n this.onkeydown = this.onkeydown.bind(this);\n onDestroyEffect(() => {\n this.#isDestroyed = true;\n });\n }\n /**\n * Calculates score for an item based on search text and keywords.\n * Higher score = better match.\n *\n * @param value - Item's display text\n * @param keywords - Optional keywords to boost scoring\n * @returns Score from 0-1, where 0 = no match\n */\n #score(value, keywords) {\n const filter = this.opts.filter.current ?? computeCommandScore;\n const score = value ? filter(value, this._commandState.search, keywords) : 0;\n return score;\n }\n /**\n * Sorts items and groups based on search scores.\n * Groups are sorted by their highest scoring item.\n * When no search is active, preserves the current item unless a reset is requested.\n */\n #sort(opts = {}) {\n if (!this._commandState.search || this.opts.shouldFilter.current === false) {\n // if no search and no initial value set or when clearing search,\n // we select the first item.\n if (!this._commandState.value || opts.forceSelectFirst) {\n this.#selectFirstItem();\n }\n else if (this.#isInitialMount && this._commandState.value) {\n // scroll the initial value into view if it exists\n this.#scrollInitialValue();\n }\n return;\n }\n const scores = this._commandState.filtered.items;\n // sort the groups\n const groups = [];\n for (const value of this._commandState.filtered.groups) {\n const items = this.allGroups.get(value);\n let max = 0;\n if (!items) {\n groups.push([value, max]);\n continue;\n }\n // get the max score of the group's items\n for (const item of items) {\n const score = scores.get(item);\n max = Math.max(score ?? 0, max);\n }\n groups.push([value, max]);\n }\n // Sort items within groups to bottom\n // Sort items outside of groups\n // Sort groups to bottom (pushes all non-grouped items to the top)\n const listInsertionElement = this.viewportNode;\n const sorted = this.getValidItems().sort((a, b) => {\n const valueA = a.getAttribute(\"data-value\");\n const valueB = b.getAttribute(\"data-value\");\n const scoresA = scores.get(valueA) ?? 0;\n const scoresB = scores.get(valueB) ?? 0;\n return scoresB - scoresA;\n });\n for (const item of sorted) {\n const group = item.closest(COMMAND_GROUP_ITEMS_SELECTOR);\n if (group) {\n const itemToAppend = item.parentElement === group\n ? item\n : item.closest(`${COMMAND_GROUP_ITEMS_SELECTOR} > *`);\n if (itemToAppend) {\n group.appendChild(itemToAppend);\n }\n }\n else {\n const itemToAppend = item.parentElement === listInsertionElement\n ? item\n : item.closest(`${COMMAND_GROUP_ITEMS_SELECTOR} > *`);\n if (itemToAppend) {\n listInsertionElement?.appendChild(itemToAppend);\n }\n }\n }\n const sortedGroups = groups.sort((a, b) => b[1] - a[1]);\n for (const group of sortedGroups) {\n const element = listInsertionElement?.querySelector(`${COMMAND_GROUP_SELECTOR}[${COMMAND_VALUE_ATTR}=\"${cssEscape(group[0])}\"]`);\n element?.parentElement?.appendChild(element);\n }\n this.#selectFirstItem();\n }\n /**\n * Sets current value and triggers re-render if cleared.\n *\n * @param value - New value to set\n */\n setValue(value, opts) {\n if (value !== this.opts.value.current && value === \"\") {\n this.#afterTick(() => {\n this.key++;\n });\n }\n this.setState(\"value\", value, opts);\n this.opts.value.current = value;\n }\n /**\n * Selects first non-disabled item on next tick.\n */\n #selectFirstItem() {\n this.#afterTick(() => {\n const item = this.getValidItems().find((item) => item.getAttribute(\"aria-disabled\") !== \"true\");\n const value = item?.getAttribute(COMMAND_VALUE_ATTR);\n const shouldPreventScroll = this.#isInitialMount && this.opts.disableInitialScroll.current;\n this.setValue(value ?? \"\", shouldPreventScroll);\n this.#isInitialMount = false;\n });\n }\n #selectFirstItemIfValueMissing(value) {\n afterTick(() => {\n if (this._commandState.value !== value)\n return;\n const selectedItemExists = this.getValidItems().some((item) => item.getAttribute(COMMAND_VALUE_ATTR) === value);\n if (!selectedItemExists) {\n this.#selectFirstItem();\n }\n });\n }\n /**\n * Scrolls the initial value into view if it exists and is not the first item.\n * Called during initial mount when a value is provided.\n */\n #scrollInitialValue() {\n this.#afterTick(() => {\n const shouldPreventScroll = this.opts.disableInitialScroll.current;\n if (!shouldPreventScroll) {\n this.#scrollSelectedIntoView();\n }\n this.#isInitialMount = false;\n });\n }\n /**\n * Updates filtered items/groups based on search.\n * Recalculates scores and filtered count.\n */\n #filterItems() {\n if (!this._commandState.search || this.opts.shouldFilter.current === false) {\n this._commandState.filtered.count = this.allItems.size;\n return;\n }\n // reset the groups\n this._commandState.filtered.groups = new Set();\n let itemCount = 0;\n // Check which items should be included\n for (const id of this.allItems) {\n const value = this.allIds.get(id)?.value ?? \"\";\n const keywords = this.allIds.get(id)?.keywords ?? [];\n const rank = this.#score(value, keywords);\n this._commandState.filtered.items.set(id, rank);\n if (rank > 0)\n itemCount++;\n }\n // Check which groups have at least 1 item shown\n for (const [groupId, group] of this.allGroups) {\n for (const itemId of group) {\n const currItem = this._commandState.filtered.items.get(itemId);\n if (currItem && currItem > 0) {\n this._commandState.filtered.groups.add(groupId);\n break;\n }\n }\n }\n this._commandState.filtered.count = itemCount;\n }\n /**\n * Gets all non-disabled, visible command items.\n *\n * @returns Array of valid item elements\n * @remarks Exposed for direct item access and bound checking\n */\n getValidItems() {\n const node = this.opts.ref.current;\n if (!node)\n return [];\n const validItems = Array.from(node.querySelectorAll(COMMAND_VALID_ITEM_SELECTOR)).filter((el) => !!el);\n return validItems;\n }\n /**\n * Gets all visible command items.\n *\n * @returns Array of valid item elements\n * @remarks Exposed for direct item access and bound checking\n */\n getVisibleItems() {\n const node = this.opts.ref.current;\n if (!node)\n return [];\n const visibleItems = Array.from(node.querySelectorAll(COMMAND_ITEM_SELECTOR)).filter((el) => !!el);\n return visibleItems;\n }\n /** Returns all visible items in a matrix structure\n *\n * @remarks Returns empty if the command isn't configured as a grid\n *\n * @returns\n */\n get itemsGrid() {\n if (!this.isGrid)\n return [];\n const columns = this.opts.columns.current ?? 1;\n const items = this.getVisibleItems();\n const grid = [[]];\n let currentGroup = items[0]?.getAttribute(\"data-group\");\n let column = 0;\n let row = 0;\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const itemGroup = item?.getAttribute(\"data-group\");\n if (currentGroup !== itemGroup) {\n currentGroup = itemGroup;\n column = 1;\n row++;\n grid.push([{ index: i, firstRowOfGroup: true, ref: item }]);\n }\n else {\n column++;\n if (column > columns) {\n row++;\n column = 1;\n grid.push([]);\n }\n grid[row]?.push({\n index: i,\n firstRowOfGroup: grid[row]?.[0]?.firstRowOfGroup ?? i === 0,\n ref: item,\n });\n }\n }\n return grid;\n }\n /**\n * Gets currently selected command item.\n *\n * @returns Selected element or undefined\n */\n #getSelectedItem() {\n const node = this.opts.ref.current;\n if (!node)\n return;\n const selectedNode = node.querySelector(`${COMMAND_VALID_ITEM_SELECTOR}[data-selected]`);\n if (!selectedNode)\n return;\n return selectedNode;\n }\n /**\n * Scrolls selected item into view.\n * Special handling for first items in groups.\n */\n #scrollSelectedIntoView() {\n this.#afterTick(() => {\n const item = this.#getSelectedItem();\n if (!item)\n return;\n const grandparent = item.parentElement?.parentElement;\n if (!grandparent)\n return;\n if (this.isGrid) {\n const isFirstRowOfGroup = this.#itemIsFirstRowOfGroup(item);\n // ensure item is visible\n item.scrollIntoView({ block: \"nearest\" });\n if (isFirstRowOfGroup) {\n const closestGroupHeader = item\n ?.closest(COMMAND_GROUP_SELECTOR)\n ?.querySelector(COMMAND_GROUP_HEADING_SELECTOR);\n closestGroupHeader?.scrollIntoView({ block: \"nearest\" });\n return;\n }\n }\n else {\n const firstChildOfParent = getFirstNonCommentChild(grandparent);\n if (firstChildOfParent &&\n firstChildOfParent.dataset?.value === item.dataset?.value) {\n const closestGroupHeader = item\n ?.closest(COMMAND_GROUP_SELECTOR)\n ?.querySelector(COMMAND_GROUP_HEADING_SELECTOR);\n if (closestGroupHeader) {\n closestGroupHeader.scrollIntoView({ block: \"nearest\" });\n return;\n }\n }\n }\n item.scrollIntoView({ block: \"nearest\" });\n });\n }\n #itemIsFirstRowOfGroup(item) {\n const grid = this.itemsGrid;\n if (grid.length === 0)\n return false;\n for (let r = 0; r < grid.length; r++) {\n const row = grid[r];\n if (row === undefined)\n continue;\n for (let c = 0; c < row.length; c++) {\n const column = row[c];\n if (column === undefined || column.ref !== item)\n continue;\n return column.firstRowOfGroup;\n }\n }\n return false;\n }\n /**\n * Sets selection to item at specified index in valid items array.\n * If index is out of bounds, does nothing.\n *\n * @param index - Zero-based index of item to select\n * @remarks\n * Uses `getValidItems()` to get selectable items, filtering out disabled/hidden ones.\n * Access valid items directly via `getValidItems()` to check bounds before calling.\n *\n * @example\n * // get valid items length for bounds check\n * const items = getValidItems()\n * if (index < items.length) {\n * updateSelectedToIndex(index)\n * }\n */\n updateSelectedToIndex(index) {\n const item = this.getValidItems()[index];\n if (!item)\n return;\n this.setValue(item.getAttribute(COMMAND_VALUE_ATTR) ?? \"\");\n }\n /**\n * Updates selected item by moving up/down relative to current selection.\n * Handles wrapping when loop option is enabled.\n *\n * @param change - Direction to move: 1 for next item, -1 for previous item\n * @remarks\n * The loop behavior wraps:\n * - From last item to first when moving next\n * - From first item to last when moving previous\n *\n * Uses `getValidItems()` to get all selectable items, which filters out disabled/hidden items.\n * You can call `getValidItems()` directly to get the current valid items array.\n *\n * @example\n * // select next item\n * updateSelectedByItem(1)\n *\n * // get all valid items\n * const items = getValidItems()\n */\n updateSelectedByItem(change) {\n const selected = this.#getSelectedItem();\n const items = this.getValidItems();\n const index = items.findIndex((item) => item === selected);\n // Get item at this index\n let newSelected = items[index + change];\n if (this.opts.loop.current) {\n newSelected =\n index + change < 0\n ? items[items.length - 1]\n : index + change === items.length\n ? items[0]\n : items[index + change];\n }\n if (newSelected) {\n this.setValue(newSelected.getAttribute(COMMAND_VALUE_ATTR) ?? \"\");\n }\n }\n /**\n * Moves selection to the first valid item in the next/previous group.\n * If no group is found, falls back to selecting the next/previous item globally.\n *\n * @param change - Direction to move: 1 for next group, -1 for previous group\n * @example\n * // move to first item in next group\n * updateSelectedByGroup(1)\n *\n * // move to first item in previous group\n * updateSelectedByGroup(-1)\n */\n updateSelectedByGroup(change) {\n const selected = this.#getSelectedItem();\n let group = selected?.closest(COMMAND_GROUP_SELECTOR);\n let item;\n while (group && !item) {\n group =\n change > 0\n ? findNextSibling(group, COMMAND_GROUP_SELECTOR)\n : findPreviousSibling(group, COMMAND_GROUP_SELECTOR);\n item = group?.querySelector(COMMAND_VALID_ITEM_SELECTOR);\n }\n if (item) {\n this.setValue(item.getAttribute(COMMAND_VALUE_ATTR) ?? \"\");\n }\n else {\n this.updateSelectedByItem(change);\n }\n }\n /**\n * Maps item id to display value and search keywords.\n * Returns cleanup function to remove mapping.\n *\n * @param id - Unique item identifier\n * @param value - Display text\n * @param keywords - Optional search boost terms\n * @returns Cleanup function\n */\n registerValue(value, keywords) {\n if (!(value && value === this.allIds.get(value)?.value)) {\n this.allIds.set(value, { value, keywords });\n }\n this._commandState.filtered.items.set(value, this.#score(value, keywords));\n // Schedule sorting to run after this tick when all items are added not each time an item is added\n if (!this.sortAfterTick) {\n this.sortAfterTick = true;\n this.#afterTick(() => {\n this.#sort();\n this.sortAfterTick = false;\n });\n }\n return () => {\n this.allIds.delete(value);\n };\n }\n /**\n * Registers item in command list and its group.\n * Handles filtering, sorting and selection updates.\n *\n * @param id - Item identifier\n * @param groupId - Optional group to add item to\n * @returns Cleanup function that handles selection\n */\n registerItem(id, groupId) {\n this.allItems.add(id);\n // Track this item within the group\n if (groupId) {\n if (!this.allGroups.has(groupId)) {\n this.allGroups.set(groupId, new Set([id]));\n }\n else {\n this.allGroups.get(groupId).add(id);\n }\n }\n // Schedule sorting and filtering to run after this tick when all items are added not each time an item is added\n if (!this.sortAndFilterAfterTick) {\n this.sortAndFilterAfterTick = true;\n this.#afterTick(() => {\n this.#filterItems();\n this.#sort();\n this.sortAndFilterAfterTick = false;\n });\n }\n this.#scheduleUpdate();\n return () => {\n const selectedItem = this.#getSelectedItem();\n this.allItems.delete(id);\n this.commandState.filtered.items.delete(id);\n this.#filterItems();\n if (selectedItem?.getAttribute(\"id\") === id) {\n const selectedValue = selectedItem.getAttribute(COMMAND_VALUE_ATTR);\n if (selectedValue) {\n this.#selectFirstItemIfValueMissing(selectedValue);\n }\n else {\n this.#selectFirstItem();\n }\n }\n this.#scheduleUpdate();\n };\n }\n /**\n * Creates empty group if not exists.\n *\n * @param id - Group identifier\n * @returns Cleanup function\n */\n registerGroup(id) {\n if (!this.allGroups.has(id)) {\n this.allGroups.set(id, new Set());\n }\n return () => {\n this.allIds.delete(id);\n this.allGroups.delete(id);\n };\n }\n get isGrid() {\n return this.opts.columns.current !== null;\n }\n /**\n * Selects last valid item.\n */\n #last() {\n return this.updateSelectedToIndex(this.getValidItems().length - 1);\n }\n /**\n * Handles next item selection:\n * - Meta: Jump to last\n * - Alt: Next group\n * - Default: Next item\n *\n * @param e - Keyboard event\n */\n #next(e) {\n e.preventDefault();\n if (e.metaKey) {\n this.#last();\n }\n else if (e.altKey) {\n this.updateSelectedByGroup(1);\n }\n else {\n this.updateSelectedByItem(1);\n }\n }\n #down(e) {\n if (this.opts.columns.current === null)\n return;\n e.preventDefault();\n if (e.metaKey) {\n this.updateSelectedByGroup(1);\n }\n else {\n this.updateSelectedByItem(this.#nextRowColumnOffset(e));\n }\n }\n #getColumn(item, grid) {\n if (grid.length === 0)\n return null;\n for (let r = 0; r < grid.length; r++) {\n const row = grid[r];\n if (row === undefined)\n continue;\n for (let c = 0; c < row.length; c++) {\n const column = row[c];\n if (column === undefined || column.ref !== item)\n continue;\n return { columnIndex: c, rowIndex: r };\n }\n }\n return null;\n }\n #nextRowColumnOffset(e) {\n const grid = this.itemsGrid;\n const selected = this.#getSelectedItem();\n if (!selected)\n return 0;\n const column = this.#getColumn(selected, grid);\n if (!column)\n return 0;\n let newItem = null;\n const skipRows = e.altKey ? 1 : 0;\n // if this is the second to last row then we need to go to the last row when skipping and not in loop mode\n if (e.altKey && column.rowIndex === grid.length - 2 && !this.opts.loop.current) {\n newItem = this.#findNextNonDisabledItem({\n start: grid.length - 1,\n end: grid.length,\n expectedColumnIndex: column.columnIndex,\n grid,\n });\n }\n else if (column.rowIndex === grid.length - 1) {\n // if this is the last row we apply the loop logic\n if (!this.opts.loop.current)\n return 0;\n newItem = this.#findNextNonDisabledItem({\n start: 0 + skipRows,\n end: column.rowIndex,\n expectedColumnIndex: column.columnIndex,\n grid,\n });\n }\n else {\n newItem = this.#findNextNonDisabledItem({\n start: column.rowIndex + 1 + skipRows,\n end: grid.length,\n expectedColumnIndex: column.columnIndex,\n grid,\n });\n // this happens if there were no non-disabled columns below the current column\n // we can now try starting from the beginning to find the right column\n if (newItem === null && this.opts.loop.current) {\n newItem = this.#findNextNonDisabledItem({\n start: 0,\n end: column.rowIndex,\n expectedColumnIndex: column.columnIndex,\n grid,\n });\n }\n }\n return this.#calculateOffset(selected, newItem);\n }\n /** Attempts to find the next non-disabled column that matches the expected column.\n *\n * @remarks\n * - Skips over disabled columns\n * - When a row is shorter than the expected column it defaults to the last item in the row\n *\n * @param param0\n * @returns\n */\n #findNextNonDisabledItem({ start, end, grid, expectedColumnIndex, }) {\n let newItem = null;\n for (let r = start; r < end; r++) {\n const row = grid[r];\n // try to get the next column\n newItem = row[expectedColumnIndex]?.ref ?? null;\n // skip over disabled items\n if (newItem !== null && itemIsDisabled(newItem)) {\n newItem = null;\n continue;\n }\n // if that column doesn't exist default to the next highest column\n if (newItem === null) {\n // try and find the next highest non-disabled item in the row\n // if there aren't any non-disabled items we just give up and return null\n for (let i = row.length - 1; i >= 0; i--) {\n const item = row[row.length - 1];\n if (item === undefined || itemIsDisabled(item.ref))\n continue;\n newItem = item.ref;\n break;\n }\n }\n break;\n }\n return newItem;\n }\n #calculateOffset(selected, newSelected) {\n if (newSelected === null)\n return 0;\n const items = this.getValidItems();\n const ogIndex = items.findIndex((item) => item === selected);\n const newIndex = items.findIndex((item) => item === newSelected);\n return newIndex - ogIndex;\n }\n #up(e) {\n if (this.opts.columns.current === null)\n return;\n e.preventDefault();\n if (e.metaKey) {\n this.updateSelectedByGroup(-1);\n }\n else {\n this.updateSelectedByItem(this.#previousRowColumnOffset(e));\n }\n }\n #previousRowColumnOffset(e) {\n const grid = this.itemsGrid;\n const selected = this.#getSelectedItem();\n if (selected === undefined)\n return 0;\n const column = this.#getColumn(selected, grid);\n if (column === null)\n return 0;\n let newItem = null;\n const skipRows = e.altKey ? 1 : 0;\n // if this is the second row then we need to go to the top when skipping and not in loop mode\n if (e.altKey && column.rowIndex === 1 && this.opts.loop.current === false) {\n newItem = this.#findNextNonDisabledItemDesc({\n start: 0,\n end: 0,\n expectedColumnIndex: column.columnIndex,\n grid,\n });\n }\n else if (column.rowIndex === 0) {\n // if this is the last row we apply the loop logic\n if (this.opts.loop.current === false)\n return 0;\n newItem = this.#findNextNonDisabledItemDesc({\n start: grid.length - 1 - skipRows,\n end: column.rowIndex + 1,\n expectedColumnIndex: column.columnIndex,\n grid,\n });\n }\n else {\n newItem = this.#findNextNonDisabledItemDesc({\n start: column.rowIndex - 1 - skipRows,\n end: 0,\n expectedColumnIndex: column.columnIndex,\n grid,\n });\n // this happens if there were no non-disabled columns below the current column\n // we can now try starting from the beginning to find the right column\n if (newItem === null && this.opts.loop.current) {\n newItem = this.#findNextNonDisabledItemDesc({\n start: grid.length - 1,\n end: column.rowIndex + 1,\n expectedColumnIndex: column.columnIndex,\n grid,\n });\n }\n }\n return this.#calculateOffset(selected, newItem);\n }\n /**\n * Attempts to find the next non-disabled column that matches the expected column.\n *\n * @remarks\n * - Skips over disabled columns\n * - When a row is shorter than the expected column it defaults to the last item in the row\n */\n #findNextNonDisabledItemDesc({ start, end, grid, expectedColumnIndex, }) {\n let newItem = null;\n for (let r = start; r >= end; r--) {\n const row = grid[r];\n if (row === undefined)\n continue;\n // try to get the next column\n newItem = row[expectedColumnIndex]?.ref ?? null;\n // skip over disabled items\n if (newItem !== null && itemIsDisabled(newItem)) {\n newItem = null;\n continue;\n }\n // if that column doesn't exist default to the next highest column\n if (newItem === null) {\n // try and find the next highest non-disabled item in the row\n // if there aren't any non-disabled items we just give up and return null\n for (let i = row.length - 1; i >= 0; i--) {\n const item = row[row.length - 1];\n if (item === undefined || itemIsDisabled(item.ref))\n continue;\n newItem = item.ref;\n break;\n }\n }\n break;\n }\n return newItem;\n }\n /**\n * Handles previous item selection:\n * - Meta: Jump to first\n * - Alt: Previous group\n * - Default: Previous item\n *\n * @param e - Keyboard event\n */\n #prev(e) {\n e.preventDefault();\n if (e.metaKey) {\n // First item\n this.updateSelectedToIndex(0);\n }\n else if (e.altKey) {\n // Previous group\n this.updateSelectedByGroup(-1);\n }\n else {\n // Previous item\n this.updateSelectedByItem(-1);\n }\n }\n onkeydown(e) {\n const isVim = this.opts.vimBindings.current && e.ctrlKey;\n switch (e.key) {\n case kbd.n:\n case kbd.j: {\n // vim down\n if (isVim) {\n if (this.isGrid) {\n this.#down(e);\n }\n else {\n this.#next(e);\n }\n }\n break;\n }\n case kbd.l: {\n // vim right\n if (isVim) {\n if (this.isGrid) {\n this.#next(e);\n }\n }\n break;\n }\n case kbd.ARROW_DOWN:\n if (this.isGrid) {\n this.#down(e);\n }\n else {\n this.#next(e);\n }\n break;\n case kbd.ARROW_RIGHT:\n if (!this.isGrid)\n break;\n this.#next(e);\n break;\n case kbd.p:\n case kbd.k: {\n // vim up\n if (isVim) {\n if (this.isGrid) {\n this.#up(e);\n }\n else {\n this.#prev(e);\n }\n }\n break;\n }\n case kbd.h: {\n // vim left\n if (isVim && this.isGrid) {\n this.#prev(e);\n }\n break;\n }\n case kbd.ARROW_UP:\n if (this.isGrid) {\n this.#up(e);\n }\n else {\n this.#prev(e);\n }\n break;\n case kbd.ARROW_LEFT:\n if (!this.isGrid)\n break;\n this.#prev(e);\n break;\n case kbd.HOME:\n // first item\n e.preventDefault();\n this.updateSelectedToIndex(0);\n break;\n case kbd.END:\n // last item\n e.preventDefault();\n this.#last();\n break;\n case kbd.ENTER: {\n /**\n * Check if IME composition is finished before triggering the select event.\n * This prevents unwanted triggering while user is still inputting text with IME.\n * e.keyCode === 229 is for the Japanese IME && Safari as `isComposing` does not\n * work with Japanese IME and Safari in combination.\n */\n if (!e.isComposing && e.keyCode !== 229) {\n e.preventDefault();\n const item = this.#getSelectedItem();\n if (item) {\n item?.click();\n }\n }\n }\n }\n }\n props = $derived.by(() => ({\n id: this.opts.id.current,\n role: \"application\",\n [commandAttrs.root]: \"\",\n tabindex: -1,\n onkeydown: this.onkeydown,\n ...this.attachment,\n }));\n}\nfunction itemIsDisabled(item) {\n return item.getAttribute(\"aria-disabled\") === \"true\";\n}\nexport class CommandEmptyState {\n static create(opts) {\n return new CommandEmptyState(opts, CommandRootContext.get());\n }\n opts;\n root;\n attachment;\n shouldRender = $derived.by(() => {\n return ((this.root._commandState.filtered.count === 0 && this.#isInitialRender === false) ||\n this.opts.forceMount.current);\n });\n #isInitialRender = true;\n constructor(opts, root) {\n this.opts = opts;\n this.root = root;\n this.attachment = attachRef(this.opts.ref);\n $effect.pre(() => {\n this.#isInitialRender = false;\n });\n }\n props = $derived.by(() => ({\n id: this.opts.id.current,\n role: \"presentation\",\n [commandAttrs.empty]: \"\",\n ...this.attachment,\n }));\n}\nexport class CommandGroupContainerState {\n static create(opts) {\n return CommandGroupContainerContext.set(new CommandGroupContainerState(opts, CommandRootContext.get()));\n }\n opts;\n root;\n attachment;\n shouldRender = $derived.by(() => {\n if (this.opts.forceMount.current)\n return true;\n if (this.root.opts.shouldFilter.current === false)\n return true;\n if (!this.root.commandState.search)\n return true;\n return this.root._commandState.filtered.groups.has(this.trueValue);\n });\n headingNode = $state(null);\n trueValue = $state(\"\");\n constructor(opts, root) {\n this.opts = opts;\n this.root = root;\n this.attachment = attachRef(this.opts.ref);\n this.trueValue = opts.value.current ?? opts.id.current;\n watch(() => this.trueValue, () => {\n return this.root.registerGroup(this.trueValue);\n });\n $effect(() => {\n if (this.opts.value.current) {\n this.trueValue = this.opts.value.current;\n return this.root.registerValue(this.opts.value.current);\n }\n else if (this.headingNode && this.headingNode.textContent) {\n this.trueValue = this.headingNode.textContent.trim().toLowerCase();\n return this.root.registerValue(this.trueValue);\n }\n else {\n this.trueValue = `-----${this.opts.id.current}`;\n return this.root.registerValue(this.trueValue);\n }\n });\n }\n props = $derived.by(() => ({\n id: this.opts.id.current,\n role: \"presentation\",\n hidden: this.shouldRender ? undefined : true,\n \"data-value\": this.trueValue,\n [commandAttrs.group]: \"\",\n ...this.attachment,\n }));\n}\nexport class CommandGroupHeadingState {\n static create(opts) {\n return new CommandGroupHeadingState(opts, CommandGroupContainerContext.get());\n }\n opts;\n group;\n attachment;\n constructor(opts, group) {\n this.opts = opts;\n this.group = group;\n this.attachment = attachRef(this.opts.ref, (v) => (this.group.headingNode = v));\n }\n props = $derived.by(() => ({\n id: this.opts.id.current,\n [commandAttrs[\"group-heading\"]]: \"\",\n ...this.attachment,\n }));\n}\nexport class CommandGroupItemsState {\n static create(opts) {\n return new CommandGroupItemsState(opts, CommandGroupContainerContext.get());\n }\n opts;\n group;\n attachment;\n constructor(opts, group) {\n this.opts = opts;\n this.group = group;\n this.attachment = attachRef(this.opts.ref);\n }\n props = $derived.by(() => ({\n id: this.opts.id.current,\n role: \"group\",\n [commandAttrs[\"group-items\"]]: \"\",\n \"aria-labelledby\": this.group.headingNode?.id ?? undefined,\n ...this.attachment,\n }));\n}\nexport class CommandInputState {\n static create(opts) {\n return new CommandInputState(opts, CommandRootContext.get());\n }\n opts;\n root;\n attachment;\n #selectedItemId = $derived.by(() => {\n const item = this.root.viewportNode?.querySelector(`${COMMAND_ITEM_SELECTOR}[${COMMAND_VALUE_ATTR}=\"${cssEscape(this.root.opts.value.current)}\"]`);\n if (item === undefined || item === null)\n return;\n return item.getAttribute(\"id\") ?? undefined;\n });\n constructor(opts, root) {\n this.opts = opts;\n this.root = root;\n this.attachment = attachRef(this.opts.ref, (v) => (this.root.inputNode = v));\n watch(() => this.opts.ref.current, () => {\n const node = this.opts.ref.current;\n if (node && this.opts.autofocus.current) {\n afterSleep(10, () => node.focus());\n }\n });\n watch(() => this.opts.value.current, () => {\n if (this.root.commandState.search !== this.opts.value.current) {\n this.root.setState(\"search\", this.opts.value.current);\n }\n });\n }\n props = $derived.by(() => ({\n id: this.opts.id.current,\n type: \"text\",\n [commandAttrs.input]: \"\",\n autocomplete: \"off\",\n autocorrect: \"off\",\n spellcheck: false,\n \"aria-autocomplete\": \"list\",\n role: \"combobox\",\n \"aria-expanded\": boolToStr(true),\n \"aria-controls\": this.root.viewportNode?.id ?? undefined,\n \"aria-labelledby\": this.root.labelNode?.id ?? undefined,\n \"aria-activedescendant\": this.#selectedItemId,\n ...this.attachment,\n }));\n}\nexport class CommandItemState {\n static create(opts) {\n const group = CommandGroupContainerContext.getOr(null);\n return new CommandItemState({ ...opts, group }, CommandRootContext.get());\n }\n opts;\n root;\n attachment;\n #group = null;\n #trueForceMount = $derived.by(() => {\n return this.opts.forceMount.current || this.#group?.opts.forceMount.current === true;\n });\n shouldRender = $derived.by(() => {\n this.opts.ref.current;\n if (this.#trueForceMount ||\n this.root.opts.shouldFilter.current === false ||\n !this.root.commandState.search) {\n return true;\n }\n const currentScore = this.root.commandState.filtered.items.get(this.trueValue);\n if (currentScore === undefined)\n return false;\n return currentScore > 0;\n });\n isSelected = $derived.by(() => this.root.opts.value.current === this.trueValue && this.trueValue !== \"\");\n trueValue = $state(\"\");\n constructor(opts, root) {\n this.opts = opts;\n this.root = root;\n this.#group = CommandGroupContainerContext.getOr(null);\n this.trueValue = opts.value.current;\n this.attachment = attachRef(this.opts.ref);\n watch([\n () => this.trueValue,\n () => this.#group?.trueValue,\n () => this.opts.forceMount.current,\n ], () => {\n if (this.opts.forceMount.current || !this.trueValue)\n return;\n return this.root.registerItem(this.trueValue, this.#group?.trueValue);\n });\n watch([() => this.opts.value.current, () => this.opts.ref.current], () => {\n if (this.opts.value.current) {\n this.trueValue = this.opts.value.current;\n }\n else if (this.opts.ref.current?.textContent) {\n this.trueValue = this.opts.ref.current.textContent.trim();\n }\n if (this.trueValue) {\n this.root.registerValue(this.trueValue, opts.keywords.current.map((kw) => kw.trim()));\n this.opts.ref.current?.setAttribute(COMMAND_VALUE_ATTR, this.trueValue);\n }\n });\n // bindings\n this.onclick = this.onclick.bind(this);\n this.onpointermove = this.onpointermove.bind(this);\n }\n #onSelect() {\n if (this.opts.disabled.current)\n return;\n this.#select();\n this.opts.onSelect?.current();\n }\n #select() {\n if (this.opts.disabled.current)\n return;\n this.root.setValue(this.trueValue, true);\n }\n onpointermove(_) {\n if (this.opts.disabled.current || this.root.opts.disablePointerSelection.current)\n return;\n this.#select();\n }\n onclick(_) {\n if (this.opts.disabled.current)\n return;\n this.#onSelect();\n }\n props = $derived.by(() => ({\n id: this.opts.id.current,\n \"aria-disabled\": boolToStr(this.opts.disabled.current),\n \"aria-selected\": boolToStr(this.isSelected),\n \"data-disabled\": boolToEmptyStrOrUndef(this.opts.disabled.current),\n \"data-selected\": boolToEmptyStrOrUndef(this.isSelected),\n \"data-value\": this.trueValue,\n \"data-group\": this.#group?.trueValue,\n [commandAttrs.item]: \"\",\n role: \"option\",\n onpointermove: this.onpointermove,\n onclick: this.onclick,\n ...this.attachment,\n }));\n}\nexport class CommandLoadingState {\n static create(opts) {\n return new CommandLoadingState(opts);\n }\n opts;\n attachment;\n constructor(opts) {\n this.opts = opts;\n this.attachment = attachRef(this.opts.ref);\n }\n props = $derived.by(() => ({\n id: this.opts.id.current,\n role: \"progressbar\",\n \"aria-valuenow\": this.opts.progress.current,\n \"aria-valuemin\": 0,\n \"aria-valuemax\": 100,\n \"aria-label\": \"Loading...\",\n [commandAttrs.loading]: \"\",\n ...this.attachment,\n }));\n}\nexport class CommandSeparatorState {\n static create(opts) {\n return new CommandSeparatorState(opts, CommandRootContext.get());\n }\n opts;\n root;\n attachment;\n shouldRender = $derived.by(() => !this.root._commandState.search || this.opts.forceMount.current);\n constructor(opts, root) {\n this.opts = opts;\n this.root = root;\n this.attachment = attachRef(this.opts.ref);\n }\n props = $derived.by(() => ({\n id: this.opts.id.current,\n // role=\"separator\" cannot belong to a role=\"listbox\"\n \"aria-hidden\": \"true\",\n [commandAttrs.separator]: \"\",\n ...this.attachment,\n }));\n}\nexport class CommandListState {\n static create(opts) {\n return CommandListContext.set(new CommandListState(opts, CommandRootContext.get()));\n }\n opts;\n root;\n attachment;\n constructor(opts, root) {\n this.opts = opts;\n this.root = root;\n this.attachment = attachRef(this.opts.ref);\n }\n props = $derived.by(() => ({\n id: this.opts.id.current,\n role: \"listbox\",\n \"aria-label\": this.opts.ariaLabel.current,\n [commandAttrs.list]: \"\",\n ...this.attachment,\n }));\n}\nexport class CommandLabelState {\n static create(opts) {\n return new CommandLabelState(opts, CommandRootContext.get());\n }\n opts;\n root;\n attachment;\n constructor(opts, root) {\n this.opts = opts;\n this.root = root;\n this.attachment = attachRef(this.opts.ref, (v) => (this.root.labelNode = v));\n }\n props = $derived.by(() => ({\n id: this.opts.id.current,\n [commandAttrs[\"input-label\"]]: \"\",\n for: this.opts.for?.current,\n style: srOnlyStyles,\n ...this.attachment,\n }));\n}\nexport class CommandViewportState {\n static create(opts) {\n return new CommandViewportState(opts, CommandListContext.get());\n }\n opts;\n list;\n attachment;\n constructor(opts, list) {\n this.opts = opts;\n this.list = list;\n this.attachment = attachRef(this.opts.ref, (v) => (this.list.root.viewportNode = v));\n watch([() => this.opts.ref.current, () => this.list.opts.ref.current], ([node, listNode]) => {\n if (node === null || listNode === null)\n return;\n let aF;\n const observer = new ResizeObserver(() => {\n aF = requestAnimationFrame(() => {\n const height = node.offsetHeight;\n listNode.style.setProperty(\"--bits-command-list-height\", `${height.toFixed(1)}px`);\n });\n });\n observer.observe(node);\n return () => {\n cancelAnimationFrame(aF);\n observer.unobserve(node);\n };\n });\n }\n props = $derived.by(() => ({\n id: this.opts.id.current,\n [commandAttrs.viewport]: \"\",\n ...this.attachment,\n }));\n}\n","<script lang=\"ts\">\n\timport { boxWith } from \"svelte-toolbelt\";\n\timport { CommandLabelState } from \"../command.svelte.js\";\n\n\timport type { WithChildren } from \"../../../internal/types.js\";\n\timport { createId } from \"../../../internal/create-id.js\";\n\timport { mergeProps } from \"svelte-toolbelt\";\n\timport type { BitsPrimitiveLabelAttributes, WithElementRef } from \"../../../shared/index.js\";\n\n\tconst uid = $props.id();\n\tlet {\n\t\tid = createId(uid),\n\t\tref = $bindable(null),\n\t\tchildren,\n\t\t...restProps\n\t}: WithChildren<WithElementRef<BitsPrimitiveLabelAttributes>> = $props();\n\n\tconst labelState = CommandLabelState.create({\n\t\tid: boxWith(() => id),\n\t\tref: boxWith(\n\t\t\t() => ref,\n\t\t\t(v) => (ref = v)\n\t\t),\n\t});\n\n\tconst mergedProps = $derived(mergeProps(restProps, labelState.props));\n</script>\n\n<label {...mergedProps}>\n\t{@render children?.()}\n</label>\n","<script lang=\"ts\">\n\timport { boxWith, mergeProps } from \"svelte-toolbelt\";\n\timport { CommandRootState } from \"../command.svelte.js\";\n\timport type { CommandRootProps } from \"../types.js\";\n\timport CommandLabel from \"./_command-label.svelte\";\n\timport { noop } from \"../../../internal/noop.js\";\n\timport { createId } from \"../../../internal/create-id.js\";\n\timport { computeCommandScore } from \"../index.js\";\n\n\tconst uid = $props.id();\n\n\tlet {\n\t\tid = createId(uid),\n\t\tref = $bindable(null),\n\t\tvalue = $bindable(\"\"),\n\t\tonValueChange = noop,\n\t\tonStateChange = noop,\n\t\tloop = false,\n\t\tshouldFilter = true,\n\t\tfilter = computeCommandScore,\n\t\tlabel = \"\",\n\t\tvimBindings = true,\n\t\tdisablePointerSelection = false,\n\t\tdisableInitialScroll = false,\n\t\tcolumns = null,\n\t\tchildren,\n\t\tchild,\n\t\t...restProps\n\t}: CommandRootProps = $props();\n\n\tconst rootState = CommandRootState.create({\n\t\tid: boxWith(() => id),\n\t\tref: boxWith(\n\t\t\t() => ref,\n\t\t\t(v) => (ref = v)\n\t\t),\n\t\tfilter: boxWith(() => filter),\n\t\tshouldFilter: boxWith(() => shouldFilter),\n\t\tloop: boxWith(() => loop),\n\t\tvalue: boxWith(\n\t\t\t() => value,\n\t\t\t(v) => {\n\t\t\t\tif (value !== v) {\n\t\t\t\t\tvalue = v;\n\t\t\t\t\tonValueChange(v);\n\t\t\t\t}\n\t\t\t}\n\t\t),\n\t\tvimBindings: boxWith(() => vimBindings),\n\t\tdisablePointerSelection: boxWith(() => disablePointerSelection),\n\t\tdisableInitialScroll: boxWith(() => disableInitialScroll),\n\t\tonStateChange: boxWith(() => onStateChange),\n\t\tcolumns: boxWith(() => columns),\n\t});\n\n\t// Imperative APIs - DO NOT REMOVE OR RENAME\n\n\t/**\n\t * Sets selection to item at specified index in valid items array.\n\t * If index is out of bounds, does nothing.\n\t *\n\t * @param index - Zero-based index of item to select\n\t * @remarks\n\t * Uses `getValidItems()` to get selectable items, filtering out disabled/hidden ones.\n\t * Access valid items directly via `getValidItems()` to check bounds before calling.\n\t *\n\t * @example\n\t * // get valid items length for bounds check\n\t * const items = getValidItems()\n\t * if (index < items.length) {\n\t * updateSelectedToIndex(index)\n\t * }\n\t */\n\texport const updateSelectedToIndex: (typeof rootState)[\"updateSelectedToIndex\"] = (i) =>\n\t\trootState.updateSelectedToIndex(i);\n\t/**\n\t * Moves selection to the first valid item in the next/previous group.\n\t * If no group is found, falls back to selecting the next/previous item globally.\n\t *\n\t * @param change - Direction to move: 1 for next group, -1 for previous group\n\t * @example\n\t * // move to first item in next group\n\t * updateSelectedByGroup(1)\n\t *\n\t * // move to first item in previous group\n\t * updateSelectedByGroup(-1)\n\t */\n\texport const updateSelectedByGroup: (typeof rootState)[\"updateSelectedByGroup\"] = (c) =>\n\t\trootState.updateSelectedByGroup(c);\n\t/**\n\t * Updates selected item by moving up/down relative to current selection.\n\t * Handles wrapping when loop option is enabled.\n\t *\n\t * @param change - Direction to move: 1 for next item, -1 for previous item\n\t * @remarks\n\t * The loop behavior wraps:\n\t * - From last item to first when moving next\n\t * - From first item to last when moving previous\n\t *\n\t * Uses `getValidItems()` to get all selectable items, which filters out disabled/hidden items.\n\t * You can call `getValidItems()` directly to get the current valid items array.\n\t *\n\t * @example\n\t * // select next item\n\t * updateSelectedByItem(1)\n\t *\n\t * // get all valid items\n\t * const items = getValidItems()\n\t */\n\texport const updateSelectedByItem: (typeof rootState)[\"updateSelectedByItem\"] = (c) =>\n\t\trootState.updateSelectedByItem(c);\n\t/**\n\t * Gets all non-disabled, visible command items.\n\t *\n\t * @returns Array of valid item elements\n\t * @remarks Exposed for direct item access and bound checking\n\t */\n\texport const getValidItems = () => rootState.getValidItems();\n\n\tconst mergedProps = $derived(mergeProps(restProps, rootState.props));\n</script>\n\n{#snippet Label()}\n\t<CommandLabel>\n\t\t{label}\n\t</CommandLabel>\n{/snippet}\n\n{#if child}\n\t{@render Label()}\n\t{@render child({ props: mergedProps })}\n{:else}\n\t<div {...mergedProps}>\n\t\t{@render Label()}\n\t\t{@render children?.()}\n\t</div>\n{/if}\n","<script lang=\"ts\">\n\timport { boxWith, mergeProps } from \"svelte-toolbelt\";\n\timport type { CommandEmptyProps } from \"../types.js\";\n\timport { CommandEmptyState } from \"../command.svelte.js\";\n\timport { createId } from \"../../../internal/create-id.js\";\n\n\tconst uid = $props.id();\n\n\tlet {\n\t\tid = createId(uid),\n\t\tref = $bindable(null),\n\t\tchildren,\n\t\tchild,\n\t\tforceMount = false,\n\t\t...restProps\n\t}: CommandEmptyProps = $props();\n\n\tconst emptyState = CommandEmptyState.create({\n\t\tid: boxWith(() => id),\n\t\tref: boxWith(\n\t\t\t() => ref,\n\t\t\t(v) => (ref = v)\n\t\t),\n\t\tforceMount: boxWith(() => forceMount),\n\t});\n\n\tconst mergedProps = $derived(mergeProps(emptyState.props, restProps));\n</script>\n\n{#if emptyState.shouldRender}\n\t{#if child}\n\t\t{@render child({ props: mergedProps })}\n\t{:else}\n\t\t<div {...mergedProps}>\n\t\t\t{@render children?.()}\n\t\t</div>\n\t{/if}\n{/if}\n","<script lang=\"ts\">\n\timport { boxWith, mergeProps } from \"svelte-toolbelt\";\n\timport type { CommandGroupProps } from \"../types.js\";\n\timport { CommandGroupContainerState } from \"../command.svelte.js\";\n\timport { createId } from \"../../../internal/create-id.js\";\n\n\tconst uid = $props.id();\n\n\tlet {\n\t\tid = createId(uid),\n\t\tref = $bindable(null),\n\t\tvalue = \"\",\n\t\tforceMount = false,\n\t\tchildren,\n\t\tchild,\n\t\t...restProps\n\t}: CommandGroupProps = $props();\n\n\tconst groupState = CommandGroupContainerState.create({\n\t\tid: boxWith(() => id),\n\t\tref: boxWith(\n\t\t\t() => ref,\n\t\t\t(v) => (ref = v)\n\t\t),\n\t\tforceMount: boxWith(() => forceMount),\n\t\tvalue: boxWith(() => value),\n\t});\n\n\tconst mergedProps = $derived(mergeProps(restProps, groupState.props));\n</script>\n\n{#if child}\n\t{@render child({ props: mergedProps })}\n{:else}\n\t<div {...mergedProps}>\n\t\t{@render children?.()}\n\t</div>\n{/if}\n","<script lang=\"ts\">\n\timport { boxWith, mergeProps } from \"svelte-toolbelt\";\n\timport { CommandGroupHeadingState } from \"../command.svelte.js\";\n\timport type { CommandGroupHeadingProps } from \"../types.js\";\n\timport { createId } from \"../../../internal/create-id.js\";\n\n\tconst uid = $props.id();\n\n\tlet {\n\t\tid = createId(uid),\n\t\tref = $bindable(null),\n\t\tchildren,\n\t\tchild,\n\t\t...restProps\n\t}: CommandGroupHeadingProps = $props();\n\n\tconst headingState = CommandGroupHeadingState.create({\n\t\tid: boxWith(() => id),\n\t\tref: boxWith(\n\t\t\t() => ref,\n\t\t\t(v) => (ref = v)\n\t\t),\n\t});\n\n\tconst mergedProps = $derived(mergeProps(restProps, headingState.props));\n</script>\n\n{#if child}\n\t{@render child({ props: mergedProps })}\n{:else}\n\t<div {...mergedProps}>\n\t\t{@render children?.()}\n\t</div>\n{/if}\n","<script lang=\"ts\">\n\timport { boxWith, mergeProps } from \"svelte-toolbelt\";\n\timport type { CommandGroupItemsProps } from \"../types.js\";\n\timport { CommandGroupItemsState } from \"../command.svelte.js\";\n\timport { createId } from \"../../../internal/create-id.js\";\n\n\tconst uid = $props.id();\n\n\tlet {\n\t\tid = createId(uid),\n\t\tref = $bindable(null),\n\t\tchildren,\n\t\tchild,\n\t\t...restProps\n\t}: CommandGroupItemsProps = $props();\n\n\tconst groupItemsState = CommandGroupItemsState.create({\n\t\tid: boxWith(() => id),\n\t\tref: boxWith(\n\t\t\t() => ref,\n\t\t\t(v) => (ref = v)\n\t\t),\n\t});\n\n\tconst mergedProps = $derived(mergeProps(restProps, groupItemsState.props));\n</script>\n\n<div style=\"display: contents;\">\n\t{#if child}\n\t\t{@render child({ props: mergedProps })}\n\t{:else}\n\t\t<div {...mergedProps}>\n\t\t\t{@render children?.()}\n\t\t</div>\n\t{/if}\n</div>\n","<script lang=\"ts\">\n\timport { boxWith, mergeProps } from \"svelte-toolbelt\";\n\timport type { CommandInputProps } from \"../types.js\";\n\timport { CommandInputState } from \"../command.svelte.js\";\n\timport { createId } from \"../../../internal/create-id.js\";\n\n\tconst uid = $props.id();\n\n\tlet {\n\t\tvalue = $bindable(\"\"),\n\t\tautofocus = false,\n\t\tid = createId(uid),\n\t\tref = $bindable(null),\n\t\tchild,\n\t\t...restProps\n\t}: CommandInputProps = $props();\n\n\tconst inputState = CommandInputState.create({\n\t\tid: boxWith(() => id),\n\t\tref: boxWith(\n\t\t\t() => ref,\n\t\t\t(v) => (ref = v)\n\t\t),\n\t\tvalue: boxWith(\n\t\t\t() => value,\n\t\t\t(v) => {\n\t\t\t\tvalue = v;\n\t\t\t}\n\t\t),\n\t\tautofocus: boxWith(() => autofocus ?? false),\n\t});\n\n\tconst mergedProps = $derived(mergeProps(restProps, inputState.props));\n</script>\n\n{#if child}\n\t{@render child({ props: mergedProps })}\n{:else}\n\t<input {...mergedProps} bind:value />\n{/if}\n","<script lang=\"ts\">\n\timport { boxWith, mergeProps } from \"svelte-toolbelt\";\n\timport type { CommandItemProps } from \"../types.js\";\n\timport { CommandItemState } from \"../command.svelte.js\";\n\timport { noop } from \"../../../internal/noop.js\";\n\timport { createId } from \"../../../internal/create-id.js\";\n\n\tconst uid = $props.id();\n\n\tlet {\n\t\tid = createId(uid),\n\t\tref = $bindable(null),\n\t\tvalue = \"\",\n\t\tdisabled = false,\n\t\tchildren,\n\t\tchild,\n\t\tonSelect = noop,\n\t\tforceMount = false,\n\t\tkeywords = [],\n\t\t...restProps\n\t}: CommandItemProps = $props();\n\n\tconst itemState = CommandItemState.create({\n\t\tid: boxWith(() => id),\n\t\tref: boxWith(\n\t\t\t() => ref,\n\t\t\t(v) => (ref = v)\n\t\t),\n\t\tvalue: boxWith(() => value),\n\t\tdisabled: boxWith(() => disabled),\n\t\tonSelect: boxWith(() => onSelect),\n\t\tforceMount: boxWith(() => forceMount),\n\t\tkeywords: boxWith(() => keywords),\n\t});\n\n\tconst mergedProps = $derived(mergeProps(restProps, itemState.props));\n</script>\n\n{#key itemState.root.key}\n\t<div style=\"display: contents;\" data-item-wrapper data-value={itemState.trueValue}>\n\t\t{#if itemState.shouldRender}\n\t\t\t{#if child}\n\t\t\t\t{@render child({ props: mergedProps })}\n\t\t\t{:else}\n\t\t\t\t<div {...mergedProps}>\n\t\t\t\t\t{@render children?.()}\n\t\t\t\t</div>\n\t\t\t{/if}\n\t\t{/if}\n\t</div>\n{/key}\n","<script lang=\"ts\">\n\timport { boxWith, mergeProps } from \"svelte-toolbelt\";\n\timport type { CommandListProps } from \"../types.js\";\n\timport { CommandListState } from \"../command.svelte.js\";\n\timport { createId } from \"../../../internal/create-id.js\";\n\n\tconst uid = $props.id();\n\n\tlet {\n\t\tid = createId(uid),\n\t\tref = $bindable(null),\n\t\tchild,\n\t\tchildren,\n\t\t\"aria-label\": ariaLabel,\n\t\t...restProps\n\t}: CommandListProps = $props();\n\n\tconst listState = CommandListState.create({\n\t\tid: boxWith(() => id),\n\t\tref: boxWith(\n\t\t\t() => ref,\n\t\t\t(v) => (ref = v)\n\t\t),\n\t\tariaLabel: boxWith(() => ariaLabel ?? \"Suggestions...\"),\n\t});\n\n\tconst mergedProps = $derived(mergeProps(restProps, listState.props));\n</script>\n\n<!-- remounting restores the original order after sorting, which only happens when filtering -->\n{#key listState.root.opts.shouldFilter.current === false || listState.root._commandState.search === \"\"}\n\t{#if child}\n\t\t{@render child({ props: mergedProps })}\n\t{:else}\n\t\t<div {...mergedProps}>\n\t\t\t{@render children?.()}\n\t\t</div>\n\t{/if}\n{/key}\n","// oxlint-disable ban-ts-comment\n// @ts-nocheck\n// The scores are arranged so that a continuous match of characters will\n// result in a total score of 1.\n//\n// The best case, this character is a match, and either this is the start\n// of the string, or the previous character was also a match.\nconst SCORE_CONTINUE_MATCH = 1;\n// A new match at the start of a word scores better than a new match\n// elsewhere as it's more likely that the user will type the starts\n// of fragments.\n// NOTE: We score word jumps between spaces slightly higher than slashes, brackets\n// hyphens, etc.\nconst SCORE_SPACE_WORD_JUMP = 0.9;\nconst SCORE_NON_SPACE_WORD_JUMP = 0.8;\n// Any other match isn't ideal, but we include it for completeness.\nconst SCORE_CHARACTER_JUMP = 0.17;\n// If the user transposed two letters, it should be significantly penalized.\n//\n// i.e. \"ouch\" is more likely than \"curtain\" when \"uc\" is typed.\nconst SCORE_TRANSPOSITION = 0.1;\n// The goodness of a match should decay slightly with each missing\n// character.\n//\n// i.e. \"bad\" is more likely than \"bard\" when \"bd\" is typed.\n//\n// This will not change the order of suggestions based on SCORE_* until\n// 100 characters are inserted between matches.\nconst PENALTY_SKIPPED = 0.999;\n// The goodness of an exact-case match should be higher than a\n// case-insensitive match by a small amount.\n//\n// i.e. \"HTML\" is more likely than \"haml\" when \"HM\" is typed.\n//\n// This will not change the order of suggestions based on SCORE_* until\n// 1000 characters are inserted between matches.\nconst PENALTY_CASE_MISMATCH = 0.9999;\n// Match higher for letters closer to the beginning of the word\n// If the word has more characters than the user typed, it should\n// be penalized slightly.\n//\n// i.e. \"html\" is more likely than \"html5\" if I type \"html\".\n//\n// However, it may well be the case that there's a sensible secondary\n// ordering (like alphabetical) that it makes sense to rely on when\n// there are many prefix matches, so we don't make the penalty increase\n// with the number of tokens.\nconst PENALTY_NOT_COMPLETE = 0.99;\nconst IS_GAP_REGEXP = /[\\\\/_+.#\"@[({&]/;\nconst COUNT_GAPS_REGEXP = /[\\\\/_+.#\"@[({&]/g;\nconst IS_SPACE_REGEXP = /[\\s-]/;\nconst COUNT_SPACE_REGEXP = /[\\s-]/g;\nfunction computeCommandScoreInner(string, abbreviation, lowerString, lowerAbbreviation, stringIndex, abbreviationIndex, memoizedResults) {\n if (abbreviationIndex === abbreviation.length) {\n if (stringIndex === string.length)\n return SCORE_CONTINUE_MATCH;\n return PENALTY_NOT_COMPLETE;\n }\n const memoizeKey = `${stringIndex},${abbreviationIndex}`;\n if (memoizedResults[memoizeKey] !== undefined)\n return memoizedResults[memoizeKey];\n const abbreviationChar = lowerAbbreviation.charAt(abbreviationIndex);\n let index = lowerString.indexOf(abbreviationChar, stringIndex);\n let highScore = 0;\n let score, transposedScore, wordBreaks, spaceBreaks;\n while (index >= 0) {\n score = computeCommandScoreInner(string, abbreviation, lowerString, lowerAbbreviation, index + 1, abbreviationIndex + 1, memoizedResults);\n if (score > highScore) {\n if (index === stringIndex) {\n score *= SCORE_CONTINUE_MATCH;\n }\n else if (IS_GAP_REGEXP.test(string.charAt(index - 1))) {\n score *= SCORE_NON_SPACE_WORD_JUMP;\n wordBreaks = string.slice(stringIndex, index - 1).match(COUNT_GAPS_REGEXP);\n if (wordBreaks && stringIndex > 0) {\n score *= PENALTY_SKIPPED ** wordBreaks.length;\n }\n }\n else if (IS_SPACE_REGEXP.test(string.charAt(index - 1))) {\n score *= SCORE_SPACE_WORD_JUMP;\n spaceBreaks = string.slice(stringIndex, index - 1).match(COUNT_SPACE_REGEXP);\n if (spaceBreaks && stringIndex > 0) {\n score *= PENALTY_SKIPPED ** spaceBreaks.length;\n }\n }\n else {\n score *= SCORE_CHARACTER_JUMP;\n if (stringIndex > 0) {\n score *= PENALTY_SKIPPED ** (index - stringIndex);\n }\n }\n if (string.charAt(index) !== abbreviation.charAt(abbreviationIndex)) {\n score *= PENALTY_CASE_MISMATCH;\n }\n }\n if ((score < SCORE_TRANSPOSITION &&\n lowerString.charAt(index - 1) ===\n lowerAbbreviation.charAt(abbreviationIndex + 1)) ||\n (lowerAbbreviation.charAt(abbreviationIndex + 1) ===\n lowerAbbreviation.charAt(abbreviationIndex) &&\n lowerString.charAt(index - 1) !== lowerAbbreviation.charAt(abbreviationIndex))) {\n transposedScore = computeCommandScoreInner(string, abbreviation, lowerString, lowerAbbreviation, index + 1, abbreviationIndex + 2, memoizedResults);\n if (transposedScore * SCORE_TRANSPOSITION > score) {\n score = transposedScore * SCORE_TRANSPOSITION;\n }\n }\n if (score > highScore) {\n highScore = score;\n }\n index = lowerString.indexOf(abbreviationChar, index + 1);\n }\n memoizedResults[memoizeKey] = highScore;\n return highScore;\n}\n/**\n *\n * @param string\n * @returns\n */\nfunction formatInput(string) {\n // convert all valid space characters to space so they match each other\n return string.toLowerCase().replace(COUNT_SPACE_REGEXP, \" \");\n}\n/**\n * Given a command, a search query, and (optionally) a list of keywords for the command,\n * computes a score between 0 and 1 that represents how well the search query matches the\n * abbreviation and keywords. 1 is a perfect match, 0 is no match.\n *\n * The score is calculated based on the following rules:\n * - The scores are arranged so that a continuous match of characters will result in a total\n * score of 1. The best case, this character is a match, and either this is the start of the string\n * or the previous character was also a match.\n * - A new match at the start of a word scores better than a new match elsewhere as it's more likely\n * that the user will type the starts of fragments.\n * - Word jumps between spaces are scored slightly higher than slashes, brackets, hyphens, etc.\n * - A continuous match of characters will result in a total score of 1.\n * - A new match at the start of a word scores better than a new match elsewhere as it's more likely that the user will type the starts of fragments.\n * - Any other match isn't ideal, but we include it for completeness.\n * - If the user transposed two letters, it should be significantly penalized.\n * - The goodness of a match should decay slightly with each missing character.\n * - Match higher for letters closer to the beginning of the word.\n *\n * @param command - The value to score against the search string (e.g. a command name like \"Calculator\")\n * @param search - The search string to score against the value/aliases\n * @param commandKeywords - An optional list of aliases/keywords to score against the search string - e.g. [\"math\", \"add\", \"divide\", \"multiply\", \"subtract\"]\n * @returns A score between 0 and 1 that represents how well the search string matches the\n * command (and keywords)\n */\nexport function computeCommandScore(command, search, commandKeywords) {\n /**\n * NOTE: We used to do lower-casing on each recursive call, but this meant that `toLowerCase()`\n * was the dominating cost in the algorithm. Passing both is a little ugly, but considerably\n * faster.\n */\n command =\n commandKeywords && commandKeywords.length > 0\n ? `${`${command} ${commandKeywords?.join(\" \")}`}`\n : command;\n return computeCommandScoreInner(command, search, formatInput(command), formatInput(search), 0, 0, {});\n}\n","/**\n * A single `ResizeObserver` shared by every observed element in the app. Components like\n * `ScrollArea` create a handful of observers each, and multiple of them frequently watch the\n * same node, so allocating one observer per call site adds up quickly on pages with many\n * instances.\n */\nlet sharedObserver = null;\nconst observedNodes = new WeakMap();\nfunction getSharedObserver() {\n sharedObserver ??= new ResizeObserver((entries) => {\n for (const entry of entries) {\n const callbacks = observedNodes.get(entry.target);\n if (!callbacks)\n continue;\n // copy so a callback that unsubscribes doesn't mutate the set mid-iteration\n for (const callback of [...callbacks])\n callback();\n }\n });\n return sharedObserver;\n}\n/**\n * Observes `node` for size changes, returning a function that stops observing.\n *\n * Like a dedicated `ResizeObserver`, the callback fires once shortly after subscribing.\n */\nfunction observeResize(node, callback) {\n let callbacks = observedNodes.get(node);\n if (callbacks === undefined) {\n callbacks = new Set();\n observedNodes.set(node, callbacks);\n callbacks.add(callback);\n getSharedObserver().observe(node);\n }\n else {\n callbacks.add(callback);\n // `observe` only delivers its initial entry for newly observed targets, so a second\n // subscriber to an already-observed node has to be kicked off manually.\n callback();\n }\n return () => {\n const current = observedNodes.get(node);\n if (!current)\n return;\n current.delete(callback);\n if (current.size)\n return;\n observedNodes.delete(node);\n sharedObserver?.unobserve(node);\n };\n}\nexport class SvelteResizeObserver {\n #node;\n #onResize;\n constructor(node, onResize) {\n this.#node = node;\n this.#onResize = onResize;\n this.handler = this.handler.bind(this);\n $effect(this.handler);\n }\n handler() {\n let rAF = 0;\n const _node = this.#node();\n if (!_node)\n return;\n const unobserve = observeResize(_node, () => {\n cancelAnimationFrame(rAF);\n rAF = window.requestAnimationFrame(this.#onResize);\n });\n return () => {\n window.cancelAnimationFrame(rAF);\n unobserve();\n };\n }\n}\n","import { onDestroyEffect } from \"svelte-toolbelt\";\nimport { watch } from \"runed\";\nimport { AnimationsComplete } from \"../../../internal/animations-complete.js\";\nexport class Presence {\n opts;\n present;\n #afterAnimations;\n #isPresent = $state(false);\n #hasMounted = false;\n #transitionStatus = $state(undefined);\n #transitionFrame = null;\n constructor(opts) {\n this.opts = opts;\n this.present = this.opts.open;\n this.#isPresent = opts.open.current;\n this.#afterAnimations = new AnimationsComplete({\n ref: this.opts.ref,\n afterTick: this.opts.open,\n });\n onDestroyEffect(() => this.#clearTransitionFrame());\n watch(() => this.present.current, (isOpen) => {\n if (!this.#hasMounted) {\n this.#hasMounted = true;\n return;\n }\n this.#clearTransitionFrame();\n if (isOpen) {\n this.#isPresent = true;\n }\n this.#transitionStatus = isOpen ? \"starting\" : \"ending\";\n if (isOpen) {\n this.#transitionFrame = window.requestAnimationFrame(() => {\n this.#transitionFrame = null;\n if (this.present.current) {\n this.#transitionStatus = undefined;\n }\n });\n }\n this.#afterAnimations.run(() => {\n if (isOpen !== this.present.current)\n return;\n if (!isOpen) {\n this.#isPresent = false;\n }\n this.#transitionStatus = undefined;\n });\n });\n }\n isPresent = $derived.by(() => {\n return this.#isPresent;\n });\n get transitionStatus() {\n return this.#transitionStatus;\n }\n #clearTransitionFrame() {\n if (this.#transitionFrame === null)\n return;\n window.cancelAnimationFrame(this.#transitionFrame);\n this.#transitionFrame = null;\n }\n}\n","<script lang=\"ts\">\n\timport { boxWith } from \"svelte-toolbelt\";\n\timport { untrack } from \"svelte\";\n\timport type { PresenceLayerImplProps } from \"./types.js\";\n\timport { Presence } from \"./presence.svelte.js\";\n\n\tlet { open, forceMount, presence, ref }: PresenceLayerImplProps = $props();\n\n\tconst presenceState = new Presence({\n\t\topen: boxWith(() => open),\n\t\tref: untrack(() => ref),\n\t});\n</script>\n\n{#if forceMount || open || presenceState.isPresent}\n\t{@render presence?.({\n\t\tpresent: presenceState.isPresent,\n\t\ttransitionStatus: presenceState.transitionStatus,\n\t})}\n{/if}\n","/**\n * Clamps a number between a minimum and maximum value.\n */\nexport function clamp(n, min, max) {\n return Math.min(max, Math.max(min, n));\n}\n","import { simpleBox } from \"svelte-toolbelt\";\nexport class StateMachine {\n state;\n #machine;\n constructor(initialState, machine) {\n this.state = simpleBox(initialState);\n this.#machine = machine;\n this.dispatch = this.dispatch.bind(this);\n }\n #reducer(event) {\n // @ts-expect-error state.current is keyof M\n const nextState = this.#machine[this.state.current][event];\n return nextState ?? this.state.current;\n }\n dispatch(event) {\n this.state.current = this.#reducer(event);\n }\n}\n","/**\n * This logic is adapted from Radix UI ScrollArea component.\n * https://github.com/radix-ui/primitives/blob/main/packages/react/scroll-area/src/ScrollArea.tsx\n * Credit to Jenna Smith (@jjenzz) for the original implementation.\n * Incredible thought must have went into solving all the intricacies of this component.\n */\nimport { Context, useDebounce, watch } from \"runed\";\nimport { untrack } from \"svelte\";\nimport { simpleBox, executeCallbacks, attachRef, DOMContext, getWindow, } from \"svelte-toolbelt\";\nimport { mergeProps, useId } from \"../../shared/index.js\";\nimport { clamp } from \"../../internal/clamp.js\";\nimport { on } from \"svelte/events\";\nimport { createBitsAttrs } from \"../../internal/attrs.js\";\nimport { StateMachine } from \"../../internal/state-machine.js\";\nimport { SvelteResizeObserver } from \"../../internal/svelte-resize-observer.svelte.js\";\nconst scrollAreaAttrs = createBitsAttrs({\n component: \"scroll-area\",\n parts: [\"root\", \"viewport\", \"corner\", \"thumb\", \"scrollbar\"],\n});\nexport const ScrollAreaRootContext = new Context(\"ScrollArea.Root\");\nexport const ScrollAreaScrollbarContext = new Context(\"ScrollArea.Scrollbar\");\nexport const ScrollAreaScrollbarVisibleContext = new Context(\"ScrollArea.ScrollbarVisible\");\nexport const ScrollAreaScrollbarAxisContext = new Context(\"ScrollArea.ScrollbarAxis\");\nexport const ScrollAreaScrollbarSharedContext = new Context(\"ScrollArea.ScrollbarShared\");\nexport class ScrollAreaRootState {\n static create(opts) {\n return ScrollAreaRootContext.set(new ScrollAreaRootState(opts));\n }\n opts;\n attachment;\n scrollAreaNode = $state(null);\n viewportNode = $state(null);\n contentNode = $state(null);\n scrollbarXNode = $state(null);\n scrollbarYNode = $state(null);\n cornerWidth = $state(0);\n cornerHeight = $state(0);\n scrollbarXEnabled = $state(false);\n scrollbarYEnabled = $state(false);\n domContext;\n constructor(opts) {\n this.opts = opts;\n this.attachment = attachRef(opts.ref, (v) => (this.scrollAreaNode = v));\n this.domContext = new DOMContext(opts.ref);\n }\n props = $derived.by(() => ({\n id: this.opts.id.current,\n dir: this.opts.dir.current,\n style: {\n position: \"relative\",\n \"--bits-scroll-area-corner-height\": `${this.cornerHeight}px`,\n \"--bits-scroll-area-corner-width\": `${this.cornerWidth}px`,\n },\n [scrollAreaAttrs.root]: \"\",\n ...this.attachment,\n }));\n}\nexport class ScrollAreaViewportState {\n static create(opts) {\n return new ScrollAreaViewportState(opts, ScrollAreaRootContext.get());\n }\n opts;\n root;\n attachment;\n #contentId = simpleBox(useId());\n #contentRef = simpleBox(null);\n contentAttachment = attachRef(this.#contentRef, (v) => (this.root.contentNode = v));\n constructor(opts, root) {\n this.opts = opts;\n this.root = root;\n this.attachment = attachRef(opts.ref, (v) => (this.root.viewportNode = v));\n }\n props = $derived.by(() => ({\n id: this.opts.id.current,\n style: {\n overflowX: this.root.scrollbarXEnabled ? \"scroll\" : \"hidden\",\n overflowY: this.root.scrollbarYEnabled ? \"scroll\" : \"hidden\",\n },\n [scrollAreaAttrs.viewport]: \"\",\n ...this.attachment,\n }));\n contentProps = $derived.by(() => ({\n id: this.#contentId.current,\n \"data-scroll-area-content\": \"\",\n /**\n * When horizontal scrollbar is visible: this element should be at least\n * as wide as its children for size calculations to work correctly.\n *\n * When horizontal scrollbar is NOT visible: this element's width should\n * be constrained by the parent container to enable `text-overflow: ellipsis`\n */\n style: { minWidth: this.root.scrollbarXEnabled ? \"fit-content\" : undefined },\n ...this.contentAttachment,\n }));\n}\nexport class ScrollAreaScrollbarState {\n static create(opts) {\n return ScrollAreaScrollbarContext.set(new ScrollAreaScrollbarState(opts, ScrollAreaRootContext.get()));\n }\n opts;\n root;\n isHorizontal = $derived.by(() => this.opts.orientation.current === \"horizontal\");\n hasThumb = $state(false);\n constructor(opts, root) {\n this.opts = opts;\n this.root = root;\n watch(() => this.isHorizontal, (isHorizontal) => {\n if (isHorizontal) {\n this.root.scrollbarXEnabled = true;\n return () => {\n this.root.scrollbarXEnabled = false;\n };\n }\n else {\n this.root.scrollbarYEnabled = true;\n return () => {\n this.root.scrollbarYEnabled = false;\n };\n }\n });\n }\n}\nexport class ScrollAreaScrollbarHoverState {\n static create() {\n return new ScrollAreaScrollbarHoverState(ScrollAreaScrollbarContext.get());\n }\n scrollbar;\n root;\n isVisible = $state(false);\n constructor(scrollbar) {\n this.scrollbar = scrollbar;\n this.root = scrollbar.root;\n $effect(() => {\n const scrollAreaNode = this.root.scrollAreaNode;\n const hideDelay = this.root.opts.scrollHideDelay.current;\n let hideTimer = 0;\n if (!scrollAreaNode)\n return;\n const handlePointerEnter = () => {\n this.root.domContext.clearTimeout(hideTimer);\n untrack(() => (this.isVisible = true));\n };\n const handlePointerLeave = () => {\n if (hideTimer)\n this.root.domContext.clearTimeout(hideTimer);\n hideTimer = this.root.domContext.setTimeout(() => {\n untrack(() => {\n this.scrollbar.hasThumb = false;\n this.isVisible = false;\n });\n }, hideDelay);\n };\n const unsubListeners = executeCallbacks(on(scrollAreaNode, \"pointerenter\", handlePointerEnter), on(scrollAreaNode, \"pointerleave\", handlePointerLeave));\n return () => {\n this.root.domContext.getWindow().clearTimeout(hideTimer);\n unsubListeners();\n };\n });\n }\n props = $derived.by(() => ({\n \"data-state\": this.isVisible ? \"visible\" : \"hidden\",\n }));\n}\nexport class ScrollAreaScrollbarScrollState {\n static create() {\n return new ScrollAreaScrollbarScrollState(ScrollAreaScrollbarContext.get());\n }\n scrollbar;\n root;\n machine = new StateMachine(\"hidden\", {\n hidden: {\n SCROLL: \"scrolling\",\n },\n scrolling: {\n SCROLL_END: \"idle\",\n POINTER_ENTER: \"interacting\",\n },\n interacting: {\n SCROLL: \"interacting\",\n POINTER_LEAVE: \"idle\",\n },\n idle: {\n HIDE: \"hidden\",\n SCROLL: \"scrolling\",\n POINTER_ENTER: \"interacting\",\n },\n });\n isHidden = $derived.by(() => this.machine.state.current === \"hidden\");\n constructor(scrollbar) {\n this.scrollbar = scrollbar;\n this.root = scrollbar.root;\n const debounceScrollend = useDebounce(() => this.machine.dispatch(\"SCROLL_END\"), 100);\n $effect(() => {\n const _state = this.machine.state.current;\n const scrollHideDelay = this.root.opts.scrollHideDelay.current;\n if (_state === \"idle\") {\n const hideTimer = this.root.domContext.setTimeout(() => this.machine.dispatch(\"HIDE\"), scrollHideDelay);\n return () => this.root.domContext.clearTimeout(hideTimer);\n }\n });\n $effect(() => {\n const viewportNode = this.root.viewportNode;\n if (!viewportNode)\n return;\n const scrollDirection = this.scrollbar.isHorizontal ? \"scrollLeft\" : \"scrollTop\";\n let prevScrollPos = viewportNode[scrollDirection];\n const handleScroll = () => {\n const scrollPos = viewportNode[scrollDirection];\n const hasScrollInDirectionChanged = prevScrollPos !== scrollPos;\n if (hasScrollInDirectionChanged) {\n this.machine.dispatch(\"SCROLL\");\n debounceScrollend();\n }\n prevScrollPos = scrollPos;\n };\n const unsubListener = on(viewportNode, \"scroll\", handleScroll);\n return unsubListener;\n });\n this.onpointerenter = this.onpointerenter.bind(this);\n this.onpointerleave = this.onpointerleave.bind(this);\n }\n onpointerenter(_) {\n this.machine.dispatch(\"POINTER_ENTER\");\n }\n onpointerleave(_) {\n this.machine.dispatch(\"POINTER_LEAVE\");\n }\n props = $derived.by(() => ({\n \"data-state\": this.machine.state.current === \"hidden\" ? \"hidden\" : \"visible\",\n onpointerenter: this.onpointerenter,\n onpointerleave: this.onpointerleave,\n }));\n}\nexport class ScrollAreaScrollbarAutoState {\n static create() {\n return new ScrollAreaScrollbarAutoState(ScrollAreaScrollbarContext.get());\n }\n scrollbar;\n root;\n isVisible = $state(false);\n constructor(scrollbar) {\n this.scrollbar = scrollbar;\n this.root = scrollbar.root;\n const handleResize = () => {\n const viewportNode = this.root.viewportNode;\n if (!viewportNode)\n return;\n const isOverflowX = viewportNode.offsetWidth < viewportNode.scrollWidth;\n const isOverflowY = viewportNode.offsetHeight < viewportNode.scrollHeight;\n this.isVisible = this.scrollbar.isHorizontal ? isOverflowX : isOverflowY;\n };\n new SvelteResizeObserver(() => this.root.viewportNode, handleResize);\n new SvelteResizeObserver(() => this.root.contentNode, handleResize);\n }\n props = $derived.by(() => ({\n \"data-state\": this.isVisible ? \"visible\" : \"hidden\",\n }));\n}\nexport class ScrollAreaScrollbarVisibleState {\n static create() {\n return ScrollAreaScrollbarVisibleContext.set(new ScrollAreaScrollbarVisibleState(ScrollAreaScrollbarContext.get()));\n }\n scrollbar;\n root;\n thumbNode = $state(null);\n pointerOffset = $state(0);\n sizes = $state.raw({\n content: 0,\n viewport: 0,\n scrollbar: { size: 0, paddingStart: 0, paddingEnd: 0 },\n });\n thumbRatio = $derived.by(() => getThumbRatio(this.sizes.viewport, this.sizes.content));\n hasThumb = $derived.by(() => Boolean(this.thumbRatio > 0 && this.thumbRatio < 1));\n // this needs to be a $state to properly restore the transform style when the scrollbar\n // goes from a hidden to visible state, otherwise it will start at the beginning of the\n // scrollbar and flicker to the correct position after\n prevTransformStyle = $state(\"\");\n constructor(scrollbar) {\n this.scrollbar = scrollbar;\n this.root = scrollbar.root;\n $effect(() => {\n this.scrollbar.hasThumb = this.hasThumb;\n });\n $effect(() => {\n if (!this.scrollbar.hasThumb && this.thumbNode) {\n this.prevTransformStyle = this.thumbNode.style.transform;\n }\n });\n }\n setSizes(sizes) {\n this.sizes = sizes;\n }\n getScrollPosition(pointerPos, dir) {\n return getScrollPositionFromPointer({\n pointerPos,\n pointerOffset: this.pointerOffset,\n sizes: this.sizes,\n dir,\n });\n }\n onThumbPointerUp() {\n this.pointerOffset = 0;\n }\n onThumbPointerDown(pointerPos) {\n this.pointerOffset = pointerPos;\n }\n xOnThumbPositionChange() {\n if (!(this.root.viewportNode && this.thumbNode))\n return;\n const scrollPos = this.root.viewportNode.scrollLeft;\n const offset = getThumbOffsetFromScroll({\n scrollPos,\n sizes: this.sizes,\n dir: this.root.opts.dir.current,\n });\n const transformStyle = `translate3d(${offset}px, 0, 0)`;\n this.thumbNode.style.transform = transformStyle;\n this.prevTransformStyle = transformStyle;\n }\n xOnWheelScroll(scrollPos) {\n if (!this.root.viewportNode)\n return;\n this.root.viewportNode.scrollLeft = scrollPos;\n }\n xOnDragScroll(pointerPos) {\n if (!this.root.viewportNode)\n return;\n this.root.viewportNode.scrollLeft = this.getScrollPosition(pointerPos, this.root.opts.dir.current);\n }\n yOnThumbPositionChange() {\n if (!(this.root.viewportNode && this.thumbNode))\n return;\n const scrollPos = this.root.viewportNode.scrollTop;\n const offset = getThumbOffsetFromScroll({ scrollPos, sizes: this.sizes });\n const transformStyle = `translate3d(0, ${offset}px, 0)`;\n this.thumbNode.style.transform = transformStyle;\n this.prevTransformStyle = transformStyle;\n }\n yOnWheelScroll(scrollPos) {\n if (!this.root.viewportNode)\n return;\n this.root.viewportNode.scrollTop = scrollPos;\n }\n yOnDragScroll(pointerPos) {\n if (!this.root.viewportNode)\n return;\n this.root.viewportNode.scrollTop = this.getScrollPosition(pointerPos, this.root.opts.dir.current);\n }\n}\nexport class ScrollAreaScrollbarXState {\n static create(opts) {\n return ScrollAreaScrollbarAxisContext.set(new ScrollAreaScrollbarXState(opts, ScrollAreaScrollbarVisibleContext.get()));\n }\n opts;\n scrollbarVis;\n root;\n scrollbar;\n attachment;\n computedStyle = $state();\n constructor(opts, scrollbarVis) {\n this.opts = opts;\n this.scrollbarVis = scrollbarVis;\n this.root = scrollbarVis.root;\n this.scrollbar = scrollbarVis.scrollbar;\n this.attachment = attachRef(this.scrollbar.opts.ref, (v) => (this.root.scrollbarXNode = v));\n $effect(() => {\n if (!this.scrollbar.opts.ref.current)\n return;\n if (this.opts.mounted.current) {\n this.computedStyle = getComputedStyle(this.scrollbar.opts.ref.current);\n }\n });\n $effect(() => {\n // Ensure when a user scrolls down and then the scrollbar is hidden\n // that when it shows again it will be positioned correctly.\n this.onResize();\n });\n }\n onThumbPointerDown = (pointerPos) => {\n this.scrollbarVis.onThumbPointerDown(pointerPos.x);\n };\n onDragScroll = (pointerPos) => {\n this.scrollbarVis.xOnDragScroll(pointerPos.x);\n };\n onThumbPointerUp = () => {\n this.scrollbarVis.onThumbPointerUp();\n };\n onThumbPositionChange = () => {\n this.scrollbarVis.xOnThumbPositionChange();\n };\n onWheelScroll = (e, maxScrollPos) => {\n if (!this.root.viewportNode)\n return;\n const scrollPos = this.root.viewportNode.scrollLeft + e.deltaX;\n this.scrollbarVis.xOnWheelScroll(scrollPos);\n // prevent window scroll when wheeling scrollbar\n if (isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos)) {\n e.preventDefault();\n }\n };\n onResize = () => {\n if (!(this.scrollbar.opts.ref.current && this.root.viewportNode && this.computedStyle))\n return;\n this.scrollbarVis.setSizes({\n content: this.root.viewportNode.scrollWidth,\n viewport: this.root.viewportNode.offsetWidth,\n scrollbar: {\n size: this.scrollbar.opts.ref.current.clientWidth,\n paddingStart: toInt(this.computedStyle.paddingLeft),\n paddingEnd: toInt(this.computedStyle.paddingRight),\n },\n });\n };\n thumbSize = $derived.by(() => {\n return getThumbSize(this.scrollbarVis.sizes);\n });\n props = $derived.by(() => ({\n id: this.scrollbar.opts.id.current,\n \"data-orientation\": \"horizontal\",\n style: {\n bottom: 0,\n left: this.root.opts.dir.current === \"rtl\"\n ? \"var(--bits-scroll-area-corner-width)\"\n : 0,\n right: this.root.opts.dir.current === \"ltr\"\n ? \"var(--bits-scroll-area-corner-width)\"\n : 0,\n \"--bits-scroll-area-thumb-width\": `${this.thumbSize}px`,\n },\n ...this.attachment,\n }));\n}\nexport class ScrollAreaScrollbarYState {\n static create(opts) {\n return ScrollAreaScrollbarAxisContext.set(new ScrollAreaScrollbarYState(opts, ScrollAreaScrollbarVisibleContext.get()));\n }\n opts;\n scrollbarVis;\n root;\n scrollbar;\n attachment;\n computedStyle = $state();\n constructor(opts, scrollbarVis) {\n this.opts = opts;\n this.scrollbarVis = scrollbarVis;\n this.root = scrollbarVis.root;\n this.scrollbar = scrollbarVis.scrollbar;\n this.attachment = attachRef(this.scrollbar.opts.ref, (v) => (this.root.scrollbarYNode = v));\n $effect(() => {\n if (!this.scrollbar.opts.ref.current)\n return;\n if (this.opts.mounted.current) {\n this.computedStyle = getComputedStyle(this.scrollbar.opts.ref.current);\n }\n });\n $effect(() => {\n // Ensure when a user scrolls down and then the scrollbar is hidden\n // that when it shows again it will be positioned correctly.\n this.onResize();\n });\n this.onThumbPointerDown = this.onThumbPointerDown.bind(this);\n this.onDragScroll = this.onDragScroll.bind(this);\n this.onThumbPointerUp = this.onThumbPointerUp.bind(this);\n this.onThumbPositionChange = this.onThumbPositionChange.bind(this);\n this.onWheelScroll = this.onWheelScroll.bind(this);\n this.onResize = this.onResize.bind(this);\n }\n onThumbPointerDown(pointerPos) {\n this.scrollbarVis.onThumbPointerDown(pointerPos.y);\n }\n onDragScroll(pointerPos) {\n this.scrollbarVis.yOnDragScroll(pointerPos.y);\n }\n onThumbPointerUp() {\n this.scrollbarVis.onThumbPointerUp();\n }\n onThumbPositionChange() {\n this.scrollbarVis.yOnThumbPositionChange();\n }\n onWheelScroll(e, maxScrollPos) {\n if (!this.root.viewportNode)\n return;\n const scrollPos = this.root.viewportNode.scrollTop + e.deltaY;\n this.scrollbarVis.yOnWheelScroll(scrollPos);\n // prevent window scroll when wheeling scrollbar\n if (isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos)) {\n e.preventDefault();\n }\n }\n onResize() {\n if (!(this.scrollbar.opts.ref.current && this.root.viewportNode && this.computedStyle))\n return;\n this.scrollbarVis.setSizes({\n content: this.root.viewportNode.scrollHeight,\n viewport: this.root.viewportNode.offsetHeight,\n scrollbar: {\n size: this.scrollbar.opts.ref.current.clientHeight,\n paddingStart: toInt(this.computedStyle.paddingTop),\n paddingEnd: toInt(this.computedStyle.paddingBottom),\n },\n });\n }\n thumbSize = $derived.by(() => {\n return getThumbSize(this.scrollbarVis.sizes);\n });\n props = $derived.by(() => ({\n id: this.scrollbar.opts.id.current,\n \"data-orientation\": \"vertical\",\n style: {\n top: 0,\n right: this.root.opts.dir.current === \"ltr\" ? 0 : undefined,\n left: this.root.opts.dir.current === \"rtl\" ? 0 : undefined,\n bottom: \"var(--bits-scroll-area-corner-height)\",\n \"--bits-scroll-area-thumb-height\": `${this.thumbSize}px`,\n },\n ...this.attachment,\n }));\n}\nexport class ScrollAreaScrollbarSharedState {\n static create() {\n return ScrollAreaScrollbarSharedContext.set(new ScrollAreaScrollbarSharedState(ScrollAreaScrollbarAxisContext.get()));\n }\n scrollbarState;\n root;\n scrollbarVis;\n scrollbar;\n rect = $state.raw(null);\n prevWebkitUserSelect = $state(\"\");\n handleResize;\n handleThumbPositionChange;\n handleWheelScroll;\n handleThumbPointerDown;\n handleThumbPointerUp;\n maxScrollPos = $derived.by(() => this.scrollbarVis.sizes.content - this.scrollbarVis.sizes.viewport);\n constructor(scrollbarState) {\n this.scrollbarState = scrollbarState;\n this.root = scrollbarState.root;\n this.scrollbarVis = scrollbarState.scrollbarVis;\n this.scrollbar = scrollbarState.scrollbarVis.scrollbar;\n this.handleResize = () => this.scrollbarState.onResize();\n this.handleThumbPositionChange = this.scrollbarState.onThumbPositionChange;\n this.handleWheelScroll = this.scrollbarState.onWheelScroll;\n this.handleThumbPointerDown = this.scrollbarState.onThumbPointerDown;\n this.handleThumbPointerUp = this.scrollbarState.onThumbPointerUp;\n $effect(() => {\n const maxScrollPos = this.maxScrollPos;\n const scrollbarNode = this.scrollbar.opts.ref.current;\n // we want to react to the viewport node changing so we leave this here\n this.root.viewportNode;\n const handleWheel = (e) => {\n const node = e.target;\n const isScrollbarWheel = scrollbarNode?.contains(node);\n if (isScrollbarWheel)\n this.handleWheelScroll(e, maxScrollPos);\n };\n const unsubListener = on(this.root.domContext.getDocument(), \"wheel\", handleWheel, {\n passive: false,\n });\n return unsubListener;\n });\n $effect.pre(() => {\n // react to changes to this:\n this.scrollbarVis.sizes;\n untrack(() => this.handleThumbPositionChange());\n });\n // $effect.pre(() => {\n // \tthis.handleThumbPositionChange();\n // });\n new SvelteResizeObserver(() => this.scrollbar.opts.ref.current, this.handleResize);\n new SvelteResizeObserver(() => this.root.contentNode, this.handleResize);\n this.onpointerdown = this.onpointerdown.bind(this);\n this.onpointermove = this.onpointermove.bind(this);\n this.onpointerup = this.onpointerup.bind(this);\n this.onlostpointercapture = this.onlostpointercapture.bind(this);\n }\n handleDragScroll(e) {\n if (!this.rect)\n return;\n const x = e.clientX - this.rect.left;\n const y = e.clientY - this.rect.top;\n this.scrollbarState.onDragScroll({ x, y });\n }\n #cleanupPointerState() {\n if (this.rect === null)\n return;\n this.root.domContext.getDocument().body.style.webkitUserSelect = this.prevWebkitUserSelect;\n if (this.root.viewportNode)\n this.root.viewportNode.style.scrollBehavior = \"\";\n this.rect = null;\n }\n onpointerdown(e) {\n if (e.button !== 0)\n return;\n const target = e.target;\n target.setPointerCapture(e.pointerId);\n this.rect = this.scrollbar.opts.ref.current?.getBoundingClientRect() ?? null;\n // pointer capture doesn't prevent text selection in Safari\n // so we remove text selection manually when scrolling\n this.prevWebkitUserSelect = this.root.domContext.getDocument().body.style.webkitUserSelect;\n this.root.domContext.getDocument().body.style.webkitUserSelect = \"none\";\n if (this.root.viewportNode)\n this.root.viewportNode.style.scrollBehavior = \"auto\";\n this.handleDragScroll(e);\n }\n onpointermove(e) {\n this.handleDragScroll(e);\n }\n onpointerup(e) {\n const target = e.target;\n if (target.hasPointerCapture(e.pointerId)) {\n target.releasePointerCapture(e.pointerId);\n }\n this.#cleanupPointerState();\n }\n onlostpointercapture(_) {\n this.#cleanupPointerState();\n }\n props = $derived.by(() => mergeProps({\n ...this.scrollbarState.props,\n style: {\n position: \"absolute\",\n ...this.scrollbarState.props.style,\n },\n [scrollAreaAttrs.scrollbar]: \"\",\n onpointerdown: this.onpointerdown,\n onpointermove: this.onpointermove,\n onpointerup: this.onpointerup,\n onlostpointercapture: this.onlostpointercapture,\n }));\n}\nexport class ScrollAreaThumbImplState {\n static create(opts) {\n return new ScrollAreaThumbImplState(opts, ScrollAreaScrollbarSharedContext.get());\n }\n opts;\n scrollbarState;\n attachment;\n #root;\n #removeUnlinkedScrollListener = $state();\n #debounceScrollEnd = useDebounce(() => {\n if (this.#removeUnlinkedScrollListener) {\n this.#removeUnlinkedScrollListener();\n this.#removeUnlinkedScrollListener = undefined;\n }\n }, 100);\n constructor(opts, scrollbarState) {\n this.opts = opts;\n this.scrollbarState = scrollbarState;\n this.#root = scrollbarState.root;\n this.attachment = attachRef(this.opts.ref, (v) => (this.scrollbarState.scrollbarVis.thumbNode = v));\n $effect(() => {\n const viewportNode = this.#root.viewportNode;\n if (!viewportNode)\n return;\n const handleScroll = () => {\n this.#debounceScrollEnd();\n if (!this.#removeUnlinkedScrollListener) {\n const listener = addUnlinkedScrollListener(viewportNode, this.scrollbarState.handleThumbPositionChange);\n this.#removeUnlinkedScrollListener = listener;\n this.scrollbarState.handleThumbPositionChange();\n }\n };\n untrack(() => this.scrollbarState.handleThumbPositionChange());\n const unsubListener = on(viewportNode, \"scroll\", handleScroll);\n return unsubListener;\n });\n this.onpointerdowncapture = this.onpointerdowncapture.bind(this);\n this.onpointerup = this.onpointerup.bind(this);\n }\n onpointerdowncapture(e) {\n const thumb = e.target;\n if (!thumb)\n return;\n const thumbRect = thumb.getBoundingClientRect();\n const x = e.clientX - thumbRect.left;\n const y = e.clientY - thumbRect.top;\n this.scrollbarState.handleThumbPointerDown({ x, y });\n }\n onpointerup(_) {\n this.scrollbarState.handleThumbPointerUp();\n }\n props = $derived.by(() => ({\n id: this.opts.id.current,\n \"data-state\": this.scrollbarState.scrollbarVis.hasThumb ? \"visible\" : \"hidden\",\n style: {\n width: \"var(--bits-scroll-area-thumb-width)\",\n height: \"var(--bits-scroll-area-thumb-height)\",\n transform: this.scrollbarState.scrollbarVis.prevTransformStyle,\n },\n onpointerdowncapture: this.onpointerdowncapture,\n onpointerup: this.onpointerup,\n [scrollAreaAttrs.thumb]: \"\",\n ...this.attachment,\n }));\n}\nexport class ScrollAreaCornerImplState {\n static create(opts) {\n return new ScrollAreaCornerImplState(opts, ScrollAreaRootContext.get());\n }\n opts;\n root;\n attachment;\n #width = $state(0);\n #height = $state(0);\n hasSize = $derived(Boolean(this.#width && this.#height));\n constructor(opts, root) {\n this.opts = opts;\n this.root = root;\n this.attachment = attachRef(this.opts.ref);\n new SvelteResizeObserver(() => this.root.scrollbarXNode, () => {\n const height = this.root.scrollbarXNode?.offsetHeight || 0;\n this.root.cornerHeight = height;\n this.#height = height;\n });\n new SvelteResizeObserver(() => this.root.scrollbarYNode, () => {\n const width = this.root.scrollbarYNode?.offsetWidth || 0;\n this.root.cornerWidth = width;\n this.#width = width;\n });\n }\n props = $derived.by(() => ({\n id: this.opts.id.current,\n style: {\n width: this.#width,\n height: this.#height,\n position: \"absolute\",\n right: this.root.opts.dir.current === \"ltr\" ? 0 : undefined,\n left: this.root.opts.dir.current === \"rtl\" ? 0 : undefined,\n bottom: 0,\n },\n [scrollAreaAttrs.corner]: \"\",\n ...this.attachment,\n }));\n}\nfunction toInt(value) {\n return value ? Number.parseInt(value, 10) : 0;\n}\nfunction getThumbRatio(viewportSize, contentSize) {\n const ratio = viewportSize / contentSize;\n return Number.isNaN(ratio) ? 0 : ratio;\n}\nfunction getThumbSize(sizes) {\n const ratio = getThumbRatio(sizes.viewport, sizes.content);\n const scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd;\n const thumbSize = (sizes.scrollbar.size - scrollbarPadding) * ratio;\n return Math.max(thumbSize, 18);\n}\nfunction getScrollPositionFromPointer({ pointerPos, pointerOffset, sizes, dir = \"ltr\", }) {\n const thumbSizePx = getThumbSize(sizes);\n const thumbCenter = thumbSizePx / 2;\n const offset = pointerOffset || thumbCenter;\n const thumbOffsetFromEnd = thumbSizePx - offset;\n const minPointerPos = sizes.scrollbar.paddingStart + offset;\n const maxPointerPos = sizes.scrollbar.size - sizes.scrollbar.paddingEnd - thumbOffsetFromEnd;\n const maxScrollPos = sizes.content - sizes.viewport;\n const scrollRange = dir === \"ltr\" ? [0, maxScrollPos] : [maxScrollPos * -1, 0];\n const interpolate = linearScale([minPointerPos, maxPointerPos], scrollRange);\n return interpolate(pointerPos);\n}\nfunction getThumbOffsetFromScroll({ scrollPos, sizes, dir = \"ltr\", }) {\n const thumbSizePx = getThumbSize(sizes);\n const scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd;\n const scrollbar = sizes.scrollbar.size - scrollbarPadding;\n const maxScrollPos = sizes.content - sizes.viewport;\n const maxThumbPos = scrollbar - thumbSizePx;\n const scrollClampRange = dir === \"ltr\" ? [0, maxScrollPos] : [maxScrollPos * -1, 0];\n const scrollWithoutMomentum = clamp(scrollPos, scrollClampRange[0], scrollClampRange[1]);\n const interpolate = linearScale([0, maxScrollPos], [0, maxThumbPos]);\n return interpolate(scrollWithoutMomentum);\n}\n// https://github.com/tmcw-up-for-adoption/simple-linear-scale/blob/master/index.js\nfunction linearScale(input, output) {\n return (value) => {\n if (input[0] === input[1] || output[0] === output[1])\n return output[0];\n const ratio = (output[1] - output[0]) / (input[1] - input[0]);\n return output[0] + ratio * (value - input[0]);\n };\n}\nfunction isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos) {\n return scrollPos > 0 && scrollPos < maxScrollPos;\n}\nfunction addUnlinkedScrollListener(node, handler) {\n let prevPosition = { left: node.scrollLeft, top: node.scrollTop };\n let rAF = 0;\n const win = getWindow(node);\n (function loop() {\n const position = { left: node.scrollLeft, top: node.scrollTop };\n const isHorizontalScroll = prevPosition.left !== position.left;\n const isVerticalScroll = prevPosition.top !== position.top;\n if (isHorizontalScroll || isVerticalScroll)\n handler();\n prevPosition = position;\n rAF = win.requestAnimationFrame(loop);\n })();\n return () => win.cancelAnimationFrame(rAF);\n}\n","<script lang=\"ts\">\n\timport { boxWith, mergeProps } from \"svelte-toolbelt\";\n\timport type { ScrollAreaRootProps } from \"../types.js\";\n\timport { ScrollAreaRootState } from \"../scroll-area.svelte.js\";\n\timport { createId } from \"../../../internal/create-id.js\";\n\n\tconst uid = $props.id();\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tid = createId(uid),\n\t\ttype = \"hover\",\n\t\tdir = \"ltr\",\n\t\tscrollHideDelay = 600,\n\t\tchildren,\n\t\tchild,\n\t\t...restProps\n\t}: ScrollAreaRootProps = $props();\n\n\tconst rootState = ScrollAreaRootState.create({\n\t\ttype: boxWith(() => type),\n\t\tdir: boxWith(() => dir),\n\t\tscrollHideDelay: boxWith(() => scrollHideDelay),\n\t\tid: boxWith(() => id),\n\t\tref: boxWith(\n\t\t\t() => ref,\n\t\t\t(v) => (ref = v)\n\t\t),\n\t});\n\n\tconst mergedProps = $derived(mergeProps(restProps, rootState.props));\n</script>\n\n{#if child}\n\t{@render child({ props: mergedProps })}\n{:else}\n\t<div {...mergedProps}>\n\t\t{@render children?.()}\n\t</div>\n{/if}\n","<script lang=\"ts\">\n\timport { boxWith, mergeProps } from \"svelte-toolbelt\";\n\timport type { ScrollAreaViewportProps } from \"../types.js\";\n\timport { ScrollAreaViewportState } from \"../scroll-area.svelte.js\";\n\timport { createId } from \"../../../internal/create-id.js\";\n\n\tconst uid = $props.id();\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tid = createId(uid),\n\t\tchildren,\n\t\t...restProps\n\t}: ScrollAreaViewportProps = $props();\n\n\tconst viewportState = ScrollAreaViewportState.create({\n\t\tid: boxWith(() => id),\n\t\tref: boxWith(\n\t\t\t() => ref,\n\t\t\t(v) => (ref = v)\n\t\t),\n\t});\n\n\tconst mergedProps = $derived(mergeProps(restProps, viewportState.props));\n\tconst mergedContentProps = $derived(mergeProps({}, viewportState.contentProps));\n</script>\n\n<div {...mergedProps}>\n\t<div {...mergedContentProps}>\n\t\t{@render children?.()}\n\t</div>\n</div>\n\n<style>\n\t/* Hide scrollbars cross browser and enable momentum scroll for touch devices */\n\t:global([data-scroll-area-viewport]) {\n\t\tscrollbar-width: none !important;\n\t\t-ms-overflow-style: none !important;\n\t\t-webkit-overflow-scrolling: touch !important;\n\t}\n\t:global([data-scroll-area-viewport])::-webkit-scrollbar {\n\t\tdisplay: none !important;\n\t}\n\n\t:global(:where([data-scroll-area-viewport])) {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: stretch;\n\t}\n\t:global(:where([data-scroll-area-content])) {\n\t\tflex-grow: 1;\n\t}\n</style>\n","<script lang=\"ts\">\n\timport { mergeProps } from \"svelte-toolbelt\";\n\timport { ScrollAreaScrollbarSharedState } from \"../scroll-area.svelte.js\";\n\timport type { _ScrollbarStubProps } from \"../types.js\";\n\n\tlet { child, children, ...restProps }: _ScrollbarStubProps = $props();\n\n\tconst scrollbarSharedState = ScrollAreaScrollbarSharedState.create();\n\n\tconst mergedProps = $derived(mergeProps(restProps, scrollbarSharedState.props));\n</script>\n\n{#if child}\n\t{@render child({ props: mergedProps })}\n{:else}\n\t<div {...mergedProps}>\n\t\t{@render children?.()}\n\t</div>\n{/if}\n","<script lang=\"ts\">\n\timport { IsMounted } from \"runed\";\n\timport { boxWith, mergeProps } from \"svelte-toolbelt\";\n\timport { ScrollAreaScrollbarXState } from \"../scroll-area.svelte.js\";\n\timport type { _ScrollbarStubProps } from \"../types.js\";\n\timport ScrollAreaScrollbarShared from \"./scroll-area-scrollbar-shared.svelte\";\n\n\tlet { ...restProps }: _ScrollbarStubProps = $props();\n\n\tconst isMounted = new IsMounted();\n\n\tconst scrollbarXState = ScrollAreaScrollbarXState.create({\n\t\tmounted: boxWith(() => isMounted.current),\n\t});\n\t// oxlint-disable-next-line no-explicit-any\n\tconst mergedProps = $derived(mergeProps(restProps, scrollbarXState.props)) as any;\n</script>\n\n<ScrollAreaScrollbarShared {...mergedProps} />\n","<script lang=\"ts\">\n\timport { IsMounted } from \"runed\";\n\timport { boxWith, mergeProps } from \"svelte-toolbelt\";\n\timport { ScrollAreaScrollbarYState } from \"../scroll-area.svelte.js\";\n\timport type { _ScrollbarStubProps } from \"../types.js\";\n\timport ScrollAreaScrollbarShared from \"./scroll-area-scrollbar-shared.svelte\";\n\n\tlet { ...restProps }: _ScrollbarStubProps = $props();\n\n\tconst isMounted = new IsMounted();\n\n\tconst scrollbarYState = ScrollAreaScrollbarYState.create({\n\t\tmounted: boxWith(() => isMounted.current),\n\t});\n\n\t// oxlint-disable-next-line no-explicit-any\n\tconst mergedProps = $derived(mergeProps(restProps, scrollbarYState.props)) as any;\n</script>\n\n<ScrollAreaScrollbarShared {...mergedProps} />\n","<script lang=\"ts\">\n\timport { ScrollAreaScrollbarVisibleState } from \"../scroll-area.svelte.js\";\n\timport type { _ScrollbarStubProps } from \"../types.js\";\n\timport ScrollAreaScrollbarX from \"./scroll-area-scrollbar-x.svelte\";\n\timport ScrollAreaScrollbarY from \"./scroll-area-scrollbar-y.svelte\";\n\n\tlet { ...restProps }: Omit<_ScrollbarStubProps, \"forceMount\"> = $props();\n\n\tconst scrollbarVisibleState = ScrollAreaScrollbarVisibleState.create();\n</script>\n\n{#if scrollbarVisibleState.scrollbar.opts.orientation.current === \"horizontal\"}\n\t<ScrollAreaScrollbarX {...restProps} />\n{:else}\n\t<ScrollAreaScrollbarY {...restProps} />\n{/if}\n","<script lang=\"ts\">\n\timport { mergeProps } from \"svelte-toolbelt\";\n\timport { ScrollAreaScrollbarAutoState } from \"../scroll-area.svelte.js\";\n\timport type { _ScrollbarStubProps } from \"../types.js\";\n\timport ScrollAreaScrollbarVisible from \"./scroll-area-scrollbar-visible.svelte\";\n\timport PresenceLayer from \"../../utilities/presence-layer/presence-layer.svelte\";\n\n\tlet { forceMount = false, ...restProps }: _ScrollbarStubProps = $props();\n\n\tconst scrollbarAutoState = ScrollAreaScrollbarAutoState.create();\n\tconst mergedProps = $derived(mergeProps(restProps, scrollbarAutoState.props));\n</script>\n\n<PresenceLayer\n\topen={forceMount || scrollbarAutoState.isVisible}\n\tref={scrollbarAutoState.scrollbar.opts.ref}\n>\n\t{#snippet presence()}\n\t\t<ScrollAreaScrollbarVisible {...mergedProps} />\n\t{/snippet}\n</PresenceLayer>\n","<script lang=\"ts\">\n\timport { mergeProps } from \"svelte-toolbelt\";\n\timport { ScrollAreaScrollbarScrollState } from \"../scroll-area.svelte.js\";\n\timport type { _ScrollbarStubProps } from \"../types.js\";\n\timport ScrollAreaScrollbarVisible from \"./scroll-area-scrollbar-visible.svelte\";\n\timport PresenceLayer from \"../../utilities/presence-layer/presence-layer.svelte\";\n\n\tlet { forceMount = false, ...restProps }: _ScrollbarStubProps = $props();\n\n\tconst scrollbarScrollState = ScrollAreaScrollbarScrollState.create();\n\n\tconst mergedProps = $derived(mergeProps(restProps, scrollbarScrollState.props));\n</script>\n\n<PresenceLayer\n\t{...mergedProps}\n\topen={forceMount || !scrollbarScrollState.isHidden}\n\tref={scrollbarScrollState.scrollbar.opts.ref}\n>\n\t{#snippet presence()}\n\t\t<ScrollAreaScrollbarVisible {...mergedProps} />\n\t{/snippet}\n</PresenceLayer>\n","<script lang=\"ts\">\n\timport { mergeProps } from \"svelte-toolbelt\";\n\timport {\n\t\tScrollAreaScrollbarAutoState,\n\t\tScrollAreaScrollbarHoverState,\n\t} from \"../scroll-area.svelte.js\";\n\timport type { _ScrollbarStubProps } from \"../types.js\";\n\timport ScrollAreaScrollbarVisible from \"./scroll-area-scrollbar-visible.svelte\";\n\timport PresenceLayer from \"../../utilities/presence-layer/presence-layer.svelte\";\n\n\tlet { forceMount = false, ...restProps }: _ScrollbarStubProps = $props();\n\n\tconst scrollbarHoverState = ScrollAreaScrollbarHoverState.create();\n\tconst scrollbarAutoState = ScrollAreaScrollbarAutoState.create();\n\tconst mergedProps = $derived(\n\t\tmergeProps(restProps, scrollbarHoverState.props, scrollbarAutoState.props, {\n\t\t\t\"data-state\": scrollbarHoverState.isVisible ? \"visible\" : \"hidden\",\n\t\t})\n\t);\n\n\tconst open = $derived(\n\t\tforceMount || (scrollbarHoverState.isVisible && scrollbarAutoState.isVisible)\n\t);\n</script>\n\n<PresenceLayer {open} ref={scrollbarAutoState.scrollbar.opts.ref}>\n\t{#snippet presence()}\n\t\t<ScrollAreaScrollbarVisible {...mergedProps} />\n\t{/snippet}\n</PresenceLayer>\n","<script lang=\"ts\">\n\timport { boxWith } from \"svelte-toolbelt\";\n\timport type { ScrollAreaScrollbarProps } from \"../types.js\";\n\timport { ScrollAreaScrollbarState } from \"../scroll-area.svelte.js\";\n\timport ScrollAreaScrollbarAuto from \"./scroll-area-scrollbar-auto.svelte\";\n\timport ScrollAreaScrollbarScroll from \"./scroll-area-scrollbar-scroll.svelte\";\n\timport ScrollAreaScrollbarHover from \"./scroll-area-scrollbar-hover.svelte\";\n\timport ScrollAreaScrollbarVisible from \"./scroll-area-scrollbar-visible.svelte\";\n\timport { createId } from \"../../../internal/create-id.js\";\n\n\tconst uid = $props.id();\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tid = createId(uid),\n\t\torientation,\n\t\t...restProps\n\t}: ScrollAreaScrollbarProps = $props();\n\n\tconst scrollbarState = ScrollAreaScrollbarState.create({\n\t\torientation: boxWith(() => orientation),\n\t\tid: boxWith(() => id),\n\t\tref: boxWith(\n\t\t\t() => ref,\n\t\t\t(v) => (ref = v)\n\t\t),\n\t});\n\n\tconst type = $derived(scrollbarState.root.opts.type.current);\n</script>\n\n{#if type === \"hover\"}\n\t<ScrollAreaScrollbarHover {...restProps} {id} />\n{:else if type === \"scroll\"}\n\t<ScrollAreaScrollbarScroll {...restProps} {id} />\n{:else if type === \"auto\"}\n\t<ScrollAreaScrollbarAuto {...restProps} {id} />\n{:else if type === \"always\"}\n\t<ScrollAreaScrollbarVisible {...restProps} {id} />\n{/if}\n","<script lang=\"ts\">\n\timport { boxWith, mergeProps } from \"svelte-toolbelt\";\n\timport { IsMounted } from \"runed\";\n\timport type { ScrollAreaThumbProps } from \"../types.js\";\n\timport { ScrollAreaThumbImplState } from \"../scroll-area.svelte.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tid,\n\t\tchild,\n\t\tchildren,\n\t\tpresent,\n\t\t...restProps\n\t}: Omit<ScrollAreaThumbProps, \"forceMount\" | \"id\"> & {\n\t\tid: string;\n\t\tpresent: boolean;\n\t} = $props();\n\n\tconst isMounted = new IsMounted();\n\n\tconst thumbState = ScrollAreaThumbImplState.create({\n\t\tid: boxWith(() => id),\n\t\tref: boxWith(\n\t\t\t() => ref,\n\t\t\t(v) => (ref = v)\n\t\t),\n\t\tmounted: boxWith(() => isMounted.current),\n\t});\n\n\tconst mergedProps = $derived(\n\t\tmergeProps(restProps, thumbState.props, {\n\t\t\tstyle: {\n\t\t\t\thidden: !present,\n\t\t\t},\n\t\t})\n\t);\n</script>\n\n{#if child}\n\t{@render child({ props: mergedProps })}\n{:else}\n\t<div {...mergedProps}>\n\t\t{@render children?.()}\n\t</div>\n{/if}\n","<script lang=\"ts\">\n\timport type { ScrollAreaThumbProps } from \"../types.js\";\n\timport { ScrollAreaScrollbarVisibleContext } from \"../scroll-area.svelte.js\";\n\timport ScrollAreaThumbImpl from \"./scroll-area-thumb-impl.svelte\";\n\timport { createId } from \"../../../internal/create-id.js\";\n\timport PresenceLayer from \"../../utilities/presence-layer/presence-layer.svelte\";\n\n\tconst uid = $props.id();\n\n\tlet {\n\t\tid = createId(uid),\n\t\tref = $bindable(null),\n\t\tforceMount = false,\n\t\t...restProps\n\t}: ScrollAreaThumbProps = $props();\n\n\tconst scrollbarState = ScrollAreaScrollbarVisibleContext.get();\n</script>\n\n<PresenceLayer open={forceMount || scrollbarState.hasThumb} ref={scrollbarState.scrollbar.opts.ref}>\n\t{#snippet presence({ present })}\n\t\t<ScrollAreaThumbImpl {...restProps} {id} bind:ref {present} />\n\t{/snippet}\n</PresenceLayer>\n","<script lang=\"ts\">\n\timport { boxWith, mergeProps } from \"svelte-toolbelt\";\n\timport type { ScrollAreaCornerProps } from \"../types.js\";\n\timport { ScrollAreaCornerImplState } from \"../scroll-area.svelte.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tid,\n\t\tchildren,\n\t\tchild,\n\t\t...restProps\n\t}: Omit<ScrollAreaCornerProps, \"id\"> & {\n\t\tid: string;\n\t} = $props();\n\n\tconst cornerState = ScrollAreaCornerImplState.create({\n\t\tid: boxWith(() => id),\n\t\tref: boxWith(\n\t\t\t() => ref,\n\t\t\t(v) => (ref = v)\n\t\t),\n\t});\n\n\tconst mergedProps = $derived(mergeProps(restProps, cornerState.props));\n</script>\n\n{#if child}\n\t{@render child({ props: mergedProps })}\n{:else}\n\t<div {...mergedProps}>\n\t\t{@render children?.()}\n\t</div>\n{/if}\n","<script lang=\"ts\">\n\timport type { ScrollAreaCornerProps } from \"../types.js\";\n\timport { ScrollAreaRootContext } from \"../scroll-area.svelte.js\";\n\timport ScrollAreaCornerImpl from \"./scroll-area-corner-impl.svelte\";\n\timport { createId } from \"../../../internal/create-id.js\";\n\n\tconst uid = $props.id();\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tid = createId(uid),\n\t\t...restProps\n\t}: ScrollAreaCornerProps = $props();\n\n\tconst scrollAreaState = ScrollAreaRootContext.get();\n\n\tconst hasBothScrollbarsVisible = $derived(\n\t\tBoolean(scrollAreaState.scrollbarXNode && scrollAreaState.scrollbarYNode)\n\t);\n\tconst hasCorner = $derived(\n\t\tscrollAreaState.opts.type.current !== \"scroll\" && hasBothScrollbarsVisible\n\t);\n</script>\n\n{#if hasCorner}\n\t<ScrollAreaCornerImpl {...restProps} {id} bind:ref />\n{/if}\n","import { SvelteMap } from \"svelte/reactivity\";\nimport { attachRef } from \"svelte-toolbelt\";\nimport { Context, watch } from \"runed\";\nimport { createBitsAttrs, boolToStr, boolToEmptyStrOrUndef, boolToTrueOrUndef, } from \"../../internal/attrs.js\";\nimport { kbd } from \"../../internal/kbd.js\";\nimport { RovingFocusGroup } from \"../../internal/roving-focus-group.js\";\nconst tabsAttrs = createBitsAttrs({\n component: \"tabs\",\n parts: [\"root\", \"list\", \"trigger\", \"content\"],\n});\nconst TabsRootContext = new Context(\"Tabs.Root\");\nexport class TabsRootState {\n static create(opts) {\n return TabsRootContext.set(new TabsRootState(opts));\n }\n opts;\n attachment;\n rovingFocusGroup;\n triggerIds = $state([]);\n // holds the trigger ID for each value to associate it with the content\n valueToTriggerId = new SvelteMap();\n // holds the content ID for each value to associate it with the trigger\n valueToContentId = new SvelteMap();\n constructor(opts) {\n this.opts = opts;\n this.attachment = attachRef(opts.ref);\n this.rovingFocusGroup = new RovingFocusGroup({\n candidateAttr: tabsAttrs.trigger,\n rootAttr: tabsAttrs.root,\n rootNode: this.opts.ref,\n loop: this.opts.loop,\n orientation: this.opts.orientation,\n });\n }\n registerTrigger(id, value) {\n this.triggerIds.push(id);\n this.valueToTriggerId.set(value, id);\n // returns the deregister function\n return () => {\n this.triggerIds = this.triggerIds.filter((triggerId) => triggerId !== id);\n this.valueToTriggerId.delete(value);\n };\n }\n registerContent(id, value) {\n this.valueToContentId.set(value, id);\n // returns the deregister function\n return () => {\n this.valueToContentId.delete(value);\n };\n }\n setValue(v) {\n this.opts.value.current = v;\n }\n props = $derived.by(() => ({\n id: this.opts.id.current,\n \"data-orientation\": this.opts.orientation.current,\n [tabsAttrs.root]: \"\",\n ...this.attachment,\n }));\n}\nexport class TabsListState {\n static create(opts) {\n return new TabsListState(opts, TabsRootContext.get());\n }\n opts;\n root;\n attachment;\n #isDisabled = $derived.by(() => this.root.opts.disabled.current);\n constructor(opts, root) {\n this.opts = opts;\n this.root = root;\n this.attachment = attachRef(opts.ref);\n }\n props = $derived.by(() => ({\n id: this.opts.id.current,\n role: \"tablist\",\n \"aria-orientation\": this.root.opts.orientation.current,\n \"data-orientation\": this.root.opts.orientation.current,\n [tabsAttrs.list]: \"\",\n \"data-disabled\": boolToEmptyStrOrUndef(this.#isDisabled),\n ...this.attachment,\n }));\n}\nexport class TabsTriggerState {\n static create(opts) {\n return new TabsTriggerState(opts, TabsRootContext.get());\n }\n opts;\n root;\n attachment;\n #tabIndex = $state(0);\n #isActive = $derived.by(() => this.root.opts.value.current === this.opts.value.current);\n #isDisabled = $derived.by(() => this.opts.disabled.current || this.root.opts.disabled.current);\n #ariaControls = $derived.by(() => this.root.valueToContentId.get(this.opts.value.current));\n constructor(opts, root) {\n this.opts = opts;\n this.root = root;\n this.attachment = attachRef(opts.ref);\n watch([() => this.opts.id.current, () => this.opts.value.current], ([id, value]) => {\n return this.root.registerTrigger(id, value);\n });\n $effect(() => {\n this.root.triggerIds.length;\n if (this.#isActive || !this.root.opts.value.current) {\n this.#tabIndex = 0;\n }\n else {\n this.#tabIndex = -1;\n }\n });\n this.onfocus = this.onfocus.bind(this);\n this.onclick = this.onclick.bind(this);\n this.onkeydown = this.onkeydown.bind(this);\n }\n #activate() {\n if (this.root.opts.value.current === this.opts.value.current)\n return;\n this.root.setValue(this.opts.value.current);\n }\n onfocus(_) {\n if (this.root.opts.activationMode.current !== \"automatic\" || this.#isDisabled)\n return;\n this.#activate();\n }\n onclick(_) {\n if (this.#isDisabled)\n return;\n this.#activate();\n }\n onkeydown(e) {\n if (this.#isDisabled)\n return;\n if (e.key === kbd.SPACE || e.key === kbd.ENTER) {\n e.preventDefault();\n this.#activate();\n return;\n }\n this.root.rovingFocusGroup.handleKeydown(this.opts.ref.current, e);\n }\n props = $derived.by(() => ({\n id: this.opts.id.current,\n role: \"tab\",\n \"data-state\": getTabDataState(this.#isActive),\n \"data-value\": this.opts.value.current,\n \"data-orientation\": this.root.opts.orientation.current,\n \"data-disabled\": boolToEmptyStrOrUndef(this.#isDisabled),\n \"aria-selected\": boolToStr(this.#isActive),\n \"aria-controls\": this.#ariaControls,\n [tabsAttrs.trigger]: \"\",\n disabled: boolToTrueOrUndef(this.#isDisabled),\n tabindex: this.#tabIndex,\n //\n onclick: this.onclick,\n onfocus: this.onfocus,\n onkeydown: this.onkeydown,\n ...this.attachment,\n }));\n}\nexport class TabsContentState {\n static create(opts) {\n return new TabsContentState(opts, TabsRootContext.get());\n }\n opts;\n root;\n attachment;\n #isActive = $derived.by(() => this.root.opts.value.current === this.opts.value.current);\n #ariaLabelledBy = $derived.by(() => this.root.valueToTriggerId.get(this.opts.value.current));\n constructor(opts, root) {\n this.opts = opts;\n this.root = root;\n this.attachment = attachRef(opts.ref);\n watch([() => this.opts.id.current, () => this.opts.value.current], ([id, value]) => {\n return this.root.registerContent(id, value);\n });\n }\n props = $derived.by(() => ({\n id: this.opts.id.current,\n role: \"tabpanel\",\n hidden: boolToTrueOrUndef(!this.#isActive),\n tabindex: this.opts.tabindex.current,\n \"data-value\": this.opts.value.current,\n \"data-state\": getTabDataState(this.#isActive),\n \"aria-labelledby\": this.#ariaLabelledBy,\n \"data-orientation\": this.root.opts.orientation.current,\n [tabsAttrs.content]: \"\",\n ...this.attachment,\n }));\n}\nfunction getTabDataState(condition) {\n return condition ? \"active\" : \"inactive\";\n}\n","<script lang=\"ts\">\n\timport { boxWith, mergeProps } from \"svelte-toolbelt\";\n\timport type { TabsRootProps } from \"../types.js\";\n\timport { TabsRootState } from \"../tabs.svelte.js\";\n\timport { createId } from \"../../../internal/create-id.js\";\n\timport { noop } from \"../../../internal/noop.js\";\n\n\tconst uid = $props.id();\n\n\tlet {\n\t\tid = createId(uid),\n\t\tref = $bindable(null),\n\t\tvalue = $bindable(\"\"),\n\t\tonValueChange = noop,\n\t\torientation = \"horizontal\",\n\t\tloop = true,\n\t\tactivationMode = \"automatic\",\n\t\tdisabled = false,\n\t\tchildren,\n\t\tchild,\n\t\t...restProps\n\t}: TabsRootProps = $props();\n\n\tconst rootState = TabsRootState.create({\n\t\tid: boxWith(() => id),\n\t\tvalue: boxWith(\n\t\t\t() => value,\n\t\t\t(v) => {\n\t\t\t\tvalue = v;\n\t\t\t\tonValueChange(v);\n\t\t\t}\n\t\t),\n\t\torientation: boxWith(() => orientation),\n\t\tloop: boxWith(() => loop),\n\t\tactivationMode: boxWith(() => activationMode),\n\t\tdisabled: boxWith(() => disabled),\n\t\tref: boxWith(\n\t\t\t() => ref,\n\t\t\t(v) => (ref = v)\n\t\t),\n\t});\n\n\tconst mergedProps = $derived(mergeProps(restProps, rootState.props));\n</script>\n\n{#if child}\n\t{@render child({ props: mergedProps })}\n{:else}\n\t<div {...mergedProps}>\n\t\t{@render children?.()}\n\t</div>\n{/if}\n","<script lang=\"ts\">\n\timport { boxWith, mergeProps } from \"svelte-toolbelt\";\n\timport type { TabsListProps } from \"../types.js\";\n\timport { TabsListState } from \"../tabs.svelte.js\";\n\timport { createId } from \"../../../internal/create-id.js\";\n\n\tconst uid = $props.id();\n\n\tlet {\n\t\tchild,\n\t\tchildren,\n\t\tid = createId(uid),\n\t\tref = $bindable(null),\n\t\t...restProps\n\t}: TabsListProps = $props();\n\n\tconst listState = TabsListState.create({\n\t\tid: boxWith(() => id),\n\t\tref: boxWith(\n\t\t\t() => ref,\n\t\t\t(v) => (ref = v)\n\t\t),\n\t});\n\n\tconst mergedProps = $derived(mergeProps(restProps, listState.props));\n</script>\n\n{#if child}\n\t{@render child({ props: mergedProps })}\n{:else}\n\t<div {...mergedProps}>\n\t\t{@render children?.()}\n\t</div>\n{/if}\n","<script lang=\"ts\">\n\timport { boxWith, mergeProps } from \"svelte-toolbelt\";\n\timport type { TabsTriggerProps } from \"../types.js\";\n\timport { TabsTriggerState } from \"../tabs.svelte.js\";\n\timport { createId } from \"../../../internal/create-id.js\";\n\n\tconst uid = $props.id();\n\n\tlet {\n\t\tchild,\n\t\tchildren,\n\t\tdisabled = false,\n\t\tid = createId(uid),\n\t\ttype = \"button\",\n\t\tvalue,\n\t\tref = $bindable(null),\n\t\t...restProps\n\t}: TabsTriggerProps = $props();\n\n\tconst triggerState = TabsTriggerState.create({\n\t\tid: boxWith(() => id),\n\t\tdisabled: boxWith(() => disabled ?? false),\n\t\tvalue: boxWith(() => value),\n\t\tref: boxWith(\n\t\t\t() => ref,\n\t\t\t(v) => (ref = v)\n\t\t),\n\t});\n\n\tconst mergedProps = $derived(mergeProps(restProps, triggerState.props, { type }));\n</script>\n\n{#if child}\n\t{@render child({ props: mergedProps })}\n{:else}\n\t<button {...mergedProps}>\n\t\t{@render children?.()}\n\t</button>\n{/if}\n","<script lang=\"ts\" module>\n\texport interface RowMenuItem {\n\t\tlabel: string;\n\t\ticon: string;\n\t\trun: () => void;\n\t}\n</script>\n\n<script lang=\"ts\">\n\t/**\n\t * One session in the sidebar.\n\t *\n\t * Line 1 is the state, the title, and the meta: what asks for a person, or\n\t * how long the turn has run, or how long ago anything happened — then the\n\t * `meta` slot for whatever a later feature hangs there (a diff badge), the\n\t * machine's letter when the list does not say which machine, and the\n\t * context ring. Line 2 is what the session is doing, drawn only when it\n\t * says something: working, waiting, offline, open, or a draft waiting to\n\t * go. Rows that need nothing from anyone recede, so the eye lands on the\n\t * ones that do.\n\t * `children` draws under the row, for rows nested inside it.\n\t *\n\t * A maestro worker is a session too, but it reads as one of its master's\n\t * children: a terminal tile where the state dot was, its issue as a chip,\n\t * and the state moved down beside what it is doing.\n\t */\n\timport type { Snippet } from 'svelte';\n\timport SessionStateIndicator from './SessionStateIndicator.svelte';\n\timport { indicatorStateOf, isUnread, recedes } from '$shared/session-state.js';\n\timport type { MachineMark } from '$shared/fleet-rail.js';\n\timport { wantsHuman, needsHelp, type Session } from '$lib/stores/sessions.svelte';\n\timport { longPress } from '$lib/actions/longPress';\n\timport { formatSpinnerElapsed, formatAgo } from '$lib/format';\n\timport { clock } from '$lib/stores/clock.svelte';\n\timport * as ContextMenu from '$lib/components/ui/context-menu';\n\n\tinterface Props {\n\t\tsession: Session;\n\t\ttitle: string;\n\t\t/** The path chip under the title; null when the title already says it. */\n\t\twhere: string | null;\n\t\thref: string;\n\t\thint: string;\n\t\tactive: boolean;\n\t\t/** Which split pane the row is open in. */\n\t\ttag: 'A' | 'B' | null;\n\t\torchestrator?: boolean;\n\t\tworker?: boolean;\n\t\t/** Unsent composer text for this session, already shortened. */\n\t\tdraft?: string;\n\t\tstaged?: number;\n\t\tdraggable: boolean;\n\t\t/** Kill offered; null leaves the button off (compact sidebar, another machine). */\n\t\tonkill?: (() => void) | null;\n\t\tonmarkunread?: (() => void) | null;\n\t\tonclick: (e: MouseEvent) => void;\n\t\tonlongpress?: () => void;\n\t\tondragstart?: (e: DragEvent) => void;\n\t\tondragend?: () => void;\n\t\t/** What a right-click on the row offers; none leaves the browser's own menu. */\n\t\tmenu?: RowMenuItem[];\n\t\t/** The machine's letter in its colour, when the list does not otherwise say which machine. */\n\t\tmachine?: MachineMark | null;\n\t\t/** Why the session's machine cannot be reached, said on line 2; null while it answers. */\n\t\toffline?: string | null;\n\t\t/** Trailing slot on line 1, after the time. */\n\t\tmeta?: Snippet;\n\t\tchildren?: Snippet;\n\t}\n\n\tlet {\n\t\tsession: s,\n\t\ttitle,\n\t\twhere,\n\t\thref,\n\t\thint,\n\t\tactive,\n\t\ttag,\n\t\torchestrator = false,\n\t\tworker = false,\n\t\tdraft = '',\n\t\tstaged = 0,\n\t\tdraggable,\n\t\tonkill = null,\n\t\tonmarkunread = null,\n\t\tonclick,\n\t\tonlongpress,\n\t\tondragstart,\n\t\tondragend,\n\t\tmenu = [],\n\t\tmachine = null,\n\t\toffline = null,\n\t\tmeta,\n\t\tchildren\n\t}: Props = $props();\n\n\tconst shown = $derived(indicatorStateOf(s));\n\tconst wants = $derived(wantsHuman(s));\n\tconst quiet = $derived(recedes(shown) && !wants && !active);\n\tconst running = $derived(s.state === 'busy' && s.turn_started_at != null);\n\t/** Line 2 only when it says something; a quiet row is one line. */\n\tconst showSub = $derived(\n\t\twants || s.state === 'busy' || !!offline || active || tag !== null || !!draft || staged > 0\n\t);\n\tconst canMarkUnread = $derived(!!onmarkunread && s.state === 'idle' && !!s.turn_completed_at && !isUnread(s));\n\n\t// A working row counts its turn up every second; the rest say how long ago,\n\t// which only needs a look now and then.\n\t$effect(() => {\n\t\tif (running) return clock.fine();\n\t});\n\t/**\n\t * A finger's hold is the rename here, so the menu answers only a right\n\t * click: the hold's own contextmenu event (Android raises one) is dropped.\n\t */\n\tlet touched = false;\n\tconst elapsed = $derived(\n\t\trunning ? formatSpinnerElapsed(Math.max(0, Math.floor((clock.now - s.turn_started_at!) / 1000))) : null\n\t);\n</script>\n\n<ContextMenu.Root>\n<ContextMenu.Trigger disabled={menu.length === 0}>\n{#snippet child({ props })}\n<a\n\t{...props}\n\tonpointerdown={(e) => (touched = e.pointerType === 'touch')}\n\tonpointermove={undefined}\n\tonpointerup={undefined}\n\tonpointercancel={undefined}\n\toncontextmenu={(e) => {\n\t\tif (touched) e.preventDefault();\n\t\telse (props.oncontextmenu as ((e: MouseEvent) => void) | undefined)?.(e);\n\t}}\n\ttabindex={undefined}\n\t{href}\n\tclass=\"row\"\n\tclass:cur={active || tag !== null}\n\tclass:orch={orchestrator}\n\tclass:worker\n\tclass:quiet\n\tclass:one={!showSub}\n\tclass:inA={tag === 'A'}\n\tclass:inB={tag === 'B'}\n\tdraggable={draggable ? 'true' : 'false'}\n\t{ondragstart}\n\t{ondragend}\n\t{onclick}\n\tuse:longPress={{ onTrigger: () => onlongpress?.() }}\n\ttitle={hint}\n>\n\t{#if worker}\n\t\t<span class=\"tile\" aria-hidden=\"true\">\n\t\t\t<svg viewBox=\"0 0 24 24\"><rect x=\"3\" y=\"4\" width=\"18\" height=\"14\" rx=\"2\" /><path d=\"M7 9l3 3-3 3M13 15h4\" /></svg>\n\t\t</span>\n\t{:else}\n\t\t<span class=\"st\"><SessionStateIndicator state={shown} size=\"sm\" title={s.current_action} /></span>\n\t{/if}\n\t<span class=\"name\" title={s.cwd}>{title}</span>\n\t<span class=\"meta\">\n\t\t{#if tag}<span class=\"ptag\" title=\"Open in pane {tag}\">{tag}</span>{/if}\n\t\t{#if s.rc_url}\n\t\t\t<iconify-icon icon=\"mdi:cellphone-link\" class=\"rc\" title=\"Remote Control active\"></iconify-icon>\n\t\t{/if}\n\t\t{#if wants}\n\t\t\t<span class=\"pill\">{needsHelp(s) ? 'needs help' : 'wants you'}</span>\n\t\t{:else if worker && s.maestro_issue}\n\t\t\t<span class=\"issue\">#{s.maestro_issue}</span>\n\t\t{:else if elapsed}\n\t\t\t<span class=\"when run\" title=\"Working for {elapsed}\">{elapsed}</span>\n\t\t{:else}\n\t\t\t<span class=\"when\">{formatAgo(shown === 'done' ? s.turn_completed_at : s.last_update, clock.now)}</span>\n\t\t{/if}\n\t\t{@render meta?.()}\n\t\t{#if !showSub && where}<span class=\"path\" title={s.cwd}>{where}</span>{/if}\n\t\t{#if machine}<span class=\"mach\" style=\"--m:{machine.color}\" title={machine.name}>{machine.letter}</span>{/if}\n\t</span>\n\t{#if s.context_pct !== null && s.context_pct !== undefined}\n\t\t<span\n\t\t\tclass=\"ctx\"\n\t\t\tclass:warn={s.context_pct >= 70 && s.context_pct < 90}\n\t\t\tclass:hot={s.context_pct >= 90}\n\t\t\tstyle=\"--p: {Math.min(100, Math.max(0, s.context_pct))}\"\n\t\t\ttitle=\"{s.context_pct}% of the context window\"\n\t\t></span>\n\t{:else}\n\t\t<span class=\"ctx none\"></span>\n\t{/if}\n\t{#if canMarkUnread || onkill}\n\t\t<span class=\"acts\">\n\t\t\t{#if canMarkUnread}\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttitle=\"Mark unread\"\n\t\t\t\t\tonclick={(e) => { e.preventDefault(); e.stopPropagation(); onmarkunread?.(); }}\n\t\t\t\t>\n\t\t\t\t\t<iconify-icon icon=\"mdi:email-mark-as-unread\"></iconify-icon>\n\t\t\t\t</button>\n\t\t\t{/if}\n\t\t\t{#if onkill}\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"kill\"\n\t\t\t\t\ttitle=\"Kill session\"\n\t\t\t\t\tonclick={(e) => { e.preventDefault(); e.stopPropagation(); onkill?.(); }}\n\t\t\t\t>\n\t\t\t\t\t<iconify-icon icon=\"mdi:power\"></iconify-icon>\n\t\t\t\t</button>\n\t\t\t{/if}\n\t\t</span>\n\t{/if}\n\t{#if showSub}\n\t<span class=\"sub\" class:draft={!!draft} class:off={!!offline} title={offline || draft || s.current_action || s.state}>\n\t\t{#if staged}\n\t\t\t<span class=\"staged\" title=\"{staged} attachment{staged === 1 ? '' : 's'} staged\"\n\t\t\t\t><iconify-icon icon=\"mdi:paperclip\"></iconify-icon>{staged}</span\n\t\t\t>\n\t\t{/if}\n\t\t{#if worker}\n\t\t\t<span class=\"wst\"><SessionStateIndicator state={shown} size=\"sm\" title={s.current_action} /></span>\n\t\t{/if}\n\t\t{#if offline}\n\t\t\t{offline} · was {shown}\n\t\t{:else if draft}\n\t\t\t<iconify-icon icon=\"mdi:pencil-outline\"></iconify-icon>{draft}\n\t\t{:else if worker}\n\t\t\t{['worker', shown, s.current_action].filter(Boolean).join(' · ')}\n\t\t{:else}\n\t\t\t{s.current_action || (shown === 'done' ? 'done' : s.state)}\n\t\t{/if}\n\t\t{#if !draft && where}<span class=\"path\" title={s.cwd}>{where}</span>{/if}\n\t</span>\n\t{/if}\n</a>\n{/snippet}\n</ContextMenu.Trigger>\n{#if menu.length > 0}\n\t<ContextMenu.Content class=\"min-w-44\">\n\t\t{#each menu as item (item.label)}\n\t\t\t<ContextMenu.Item onSelect={item.run}>\n\t\t\t\t<iconify-icon icon={item.icon}></iconify-icon>\n\t\t\t\t{item.label}\n\t\t\t</ContextMenu.Item>\n\t\t{/each}\n\t</ContextMenu.Content>\n{/if}\n</ContextMenu.Root>\n{@render children?.()}\n\n<style>\n\t.row {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: 16px 1fr auto 14px;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tpadding: 6px 7px;\n\t\tborder-radius: 9px;\n\t\tcolor: var(--text);\n\t\ttext-decoration: none;\n\t\tposition: relative;\n\t}\n\t.row:hover {\n\t\tbackground: var(--surface-2);\n\t}\n\t.row.cur {\n\t\tbackground: var(--surface-3);\n\t}\n\t.st {\n\t\tdisplay: grid;\n\t\tplace-items: center;\n\t\twidth: 16px;\n\t}\n\t.name {\n\t\tmin-width: 0;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t\tfont-weight: 500;\n\t}\n\t.row.orch .name {\n\t\tcolor: var(--muted);\n\t}\n\t/* Needs nothing from anyone: the title steps back so the rows that do\n\t (working, asking, done) are what the eye lands on. */\n\t.row.quiet .name {\n\t\tcolor: var(--muted);\n\t\tfont-weight: 400;\n\t}\n\t/* A maestro worker: violet, the colour of a whole session working for\n\t another. Its thread is drawn by the list that nests it. */\n\t.row.worker {\n\t\tgrid-template-columns: 18px 1fr auto 14px;\n\t\tpadding: 7px 8px;\n\t}\n\t.row.worker .name {\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 12.5px;\n\t}\n\t.tile {\n\t\tdisplay: grid;\n\t\tplace-items: center;\n\t\twidth: 18px;\n\t\theight: 18px;\n\t\tborder-radius: 4px;\n\t\tbackground: #2e1f5e;\n\t\tcolor: #c4b5fd;\n\t}\n\t.tile svg {\n\t\twidth: 11px;\n\t\theight: 11px;\n\t\tfill: none;\n\t\tstroke: currentColor;\n\t\tstroke-width: 2.4;\n\t\tstroke-linecap: round;\n\t\tstroke-linejoin: round;\n\t}\n\t.issue {\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 10.5px;\n\t\tcolor: #c4b5fd;\n\t\tbackground: #2e1f5e;\n\t\tborder-radius: 999px;\n\t\tpadding: 1px 7px;\n\t\twhite-space: nowrap;\n\t}\n\t.wst {\n\t\tdisplay: inline-grid;\n\t\tplace-items: center;\n\t\tvertical-align: 0;\n\t\tmargin-right: 5px;\n\t\ttransform: scale(0.85);\n\t}\n\t.path {\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 10px;\n\t\tcolor: var(--dim);\n\t\tbackground: var(--surface-3);\n\t\tborder-radius: 4px;\n\t\tpadding: 0 5px;\n\t\tmargin-left: 6px;\n\t\tflex-shrink: 0;\n\t}\n\t.meta {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 6px;\n\t\tmin-width: 0;\n\t}\n\t.row.one .path {\n\t\tmargin-left: 0;\n\t}\n\t/* The machine, as a letter in its colour: quiet, but enough to tell where. */\n\t.mach {\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 10px;\n\t\tfont-weight: 600;\n\t\tline-height: 1;\n\t\tcolor: var(--m);\n\t\topacity: 0.85;\n\t}\n\t.when {\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 11px;\n\t\tcolor: var(--dim);\n\t\twhite-space: nowrap;\n\t\tfont-variant-numeric: tabular-nums;\n\t}\n\t.when.run {\n\t\tcolor: var(--muted);\n\t}\n\t/* Remote Control: reachable from the account's other sessions and the\n\t phone. Indigo, the colour the app keeps for \"connected elsewhere\". */\n\t.rc {\n\t\tfont-size: 13px;\n\t\tcolor: #818cf8;\n\t}\n\t/* Which pane of a split the row is open in. A is amber, the focus colour;\n\t B is indigo, the \"elsewhere\" colour, so the two never read alike. */\n\t.row.inA {\n\t\tbox-shadow: inset 2px 0 0 var(--amber);\n\t}\n\t.row.inB {\n\t\tbox-shadow: inset 2px 0 0 #818cf8;\n\t}\n\t.ptag {\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 10px;\n\t\tfont-weight: 600;\n\t\tborder: 1px solid var(--line);\n\t\tborder-radius: 4px;\n\t\tpadding: 0 4px;\n\t\tcolor: var(--dim);\n\t}\n\t.row.inA .ptag {\n\t\tcolor: var(--amber);\n\t\tborder-color: #5a4310;\n\t}\n\t.row.inB .ptag {\n\t\tcolor: #818cf8;\n\t\tborder-color: #3a3a6a;\n\t}\n\t.pill {\n\t\tfont-size: 10.5px;\n\t\tfont-weight: 500;\n\t\tcolor: var(--amber);\n\t\tbackground: var(--amber-soft);\n\t\tborder-radius: 999px;\n\t\tpadding: 1px 7px;\n\t\twhite-space: nowrap;\n\t}\n\t.sub {\n\t\tgrid-column: 2 / 5;\n\t\tmin-width: 0;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 11px;\n\t\tcolor: var(--dim);\n\t\tmargin-top: 1px;\n\t}\n\t.sub.draft {\n\t\tcolor: var(--amber);\n\t}\n\t.sub.off {\n\t\tfont-family: inherit;\n\t}\n\t.sub iconify-icon {\n\t\tfont-size: 11px;\n\t\tvertical-align: -1px;\n\t\tmargin-right: 3px;\n\t}\n\t.sub .staged {\n\t\tcolor: var(--amber);\n\t\tmargin-right: 6px;\n\t}\n\t.sub .staged iconify-icon {\n\t\tmargin-right: 1px;\n\t}\n\t/* The row's rare actions sit over its right edge, only when pointed at. */\n\t.acts {\n\t\tposition: absolute;\n\t\tright: 6px;\n\t\ttop: 4px;\n\t\tdisplay: flex;\n\t\tgap: 2px;\n\t\topacity: 0;\n\t}\n\t.row:hover .acts {\n\t\topacity: 1;\n\t}\n\t.acts button {\n\t\twidth: 22px;\n\t\theight: 22px;\n\t\tdisplay: grid;\n\t\tplace-items: center;\n\t\tborder: 0;\n\t\tborder-radius: 6px;\n\t\tbackground: var(--surface-3);\n\t\tcolor: var(--dim);\n\t\tfont-size: 13px;\n\t\tcursor: pointer;\n\t}\n\t.acts button:hover {\n\t\tcolor: var(--text);\n\t}\n\t.acts .kill:hover {\n\t\tcolor: #fca5a5;\n\t}\n\t@media (hover: none) {\n\t\t.acts {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\t/* context ring */\n\t.ctx {\n\t\twidth: 14px;\n\t\theight: 14px;\n\t\tborder-radius: 50%;\n\t\tposition: relative;\n\t\tbackground: conic-gradient(var(--c, var(--green)) calc(var(--p) * 1%), var(--surface-3) 0);\n\t}\n\t.ctx::after {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tinset: 3.5px;\n\t\tborder-radius: 50%;\n\t\tbackground: var(--surface);\n\t}\n\t.row:hover .ctx::after {\n\t\tbackground: var(--surface-2);\n\t}\n\t.row.cur .ctx::after {\n\t\tbackground: var(--surface-3);\n\t}\n\t.ctx.warn {\n\t\t--c: var(--amber);\n\t}\n\t.ctx.hot {\n\t\t--c: #ef4444;\n\t}\n\t.ctx.none {\n\t\tbackground: transparent;\n\t}\n\t.ctx.none::after {\n\t\tdisplay: none;\n\t}\n</style>\n","<script lang=\"ts\">\n\t/**\n\t * One subagent in the sidebar, under the session that spawned it.\n\t *\n\t * Smaller than a session row, because it is a thread of that session, not a\n\t * session of its own: a diamond, what it was asked to do, its agent type,\n\t * then how long it has run and the tool it is on — or when it finished.\n\t * A finished row dims; a failed one turns red and stays until opened.\n\t */\n\timport type { SubagentInfo } from '$shared/types/ws-messages.js';\n\timport { agentTypeLabel } from '$shared/subagents.js';\n\timport { formatElapsed, formatAgo } from '$lib/format';\n\timport { clock } from '$lib/stores/clock.svelte';\n\n\tinterface Props {\n\t\tagent: SubagentInfo;\n\t\thref: string;\n\t\tactive: boolean;\n\t\tonclick: (e: MouseEvent) => void;\n\t}\n\n\tlet { agent, href, active, onclick }: Props = $props();\n\n\tconst running = $derived(agent.state === 'running');\n\n\t$effect(() => {\n\t\tif (running) return clock.fine();\n\t});\n\n\tconst status = $derived.by(() => {\n\t\tif (running) {\n\t\t\tconst elapsed = formatElapsed((clock.now - agent.started_at) / 1000);\n\t\t\treturn ['running', elapsed, agent.current_tool].filter(Boolean).join(' · ');\n\t\t}\n\t\tconst ago = formatAgo(agent.ended_at, clock.now);\n\t\treturn `${agent.state} ${ago === 'now' ? 'just now' : `${ago} ago`}`;\n\t});\n\tconst title = $derived(agent.description || agentTypeLabel(agent.type));\n</script>\n\n<a\n\t{href}\n\tclass=\"agent\"\n\tclass:cur={active}\n\tclass:done={agent.state === 'done'}\n\tclass:failed={agent.state === 'failed'}\n\t{onclick}\n\t{title}\n>\n\t<span class=\"glyph\" aria-hidden=\"true\">\n\t\t{#if agent.state === 'done'}\n\t\t\t<svg viewBox=\"0 0 24 24\"><path d=\"M5 12l5 5L20 7\" /></svg>\n\t\t{:else}\n\t\t\t<svg viewBox=\"0 0 24 24\"><path d=\"M12 3l9 9-9 9-9-9z\" /></svg>\n\t\t{/if}\n\t</span>\n\t<span class=\"desc\">{title}</span>\n\t<span class=\"type\">{agentTypeLabel(agent.type)}</span>\n\t<span class=\"status\">{status}</span>\n</a>\n\n<style>\n\t.agent {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: 14px 1fr auto;\n\t\tcolumn-gap: 7px;\n\t\trow-gap: 2px;\n\t\talign-items: center;\n\t\tpadding: 5px 8px;\n\t\tborder-radius: 8px;\n\t\tcolor: var(--text);\n\t\ttext-decoration: none;\n\t\t--teal: #5eead4;\n\t\t--teal-deep: #155e63;\n\t}\n\t.agent:hover {\n\t\tbackground: var(--surface-2);\n\t}\n\t.agent.cur {\n\t\tbackground: #10292a;\n\t}\n\t.glyph {\n\t\tdisplay: grid;\n\t\tplace-items: center;\n\t\twidth: 14px;\n\t\theight: 14px;\n\t\tcolor: var(--teal);\n\t}\n\t.glyph svg {\n\t\twidth: 12px;\n\t\theight: 12px;\n\t\tfill: none;\n\t\tstroke: currentColor;\n\t\tstroke-width: 2.4;\n\t\tstroke-linecap: round;\n\t\tstroke-linejoin: round;\n\t}\n\t.desc {\n\t\tmin-width: 0;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t\tfont-size: 12px;\n\t\tcolor: #d6d3d1;\n\t}\n\t.agent.cur .desc {\n\t\tcolor: #f5f5f4;\n\t}\n\t.type {\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 10px;\n\t\tcolor: var(--teal);\n\t\tborder: 1px solid var(--teal-deep);\n\t\tborder-radius: 4px;\n\t\tpadding: 0 5px;\n\t\twhite-space: nowrap;\n\t}\n\t.status {\n\t\tgrid-column: 2 / 4;\n\t\tmin-width: 0;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 10.5px;\n\t\tcolor: #78716c;\n\t\tfont-variant-numeric: tabular-nums;\n\t}\n\t/* Finished: it steps back until it folds into the parent's count. */\n\t.agent.done {\n\t\topacity: 0.55;\n\t}\n\t.agent.done .glyph,\n\t.agent.done .type {\n\t\tcolor: var(--muted);\n\t}\n\t.agent.done .type {\n\t\tborder-color: #44403c;\n\t}\n\t.agent.failed .glyph,\n\t.agent.failed .status {\n\t\tcolor: #f87171;\n\t}\n\t@media (pointer: coarse) {\n\t\t.agent {\n\t\t\tmin-height: 44px;\n\t\t\tbox-sizing: border-box;\n\t\t}\n\t}\n</style>\n","<script lang=\"ts\">\n\timport * as Popover from '$lib/components/ui/popover';\n\timport { clock } from '$lib/stores/clock.svelte';\n\timport { fleetStore, machineName, offlineLabel, offlineReason, versionDrifts, type Machine } from '$lib/stores/fleet.svelte';\n\n\t/**\n\t * The drawer's machine filter: which machines the sidebar shows, all of\n\t * them or one. It only narrows the list; every machine is reached from\n\t * this page through its relay, so nothing here leaves the page.\n\t */\n\tlet {\n\t\tlive,\n\t\twants\n\t}: {\n\t\t/** Live sessions on a machine. */\n\t\tlive: (machine: Machine) => number;\n\t\t/** Whether a session on a machine wants a person. */\n\t\twants: (machine: Machine) => boolean;\n\t} = $props();\n\n\tlet open = $state(false);\n\n\tconst chosen = $derived(fleetStore.visible.length === 1 ? fleetStore.visible[0] : null);\n\tconst label = $derived(\n\t\tfleetStore.fleet ? (chosen ? machineName(chosen) : 'Fleet') : fleetStore.machines[0]?.server.hostname || 'claude-mux'\n\t);\n\t/** A machine left out of the filter has someone waiting on it. */\n\tconst wantsElsewhere = $derived(\n\t\tfleetStore.selected !== 'all' && fleetStore.machines.some((m) => m.server.id !== fleetStore.selected && wants(m))\n\t);\n\n\t/** Machines on another claude-mux version than this page's own (the origin's is this page's). */\n\tconst drifting = $derived(fleetStore.machines.filter(versionDrifts).length);\n\n\tfunction pick(id: string) {\n\t\tfleetStore.select(id);\n\t\topen = false;\n\t}\n</script>\n\n<Popover.Root bind:open>\n\t<Popover.Trigger class=\"machine-filter-trigger\" aria-label=\"Filter by machine\">\n\t\t<span class=\"dot\" class:off={chosen ? !chosen.online : false} class:all={!chosen && fleetStore.fleet}></span>\n\t\t<span class=\"hostname\">{label}</span>\n\t\t{#if wantsElsewhere}<span class=\"elsewhere\" title=\"A machine not shown wants you\"></span>{/if}\n\t\t<iconify-icon icon=\"mdi:chevron-down\" class=\"chev\"></iconify-icon>\n\t</Popover.Trigger>\n\t<Popover.Content class=\"machine-filter\" align=\"start\" sideOffset={6}>\n\t\t<button type=\"button\" class=\"row\" class:on={fleetStore.selected === 'all'} onclick={() => pick('all')}>\n\t\t\t<iconify-icon icon=\"mdi:monitor-multiple\" class=\"lead\"></iconify-icon>\n\t\t\t<span class=\"name\">All machines</span>\n\t\t\t{#if fleetStore.selected === 'all'}<iconify-icon icon=\"mdi:check\" class=\"check\"></iconify-icon>{/if}\n\t\t</button>\n\t\t<div class=\"rule\"></div>\n\t\t{#each fleetStore.machines as machine (machine.server.id || machine.server.hostname)}\n\t\t\t{@const reason = offlineReason(machine, clock.now)}\n\t\t\t{@const on = fleetStore.selected === machine.server.id}\n\t\t\t{@const n = live(machine)}\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"row\"\n\t\t\t\tclass:on\n\t\t\t\tdisabled={!machine.server.id}\n\t\t\t\ttitle={reason ?? undefined}\n\t\t\t\tonclick={() => pick(machine.server.id)}\n\t\t\t>\n\t\t\t\t<span class=\"dot lead\" class:off={!machine.online}></span>\n\t\t\t\t<span class=\"name\">\n\t\t\t\t\t{machineName(machine)}\n\t\t\t\t\t{#if reason}<span class=\"sub\">{offlineLabel(machine, clock.now)}</span>\n\t\t\t\t\t{:else if versionDrifts(machine)}<span class=\"sub\">{machine.version ?? 'older'}, update</span>{/if}\n\t\t\t\t</span>\n\t\t\t\t{#if wants(machine)}<span class=\"pill\">wants you</span>{/if}\n\t\t\t\t{#if n > 0}<span class=\"n\">{n}</span>{/if}\n\t\t\t\t{#if on}<iconify-icon icon=\"mdi:check\" class=\"check\"></iconify-icon>{/if}\n\t\t\t</button>\n\t\t{/each}\n\t\t<div class=\"rule\"></div>\n\t\t<a class=\"row\" href=\"/machines\" onclick={() => (open = false)}>\n\t\t\t<iconify-icon icon=\"mdi:server-network\" class=\"lead\"></iconify-icon>\n\t\t\t<span class=\"name\">Machines and updates</span>\n\t\t\t{#if drifting > 0}<span class=\"n\" title=\"Machines on another version than this page\">{drifting} differ</span>{/if}\n\t\t</a>\n\t</Popover.Content>\n</Popover.Root>\n\n<style>\n\t:global(.machine-filter-trigger) {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tgap: 7px;\n\t\tmin-width: 0;\n\t\tpadding: 4px 6px;\n\t\tborder: 0;\n\t\tborder-radius: 8px;\n\t\tbackground: transparent;\n\t\tcolor: #e7e5e4;\n\t\tfont-size: 13px;\n\t\tfont-weight: 500;\n\t\tcursor: pointer;\n\t}\n\t:global(.machine-filter-trigger:hover) {\n\t\tbackground: var(--surface-3);\n\t}\n\t:global(.machine-filter-trigger:disabled) {\n\t\tcursor: default;\n\t}\n\t:global(.machine-filter-trigger .hostname) {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t}\n\t:global(.machine-filter-trigger .chev) {\n\t\tfont-size: 14px;\n\t\tcolor: #6b6764;\n\t}\n\t.dot {\n\t\twidth: 7px;\n\t\theight: 7px;\n\t\tborder-radius: 50%;\n\t\tbackground: #34d399;\n\t\tflex: none;\n\t}\n\t.dot.off {\n\t\tbackground: #3a3836;\n\t}\n\t/* \"All\": a ring rather than a dot, since it stands for several machines. */\n\t.dot.all {\n\t\tbackground: transparent;\n\t\tbox-shadow: inset 0 0 0 1.5px #34d399;\n\t}\n\t.elsewhere {\n\t\twidth: 6px;\n\t\theight: 6px;\n\t\tborder-radius: 50%;\n\t\tbackground: #f59e0b;\n\t\tflex: none;\n\t}\n\t:global(.machine-filter) {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 2px;\n\t\twidth: 240px;\n\t\tpadding: 6px;\n\t\tbackground: #151516;\n\t\tborder: 1px solid #2a2a2c;\n\t\tborder-radius: 12px;\n\t}\n\t.row {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 9px;\n\t\tmin-height: 32px;\n\t\tpadding: 4px 10px;\n\t\tborder: 0;\n\t\tborder-radius: 8px;\n\t\tbackground: transparent;\n\t\tcolor: #d6d3d1;\n\t\tfont-size: 13px;\n\t\ttext-align: left;\n\t\tcursor: pointer;\n\t}\n\ta.row {\n\t\ttext-decoration: none;\n\t}\n\t.row:hover:not(:disabled) {\n\t\tbackground: #212124;\n\t\tcolor: #f5f5f4;\n\t}\n\t.row.on {\n\t\tcolor: #f5f5f4;\n\t}\n\t.row:disabled {\n\t\topacity: 0.5;\n\t\tcursor: default;\n\t}\n\t.lead {\n\t\tflex: none;\n\t}\n\ticonify-icon.lead {\n\t\tfont-size: 15px;\n\t\tcolor: #a8a29e;\n\t}\n\t.dot.lead {\n\t\tmargin: 0 4px;\n\t}\n\t.name {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t}\n\t.sub {\n\t\tfont-size: 11px;\n\t\tcolor: #6b6764;\n\t}\n\t.pill {\n\t\tflex: none;\n\t\tpadding: 1px 6px;\n\t\tborder-radius: 6px;\n\t\tbackground: #3a2d0d;\n\t\tcolor: #f59e0b;\n\t\tfont-size: 10.5px;\n\t}\n\t.n {\n\t\tflex: none;\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 11px;\n\t\tcolor: #6b6764;\n\t}\n\t.check {\n\t\tflex: none;\n\t\tfont-size: 14px;\n\t\tcolor: #34d399;\n\t}\n\t.rule {\n\t\theight: 1px;\n\t\tmargin: 2px 4px;\n\t\tbackground: #2a2a2c;\n\t}\n</style>\n","/**\n * What the New folder picker says about a folder (`FolderPicker.svelte`):\n * whether it is already open on the machine being browsed, open on another,\n * or holds open folders further down.\n *\n * An open folder is a project root on some machine (`projectRoots()`), with\n * the live sessions that run there; one with none is a project on the rail\n * and nothing more. A folder that is no root on the machine being browsed is\n * matched to a project the way `mergeProjects()` matches a root it has no\n * report for (`guessReport()`): by its path under `~/Projects`, joining the\n * one project that has a root there or is named so.\n */\n\nimport { NO_FOLDER } from \"./fleet-places.js\";\nimport { guessReport } from \"./fleet-projects.js\";\n\n/** A project root on one machine. */\nexport interface OpenFolder {\n machineId: string;\n root: string;\n /** Its project's key (`projectKey()`), the same on every machine that holds it. */\n project: string;\n /** Its project's name (`projectName()`). */\n name: string;\n /** Live sessions running there; 0 for a project on the rail with none. */\n live: number;\n /** Whether one of them wants a person. */\n wants: boolean;\n}\n\nexport interface FolderMarks<T extends OpenFolder> {\n /** The folder itself, open on the machine being browsed. */\n here: T | null;\n /** The same project open on other machines, those with live sessions first. */\n elsewhere: T[];\n /** How many folders open on the machine being browsed sit below it. */\n below: number;\n}\n\n/** Whether a project is known by its git remote (`projectKey()`), not just by where it sits. */\nfunction isRepo(project: string): boolean {\n return project.startsWith(\"git:\");\n}\n\n/**\n * Marks for every folder the picker draws on one machine. Built once per\n * machine and list of open folders, then asked once per row.\n */\nexport function folderMarker<T extends OpenFolder>(machineId: string, open: readonly T[]): (path: string) => FolderMarks<T> {\n const folders = open.filter((f) => f.root !== NO_FOLDER);\n const mine = folders.filter((f) => f.machineId === machineId);\n const byRoot = new Map(mine.map((f) => [f.root, f]));\n\n // Each project's folders on the other machines.\n const others = new Map<string, T[]>();\n for (const f of folders) {\n if (f.machineId !== machineId) others.set(f.project, [...(others.get(f.project) ?? []), f]);\n }\n\n // A folder under `~/Projects` goes by the project whose root on another\n // machine sits at the same place, or by the repo of its name, as a guessed\n // report joins a repo in `mergeProjects()`; a place or name that several\n // projects answer to says nothing.\n const byHome = new Map<string, Set<string>>();\n const claim = (key: string, project: string) => byHome.set(key, (byHome.get(key) ?? new Set()).add(project));\n for (const [, list] of others) {\n for (const f of list) {\n const home = guessReport(f.root).home;\n if (home) claim(home, f.project);\n if (isRepo(f.project)) claim(f.name, f.project);\n }\n }\n\n return (path) => {\n const here = byRoot.get(path) ?? null;\n const home = guessReport(path).home;\n // A root here known by its remote is that repo and nothing else; one\n // reported without it may be the repo its place names.\n const guessed = home && !(here && isRepo(here.project)) ? byHome.get(home) : undefined;\n const projects = new Set([here?.project, guessed?.size === 1 ? [...guessed][0] : undefined]);\n const elsewhere = [...projects]\n .flatMap((p) => (p ? (others.get(p) ?? []) : []))\n .sort((a, b) => Number(b.live > 0) - Number(a.live > 0));\n const prefix = path === \"/\" ? \"/\" : `${path}/`;\n const below = mine.filter((f) => f.root.startsWith(prefix)).length;\n return { here, elsewhere, below };\n };\n}\n\n/**\n * The folders open on one machine, for the list atop the picker: those\n * wanting a person first, then those with live sessions, then the rest, each\n * group by path.\n */\nexport function openOn<T extends OpenFolder>(machineId: string, open: readonly T[]): T[] {\n const rank = (f: OpenFolder) => (f.wants ? 0 : f.live > 0 ? 1 : 2);\n return open\n .filter((f) => f.machineId === machineId && f.root !== NO_FOLDER)\n .sort((a, b) => rank(a) - rank(b) || a.root.localeCompare(b.root));\n}\n\n/**\n * Where to open on another machine's tab: the same place relative to home\n * (`~/Projects/x` here is `~/Projects/x` there), or the path as it stands\n * when it is outside home. The picker falls back to `~` when the other\n * machine has no such folder.\n */\nexport function carryPath(path: string, home: string): string {\n if (!home || home === \"/\") return path;\n if (path === home) return \"~\";\n return path.startsWith(`${home}/`) ? `~${path.slice(home.length)}` : path;\n}\n","/**\n * Why `name` cannot be made a new folder in the one browsed, or null when it\n * can. One level only: a slash would reach past the folder on screen.\n */\nexport function folderNameProblem(name: string): string | null {\n if (name.trim() === \"\") return \"Name the folder\";\n if (name !== name.trim()) return \"No spaces at either end\";\n if (name.includes(\"/\") || name.includes(\"\\0\")) return \"One folder at a time, no slashes\";\n if (name === \".\" || name === \"..\") return \"Not a folder name\";\n if (new TextEncoder().encode(name).length > 255) return \"Too long\";\n return null;\n}\n","<script lang=\"ts\">\n\timport { ScrollArea as ScrollAreaPrimitive } from \"bits-ui\";\n\timport { cn, type WithoutChild } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\torientation = \"vertical\",\n\t\tchildren,\n\t\t...restProps\n\t}: WithoutChild<ScrollAreaPrimitive.ScrollbarProps> = $props();\n</script>\n\n<ScrollAreaPrimitive.Scrollbar\n\tbind:ref\n\tdata-slot=\"scroll-area-scrollbar\"\n\t{orientation}\n\tclass={cn(\n\t\t\"flex touch-none p-px transition-colors select-none\",\n\t\torientation === \"vertical\" && \"h-full w-2.5 border-s border-s-transparent\",\n\t\torientation === \"horizontal\" && \"h-2.5 flex-col border-t border-t-transparent\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n\t<ScrollAreaPrimitive.Thumb\n\t\tdata-slot=\"scroll-area-thumb\"\n\t\tclass=\"bg-border relative flex-1 rounded-full\"\n\t/>\n</ScrollAreaPrimitive.Scrollbar>\n","<script lang=\"ts\">\n\timport { ScrollArea as ScrollAreaPrimitive } from \"bits-ui\";\n\timport { Scrollbar } from \"./index.js\";\n\timport { cn, type WithoutChild } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tviewportRef = $bindable(null),\n\t\tclass: className,\n\t\torientation = \"vertical\",\n\t\tscrollbarXClasses = \"\",\n\t\tscrollbarYClasses = \"\",\n\t\tchildren,\n\t\t...restProps\n\t}: WithoutChild<ScrollAreaPrimitive.RootProps> & {\n\t\torientation?: \"vertical\" | \"horizontal\" | \"both\" | undefined;\n\t\tscrollbarXClasses?: string | undefined;\n\t\tscrollbarYClasses?: string | undefined;\n\t\tviewportRef?: HTMLElement | null;\n\t} = $props();\n</script>\n\n<ScrollAreaPrimitive.Root\n\tbind:ref\n\tdata-slot=\"scroll-area\"\n\tclass={cn(\"relative\", className)}\n\t{...restProps}\n>\n\t<ScrollAreaPrimitive.Viewport\n\t\tbind:ref={viewportRef}\n\t\tdata-slot=\"scroll-area-viewport\"\n\t\tclass=\"ring-ring/10 dark:ring-ring/20 dark:outline-ring/40 outline-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] focus-visible:ring-4 focus-visible:outline-1\"\n\t>\n\t\t{@render children?.()}\n\t</ScrollAreaPrimitive.Viewport>\n\t{#if orientation === \"vertical\" || orientation === \"both\"}\n\t\t<Scrollbar orientation=\"vertical\" class={scrollbarYClasses} />\n\t{/if}\n\t{#if orientation === \"horizontal\" || orientation === \"both\"}\n\t\t<Scrollbar orientation=\"horizontal\" class={scrollbarXClasses} />\n\t{/if}\n\t<ScrollAreaPrimitive.Corner />\n</ScrollAreaPrimitive.Root>\n","<script lang=\"ts\">\n\timport { Tabs as TabsPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: TabsPrimitive.TriggerProps = $props();\n</script>\n\n<TabsPrimitive.Trigger\n\tbind:ref\n\tdata-slot=\"tabs-trigger\"\n\tclass={cn(\n\t\t\"gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg:not([class*='size-'])]:size-4 has-data-[icon=inline-end]:pr-1 has-data-[icon=inline-start]:pl-1 relative inline-flex h-[calc(100%_-_1px)] flex-1 items-center justify-center whitespace-nowrap text-foreground/60 transition-all group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 dark:text-muted-foreground dark:hover:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n\t\t\"group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent\",\n\t\t\"data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground\",\n\t\t\"after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:bottom-[-5px] group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n","<script lang=\"ts\">\n\timport { Tabs as TabsPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tvalue = $bindable(\"\"),\n\t\tclass: className,\n\t\t...restProps\n\t}: TabsPrimitive.RootProps = $props();\n</script>\n\n<TabsPrimitive.Root\n\tbind:ref\n\tbind:value\n\tdata-slot=\"tabs\"\n\tclass={cn(\"gap-2 group/tabs flex data-horizontal:flex-col\", className)}\n\t{...restProps}\n/>\n","<script lang=\"ts\" module>\n\timport { tv, type VariantProps } from \"tailwind-variants\";\n\n\texport const tabsListVariants = tv({\n\t\tbase: \"rounded-lg p-[3px] group-data-horizontal/tabs:h-8 data-[variant=line]:rounded-none group/tabs-list inline-flex w-fit items-center justify-center text-muted-foreground group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col\",\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: \"bg-muted\",\n\t\t\t\tline: \"gap-1 bg-transparent\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"default\",\n\t\t},\n\t});\n\n\texport type TabsListVariant = VariantProps<typeof tabsListVariants>[\"variant\"];\n</script>\n\n<script lang=\"ts\">\n\timport { Tabs as TabsPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tvariant = \"default\",\n\t\tclass: className,\n\t\t...restProps\n\t}: TabsPrimitive.ListProps & {\n\t\tvariant?: TabsListVariant;\n\t} = $props();\n</script>\n\n<TabsPrimitive.List\n\tbind:ref\n\tdata-slot=\"tabs-list\"\n\tdata-variant={variant}\n\tclass={cn(tabsListVariants({ variant }), className)}\n\t{...restProps}\n/>\n","<script lang=\"ts\">\n\timport { Avatar as AvatarPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: AvatarPrimitive.FallbackProps = $props();\n</script>\n\n<AvatarPrimitive.Fallback\n\tbind:ref\n\tdata-slot=\"avatar-fallback\"\n\tclass={cn(\n\t\t\"bg-muted text-muted-foreground rounded-full flex size-full items-center justify-center text-sm group-data-[size=sm]/avatar:text-xs\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n","<script lang=\"ts\">\n\timport { Avatar as AvatarPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: AvatarPrimitive.ImageProps = $props();\n</script>\n\n<AvatarPrimitive.Image\n\tbind:ref\n\tdata-slot=\"avatar-image\"\n\tclass={cn(\"rounded-full aspect-square size-full object-cover\", className)}\n\t{...restProps}\n/>\n","<script lang=\"ts\">\n\timport { Avatar as AvatarPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tloadingStatus = $bindable(\"loading\"),\n\t\tsize = \"default\",\n\t\tclass: className,\n\t\t...restProps\n\t}: AvatarPrimitive.RootProps & {\n\t\tsize?: \"default\" | \"sm\" | \"lg\";\n\t} = $props();\n</script>\n\n<AvatarPrimitive.Root\n\tbind:ref\n\tbind:loadingStatus\n\tdata-slot=\"avatar\"\n\tdata-size={size}\n\tclass={cn(\n\t\t\"size-8 rounded-full after:rounded-full data-[size=lg]:size-10 data-[size=sm]:size-6 group/avatar relative flex shrink-0 select-none after:absolute after:inset-0 after:border after:border-border after:mix-blend-darken dark:after:mix-blend-lighten\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n","<script lang=\"ts\">\n\timport * as Avatar from '$lib/components/ui/avatar';\n\n\t/**\n\t * A project's tile: its icon, or its initials on its own hue\n\t * (`projectInitials()`, `projectHue()`), the same on every machine and link.\n\t */\n\tlet {\n\t\tinitials,\n\t\thue,\n\t\ticon,\n\t\tsize = 20\n\t}: {\n\t\tinitials: string;\n\t\thue: number;\n\t\t/** The icon's URL; null draws the initials. */\n\t\ticon: string | null;\n\t\tsize?: number;\n\t} = $props();\n</script>\n\n<Avatar.Root class=\"ptile\" style=\"--h:{hue}; --s:{size}px\">\n\t{#if icon}<Avatar.Image src={icon} alt=\"\" class=\"ptile-img\" draggable=\"false\" />{/if}\n\t<Avatar.Fallback class=\"ptile-init\">{initials}</Avatar.Fallback>\n</Avatar.Root>\n\n<style>\n\t:global(.ptile) {\n\t\twidth: var(--s);\n\t\theight: var(--s);\n\t\tborder-radius: calc(var(--s) * 0.3);\n\t\tflex: none;\n\t}\n\t:global(.ptile::after) {\n\t\tborder-radius: inherit;\n\t\tborder-color: hsl(var(--h) 50% 34%);\n\t}\n\t:global(.ptile-img) {\n\t\tborder-radius: inherit;\n\t\tobject-fit: contain;\n\t\tbackground: #1b1b1d;\n\t\tpadding: calc(var(--s) * 0.14);\n\t}\n\t:global(.ptile-init) {\n\t\tborder-radius: inherit;\n\t\tbackground: hsl(var(--h) 45% 22%);\n\t\tcolor: hsl(var(--h) 85% 82%);\n\t\tfont: 650 calc(var(--s) * 0.42) / 1 var(--font-sans, system-ui);\n\t\tletter-spacing: 0.02em;\n\t}\n</style>\n","<script lang=\"ts\" module>\n\timport type { OpenFolder } from '$shared/folder-marks.js';\n\timport type { IndicatorState } from '$shared/session-state.js';\n\timport type { Machine } from '$lib/stores/fleet.svelte';\n\n\t/** A project root somewhere in the fleet, as the picker marks it (`folderMarker()`). */\n\texport interface PickerFolder extends OpenFolder {\n\t\tmachine: Machine;\n\t\t/** The most urgent of its live sessions' states; null with none. */\n\t\tstate: IndicatorState | null;\n\t\t/** The session's pane when exactly one runs there, which \"Go to\" opens. */\n\t\tonly: string | null;\n\t\t/** Its project's tile (`ProjectTile`). */\n\t\ttile: { initials: string; hue: number; icon: string | null };\n\t}\n</script>\n\n<script lang=\"ts\">\n\timport { tick } from 'svelte';\n\timport { fuzzyMatch, highlightRuns } from '$shared/utils/fuzzy.js';\n\timport { carryPath, folderMarker, openOn, type FolderMarks } from '$shared/folder-marks.js';\n\timport { folderNameProblem } from '$shared/folder-name.js';\n\timport type { MachineMark } from '$shared/fleet-rail.js';\n\timport { apiBase, blockedReason, machineKey, machineName, offlineLabel } from '$lib/stores/fleet.svelte';\n\timport { clock } from '$lib/stores/clock.svelte';\n\timport { Button } from '$lib/components/ui/button';\n\timport { Checkbox } from '$lib/components/ui/checkbox';\n\timport * as Dialog from '$lib/components/ui/dialog';\n\timport { ScrollArea } from '$lib/components/ui/scroll-area';\n\timport * as Tabs from '$lib/components/ui/tabs';\n\timport SessionStateIndicator from './SessionStateIndicator.svelte';\n\timport ProjectTile from './ProjectTile.svelte';\n\n\tinterface Props {\n\t\topen: boolean;\n\t\t/** Every machine in the fleet, in its usual order: one tab each. */\n\t\tmachines: Machine[];\n\t\t/** Every project root in the fleet, for the marks. */\n\t\tfolders: PickerFolder[];\n\t\t/** A machine's letter and colour, by id. */\n\t\tmarkOf: (machineId: string) => MachineMark | null;\n\t\t/** Called with the machine browsed and the chosen directory when the user picks one. */\n\t\tonpick: (machine: Machine, cwd: string) => void;\n\t\t/** \"Go to\" on an open folder. */\n\t\tongoto: (folder: PickerFolder) => void;\n\t}\n\n\tlet { open = $bindable(), machines, folders: openFolders, markOf, onpick, ongoto }: Props = $props();\n\n\tinterface BrowseFolder {\n\t\tname: string;\n\t\tpath: string;\n\t\tgit?: boolean;\n\t}\n\n\t/** The machine whose disk is browsed, by id; its API is reached through `apiBase()`. */\n\tlet tab = $state('');\n\t/** That machine as it was chosen, so a pick never lands on another should its id change meanwhile. */\n\tlet chosen = $state<Machine | null>(null);\n\tconst machine = $derived(machines.find((m) => machineKey(m) === tab) ?? chosen);\n\tconst base = $derived(machine ? apiBase(machine) : '');\n\n\tlet path = $state('');\n\tlet home = $state('');\n\tlet parent = $state<string | null>(null);\n\tlet folders = $state<BrowseFolder[]>([]);\n\tlet showHidden = $state(false);\n\tlet error = $state('');\n\tlet query = $state('');\n\tlet active = $state(0);\n\tlet inputEl = $state<HTMLInputElement | null>(null);\n\tlet listEl = $state<HTMLDivElement | null>(null);\n\t/** Whether a folder made here gets `git init`. */\n\tlet gitInit = $state(false);\n\tlet creating = $state(false);\n\n\t/** What is typed, when it names a folder this one could have and does not: the last row offers to make it. */\n\tconst newName = $derived.by(() => {\n\t\tconst name = query.trim();\n\t\tif (folderNameProblem(name) || folders.some((f) => f.name === name)) return null;\n\t\treturn name;\n\t});\n\n\t/** Folders of the current dir, fuzzy-filtered and ranked, with matched chars marked. */\n\tconst matches = $derived.by(() => {\n\t\tconst q = query.trim();\n\t\treturn folders\n\t\t\t.flatMap((folder) => {\n\t\t\t\tconst m = fuzzyMatch(folder.name, q);\n\t\t\t\tif (!m) return [];\n\t\t\t\t// Runs only matter while filtering; an unfiltered list renders the name.\n\t\t\t\treturn [{ folder, score: m.score, runs: q ? highlightRuns(folder.name, m.positions) : null }];\n\t\t\t})\n\t\t\t.sort((a, b) => b.score - a.score);\n\t});\n\n\t/** The current path as clickable segments — the path is the navigation. */\n\tconst crumbs = $derived.by(() => {\n\t\tif (!path) return [];\n\t\tconst usesHome = home !== '' && `${path}/`.startsWith(`${home}/`);\n\t\tconst parts = (usesHome ? path.slice(home.length) : path).split('/').filter(Boolean);\n\t\tconst list = usesHome ? [{ label: '~', path: home }] : [{ label: '/', path: '/' }];\n\t\tlet acc = usesHome ? home : '';\n\t\tfor (const part of parts) {\n\t\t\tacc = `${acc}/${part}`;\n\t\t\tlist.push({ label: part, path: acc });\n\t\t}\n\t\treturn list;\n\t});\n\n\t$effect(() => {\n\t\t// A new result set always starts at the top.\n\t\tmatches;\n\t\tactive = 0;\n\t});\n\n\t/** What each folder of the machine browsed is marked with. */\n\tconst mark = $derived(folderMarker(tab, openFolders));\n\t/** The folders open on the machine browsed, listed above its folders while nothing is typed. */\n\tconst openHere = $derived(openOn(tab, openFolders));\n\n\t/** Open on a machine, the one the drawer is filtered to or the origin. */\n\texport async function openAt(start: string, on: Machine) {\n\t\t// A machine nothing reaches cannot be browsed: open on the origin instead.\n\t\tconst usable = blockedReason(on, clock.now) ? (machines[0] ?? on) : on;\n\t\ttab = machineKey(usable);\n\t\tchosen = usable;\n\t\topen = true;\n\t\tawait browseTo(start);\n\t\t// On touch the keyboard would cover the list before the user has decided to\n\t\t// filter, so the prompt is focused only for pointers. Tapping it still works.\n\t\tif (!window.matchMedia?.('(pointer: coarse)').matches) inputEl?.focus();\n\t}\n\n\t/**\n\t * Browse another machine, at the same place relative to home when it has\n\t * that folder, else at home.\n\t */\n\tasync function switchTo(id: string) {\n\t\tconst next = machines.find((m) => machineKey(m) === id);\n\t\tif (!next || id === tab || blockedReason(next, clock.now)) return;\n\t\tconst carried = carryPath(path, home);\n\t\tconst [was, wasChosen] = [tab, chosen];\n\t\ttab = id;\n\t\tchosen = next;\n\t\tlet shown = await browseTo(carried, true);\n\t\tif (shown === false && carried !== '~') shown = await browseTo('~', true);\n\t\t// Nothing of the new machine could be read: stay on the old one, whose folders are still shown.\n\t\tif (shown === false) [tab, chosen] = [was, wasChosen];\n\t}\n\n\t/** Which browse is the latest, so a slow answer for a tab left behind is dropped. */\n\tlet browsing = 0;\n\n\t/** Show a folder of the machine browsed: false when it cannot be read, null when a later browse took over. */\n\tasync function browseTo(to: string, keepQuery = false): Promise<boolean | null> {\n\t\tconst ask = ++browsing;\n\t\terror = '';\n\t\tconst data = await fetch(`${base}/api/browse?path=${encodeURIComponent(to)}&showHidden=${showHidden}`)\n\t\t\t.then((res) => res.json())\n\t\t\t.catch(() => ({ error: 'Could not reach the machine' }));\n\t\tif (ask !== browsing) return null;\n\t\tif (data.error) {\n\t\t\terror = data.error;\n\t\t\treturn false;\n\t\t}\n\t\tpath = data.current;\n\t\thome = data.home;\n\t\tparent = data.parent;\n\t\tfolders = data.folders;\n\t\tif (!keepQuery) query = '';\n\t\tawait tick();\n\t\tlistEl?.scrollTo({ top: 0 });\n\t\treturn true;\n\t}\n\n\tfunction goTo(folder: PickerFolder) {\n\t\topen = false;\n\t\tongoto(folder);\n\t}\n\n\t/** Make the folder typed, then browse into it. */\n\tasync function createFolder() {\n\t\tif (!newName || creating) return;\n\t\tcreating = true;\n\t\terror = '';\n\t\tconst data = await fetch(`${base}/api/browse`, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'content-type': 'application/json' },\n\t\t\tbody: JSON.stringify({ parent: path, name: newName, git: gitInit })\n\t\t})\n\t\t\t.then((res) => res.json())\n\t\t\t.catch(() => ({ error: 'Could not reach the machine' }));\n\t\tcreating = false;\n\t\tif (data.error) {\n\t\t\terror = data.error;\n\t\t\treturn;\n\t\t}\n\t\tawait browseTo(data.path);\n\t\tif (data.warning) error = data.warning;\n\t}\n\n\tfunction moveActive(delta: number) {\n\t\tconst n = matches.length + (newName ? 1 : 0);\n\t\tif (n === 0) return;\n\t\tactive = (active + delta + n) % n;\n\t\t(listEl?.children[active] as HTMLElement | undefined)?.scrollIntoView({ block: 'nearest' });\n\t}\n\n\tfunction pickCurrent() {\n\t\tif (!machine) return;\n\t\topen = false;\n\t\tonpick(machine, path);\n\t}\n\n\tfunction onKeydown(e: KeyboardEvent) {\n\t\tif (e.key === 'ArrowDown' || (e.key === 'n' && e.ctrlKey)) {\n\t\t\te.preventDefault();\n\t\t\tmoveActive(1);\n\t\t} else if (e.key === 'ArrowUp' || (e.key === 'p' && e.ctrlKey)) {\n\t\t\te.preventDefault();\n\t\t\tmoveActive(-1);\n\t\t} else if (e.key === 'Enter') {\n\t\t\te.preventDefault();\n\t\t\t// Cmd/Ctrl+Enter picks the current directory as-is\n\t\t\tif (e.metaKey || e.ctrlKey) {\n\t\t\t\tpickCurrent();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst match = matches[active];\n\t\t\tif (match) void browseTo(match.folder.path);\n\t\t\telse if (newName) void createFolder();\n\t\t\telse pickCurrent();\n\t\t} else if (e.key === 'Backspace' && query === '' && parent) {\n\t\t\te.preventDefault();\n\t\t\tvoid browseTo(parent);\n\t\t}\n\t}\n</script>\n\n{#snippet goto(folder: PickerFolder)}\n\t<button class=\"fb-goto\" title={folder.only ? 'Open its session' : 'Open the project'} onclick={() => goTo(folder)}>Go to</button>\n{/snippet}\n\n{#snippet marks(m: FolderMarks<PickerFolder>)}\n\t<span class=\"fb-marks\">\n\t\t{#if m.here?.state}\n\t\t\t<span class=\"fb-live\" class:wants={m.here.wants}>\n\t\t\t\t<SessionStateIndicator state={m.here.state} size=\"sm\" />\n\t\t\t\t{m.here.live} session{m.here.live === 1 ? '' : 's'}\n\t\t\t</span>\n\t\t{:else if m.here}\n\t\t\t<span class=\"fb-rail\" title=\"{m.here.name} is on the rail\">\n\t\t\t\t<ProjectTile initials={m.here.tile.initials} hue={m.here.tile.hue} icon={m.here.tile.icon} size={14} />\n\t\t\t</span>\n\t\t{/if}\n\t\t{#each m.elsewhere as other (`${other.machineId}\\0${other.root}`)}\n\t\t\t{@const letter = markOf(other.machineId)}\n\t\t\t<span\n\t\t\t\tclass=\"fb-mach\"\n\t\t\t\tclass:quiet={other.live === 0}\n\t\t\t\tstyle=\"--m:{letter?.color ?? '#a8a29e'}\"\n\t\t\t\ttitle={other.live > 0\n\t\t\t\t\t? `Open on ${machineName(other.machine)}: ${other.live} session${other.live === 1 ? '' : 's'}`\n\t\t\t\t\t: `On the rail on ${machineName(other.machine)}`}>{letter?.letter ?? '?'}</span\n\t\t\t>\n\t\t{/each}\n\t\t{#if m.below > 0}\n\t\t\t<span class=\"fb-below\" title=\"{m.below} open folder{m.below === 1 ? '' : 's'} below\">{m.below} open</span>\n\t\t{/if}\n\t</span>\n{/snippet}\n\n<Dialog.Root bind:open>\n\t<Dialog.Content\n\t\tclass=\"w-[calc(100%-1.5rem)] max-w-lg grid-cols-[minmax(0,1fr)] gap-0 overflow-hidden border-[#333] bg-[#161616] p-0 sm:max-w-lg\"\n\t\tstyle=\"--fb-accent: #e8b35c;\"\n\t\tshowCloseButton={false}\n\t\tonOpenAutoFocus={(e) => {\n\t\t\t// The dialog would focus the prompt on touch too; openAt decides.\n\t\t\te.preventDefault();\n\t\t}}\n\t>\n\t\t<Dialog.Title\n\t\t\tclass=\"px-4 pt-3 pb-2.5 font-mono text-[11px] font-medium tracking-[0.14em] text-[#6f6f6f] uppercase\"\n\t\t>\n\t\t\topen project\n\t\t</Dialog.Title>\n\t\t<Dialog.Description class=\"sr-only\">\n\t\t\tBrowse to a folder and start a session in it. Type to filter this folder.\n\t\t</Dialog.Description>\n\n\t\t{#if machines.length > 1}\n\t\t\t<!-- One tab per machine; one that is offline or too old says why. -->\n\t\t\t<Tabs.Root value={tab} onValueChange={(id) => void switchTo(id)} class=\"fb-tabs\">\n\t\t\t\t<Tabs.List class=\"fb-tablist\" aria-label=\"Machine\">\n\t\t\t\t\t{#each machines as m (machineKey(m))}\n\t\t\t\t\t\t{@const why = blockedReason(m, clock.now)}\n\t\t\t\t\t\t{@const letter = markOf(machineKey(m))}\n\t\t\t\t\t\t<Tabs.Trigger value={machineKey(m)} disabled={!!why} title={why ?? `Browse ${machineName(m)}`} class=\"fb-tab\">\n\t\t\t\t\t\t\t{#if letter}<span class=\"fb-mach\" style=\"--m:{letter.color}\">{letter.letter}</span>{/if}\n\t\t\t\t\t\t\t<span>{machineName(m)}</span>\n\t\t\t\t\t\t\t{#if why}<span class=\"fb-tabwhy\">{m.online ? 'too old' : offlineLabel(m, clock.now)}</span>{/if}\n\t\t\t\t\t\t</Tabs.Trigger>\n\t\t\t\t\t{/each}\n\t\t\t\t</Tabs.List>\n\t\t\t</Tabs.Root>\n\t\t{/if}\n\n\t\t<nav class=\"fb-crumbs\" aria-label=\"Current path\">\n\t\t\t{#each crumbs as crumb, i (crumb.path)}\n\t\t\t\t{@const here = i === crumbs.length - 1}\n\t\t\t\t{#if i > 0}<span class=\"fb-sep\" aria-hidden=\"true\">/</span>{/if}\n\t\t\t\t<button\n\t\t\t\t\tclass=\"fb-crumb\"\n\t\t\t\t\tclass:here\n\t\t\t\t\taria-current={here ? 'location' : undefined}\n\t\t\t\t\tonclick={() => browseTo(crumb.path)}\n\t\t\t\t>\n\t\t\t\t\t{crumb.label}\n\t\t\t\t</button>\n\t\t\t{/each}\n\t\t</nav>\n\n\t\t<div class=\"fb-prompt\">\n\t\t\t<span class=\"fb-caret\" aria-hidden=\"true\">❯</span>\n\t\t\t<input\n\t\t\t\tbind:this={inputEl}\n\t\t\t\tbind:value={query}\n\t\t\t\tonkeydown={onKeydown}\n\t\t\t\ttype=\"text\"\n\t\t\t\tplaceholder=\"type to filter\"\n\t\t\t\taria-label=\"Filter folders in this directory\"\n\t\t\t\tautocomplete=\"off\"\n\t\t\t\tautocapitalize=\"off\"\n\t\t\t\tspellcheck=\"false\"\n\t\t\t\tenterkeyhint=\"go\"\n\t\t\t/>\n\t\t\t<span class=\"fb-count\">{query ? `${matches.length}/${folders.length}` : folders.length}</span>\n\t\t</div>\n\n\t\t{#if error}\n\t\t\t<p class=\"fb-error\">{error}</p>\n\t\t{/if}\n\n\t\t<ScrollArea class=\"max-h-80 min-h-24 border-y border-[#333]\">\n\t\t\t{#if !query && openHere.length > 0}\n\t\t\t\t<section class=\"fb-open\" aria-label=\"Open on this machine\">\n\t\t\t\t\t<h3 class=\"fb-head\">Open on this machine</h3>\n\t\t\t\t\t{#each openHere as folder (folder.root)}\n\t\t\t\t\t\t<div class=\"fb-item\">\n\t\t\t\t\t\t\t<button class=\"fb-main\" title={folder.root} onclick={() => browseTo(folder.root)}>\n\t\t\t\t\t\t\t\t<span class=\"fb-name\">{carryPath(folder.root, home)}</span>\n\t\t\t\t\t\t\t\t{@render marks({ ...mark(folder.root), below: 0 })}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t{@render goto(folder)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t{/each}\n\t\t\t\t\t<h3 class=\"fb-head\">In {carryPath(path, home)}</h3>\n\t\t\t\t</section>\n\t\t\t{/if}\n\t\t\t<div bind:this={listEl}>\n\t\t\t\t{#each matches as match, i (match.folder.path)}\n\t\t\t\t\t{@const m = mark(match.folder.path)}\n\t\t\t\t\t<div class=\"fb-item\" class:active={i === active} role=\"presentation\" onmouseenter={() => (active = i)}>\n\t\t\t\t\t\t<button class=\"fb-main\" onclick={() => browseTo(match.folder.path)}>\n\t\t\t\t\t\t\t<span class=\"fb-name\"\n\t\t\t\t\t\t\t\t>{#if match.runs}{#each match.runs as run}{#if run.hit}<mark>{run.text}</mark\n\t\t\t\t\t\t\t\t\t\t>{:else}{run.text}{/if}{/each}{:else}{match.folder.name}{/if}</span\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{@render marks(m)}\n\t\t\t\t\t\t\t{#if match.folder.git}<span class=\"fb-tag\">git</span>{/if}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t{#if m.here}{@render goto(m.here)}{/if}\n\t\t\t\t\t</div>\n\t\t\t\t{/each}\n\t\t\t\t{#if newName}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"fb-item fb-create\"\n\t\t\t\t\t\tclass:active={active === matches.length}\n\t\t\t\t\t\trole=\"presentation\"\n\t\t\t\t\t\tonmouseenter={() => (active = matches.length)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<button class=\"fb-main\" disabled={creating} onclick={() => void createFolder()}>\n\t\t\t\t\t\t\t<iconify-icon icon=\"mdi:folder-plus-outline\" aria-hidden=\"true\"></iconify-icon>\n\t\t\t\t\t\t\t<span class=\"fb-name\">{creating ? 'Creating' : 'Create folder'} <q>{newName}</q></span>\n\t\t\t\t\t\t\t{#if gitInit}<span class=\"fb-tag\">git</span>{/if}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t{:else if matches.length === 0}\n\t\t\t\t\t<p class=\"fb-empty\">\n\t\t\t\t\t\t{#if query}\n\t\t\t\t\t\t\tNo folder here matches <span class=\"fb-empty-q\">{query}</span>. Backspace to clear.\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\tNo folders here. Open this one, go up a level, or type a name to make one.\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</p>\n\t\t\t\t{/if}\n\t\t\t</div>\n\t\t</ScrollArea>\n\n\t\t<div class=\"fb-keys\">\n\t\t\t<span class=\"fb-hints\">↑↓ move · ⏎ enter folder · ⌫ go up · ⌘⏎ open here</span>\n\t\t\t<div class=\"fb-hidden\">\n\t\t\t\t<Checkbox\n\t\t\t\t\tid=\"fb-show-hidden\"\n\t\t\t\t\tchecked={showHidden}\n\t\t\t\t\tonCheckedChange={(v) => {\n\t\t\t\t\t\tshowHidden = !!v;\n\t\t\t\t\t\tbrowseTo(path, true);\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<label for=\"fb-show-hidden\">hidden</label>\n\t\t\t</div>\n\t\t\t{#if newName}\n\t\t\t\t<div class=\"fb-hidden\">\n\t\t\t\t\t<Checkbox id=\"fb-git-init\" checked={gitInit} onCheckedChange={(v) => (gitInit = !!v)} />\n\t\t\t\t\t<label for=\"fb-git-init\">git init</label>\n\t\t\t\t</div>\n\t\t\t{/if}\n\t\t</div>\n\n\t\t<div class=\"fb-footer\">\n\t\t\t<Button variant=\"ghost\" size=\"sm\" onclick={() => (open = false)}>Cancel</Button>\n\t\t\t<Button size=\"sm\" onclick={pickCurrent}>Open here</Button>\n\t\t</div>\n\t</Dialog.Content>\n</Dialog.Root>\n\n<style>\n\t/* A shell prompt, not a file dialog: the path is the navigation, the input is\n\t the command line, matched characters are marked like fzf. */\n\t.fb-crumbs,\n\t.fb-prompt,\n\t.fb-error,\n\t.fb-item,\n\t.fb-empty,\n\t.fb-hints,\n\t.fb-hidden label {\n\t\tfont-family: var(--font-mono);\n\t}\n\n\t.fb-crumbs {\n\t\tdisplay: flex;\n\t\tmin-width: 0;\n\t\tflex-wrap: wrap;\n\t\talign-items: baseline;\n\t\tgap: 1px;\n\t\tpadding: 0 16px 10px;\n\t\tfont-size: 12.5px;\n\t}\n\n\t.fb-crumb {\n\t\tbackground: none;\n\t\tborder: none;\n\t\tpadding: 2px 3px;\n\t\tborder-radius: 3px;\n\t\tfont: inherit;\n\t\tcolor: #8a8a8a;\n\t\tcursor: pointer;\n\t}\n\n\t.fb-crumb:hover {\n\t\tcolor: #e6e6e6;\n\t\tbackground: #242424;\n\t}\n\n\t.fb-crumb.here {\n\t\tcolor: #ededed;\n\t\tcursor: default;\n\t}\n\n\t.fb-sep {\n\t\tcolor: #4a4a4a;\n\t}\n\n\t.fb-prompt {\n\t\tdisplay: flex;\n\t\tmin-width: 0;\n\t\talign-items: center;\n\t\tgap: 10px;\n\t\tpadding: 0 16px 12px;\n\t}\n\n\t.fb-caret {\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 14px;\n\t\tline-height: 1;\n\t\tcolor: var(--fb-accent);\n\t}\n\n\t.fb-prompt input {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\tbackground: transparent;\n\t\tborder: none;\n\t\toutline: none;\n\t\tfont-family: var(--font-mono);\n\t\t/* 16px keeps mobile Safari from zooming the dialog on focus */\n\t\tfont-size: 16px;\n\t\tcolor: #ededed;\n\t\tcaret-color: var(--fb-accent);\n\t}\n\n\t.fb-prompt input::placeholder {\n\t\tcolor: #555;\n\t}\n\n\t.fb-count {\n\t\tflex-shrink: 0;\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 11px;\n\t\tcolor: #5c5c5c;\n\t\tfont-variant-numeric: tabular-nums;\n\t}\n\n\t.fb-error {\n\t\tpadding: 0 16px 12px;\n\t\tfont-size: 12px;\n\t\tcolor: #e07a6b;\n\t}\n\n\t/* The machines, as tabs over the path: the one browsed reads like the crumb it heads. */\n\t:global(.fb-tabs) {\n\t\tpadding: 0 12px 10px;\n\t}\n\n\t:global(.fb-tablist) {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t\tmax-width: 100%;\n\t\tjustify-content: flex-start;\n\t\tgap: 2px;\n\t\toverflow-x: auto;\n\t\tbackground: #1f1f1f;\n\t}\n\n\t:global(.fb-tab) {\n\t\tflex: 0 0 auto;\n\t\tgap: 6px;\n\t\tpadding: 2px 9px;\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 12px;\n\t\tcolor: #8a8a8a;\n\t}\n\n\t:global(.fb-tab[data-state='active']) {\n\t\tbackground: #2c2c2c;\n\t\tcolor: #ededed;\n\t}\n\n\t.fb-tabwhy {\n\t\tfont-size: 10.5px;\n\t\tcolor: #6f6f6f;\n\t}\n\n\t.fb-mach {\n\t\tdisplay: inline-grid;\n\t\tplace-items: center;\n\t\twidth: 15px;\n\t\theight: 15px;\n\t\tborder-radius: 4px;\n\t\tbackground: color-mix(in srgb, var(--m) 18%, transparent);\n\t\tcolor: var(--m);\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 9.5px;\n\t\tfont-weight: 700;\n\t\tline-height: 1;\n\t}\n\n\t.fb-mach.quiet {\n\t\topacity: 0.5;\n\t}\n\n\t.fb-item {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\twidth: 100%;\n\t\tborder-left: 3px solid transparent;\n\t\tcolor: #c4c4c4;\n\t\ttransition:\n\t\t\tbackground 0.09s ease,\n\t\t\tcolor 0.09s ease;\n\t}\n\n\t.fb-item:hover,\n\t.fb-item.active {\n\t\tbackground: #212121;\n\t\tcolor: #f2f2f2;\n\t\tborder-left-color: var(--fb-accent);\n\t}\n\n\t.fb-main {\n\t\tdisplay: flex;\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\talign-items: center;\n\t\tgap: 10px;\n\t\tpadding: 7px 16px 7px 13px;\n\t\tbackground: none;\n\t\tborder: none;\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 13px;\n\t\tcolor: inherit;\n\t\ttext-align: left;\n\t\tcursor: pointer;\n\t}\n\n\t.fb-main:focus-visible,\n\t.fb-goto:focus-visible {\n\t\toutline: 2px solid var(--fb-accent);\n\t\toutline-offset: -2px;\n\t}\n\n\t.fb-marks {\n\t\tdisplay: flex;\n\t\tflex-shrink: 0;\n\t\talign-items: center;\n\t\tgap: 5px;\n\t}\n\n\t.fb-marks:empty {\n\t\tdisplay: none;\n\t}\n\n\t.fb-live {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tgap: 5px;\n\t\tfont-size: 11px;\n\t\tcolor: #a3a3a3;\n\t}\n\n\t.fb-live.wants {\n\t\tcolor: #fbbf24;\n\t}\n\n\t.fb-rail {\n\t\tdisplay: inline-flex;\n\t\topacity: 0.6;\n\t}\n\n\t.fb-below {\n\t\tfont-size: 10.5px;\n\t\tcolor: #5c5c5c;\n\t}\n\n\t.fb-goto {\n\t\tflex-shrink: 0;\n\t\tmargin-right: 10px;\n\t\tpadding: 2px 8px;\n\t\tborder: 1px solid #333;\n\t\tborder-radius: 4px;\n\t\tbackground: none;\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 11px;\n\t\tcolor: #a3a3a3;\n\t\tcursor: pointer;\n\t}\n\n\t.fb-goto:hover {\n\t\tborder-color: var(--fb-accent);\n\t\tcolor: #ededed;\n\t}\n\n\t.fb-head {\n\t\tpadding: 9px 16px 4px;\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 10px;\n\t\tfont-weight: 500;\n\t\tletter-spacing: 0.12em;\n\t\ttext-transform: uppercase;\n\t\tcolor: #5c5c5c;\n\t}\n\n\t.fb-name {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t}\n\n\t.fb-name mark {\n\t\tbackground: none;\n\t\tcolor: var(--fb-accent);\n\t\tfont-weight: 600;\n\t}\n\n\t.fb-tag {\n\t\tflex-shrink: 0;\n\t\tfont-size: 10px;\n\t\tletter-spacing: 0.08em;\n\t\tcolor: #5a6978;\n\t}\n\n\t.fb-create {\n\t\tcolor: var(--fb-accent);\n\t}\n\n\t.fb-create q {\n\t\tcolor: #ededed;\n\t}\n\n\t.fb-create q::before,\n\t.fb-create q::after {\n\t\tcolor: #6f6f6f;\n\t}\n\n\t.fb-empty {\n\t\tpadding: 20px 16px;\n\t\tfont-size: 12.5px;\n\t\tline-height: 1.6;\n\t\tcolor: #6f6f6f;\n\t}\n\n\t.fb-empty-q {\n\t\tcolor: var(--fb-accent);\n\t}\n\n\t.fb-keys {\n\t\tdisplay: flex;\n\t\tmin-width: 0;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\tgap: 12px;\n\t\tpadding: 8px 14px 8px 16px;\n\t}\n\n\t.fb-hints {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\tfont-size: 10.5px;\n\t\tcolor: #4a4a4a;\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t.fb-hidden {\n\t\tdisplay: flex;\n\t\tflex-shrink: 0;\n\t\talign-items: center;\n\t\tgap: 6px;\n\t}\n\n\t.fb-hidden label {\n\t\tfont-size: 10.5px;\n\t\tletter-spacing: 0.04em;\n\t\tcolor: #5c5c5c;\n\t\tcursor: pointer;\n\t}\n\n\t.fb-footer {\n\t\tdisplay: flex;\n\t\tmin-width: 0;\n\t\tjustify-content: flex-end;\n\t\tgap: 6px;\n\t\tpadding: 0 12px 12px;\n\t}\n\n\t@media (pointer: coarse) {\n\t\t.fb-main {\n\t\t\tpadding-block: 11px;\n\t\t}\n\t}\n\n\t/* Touch-sized dialog: the key hints are for keyboards, so they go first. */\n\t@media (max-width: 480px) {\n\t\t.fb-hints {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t/* A refused machine's tab is already dimmed; why stays in its title. */\n\t\t.fb-tabwhy {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.fb-item {\n\t\t\ttransition: none;\n\t\t}\n\t}\n</style>\n","<script lang=\"ts\">\n\t/**\n\t * Everything across the fleet that is waiting on a person, oldest first.\n\t *\n\t * A dialog open in a pane is only one way an agent waits. A maestro worker\n\t * that labels its issue `needs-help` has stopped and gone quiet — its pane\n\t * reads idle — and a wayfinder ticket that only a conversation resolves\n\t * waits on GitHub with no session at all. The project cards scatter the\n\t * first kind and cannot show the other two, so this card gathers them in\n\t * the order they started waiting: the longest wait is the one at the top.\n\t */\n\timport { formatAgo } from '$lib/format';\n\timport { clock } from '$lib/stores/clock.svelte';\n\timport { blockedReason, type Machine } from '$lib/stores/fleet.svelte';\n\timport { asking, getSessionDisplayName, needsHelp, type Session } from '$lib/stores/sessions.svelte';\n\timport type { InboxTicket } from '$shared/types/ws-messages.js';\n\timport SessionStateIndicator from '$lib/components/SessionStateIndicator.svelte';\n\timport { goto } from '$app/navigation';\n\timport { page } from '$app/state';\n\timport { refParam } from '$shared/github-item.js';\n\timport { githubPaneHref } from '$lib/side-panel/url';\n\timport { PANE_PARAMS } from '$lib/side-panel/panes';\n\timport * as Collapsible from '$lib/components/ui/collapsible';\n\n\tinterface Props {\n\t\tmachines: Machine[];\n\t\tonOpen: (machine: Machine, tmuxTarget: string) => void;\n\t\t/** Start a Claude session in the ticket's repo, working that ticket. */\n\t\tonStart: (machine: Machine, ticket: InboxTicket) => void;\n\t\t/** Whether there is more than one machine, whichever are shown. */\n\t\tfleet?: boolean;\n\t}\n\n\tlet { machines, onOpen, onStart, fleet = false }: Props = $props();\n\n\ttype Waiting =\n\t\t| { kind: 'session'; key: string; machine: Machine; session: Session; since: number }\n\t\t| { kind: 'help'; key: string; machine: Machine; ticket: InboxTicket; session: Session | null; since: number };\n\n\tinterface Ready {\n\t\tkey: string;\n\t\tmachine: Machine;\n\t\tticket: InboxTicket;\n\t}\n\n\tconst waiting = $derived.by(() => {\n\t\tconst out: Waiting[] = [];\n\t\tfor (const machine of machines) {\n\t\t\tconst host = machine.server.hostname;\n\t\t\tfor (const s of machine.sessions) {\n\t\t\t\tif (s.pane_alive === false) continue;\n\t\t\t\tif (s.state !== 'waiting' && s.state !== 'permission') continue;\n\t\t\t\tout.push({ kind: 'session', key: `${host}/s/${s.id}`, machine, session: s, since: s.last_update });\n\t\t\t}\n\t\t\tfor (const t of machine.inbox) {\n\t\t\t\tif (t.kind !== 'needs-help') continue;\n\t\t\t\tconst session =\n\t\t\t\t\tmachine.sessions.find(\n\t\t\t\t\t\t(s) => s.pane_alive !== false && s.maestro_issue === t.number && s.git_root === t.git_root\n\t\t\t\t\t) ?? null;\n\t\t\t\t// The worker's own row already says it waits when a dialog is open.\n\t\t\t\tif (session && (session.state === 'waiting' || session.state === 'permission')) continue;\n\t\t\t\tout.push({ kind: 'help', key: `${host}/h/${t.repo}#${t.number}`, machine, ticket: t, session, since: t.since });\n\t\t\t}\n\t\t}\n\t\treturn out.sort((a, b) => a.since - b.since);\n\t});\n\n\tconst ready = $derived.by(() => {\n\t\tconst out: Ready[] = [];\n\t\tfor (const machine of machines) {\n\t\t\tfor (const t of machine.inbox) {\n\t\t\t\tif (t.kind === 'needs-help') continue;\n\t\t\t\tout.push({ key: `${machine.server.hostname}/t/${t.repo}#${t.number}`, machine, ticket: t });\n\t\t\t}\n\t\t}\n\t\treturn out.sort((a, b) => a.ticket.since - b.ticket.since);\n\t});\n\n\t// ── folding the card away ────────────────────────────────────────────\n\t// A person can put the list aside to work on something else; the header\n\t// stays, with its count. What arrives meanwhile is counted as new, so a\n\t// folded card still says when there is more than when it was folded.\n\n\t/** Kept per device: present while folded, holding the keys listed when it was. */\n\tconst FOLD_KEY = 'claude-mux:needs-you-collapsed';\n\n\tfunction readFold(): Set<string> | null {\n\t\ttry {\n\t\t\tconst raw = localStorage.getItem(FOLD_KEY);\n\t\t\treturn raw === null ? null : new Set(JSON.parse(raw) as string[]);\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/** The keys listed when the card was folded; null while it is open. */\n\tlet foldedWith = $state<Set<string> | null>(readFold());\n\tconst allKeys = $derived([...waiting.map((w) => w.key), ...ready.map((r) => r.key)]);\n\t/** How many items arrived since the card was folded. */\n\tconst arrived = $derived(foldedWith ? allKeys.filter((k) => !foldedWith!.has(k)).length : 0);\n\n\tfunction setOpen(open: boolean) {\n\t\tfoldedWith = open ? null : new Set(allKeys);\n\t\ttry {\n\t\t\tif (open) localStorage.removeItem(FOLD_KEY);\n\t\t\telse localStorage.setItem(FOLD_KEY, JSON.stringify(allKeys));\n\t\t} catch {\n\t\t\t// Storage refused (a private window): the fold lasts until the page reloads.\n\t\t}\n\t}\n\n\t/** Tickets past this many fold behind a count; the waiting list never folds. */\n\tconst READY_SHOWN = 3;\n\tlet showAllReady = $state(false);\n\tconst readyShown = $derived(showAllReady ? ready : ready.slice(0, READY_SHOWN));\n\n\t/**\n\t * A ticket's title opens it in the GitHub pane of the session on screen,\n\t * as a chip in the transcript does; with no session on screen, or with a\n\t * modifier held, it goes to github.com.\n\t */\n\tfunction openTicket(e: MouseEvent, t: InboxTicket) {\n\t\tif (e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) return;\n\t\tconst href = githubPaneHref(page.url, refParam(t.repo, t.number), PANE_PARAMS);\n\t\tif (!href) return;\n\t\te.preventDefault();\n\t\tvoid goto(href, { noScroll: true, keepFocus: true });\n\t}\n\n\t/** Each item names its machine whenever the fleet has more than one, even filtered to one. */\n\tconst multiHost = $derived(fleet);\n\n\tfunction repoName(t: InboxTicket): string {\n\t\treturn t.repo.split('/').pop() ?? t.repo;\n\t}\n\n\tfunction openHelp(item: Extract<Waiting, { kind: 'help' }>) {\n\t\tif (item.session?.tmux_target) onOpen(item.machine, item.session.tmux_target);\n\t\telse window.open(item.ticket.url, '_blank', 'noopener');\n\t}\n\n\tconst KIND_ICON: Record<InboxTicket['kind'], string> = {\n\t\t'needs-help': 'mdi:hand-back-right-outline',\n\t\tgrilling: 'mdi:signpost-outline',\n\t\tprototype: 'mdi:shape-outline'\n\t};\n</script>\n\n{#if waiting.length > 0 || ready.length > 0}\n\t<Collapsible.Root\n\t\topen={foldedWith === null}\n\t\tonOpenChange={setOpen}\n\t\tclass=\"needs {waiting.length > 0 ? 'urgent' : ''} {foldedWith ? 'folded' : ''}\"\n\t\trole=\"region\"\n\t\taria-label=\"Needs you\"\n\t>\n\t\t<Collapsible.Trigger class=\"h\" title={foldedWith ? 'Show the list' : 'Fold the list away for now'}>\n\t\t\t<iconify-icon class=\"chev\" icon=\"mdi:chevron-down\" aria-hidden=\"true\"></iconify-icon>\n\t\t\t<span class=\"t\">Needs you</span>\n\t\t\t<span class=\"line\"></span>\n\t\t\t{#if arrived > 0}<span class=\"new\">+{arrived} new</span>{/if}\n\t\t\t{#if waiting.length > 0}<span class=\"n\">{waiting.length}</span>\n\t\t\t{:else if foldedWith}<span class=\"n quiet\">{ready.length}</span>{/if}\n\t\t</Collapsible.Trigger>\n\n\t\t<Collapsible.Content>\n\n\t\t{#each waiting as item (item.key)}\n\t\t\t{#if item.kind === 'session'}\n\t\t\t\t{@const s = item.session}\n\t\t\t\t{@const off = blockedReason(item.machine, clock.now)}\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"it\"\n\t\t\t\t\tclass:off={!!off}\n\t\t\t\t\tdisabled={!!off}\n\t\t\t\t\tonclick={() => s.tmux_target && onOpen(item.machine, s.tmux_target)}\n\t\t\t\t\ttitle={off ?? s.cwd}\n\t\t\t\t>\n\t\t\t\t\t<span class=\"ic\"><SessionStateIndicator state={s.state} size=\"sm\" /></span>\n\t\t\t\t\t<span class=\"name\">{getSessionDisplayName(s)}</span>\n\t\t\t\t\t<span class=\"when\">{formatAgo(item.since, clock.now)}</span>\n\t\t\t\t\t<span class=\"sub\">\n\t\t\t\t\t\t{asking(s)}{#if multiHost}<span class=\"host\">{item.machine.server.hostname}</span>{/if}\n\t\t\t\t\t</span>\n\t\t\t\t</button>\n\t\t\t{:else}\n\t\t\t\t{@const t = item.ticket}\n\t\t\t\t{@const off = blockedReason(item.machine, clock.now)}\n\t\t\t\t<button type=\"button\" class=\"it\" class:off={!!off} disabled={!!off} onclick={() => openHelp(item)} title={off ?? t.url}>\n\t\t\t\t\t<span class=\"ic help\"><iconify-icon icon={KIND_ICON['needs-help']}></iconify-icon></span>\n\t\t\t\t\t<span class=\"name\">{item.session && needsHelp(item.session) ? getSessionDisplayName(item.session) : t.title}</span>\n\t\t\t\t\t<span class=\"when\">{formatAgo(item.since, clock.now)}</span>\n\t\t\t\t\t<span class=\"sub note\">\n\t\t\t\t\t\t<span class=\"num\">#{t.number}</span>{t.note ?? 'Worker asked for a decision'}{#if multiHost}<span\n\t\t\t\t\t\t\t\tclass=\"host\">{item.machine.server.hostname}</span\n\t\t\t\t\t\t\t>{/if}\n\t\t\t\t\t</span>\n\t\t\t\t</button>\n\t\t\t{/if}\n\t\t{/each}\n\n\t\t{#if ready.length > 0}\n\t\t\t<div class=\"ready-h\" class:first={waiting.length === 0}>\n\t\t\t\tReady to decide\n\t\t\t\t{#if ready.length > READY_SHOWN}\n\t\t\t\t\t<button type=\"button\" class=\"more\" onclick={() => (showAllReady = !showAllReady)}>\n\t\t\t\t\t\t{showAllReady ? 'fewer' : `all ${ready.length}`}\n\t\t\t\t\t</button>\n\t\t\t\t{/if}\n\t\t\t</div>\n\t\t\t{#each readyShown as item (item.key)}\n\t\t\t\t{@const t = item.ticket}\n\t\t\t\t{@const off = blockedReason(item.machine, clock.now)}\n\t\t\t\t<div class=\"it ticket\" class:off={!!off}>\n\t\t\t\t\t<span class=\"ic\"><iconify-icon icon={KIND_ICON[t.kind]}></iconify-icon></span>\n\t\t\t\t\t<a class=\"name\" href={t.url} target=\"_blank\" rel=\"noopener\" title=\"Open on GitHub\" onclick={(e) => openTicket(e, t)}\n\t\t\t\t\t\t>{t.title}</a\n\t\t\t\t\t>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclass=\"start\"\n\t\t\t\t\t\ttitle={off ?? `Open a Claude session in ${repoName(t)} that works this ticket with you`}\n\t\t\t\t\t\tdisabled={!!off}\n\t\t\t\t\t\tonclick={() => onStart(item.machine, t)}\n\t\t\t\t\t>\n\t\t\t\t\t\tStart\n\t\t\t\t\t</button>\n\t\t\t\t\t<span class=\"sub\">\n\t\t\t\t\t\t<span class=\"num\">#{t.number}</span>{t.kind} in {repoName(t)}{#if multiHost}<span class=\"host\"\n\t\t\t\t\t\t\t\t>{item.machine.server.hostname}</span\n\t\t\t\t\t\t\t>{/if}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t{/each}\n\t\t{/if}\n\t\t</Collapsible.Content>\n\t</Collapsible.Root>\n{/if}\n\n<style>\n\t/* The sidebar's own surface and ink, so the card sits among the project\n\t cards as one of them. Amber marks only what holds an agent up. */\n\t:global(.needs) {\n\t\t--surface: #151516;\n\t\t--surface-2: #1b1b1d;\n\t\t--surface-3: #212124;\n\t\t--line: #2a2a2c;\n\t\t--text: #e7e5e4;\n\t\t--muted: #a8a29e;\n\t\t--dim: #6b6764;\n\t\t--amber: #f59e0b;\n\t\t--amber-soft: #3a2d0d;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tpadding: 5px;\n\t\tbackground: var(--surface);\n\t\tborder: 1px solid var(--line);\n\t\tborder-radius: 14px;\n\t\tfont-size: 13px;\n\t\tcolor: var(--text);\n\t}\n\t:global(.needs.urgent) {\n\t\tborder-color: #5a4310;\n\t\tbox-shadow: inset 0 0 0 1px var(--amber-soft);\n\t}\n\n\t/* The header folds the card: the whole line is the button. */\n\t:global(.needs .h) {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 8px;\n\t\twidth: 100%;\n\t\tpadding: 4px 6px 4px 3px;\n\t\tborder: 0;\n\t\tborder-radius: 9px;\n\t\tbackground: transparent;\n\t\tcolor: inherit;\n\t\tfont: inherit;\n\t\ttext-align: left;\n\t\tcursor: pointer;\n\t}\n\t:global(.needs .h:focus-visible) {\n\t\toutline: 2px solid var(--amber);\n\t\toutline-offset: 1px;\n\t}\n\t.chev {\n\t\tfont-size: 15px;\n\t\tcolor: var(--dim);\n\t\ttransition: transform 0.15s ease;\n\t}\n\t:global(.needs.folded) .chev {\n\t\ttransform: rotate(-90deg);\n\t}\n\t.new {\n\t\tpadding: 0 5px;\n\t\tborder-radius: 4px;\n\t\tbackground: var(--amber-soft);\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 10.5px;\n\t\tcolor: var(--amber);\n\t}\n\t.n.quiet {\n\t\tcolor: var(--dim);\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.chev {\n\t\t\ttransition: none;\n\t\t}\n\t}\n\t.t {\n\t\tfont-weight: 600;\n\t\tletter-spacing: 0.01em;\n\t}\n\t:global(.needs.urgent) .t {\n\t\tcolor: var(--amber);\n\t}\n\t.line {\n\t\tflex: 1;\n\t\theight: 1px;\n\t\tbackground: var(--line);\n\t}\n\t.n {\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 11px;\n\t\tcolor: var(--amber);\n\t}\n\n\t/* One waiting thing: the session row's grid, so the eye reads both alike. */\n\t.it {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: 16px 1fr auto;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\twidth: 100%;\n\t\tpadding: 6px 7px;\n\t\tborder: 0;\n\t\tborder-radius: 9px;\n\t\tbackground: transparent;\n\t\tcolor: inherit;\n\t\tfont: inherit;\n\t\ttext-align: left;\n\t\tcursor: pointer;\n\t}\n\t.it:hover {\n\t\tbackground: var(--surface-2);\n\t}\n\t/* On a machine that is offline: still listed, out of reach until it answers. */\n\t.it.off {\n\t\topacity: 0.45;\n\t\tcursor: default;\n\t}\n\t.it.off:hover {\n\t\tbackground: transparent;\n\t}\n\t.start:disabled {\n\t\tcursor: default;\n\t}\n\t.it:focus-visible,\n\t.start:focus-visible,\n\t.more:focus-visible,\n\ta.name:focus-visible {\n\t\toutline: 2px solid var(--amber);\n\t\toutline-offset: 1px;\n\t}\n\t.ic {\n\t\tdisplay: grid;\n\t\tplace-items: center;\n\t\twidth: 16px;\n\t\tfont-size: 14px;\n\t\tcolor: var(--dim);\n\t}\n\t.ic.help {\n\t\tcolor: var(--amber);\n\t}\n\t.name {\n\t\tmin-width: 0;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t\tfont-weight: 500;\n\t\tcolor: var(--text);\n\t\ttext-decoration: none;\n\t}\n\ta.name:hover {\n\t\ttext-decoration: underline dotted;\n\t}\n\t.when {\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 11px;\n\t\tcolor: var(--amber);\n\t\twhite-space: nowrap;\n\t}\n\t.sub {\n\t\tgrid-column: 2 / 4;\n\t\tmin-width: 0;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 11px;\n\t\tcolor: var(--dim);\n\t\tmargin-top: 1px;\n\t}\n\t.sub.note {\n\t\tcolor: var(--muted);\n\t}\n\t.num {\n\t\tcolor: var(--muted);\n\t\tmargin-right: 6px;\n\t}\n\t.host {\n\t\tmargin-left: 6px;\n\t\tpadding: 0 5px;\n\t\tborder-radius: 4px;\n\t\tbackground: var(--surface-3);\n\t\tfont-size: 10px;\n\t}\n\n\t/* Tickets nobody is blocked on yet: quieter, and each can start its own\n\t session. */\n\t.ready-h {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 8px;\n\t\tmargin: 6px 7px 2px;\n\t\tpadding-top: 7px;\n\t\tborder-top: 1px solid var(--line);\n\t\tfont-size: 11.5px;\n\t\tcolor: var(--dim);\n\t}\n\t.ready-h.first {\n\t\tmargin-top: 0;\n\t\tpadding-top: 0;\n\t\tborder-top: 0;\n\t}\n\t.more {\n\t\tmargin-left: auto;\n\t\tborder: 0;\n\t\tbackground: none;\n\t\tpadding: 0;\n\t\tcolor: var(--muted);\n\t\tfont: inherit;\n\t\ttext-decoration: underline dotted;\n\t\tcursor: pointer;\n\t}\n\t.it.ticket {\n\t\tcursor: default;\n\t}\n\t.start {\n\t\theight: 22px;\n\t\tpadding: 0 9px;\n\t\tborder: 1px solid var(--line);\n\t\tborder-radius: 7px;\n\t\tbackground: var(--surface-3);\n\t\tcolor: var(--text);\n\t\tfont-size: 11.5px;\n\t\tfont-weight: 500;\n\t\tcursor: pointer;\n\t}\n\t.start:hover {\n\t\tborder-color: #3f3f46;\n\t\tbackground: #2a2a2e;\n\t}\n\t@media (pointer: coarse) {\n\t\t.it {\n\t\t\tpadding-top: 9px;\n\t\t\tpadding-bottom: 9px;\n\t\t}\n\t\t.start {\n\t\t\theight: 32px;\n\t\t\tpadding: 0 12px;\n\t\t}\n\t}\n</style>\n","/**\n * The drawer's project rail (spec #92, \"The project rail\").\n *\n * The rail holds every project in the fleet in an order the person sets by\n * dragging, kept as the fleet preference `RAIL_ORDER` so every link and\n * device draws the same rail. Nothing reorders it by itself: activity shows\n * as badges, and the only change the rail makes on its own is to put a\n * project the saved order has never seen at the top, where it is noticed.\n *\n * The saved order is a list of project keys (`projectKey()` in\n * `src/fleet-projects.ts`). A key that is not on the rail right now stays in\n * it, so a project whose machine is away comes back to the place it had.\n */\n\n/** Read what the preference holds as a list of keys; anything else is no order at all. */\nfunction savedKeys(saved: unknown): string[] {\n if (!Array.isArray(saved)) return [];\n return saved.filter((k): k is string => typeof k === \"string\");\n}\n\n/**\n * The rail's order for the projects in `keys`: those the saved order has\n * never seen first, in the order given, then the rest in the saved order.\n */\nexport function railOrder(saved: unknown, keys: readonly string[]): string[] {\n const known = savedKeys(saved);\n const present = new Set(keys);\n const seen = new Set(known);\n return [...keys.filter((k) => !seen.has(k)), ...known.filter((k) => present.has(k))];\n}\n\n/**\n * The order to save after `key` is dropped before `before` (at the end when\n * null) on the rail as it is drawn (`shown`). Keys saved earlier but not\n * drawn now are kept, after the rest.\n */\nexport function moveTile(saved: unknown, shown: readonly string[], key: string, before: string | null): string[] {\n const drawn = new Set(shown);\n if (key === before) return [...shown, ...savedKeys(saved).filter((k) => !drawn.has(k))];\n const order = shown.filter((k) => k !== key);\n const at = before === null ? -1 : order.indexOf(before);\n order.splice(at < 0 ? order.length : at, 0, key);\n const kept = new Set(order);\n return [...order, ...savedKeys(saved).filter((k) => !kept.has(k))];\n}\n\n/**\n * Whether any of a thing's fields holds what was typed, ignoring case. A\n * leading `#` is dropped, so `#100` finds the worker on issue 100.\n */\nexport function matchesQuery(query: string, fields: readonly (string | number | null | undefined)[]): boolean {\n const q = query.trim().toLowerCase().replace(/^#/, \"\");\n if (!q) return true;\n return fields.some((f) => f != null && String(f).toLowerCase().includes(q));\n}\n\n/**\n * The colours a machine's letter is drawn in. None is amber, emerald,\n * violet, teal or red, which states, workers and subagents already own,\n * and none is a project hue (`PROJECT_HUES`).\n */\nexport const MACHINE_COLORS = [\"#7dd3fc\", \"#f0abfc\", \"#bef264\", \"#fda4af\", \"#cbd5e1\"] as const;\n\nexport interface MachineMark {\n /** One letter, or two where machines share their first. */\n letter: string;\n color: string;\n /** The machine's name, for a tooltip. */\n name: string;\n}\n\n/**\n * Each machine's letter and colour. Colours go by the sorted ids, so they\n * are the same on every link and device, and distinct while there are no\n * more machines than colours.\n */\nexport function machineMarks(machines: readonly { id: string; name: string }[]): Map<string, MachineMark> {\n const first = (name: string) => (name.match(/[a-z0-9]/i)?.[0] ?? \"?\").toUpperCase();\n const counts = new Map<string, number>();\n for (const m of machines) counts.set(first(m.name), (counts.get(first(m.name)) ?? 0) + 1);\n const ids = [...new Set(machines.map((m) => m.id))].sort();\n const marks = new Map<string, MachineMark>();\n for (const m of machines) {\n const one = first(m.name);\n const two = m.name.replace(/[^a-z0-9]/gi, \"\").slice(0, 2);\n const letter = (counts.get(one)! > 1 && two.length === 2 ? one + two[1].toLowerCase() : one);\n marks.set(m.id, { name: m.name, letter, color: MACHINE_COLORS[ids.indexOf(m.id) % MACHINE_COLORS.length] });\n }\n return marks;\n}\n","<script lang=\"ts\" module>\n\texport interface RailTile {\n\t\tkey: string;\n\t\tname: string;\n\t\tinitials: string;\n\t\thue: number;\n\t\ticon: string | null;\n\t\t/** Amber when a session there wants a person, green when one works or just finished. */\n\t\tbadge: 'wants' | 'working' | null;\n\t\t/** Nothing running: drawn quieter. */\n\t\tquiet: boolean;\n\t\t/** Where it is held, for the tooltip. */\n\t\twhere: string;\n\t}\n</script>\n\n<script lang=\"ts\">\n\timport ProjectTile from './ProjectTile.svelte';\n\timport { sessionStateVisual } from '$shared/session-state.js';\n\n\t/**\n\t * The drawer's rail: the ⚡ Active tile, then a tile per project in the\n\t * order the person set. A tile is dragged to reorder the rail, with the\n\t * mouse at once and on a touch screen after a long press, so a finger can\n\t * still scroll the rail. The rail never reorders itself; `onmove` hands the\n\t * drop to the page, which saves the order (`moveTile()`).\n\t */\n\tlet {\n\t\ttiles,\n\t\tselected,\n\t\tactiveBadge,\n\t\tonselect,\n\t\tonmove\n\t}: {\n\t\ttiles: RailTile[];\n\t\t/** 'active', or the selected project's key. */\n\t\tselected: string;\n\t\tactiveBadge: 'wants' | 'working' | null;\n\t\tonselect: (key: string) => void;\n\t\t/** `key` was dropped before `before`, or at the end when null. */\n\t\tonmove: (key: string, before: string | null) => void;\n\t} = $props();\n\n\t/** A badge takes the colour of the state it stands for (`src/session-state.ts`). */\n\tconst BADGE_COLORS = { wants: sessionStateVisual('waiting').color, working: sessionStateVisual('busy').color };\n\n\t/** A finger has to hold this long before a tile lifts. */\n\tconst HOLD_MS = 350;\n\t/** A press that moves this far first is a scroll (touch) or a drag (mouse). */\n\tconst SLOP_PX = 6;\n\n\tlet rail = $state<HTMLElement | null>(null);\n\t/** The tile in flight, and where it would land. */\n\tlet dragging = $state<string | null>(null);\n\tlet dropBefore = $state<string | null | undefined>(undefined);\n\n\tlet press: { key: string; id: number; touch: boolean; x: number; y: number; timer: ReturnType<typeof setTimeout> | null } | null =\n\t\tnull;\n\t/** Swallow the click that ends a drag. */\n\tlet suppressClick = false;\n\n\t/** The tile after `key` on the rail, or null at the end. */\n\tfunction nextKey(key: string): string | null {\n\t\treturn tiles[tiles.findIndex((t) => t.key === key) + 1]?.key ?? null;\n\t}\n\n\tfunction lift(key: string) {\n\t\tdragging = key;\n\t\tdropBefore = undefined;\n\t\tnavigator.vibrate?.(10);\n\t}\n\n\tfunction onPointerDown(e: PointerEvent, key: string) {\n\t\tif (e.button !== 0) return;\n\t\t// A drag a finger ended fires no click, so the swallow must not outlive it.\n\t\tsuppressClick = false;\n\t\tconst touch = e.pointerType !== 'mouse';\n\t\tpress = { key, id: e.pointerId, touch, x: e.clientX, y: e.clientY, timer: null };\n\t\tif (touch) {\n\t\t\tpress.timer = setTimeout(() => {\n\t\t\t\tif (!press) return;\n\t\t\t\tpress.timer = null;\n\t\t\t\tlift(press.key);\n\t\t\t}, HOLD_MS);\n\t\t}\n\t}\n\n\t/** Where a pointer at `y` would drop: before the tile under it, or after it when past its middle. */\n\tfunction targetAt(x: number, y: number): string | null | undefined {\n\t\tconst el = document.elementFromPoint(x, y)?.closest<HTMLElement>('[data-tile]');\n\t\tif (!el || !rail?.contains(el)) {\n\t\t\t// Below the last tile is the end of the rail.\n\t\t\tconst last = rail?.querySelector<HTMLElement>('[data-tile]:last-of-type');\n\t\t\treturn last && y > last.getBoundingClientRect().bottom ? null : undefined;\n\t\t}\n\t\tconst key = el.dataset.tile!;\n\t\tconst box = el.getBoundingClientRect();\n\t\tif (y < box.top + box.height / 2) return key;\n\t\treturn nextKey(key);\n\t}\n\n\tfunction onPointerMove(e: PointerEvent) {\n\t\tif (!press || e.pointerId !== press.id) return;\n\t\t// The button came up somewhere this tile never heard of: that press is over.\n\t\tif (!press.touch && e.buttons === 0) {\n\t\t\tcancel();\n\t\t\treturn;\n\t\t}\n\t\tconst moved = Math.hypot(e.clientX - press.x, e.clientY - press.y) > SLOP_PX;\n\t\tif (!dragging) {\n\t\t\tif (!moved) return;\n\t\t\tif (press.touch) {\n\t\t\t\t// Moved before the hold: the finger is scrolling.\n\t\t\t\tif (press.timer) clearTimeout(press.timer);\n\t\t\t\tpress = null;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlift(press.key);\n\t\t\t(e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n\t\t}\n\t\tdropBefore = targetAt(e.clientX, e.clientY);\n\t}\n\n\tfunction onPointerUp(e: PointerEvent) {\n\t\tif (!press || e.pointerId !== press.id) return;\n\t\tif (press.timer) clearTimeout(press.timer);\n\t\tconst key = dragging;\n\t\tconst before = dropBefore;\n\t\tpress = null;\n\t\tif (key) {\n\t\t\tsuppressClick = true;\n\t\t\tdragging = null;\n\t\t\tdropBefore = undefined;\n\t\t\tif (before !== undefined && before !== key && nextKey(key) !== before) {\n\t\t\t\tonmove(key, before);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction cancel() {\n\t\tif (press?.timer) clearTimeout(press.timer);\n\t\tpress = null;\n\t\tdragging = null;\n\t\tdropBefore = undefined;\n\t}\n\n\tfunction onClick(key: string) {\n\t\tif (suppressClick) {\n\t\t\tsuppressClick = false;\n\t\t\treturn;\n\t\t}\n\t\tonselect(key);\n\t}\n\n\t/**\n\t * While a tile is lifted the finger must not scroll the rail, nor swipe the\n\t * drawer shut; a touchmove is the only place either can be stopped.\n\t */\n\t$effect(() => {\n\t\tconst node = rail;\n\t\tif (!node) return;\n\t\tconst hold = (e: TouchEvent) => {\n\t\t\tif (dragging) {\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t};\n\t\tnode.addEventListener('touchmove', hold, { passive: false });\n\t\treturn () => node.removeEventListener('touchmove', hold);\n\t});\n</script>\n\n<svelte:window onkeydown={(e) => e.key === 'Escape' && dragging && cancel()} />\n\n<nav class=\"rail\" class:lifting={!!dragging} bind:this={rail} aria-label=\"Projects\">\n\t<button\n\t\ttype=\"button\"\n\t\tclass=\"rt all\"\n\t\tclass:sel={selected === 'active'}\n\t\ttitle=\"Active: what wants you, what is working, what just finished\"\n\t\tonclick={() => onselect('active')}\n\t>\n\t\t<span class=\"bolt\"><iconify-icon icon=\"mdi:lightning-bolt-outline\"></iconify-icon></span>\n\t\t{#if activeBadge}<span class=\"bdg\" style=\"--c:{BADGE_COLORS[activeBadge]}\"></span>{/if}\n\t</button>\n\t<span class=\"rsep\"></span>\n\t{#each tiles as tile (tile.key)}\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tdata-tile={tile.key}\n\t\t\tclass=\"rt\"\n\t\t\tclass:sel={selected === tile.key}\n\t\t\tclass:quiet={tile.quiet}\n\t\t\tclass:dragging={dragging === tile.key}\n\t\t\tclass:drop={dragging && dropBefore === tile.key && dragging !== tile.key}\n\t\t\ttitle=\"{tile.name}{tile.where ? `\\n${tile.where}` : ''}\\nDrag to reorder\"\n\t\t\taria-current={selected === tile.key ? 'true' : undefined}\n\t\t\tonpointerdown={(e) => onPointerDown(e, tile.key)}\n\t\t\tonpointermove={onPointerMove}\n\t\t\tonpointerup={onPointerUp}\n\t\t\tonpointercancel={cancel}\n\t\t\toncontextmenu={(e) => press?.touch && e.preventDefault()}\n\t\t\tonclick={() => onClick(tile.key)}\n\t\t>\n\t\t\t<ProjectTile initials={tile.initials} hue={tile.hue} icon={tile.icon} size={34} />\n\t\t\t{#if tile.badge}<span class=\"bdg\" style=\"--c:{BADGE_COLORS[tile.badge]}\"></span>{/if}\n\t\t</button>\n\t{/each}\n\t{#if dragging && dropBefore === null}<span class=\"drop-end\"></span>{/if}\n</nav>\n\n<style>\n\t.rail {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\tgap: 6px;\n\t\tpadding: 8px 0 16px;\n\t\toverflow-y: auto;\n\t\toverflow-x: hidden;\n\t\tborder-right: 1px solid var(--line-soft, #1f1f21);\n\t\tscrollbar-width: none;\n\t\toverscroll-behavior: contain;\n\t}\n\t.rail::-webkit-scrollbar {\n\t\tdisplay: none;\n\t}\n\t.rail.lifting {\n\t\tcursor: grabbing;\n\t}\n\t.rt {\n\t\tposition: relative;\n\t\tflex: none;\n\t\tpadding: 0;\n\t\tborder: 0;\n\t\tbackground: none;\n\t\tcursor: pointer;\n\t\tborder-radius: 10px;\n\t\t/* A finger's hold lifts the tile; the browser must not select or call out. */\n\t\tuser-select: none;\n\t\t-webkit-user-select: none;\n\t\t-webkit-touch-callout: none;\n\t\ttouch-action: pan-y;\n\t}\n\t.rt :global(.ptile) {\n\t\ttransition: border-radius 0.15s;\n\t}\n\t.rt:hover :global(.ptile),\n\t.rt.sel :global(.ptile) {\n\t\tborder-radius: 13px;\n\t}\n\t/* The chosen tile: a bar at the rail's edge. */\n\t.rt.sel::before {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: -9px;\n\t\ttop: 6px;\n\t\tbottom: 6px;\n\t\twidth: 3px;\n\t\tborder-radius: 0 3px 3px 0;\n\t\tbackground: var(--text, #e7e5e4);\n\t}\n\t.rt:focus-visible {\n\t\toutline: 2px solid #7dd3fc;\n\t\toutline-offset: 2px;\n\t}\n\t/* Nothing running there: quieter until pointed at or chosen. */\n\t.rt.quiet :global(.ptile) {\n\t\topacity: 0.5;\n\t\tfilter: saturate(0.6);\n\t}\n\t.rt.quiet:hover :global(.ptile),\n\t.rt.quiet.sel :global(.ptile) {\n\t\topacity: 1;\n\t\tfilter: none;\n\t}\n\t.rt.dragging {\n\t\topacity: 0.35;\n\t}\n\t.rt.drop::after,\n\t.drop-end {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: 2px;\n\t\tright: 2px;\n\t\ttop: -5px;\n\t\theight: 2px;\n\t\tborder-radius: 2px;\n\t\tbackground: var(--text, #e7e5e4);\n\t}\n\t.drop-end {\n\t\tposition: static;\n\t\twidth: 30px;\n\t\tflex: none;\n\t}\n\t.bolt {\n\t\tdisplay: grid;\n\t\tplace-items: center;\n\t\twidth: 34px;\n\t\theight: 34px;\n\t\tborder-radius: 10px;\n\t\tbackground: var(--surface-3, #212124);\n\t\tbox-shadow: inset 0 0 0 1px var(--line, #2a2a2c);\n\t\tcolor: var(--text, #e7e5e4);\n\t\ttransition: border-radius 0.15s;\n\t}\n\t.bolt iconify-icon {\n\t\tfont-size: 18px;\n\t}\n\t.rt.all:hover .bolt,\n\t.rt.all.sel .bolt {\n\t\tborder-radius: 13px;\n\t}\n\t.bdg {\n\t\tposition: absolute;\n\t\tright: -3px;\n\t\tbottom: -3px;\n\t\twidth: 12px;\n\t\theight: 12px;\n\t\tborder-radius: 50%;\n\t\tborder: 2px solid hsl(var(--background));\n\t\tbackground: var(--c);\n\t}\n\t.rsep {\n\t\tflex: none;\n\t\twidth: 24px;\n\t\theight: 1px;\n\t\tbackground: var(--line, #2a2a2c);\n\t\tmargin: 2px 0;\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.rt :global(.ptile),\n\t\t.bolt {\n\t\t\ttransition: none;\n\t\t}\n\t}\n</style>\n","<script lang=\"ts\">\n\timport { Command as CommandPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\texport type CommandRootApi = CommandPrimitive.Root;\n\n\tlet {\n\t\tapi = $bindable(null),\n\t\tref = $bindable(null),\n\t\tvalue = $bindable(\"\"),\n\t\tclass: className,\n\t\t...restProps\n\t}: CommandPrimitive.RootProps & {\n\t\tapi?: CommandRootApi | null;\n\t} = $props();\n</script>\n\n<CommandPrimitive.Root\n\tbind:this={api}\n\tbind:value\n\tbind:ref\n\tdata-slot=\"command\"\n\tclass={cn(\"bg-popover text-popover-foreground rounded-xl! p-1 flex size-full flex-col overflow-hidden\", className)}\n\t{...restProps}\n/>\n","<script lang=\"ts\">\n\timport * as Dialog from \"$lib/components/ui/dialog/index.js\";\n\timport { cn, type WithoutChildrenOrChild } from \"$lib/utils.js\";\n\timport Command from \"./command.svelte\";\n\timport type { Command as CommandPrimitive, Dialog as DialogPrimitive } from \"bits-ui\";\n\timport type { Snippet } from \"svelte\";\n\n\tlet {\n\t\topen = $bindable(false),\n\t\tref = $bindable(null),\n\t\tvalue = $bindable(\"\"),\n\t\ttitle = \"Command Palette\",\n\t\tdescription = \"Search for a command to run...\",\n\t\tshowCloseButton = false,\n\t\tportalProps,\n\t\tchildren,\n\t\tclass: className,\n\t\t...restProps\n\t}: WithoutChildrenOrChild<DialogPrimitive.RootProps> &\n\t\tWithoutChildrenOrChild<CommandPrimitive.RootProps> & {\n\t\t\tportalProps?: DialogPrimitive.PortalProps;\n\t\t\tchildren: Snippet;\n\t\t\ttitle?: string;\n\t\t\tdescription?: string;\n\t\t\tshowCloseButton?: boolean;\n\t\t\tclass?: string;\n\t\t} = $props();\n</script>\n\n<Dialog.Root bind:open {...restProps}>\n\t<Dialog.Header class=\"sr-only\">\n\t\t<Dialog.Title>{title}</Dialog.Title>\n\t\t<Dialog.Description>{description}</Dialog.Description>\n\t</Dialog.Header>\n\t<Dialog.Content\n\t\tclass={cn(\"rounded-xl! top-1/3 translate-y-0 overflow-hidden p-0\", className)}\n\t\t{showCloseButton}\n\t\t{portalProps}\n\t>\n\t\t<Command {...restProps} bind:value bind:ref {children} />\n\t</Dialog.Content>\n</Dialog.Root>\n","<script lang=\"ts\">\n\timport { Command as CommandPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: CommandPrimitive.EmptyProps = $props();\n</script>\n\n<CommandPrimitive.Empty\n\tbind:ref\n\tdata-slot=\"command-empty\"\n\tclass={cn(\"py-6 text-center text-sm\", className)}\n\t{...restProps}\n/>\n","<script lang=\"ts\">\n\timport { Command as CommandPrimitive, useId } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\theading,\n\t\tvalue,\n\t\t...restProps\n\t}: CommandPrimitive.GroupProps & {\n\t\theading?: string;\n\t} = $props();\n</script>\n\n<CommandPrimitive.Group\n\tbind:ref\n\tdata-slot=\"command-group\"\n\tclass={cn(\"text-foreground **:[[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium\", className)}\n\tvalue={value ?? heading ?? `----${useId()}`}\n\t{...restProps}\n>\n\t{#if heading}\n\t\t<CommandPrimitive.GroupHeading class=\"px-2 py-1.5 text-xs font-medium text-muted-foreground\">\n\t\t\t{heading}\n\t\t</CommandPrimitive.GroupHeading>\n\t{/if}\n\t<CommandPrimitive.GroupItems {children} />\n</CommandPrimitive.Group>\n","<script lang=\"ts\" module>\n\timport { tv, type VariantProps } from \"tailwind-variants\";\n\texport const inputGroupAddonVariants = tv({\n\t\tbase: \"text-muted-foreground h-auto gap-2 py-1.5 text-sm font-medium group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)_-_5px)] [&>svg:not([class*='size-'])]:size-4 flex cursor-text items-center justify-center select-none\",\n\t\tvariants: {\n\t\t\talign: {\n\t\t\t\t\"inline-start\": \"pl-2 has-[>button]:ml-[-0.3rem] has-[>kbd]:ml-[-0.15rem] order-first\",\n\t\t\t\t\"inline-end\": \"pr-2 has-[>button]:mr-[-0.3rem] has-[>kbd]:mr-[-0.15rem] order-last\",\n\t\t\t\t\"block-start\": \"px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2 order-first w-full justify-start\",\n\t\t\t\t\"block-end\": \"px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2 order-last w-full justify-start\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\talign: \"inline-start\",\n\t\t},\n\t});\n\n\texport type InputGroupAddonAlign = VariantProps<typeof inputGroupAddonVariants>[\"align\"];\n</script>\n\n<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\talign = \"inline-start\",\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> & {\n\t\talign?: InputGroupAddonAlign;\n\t} = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\trole=\"group\"\n\tdata-slot=\"input-group-addon\"\n\tdata-align={align}\n\tclass={cn(inputGroupAddonVariants({ align }), className)}\n\tonclick={(e) => {\n\t\tif ((e.target as HTMLElement).closest(\"button\")) {\n\t\t\treturn;\n\t\t}\n\t\te.currentTarget.parentElement?.querySelector(\"input\")?.focus();\n\t}}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n","<script lang=\"ts\" module>\n\timport { tv, type VariantProps } from \"tailwind-variants\";\n\n\tconst inputGroupButtonVariants = tv({\n\t\tbase: \"gap-2 text-sm flex items-center shadow-none\",\n\t\tvariants: {\n\t\t\tsize: {\n\t\t\t\txs: \"h-6 gap-1 rounded-[calc(var(--radius)_-_3px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5\",\n\t\t\t\tsm: \"\",\n\t\t\t\t\"icon-xs\": \"size-6 rounded-[calc(var(--radius)_-_3px)] p-0 has-[>svg]:p-0\",\n\t\t\t\t\"icon-sm\": \"size-8 p-0 has-[>svg]:p-0\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tsize: \"xs\",\n\t\t},\n\t});\n\n\texport type InputGroupButtonSize = VariantProps<typeof inputGroupButtonVariants>[\"size\"];\n</script>\n\n<script lang=\"ts\">\n\timport { Button } from \"$lib/components/ui/button/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\ttype = \"button\",\n\t\tvariant = \"ghost\",\n\t\tsize = \"xs\",\n\t\t...restProps\n\t}: Omit<ComponentProps<typeof Button>, \"href\" | \"size\"> & {\n\t\tsize?: InputGroupButtonSize;\n\t} = $props();\n</script>\n\n<Button\n\tbind:ref\n\t{type}\n\tdata-size={size}\n\t{variant}\n\tclass={cn(inputGroupButtonVariants({ size }), className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</Button>\n","<script lang=\"ts\">\n\timport { Input } from \"$lib/components/ui/input/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tvalue = $bindable(),\n\t\tclass: className,\n\t\t...props\n\t}: ComponentProps<typeof Input> = $props();\n</script>\n\n<Input\n\tbind:ref\n\tdata-slot=\"input-group-control\"\n\tclass={cn(\"rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent flex-1\", className)}\n\tbind:value\n\t{...props}\n/>\n","<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...props\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"input-group\"\n\trole=\"group\"\n\tclass={cn(\n\t\t\"group/input-group border-input dark:bg-input/30 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-disabled:bg-input/50 dark:has-disabled:bg-input/80 h-8 rounded-lg border transition-colors in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-3 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5 relative flex w-full min-w-0 items-center outline-none has-[>textarea]:h-auto\",\n\t\tclassName\n\t)}\n\t{...props}\n>\n\t{@render children?.()}\n</div>\n","<script lang=\"ts\">/**\n * @license @lucide/svelte v0.561.0 - ISC\n *\n * ISC License\n *\n * Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2023 as part of Feather (MIT). All other copyright (c) for Lucide are held by Lucide Contributors 2025.\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n *\n * ---\n *\n * The MIT License (MIT) (for portions derived from Feather)\n *\n * Copyright (c) 2013-2023 Cole Bemis\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n */\nimport Icon from '../Icon.svelte';\nlet props = $props();\nconst iconNode = [[\"path\", { \"d\": \"m21 21-4.34-4.34\" }], [\"circle\", { \"cx\": \"11\", \"cy\": \"11\", \"r\": \"8\" }]];\n/**\n * @component @name Search\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/search\n * @see https://lucide.dev/guide/packages/lucide-svelte - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {FunctionalComponent} Svelte component\n *\n */\n</script>\n\n<Icon name=\"search\" {...props} iconNode={iconNode}>\n {@render props.children?.()}\n</Icon>\n","<script lang=\"ts\">\n\timport { Command as CommandPrimitive } from \"bits-ui\";\n\timport * as InputGroup from \"$lib/components/ui/input-group/index.js\";\n\timport SearchIcon from '@lucide/svelte/icons/search';\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tvalue = $bindable(\"\"),\n\t\t...restProps\n\t}: CommandPrimitive.InputProps = $props();\n</script>\n\n<div data-slot=\"command-input-wrapper\" class=\"p-1 pb-0\">\n\t<InputGroup.Root class=\"bg-input/30 border-input/30 h-8! rounded-lg! shadow-none! *:data-[slot=input-group-addon]:pl-2!\">\n\t\t<CommandPrimitive.Input\n\t\t\t{value}\n\t\t\tdata-slot=\"command-input\"\n\t\t\tclass={cn(\n\t\t\t\t\"w-full text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...restProps}\n\t\t>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<InputGroup.Input {...props} bind:value bind:ref />\n\t\t\t{/snippet}\n\t\t</CommandPrimitive.Input>\n\t\t<InputGroup.Addon>\n\t\t\t<SearchIcon class=\"size-4 shrink-0 opacity-50\" />\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n</div>\n","<script lang=\"ts\">\n\timport { Command as CommandPrimitive } from \"bits-ui\";\n\timport CheckIcon from '@lucide/svelte/icons/check';\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: CommandPrimitive.ItemProps = $props();\n</script>\n\n\n<CommandPrimitive.Item\n\tbind:ref\n\tdata-slot=\"command-item\"\n\tclass={cn(\n\t\t\"data-selected:bg-muted data-selected:text-foreground data-selected:*:[svg]:text-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none in-data-[slot=dialog-content]:rounded-lg! [&_svg:not([class*='size-'])]:size-4 group/command-item [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n\t\t\"data-disabled:pointer-events-none data-disabled:opacity-50\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n\t<CheckIcon class=\"ml-auto opacity-0 group-has-data-[slot=command-shortcut]/command-item:hidden group-data-[checked=true]/command-item:opacity-100\" />\n</CommandPrimitive.Item>\n","<script lang=\"ts\">\n\timport { Command as CommandPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: CommandPrimitive.ListProps = $props();\n</script>\n\n<CommandPrimitive.List\n\tbind:ref\n\tdata-slot=\"command-list\"\n\tclass={cn(\"no-scrollbar max-h-72 scroll-py-1 outline-none overflow-x-hidden overflow-y-auto\", className)}\n\t{...restProps}\n/>\n","<script lang=\"ts\" module>\n\texport interface SwitchItem {\n\t\tid: string;\n\t\tkind: 'session' | 'project' | 'past';\n\t\ttitle: string;\n\t\t/** The project and machine a session is in; where a project is held. */\n\t\tdetail: string;\n\t\t/** What typing may match besides the title. */\n\t\tfields: (string | number | null | undefined)[];\n\t\ttile?: { initials: string; hue: number; icon: string | null };\n\t\tmachine?: import('$shared/fleet-rail.js').MachineMark | null;\n\t\tstate?: import('$shared/session-state.js').IndicatorState;\n\t\t/** On a machine that does not answer. */\n\t\toff?: boolean;\n\t\trun: () => void;\n\t}\n</script>\n\n<script lang=\"ts\">\n\timport * as Command from '$lib/components/ui/command';\n\timport { matchesQuery } from '$shared/fleet-rail.js';\n\timport ProjectTile from './ProjectTile.svelte';\n\timport SessionStateIndicator from './SessionStateIndicator.svelte';\n\n\t/**\n\t * Ctrl+K: jump to any session, project or past session in the fleet by typing. The match\n\t * is the drawer filter's (`matchesQuery()`), so `#100` finds the worker on\n\t * issue 100 and a machine's name finds what runs there.\n\t */\n\tlet { open = $bindable(false), items }: { open: boolean; items: SwitchItem[] } = $props();\n\n\tlet query = $state('');\n\t$effect(() => {\n\t\tif (open) query = '';\n\t});\n\n\tconst LIMIT = 50;\n\tconst hits = $derived(items.filter((it) => matchesQuery(query, [it.title, ...it.fields])).slice(0, LIMIT));\n\tconst sessions = $derived(hits.filter((it) => it.kind === 'session'));\n\tconst projects = $derived(hits.filter((it) => it.kind === 'project'));\n\tconst past = $derived(hits.filter((it) => it.kind === 'past'));\n\n\tfunction pick(item: SwitchItem) {\n\t\topen = false;\n\t\titem.run();\n\t}\n</script>\n\n<Command.Dialog\n\tbind:open\n\tshouldFilter={false}\n\ttitle=\"Jump to\"\n\tdescription=\"Find a session, project or past session anywhere in the fleet\"\n\tclass=\"quick-switch\"\n>\n\t<Command.Input bind:value={query} placeholder=\"Jump to a session, project or past session…\" />\n\t<Command.List class=\"max-h-[60dvh]\">\n\t\t<Command.Empty>Nothing matches.</Command.Empty>\n\t\t{#if sessions.length > 0}\n\t\t\t<Command.Group heading=\"Sessions\">\n\t\t\t\t{#each sessions as item (item.id)}\n\t\t\t\t\t<Command.Item value={item.id} onSelect={() => pick(item)} class={item.off ? 'opacity-50' : ''}>\n\t\t\t\t\t\t<span class=\"qs-st\">{#if item.state}<SessionStateIndicator state={item.state} size=\"sm\" />{/if}</span>\n\t\t\t\t\t\t<span class=\"qs-title\">{item.title}</span>\n\t\t\t\t\t\t<span class=\"qs-detail\">{item.detail}</span>\n\t\t\t\t\t\t{#if item.machine}<span class=\"qs-mach\" style=\"--m:{item.machine.color}\" title={item.machine.name}>{item.machine.letter}</span>{/if}\n\t\t\t\t\t</Command.Item>\n\t\t\t\t{/each}\n\t\t\t</Command.Group>\n\t\t{/if}\n\t\t{#if projects.length > 0}\n\t\t\t<Command.Group heading=\"Projects\">\n\t\t\t\t{#each projects as item (item.id)}\n\t\t\t\t\t<Command.Item value={item.id} onSelect={() => pick(item)}>\n\t\t\t\t\t\t{#if item.tile}<ProjectTile {...item.tile} size={18} />{/if}\n\t\t\t\t\t\t<span class=\"qs-title\">{item.title}</span>\n\t\t\t\t\t\t<span class=\"qs-detail\">{item.detail}</span>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t{/each}\n\t\t\t</Command.Group>\n\t\t{/if}\n\t\t{#if past.length > 0}\n\t\t\t<Command.Group heading=\"Past sessions\">\n\t\t\t\t{#each past as item (item.id)}\n\t\t\t\t\t<Command.Item value={item.id} onSelect={() => pick(item)} class={item.off ? 'opacity-50' : ''}>\n\t\t\t\t\t\t<span class=\"qs-st\"><iconify-icon icon=\"mdi:history\"></iconify-icon></span>\n\t\t\t\t\t\t<span class=\"qs-title\">{item.title}</span>\n\t\t\t\t\t\t<span class=\"qs-detail\">{item.detail}</span>\n\t\t\t\t\t\t{#if item.machine}<span class=\"qs-mach\" style=\"--m:{item.machine.color}\" title={item.machine.name}>{item.machine.letter}</span>{/if}\n\t\t\t\t\t</Command.Item>\n\t\t\t\t{/each}\n\t\t\t</Command.Group>\n\t\t{/if}\n\t</Command.List>\n</Command.Dialog>\n\n<style>\n\t.qs-st {\n\t\tdisplay: grid;\n\t\tplace-items: center;\n\t\twidth: 18px;\n\t\tflex: none;\n\t}\n\t.qs-title {\n\t\tmin-width: 0;\n\t\tflex: 1;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t}\n\t.qs-detail {\n\t\tflex: none;\n\t\tmax-width: 40%;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 11px;\n\t\tcolor: #6b6764;\n\t}\n\t.qs-mach {\n\t\tflex: none;\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 10px;\n\t\tfont-weight: 600;\n\t\tcolor: var(--m);\n\t}\n</style>\n","/**\n * Whether the drawer's Ctrl+K switcher is open. The drawer owns it; a split's\n * pane, which has no drawer of its own, asks the page outside to open it.\n */\nclass QuickSwitchStore {\n\topen = $state(false);\n}\n\nexport const quickSwitch = new QuickSwitchStore();\n","/**\n * Two sessions side by side.\n *\n * The URL is the state: `/session/A?with=B`. The layout reads it and hands\n * the two refs here; the store keeps what the URL does not — which pane has\n * focus, whether one is zoomed, where the divider sits, and whether a sidebar\n * row is being dragged — and turns every action into the next URL.\n *\n * A pane is a session page of this origin in an iframe (see SplitView), so a\n * pane can show a session on any machine the origin relays to. Leaving the\n * split for a single session stays on this page, the way the sidebar opens a\n * remote session.\n */\n\nimport { browser } from '$app/environment';\nimport { goto } from '$app/navigation';\nimport { createPersisted } from './persisted';\nimport { fleetStore, selfName } from './fleet.svelte';\nimport { formatRef, sameRef, singleUrl, splitUrl, type PaneRef } from '$lib/split-refs';\n\nexport type PaneSide = 'a' | 'b';\n\nconst ratioStore = createPersisted<number>('claude-mux-split-ratio', 0.5);\n\n/** Panes narrower than this lose their composer; below it the split is refused. */\nexport const MIN_PANE_PX = 440;\n\nfunction navigate(url: string): void {\n\tvoid goto(url);\n}\n\nclass SplitStore {\n\ta = $state<PaneRef | null>(null);\n\tb = $state<PaneRef | null>(null);\n\tfocus = $state<PaneSide>('a');\n\tzoom = $state<PaneSide | null>(null);\n\tratio = $state(0.5);\n\t/** A sidebar row is mid-drag: the panes show their drop targets. */\n\tdragging = $state(false);\n\n\t/** Both panes are set: the split is on. */\n\tactive: boolean = $derived(this.a !== null && this.b !== null);\n\n\tconstructor() {\n\t\tif (browser) {\n\t\t\tconst saved = ratioStore.load();\n\t\t\tif (saved > 0.2 && saved < 0.8) this.ratio = saved;\n\t\t}\n\t}\n\n\t/** Called by the layout whenever the URL changes. */\n\tsetPanes(a: PaneRef | null, b: PaneRef | null): void {\n\t\tif (!sameRef(this.a, a)) this.a = a;\n\t\tif (!sameRef(this.b, b)) this.b = b;\n\t\tif (!this.active) this.zoom = null;\n\t}\n\n\tpane(side: PaneSide): PaneRef | null {\n\t\treturn side === 'a' ? this.a : this.b;\n\t}\n\n\t/** Which pane holds this session, if any. */\n\tsideOf(ref: PaneRef): PaneSide | null {\n\t\tif (sameRef(this.a, ref)) return 'a';\n\t\tif (sameRef(this.b, ref)) return 'b';\n\t\treturn null;\n\t}\n\n\tsetFocus(side: PaneSide): void {\n\t\tthis.focus = side;\n\t}\n\n\tother(side: PaneSide): PaneSide {\n\t\treturn side === 'a' ? 'b' : 'a';\n\t}\n\n\t/**\n\t * Open a session in a pane. With no split on, the focused pane is the page\n\t * itself and the other pane is the right half that does not exist yet:\n\t * opening there is what starts a split.\n\t */\n\topenIn(side: PaneSide | 'focus' | 'other', ref: PaneRef, current: PaneRef | null): void {\n\t\tconst target: PaneSide = side === 'focus' ? this.focus : side === 'other' ? this.other(this.focus) : side;\n\t\tif (this.active && this.a && this.b) {\n\t\t\tconst a = target === 'a' ? ref : this.a;\n\t\t\tconst b = target === 'b' ? ref : this.b;\n\t\t\tif (sameRef(a, b)) return;\n\t\t\tnavigate(splitUrl(a, b));\n\t\t\tthis.focus = target;\n\t\t\treturn;\n\t\t}\n\t\tif (target === 'b' && current && !sameRef(current, ref)) {\n\t\t\tnavigate(splitUrl(current, ref));\n\t\t\tthis.focus = 'b';\n\t\t\treturn;\n\t\t}\n\t\tnavigate(singleUrl(ref, fleetStore.servers(), selfName()));\n\t}\n\n\t/** Start a split with `ref` beside the session on the page. */\n\tsplitWith(ref: PaneRef, current: PaneRef | null): void {\n\t\tif (!current || sameRef(current, ref)) return;\n\t\tnavigate(splitUrl(current, ref));\n\t\tthis.focus = 'b';\n\t}\n\n\t/** Close one pane; the other takes the whole width. */\n\tclose(side: PaneSide): void {\n\t\tconst keep = this.pane(this.other(side));\n\t\tif (!keep) return;\n\t\tthis.zoom = null;\n\t\tthis.focus = 'a';\n\t\tnavigate(singleUrl(keep, fleetStore.servers(), selfName()));\n\t}\n\n\tswap(): void {\n\t\tif (!this.a || !this.b) return;\n\t\tthis.focus = this.other(this.focus);\n\t\tif (this.zoom) this.zoom = this.other(this.zoom);\n\t\tnavigate(splitUrl(this.b, this.a));\n\t}\n\n\ttoggleZoom(side: PaneSide): void {\n\t\tthis.zoom = this.zoom === side ? null : side;\n\t\tthis.focus = side;\n\t}\n\n\tsetRatio(ratio: number): void {\n\t\tthis.ratio = Math.min(0.8, Math.max(0.2, ratio));\n\t\tratioStore.save(this.ratio);\n\t}\n\n\t/** For the sidebar's A/B tags and titles. */\n\tlabel(ref: PaneRef): string {\n\t\treturn formatRef(ref);\n\t}\n}\n\nexport const splitStore = new SplitStore();\n","<script lang=\"ts\">\n\timport { onMount } from 'svelte';\n\timport { goto } from '$app/navigation';\n\timport { page } from '$app/stores';\n\timport {\n\t\tsessionStore,\n\t\tgroupSessions,\n\t\tgetSessionDisplayName,\n\t\twantsHuman,\n\t\tpostVisit,\n\t\ttype Session\n\t} from '$lib/stores/sessions.svelte';\n\timport {\n\t\tapiBase,\n\t\tblockedReason,\n\t\tfleetStore,\n\t\tisSettled,\n\t\tliveCount,\n\t\tmachineKey,\n\t\tofflineReason,\n\t\treachable,\n\t\tselfName,\n\t\tsetSettled,\n\t\ttype Machine\n\t} from '$lib/stores/fleet.svelte';\n\timport { localRef, parseSessionPath, pastPath, sessionPath } from '$lib/session-route';\n\timport SessionRow, { type RowMenuItem } from '$lib/components/SessionRow.svelte';\n\timport DiffBadge from '$lib/components/DiffBadge.svelte';\n\timport { PANES } from '$lib/side-panel/panes';\n\timport SubagentRow from '$lib/components/SubagentRow.svelte';\n\timport { agentView, childSummary, type AgentView } from '$shared/subagents.js';\n\timport { clock } from '$lib/stores/clock.svelte';\n\timport { draftsStore } from '$lib/stores/drafts.svelte';\n\timport { attachmentsStore } from '$lib/stores/attachments.svelte';\n\timport { AGENTS, AGENT_IDS } from '$shared/agents.js';\n\timport type { SessionAgent } from '$shared/db/index.js';\n\timport { NO_FOLDER, panesByRoot, projectRoots, rootOf, type PlainPane } from '$shared/fleet-places.js';\n\timport * as AlertDialog from '$lib/components/ui/alert-dialog';\n\timport { Button } from '$lib/components/ui/button';\n\timport * as Dialog from '$lib/components/ui/dialog';\n\timport * as Popover from '$lib/components/ui/popover';\n\timport * as ContextMenu from '$lib/components/ui/context-menu';\n\timport { browser } from '$app/environment';\n\timport { longPress } from '$lib/actions/longPress';\n\timport MachineFilter from './MachineFilter.svelte';\n\timport RenameSessionDialog from './RenameSessionDialog.svelte';\n\timport FolderPicker, { type PickerFolder } from './FolderPicker.svelte';\n\timport NeedsYou from './NeedsYou.svelte';\n\timport type { InboxTicket } from '$shared/types/ws-messages.js';\n\timport { STORAGE_KEYS } from '$lib/constants';\n\timport { createPersisted } from '$lib/stores/persisted';\n\timport { fleetPrefsStore } from '$lib/stores/fleet-prefs.svelte';\n\timport { RAIL_ORDER } from '$shared/fleet-prefs.js';\n\timport { pastByRoot, pastLabel, SETTLED_SHOWN, type PastSession } from '$shared/past-session.js';\n\timport { resumePast } from '$lib/past-resume';\n\timport { formatAgo } from '$lib/format';\n\timport { guessReport, isHomeDir, mergeProjects, projectHue, projectInitials, type FleetProject } from '$shared/fleet-projects.js';\n\timport { machineMarks, matchesQuery, moveTile, railOrder, type MachineMark } from '$shared/fleet-rail.js';\n\timport { indicatorStateOf, mostUrgent } from '$shared/session-state.js';\n\timport ProjectTile from './ProjectTile.svelte';\n\timport ProjectRail, { type RailTile } from './ProjectRail.svelte';\n\timport QuickSwitch, { type SwitchItem } from './QuickSwitch.svelte';\n\timport { quickSwitch } from '$lib/stores/quick-switch.svelte';\n\timport { drawer, DRAWER_MEDIA_QUERY } from '$lib/stores/drawer.svelte';\n\n\timport { sidebarActionsStore, type ChordAction } from '$lib/stores/sidebarActions.svelte';\n\timport { splitStore } from '$lib/stores/split.svelte';\n\timport { formatRef, type PaneRef } from '$lib/split-refs';\n\n\t/**\n\t * Subagents opened from this browser. A failed one keeps its row until it\n\t * has been looked at; the newest few hundred are plenty to remember.\n\t */\n\tconst openedStore = createPersisted<string[]>('claude-mux-opened-agents', []);\n\tlet opened = $state<Set<string>>(new Set());\n\tonMount(() => {\n\t\topened = new Set(openedStore.load());\n\t});\n\t/** A row with no subagents gets this instead of reading the clock every tick. */\n\tconst NO_AGENTS: AgentView = { rows: [], running: 0, folded: 0 };\n\tfunction agentsOf(s: Session): AgentView {\n\t\treturn s.subagents?.length ? agentView(s.subagents, clock.now, opened) : NO_AGENTS;\n\t}\n\tfunction markOpened(agentId: string) {\n\t\tif (opened.has(agentId)) return;\n\t\topened = new Set([...opened, agentId].slice(-300));\n\t\topenedStore.save([...opened]);\n\t}\n\n\tinterface Props {\n\t\tonSessionSelect?: () => void;\n\t\tcompact?: boolean;\n\t}\n\n\tlet { onSessionSelect, compact = false }: Props = $props();\n\n\t// ── dialogs ────────────────────────────────────────────────────────────\n\tlet showFolderBrowser = $state(false);\n\tlet folderPicker = $state<FolderPicker | null>(null);\n\tlet alertOpen = $state(false);\n\tlet alertTitle = $state('');\n\tlet alertMessage = $state('');\n\tlet alertOnConfirm = $state<() => void>(() => {});\n\tlet renameId = $state<string | null>(null);\n\tlet menuOpen = $state(false);\n\tlet query = $state('');\n\t/** The project whose menu is open, by key; null when none is. */\n\tlet projectMenu = $state<string | null>(null);\n\n\t/**\n\t * What the list beside the rail shows: 'active' (everything wanting a\n\t * person, working or just finished), or one project by key. A page lands\n\t * on Active.\n\t */\n\tlet selected = $state<string>('active');\n\n\tfunction showConfirm(title: string, message: string, onConfirm: () => void) {\n\t\talertTitle = title;\n\t\talertMessage = message;\n\t\talertOnConfirm = onConfirm;\n\t\talertOpen = true;\n\t}\n\n\t/**\n\t * Which machine a new session should be made on, and where. `card` is the\n\t * project it was opened from, so the dialog can also take it off the list:\n\t * on a phone there is no hover to reveal a chip's close button.\n\t */\n\tlet agentPicker = $state<{ machine: Machine; cwd: string; card?: Card } | null>(null);\n\n\tfunction pickAgent(agent: SessionAgent) {\n\t\tconst target = agentPicker;\n\t\tagentPicker = null;\n\t\tif (target) void newSessionInProject(target.machine, target.cwd, agent);\n\t}\n\n\tfunction removeFromPicker() {\n\t\tconst target = agentPicker;\n\t\tagentPicker = null;\n\t\t// Only where the dialog was opened: the project stays on its other machines.\n\t\tif (target?.card) {\n\t\t\tcloseProject(target.card, target.card.places.filter((p) => p.machine === target.machine && p.root === target.cwd));\n\t\t}\n\t}\n\n\t// ── the model: one card per project, across machines ────────────────────\n\n\t/** A live session in a project card, with where it sits under the root. */\n\tinterface Row {\n\t\tsession: Session;\n\t\t/** `web/` when the session runs below the project root; null at the root. */\n\t\trel: string | null;\n\t\torchestrator: boolean;\n\t\t/** A maestro worker, drawn under the session that runs its daemon. */\n\t\tworker?: boolean;\n\t\t/** On that session's row: how many workers sit under it. */\n\t\tworkers?: number;\n\t\t/** On the last of those workers: its master, whose own subagents follow the workers. */\n\t\ttrailing?: Session;\n\t}\n\n\t/** Where one machine holds a project, and what runs there. */\n\tinterface Place {\n\t\t/** Its machine and root, unique across the fleet; the key its rows are drawn under. */\n\t\tkey: string;\n\t\tmachine: Machine;\n\t\troot: string;\n\t\t/** How it is told from the project's other places: its machine, and its folder when that machine holds two. */\n\t\tlabel: string;\n\t\trows: Row[];\n\t\t/** Its live sessions, from which Active picks its own rows. */\n\t\tlive: Session[];\n\t\tdead: Session[];\n\t\tpanes: PlainPane[];\n\t\t/** Live sessions settled by hand, drawn in Settled instead. */\n\t\tsettled: Session[];\n\t\t/** Its past sessions, newest first. */\n\t\tpast: PastSession[];\n\t}\n\n\t/** One project (`src/fleet-projects.ts`): the same codebase on every machine that holds it. */\n\tinterface Card {\n\t\tkey: string;\n\t\tname: string;\n\t\tinitials: string;\n\t\thue: number;\n\t\t/** Its icon's URL, through the relay when another machine holds it; null draws the initials. */\n\t\ticon: string | null;\n\t\t/** Amber when a session in it wants a person, green when one works or just finished. */\n\t\tbadge: 'wants' | 'working' | null;\n\t\t/** Nothing running there, closed sessions included. */\n\t\tquiet: boolean;\n\t\t/** The visible machines that hold it, in the fleet's order. */\n\t\tplaces: Place[];\n\t\t/** The places whose machine answers, where a session can start. */\n\t\treachable: Place[];\n\t\t/** Whether it is held in more than one place, so each place says which. */\n\t\tspans: boolean;\n\t\t/** Its live sessions, orchestrators not counted. */\n\t\tlive: number;\n\t\t/** Each machine and root that holds it, one per line, for a tooltip. */\n\t\twhere: string;\n\t\t/** Its past sessions from every place it is held, newest first. */\n\t\tpast: { place: Place; past: PastSession }[];\n\t}\n\n\t/**\n\t * The session the page shows, as a ref: no host for this machine's, even\n\t * when its route names it, so it compares equal to the row that opens it.\n\t */\n\tconst current = $derived.by((): PaneRef | null => {\n\t\tconst ref = parseSessionPath($page.url.pathname)?.ref;\n\t\treturn ref ? localRef(ref, fleetStore.servers(), selfName()) : null;\n\t});\n\n\t/** Whether a machine's session is the one on the page. */\n\tfunction isCurrent(machine: Machine, tmuxTarget: string | null): boolean {\n\t\tif (!current || !tmuxTarget || current.target !== tmuxTarget) return false;\n\t\treturn machine.local\n\t\t\t? current.host === null\n\t\t\t: current.host?.toLowerCase() === machine.server.hostname.toLowerCase();\n\t}\n\n\t/** A machine's project roots (`projectRoots()`): every folder its sessions and plain panes run in has one. */\n\tfunction rootsOf(machine: Machine): string[] {\n\t\treturn projectRoots(machine.projects, [...machine.sessions.map((s) => s.cwd), ...machine.panes.map((p) => p.cwd)]);\n\t}\n\n\t/**\n\t * Where under its project a session runs, short enough to read: the\n\t * worktree directory name is scaffolding, and what distinguishes one\n\t * worktree from the next is what comes after it.\n\t */\n\tfunction relPath(cwd: string, root: string): string | null {\n\t\tif (cwd === root) return null;\n\t\treturn cwd.slice(root.length + 1).replace(/^\\.worktrees?\\//, '');\n\t}\n\n\t/**\n\t * A session nobody named is called after its tmux target, which says\n\t * nothing; when it runs in a subdirectory, that subdirectory is the one\n\t * thing that tells it apart, so it becomes the title.\n\t */\n\tfunction rowTitle(row: Row): string {\n\t\tconst s = row.session;\n\t\tif (!s.issue && !s.display_name && row.rel && !row.orchestrator) return row.rel;\n\t\treturn getSessionDisplayName(s);\n\t}\n\n\t/**\n\t * The chip under a row: what hangs off it (\"1 worker · 2 agents\"), else\n\t * the path under a named session; a title made of the path needs none.\n\t */\n\tfunction rowWhere(row: Row, agents: AgentView): string | null {\n\t\tif (row.orchestrator) return 'orch';\n\t\tconst children = childSummary(row.workers ?? 0, agents);\n\t\tif (children) return children;\n\t\treturn !row.worker && row.session.display_name && row.rel ? row.rel : null;\n\t}\n\n\tfunction agentHref(machine: Machine, target: string, agentId: string): string {\n\t\treturn sessionPath(refOf(machine, target), `/agent/${encodeURIComponent(agentId)}`);\n\t}\n\n\t/** The tmux session a pane belongs to: `main` of `main:2.0`. */\n\tfunction tmuxSessionOf(s: Session): string | null {\n\t\treturn s.tmux_target?.split(':')[0] ?? null;\n\t}\n\n\t/**\n\t * The maestro daemon opens each worker as a window of the tmux session the\n\t * master runs in, so a worker's master is the one non-worker session there.\n\t * Workers move up under it; one whose master is gone stays where it was.\n\t */\n\tfunction nestWorkers(rows: Row[]): Row[] {\n\t\tconst workersOf = new Map<Row, Row[]>();\n\t\tconst placed = new Set<Row>();\n\t\tfor (const row of rows) {\n\t\t\tif (row.session.maestro_role !== 'worker') continue;\n\t\t\tconst home = tmuxSessionOf(row.session);\n\t\t\tconst master = rows.find(\n\t\t\t\t(r) => r !== row && !r.orchestrator && r.session.maestro_role !== 'worker' && tmuxSessionOf(r.session) === home\n\t\t\t);\n\t\t\tif (!master) continue;\n\t\t\trow.worker = true;\n\t\t\tworkersOf.set(master, [...(workersOf.get(master) ?? []), row]);\n\t\t\tplaced.add(row);\n\t\t}\n\t\tif (placed.size === 0) return rows;\n\t\tconst out: Row[] = [];\n\t\tfor (const row of rows) {\n\t\t\tif (placed.has(row)) continue;\n\t\t\tconst workers = workersOf.get(row);\n\t\t\tout.push(workers ? { ...row, workers: workers.length } : row);\n\t\t\tif (workers) {\n\t\t\t\tworkers.sort((a, b) => (a.session.maestro_issue ?? 0) - (b.session.maestro_issue ?? 0));\n\t\t\t\tout.push(...workers.slice(0, -1), { ...workers.at(-1)!, trailing: row.session });\n\t\t\t}\n\t\t}\n\t\treturn out;\n\t}\n\n\tfunction rowsFor(sessions: Session[], root: string): Row[] {\n\t\tconst rows: Row[] = [];\n\t\tfor (const item of groupSessions(sessions)) {\n\t\t\tif (item.type === 'pair') {\n\t\t\t\trows.push({ session: item.main, rel: relPath(item.main.cwd, root), orchestrator: false });\n\t\t\t\trows.push({ session: item.orchestrator, rel: null, orchestrator: true });\n\t\t\t} else {\n\t\t\t\trows.push({ session: item.session, rel: relPath(item.session.cwd, root), orchestrator: false });\n\t\t\t}\n\t\t}\n\t\treturn nestWorkers(rows);\n\t}\n\n\t/** What a session asks of the eye: a person (amber), or a look at its work (green), or nothing. */\n\tfunction attention(s: Session): 'wants' | 'working' | null {\n\t\tif (wantsHuman(s)) return 'wants';\n\t\treturn s.state === 'busy' || indicatorStateOf(s) === 'done' ? 'working' : null;\n\t}\n\n\t/** Whether a session is one Active shows: it wants a person, works, just finished, or is open. */\n\tfunction isActive(machine: Machine, s: Session): boolean {\n\t\treturn attention(s) !== null || isCurrent(machine, s.tmux_target);\n\t}\n\n\t/** A machine's sessions and panes, put under its project roots (`rootsOf()`). */\n\tfunction placesOf(machine: Machine, roots: string[]): Map<string, Place> {\n\t\tconst byRoot = new Map<string, { live: Session[]; dead: Session[]; settled: Session[] }>();\n\t\tfor (const root of roots) byRoot.set(root, { live: [], dead: [], settled: [] });\n\t\tfor (const s of machine.sessions) {\n\t\t\tconst root = rootOf(s.cwd, roots);\n\t\t\tif (root === null) continue;\n\t\t\tconst bucket = byRoot.get(root)!;\n\t\t\t(s.pane_alive === false ? bucket.dead : isSettled(machine, s.id) ? bucket.settled : bucket.live).push(s);\n\t\t}\n\t\tconst past = pastByRoot(machine.past, roots, new Set(machine.sessions.filter((s) => s.pane_alive !== false).map((s) => s.id)));\n\t\tconst panes = panesByRoot(machine.panes, roots);\n\n\t\tconst places = new Map<string, Place>();\n\t\tfor (const [root, bucket] of byRoot) {\n\t\t\tplaces.set(root, {\n\t\t\t\tkey: placeKey(machine, root),\n\t\t\t\tmachine,\n\t\t\t\troot,\n\t\t\t\tlabel: machineLabel(machine),\n\t\t\t\trows: rowsFor(bucket.live, root),\n\t\t\t\tlive: bucket.live,\n\t\t\t\tdead: bucket.dead,\n\t\t\t\tpanes: panes.get(root) ?? [],\n\t\t\t\tsettled: bucket.settled,\n\t\t\t\tpast: past.get(root) ?? []\n\t\t\t});\n\t\t}\n\t\treturn places;\n\t}\n\n\t/** A machine's name, as a place under a project says it. */\n\tfunction machineLabel(machine: Machine): string {\n\t\treturn machine.server.hostname || 'this machine';\n\t}\n\n\tfunction placeKey(machine: Machine, root: string): string {\n\t\treturn `${machineKey(machine)}\\0${root}`;\n\t}\n\n\t// ── Settled ──────────────────────────────────────────────────────────────\n\n\t/**\n\t * Settle a live session: it moves to Settled on every link, and its machine\n\t * ends it when Claude Code sits idle at its prompt (`settleCloses()`);\n\t * anything else keeps running there.\n\t */\n\tfunction settle(machine: Machine, id: string) {\n\t\tsetSettled(machine, id, true);\n\t\tvoid fetch(`${apiBase(machine)}/api/sessions/${encodeURIComponent(id)}/settle`, { method: 'POST' }).catch(() => {});\n\t}\n\n\t/** Which projects' Settled sections are open; each starts folded. */\n\tlet settledOpen = $state<Set<string>>(new Set());\n\t/** Which projects show every past session rather than the first ten. */\n\tlet settledAll = $state<Set<string>>(new Set());\n\tfunction toggleIn(set: Set<string>, key: string): Set<string> {\n\t\tconst next = new Set(set);\n\t\tif (!next.delete(key)) next.add(key);\n\t\treturn next;\n\t}\n\n\t/** The live session being dragged, so a drop on Settled or back on the list knows which. */\n\tlet dragged = $state<{ machine: Machine; session: Session } | null>(null);\n\t/** Where a dragged row would land: a project's Settled header, or its live list. */\n\tlet dropOn = $state<'settled' | 'live' | null>(null);\n\n\t/** Whether the dragged row can land there: a live one on Settled, a settled one back on the list. */\n\tfunction canDrop(to: 'settled' | 'live'): boolean {\n\t\treturn !!dragged && isSettled(dragged.machine, dragged.session.id) === (to === 'live');\n\t}\n\tfunction dragOver(e: DragEvent, to: 'settled' | 'live') {\n\t\tif (!canDrop(to)) return;\n\t\te.preventDefault();\n\t\tdropOn = to;\n\t}\n\tfunction drop(e: DragEvent, to: 'settled' | 'live') {\n\t\tconst d = dragged;\n\t\tconst ok = canDrop(to);\n\t\tdropOn = null;\n\t\tif (!d || !ok) return;\n\t\te.preventDefault();\n\t\tif (to === 'settled') settle(d.machine, d.session.id);\n\t\telse setSettled(d.machine, d.session.id, false);\n\t}\n\n\tfunction pastHref(machine: Machine, p: PastSession): string {\n\t\treturn pastPath(machine.local ? null : machine.server.hostname, p.id);\n\t}\n\n\t/** Open a past session's page, where its transcript is read before anything restarts. */\n\tfunction openPast(machine: Machine, p: PastSession) {\n\t\tgoto(pastHref(machine, p));\n\t\tonSessionSelect?.();\n\t}\n\n\t/**\n\t * Resume a past session from its row's menu: on its own machine, in its\n\t * folder, or in the project's root when that folder is gone and the person\n\t * agrees. A session running already is opened instead.\n\t */\n\tasync function resume(machine: Machine, p: PastSession, cwd?: string) {\n\t\tconst result = await resumePast(machine, apiBase(machine), p.id, cwd);\n\t\tif (result.kind === 'offer-root') {\n\t\t\tconst root = result.root;\n\t\t\tshowConfirm('Folder is gone', `${result.cwd} no longer exists. Resume “${pastLabel(p)}” in ${root}?`, () => void resume(machine, p, root));\n\t\t\treturn;\n\t\t}\n\t\tif (result.kind === 'error') {\n\t\t\talert(result.message);\n\t\t\treturn;\n\t\t}\n\t\tgoToSession(machine, result.tmuxTarget);\n\t}\n\n\t/** A project's icon, from the machine that has it. */\n\tfunction iconUrl(machine: Machine, root: string, token: string): string {\n\t\treturn `${apiBase(machine)}/api/projects/icon?root=${encodeURIComponent(root)}&v=${encodeURIComponent(token)}`;\n\t}\n\n\t/** Every machine's project roots, by machine (`rootsOf()`). */\n\tconst fleetRoots = $derived(new Map(fleetStore.machines.map((machine) => [machineKey(machine), rootsOf(machine)])));\n\n\t/** Every machine's sessions and panes under its roots (`placesOf()`), by machine. */\n\tconst fleetPlaces = $derived(\n\t\tnew Map(fleetStore.machines.map((machine) => [machineKey(machine), placesOf(machine, fleetRoots.get(machineKey(machine))!)]))\n\t);\n\n\t/** Every project in the fleet, whichever machines the drawer shows (`mergeProjects()`). */\n\tconst fleetProjects = $derived(\n\t\tmergeProjects(\n\t\t\tfleetStore.machines.map((machine) => {\n\t\t\t\tconst known = new Map(machine.projectReports.map((r) => [r.root, r]));\n\t\t\t\tconst id = machineKey(machine);\n\t\t\t\treturn { id, reports: fleetRoots.get(id)!.map((root) => known.get(root) ?? guessReport(root)) };\n\t\t\t})\n\t\t)\n\t);\n\n\t/**\n\t * A project's name and tile where it sits at these roots: `~` for a home\n\t * directory alone, \"no folder\" for sessions that said nowhere. The icon\n\t * comes from the whole fleet, so filtering to one machine does not change\n\t * how a project looks.\n\t */\n\tfunction projectTile(project: FleetProject, roots: string[]): { name: string; initials: string; hue: number; icon: string | null } {\n\t\tconst home = roots.length === 1 && isHomeDir(roots[0]);\n\t\tconst name = home ? '~' : roots.every((r) => r === NO_FOLDER) ? 'no folder' : project.name;\n\t\tconst icon = project.icon;\n\t\tconst iconAt = icon && fleetStore.machines.find((m) => machineKey(m) === icon.machineId);\n\t\treturn {\n\t\t\tname,\n\t\t\tinitials: home ? '~' : projectInitials(name),\n\t\t\thue: projectHue(name),\n\t\t\ticon: iconAt ? iconUrl(iconAt, icon.root, icon.token) : null\n\t\t};\n\t}\n\n\t/**\n\t * Every project in the fleet, matched across machines, with the sessions\n\t * the visible machines run in it, in the rail's order.\n\t */\n\tconst cards = $derived.by((): Card[] => {\n\t\tconst visible = new Set(fleetStore.visible.map(machineKey));\n\n\t\tconst out: Card[] = [];\n\t\tfor (const project of fleetProjects) {\n\t\t\tconst shown = project.places\n\t\t\t\t.filter((p) => visible.has(p.machineId))\n\t\t\t\t.map((p) => fleetPlaces.get(p.machineId)!.get(p.root)!);\n\t\t\tif (shown.length === 0) continue;\n\t\t\t// Two checkouts of one repo on one machine are told apart by their folders.\n\t\t\tconst places = shown.map((p) =>\n\t\t\t\tshown.some((o) => o !== p && o.machine === p.machine) ? { ...p, label: `${p.label} · ${p.root.split('/').pop()}` } : p\n\t\t\t);\n\t\t\tconst tile = projectTile(project, places.map((p) => p.root));\n\t\t\t// An offline machine's dialogs may long be answered: they badge nothing.\n\t\t\t// A settled session still running can come to want a person; its tile says so.\n\t\t\tconst seen = places\n\t\t\t\t.filter((p) => p.machine.online)\n\t\t\t\t.flatMap((p) => [...p.rows.map((r) => attention(r.session)), ...p.settled.filter(wantsHuman).map(() => 'wants' as const)]);\n\t\t\tout.push({\n\t\t\t\tkey: project.key,\n\t\t\t\t...tile,\n\t\t\t\tbadge: seen.includes('wants') ? 'wants' : seen.includes('working') ? 'working' : null,\n\t\t\t\tquiet: places.every((p) => p.rows.length === 0 && p.panes.length === 0),\n\t\t\t\tplaces,\n\t\t\t\treachable: places.filter((p) => reachable(p.machine)),\n\t\t\t\tspans: new Set(places.map((p) => p.machine)).size > 1,\n\t\t\t\tlive: places.reduce((n, p) => n + p.rows.filter((r) => !r.orchestrator).length, 0),\n\t\t\t\twhere: places.map((p) => `${p.machine.server.hostname}:${p.root}`).join('\\n'),\n\t\t\t\tpast: places\n\t\t\t\t\t.flatMap((place) => place.past.map((past) => ({ place, past })))\n\t\t\t\t\t.sort((a, b) => b.past.lastActivity - a.past.lastActivity)\n\t\t\t});\n\t\t}\n\t\t// The rail is in the person's order (`railOrder()`): a project it has\n\t\t// never seen goes on top, by name among themselves, and nothing moves\n\t\t// because of what runs in it.\n\t\tout.sort((a, b) => a.name.localeCompare(b.name));\n\t\tconst byProject = new Map(out.map((c) => [c.key, c]));\n\t\treturn railOrder(fleetPrefsStore.get<unknown>(RAIL_ORDER, null), out.map((c) => c.key)).map((k) => byProject.get(k)!);\n\t});\n\n\t/** Drop a tile: the new order is saved for the whole fleet. */\n\tfunction moveProject(key: string, before: string | null) {\n\t\t// Placed among the tiles drawn, which the filter may have narrowed.\n\t\tconst next = moveTile(fleetPrefsStore.get<unknown>(RAIL_ORDER, null), tiles.map((t) => t.key), key, before);\n\t\tvoid fleetPrefsStore.set(RAIL_ORDER, next);\n\t}\n\n\t/** Show a project (or 'active') in the list, leaving the filter. */\n\tfunction openProject(key: string) {\n\t\tquery = '';\n\t\tselected = key;\n\t}\n\n\t/** The project the list shows; null on Active, or when the one chosen is gone. */\n\tconst chosen = $derived(selected === 'active' ? null : (cards.find((c) => c.key === selected) ?? null));\n\n\t/** Each machine's letter and colour, the same on every link. */\n\tconst marks = $derived(machineMarks(fleetStore.machines.map((m) => ({ id: machineKey(m), name: machineLabel(m) }))));\n\tfunction markOf(machine: Machine): MachineMark {\n\t\treturn marks.get(machineKey(machine)) ?? { letter: '?', color: '#a8a29e', name: machineLabel(machine) };\n\t}\n\n\t/** What the filter looks at in a session: its name, folder, machine and issue. */\n\tfunction rowMatches(machine: Machine, row: Row): boolean {\n\t\tconst s = row.session;\n\t\treturn matchesQuery(query, [rowTitle(row), getSessionDisplayName(s), s.cwd, machine.server.hostname, s.maestro_issue, s.issue?.title]);\n\t}\n\n\t/**\n\t * What the filter finds, by project in the rail's order: a project found by\n\t * its name or one of its machines with all its sessions, else the sessions\n\t * found in it.\n\t */\n\tconst found = $derived.by(() => {\n\t\tif (!query.trim()) return [];\n\t\tconst out: { card: Card; places: Place[] }[] = [];\n\t\tfor (const card of cards) {\n\t\t\tconst whole = matchesQuery(query, [card.name, ...card.places.map((p) => p.root)]);\n\t\t\tconst places = card.places\n\t\t\t\t.map((p) =>\n\t\t\t\t\twhole || matchesQuery(query, [p.machine.server.hostname]) ? p : { ...p, rows: p.rows.filter((r) => rowMatches(p.machine, r)), panes: [], dead: [] }\n\t\t\t\t)\n\t\t\t\t.filter((p) => whole || p.rows.length > 0 || p.panes.length > 0);\n\t\t\tif (places.length > 0) out.push({ card, places });\n\t\t}\n\t\treturn out;\n\t});\n\n\t/**\n\t * Active: by project, the sessions wanting a person, working, just\n\t * finished or open. Laid out only while Active is shown, and apart from\n\t * `cards`, so opening a session does not rebuild every project.\n\t */\n\tconst activeGroups = $derived(\n\t\tcards\n\t\t\t.map((card) => ({\n\t\t\t\tcard,\n\t\t\t\tplaces: card.places\n\t\t\t\t\t.map((p) => ({ ...p, rows: rowsFor(p.live.filter((s) => isActive(p.machine, s)), p.root) }))\n\t\t\t\t\t.filter((p) => p.rows.length > 0)\n\t\t\t}))\n\t\t\t.filter((g) => g.places.length > 0)\n\t);\n\tconst activeBadge = $derived(\n\t\tcards.some((c) => c.badge === 'wants') ? 'wants' : cards.some((c) => c.badge === 'working') ? 'working' : null\n\t);\n\n\tconst tiles: RailTile[] = $derived(query.trim() ? found.map((f) => f.card) : cards);\n\n\t/** The visible machines that are off, each said once above the list. */\n\tconst offlineMachines = $derived(fleetStore.visible.filter((m) => offlineReason(m, clock.now)));\n\t/** Machines that answer but run a claude-mux too old for this one: the relay refuses them. */\n\tconst tooOldMachines = $derived(\n\t\tfleetStore.visible.filter((m) => !offlineReason(m, clock.now) && blockedReason(m, clock.now))\n\t);\n\n\t/** Ctrl+K reaches every session and project on the machines the drawer shows. */\n\tconst switchItems = $derived.by((): SwitchItem[] => {\n\t\tconst items: SwitchItem[] = [];\n\t\tfor (const card of cards) {\n\t\t\tfor (const place of card.places) {\n\t\t\t\tfor (const row of place.rows) {\n\t\t\t\t\tconst s = row.session;\n\t\t\t\t\tif (row.orchestrator || !s.tmux_target) continue;\n\t\t\t\t\tconst target = s.tmux_target;\n\t\t\t\t\titems.push({\n\t\t\t\t\t\tid: `s:${place.key}:${s.id}`,\n\t\t\t\t\t\tkind: 'session',\n\t\t\t\t\t\ttitle: rowTitle(row),\n\t\t\t\t\t\tdetail: card.name,\n\t\t\t\t\t\tfields: [getSessionDisplayName(s), card.name, s.cwd, place.machine.server.hostname, s.maestro_issue],\n\t\t\t\t\t\tmachine: fleetStore.fleet ? markOf(place.machine) : null,\n\t\t\t\t\t\tstate: indicatorStateOf(s),\n\t\t\t\t\t\toff: !reachable(place.machine),\n\t\t\t\t\t\trun: () => openSession(place.machine, target)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (const card of cards) {\n\t\t\titems.push({\n\t\t\t\tid: `p:${card.key}`,\n\t\t\t\tkind: 'project',\n\t\t\t\ttitle: card.name,\n\t\t\t\tdetail: [...new Set(card.places.map((p) => p.machine.server.hostname))].join(', '),\n\t\t\t\tfields: [...card.places.map((p) => p.root), ...card.places.map((p) => p.machine.server.hostname)],\n\t\t\t\ttile: { initials: card.initials, hue: card.hue, icon: card.icon },\n\t\t\t\trun: () => {\n\t\t\t\t\topenProject(card.key);\n\t\t\t\t\t// On a phone the list is in the drawer, which may be shut.\n\t\t\t\t\tif (window.matchMedia(DRAWER_MEDIA_QUERY).matches) drawer.open = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tfor (const card of cards) {\n\t\t\tfor (const { place, past } of card.past) {\n\t\t\t\titems.push({\n\t\t\t\t\tid: `past:${place.key}:${past.id}`,\n\t\t\t\t\tkind: 'past',\n\t\t\t\t\ttitle: pastLabel(past),\n\t\t\t\t\t// A getter, so only the rows drawn read the clock, not the whole list each second.\n\t\t\t\t\tget detail() {\n\t\t\t\t\t\treturn `${card.name} · ${formatAgo(past.lastActivity, clock.now)}`;\n\t\t\t\t\t},\n\t\t\t\t\tfields: [past.prompt, past.title, past.cwd, past.branch, card.name, place.machine.server.hostname],\n\t\t\t\t\tmachine: fleetStore.fleet ? markOf(place.machine) : null,\n\t\t\t\t\toff: !reachable(place.machine),\n\t\t\t\t\trun: () => openPast(place.machine, past)\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t// Sessions wanting a person first, then those working, then the rest as the\n\t\t// rail has them; past sessions after everything live.\n\t\tconst rank = (it: SwitchItem) =>\n\t\t\tit.kind === 'past' ? 4 : it.kind === 'project' ? 3 : it.state === 'waiting' || it.state === 'permission' ? 0 : it.state === 'busy' || it.state === 'done' ? 1 : 2;\n\t\treturn items.sort((a, b) => rank(a) - rank(b));\n\t});\n\n\t/** Ctrl+K anywhere on the page opens the switcher. */\n\tfunction onKey(e: KeyboardEvent) {\n\t\tif (!(e.ctrlKey || e.metaKey) || e.altKey || e.shiftKey || e.key.toLowerCase() !== 'k') return;\n\t\te.preventDefault();\n\t\tquickSwitch.open = true;\n\t}\n\n\t/** Whether a session there wants a person; never on an offline machine, whose dialogs may be long answered. */\n\tfunction machineWants(machine: Machine): boolean {\n\t\tif (!machine.online) return false;\n\t\treturn machine.sessions.some((s) => s.pane_alive !== false && wantsHuman(s));\n\t}\n\n\t// ── labels ───────────────────────────────────────────────────────────────\n\tonMount(() => fleetStore.start());\n\n\tfunction detectPaneAgent(command: string): SessionAgent | null {\n\t\tconst cmd = command.toLowerCase();\n\t\tfor (const id of AGENT_IDS) if (cmd.includes(id)) return id;\n\t\treturn null;\n\t}\n\n\t// ── actions ──────────────────────────────────────────────────────────────\n\n\t/** How a split names this session: `target`, or `host@target` off this machine. */\n\tfunction refOf(machine: Machine, tmuxTarget: string): PaneRef {\n\t\treturn { host: machine.local ? null : machine.server.hostname, target: tmuxTarget };\n\t}\n\n\t/** The session the page shows now, as a pane ref, for starting a split beside it. */\n\tfunction currentRef(): PaneRef | null {\n\t\tif (splitStore.active) return splitStore.pane(splitStore.focus);\n\t\treturn current;\n\t}\n\n\t/**\n\t * Open a session. With a split on, it goes to the focused pane (⌥ for the\n\t * other); without one, ⌥ opens it beside the current session as a split,\n\t * and a plain click goes to the session, on this page whichever machine\n\t * it is on.\n\t */\n\tfunction openSession(machine: Machine, tmuxTarget: string, other = false) {\n\t\tconst ref = refOf(machine, tmuxTarget);\n\t\tif (splitStore.active) {\n\t\t\tsplitStore.openIn(other ? 'other' : 'focus', ref, currentRef());\n\t\t\tonSessionSelect?.();\n\t\t\treturn;\n\t\t}\n\t\tif (other && current) {\n\t\t\tsplitStore.splitWith(ref, currentRef());\n\t\t\tonSessionSelect?.();\n\t\t\treturn;\n\t\t}\n\t\tgoToSession(machine, tmuxTarget);\n\t}\n\n\t/** Go to a session's page: `/m/<host>/session/…` for another machine's. */\n\tfunction goToSession(machine: Machine, tmuxTarget: string, query = '') {\n\t\tgoto(`${sessionPath(refOf(machine, tmuxTarget))}${query}`);\n\t\tonSessionSelect?.();\n\t}\n\n\t/**\n\t * The row's right-click menu: open the session with one of its side\n\t * panel's panes. Left off during a split, which a page load would end.\n\t */\n\tfunction panelMenu(machine: Machine, tmuxTarget: string): RowMenuItem[] {\n\t\treturn PANES.map((pane) => ({\n\t\t\tlabel: `Open ${pane.label.toLowerCase()}`,\n\t\t\ticon: pane.icon,\n\t\t\trun: () => goToSession(machine, tmuxTarget, `?panel=${pane.kind}`)\n\t\t}));\n\t}\n\n\tfunction handleRowClick(e: MouseEvent, machine: Machine, session: Session) {\n\t\te.preventDefault();\n\t\tif (e.detail >= 2 && machine.local) {\n\t\t\trenameId = session.id;\n\t\t\treturn;\n\t\t}\n\t\tif (session.tmux_target) openSession(machine, session.tmux_target, e.altKey);\n\t}\n\n\t/** Which pane, if any, shows this session — for the row's A/B tag. */\n\tfunction paneTag(machine: Machine, tmuxTarget: string | null): 'A' | 'B' | null {\n\t\tif (!tmuxTarget || !splitStore.active) return null;\n\t\tconst side = splitStore.sideOf(refOf(machine, tmuxTarget));\n\t\treturn side === 'a' ? 'A' : side === 'b' ? 'B' : null;\n\t}\n\n\t/**\n\t * Rows drag only under a mouse. A finger's long press is the rename (and\n\t * the agent picker) here, and on the browsers that start a native drag\n\t * from the same hold the two fight over it — for a split no phone is wide\n\t * enough to show anyway (see MIN_PANE_PX).\n\t */\n\tconst canDrag = browser && window.matchMedia('(pointer: fine)').matches;\n\n\t/** A row leaves as a pane ref; the panes and the page's right edge catch it. */\n\tfunction dragStart(e: DragEvent, machine: Machine, tmuxTarget: string) {\n\t\tif (!e.dataTransfer) return;\n\t\te.dataTransfer.setData('text/claude-mux-session', formatRef(refOf(machine, tmuxTarget)));\n\t\te.dataTransfer.effectAllowed = 'link';\n\t\tsplitStore.dragging = true;\n\t}\n\tfunction dragEnd() {\n\t\tsplitStore.dragging = false;\n\t}\n\n\tfunction killSessionReq(machine: Machine, s: Session) {\n\t\treturn fetch(`${apiBase(machine)}/api/sessions/${encodeURIComponent(s.id)}/kill`, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\tbody: JSON.stringify({ pid: s.pid, tmux_target: s.tmux_target })\n\t\t});\n\t}\n\n\tfunction killSession(machine: Machine, s: Session) {\n\t\tshowConfirm('Kill session', `Kill “${getSessionDisplayName(s)}”?`, () => {\n\t\t\tvoid killSessionReq(machine, s);\n\t\t});\n\t}\n\n\tfunction sweepDead(machine: Machine, dead: Session[]) {\n\t\tfor (const s of dead) void killSessionReq(machine, s);\n\t}\n\n\t/**\n\t * Close a project in the given places (every place the list shows, by\n\t * default): its sessions killed, its folder taken off each machine's list.\n\t * An offline machine cannot be asked, so its place is left as it is.\n\t */\n\tfunction closeProject(card: Card, among: Place[] = card.places) {\n\t\tconst places = among.filter((p) => reachable(p.machine));\n\t\tif (places.length === 0) return;\n\t\tconst live = places.reduce((n, p) => n + p.rows.filter((r) => !r.orchestrator).length, 0);\n\t\tconst where = card.spans ? ` on ${places.map((p) => p.label).join(', ')}` : '';\n\t\tconst msg =\n\t\t\tlive > 0\n\t\t\t\t? `Kill ${live} session${live === 1 ? '' : 's'} in ${card.name}${where} and remove the project?`\n\t\t\t\t: `Remove ${card.name}${where} from the list? Its sessions are gone; the folder stays.`;\n\t\tshowConfirm('Close project', msg, async () => {\n\t\t\tawait Promise.all(\n\t\t\t\tplaces.map(async ({ machine, root, rows, dead }) => {\n\t\t\t\t\tconst sessions = [...rows.filter((r) => !r.orchestrator).map((r) => r.session), ...dead];\n\t\t\t\t\tawait Promise.all(sessions.map((s) => killSessionReq(machine, s)));\n\t\t\t\t\tif (machine.local) sessionStore.removeProject(root);\n\t\t\t\t\telse\n\t\t\t\t\t\tvoid fetch(`${apiBase(machine)}/api/projects`, {\n\t\t\t\t\t\t\tmethod: 'DELETE',\n\t\t\t\t\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\t\t\t\t\tbody: JSON.stringify({ cwd: root })\n\t\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t);\n\t\t});\n\t}\n\n\tasync function newSessionInProject(machine: Machine, cwd: string, agent: SessionAgent = 'claude', prompt?: string) {\n\t\tconst res = await fetch(`${apiBase(machine)}/api/projects/new-session`, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\tbody: JSON.stringify({ cwd, agent, prompt })\n\t\t});\n\t\tconst data = await res.json();\n\t\tif (!data.ok) {\n\t\t\talert(`Failed to create session: ${data.detail || data.error || 'Unknown error'}`);\n\t\t\treturn;\n\t\t}\n\t\tif (machine.local) {\n\t\t\tsessionStore.saveProject(cwd);\n\t\t\tif (data.record) sessionStore.optimisticAdd(data.record);\n\t\t}\n\t\tconst tmuxTarget = data.tmuxTarget || data.session + ':0.0';\n\t\t// Another machine's broadcast lists only Claude sessions, so a page here\n\t\t// could not show any other agent's pane: that one opens on its machine.\n\t\tif (!machine.local && agent !== 'claude') {\n\t\t\twindow.location.href = `${machine.server.url}/session/${encodeURIComponent(tmuxTarget)}`;\n\t\t\treturn;\n\t\t}\n\t\topenSession(machine, tmuxTarget);\n\t}\n\n\t/** The machine “Nova” acts on: the one filtered to, or this one. */\n\tconst actingMachine = $derived(\n\t\tfleetStore.visible.length === 1 ? fleetStore.visible[0] : fleetStore.machines[0]\n\t);\n\n\t/** Work a wayfinder ticket: a fresh session in its repo, handed the ticket. */\n\tfunction startTicket(machine: Machine, ticket: InboxTicket) {\n\t\tvoid newSessionInProject(machine, ticket.git_root, 'claude', `/mattpocock-skills:wayfinder ${ticket.url}`);\n\t}\n\n\tfunction newProject() {\n\t\tvoid folderPicker?.openAt('~', actingMachine);\n\t}\n\n\t/**\n\t * Every project root in the fleet, with what runs there, for the folder\n\t * picker's marks (`folderMarker()`). All machines, whichever the drawer\n\t * shows, since the picker browses any of them.\n\t */\n\tconst pickerFolders = $derived.by((): PickerFolder[] => {\n\t\t// Laid out only while the picker is open, not on every broadcast.\n\t\tif (!showFolderBrowser) return [];\n\t\tconst out: PickerFolder[] = [];\n\t\tfor (const project of fleetProjects) {\n\t\t\tfor (const { machineId, root } of project.places) {\n\t\t\t\tconst place = fleetPlaces.get(machineId)!.get(root)!;\n\t\t\t\tconst live = place.rows.filter((r) => !r.orchestrator).map((r) => r.session);\n\t\t\t\tconst { name, ...tile } = projectTile(project, [root]);\n\t\t\t\tout.push({\n\t\t\t\t\tmachineId,\n\t\t\t\t\troot,\n\t\t\t\t\tproject: project.key,\n\t\t\t\t\tname,\n\t\t\t\t\tlive: live.length,\n\t\t\t\t\t// A settled session can still come to want a person, as its tile says.\n\t\t\t\t\twants: [...live, ...place.settled].some(wantsHuman),\n\t\t\t\t\tmachine: place.machine,\n\t\t\t\t\tstate: mostUrgent(live.map(indicatorStateOf)),\n\t\t\t\t\tonly: live.length === 1 ? live[0].tmux_target : null,\n\t\t\t\t\ttile\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn out;\n\t});\n\n\t/**\n\t * \"Go to\" on an open folder in the picker: the session itself when it is\n\t * the only one there, else the project on the rail, with the machine\n\t * filter cleared when it hides the project.\n\t */\n\tfunction goToFolder(folder: PickerFolder) {\n\t\tif (folder.only) {\n\t\t\topenSession(folder.machine, folder.only);\n\t\t\treturn;\n\t\t}\n\t\tif (!cards.some((c) => c.key === folder.project)) fleetStore.select('all');\n\t\topenProject(folder.project);\n\t\tif (window.matchMedia(DRAWER_MEDIA_QUERY).matches) drawer.open = true;\n\t}\n\n\tasync function closeChrome() {\n\t\tawait fetch('/api/chrome', { method: 'DELETE' });\n\t}\n\n\tconst RESET_KEEP_KEYS = new Set<string>([STORAGE_KEYS.lastSession]);\n\n\tfunction resetLocalStorage() {\n\t\tshowConfirm(\n\t\t\t'Reset local data',\n\t\t\t'This clears preferences and cached data in this browser. Your projects stay on the server. The page will reload.',\n\t\t\t() => {\n\t\t\t\tfor (let i = localStorage.length - 1; i >= 0; i--) {\n\t\t\t\t\tconst key = localStorage.key(i);\n\t\t\t\t\tif (key && key.startsWith('claude-mux-') && !RESET_KEEP_KEYS.has(key)) {\n\t\t\t\t\t\tlocalStorage.removeItem(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twindow.location.reload();\n\t\t\t}\n\t\t);\n\t}\n\n\t/** The rare actions, behind the menu; the same list feeds the chord menu. */\n\tconst menuActions: ChordAction[] = $derived([\n\t\t{ label: 'Usage', icon: 'mdi:chart-line', run: () => void goto('/usage') },\n\t\t{ label: 'Close Chrome', icon: 'mdi:google-chrome', run: () => void closeChrome() },\n\t\t{ label: 'Refresh', icon: 'mdi:refresh', run: () => location.reload() },\n\t\t{\n\t\t\tlabel: sessionStore.paused ? 'Resume updates' : 'Pause updates',\n\t\t\ticon: sessionStore.paused ? 'mdi:play' : 'mdi:pause',\n\t\t\trun: () => sessionStore.togglePause(),\n\t\t\tvariant: sessionStore.paused ? 'destructive' : 'secondary'\n\t\t},\n\t\t// Only offered when the server says where it stands; an older one does not.\n\t\t...(sessionStore.settings\n\t\t\t? [\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: sessionStore.settings.autoRemoteControl\n\t\t\t\t\t\t\t? 'Remote Control on new sessions: on'\n\t\t\t\t\t\t\t: 'Remote Control on new sessions: off',\n\t\t\t\t\t\ticon: sessionStore.settings.autoRemoteControl\n\t\t\t\t\t\t\t? 'mdi:cellphone-link'\n\t\t\t\t\t\t\t: 'mdi:cellphone-link-off',\n\t\t\t\t\t\trun: () =>\n\t\t\t\t\t\t\tsessionStore.setSetting({\n\t\t\t\t\t\t\t\tautoRemoteControl: !sessionStore.settings?.autoRemoteControl\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t: []),\n\t\t{ label: 'Reset data', icon: 'mdi:database-refresh', run: () => resetLocalStorage(), danger: true }\n\t]);\n\n\t$effect(() => {\n\t\tsidebarActionsStore.set([\n\t\t\t...menuActions,\n\t\t\t{ label: 'New project', icon: 'mdi:plus', run: () => newProject() }\n\t\t]);\n\t});\n</script>\n\n{#snippet sessionRow(machine: Machine, row: Row, marked: boolean, offline: string | null)}\n\t{#if row.worker}\n\t\t<!-- A worker hangs off its master on a solid violet thread, and its own\n\t\t subagents ride inside that thread. -->\n\t\t<div class=\"thread worker\">{@render rowWithAgents(machine, row, marked, offline)}</div>\n\t\t<!-- A master's own subagents come after its workers, as in the design. -->\n\t\t{#if row.trailing}{@render agentThread(machine, row.trailing, agentsOf(row.trailing))}{/if}\n\t{:else}\n\t\t{@render rowWithAgents(machine, row, marked, offline)}\n\t{/if}\n{/snippet}\n\n{#snippet agentThread(machine: Machine, s: Session, agents: AgentView)}\n\t{#if agents.rows.length > 0 && s.tmux_target}\n\t\t<div class=\"thread agents\">\n\t\t\t{#each agents.rows as agent (agent.id)}\n\t\t\t\t{@const href = agentHref(machine, s.tmux_target, agent.id)}\n\t\t\t\t<SubagentRow\n\t\t\t\t\t{agent}\n\t\t\t\t\t{href}\n\t\t\t\t\tactive={$page.url.pathname === href}\n\t\t\t\t\tonclick={() => {\n\t\t\t\t\t\tmarkOpened(agent.id);\n\t\t\t\t\t\tonSessionSelect?.();\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t{/each}\n\t\t</div>\n\t{/if}\n{/snippet}\n\n{#snippet rowWithAgents(machine: Machine, row: Row, marked: boolean, offline: string | null)}\n\t{@const s = row.session}\n\t{@const agents = agentsOf(s)}\n\t{@const isActive = isCurrent(machine, s.tmux_target)}\n\t{@const draftKey = s.tmux_target && !isActive ? formatRef(refOf(machine, s.tmux_target)) : null}\n\t<SessionRow\n\t\tsession={s}\n\t\ttitle={rowTitle(row)}\n\t\twhere={rowWhere(row, agents)}\n\t\thref={sessionPath(refOf(machine, s.tmux_target ?? ''))}\n\t\thint={(machine.local ? 'Double-click or long-press to rename' : `On ${machine.server.hostname}`) + (canDrag ? ' · ⌥-click or drag to open side by side' : '')}\n\t\tactive={isActive}\n\t\ttag={paneTag(machine, s.tmux_target)}\n\t\torchestrator={row.orchestrator}\n\t\tworker={row.worker}\n\t\tdraft={draftKey ? draftsStore.preview(draftKey) : ''}\n\t\tstaged={draftKey ? attachmentsStore.count(draftKey) : 0}\n\t\tdraggable={canDrag && !!s.tmux_target}\n\t\tonkill={machine.local && !compact ? () => killSession(machine, s) : null}\n\t\tonmarkunread={isActive || paneTag(machine, s.tmux_target) ? null : () => postVisit(apiBase(machine), s.id, true)}\n\t\tonclick={(e) => handleRowClick(e, machine, s)}\n\t\tonlongpress={() => { if (machine.local) renameId = s.id; }}\n\t\tondragstart={(e) => {\n\t\t\tdragged = { machine, session: s };\n\t\t\tif (s.tmux_target) dragStart(e, machine, s.tmux_target);\n\t\t}}\n\t\tondragend={() => {\n\t\t\tdragged = null;\n\t\t\tdropOn = null;\n\t\t\tdragEnd();\n\t\t}}\n\t\tmenu={[\n\t\t\t...(s.tmux_target && !splitStore.active ? panelMenu(machine, s.tmux_target) : []),\n\t\t\tisSettled(machine, s.id)\n\t\t\t\t? { label: 'Un-settle', icon: 'mdi:tray-arrow-up', run: () => setSettled(machine, s.id, false) }\n\t\t\t\t: { label: 'Settle', icon: 'mdi:tray-arrow-down', run: () => settle(machine, s.id) }\n\t\t]}\n\t\tmachine={marked ? markOf(machine) : null}\n\t\t{offline}\n\t>\n\t\t{#snippet meta()}<DiffBadge changes={s.changes} />{/snippet}\n\t</SessionRow>\n\t{#if !row.workers}{@render agentThread(machine, s, agents)}{/if}\n{/snippet}\n\n{#snippet paneRow(machine: Machine, pane: PlainPane, marked: boolean, offline: string | null)}\n\t{@const isActive = isCurrent(machine, pane.target)}\n\t{@const detected = detectPaneAgent(pane.command || '')}\n\t{@const meta = detected ? AGENTS[detected] : null}\n\t{@const mark = marked ? markOf(machine) : null}\n\t<a\n\t\thref={sessionPath(refOf(machine, pane.target))}\n\t\tclass=\"row\"\n\t\tclass:cur={isActive}\n\t\ttitle={[pane.title, pane.cwd, machine.local ? null : `On ${machine.server.hostname}`].filter(Boolean).join(' · ')}\n\t\tdraggable={canDrag ? 'true' : 'false'}\n\t\tondragstart={(e) => dragStart(e, machine, pane.target)}\n\t\tondragend={dragEnd}\n\t\tonclick={(e) => { e.preventDefault(); openSession(machine, pane.target, e.altKey); }}\n\t>\n\t\t<span class=\"st\">\n\t\t\t<iconify-icon icon={meta?.icon ?? 'mdi:console-line'} style={meta ? `color:${meta.color}` : ''}></iconify-icon>\n\t\t</span>\n\t\t<span class=\"name mono\">{pane.target}</span>\n\t\t<span class=\"meta\">\n\t\t\t{#if mark}<span class=\"mach\" style=\"--m:{mark.color}\" title={mark.name}>{mark.letter}</span>{/if}\n\t\t\t<span class=\"when\">{offline ?? meta?.label ?? pane.command}</span>\n\t\t</span>\n\t\t<span class=\"ctx none\"></span>\n\t</a>\n{/snippet}\n\n{#snippet placeRows(place: Place, marked: boolean, extras: boolean)}\n\t{@const offline = blockedReason(place.machine, clock.now)}\n\t<!-- An offline machine's rows stay, dimmed and out of reach, until it answers\n\t again; so do those of one too old for this machine, until it is updated. -->\n\t<div class=\"place\" class:off={!!offline} inert={!!offline}>\n\t\t{#each place.rows as row (row.session.id)}\n\t\t\t{@render sessionRow(place.machine, row, marked, offline)}\n\t\t{/each}\n\t\t{#if extras}\n\t\t\t{#each place.panes as pane (pane.target)}\n\t\t\t\t{@render paneRow(place.machine, pane, marked, offline)}\n\t\t\t{/each}\n\t\t\t{#if place.dead.length > 0}\n\t\t\t\t<div class=\"dead\">\n\t\t\t\t\t<span class=\"n\">{place.dead.length}</span>\n\t\t\t\t\t{place.dead.length === 1 ? 'closed session' : 'closed sessions'}{#if marked} on {place.label}{/if}\n\t\t\t\t\t{#if place.machine.local}\n\t\t\t\t\t\t<button type=\"button\" class=\"sweep\" onclick={() => sweepDead(place.machine, place.dead)}>clear</button>\n\t\t\t\t\t{/if}\n\t\t\t\t</div>\n\t\t\t{/if}\n\t\t{/if}\n\t</div>\n{/snippet}\n\n{#snippet groupHead(card: Card)}\n\t<!-- A project's name over its sessions in Active and in what the filter\n\t found; it opens the project. -->\n\t<button type=\"button\" class=\"ghead\" title={card.where} onclick={() => openProject(card.key)}>\n\t\t<ProjectTile initials={card.initials} hue={card.hue} icon={card.icon} size={18} />\n\t\t<span class=\"gname\">{card.name}</span>\n\t</button>\n{/snippet}\n\n{#snippet offlineLines(machines: Machine[])}\n\t{#each machines.filter((m) => tooOldMachines.includes(m)) as machine (machine.server.id || machine.server.hostname)}\n\t\t{@const why = blockedReason(machine, clock.now)}\n\t\t<div class=\"offline\" role=\"status\">\n\t\t\t<iconify-icon icon=\"mdi:update\"></iconify-icon>\n\t\t\t<span class=\"why\" title={why}>{why}</span>\n\t\t\t<Button variant=\"outline\" size=\"sm\" class=\"try\" href=\"/machines\">Machines</Button>\n\t\t</div>\n\t{/each}\n\t{#each machines.filter((m) => offlineMachines.includes(m)) as machine (machine.server.hostname)}\n\t\t<div class=\"offline\" role=\"status\">\n\t\t\t<iconify-icon icon=\"mdi:lan-disconnect\"></iconify-icon>\n\t\t\t<span class=\"why\">{offlineReason(machine, clock.now)}</span>\n\t\t\t{#if machine.retryAt && machine.retryAt > clock.now}\n\t\t\t\t<span class=\"next\">retry in {Math.ceil((machine.retryAt - clock.now) / 1000)}s</span>\n\t\t\t{/if}\n\t\t\t<Button variant=\"outline\" size=\"sm\" class=\"try\" onclick={() => void fleetStore.retry(machine)}>Try now</Button>\n\t\t</div>\n\t{/each}\n{/snippet}\n\n{#snippet newSessions(card: Card)}\n\t<!-- One button per machine that holds the folder; a machine that does not\n\t answer says so instead. Right-click or hold for another agent. -->\n\t<div class=\"newrow\">\n\t\t{#each card.places.filter((p) => p.root !== NO_FOLDER) as place (place.key)}\n\t\t\t{@const off = blockedReason(place.machine, clock.now)}\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"newbtn\"\n\t\t\t\tdisabled={!!off}\n\t\t\t\ttitle={off ?? `${place.root} · right-click or hold for another agent`}\n\t\t\t\tonclick={() => void newSessionInProject(place.machine, place.root)}\n\t\t\t\toncontextmenu={(e) => { e.preventDefault(); agentPicker = { machine: place.machine, cwd: place.root, card }; }}\n\t\t\t\tuse:longPress={{ onTrigger: () => (agentPicker = { machine: place.machine, cwd: place.root, card }) }}\n\t\t\t>\n\t\t\t\t<iconify-icon icon=\"mdi:plus\"></iconify-icon>\n\t\t\t\tNew session\n\t\t\t\t{#if card.places.length > 1}\n\t\t\t\t\t<span class=\"on\">on</span>\n\t\t\t\t\t{#if card.spans}{@const m = markOf(place.machine)}<span class=\"mach\" style=\"--m:{m.color}\">{m.letter}</span>{/if}\n\t\t\t\t\t<span class=\"where\">{place.label}</span>\n\t\t\t\t{/if}\n\t\t\t</button>\n\t\t{/each}\n\t</div>\n{/snippet}\n\n{#snippet projectView(card: Card)}\n\t{@const closed = card.places.filter((p) => p.machine.local).reduce((n, p) => n + p.dead.length, 0)}\n\t<div class=\"rhead\">\n\t\t<ProjectTile initials={card.initials} hue={card.hue} icon={card.icon} size={30} />\n\t\t<div class=\"rtext\">\n\t\t\t<div class=\"rname\" title={card.where}>{card.name}</div>\n\t\t\t<div class=\"rsub\">\n\t\t\t\t{[card.live > 0 ? `${card.live} session${card.live === 1 ? '' : 's'}` : '', [...new Set(card.places.map((p) => machineLabel(p.machine)))].join(', ')].filter(Boolean).join(' · ')}\n\t\t\t</div>\n\t\t</div>\n\t\t<Popover.Root open={projectMenu === card.key} onOpenChange={(o) => (projectMenu = o ? card.key : null)}>\n\t\t\t<Popover.Trigger class=\"ghost\" title=\"Project actions\">\n\t\t\t\t<iconify-icon icon=\"mdi:dots-horizontal\"></iconify-icon>\n\t\t\t</Popover.Trigger>\n\t\t\t<Popover.Content class=\"menu pmenu\" align=\"end\" sideOffset={6}>\n\t\t\t\t<div class=\"qhead\">\n\t\t\t\t\t<b>{card.name}</b>\n\t\t\t\t\t{#each card.places as place (place.key)}\n\t\t\t\t\t\t<span class=\"qpath\">{place.root}{#if card.spans || !place.machine.local} · {place.machine.server.hostname}{/if}</span>\n\t\t\t\t\t{/each}\n\t\t\t\t</div>\n\t\t\t\t{#each card.reachable as place (place.key)}\n\t\t\t\t\t{#each AGENT_IDS.filter((id) => id !== 'claude') as id (id)}\n\t\t\t\t\t\t{@const meta = AGENTS[id]}\n\t\t\t\t\t\t<button type=\"button\" class=\"mitem\" onclick={() => { projectMenu = null; void newSessionInProject(place.machine, place.root, id); }}>\n\t\t\t\t\t\t\t<iconify-icon icon={meta.icon} style=\"color: {meta.color};\"></iconify-icon>New {meta.label} session{#if card.places.length > 1} on {place.label}{/if}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t{/each}\n\t\t\t\t{/each}\n\t\t\t\t<span class=\"msep\"></span>\n\t\t\t\t{#if closed > 0}\n\t\t\t\t\t<button type=\"button\" class=\"mitem\" onclick={() => { projectMenu = null; for (const p of card.places) if (p.machine.local) sweepDead(p.machine, p.dead); }}>\n\t\t\t\t\t\t<iconify-icon icon=\"mdi:broom\"></iconify-icon>Clear {closed} closed session{closed === 1 ? '' : 's'}\n\t\t\t\t\t</button>\n\t\t\t\t{/if}\n\t\t\t\t<button type=\"button\" class=\"mitem\" onclick={() => { projectMenu = null; void navigator.clipboard?.writeText(card.places[0].root); }}>\n\t\t\t\t\t<iconify-icon icon=\"mdi:content-copy\"></iconify-icon>Copy path\n\t\t\t\t</button>\n\t\t\t\t<button type=\"button\" class=\"mitem danger\" onclick={() => { projectMenu = null; closeProject(card); }}>\n\t\t\t\t\t<iconify-icon icon=\"mdi:close\"></iconify-icon>Close project\n\t\t\t\t</button>\n\t\t\t</Popover.Content>\n\t\t</Popover.Root>\n\t</div>\n\t{@render offlineLines([...new Set(card.places.map((p) => p.machine))])}\n\t<!-- A settled row dragged back here is un-settled. -->\n\t<div\n\t\tclass=\"livezone\"\n\t\tclass:drop={dropOn === 'live'}\n\t\trole=\"list\"\n\t\tondragover={(e) => dragOver(e, 'live')}\n\t\tondragleave={() => (dropOn = null)}\n\t\tondrop={(e) => drop(e, 'live')}\n\t>\n\t\t{#each card.places as place (place.key)}\n\t\t\t{@render placeRows(place, card.spans, true)}\n\t\t{/each}\n\t\t{#if card.quiet}<div class=\"nothing\">Nothing running here.</div>{/if}\n\t</div>\n\t{@render newSessions(card)}\n\t{@render settledSection(card)}\n{/snippet}\n\n{#snippet settledSection(card: Card)}\n\t{@const settledRows = card.places.flatMap((place) => place.settled.map((session) => ({ place, session })))}\n\t{@const past = card.past}\n\t{@const open = settledOpen.has(card.key)}\n\t{@const shown = settledAll.has(card.key) ? past : past.slice(0, SETTLED_SHOWN)}\n\t{#if settledRows.length + past.length > 0 || dragged}\n\t\t<section class=\"settled\" aria-label=\"Settled\">\n\t\t\t<!-- Drop a live row here to settle it. -->\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"shead\"\n\t\t\t\tclass:drop={dropOn === 'settled'}\n\t\t\t\taria-expanded={open}\n\t\t\t\tondragover={(e) => dragOver(e, 'settled')}\n\t\t\t\tondragleave={() => (dropOn = null)}\n\t\t\t\tondrop={(e) => drop(e, 'settled')}\n\t\t\t\tonclick={() => (settledOpen = toggleIn(settledOpen, card.key))}\n\t\t\t>\n\t\t\t\t<iconify-icon class=\"chev\" class:open icon=\"mdi:chevron-right\"></iconify-icon>\n\t\t\t\tSettled\n\t\t\t\t<span class=\"n\">{settledRows.length + past.length}</span>\n\t\t\t\t{#if dropOn === 'settled'}<span class=\"hint\">Drop to settle</span>{/if}\n\t\t\t</button>\n\t\t\t{#if open}\n\t\t\t\t{#each settledRows as { place, session } (session.id)}\n\t\t\t\t\t{@const offline = blockedReason(place.machine, clock.now)}\n\t\t\t\t\t<div class=\"place\" class:off={!!offline} inert={!!offline}>\n\t\t\t\t\t\t{@render rowWithAgents(place.machine, { session, rel: relPath(session.cwd, place.root), orchestrator: false }, card.spans, offline)}\n\t\t\t\t\t</div>\n\t\t\t\t{/each}\n\t\t\t\t{#each shown as { place, past: p } (`${place.key}\\0${p.id}`)}\n\t\t\t\t\t{@const off = !reachable(place.machine)}\n\t\t\t\t\t{@const m = markOf(place.machine)}\n\t\t\t\t\t<ContextMenu.Root>\n\t\t\t\t\t\t<ContextMenu.Trigger>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t\thref={pastHref(place.machine, p)}\n\t\t\t\t\t\t\t\t\tclass=\"row past\"\n\t\t\t\t\t\t\t\t\tclass:off\n\t\t\t\t\t\t\t\t\ttitle={off ? `${pastLabel(p)} · resume when ${machineLabel(place.machine)} is back` : `${pastLabel(p)}${p.branch ? ` · ${p.branch}` : ''}`}\n\t\t\t\t\t\t\t\t\tonclick={(e) => {\n\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\topenPast(place.machine, p);\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span class=\"st\"><iconify-icon icon=\"mdi:history\"></iconify-icon></span>\n\t\t\t\t\t\t\t\t\t<span class=\"name\">{pastLabel(p)}</span>\n\t\t\t\t\t\t\t\t\t<span class=\"meta\">\n\t\t\t\t\t\t\t\t\t\t{#if card.spans || !place.machine.local}<span class=\"mach\" style=\"--m:{m.color}\" title={m.name}>{m.letter}</span>{/if}\n\t\t\t\t\t\t\t\t\t\t<span class=\"when\">{formatAgo(p.lastActivity, clock.now)}</span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t<span class=\"ctx none\"></span>\n\t\t\t\t\t\t\t\t\t{#if off}<span class=\"later\">resume when it's back</span>{/if}\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</ContextMenu.Trigger>\n\t\t\t\t\t\t<ContextMenu.Content>\n\t\t\t\t\t\t\t<ContextMenu.Item onSelect={() => openPast(place.machine, p)}>\n\t\t\t\t\t\t\t\t<iconify-icon icon=\"mdi:text-box-outline\"></iconify-icon>Read\n\t\t\t\t\t\t\t</ContextMenu.Item>\n\t\t\t\t\t\t\t<ContextMenu.Item disabled={off} onSelect={() => void resume(place.machine, p)}>\n\t\t\t\t\t\t\t\t<iconify-icon icon=\"mdi:play-outline\"></iconify-icon>Resume\n\t\t\t\t\t\t\t</ContextMenu.Item>\n\t\t\t\t\t\t</ContextMenu.Content>\n\t\t\t\t\t</ContextMenu.Root>\n\t\t\t\t{/each}\n\t\t\t\t{#if past.length > shown.length}\n\t\t\t\t\t<button type=\"button\" class=\"more\" onclick={() => (settledAll = toggleIn(settledAll, card.key))}>\n\t\t\t\t\t\t{past.length - shown.length} more\n\t\t\t\t\t</button>\n\t\t\t\t{/if}\n\t\t\t{/if}\n\t\t</section>\n\t{/if}\n{/snippet}\n\n<svelte:window onkeydown={onKey} />\n\n<div class=\"panel\" class:compact>\n\t<header class=\"head\">\n\t\t<MachineFilter live={liveCount} wants={machineWants} />\n\t\t<Popover.Root bind:open={menuOpen}>\n\t\t\t<Popover.Trigger class=\"ghost\" title=\"More\">\n\t\t\t\t<iconify-icon icon=\"mdi:dots-horizontal\"></iconify-icon>\n\t\t\t</Popover.Trigger>\n\t\t\t<Popover.Content class=\"menu\" align=\"end\" sideOffset={6}>\n\t\t\t\t{#each menuActions as action (action.label)}\n\t\t\t\t\t<button type=\"button\" class=\"mitem\" class:danger={action.danger} onclick={() => { menuOpen = false; action.run(); }}>\n\t\t\t\t\t\t<iconify-icon icon={action.icon}></iconify-icon>{action.label}\n\t\t\t\t\t</button>\n\t\t\t\t{/each}\n\t\t\t</Popover.Content>\n\t\t</Popover.Root>\n\t\t<button type=\"button\" class=\"new\" title=\"Open a folder as a project\" onclick={newProject}>\n\t\t\t<iconify-icon icon=\"mdi:plus\"></iconify-icon>New\n\t\t</button>\n\t</header>\n\t<label class=\"search\">\n\t\t<iconify-icon icon=\"mdi:magnify\"></iconify-icon>\n\t\t<input\n\t\t\tbind:value={query}\n\t\t\ttype=\"search\"\n\t\t\tplaceholder=\"Filter sessions, projects, machines, #issues\"\n\t\t\tautocomplete=\"off\"\n\t\t\tonkeydown={(e) => { if (e.key === 'Escape') query = ''; }}\n\t\t/>\n\t\t<button type=\"button\" class=\"kbd\" title=\"Jump to a session or project\" onclick={() => (quickSwitch.open = true)}>Ctrl K</button>\n\t</label>\n\n\t<div class=\"railwrap\">\n\t\t<ProjectRail\n\t\t\t{tiles}\n\t\t\tselected={query.trim() ? '' : chosen ? chosen.key : 'active'}\n\t\t\t{activeBadge}\n\t\t\tonselect={openProject}\n\t\t\tonmove={moveProject}\n\t\t/>\n\t\t<div class=\"railmain\">\n\t\t\t{#if query.trim()}\n\t\t\t\t{#if found.length === 0}\n\t\t\t\t\t<div class=\"empty\">Nothing matches “{query}”.</div>\n\t\t\t\t{/if}\n\t\t\t\t{#each found as { card, places } (card.key)}\n\t\t\t\t\t<section class=\"group\">\n\t\t\t\t\t\t{@render groupHead(card)}\n\t\t\t\t\t\t{#each places as place (place.key)}\n\t\t\t\t\t\t\t{@render placeRows(place, card.spans, false)}\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</section>\n\t\t\t\t{/each}\n\t\t\t{:else if chosen}\n\t\t\t\t{@render projectView(chosen)}\n\t\t\t{:else}\n\t\t\t\t<div class=\"rhead\">\n\t\t\t\t\t<span class=\"bolt\"><iconify-icon icon=\"mdi:lightning-bolt-outline\"></iconify-icon></span>\n\t\t\t\t\t<div class=\"rtext\">\n\t\t\t\t\t\t<div class=\"rname\">Active</div>\n\t\t\t\t\t\t<div class=\"rsub\">wants you, working, just finished</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<NeedsYou machines={fleetStore.visible} fleet={fleetStore.fleet} onOpen={(m, t) => openSession(m, t)} onStart={startTicket} />\n\t\t\t\t{@render offlineLines(fleetStore.visible)}\n\t\t\t\t{#each activeGroups as { card, places } (card.key)}\n\t\t\t\t\t<section class=\"group\">\n\t\t\t\t\t\t{@render groupHead(card)}\n\t\t\t\t\t\t{#each places as place (place.key)}\n\t\t\t\t\t\t\t{@render placeRows(place, card.spans, false)}\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</section>\n\t\t\t\t{/each}\n\t\t\t\t{#if activeGroups.length === 0}\n\t\t\t\t\t<div class=\"empty\">\n\t\t\t\t\t\t{#if cards.length === 0}\n\t\t\t\t\t\t\tNo projects yet. <button type=\"button\" class=\"link\" onclick={newProject}>Open a folder</button> to start.\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\tNothing is going on. Pick a project on the rail.\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</div>\n\t\t\t\t{/if}\n\t\t\t{/if}\n\t\t</div>\n\t</div>\n</div>\n\n<QuickSwitch bind:open={quickSwitch.open} items={switchItems} />\n\n<FolderPicker\n\tbind:this={folderPicker}\n\tbind:open={showFolderBrowser}\n\tmachines={fleetStore.machines}\n\tfolders={pickerFolders}\n\tmarkOf={(id) => marks.get(id) ?? null}\n\tonpick={(machine, cwd) => void newSessionInProject(machine, cwd)}\n\tongoto={goToFolder}\n/>\n\n<Dialog.Root open={agentPicker !== null} onOpenChange={(o) => { if (!o) agentPicker = null; }}>\n\t<Dialog.Content class=\"max-w-sm\">\n\t\t<Dialog.Header>\n\t\t\t<Dialog.Title>New session</Dialog.Title>\n\t\t\t<Dialog.Description>\n\t\t\t\t{#if agentPicker}In {agentPicker.cwd}{#if !agentPicker.machine.local} on {agentPicker.machine.server.hostname}{/if}.{/if}\n\t\t\t\tChoose which agent to launch.\n\t\t\t</Dialog.Description>\n\t\t</Dialog.Header>\n\t\t<div class=\"agent-choices\">\n\t\t\t{#each AGENT_IDS as id (id)}\n\t\t\t\t{@const meta = AGENTS[id]}\n\t\t\t\t<button class=\"agent-choice\" onclick={() => pickAgent(id)}>\n\t\t\t\t\t<iconify-icon icon={meta.icon} style=\"color: {meta.color};\"></iconify-icon>\n\t\t\t\t\t<div class=\"agent-choice-text\">\n\t\t\t\t\t\t<div class=\"agent-choice-name\">{meta.label}</div>\n\t\t\t\t\t\t<div class=\"agent-choice-cmd\">{meta.command}</div>\n\t\t\t\t\t</div>\n\t\t\t\t</button>\n\t\t\t{/each}\n\t\t</div>\n\t\t{#if agentPicker?.card}\n\t\t\t<button type=\"button\" class=\"agent-remove\" onclick={removeFromPicker}>\n\t\t\t\t<iconify-icon icon=\"mdi:close\"></iconify-icon>\n\t\t\t\tRemove {agentPicker.card.name} from the list\n\t\t\t</button>\n\t\t{/if}\n\t</Dialog.Content>\n</Dialog.Root>\n\n<RenameSessionDialog sessionId={renameId} onClose={() => (renameId = null)} />\n\n<AlertDialog.Root bind:open={alertOpen}>\n\t<AlertDialog.Content>\n\t\t<AlertDialog.Header>\n\t\t\t<AlertDialog.Title>{alertTitle}</AlertDialog.Title>\n\t\t\t<AlertDialog.Description>{alertMessage}</AlertDialog.Description>\n\t\t</AlertDialog.Header>\n\t\t<AlertDialog.Footer>\n\t\t\t<AlertDialog.Cancel>Cancel</AlertDialog.Cancel>\n\t\t\t<AlertDialog.Action onclick={() => { alertOnConfirm(); alertOpen = false; }} class=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\">Confirm</AlertDialog.Action>\n\t\t</AlertDialog.Footer>\n\t</AlertDialog.Content>\n</AlertDialog.Root>\n\n<style>\n\t/* The composer's surface, borrowed. Low weight: no card boxes, quiet marks. */\n\t.panel {\n\t\t--surface: #151516;\n\t\t--surface-2: #1b1b1d;\n\t\t--surface-3: #212124;\n\t\t--line: #2a2a2c;\n\t\t--line-soft: #1f1f21;\n\t\t--text: #e7e5e4;\n\t\t--muted: #a8a29e;\n\t\t--dim: #6b6764;\n\t\t--faint: #3a3836;\n\t\t--amber: #f59e0b;\n\t\t--amber-soft: #3a2d0d;\n\t\t--green: #34d399;\n\t\t--green-deep: #15803d;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 8px;\n\t\tflex: 1;\n\t\tmin-height: 0;\n\t\theight: 100%;\n\t\tpadding-top: 10px;\n\t\tfont-size: 13px;\n\t\tcolor: var(--text);\n\t}\n\n\t/* ── header ─────────────────────────────────────────────── */\n\t.head {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 6px;\n\t\tpadding: 0 10px;\n\t}\n\t.head :global(.machine-filter-trigger) {\n\t\tflex: 1;\n\t}\n\t.panel :global(.ghost) {\n\t\twidth: 30px;\n\t\theight: 30px;\n\t\tflex: none;\n\t\tdisplay: inline-grid;\n\t\tplace-items: center;\n\t\tborder: 0;\n\t\tborder-radius: 9px;\n\t\tbackground: transparent;\n\t\tcolor: var(--muted);\n\t\tfont-size: 17px;\n\t\tcursor: pointer;\n\t}\n\t.panel :global(.ghost:hover),\n\t.panel :global(.ghost[data-state='open']) {\n\t\tbackground: var(--surface-3);\n\t\tcolor: var(--text);\n\t}\n\t.new {\n\t\theight: 30px;\n\t\tflex: none;\n\t\tpadding: 0 11px 0 8px;\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tgap: 4px;\n\t\tborder: 0;\n\t\tborder-radius: 9px;\n\t\tbackground: var(--green-deep);\n\t\tcolor: #ecfdf5;\n\t\tfont-size: 12.5px;\n\t\tfont-weight: 500;\n\t\tcursor: pointer;\n\t}\n\t.new:hover {\n\t\tbackground: #166534;\n\t}\n\t.new iconify-icon {\n\t\tfont-size: 16px;\n\t}\n\t.search {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 6px;\n\t\theight: 32px;\n\t\tmargin: 0 10px;\n\t\tpadding: 0 4px 0 9px;\n\t\tborder: 1px solid var(--line);\n\t\tborder-radius: 10px;\n\t\tbackground: var(--surface);\n\t\tcursor: text;\n\t}\n\t.search:focus-within {\n\t\tborder-color: #3f3f46;\n\t}\n\t.search iconify-icon {\n\t\tfont-size: 15px;\n\t\tcolor: var(--dim);\n\t}\n\t.search input {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t\tborder: 0;\n\t\tbackground: transparent;\n\t\tcolor: var(--text);\n\t\tfont: inherit;\n\t\tfont-size: 12.5px;\n\t\toutline: none;\n\t}\n\t.search input::placeholder {\n\t\tcolor: var(--dim);\n\t}\n\t.kbd {\n\t\tflex: none;\n\t\tborder: 1px solid var(--line);\n\t\tborder-radius: 6px;\n\t\tbackground: var(--surface-2);\n\t\tcolor: var(--dim);\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 10.5px;\n\t\tpadding: 1px 6px;\n\t\tcursor: pointer;\n\t}\n\t.kbd:hover {\n\t\tcolor: var(--muted);\n\t}\n\t@media (hover: none) {\n\t\t.kbd {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\t:global(.menu) {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 2px;\n\t\twidth: 200px;\n\t\tpadding: 6px;\n\t\tbackground: #151516;\n\t\tborder: 1px solid #2a2a2c;\n\t\tborder-radius: 12px;\n\t}\n\t:global(.menu.pmenu) {\n\t\twidth: 250px;\n\t}\n\t.mitem {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 9px;\n\t\tmin-height: 32px;\n\t\tpadding: 0 10px;\n\t\tborder: 0;\n\t\tborder-radius: 8px;\n\t\tbackground: transparent;\n\t\tcolor: #d6d3d1;\n\t\tfont-size: 13px;\n\t\ttext-align: left;\n\t\tcursor: pointer;\n\t}\n\t.mitem:hover {\n\t\tbackground: #212124;\n\t\tcolor: #f5f5f4;\n\t}\n\t.mitem.danger {\n\t\tcolor: #fca5a5;\n\t}\n\t.mitem iconify-icon {\n\t\tfont-size: 16px;\n\t\tcolor: #a8a29e;\n\t}\n\t.qhead {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 1px;\n\t\tpadding: 4px 10px 6px;\n\t\tmin-width: 0;\n\t}\n\t.qhead b {\n\t\tfont-size: 13px;\n\t\tcolor: #f5f5f4;\n\t}\n\t.qpath {\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 10.5px;\n\t\tcolor: #a8a29e;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t}\n\t.msep {\n\t\theight: 1px;\n\t\tmargin: 3px 4px;\n\t\tbackground: #2a2a2c;\n\t}\n\n\t/* ── the rail and the list beside it ────────────────────── */\n\t.railwrap {\n\t\tflex: 1;\n\t\tmin-height: 0;\n\t\tdisplay: grid;\n\t\tgrid-template-columns: 52px minmax(0, 1fr);\n\t\tborder-top: 1px solid var(--line-soft);\n\t}\n\t.railmain {\n\t\tmin-width: 0;\n\t\toverflow-y: auto;\n\t\toverflow-x: hidden;\n\t\toverscroll-behavior: contain;\n\t\tpadding: 8px 8px 16px;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 2px;\n\t}\n\t/* A finger needs more room at the foot. */\n\t@media (pointer: coarse) {\n\t\t.railmain {\n\t\t\tpadding-bottom: 24px;\n\t\t}\n\t}\n\t.rhead {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 10px;\n\t\tpadding: 2px 2px 8px;\n\t}\n\t.rtext {\n\t\tflex: 1;\n\t\tmin-width: 0;\n\t}\n\t.rname {\n\t\tfont-size: 14.5px;\n\t\tfont-weight: 650;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t}\n\t.rsub {\n\t\tfont-size: 11.5px;\n\t\tcolor: var(--dim);\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t}\n\t.bolt {\n\t\tdisplay: grid;\n\t\tplace-items: center;\n\t\twidth: 30px;\n\t\theight: 30px;\n\t\tflex: none;\n\t\tborder-radius: 9px;\n\t\tbackground: var(--surface-3);\n\t\tbox-shadow: inset 0 0 0 1px var(--line);\n\t}\n\t.group {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 1px;\n\t\tpadding-bottom: 6px;\n\t}\n\t.ghead {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 7px;\n\t\tpadding: 6px 6px 3px;\n\t\tborder: 0;\n\t\tbackground: none;\n\t\tcolor: inherit;\n\t\tfont: inherit;\n\t\ttext-align: left;\n\t\tcursor: pointer;\n\t\tborder-radius: 8px;\n\t}\n\t.gname {\n\t\tmin-width: 0;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t\tfont-size: 12.5px;\n\t\tfont-weight: 600;\n\t\tcolor: var(--muted);\n\t}\n\t.ghead:hover .gname {\n\t\tcolor: var(--text);\n\t}\n\t.nothing {\n\t\tpadding: 4px 6px 6px;\n\t\tfont-size: 12px;\n\t\tcolor: var(--dim);\n\t}\n\t/* One machine's share of a project; an offline machine's is inert and dimmed. */\n\t.place {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 1px;\n\t}\n\t.place.off {\n\t\topacity: 0.45;\n\t\tfilter: grayscale(0.6);\n\t}\n\t.newrow {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 3px;\n\t\tpadding-top: 6px;\n\t}\n\t.newbtn {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 6px;\n\t\tmin-height: 32px;\n\t\tpadding: 0 9px;\n\t\tborder: 1px dashed var(--line);\n\t\tborder-radius: 9px;\n\t\tbackground: none;\n\t\tcolor: var(--muted);\n\t\tfont: inherit;\n\t\tfont-size: 12.5px;\n\t\ttext-align: left;\n\t\tcursor: pointer;\n\t}\n\t.newbtn:hover:not(:disabled) {\n\t\tcolor: var(--text);\n\t\tborder-color: var(--dim);\n\t\tbackground: var(--surface-2);\n\t}\n\t.newbtn:disabled {\n\t\topacity: 0.45;\n\t\tcursor: not-allowed;\n\t}\n\t.newbtn iconify-icon {\n\t\tfont-size: 15px;\n\t}\n\t.newbtn .on {\n\t\tcolor: var(--dim);\n\t}\n\t.newbtn .where {\n\t\tmin-width: 0;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t}\n\t@media (hover: none) {\n\t\t.newbtn {\n\t\t\tmin-height: 44px;\n\t\t}\n\t}\n\t.mach {\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 10px;\n\t\tfont-weight: 600;\n\t\tcolor: var(--m);\n\t}\n\t.offline {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 6px;\n\t\tpadding: 2px 4px 6px;\n\t\tfont-size: 11.5px;\n\t\tcolor: var(--muted);\n\t}\n\t.offline iconify-icon {\n\t\tfont-size: 14px;\n\t\tcolor: var(--dim);\n\t}\n\t.offline .why {\n\t\tmin-width: 0;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t}\n\t.offline .next {\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 10.5px;\n\t\tcolor: var(--dim);\n\t\twhite-space: nowrap;\n\t}\n\t.offline :global(.try) {\n\t\tmargin-left: auto;\n\t}\n\t.empty {\n\t\tpadding: 18px 6px;\n\t\tcolor: var(--dim);\n\t\tfont-size: 12.5px;\n\t}\n\t.link {\n\t\tborder: 0;\n\t\tbackground: none;\n\t\tcolor: var(--muted);\n\t\ttext-decoration: underline dotted;\n\t\tfont: inherit;\n\t\tcursor: pointer;\n\t}\n\n\t/* ── threads: what a session spawned hangs under it ── */\n\t.thread {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 1px;\n\t\tmargin-left: 13px;\n\t\tpadding-left: 9px;\n\t}\n\t.thread.worker {\n\t\tborder-left: 1px solid color-mix(in oklab, #4c3a8a 80%, transparent);\n\t}\n\t/* Workers side by side share one unbroken thread. */\n\t.thread.worker + .thread.worker {\n\t\tmargin-top: -1px;\n\t\tpadding-top: 1px;\n\t}\n\t.thread.agents {\n\t\tgap: 0;\n\t\tborder-left: 1px dashed #155e63;\n\t\tmargin-top: 1px;\n\t}\n\t.thread.worker .thread.agents {\n\t\tmargin-left: 9px;\n\t}\n\n\t/* ── tmux pane row (session rows draw themselves: SessionRow) ── */\n\t.row {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: 16px 1fr auto 14px;\n\t\tcolumn-gap: 8px;\n\t\talign-items: center;\n\t\tpadding: 5px 7px;\n\t\tborder-radius: 9px;\n\t\tcolor: var(--text);\n\t\ttext-decoration: none;\n\t\tposition: relative;\n\t}\n\t.row:hover {\n\t\tbackground: var(--surface-2);\n\t}\n\t.row.cur {\n\t\tbackground: var(--surface-3);\n\t}\n\t.row .st {\n\t\tdisplay: grid;\n\t\tplace-items: center;\n\t\twidth: 16px;\n\t}\n\t.row .st iconify-icon {\n\t\tfont-size: 13px;\n\t\tcolor: var(--dim);\n\t}\n\t.row .name {\n\t\tmin-width: 0;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t}\n\t.row .name.mono {\n\t\tfont-family: var(--font-mono);\n\t\tcolor: var(--muted);\n\t\tfont-size: 12px;\n\t}\n\t.row .meta {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 6px;\n\t}\n\t.row .when {\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 11px;\n\t\tcolor: var(--dim);\n\t\twhite-space: nowrap;\n\t}\n\t.ctx {\n\t\twidth: 14px;\n\t\theight: 14px;\n\t}\n\n\t/* Settled: settled live sessions and past ones, folded at the list's foot */\n\t.livezone {\n\t\tborder-radius: 10px;\n\t\toutline: 1px dashed transparent;\n\t\toutline-offset: 2px;\n\t}\n\t.livezone.drop {\n\t\toutline-color: var(--muted);\n\t}\n\t.settled {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 1px;\n\t\tmargin-top: 12px;\n\t\tpadding-top: 6px;\n\t\tborder-top: 1px solid var(--line);\n\t}\n\t.shead {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 4px;\n\t\tmin-height: 30px;\n\t\tpadding: 0 7px 0 3px;\n\t\tborder: 1px dashed transparent;\n\t\tborder-radius: 9px;\n\t\tbackground: none;\n\t\tcolor: var(--muted);\n\t\tfont: inherit;\n\t\tfont-size: 12px;\n\t\ttext-align: left;\n\t\tcursor: pointer;\n\t}\n\t.shead:hover {\n\t\tcolor: var(--text);\n\t}\n\t.shead.drop {\n\t\tborder-color: var(--muted);\n\t\tbackground: var(--surface-2);\n\t}\n\t.shead .n {\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 11px;\n\t\tcolor: var(--dim);\n\t}\n\t.shead .hint {\n\t\tmargin-left: auto;\n\t\tfont-size: 11px;\n\t\tcolor: var(--dim);\n\t}\n\t.chev {\n\t\tfont-size: 16px;\n\t\ttransition: transform 120ms ease;\n\t}\n\t.chev.open {\n\t\ttransform: rotate(90deg);\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.chev {\n\t\t\ttransition: none;\n\t\t}\n\t}\n\t.row.past .name {\n\t\tcolor: var(--muted);\n\t\tfont-size: 12.5px;\n\t}\n\t.row.past:hover .name {\n\t\tcolor: var(--text);\n\t}\n\t.row.past.off {\n\t\topacity: 0.5;\n\t}\n\t.row.past .later {\n\t\tgrid-column: 2 / -1;\n\t\tfont-size: 11px;\n\t\tcolor: var(--dim);\n\t}\n\t.row .mach {\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 10px;\n\t\tfont-weight: 600;\n\t\tcolor: var(--m);\n\t}\n\t.more {\n\t\talign-self: flex-start;\n\t\tmargin: 2px 0 0 30px;\n\t\tborder: 0;\n\t\tbackground: none;\n\t\tcolor: var(--dim);\n\t\tfont: inherit;\n\t\tfont-size: 11.5px;\n\t\ttext-decoration: underline dotted;\n\t\tcursor: pointer;\n\t}\n\t.more:hover {\n\t\tcolor: var(--muted);\n\t}\n\n\t/* closed sessions, folded */\n\t.dead {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 6px;\n\t\tpadding: 5px 7px 2px;\n\t\tfont-size: 11.5px;\n\t\tcolor: var(--dim);\n\t}\n\t.dead .n {\n\t\tfont-family: var(--font-mono);\n\t}\n\t.sweep {\n\t\tmargin-left: auto;\n\t\tborder: 0;\n\t\tbackground: none;\n\t\tcolor: var(--dim);\n\t\tfont: inherit;\n\t\ttext-decoration: underline dotted;\n\t\tcursor: pointer;\n\t}\n\t.sweep:hover {\n\t\tcolor: var(--muted);\n\t}\n\n\t/* agent picker */\n\t.agent-remove {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tgap: 6px;\n\t\twidth: 100%;\n\t\tmin-height: 40px;\n\t\tmargin-top: 4px;\n\t\tborder: 1px solid #2a2a2c;\n\t\tborder-radius: 10px;\n\t\tbackground: transparent;\n\t\tcolor: #fca5a5;\n\t\tfont-size: 13px;\n\t\tcursor: pointer;\n\t}\n\t.agent-remove:hover {\n\t\tbackground: #2a1515;\n\t}\n\t.agent-choices {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 6px;\n\t}\n\t.agent-choice {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 12px;\n\t\tpadding: 10px 12px;\n\t\tborder: 1px solid #2a2a2c;\n\t\tborder-radius: 10px;\n\t\tbackground: #151516;\n\t\tcolor: #e7e5e4;\n\t\ttext-align: left;\n\t\tcursor: pointer;\n\t}\n\t.agent-choice:hover {\n\t\tbackground: #212124;\n\t}\n\t.agent-choice iconify-icon {\n\t\tfont-size: 22px;\n\t}\n\t.agent-choice-name {\n\t\tfont-weight: 500;\n\t}\n\t.agent-choice-cmd {\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 11px;\n\t\tcolor: #6b6764;\n\t}\n</style>\n"],"names":["extract","value","defaultValue","isFunction","gotten","useDebounce","callback","wait","context","$.state","wait$","$.derived","debounced","args","$.get","resolve","reject","promise","res","rej","$.set","ctx","error","IsMounted","#isMounted","$.user_effect","untrack","avatarAttrs","createBitsAttrs","AvatarRootContext","Context","AvatarRootState","opts","DOMContext","attachRef","src","crossorigin","referrerPolicy","imageTimerId","image","#props","AvatarImageState","root","watch","crossOrigin","AvatarFallbackState","#style","uid","$.props_id","delayMs","$.prop","$$props","loadingStatus","id","createId","ref","restProps","$.rest_props","rest_excludes","rootState","boxWith","v","mergedProps","mergeProps","div","$.attribute_effect","referrerpolicy","imageState","img","fallbackState","span","findNextSibling","el","selector","sibling","findPreviousSibling","cssEscape","length","index","codeUnit","result","firstCodeUnit","COMMAND_VALUE_ATTR","commandAttrs","COMMAND_GROUP_SELECTOR","COMMAND_GROUP_ITEMS_SELECTOR","COMMAND_GROUP_HEADING_SELECTOR","COMMAND_ITEM_SELECTOR","COMMAND_VALID_ITEM_SELECTOR","CommandRootContext","CommandListContext","CommandGroupContainerContext","defaultState","CommandRootState","#updateScheduled","#isInitialMount","#isDestroyed","#key","#snapshot","$.snapshot","#afterTick","fn","afterTick","#scheduleUpdate","currentState","key","preventScroll","#filterItems","#sort","#scrollSelectedIntoView","defaults","onDestroyEffect","#score","keywords","filter","computeCommandScore","#selectFirstItem","#scrollInitialValue","scores","groups","items","max","item","score","listInsertionElement","sorted","a","b","valueA","valueB","scoresA","group","itemToAppend","sortedGroups","element","shouldPreventScroll","#selectFirstItemIfValueMissing","itemCount","rank","groupId","itemId","currItem","node","columns","grid","currentGroup","column","row","i","itemGroup","#getSelectedItem","selectedNode","grandparent","isFirstRowOfGroup","#itemIsFirstRowOfGroup","firstChildOfParent","getFirstNonCommentChild","closestGroupHeader","r","c","change","selected","newSelected","selectedItem","selectedValue","#last","#next","e","#down","#nextRowColumnOffset","#getColumn","newItem","skipRows","#findNextNonDisabledItem","#calculateOffset","start","end","expectedColumnIndex","itemIsDisabled","ogIndex","#up","#previousRowColumnOffset","#findNextNonDisabledItemDesc","#prev","isVim","kbd.n","kbd.j","kbd.l","kbd.ARROW_DOWN","kbd.ARROW_RIGHT","kbd.p","kbd.k","kbd.h","kbd.ARROW_UP","kbd.ARROW_LEFT","kbd.HOME","kbd.END","kbd.ENTER","CommandEmptyState","#shouldRender","#isInitialRender","$.user_pre_effect","CommandGroupContainerState","CommandGroupHeadingState","CommandGroupItemsState","CommandInputState","#selectedItemId","afterSleep","boolToStr","CommandItemState","#group","#trueForceMount","currentScore","#isSelected","kw","#onSelect","#select","_","boolToEmptyStrOrUndef","CommandListState","CommandLabelState","srOnlyStyles","labelState","label","Label","$$anchor","CommandLabel","onValueChange","noop","onStateChange","loop","shouldFilter","vimBindings","disablePointerSelection","disableInitialScroll","updateSelectedToIndex","updateSelectedByGroup","updateSelectedByItem","getValidItems","node_1","root_1","node_3","forceMount","emptyState","$$render","consequent_1","groupState","headingState","groupItemsState","div_1","node_2","$.child","$.reset","$.append","autofocus","inputState","input","disabled","onSelect","itemState","node_4","listState","$.key","SCORE_CONTINUE_MATCH","SCORE_SPACE_WORD_JUMP","SCORE_NON_SPACE_WORD_JUMP","SCORE_CHARACTER_JUMP","SCORE_TRANSPOSITION","PENALTY_SKIPPED","PENALTY_CASE_MISMATCH","PENALTY_NOT_COMPLETE","IS_GAP_REGEXP","COUNT_GAPS_REGEXP","IS_SPACE_REGEXP","COUNT_SPACE_REGEXP","computeCommandScoreInner","string","abbreviation","lowerString","lowerAbbreviation","stringIndex","abbreviationIndex","memoizedResults","memoizeKey","abbreviationChar","highScore","transposedScore","wordBreaks","spaceBreaks","formatInput","command","search","commandKeywords","sharedObserver","observedNodes","getSharedObserver","entries","entry","callbacks","observeResize","current","SvelteResizeObserver","#node","#onResize","onResize","rAF","_node","unobserve","Presence","#afterAnimations","#isPresent","#hasMounted","#transitionStatus","#transitionFrame","AnimationsComplete","#clearTransitionFrame","isOpen","#_isPresent","presenceState","$.snippet","$.noop","consequent","clamp","n","min","StateMachine","#machine","initialState","machine","simpleBox","#reducer","event","scrollAreaAttrs","ScrollAreaRootContext","ScrollAreaScrollbarContext","ScrollAreaScrollbarVisibleContext","ScrollAreaScrollbarAxisContext","ScrollAreaScrollbarSharedContext","ScrollAreaRootState","ScrollAreaViewportState","#contentId","useId","#contentRef","#contentProps","ScrollAreaScrollbarState","isHorizontal","ScrollAreaScrollbarHoverState","scrollbar","scrollAreaNode","hideDelay","hideTimer","handlePointerEnter","handlePointerLeave","unsubListeners","executeCallbacks","on","ScrollAreaScrollbarScrollState","debounceScrollend","_state","scrollHideDelay","viewportNode","scrollDirection","prevScrollPos","scrollPos","ScrollAreaScrollbarAutoState","handleResize","isOverflowX","isOverflowY","ScrollAreaScrollbarVisibleState","#sizes","#thumbRatio","getThumbRatio","#hasThumb","sizes","pointerPos","dir","getScrollPositionFromPointer","transformStyle","getThumbOffsetFromScroll","ScrollAreaScrollbarXState","#computedStyle","scrollbarVis","maxScrollPos","isScrollingWithinScrollbarBounds","toInt","#thumbSize","getThumbSize","ScrollAreaScrollbarYState","ScrollAreaScrollbarSharedState","#maxScrollPos","scrollbarState","scrollbarNode","handleWheel","x","y","#cleanupPointerState","target","ScrollAreaThumbImplState","#root","#removeUnlinkedScrollListener","#debounceScrollEnd","handleScroll","listener","addUnlinkedScrollListener","thumb","thumbRect","ScrollAreaCornerImplState","#width","#height","#hasSize","height","width","viewportSize","contentSize","ratio","scrollbarPadding","thumbSize","pointerOffset","thumbSizePx","thumbCenter","offset","thumbOffsetFromEnd","minPointerPos","maxPointerPos","scrollRange","linearScale","maxThumbPos","scrollClampRange","scrollWithoutMomentum","output","handler","prevPosition","win","getWindow","position","isHorizontalScroll","isVerticalScroll","type","viewportState","mergedContentProps","scrollbarSharedState","isMounted","scrollbarXState","ScrollAreaScrollbarShared","scrollbarYState","scrollbarVisibleState","ScrollAreaScrollbarX","ScrollAreaScrollbarY","alternate","scrollbarAutoState","presence","ScrollAreaScrollbarVisible","PresenceLayer","scrollbarScrollState","$0","$.spread_props","scrollbarHoverState","open","ScrollAreaScrollbarHover","ScrollAreaScrollbarScroll","ScrollAreaScrollbarAuto","consequent_2","consequent_3","thumbState","$$arg0","present","ScrollAreaThumbImpl","$$value","cornerState","scrollAreaState","hasBothScrollbarsVisible","hasCorner","ScrollAreaCornerImpl","tabsAttrs","TabsRootContext","TabsRootState","SvelteMap","RovingFocusGroup","triggerId","TabsListState","#isDisabled","TabsTriggerState","#tabIndex","#isActive","#ariaControls","#activate","kbd.SPACE","getTabDataState","boolToTrueOrUndef","condition","orientation","activationMode","triggerState","button","orchestrator","worker","draft","staged","onkill","onmarkunread","menu","offline","shown","indicatorStateOf","wants","wantsHuman","quiet","recedes","running","showSub","canMarkUnread","isUnread","clock","touched","elapsed","formatSpinnerElapsed","ContextMenu_Root","child","props","root_19","event_handler_1","span_1","SessionStateIndicator","span_2","$.sibling","text","$.only_child","span_3","span_4","root_2","text_1","$.set_attribute","iconify_icon","root_3","span_5","root_4","text_2","needsHelp","span_6","root_5","text_3","$.template_effect","$.set_text","span_7","root_6","text_4","span_8","root_7","text_5","formatAgo","consequent_5","alternate_1","span_9","root_8","text_6","consequent_6","span_10","root_9","text_7","$.set_style","consequent_7","node_10","span_11","root_10","classes","$.set_class","span_12","root_11","consequent_8","alternate_2","span_13","root_14","node_12","root_12","iconify_icon_1","$.set_custom_element_data","consequent_9","button_1","root_13","iconify_icon_2","consequent_10","consequent_11","span_14","root_18","node_15","span_15","root_15","iconify_icon_3","text_8","consequent_12","span_16","root_16","node_17","consequent_13","text_9","iconify_icon_4","$.first_child","fragment_3","text_10","consequent_14","consequent_15","consequent_16","alternate_3","span_17","text_13","consequent_17","consequent_18","$.action","$$node","$$action_arg","longPress","ContextMenu_Trigger","ContextMenu_Content","$.each","node_22","ContextMenu_Item","iconify_icon_5","fragment_9","text_14","consequent_19","status","formatElapsed","ago","title","agentTypeLabel","svg","svg_1","$.delegated","$$args","chosen","fleetStore","machineName","wantsElsewhere","m","drifting","versionDrifts","pick","Popover_Root","Popover_Trigger","fragment_2","Popover_Content","node_5","reason","offlineReason","offlineLabel","d","node_7","d_1","classes_2","classes_3","classes_1","isRepo","project","folderMarker","machineId","folders","f","NO_FOLDER","mine","byRoot","others","byHome","claim","list","home","guessReport","path","here","guessed","elsewhere","p","prefix","below","openOn","carryPath","folderNameProblem","name","cn","ScrollAreaPrimitive_Scrollbar","ScrollAreaPrimitive_Thumb","viewportRef","scrollbarXClasses","scrollbarYClasses","ScrollAreaPrimitive_Root","ScrollAreaPrimitive_Viewport","Scrollbar","ScrollAreaPrimitive_Corner","TabsPrimitive_Trigger","TabsPrimitive_Root","tabsListVariants","tv","variant","TabsPrimitive_List","AvatarPrimitive_Fallback","AvatarPrimitive_Image","size","AvatarPrimitive_Root","Avatar_Root","Avatar_Image","Avatar_Fallback","goto","folder","goTo","marks","ProjectTile","other","letter","tab","machineKey","base","apiBase","parent","$.proxy","showHidden","query","active","inputEl","listEl","gitInit","creating","newName","matches","q","fuzzyMatch","highlightRuns","crumbs","usesHome","parts","acc","part","mark","openHere","openAt","usable","blockedReason","browseTo","switchTo","next","carried","was","wasChosen","$$array","browsing","to","keepQuery","ask","data","tick","createFolder","moveActive","delta","pickCurrent","onKeydown","match","Dialog_Root","Dialog_Content","Dialog_Title","Dialog_Description","Tabs_Root","Tabs_List","why","$1","$2","Tabs_Trigger","node_14","consequent_4","nav","node_9","crumb","node_16","$.remove_input_defaults","ScrollArea","node_18","section","node_20","button_2","text_11","node_21","h3","text_12","div_2","node_19","node_23","div_3","button_3","node_24","$.index","run","mark_1","node_27","node_29","$.event","div_4","root_17","button_4","text_16","q_1","text_17","node_31","classes_4","p_1","node_32","fragment_15","text_18","$.bind_this","div_5","div_6","node_33","Checkbox","node_34","div_7","root_21","node_35","div_8","node_36","Button","node_37","fleet","waiting","out","host","s","t","session","ready","FOLD_KEY","readFold","raw","foldedWith","allKeys","w","arrived","k","setOpen","READY_SHOWN","showAllReady","readyShown","openTicket","href","githubPaneHref","page","refParam","PANE_PARAMS","multiHost","repoName","openHelp","KIND_ICON","Collapsible_Root","Collapsible_Trigger","Collapsible_Content","node_6","off","node_8","getSessionDisplayName","asking","fragment_6","node_13","a_1","text_15","savedKeys","saved","railOrder","keys","known","seen","moveTile","before","drawn","order","at","kept","matchesQuery","fields","MACHINE_COLORS","machineMarks","machines","first","counts","ids","one","two","BADGE_COLORS","sessionStateVisual","HOLD_MS","SLOP_PX","rail","dragging","dropBefore","press","suppressClick","nextKey","lift","onPointerDown","touch","targetAt","last","box","onPointerMove","cancel","moved","onPointerUp","onClick","hold","tile","api","CommandPrimitive_Root","description","showCloseButton","Dialog_Header","Command","CommandPrimitive_Empty","CommandPrimitive_Group","CommandPrimitive_GroupHeading","CommandPrimitive_GroupItems","inputGroupAddonVariants","align","event_handler","Input","iconNode","Icon","InputGroup_Root","InputGroup_Input","CommandPrimitive_Input","InputGroup_Addon","SearchIcon","CommandPrimitive_Item","CheckIcon","CommandPrimitive_List","LIMIT","hits","it","sessions","projects","past","Command_Dialog","Command_Input","Command_List","Command_Empty","Command_Group","Command_Item","Command_Group_1","Command_Item_1","Command_Group_2","Command_Item_2","fragment_16","QuickSwitchStore","quickSwitch","ratioStore","createPersisted","MIN_PANE_PX","navigate","url","SplitStore","sameRef","side","splitUrl","singleUrl","selfName","keep","formatRef","splitStore","sessionRow","marked","fragment_1","rowWithAgents","agentsOf","agentThread","agents","agent","agentHref","$page","SubagentRow","markOpened","isActive","isCurrent","draftKey","refOf","meta","DiffBadge","rowTitle","rowWhere","sessionPath","canDrag","$4","paneTag","draftsStore","attachmentsStore","$7","$8","compact","killSession","postVisit","$10","panelMenu","isSettled","setSettled","settle","$11","markOf","SessionRow","handleRowClick","dragged","dragStart","dropOn","dragEnd","paneRow","pane","detected","detectPaneAgent","AGENTS","openSession","placeRows","place","extras","sweepDead","groupHead","card","openProject","offlineLines","tooOldMachines","offlineMachines","newSessions","agentPicker","newSessionInProject","projectView","closed","div_9","div_10","projectMenu","o","div_11","fragment_17","b_1","node_25","node_28","AGENT_IDS","text_19","text_20","iconify_icon_6","text_21","button_5","node_30","iconify_icon_7","button_6","iconify_icon_8","closeProject","div_12","div_13","settledSection","machineLabel","dragOver","drop","settledRows","settledAll","SETTLED_SHOWN","root_31","button_7","iconify_icon_9","text_22","root_23","node_38","$$item","div_14","root_24","node_40","relPath","classes_5","node_41","reachable","a_2","root_26","openPast","pastHref","pastLabel","iconify_icon_10","text_23","node_44","span_18","text_24","span_19","text_25","node_45","span_20","root_25","iconify_icon_11","fragment_27","ContextMenu_Item_1","resume","iconify_icon_12","fragment_28","button_8","root_29","text_26","toggleIn","consequent_20","settledOpen","consequent_21","openedStore","opened","onMount","NO_AGENTS","agentView","agentId","showFolderBrowser","folderPicker","alertOpen","alertTitle","alertMessage","alertOnConfirm","renameId","menuOpen","showConfirm","message","onConfirm","pickAgent","removeFromPicker","parseSessionPath","localRef","tmuxTarget","rootsOf","projectRoots","cwd","children","childSummary","tmuxSessionOf","nestWorkers","rows","workersOf","placed","master","workers","rowsFor","groupSessions","attention","placesOf","roots","rootOf","bucket","pastByRoot","panes","panesByRoot","places","placeKey","set","canDrop","ok","pastPath","resumePast","goToSession","iconUrl","token","fleetRoots","fleetPlaces","fleetProjects","mergeProjects","projectTile","isHomeDir","icon","iconAt","projectInitials","projectHue","cards","visible","byProject","fleetPrefsStore","RAIL_ORDER","moveProject","tiles","rowMatches","found","whole","activeGroups","g","activeBadge","switchItems","DRAWER_MEDIA_QUERY","drawer","onKey","machineWants","cmd","currentRef","PANES","killSessionReq","dead","among","live","where","msg","sessionStore","prompt","actingMachine","startTicket","ticket","newProject","pickerFolders","mostUrgent","goToFolder","closeChrome","RESET_KEEP_KEYS","STORAGE_KEYS","resetLocalStorage","menuActions","sidebarActionsStore","div_15","fragment_29","header","MachineFilter","node_50","liveCount","Popover_Root_1","Popover_Trigger_1","iconify_icon_13","Popover_Content_1","node_54","action","button_9","root_32","iconify_icon_14","text_27","classes_7","button_10","node_51","iconify_icon_15","iconify_icon_16","button_11","div_16","node_55","ProjectRail","div_17","node_56","div_18","root_33","text_28","consequent_22","section_1","root_34","node_59","node_60","div_19","fragment_35","span_21","iconify_icon_17","node_61","NeedsYou","node_62","section_2","node_64","node_65","div_20","root_36","node_67","button_12","fragment_37","consequent_25","consequent_26","consequent_24","node_68","QuickSwitch","FolderPicker","node_69","text_32","consequent_27","text_31","consequent_28","div_21","node_72","button_13","root_40","iconify_icon_18","div_22","div_23","text_33","div_24","text_34","node_77","button_14","root_41","iconify_icon_19","text_35","consequent_29","RenameSessionDialog","node_78","AlertDialog_Root","AlertDialog_Content","AlertDialog_Header","AlertDialog_Title","AlertDialog_Description","AlertDialog_Footer","AlertDialog_Cancel","AlertDialog_Action","classes_6"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,70]}
|