@zythum02/fello-server 0.1.46 → 0.1.49
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/README.md +11 -2
- package/out/renderer/assets/{_baseUniq-JI50qq3v.js → _baseUniq-jsNn2Q0s.js} +1 -1
- package/out/renderer/assets/_baseUniq-jsNn2Q0s.js.br +0 -0
- package/out/renderer/assets/_baseUniq-jsNn2Q0s.js.gz +0 -0
- package/out/renderer/assets/{arc-D82BffDI.js → arc-CZMdjunT.js} +1 -1
- package/out/renderer/assets/arc-CZMdjunT.js.br +0 -0
- package/out/renderer/assets/arc-CZMdjunT.js.gz +0 -0
- package/out/renderer/assets/{architectureDiagram-Q4EWVU46-BBRMDHvv.js → architectureDiagram-Q4EWVU46-BNFtPc1v.js} +5 -5
- package/out/renderer/assets/architectureDiagram-Q4EWVU46-BNFtPc1v.js.br +0 -0
- package/out/renderer/assets/architectureDiagram-Q4EWVU46-BNFtPc1v.js.gz +0 -0
- package/out/renderer/assets/{blockDiagram-DXYQGD6D-CiCuaiyL.js → blockDiagram-DXYQGD6D-CPK2QuaJ.js} +6 -6
- package/out/renderer/assets/blockDiagram-DXYQGD6D-CPK2QuaJ.js.br +0 -0
- package/out/renderer/assets/blockDiagram-DXYQGD6D-CPK2QuaJ.js.gz +0 -0
- package/out/renderer/assets/{c4Diagram-AHTNJAMY-D9PM_R8p.js → c4Diagram-AHTNJAMY-DLQf0xBh.js} +2 -2
- package/out/renderer/assets/c4Diagram-AHTNJAMY-DLQf0xBh.js.br +0 -0
- package/out/renderer/assets/c4Diagram-AHTNJAMY-DLQf0xBh.js.gz +0 -0
- package/out/renderer/assets/{channel-CklIgqOK.js → channel-sFWrTS52.js} +1 -1
- package/out/renderer/assets/{chunk-4BX2VUAB-DK0KQU1M.js → chunk-4BX2VUAB-CUoBhtu2.js} +1 -1
- package/out/renderer/assets/{chunk-4TB4RGXK-CxHdBbdg.js → chunk-4TB4RGXK-CRjlV65P.js} +5 -5
- package/out/renderer/assets/chunk-4TB4RGXK-CRjlV65P.js.br +0 -0
- package/out/renderer/assets/chunk-4TB4RGXK-CRjlV65P.js.gz +0 -0
- package/out/renderer/assets/{chunk-55IACEB6-ykIH_AN3.js → chunk-55IACEB6-zrgWErN1.js} +1 -1
- package/out/renderer/assets/{chunk-EDXVE4YY-DUOS0pBH.js → chunk-EDXVE4YY-B5b9dJFI.js} +1 -1
- package/out/renderer/assets/chunk-EDXVE4YY-B5b9dJFI.js.br +0 -0
- package/out/renderer/assets/chunk-EDXVE4YY-B5b9dJFI.js.gz +0 -0
- package/out/renderer/assets/{chunk-FMBD7UC4-Bm3BHCuh.js → chunk-FMBD7UC4-Bb0FhBnd.js} +1 -1
- package/out/renderer/assets/{chunk-OYMX7WX6-DH9JMSMI.js → chunk-OYMX7WX6-CkUp0SL9.js} +3 -3
- package/out/renderer/assets/chunk-OYMX7WX6-CkUp0SL9.js.br +0 -0
- package/out/renderer/assets/chunk-OYMX7WX6-CkUp0SL9.js.gz +0 -0
- package/out/renderer/assets/{chunk-QZHKN3VN-LffrA1jF.js → chunk-QZHKN3VN-Bqt7zsAR.js} +1 -1
- package/out/renderer/assets/{chunk-YZCP3GAM-B1pm_POM.js → chunk-YZCP3GAM-Crg82fz2.js} +1 -1
- package/out/renderer/assets/chunk-YZCP3GAM-Crg82fz2.js.br +0 -0
- package/out/renderer/assets/chunk-YZCP3GAM-Crg82fz2.js.gz +0 -0
- package/out/renderer/assets/{classDiagram-6PBFFD2Q-O6uMquiH.js → classDiagram-6PBFFD2Q-BInpfZnW.js} +6 -6
- package/out/renderer/assets/{classDiagram-v2-HSJHXN6E-O6uMquiH.js → classDiagram-v2-HSJHXN6E-BInpfZnW.js} +6 -6
- package/out/renderer/assets/{clone-BhlnPWG5.js → clone-Brsdp_jq.js} +1 -1
- package/out/renderer/assets/{cose-bilkent-S5V4N54A-ljZi9cz-.js → cose-bilkent-S5V4N54A-CH_2zOJR.js} +1 -1
- package/out/renderer/assets/cose-bilkent-S5V4N54A-CH_2zOJR.js.br +0 -0
- package/out/renderer/assets/cose-bilkent-S5V4N54A-CH_2zOJR.js.gz +0 -0
- package/out/renderer/assets/{dagre-KV5264BT-DqnNoP69.js → dagre-KV5264BT-H1wB7v-Q.js} +6 -6
- package/out/renderer/assets/dagre-KV5264BT-H1wB7v-Q.js.br +0 -0
- package/out/renderer/assets/dagre-KV5264BT-H1wB7v-Q.js.gz +0 -0
- package/out/renderer/assets/{diagram-5BDNPKRD-pBYJseHI.js → diagram-5BDNPKRD-D9VV_-Xi.js} +6 -6
- package/out/renderer/assets/diagram-5BDNPKRD-D9VV_-Xi.js.br +0 -0
- package/out/renderer/assets/diagram-5BDNPKRD-D9VV_-Xi.js.gz +0 -0
- package/out/renderer/assets/{diagram-G4DWMVQ6-IPm9zWeG.js → diagram-G4DWMVQ6-CfRglPBg.js} +6 -6
- package/out/renderer/assets/diagram-G4DWMVQ6-CfRglPBg.js.br +0 -0
- package/out/renderer/assets/diagram-G4DWMVQ6-CfRglPBg.js.gz +0 -0
- package/out/renderer/assets/{diagram-MMDJMWI5-DSH58P_m.js → diagram-MMDJMWI5-BnwRyNpR.js} +5 -5
- package/out/renderer/assets/diagram-MMDJMWI5-BnwRyNpR.js.br +0 -0
- package/out/renderer/assets/diagram-MMDJMWI5-BnwRyNpR.js.gz +0 -0
- package/out/renderer/assets/{diagram-TYMM5635-Czl-GGCp.js → diagram-TYMM5635-BKn_5Ga7.js} +5 -5
- package/out/renderer/assets/diagram-TYMM5635-BKn_5Ga7.js.br +0 -0
- package/out/renderer/assets/diagram-TYMM5635-BKn_5Ga7.js.gz +0 -0
- package/out/renderer/assets/{erDiagram-SMLLAGMA-BENPNKae.js → erDiagram-SMLLAGMA-B35CLzqQ.js} +4 -4
- package/out/renderer/assets/erDiagram-SMLLAGMA-B35CLzqQ.js.br +0 -0
- package/out/renderer/assets/erDiagram-SMLLAGMA-B35CLzqQ.js.gz +0 -0
- package/out/renderer/assets/{flowDiagram-DWJPFMVM-T3H9Pqwa.js → flowDiagram-DWJPFMVM-BidIy8zc.js} +6 -6
- package/out/renderer/assets/flowDiagram-DWJPFMVM-BidIy8zc.js.br +0 -0
- package/out/renderer/assets/flowDiagram-DWJPFMVM-BidIy8zc.js.gz +0 -0
- package/out/renderer/assets/{ganttDiagram-T4ZO3ILL-Hh-AJvLC.js → ganttDiagram-T4ZO3ILL-CqV1ei6S.js} +2 -2
- package/out/renderer/assets/ganttDiagram-T4ZO3ILL-CqV1ei6S.js.br +0 -0
- package/out/renderer/assets/ganttDiagram-T4ZO3ILL-CqV1ei6S.js.gz +0 -0
- package/out/renderer/assets/{gitGraphDiagram-UUTBAWPF-BDXB9jT_.js → gitGraphDiagram-UUTBAWPF-7wQ8gKPV.js} +6 -6
- package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-7wQ8gKPV.js.br +0 -0
- package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-7wQ8gKPV.js.gz +0 -0
- package/out/renderer/assets/{graph-MWvZ47Hf.js → graph-Ck9_bXv5.js} +2 -2
- package/out/renderer/assets/graph-Ck9_bXv5.js.br +0 -0
- package/out/renderer/assets/graph-Ck9_bXv5.js.gz +0 -0
- package/out/renderer/assets/{highlighted-body-OFNGDK62-Bvl34wyh.js → highlighted-body-OFNGDK62-gS-2OBX1.js} +1 -1
- package/out/renderer/assets/{index-BTEKdfpj.css → index-BtjFxpR5.css} +1 -1
- package/out/renderer/assets/index-BtjFxpR5.css.br +0 -0
- package/out/renderer/assets/index-BtjFxpR5.css.gz +0 -0
- package/out/renderer/assets/{index-BpPCAjGn.js → index-Cy_TZSUE.js} +2040 -1485
- package/out/renderer/assets/index-Cy_TZSUE.js.br +0 -0
- package/out/renderer/assets/index-Cy_TZSUE.js.gz +0 -0
- package/out/renderer/assets/{infoDiagram-42DDH7IO-Ca_9-363.js → infoDiagram-42DDH7IO-DlKxzT4w.js} +4 -4
- package/out/renderer/assets/{ishikawaDiagram-UXIWVN3A-D3GtyA4e.js → ishikawaDiagram-UXIWVN3A-DmOMlIE8.js} +1 -1
- package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-DmOMlIE8.js.br +0 -0
- package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-DmOMlIE8.js.gz +0 -0
- package/out/renderer/assets/{journeyDiagram-VCZTEJTY-DkQAlc0b.js → journeyDiagram-VCZTEJTY-CYRPGJN7.js} +4 -4
- package/out/renderer/assets/journeyDiagram-VCZTEJTY-CYRPGJN7.js.br +0 -0
- package/out/renderer/assets/journeyDiagram-VCZTEJTY-CYRPGJN7.js.gz +0 -0
- package/out/renderer/assets/{kanban-definition-6JOO6SKY-DamLzi6S.js → kanban-definition-6JOO6SKY-Dovb_i6Z.js} +2 -2
- package/out/renderer/assets/kanban-definition-6JOO6SKY-Dovb_i6Z.js.br +0 -0
- package/out/renderer/assets/kanban-definition-6JOO6SKY-Dovb_i6Z.js.gz +0 -0
- package/out/renderer/assets/{layout-Dw_ZcO_L.js → layout-BUs47sjz.js} +4 -4
- package/out/renderer/assets/layout-BUs47sjz.js.br +0 -0
- package/out/renderer/assets/layout-BUs47sjz.js.gz +0 -0
- package/out/renderer/assets/{linear-Dh5vwFy4.js → linear-CO24wS_v.js} +1 -1
- package/out/renderer/assets/linear-CO24wS_v.js.br +0 -0
- package/out/renderer/assets/linear-CO24wS_v.js.gz +0 -0
- package/out/renderer/assets/{min-DDCW5FhP.js → min-Dd_ATNHv.js} +2 -2
- package/out/renderer/assets/min-Dd_ATNHv.js.br +0 -0
- package/out/renderer/assets/min-Dd_ATNHv.js.gz +0 -0
- package/out/renderer/assets/{mindmap-definition-QFDTVHPH-B3rcYXPK.js → mindmap-definition-QFDTVHPH-CC3W7LA-.js} +3 -3
- package/out/renderer/assets/mindmap-definition-QFDTVHPH-CC3W7LA-.js.br +0 -0
- package/out/renderer/assets/mindmap-definition-QFDTVHPH-CC3W7LA-.js.gz +0 -0
- package/out/renderer/assets/{pieDiagram-DEJITSTG-CsCXUSKq.js → pieDiagram-DEJITSTG-BN6Ummnw.js} +6 -6
- package/out/renderer/assets/pieDiagram-DEJITSTG-BN6Ummnw.js.br +0 -0
- package/out/renderer/assets/pieDiagram-DEJITSTG-BN6Ummnw.js.gz +0 -0
- package/out/renderer/assets/{quadrantDiagram-34T5L4WZ-B91qjO1u.js → quadrantDiagram-34T5L4WZ-DTE_dLJv.js} +2 -2
- package/out/renderer/assets/quadrantDiagram-34T5L4WZ-DTE_dLJv.js.br +0 -0
- package/out/renderer/assets/quadrantDiagram-34T5L4WZ-DTE_dLJv.js.gz +0 -0
- package/out/renderer/assets/{requirementDiagram-MS252O5E-oDcN7qN5.js → requirementDiagram-MS252O5E-DVDS2RYN.js} +3 -3
- package/out/renderer/assets/requirementDiagram-MS252O5E-DVDS2RYN.js.br +0 -0
- package/out/renderer/assets/requirementDiagram-MS252O5E-DVDS2RYN.js.gz +0 -0
- package/out/renderer/assets/{sankeyDiagram-XADWPNL6-DNQO_6oX.js → sankeyDiagram-XADWPNL6-D4_LywJM.js} +1 -1
- package/out/renderer/assets/sankeyDiagram-XADWPNL6-D4_LywJM.js.br +0 -0
- package/out/renderer/assets/sankeyDiagram-XADWPNL6-D4_LywJM.js.gz +0 -0
- package/out/renderer/assets/{sequenceDiagram-FGHM5R23-DCh5u6wY.js → sequenceDiagram-FGHM5R23-89GBJZmd.js} +3 -3
- package/out/renderer/assets/sequenceDiagram-FGHM5R23-89GBJZmd.js.br +0 -0
- package/out/renderer/assets/sequenceDiagram-FGHM5R23-89GBJZmd.js.gz +0 -0
- package/out/renderer/assets/{stateDiagram-FHFEXIEX-DV0gaxkj.js → stateDiagram-FHFEXIEX-YKrUbogP.js} +8 -8
- package/out/renderer/assets/stateDiagram-FHFEXIEX-YKrUbogP.js.br +0 -0
- package/out/renderer/assets/stateDiagram-FHFEXIEX-YKrUbogP.js.gz +0 -0
- package/out/renderer/assets/{stateDiagram-v2-QKLJ7IA2-D1Sk_TKE.js → stateDiagram-v2-QKLJ7IA2-CO0pZRqI.js} +4 -4
- package/out/renderer/assets/{timeline-definition-GMOUNBTQ-Nq47TkPV.js → timeline-definition-GMOUNBTQ-BW2oxhj-.js} +2 -2
- package/out/renderer/assets/timeline-definition-GMOUNBTQ-BW2oxhj-.js.br +0 -0
- package/out/renderer/assets/timeline-definition-GMOUNBTQ-BW2oxhj-.js.gz +0 -0
- package/out/renderer/assets/{vennDiagram-DHZGUBPP-CMbmY-R_.js → vennDiagram-DHZGUBPP-DSy9zL6k.js} +1 -1
- package/out/renderer/assets/vennDiagram-DHZGUBPP-DSy9zL6k.js.br +0 -0
- package/out/renderer/assets/vennDiagram-DHZGUBPP-DSy9zL6k.js.gz +0 -0
- package/out/renderer/assets/{wardley-RL74JXVD-aLLqbf8o.js → wardley-RL74JXVD-DFRGDO55.js} +3 -3
- package/out/renderer/assets/wardley-RL74JXVD-DFRGDO55.js.br +0 -0
- package/out/renderer/assets/wardley-RL74JXVD-DFRGDO55.js.gz +0 -0
- package/out/renderer/assets/{wardleyDiagram-NUSXRM2D-8Kc4VQIw.js → wardleyDiagram-NUSXRM2D-CJUPdnii.js} +5 -5
- package/out/renderer/assets/wardleyDiagram-NUSXRM2D-CJUPdnii.js.br +0 -0
- package/out/renderer/assets/wardleyDiagram-NUSXRM2D-CJUPdnii.js.gz +0 -0
- package/out/renderer/assets/{xychartDiagram-5P7HB3ND-YtEoXmYf.js → xychartDiagram-5P7HB3ND-UGlSGsDE.js} +2 -2
- package/out/renderer/assets/xychartDiagram-5P7HB3ND-UGlSGsDE.js.br +0 -0
- package/out/renderer/assets/xychartDiagram-5P7HB3ND-UGlSGsDE.js.gz +0 -0
- package/out/renderer/index.html +2 -2
- package/out/renderer/index.html.br +0 -0
- package/out/renderer/index.html.gz +0 -0
- package/out/scripts/mcp-search/server.mjs +46 -46
- package/out/server/main.js +1067 -318
- package/package.json +4 -1
- package/out/renderer/assets/_baseUniq-JI50qq3v.js.br +0 -0
- package/out/renderer/assets/_baseUniq-JI50qq3v.js.gz +0 -0
- package/out/renderer/assets/arc-D82BffDI.js.br +0 -0
- package/out/renderer/assets/arc-D82BffDI.js.gz +0 -0
- package/out/renderer/assets/architectureDiagram-Q4EWVU46-BBRMDHvv.js.br +0 -0
- package/out/renderer/assets/architectureDiagram-Q4EWVU46-BBRMDHvv.js.gz +0 -0
- package/out/renderer/assets/blockDiagram-DXYQGD6D-CiCuaiyL.js.br +0 -0
- package/out/renderer/assets/blockDiagram-DXYQGD6D-CiCuaiyL.js.gz +0 -0
- package/out/renderer/assets/c4Diagram-AHTNJAMY-D9PM_R8p.js.br +0 -0
- package/out/renderer/assets/c4Diagram-AHTNJAMY-D9PM_R8p.js.gz +0 -0
- package/out/renderer/assets/chunk-4TB4RGXK-CxHdBbdg.js.br +0 -0
- package/out/renderer/assets/chunk-4TB4RGXK-CxHdBbdg.js.gz +0 -0
- package/out/renderer/assets/chunk-EDXVE4YY-DUOS0pBH.js.br +0 -0
- package/out/renderer/assets/chunk-EDXVE4YY-DUOS0pBH.js.gz +0 -0
- package/out/renderer/assets/chunk-OYMX7WX6-DH9JMSMI.js.br +0 -0
- package/out/renderer/assets/chunk-OYMX7WX6-DH9JMSMI.js.gz +0 -0
- package/out/renderer/assets/chunk-YZCP3GAM-B1pm_POM.js.br +0 -0
- package/out/renderer/assets/chunk-YZCP3GAM-B1pm_POM.js.gz +0 -0
- package/out/renderer/assets/cose-bilkent-S5V4N54A-ljZi9cz-.js.br +0 -0
- package/out/renderer/assets/cose-bilkent-S5V4N54A-ljZi9cz-.js.gz +0 -0
- package/out/renderer/assets/dagre-KV5264BT-DqnNoP69.js.br +0 -0
- package/out/renderer/assets/dagre-KV5264BT-DqnNoP69.js.gz +0 -0
- package/out/renderer/assets/diagram-5BDNPKRD-pBYJseHI.js.br +0 -0
- package/out/renderer/assets/diagram-5BDNPKRD-pBYJseHI.js.gz +0 -0
- package/out/renderer/assets/diagram-G4DWMVQ6-IPm9zWeG.js.br +0 -0
- package/out/renderer/assets/diagram-G4DWMVQ6-IPm9zWeG.js.gz +0 -0
- package/out/renderer/assets/diagram-MMDJMWI5-DSH58P_m.js.br +0 -0
- package/out/renderer/assets/diagram-MMDJMWI5-DSH58P_m.js.gz +0 -0
- package/out/renderer/assets/diagram-TYMM5635-Czl-GGCp.js.br +0 -0
- package/out/renderer/assets/diagram-TYMM5635-Czl-GGCp.js.gz +0 -0
- package/out/renderer/assets/erDiagram-SMLLAGMA-BENPNKae.js.br +0 -0
- package/out/renderer/assets/erDiagram-SMLLAGMA-BENPNKae.js.gz +0 -0
- package/out/renderer/assets/flowDiagram-DWJPFMVM-T3H9Pqwa.js.br +0 -0
- package/out/renderer/assets/flowDiagram-DWJPFMVM-T3H9Pqwa.js.gz +0 -0
- package/out/renderer/assets/ganttDiagram-T4ZO3ILL-Hh-AJvLC.js.br +0 -0
- package/out/renderer/assets/ganttDiagram-T4ZO3ILL-Hh-AJvLC.js.gz +0 -0
- package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-BDXB9jT_.js.br +0 -0
- package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-BDXB9jT_.js.gz +0 -0
- package/out/renderer/assets/graph-MWvZ47Hf.js.br +0 -0
- package/out/renderer/assets/graph-MWvZ47Hf.js.gz +0 -0
- package/out/renderer/assets/index-BTEKdfpj.css.br +0 -0
- package/out/renderer/assets/index-BTEKdfpj.css.gz +0 -0
- package/out/renderer/assets/index-BpPCAjGn.js.br +0 -0
- package/out/renderer/assets/index-BpPCAjGn.js.gz +0 -0
- package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-D3GtyA4e.js.br +0 -0
- package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-D3GtyA4e.js.gz +0 -0
- package/out/renderer/assets/journeyDiagram-VCZTEJTY-DkQAlc0b.js.br +0 -0
- package/out/renderer/assets/journeyDiagram-VCZTEJTY-DkQAlc0b.js.gz +0 -0
- package/out/renderer/assets/kanban-definition-6JOO6SKY-DamLzi6S.js.br +0 -0
- package/out/renderer/assets/kanban-definition-6JOO6SKY-DamLzi6S.js.gz +0 -0
- package/out/renderer/assets/layout-Dw_ZcO_L.js.br +0 -0
- package/out/renderer/assets/layout-Dw_ZcO_L.js.gz +0 -0
- package/out/renderer/assets/linear-Dh5vwFy4.js.br +0 -0
- package/out/renderer/assets/linear-Dh5vwFy4.js.gz +0 -0
- package/out/renderer/assets/min-DDCW5FhP.js.br +0 -0
- package/out/renderer/assets/min-DDCW5FhP.js.gz +0 -0
- package/out/renderer/assets/mindmap-definition-QFDTVHPH-B3rcYXPK.js.br +0 -0
- package/out/renderer/assets/mindmap-definition-QFDTVHPH-B3rcYXPK.js.gz +0 -0
- package/out/renderer/assets/pieDiagram-DEJITSTG-CsCXUSKq.js.br +0 -0
- package/out/renderer/assets/pieDiagram-DEJITSTG-CsCXUSKq.js.gz +0 -0
- package/out/renderer/assets/quadrantDiagram-34T5L4WZ-B91qjO1u.js.br +0 -0
- package/out/renderer/assets/quadrantDiagram-34T5L4WZ-B91qjO1u.js.gz +0 -0
- package/out/renderer/assets/requirementDiagram-MS252O5E-oDcN7qN5.js.br +0 -0
- package/out/renderer/assets/requirementDiagram-MS252O5E-oDcN7qN5.js.gz +0 -0
- package/out/renderer/assets/sankeyDiagram-XADWPNL6-DNQO_6oX.js.br +0 -0
- package/out/renderer/assets/sankeyDiagram-XADWPNL6-DNQO_6oX.js.gz +0 -0
- package/out/renderer/assets/sequenceDiagram-FGHM5R23-DCh5u6wY.js.br +0 -0
- package/out/renderer/assets/sequenceDiagram-FGHM5R23-DCh5u6wY.js.gz +0 -0
- package/out/renderer/assets/stateDiagram-FHFEXIEX-DV0gaxkj.js.br +0 -0
- package/out/renderer/assets/stateDiagram-FHFEXIEX-DV0gaxkj.js.gz +0 -0
- package/out/renderer/assets/timeline-definition-GMOUNBTQ-Nq47TkPV.js.br +0 -0
- package/out/renderer/assets/timeline-definition-GMOUNBTQ-Nq47TkPV.js.gz +0 -0
- package/out/renderer/assets/vennDiagram-DHZGUBPP-CMbmY-R_.js.br +0 -0
- package/out/renderer/assets/vennDiagram-DHZGUBPP-CMbmY-R_.js.gz +0 -0
- package/out/renderer/assets/wardley-RL74JXVD-aLLqbf8o.js.br +0 -0
- package/out/renderer/assets/wardley-RL74JXVD-aLLqbf8o.js.gz +0 -0
- package/out/renderer/assets/wardleyDiagram-NUSXRM2D-8Kc4VQIw.js.br +0 -0
- package/out/renderer/assets/wardleyDiagram-NUSXRM2D-8Kc4VQIw.js.gz +0 -0
- package/out/renderer/assets/xychartDiagram-5P7HB3ND-YtEoXmYf.js.br +0 -0
- package/out/renderer/assets/xychartDiagram-5P7HB3ND-YtEoXmYf.js.gz +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./dagre-KV5264BT-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./dagre-KV5264BT-H1wB7v-Q.js","./graph-Ck9_bXv5.js","./_baseUniq-jsNn2Q0s.js","./layout-BUs47sjz.js","./min-Dd_ATNHv.js","./clone-Brsdp_jq.js","./cose-bilkent-S5V4N54A-CH_2zOJR.js","./cytoscape.esm-Bm8DJGmZ.js","./c4Diagram-AHTNJAMY-DLQf0xBh.js","./chunk-YZCP3GAM-Crg82fz2.js","./flowDiagram-DWJPFMVM-BidIy8zc.js","./chunk-FMBD7UC4-Bb0FhBnd.js","./chunk-55IACEB6-zrgWErN1.js","./chunk-EDXVE4YY-B5b9dJFI.js","./channel-sFWrTS52.js","./erDiagram-SMLLAGMA-B35CLzqQ.js","./gitGraphDiagram-UUTBAWPF-7wQ8gKPV.js","./chunk-4BX2VUAB-CUoBhtu2.js","./chunk-QZHKN3VN-Bqt7zsAR.js","./wardley-RL74JXVD-DFRGDO55.js","./ganttDiagram-T4ZO3ILL-CqV1ei6S.js","./linear-CO24wS_v.js","./init-ZxktEp_H.js","./defaultLocale-B2RvLBDe.js","./infoDiagram-42DDH7IO-DlKxzT4w.js","./pieDiagram-DEJITSTG-BN6Ummnw.js","./arc-CZMdjunT.js","./ordinal-CxptdPJm.js","./quadrantDiagram-34T5L4WZ-DTE_dLJv.js","./xychartDiagram-5P7HB3ND-UGlSGsDE.js","./requirementDiagram-MS252O5E-DVDS2RYN.js","./sequenceDiagram-FGHM5R23-89GBJZmd.js","./classDiagram-6PBFFD2Q-BInpfZnW.js","./chunk-4TB4RGXK-CRjlV65P.js","./classDiagram-v2-HSJHXN6E-BInpfZnW.js","./stateDiagram-FHFEXIEX-YKrUbogP.js","./chunk-OYMX7WX6-CkUp0SL9.js","./stateDiagram-v2-QKLJ7IA2-CO0pZRqI.js","./journeyDiagram-VCZTEJTY-CYRPGJN7.js","./timeline-definition-GMOUNBTQ-BW2oxhj-.js","./mindmap-definition-QFDTVHPH-CC3W7LA-.js","./kanban-definition-6JOO6SKY-Dovb_i6Z.js","./sankeyDiagram-XADWPNL6-D4_LywJM.js","./diagram-TYMM5635-BKn_5Ga7.js","./diagram-MMDJMWI5-BnwRyNpR.js","./blockDiagram-DXYQGD6D-CPK2QuaJ.js","./diagram-5BDNPKRD-D9VV_-Xi.js","./architectureDiagram-Q4EWVU46-BNFtPc1v.js","./diagram-G4DWMVQ6-CfRglPBg.js","./wardleyDiagram-NUSXRM2D-CJUPdnii.js","./angular-html-BYG42TJr.js","./html-GC16tDh9.js","./javascript-BsAkV7mL.js","./css-BtVcDqlU.js","./angular-ts-BftcHvZ6.js","./scss-Dq-LbI_c.js","./apl-CGZawg-A.js","./xml-BMzZeaqs.js","./java-BfXh-0uJ.js","./json-TjWBGEk1.js","./astro-BxdWOZvM.js","./typescript-CP6ECzON.js","./postcss-kj1IbjVd.js","./tsx-CmGGo4Hm.js","./blade-BbH7YAUi.js","./html-derivative-HU9p64q4.js","./sql-DzUuSofg.js","./bsl-DwPS0BId.js","./sdbl-BBUhycGU.js","./cairo-BtYx2aM5.js","./python-CrdIx4PZ.js","./cobol-B8r1pfPr.js","./coffee-XLjtuEYs.js","./cpp-zh2ePAE_.js","./regexp-BxWeO75u.js","./glsl-CGsiYPcu.js","./c-C4VtT7JA.js","./crystal-BqBRy7Ec.js","./shellscript-CQ8MXh-D.js","./edge-CnHxQ_FD.js","./elixir-B_LIBv5J.js","./elm-BlO7pcFp.js","./erb-Bzn22wO6.js","./ruby-C13Bjepi.js","./haml-DrIklt7F.js","./graphql-CwmtR1ib.js","./jsx-BPmvoin2.js","./lua-BVbbqwZC.js","./yaml-B_vW5iTY.js","./erlang-Ch5kuXHm.js","./markdown-F_EULe_G.js","./fortran-fixed-form-CpmOyvS5.js","./fortran-free-form-5X94ETMi.js","./fsharp-5vtGqRR9.js","./gdresource-B5TLWiFO.js","./gdshader-BEzE4j_3.js","./gdscript-CNW3Aj-d.js","./git-commit-PP9xCApN.js","./diff-BEdzuHlE.js","./git-rebase-D-XQSvDj.js","./glimmer-js-h2QNNiD7.js","./glimmer-ts-Bk3uX6Ae.js","./hack-BTX3ICIE.js","./handlebars-yWFGGD2R.js","./http-DjsOm9E4.js","./hurl-Am2cDU4f.js","./csv-Ba84L8e5.js","./hxml-Jle7oGdm.js","./haxe-BpobLYM9.js","./jinja-FkIlHBgj.js","./jison-BkdOIOd4.js","./julia-CU_UwNb8.js","./r-Dpdc-Kyk.js","./just-tGFryTtU.js","./perl-HITCDkgu.js","./latex-B0gTO9uZ.js","./tex-CGVqF8nD.js","./liquid-QmJ_LYTW.js","./marko-BAWrmNIa.js","./less-BAzLMJNR.js","./mdc-Ca0ft0PS.js","./nextflow-B166B-y1.js","./nextflow-groovy-BOO9s0iq.js","./nginx-BFAkI5_-.js","./nim-B3PAIZ4D.js","./php-C2HieitX.js","./pug-BwQB43qN.js","./qml-jtL8okyu.js","./razor-gBXW6YBJ.js","./csharp-DxX_6tHh.js","./rst-by6KAwTb.js","./cmake-CDfQILeU.js","./sas-BLBgC3TA.js","./shaderlab-C07uO3dL.js","./hlsl-TRzjajlb.js","./shellsession-CkeTp4M1.js","./soy-BHaHgMUy.js","./sparql-DswowMAp.js","./turtle-BnC7StHY.js","./stata-Dl7wDdBE.js","./surrealql-Bs3vUeKA.js","./svelte-fC0HkEkx.js","./templ-CSEiQwNm.js","./go-DRMr3iML.js","./ts-tags-cG2hZuda.js","./twig-CwEEYIBf.js","./vue-K-7Ga-y8.js","./vue-html-DhreShjd.js","./vue-vine-rMIwOpFf.js","./stylus-DXFa_2Jl.js","./xsl-CnwVr_6q.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
function _mergeNamespaces(n2, m2) {
|
|
3
3
|
for (var i3 = 0; i3 < m2.length; i3++) {
|
|
4
4
|
const e11 = m2[i3];
|
|
@@ -14128,6 +14128,7 @@ const useAppStore = create$3((set2, get2) => ({
|
|
|
14128
14128
|
theme: { themeMode: "system" },
|
|
14129
14129
|
i18n: { language: "en" },
|
|
14130
14130
|
fileWatcher: { enabled: true },
|
|
14131
|
+
proxy: { mode: "off" },
|
|
14131
14132
|
ilink: { useOriginalImage: false },
|
|
14132
14133
|
editor: { name: "code" },
|
|
14133
14134
|
sound: { volume: 50, muted: false, theme: "soft" },
|
|
@@ -14260,6 +14261,7 @@ const useAppStore = create$3((set2, get2) => ({
|
|
|
14260
14261
|
setTheme: (theme) => set2({ theme }),
|
|
14261
14262
|
setI18n: (i18n) => set2({ i18n }),
|
|
14262
14263
|
setFileWatcher: (fileWatcher) => set2({ fileWatcher }),
|
|
14264
|
+
setProxy: (proxy) => set2({ proxy }),
|
|
14263
14265
|
setIlink: (ilink) => set2({ ilink }),
|
|
14264
14266
|
setEditor: (editor) => set2({ editor }),
|
|
14265
14267
|
setSound: (sound) => set2({ sound }),
|
|
@@ -16883,17 +16885,17 @@ const useTranslation = (ns2, props = {}) => {
|
|
|
16883
16885
|
}
|
|
16884
16886
|
return ret;
|
|
16885
16887
|
};
|
|
16886
|
-
const sidebar$1 = { "welcome": "Welcome", "skills": "Skills", "automation": "Automation", "projects": "Projects", "noProjects": "No projects yet", "noProjectsHint": "Add a project folder to get started", "addProject": "Add Project", "noAgentsHint": "Configure an agent first", "configureAgent": "Configure Agent", "revealInFinder": "Reveal in Finder", "rename": "Rename", "delete": "Delete", "renameProject": "Rename Project", "renameChat": "Rename Chat", "deleteChat": "Delete Chat", "enterNewProjectName": "Enter a new project name.", "enterNewChatName": "Enter a new chat name.", "addProjectTitle": "Add Project", "enterProjectPath": "Enter absolute path to project on the server:", "pathCannotBeEmpty": "Path cannot be empty", "webuiEnabled": "WebUI Enabled", "deleteProject": "Delete Project", "deleteProjectConfirm": 'Delete project "{{title}}" and all chats in it?\nThis action cannot be undone.', "deleteChatConfirm": 'Delete chat "{{title}}"?\nThis action cannot be undone.', "cancel": "Cancel", "save": "Save", "settings": "Settings", "agents": "Agents", "addProjectFailed": "Failed to add project.", "newChatFailed": "Failed to create a new chat.", "loadSessionFailed": "Failed to load session.", "revealInFinderFailed": "Failed to reveal in Finder.", "projectExists": "Project already exists.", "projectNameEmpty": "Project name cannot be empty.", "chatNameEmpty": "Chat name cannot be empty.", "newChat": "New Chat", "projectActions": "Project actions for {{title}}", "createChatInProject": "Create chat in {{title}}", "chatActions": "Chat actions for {{title}}", "ilinkSetActive": "Set WeChat Active", "ilinkUnsetActive": "Unset WeChat Active", "collapse": "Collapse sidebar", "expand": "Expand sidebar", "newSessionDialog": { "title": "Create session", "agent": "Agent", "selectAgent": "Select an agent", "mcp": "MCP", "noMcp": "No MCP servers configured", "permission": "Permission", "permissionAsk": "Ask", "permissionAllowAll": "Allow all", "create": "Create" } };
|
|
16888
|
+
const sidebar$1 = { "welcome": "Welcome", "skills": "Skills", "automation": "Automation", "projects": "Projects", "noProjects": "No projects yet", "noProjectsHint": "Add a project folder to get started", "addProject": "Add Project", "noAgentsHint": "Configure an agent first", "configureAgent": "Configure Agent", "revealInFinder": "Reveal in Finder", "rename": "Rename", "delete": "Delete", "renameProject": "Rename Project", "renameChat": "Rename Chat", "deleteChat": "Delete Chat", "enterNewProjectName": "Enter a new project name.", "enterNewChatName": "Enter a new chat name.", "addProjectTitle": "Add Project", "enterProjectPath": "Enter absolute path to project on the server:", "pathCannotBeEmpty": "Path cannot be empty", "webuiEnabled": "WebUI Enabled", "deleteProject": "Delete Project", "deleteProjectConfirm": 'Delete project "{{title}}" and all chats in it?\nThis action cannot be undone.', "deleteChatConfirm": 'Delete chat "{{title}}"?\nThis action cannot be undone.', "cancel": "Cancel", "save": "Save", "settings": "Settings", "agents": "Agents", "addProjectFailed": "Failed to add project.", "newChatFailed": "Failed to create a new chat.", "loadSessionFailed": "Failed to load session.", "revealInFinderFailed": "Failed to reveal in Finder.", "projectExists": "Project already exists.", "projectNameEmpty": "Project name cannot be empty.", "chatNameEmpty": "Chat name cannot be empty.", "newChat": "New Chat", "projectActions": "Project actions for {{title}}", "createChatInProject": "Create chat in {{title}}", "chatActions": "Chat actions for {{title}}", "ilinkSetActive": "Set WeChat Active", "ilinkUnsetActive": "Unset WeChat Active", "collapse": "Collapse sidebar", "expand": "Expand sidebar", "updated": "Updated", "created": "Created", "newSessionDialog": { "title": "Create session", "agent": "Agent", "selectAgent": "Select an agent", "mcp": "MCP", "noMcp": "No MCP servers configured", "permission": "Permission", "permissionAsk": "Ask", "permissionAllowAll": "Allow all", "create": "Create" } };
|
|
16887
16889
|
const skills$1 = { "title": "Skills", "installed": { "label": "Installed", "noDescription": "No description provided.", "revealInFinder": "Reveal in Finder", "viewSkill": "View SKILL.md", "uninstall": "Uninstall", "uninstallTitle": "Uninstall Skill", "uninstallConfirm": "Are you sure you want to uninstall {{name}}? ", "cancel": "Cancel", "uninstalledSuccess": "Skill {{name}} uninstalled", "uninstallFailed": "Failed to uninstall: {{message}}", "revealFailed": "Failed to reveal in Finder: {{message}}", "loadFailed": "Failed to load skills", "loadContentFailed": "Error loading skill content: {{message}}", "noSkills": "No skills installed." }, "skillsSh": { "label": "skills.sh", "title": "Discover Skills", "desc": "Explore and install community skills to enhance your agents.", "searchPlaceholder": "Search skills (e.g. pr-review, react-best-practices)...", "install": "Install", "installSuccess": "Skill {{name}} installed", "installFailed": "Install failed", "noResults": "No skills found", "installs": "{{count}} installs", "installedStatus": "Installed", "authorPrefix": "by " } };
|
|
16888
16890
|
const contextMenu$1 = { "cut": "Cut", "copy": "Copy", "paste": "Paste", "selectAll": "Select All" };
|
|
16889
|
-
const settings$1 = { "themeDesc": "Customize the appearance of the application", "languageDesc": "Select the display language", "title": "Settings", "general": { "title": "General", "desc": "Manage your application settings.", "theme": "Theme", "light": "Light", "dark": "Dark", "system": "System", "language": "Language", "english": "English", "chinese": "简体中文", "saveThemeFailed": "Failed to save theme setting.", "saveLanguageFailed": "Failed to save language setting.", "groupAppearance": "Appearance", "groupProject": "Project", "autoWatchFiles": "Auto Watch Files", "autoWatchFilesDesc": "Automatically watch project file changes", "saveFileWatcherFailed": "Failed to save file watcher setting.", "groupSound": "Sound", "soundEnabled": "Sound Effects", "soundEnabledDesc": "Play sound effects for notifications", "soundVolume": "Volume", "soundVolumeDesc": "Adjust notification volume", "soundTheme": "Sound Style", "soundThemeDesc": "Select the sound effect style", "soundSoft": "Soft", "soundCrisp": "Crisp", "soundTest": "Test", "soundTestDesc": "Preview the current sound effect", "soundTestPlay": "Play", "saveSoundFailed": "Failed to save sound setting.", "groupEditor": "Editor", "editor": "Open in Editor", "editorDesc": "Choose the editor to open files", "selectEditor": "Select editor", "saveEditorFailed": "Failed to save editor setting." }, "agents": { "desc": "Manage agent configurations and startup commands.", "description": "Configure agents", "title": "Agents", "addAgent": "Add Agent", "addStdioAgent": "Add Stdio Agent", "addApiAgent": "Add API Agent", "editAgent": "Edit Agent", "dialogDesc": "Configure the agent ID, command, arguments and environment variables.", "apiDialogDesc": "Configure provider, endpoint and authentication for API agent.", "agentId": "Agent ID (Name)", "apiProvider": "Provider", "apiBaseUrl": "Base URL", "apiKey": "API Key", "apiHeaders": "Headers (JSON)", "contextWindowTokens": "Context Window (tokens)", "modelIdTemplate": "Model Id Template", "models": "Models (one per line)", "modelsHint": "Usually not needed — models are fetched automatically. Only specify if the API doesn't return the models you need", "command": "Command", "args": "Arguments", "envVars": "Environment Variables (JSON)", "envJson": "Environment Variables (JSON)", "cancel": "Cancel", "save": "Save", "edit": "Edit", "delete": "Delete", "dragToReorder": "Drag to reorder", "noAgents": "No agents configured", "errorIdCommand": "ID and Command are required.", "errorDuplicateId": "An agent with this ID already exists.", "errorEnvJson": "Env must be a valid JSON object.", "errorContextWindowTokens": "Context Window must be a positive integer.", "updateFailed": "Failed to update configuration.", "confirmDeleteTitle": "Delete Agent", "confirmDeleteDesc": "Are you sure you want to delete this agent? This action cannot be undone.", "confirmDeleteDescWithSessions": "Are you sure you want to delete this agent? {{count}} session(s) will also be deleted. This action cannot be undone.", "reset": "Reset Agent", "resetSuccess": "Agent reset.", "resetFailed": "Failed to reset agent.", "deleteAllSessions": "Delete All Sessions", "confirmDeleteAllSessionsTitle": "Delete All Sessions", "confirmDeleteAllSessionsDesc": "All sessions for this agent will be permanently deleted. This action cannot be undone.", "deleteAllSessionsSuccess": "{{count}} session(s) deleted.", "deleteAllSessionsFailed": "Failed to delete sessions.", "validation": { "enterId": "Please enter an agent ID.", "idFormat": "Only letters, numbers, _ and - allowed.", "selectProvider": "Please select a provider.", "enterBaseUrl": "Please enter a base URL.", "enterApiKey": "Please enter an API key.", "enterCommand": "Please enter a command.", "jsonObject": "Must be a valid JSON object with string values.", "positiveInteger": "Must be a positive integer." } }, "mcp": { "desc": "Manage MCP server configurations and startup commands.", "description": "Configure MCP Servers", "title": "MCP Servers", "addMcp": "Add MCP Server", "addStdioMcp": "Add Stdio MCP", "addHttpMcp": "Add HTTP MCP", "addSseMcp": "Add SSE MCP", "recommended": { "exa": { "name": "Exa", "desc": "Exa MCP Server — AI Web Search" } }, "editMcp": "Edit MCP Server", "dialogDesc": "Configure the MCP server ID, command, arguments and environment variables.", "mcpId": "MCP Server ID (Name)", "command": "Command", "args": "Arguments", "envVars": "Environment Variables (JSON)", "envJson": "Environment Variables (JSON)", "url": "URL", "headers": "Headers (JSON)", "headersJson": "Headers (JSON)", "httpDialogDesc": "Configure the MCP server ID, HTTP URL and request headers.", "sseDialogDesc": "Configure the MCP server ID, SSE endpoint URL and request headers.", "cancel": "Cancel", "save": "Save", "edit": "Edit", "delete": "Delete", "dragToReorder": "Drag to reorder", "noMcpServers": "No MCP servers configured", "errorIdRequired": "ID is required.", "errorUrlRequired": "URL is required.", "errorIdCommand": "ID and Command are required.", "errorDuplicateId": "An MCP server with this ID already exists.", "errorHeadersJson": "Headers must be a valid JSON object.", "errorEnvJson": "Env must be a valid JSON object.", "updateFailed": "Failed to update configuration.", "confirmDeleteTitle": "Delete MCP Server", "confirmDeleteDesc": "Are you sure you want to delete this MCP server? This action cannot be undone.", "validation": { "enterId": "Please enter a server ID.", "idFormat": "Only letters, numbers, _ and - allowed.", "enterCommand": "Please enter a command.", "enterUrl": "Please enter a URL.", "jsonObject": "Must be a valid JSON object with string values." } }, "webui": { "desc": "Configure remote access to the Fello interface.", "title": "WebUI", "enable": "Enable WebUI", "enableDesc": "Allow remote access to Fello interface via browser", "accessUrl": "Access URL", "accessDesc": "Note: This URL contains a temporary token. The WebUI will be disabled when you restart the application.", "enableAccess": "Enable WebUI Access", "port": "Port:", "token": "Token:", "autoGenerated": "Auto-generated", "copy": "Copy", "note": "Note: This URL contains a temporary token. The WebUI will be disabled when you restart the application.", "updateFailed": "Failed to update configuration.", "disabledInWebUI": "WebUI configuration is disabled when running inside the browser." }, "ilink": { "title": "WeChat iLink", "description": "Connect Fello to WeChat via iLink Bot API. Once connected, a ClawBot contact will appear in your WeChat, allowing you to chat with your AI agent from anywhere.", "connected": "Connected", "notConnected": "Not Connected", "notConnectedHint": "Scan QR code with WeChat to connect", "login": "Login", "loggingIn": "Waiting...", "disconnect": "Disconnect", "scanPrompt": "Scan with WeChat to login", "qrcodeExpired": "QR code expired, please try again", "scanned": "Scanned! Please confirm on your phone.", "browserOpened": "QR code opened in browser. Scan with WeChat to login.", "activeSession": "Active Session for WeChat", "activeSessionHint": "Messages from WeChat will be routed to this session. Right-click a session in the sidebar to set it as active.", "selectSession": "-- Select a session --", "none": "-- None --", "howItWorks": "How it works", "step1": 'Click "Login" to open the QR code in your browser', "step2": "Scan the QR code with WeChat", "step3": 'A "ClawBot" contact appears in your WeChat', "step4": "Chat with ClawBot — messages are routed to the active session above", "step5": "Right-click any session in the sidebar to set it as active for WeChat", "useOriginalImage": "Use Original Image", "useOriginalImageDesc": "Send full-size images to the model (uses more tokens). When off, thumbnails are used.", "keepaliveMaxCount": "Keepalive Messages", "keepaliveMaxCountDesc": "Max consecutive keepalive messages while thinking." }, "snippets": { "title": "Snippets", "desc": "Manage reusable text snippets for quick insertion.", "description": "Configure Snippets", "add": "Add Snippet", "edit": "Edit Snippet", "delete": "Delete", "save": "Save", "cancel": "Cancel", "empty": "No snippets configured", "saveFailed": "Failed to save snippets.", "titleLabel": "Title", "titlePlaceholder": "Title", "contentLabel": "Content", "contentPlaceholder": "Content", "dialogDesc": "Configure the snippet title and content.", "confirmDeleteTitle": "Delete Snippet", "confirmDeleteDesc": "Are you sure you want to delete this snippet? This action cannot be undone.", "validation": { "enterTitle": "Please enter a title.", "enterContent": "Please enter content." } }, "memory": { "title": "Memory", "desc": "View and manage persistent project-level memory.", "projectMemories": "Project Memories", "refresh": "Refresh", "clear": "Clear", "cleared": "Memory cleared.", "clearFailed": "Failed to clear memory.", "confirmClearTitle": "Clear Memory", "confirmClearDesc": 'Are you sure you want to clear all memory for project "{{title}}"? This cannot be undone.', "revealInFinder": "Reveal in Finder", "revealFailed": "Failed to reveal file.", "noFile": "No memory file found.", "noProjects": "No projects found.", "empty": "No memories stored.", "entries": "Entries" }, "imageGeneration": { "title": "Image Generation", "desc": "Configure image generation providers. The active provider will be available as a tool for agents.", "providers": "Providers", "add": "Add Provider", "addProvider": "Add Provider", "editProvider": "Edit Provider", "dialogDesc": "Configure provider, endpoint and authentication for image generation.", "edit": "Edit", "delete": "Delete", "empty": "No image generation providers configured", "updateFailed": "Failed to update configuration.", "confirmDeleteTitle": "Delete Provider", "confirmDeleteDesc": "Are you sure you want to delete this image generation provider?", "cancel": "Cancel", "save": "Save", "form": { "name": "Name", "provider": "Provider", "baseUrl": "Base URL", "baseUrlHint": "Request → {baseUrl}/images/generations", "apiKey": "API Key", "headers": "Headers (JSON)", "extraBody": "Extra Body (JSON)", "extraBodyHint": "Additional parameters merged into request body (e.g. quality, style).", "model": "Model" }, "validation": { "enterName": "Please enter a name.", "selectProvider": "Please select a provider.", "enterBaseUrl": "Please enter a base URL.", "enterApiKey": "Please enter an API key.", "enterModel": "Please enter the model name.", "jsonObject": "Must be a valid JSON object with string values." } } };
|
|
16891
|
+
const settings$1 = /* @__PURE__ */ JSON.parse(`{"themeDesc":"Customize the appearance of the application","languageDesc":"Select the display language","title":"Settings","general":{"title":"General","desc":"Manage your application settings.","theme":"Theme","light":"Light","dark":"Dark","system":"System","language":"Language","english":"English","chinese":"简体中文","saveThemeFailed":"Failed to save theme setting.","saveLanguageFailed":"Failed to save language setting.","groupAppearance":"Appearance","groupProject":"Project","autoWatchFiles":"Auto Watch Files","autoWatchFilesDesc":"Automatically watch project file changes","saveFileWatcherFailed":"Failed to save file watcher setting.","groupNetwork":"Network","proxy":"Network Proxy","proxyDesc":"Configure the network proxy used by Fello for Node requests, subprocesses and the UI.","proxyEdit":"Edit proxy settings","proxyOff":"Direct","proxySystem":"System","groupSound":"Sound","soundEnabled":"Sound Effects","soundEnabledDesc":"Play sound effects for notifications","soundVolume":"Volume","soundVolumeDesc":"Adjust notification volume","soundTheme":"Sound Style","soundThemeDesc":"Select the sound effect style","soundSoft":"Soft","soundCrisp":"Crisp","soundTest":"Test","soundTestDesc":"Preview the current sound effect","soundTestPlay":"Play","saveSoundFailed":"Failed to save sound setting.","groupEditor":"Editor","editor":"Open in Editor","editorDesc":"Choose the editor to open files","selectEditor":"Select editor","saveEditorFailed":"Failed to save editor setting."},"agents":{"desc":"Manage agent configurations and startup commands.","description":"Configure agents","title":"Agents","addAgent":"Add Agent","addStdioAgent":"Add Stdio Agent","addApiAgent":"Add API Agent","editAgent":"Edit Agent","dialogDesc":"Configure the agent ID, command, arguments and environment variables.","apiDialogDesc":"Configure provider, endpoint and authentication for API agent.","agentId":"Agent ID (Name)","apiProvider":"Provider","apiBaseUrl":"Base URL","apiKey":"API Key","apiHeaders":"Headers (JSON)","contextWindowTokens":"Context Window (tokens)","modelIdTemplate":"Model Id Template","models":"Models (one per line)","modelsHint":"Usually not needed — models are fetched automatically. Only specify if the API doesn't return the models you need","command":"Command","args":"Arguments","envVars":"Environment Variables (JSON)","envJson":"Environment Variables (JSON)","cancel":"Cancel","save":"Save","edit":"Edit","delete":"Delete","dragToReorder":"Drag to reorder","noAgents":"No agents configured","errorIdCommand":"ID and Command are required.","errorDuplicateId":"An agent with this ID already exists.","errorEnvJson":"Env must be a valid JSON object.","errorContextWindowTokens":"Context Window must be a positive integer.","updateFailed":"Failed to update configuration.","confirmDeleteTitle":"Delete Agent","confirmDeleteDesc":"Are you sure you want to delete this agent? This action cannot be undone.","confirmDeleteDescWithSessions":"Are you sure you want to delete this agent? {{count}} session(s) will also be deleted. This action cannot be undone.","reset":"Reset Agent","resetSuccess":"Agent reset.","resetFailed":"Failed to reset agent.","deleteAllSessions":"Delete All Sessions","confirmDeleteAllSessionsTitle":"Delete All Sessions","confirmDeleteAllSessionsDesc":"All sessions for this agent will be permanently deleted. This action cannot be undone.","deleteAllSessionsSuccess":"{{count}} session(s) deleted.","deleteAllSessionsFailed":"Failed to delete sessions.","validation":{"enterId":"Please enter an agent ID.","idFormat":"Only letters, numbers, _ and - allowed.","selectProvider":"Please select a provider.","enterBaseUrl":"Please enter a base URL.","enterApiKey":"Please enter an API key.","enterCommand":"Please enter a command.","jsonObject":"Must be a valid JSON object with string values.","positiveInteger":"Must be a positive integer."}},"mcp":{"desc":"Manage MCP server configurations and startup commands.","description":"Configure MCP Servers","title":"MCP Servers","addMcp":"Add MCP Server","addStdioMcp":"Add Stdio MCP","addHttpMcp":"Add HTTP MCP","addSseMcp":"Add SSE MCP","recommended":{"exa":{"name":"Exa","desc":"Exa MCP Server — AI Web Search"}},"editMcp":"Edit MCP Server","dialogDesc":"Configure the MCP server ID, command, arguments and environment variables.","mcpId":"MCP Server ID (Name)","command":"Command","args":"Arguments","envVars":"Environment Variables (JSON)","envJson":"Environment Variables (JSON)","url":"URL","headers":"Headers (JSON)","headersJson":"Headers (JSON)","httpDialogDesc":"Configure the MCP server ID, HTTP URL and request headers.","sseDialogDesc":"Configure the MCP server ID, SSE endpoint URL and request headers.","cancel":"Cancel","save":"Save","edit":"Edit","delete":"Delete","dragToReorder":"Drag to reorder","noMcpServers":"No MCP servers configured","errorIdRequired":"ID is required.","errorUrlRequired":"URL is required.","errorIdCommand":"ID and Command are required.","errorDuplicateId":"An MCP server with this ID already exists.","errorHeadersJson":"Headers must be a valid JSON object.","errorEnvJson":"Env must be a valid JSON object.","updateFailed":"Failed to update configuration.","confirmDeleteTitle":"Delete MCP Server","confirmDeleteDesc":"Are you sure you want to delete this MCP server? This action cannot be undone.","validation":{"enterId":"Please enter a server ID.","idFormat":"Only letters, numbers, _ and - allowed.","enterCommand":"Please enter a command.","enterUrl":"Please enter a URL.","jsonObject":"Must be a valid JSON object with string values."}},"webui":{"desc":"Configure remote access to the Fello interface.","title":"WebUI","enable":"Enable WebUI","enableDesc":"Allow remote access to Fello interface via browser","accessUrl":"Access URL","accessDesc":"Note: This URL contains a temporary token. The WebUI will be disabled when you restart the application.","enableAccess":"Enable WebUI Access","port":"Port:","token":"Token:","autoGenerated":"Auto-generated","copy":"Copy","note":"Note: This URL contains a temporary token. The WebUI will be disabled when you restart the application.","updateFailed":"Failed to update configuration.","disabledInWebUI":"WebUI configuration is disabled when running inside the browser."},"ilink":{"title":"WeChat iLink","description":"Connect Fello to WeChat via iLink Bot API. Once connected, a ClawBot contact will appear in your WeChat, allowing you to chat with your AI agent from anywhere.","connected":"Connected","notConnected":"Not Connected","notConnectedHint":"Scan QR code with WeChat to connect","login":"Login","loggingIn":"Waiting...","disconnect":"Disconnect","scanPrompt":"Scan with WeChat to login","qrcodeExpired":"QR code expired, please try again","scanned":"Scanned! Please confirm on your phone.","browserOpened":"QR code opened in browser. Scan with WeChat to login.","activeSession":"Active Session for WeChat","activeSessionHint":"Messages from WeChat will be routed to this session. Right-click a session in the sidebar to set it as active.","selectSession":"-- Select a session --","none":"-- None --","howItWorks":"How it works","step1":"Click \\"Login\\" to open the QR code in your browser","step2":"Scan the QR code with WeChat","step3":"A \\"ClawBot\\" contact appears in your WeChat","step4":"Chat with ClawBot — messages are routed to the active session above","step5":"Right-click any session in the sidebar to set it as active for WeChat","useOriginalImage":"Use Original Image","useOriginalImageDesc":"Send full-size images to the model (uses more tokens). When off, thumbnails are used.","keepaliveMaxCount":"Keepalive Messages","keepaliveMaxCountDesc":"Max consecutive keepalive messages while thinking."},"snippets":{"title":"Snippets","desc":"Manage reusable text snippets for quick insertion.","description":"Configure Snippets","add":"Add Snippet","edit":"Edit Snippet","delete":"Delete","save":"Save","cancel":"Cancel","empty":"No snippets configured","saveFailed":"Failed to save snippets.","titleLabel":"Title","titlePlaceholder":"Title","contentLabel":"Content","contentPlaceholder":"Content","dialogDesc":"Configure the snippet title and content.","confirmDeleteTitle":"Delete Snippet","confirmDeleteDesc":"Are you sure you want to delete this snippet? This action cannot be undone.","validation":{"enterTitle":"Please enter a title.","enterContent":"Please enter content."}},"memory":{"title":"Memory","desc":"View and manage persistent project-level memory.","projectMemories":"Project Memories","refresh":"Refresh","clear":"Clear","cleared":"Memory cleared.","clearFailed":"Failed to clear memory.","delete":"Delete","deleted":"Memory entry deleted.","deleteFailed":"Failed to delete memory entry.","confirmDeleteTitle":"Delete Memory Entry","confirmDeleteDesc":"Are you sure you want to delete this memory entry? This cannot be undone.","confirmClearTitle":"Clear Memory","confirmClearDesc":"Are you sure you want to clear all memory for project \\"{{title}}\\"? This cannot be undone.","revealInFinder":"Reveal in Finder","revealFailed":"Failed to reveal file.","noFile":"No memory file found.","noProjects":"No projects found.","empty":"No memories stored.","entries":"Entries"},"imageGeneration":{"title":"Image Generation","desc":"Configure image generation providers. The active provider will be available as a tool for agents.","providers":"Providers","add":"Add Provider","addProvider":"Add Provider","editProvider":"Edit Provider","dialogDesc":"Configure provider, endpoint and authentication for image generation.","edit":"Edit","delete":"Delete","empty":"No image generation providers configured","updateFailed":"Failed to update configuration.","confirmDeleteTitle":"Delete Provider","confirmDeleteDesc":"Are you sure you want to delete this image generation provider?","cancel":"Cancel","save":"Save","form":{"name":"Name","provider":"Provider","baseUrl":"Base URL","baseUrlHint":"Request → {baseUrl}/images/generations","apiKey":"API Key","headers":"Headers (JSON)","extraBody":"Extra Body (JSON)","extraBodyHint":"Additional parameters merged into request body (e.g. quality, style).","model":"Model"},"validation":{"enterName":"Please enter a name.","selectProvider":"Please select a provider.","enterBaseUrl":"Please enter a base URL.","enterApiKey":"Please enter an API key.","enterModel":"Please enter the model name.","jsonObject":"Must be a valid JSON object with string values."}},"proxy":{"title":"Network Proxy","mode":"Proxy Mode","off":"Direct","offDesc":"Connect directly without a proxy","manual":"Manual","manualDesc":"Specify a proxy server manually for all network requests","system":"System","systemDesc":"Use the system proxy settings (macOS/Windows or environment variables)","httpProxy":"HTTP Proxy","httpProxyPlaceholder":"e.g. http://127.0.0.1:7890","httpsProxy":"HTTPS Proxy (optional)","httpsProxyHint":"Falls back to the HTTP proxy when empty.","noProxy":"No Proxy (optional)","noProxyPlaceholder":"e.g. localhost,127.0.0.1,*.internal","username":"Username (optional)","password":"Password (optional)","cancel":"Cancel","save":"Save","later":"Later","restartNow":"Restart Now","restartTitle":"Restart Required","restartDesc":"Proxy settings saved. Restart Fello to apply the new proxy configuration.","restartManualDesc":"Proxy settings saved. Please manually restart the Fello server process to apply the new configuration.","saveFailed":"Failed to save proxy settings.","validation":{"httpProxyRequired":"HTTP proxy URL is required in manual mode.","invalidProxyUrl":"{{field}} should start with http:// or https://, or use a host:port address (e.g. 127.0.0.1:7890)."}}}`);
|
|
16890
16892
|
const chat$1 = { "failedToLoadSession": "Failed to load session.", "failedToUpdateMcpServers": "Failed to update MCP servers." };
|
|
16891
16893
|
const planBubble$1 = { "title": "Plan", "summary": "{{completed}} / {{total}} completed", "status": { "pending": "Pending", "inProgress": "In progress", "completed": "Completed" }, "priority": { "high": "High", "medium": "Medium", "low": "Low" } };
|
|
16892
16894
|
const constant$5 = { "feature": { "title": "Features", "askUser": "Ask Me", "skills": "Skills", "shareToUser": "Share to User", "search": "Search", "memory": "Memory", "imageGeneration": "Image Generation" } };
|
|
16893
16895
|
const chatHeader$1 = { "sessionId": "Session", "openSessionFolder": "Open Session Folder", "refresh": "Restart Session", "closeSession": "Close Session", "closingSession": "Closing…", "failedToCloseSession": "Failed to close session.", "contextWindow": "Context Window", "used": "Used", "size": "Size", "percentUsed": "{{pct}}% used", "remaining": "{{count}} remaining", "lastTurn": "Last Turn", "input": "Input", "output": "Output", "total": "Total", "thought": "Thought", "cacheRead": "Cache read", "cacheWrite": "Cache write", "cost": "Cost" };
|
|
16894
16896
|
const chatInput$1 = { "placeholderDisabled": "Start a new chat to begin...", "placeholderActive": "Ask anything... (Enter to send)", "mode": "Mode", "suggestions": "Suggestions", "messageInput": "Message input", "stop": "Stop", "send": "Send", "tokensUsage": "In: {{input}} Out: {{output}} Total: {{total}}{{thoughtStr}}", "tokensTotal": "{{total}}k tokens", "generationFailed": "Generation failed.", "attach": "Attach file", "snippets": "Snippets", "snippetsEmpty": "No snippets. Click to add in Settings.", "selectModel": "Select model", "stopReasonMaxTokens": "Reached maximum token limit", "stopReasonMaxTurnRequests": "Reached maximum turn limit", "stopReasonRefusal": "Model refused to respond", "stopReasonCancelled": "Generation was cancelled" };
|
|
16895
16897
|
const filePanel$1 = { "title": "Files", "emptyDirectory": "Empty directory", "newFile": "New File", "newFolder": "New Folder", "rename": "Rename", "copyPath": "Copy Path", "copyRelativePath": "Copy Relative Path", "revealInFinder": "Reveal in Finder", "openInEditor": "Open in {{editor}}", "delete": "Delete", "deleteConfirmSingle": 'How would you like to delete "{{name}}"?', "deleteConfirmMultiple": "How would you like to delete {{count}} items?", "dragItems": "{{count}} items", "cancel": "Cancel", "moveToTrash": "Move to Trash", "moveToRecycleBin": "Move to Recycle Bin", "moveConfirmTitle": "Move", "moveConfirmSingle": 'Move "{{name}}" to "{{dest}}"?', "moveConfirmMultiple": 'Move {{count}} items to "{{dest}}"?', "moveConfirmSingleToRoot": 'Move "{{name}}" to the root directory?', "moveConfirmMultipleToRoot": "Move {{count}} items to the root directory?", "loading": "Loading...", "collapseFolders": "Collapse Folders", "refresh": "Refresh", "addToChat": "Add to Chat", "noProject": "No project selected" };
|
|
16896
|
-
const toolBubble$1 = { "tool": "Tool", "stop": "Stop", "stopping": "Stopping…" };
|
|
16898
|
+
const toolBubble$1 = { "tool": "Tool", "stop": "Stop", "stopping": "Stopping…", "result": "Result", "terminal": "Terminal" };
|
|
16897
16899
|
const imageView$1 = { "fallbackAlt": "Image" };
|
|
16898
16900
|
const readonlyTerminal$1 = { "noOutput": "No output" };
|
|
16899
16901
|
const message$1 = { "validationFailed": "Validation failed", "ok": "OK", "cancel": "Cancel", "confirm": "Confirm", "dialogTitle": "Message Dialog", "errorTitle": "Error" };
|
|
@@ -16914,7 +16916,7 @@ const detail$1 = { "noContent": "No content" };
|
|
|
16914
16916
|
const fileDetail$1 = { "fileNotFound": "File not found", "fileTooLarge": "File is too large to preview", "fileFormatNotSupported": "File format not supported for preview", "errorLoading": "Error loading file", "loading": "Loading...", "noChanges": "No changes detected", "resetZoom": "Reset", "preview": "Preview", "code": "Code", "compare": "Compare", "fileModifiedNotice": "File modified. Please refresh.", "copyFileContent": "Copy File Content", "addFileToChat": "Add File to Chat", "addSelectionToChat": "Add Selection to Chat", "loadError": "Failed to load", "zoomOut": "Zoom out", "zoomIn": "Zoom in", "previousPage": "Previous page", "nextPage": "Next page", "previousSlide": "Previous slide", "nextSlide": "Next slide", "speakerNotes": "Notes", "closeNotes": "Close" };
|
|
16915
16917
|
const htmlDetail$1 = { "fileNotFound": "File not found or inaccessible", "errorLoading": "Failed to load", "loadFailed": "Page load failed", "retry": "Retry", "openInBrowser": "Open in browser", "webuiNotEnabled": "Enable WebUI first to open in browser", "open": "Open", "refresh": "Refresh" };
|
|
16916
16918
|
const welcome$1 = { "title": "Fello", "desc": "Yet another Agent client based on the ACP protocol. Connect with the agent and begin collaborating.", "hint": "Start a new chat from the sidebar", "getStarted": "Get Started", "stepAgent": "Configure Agent", "stepAgentDesc": "Add an AI agent (Stdio or API) to power your conversations", "stepAgentDone": "{{count}} agent(s) configured", "stepProject": "Add Project", "stepProjectDesc": "Select a local project folder as your workspace", "stepProjectDone": "{{count}} project(s) added", "stepChat": "Start Chat", "stepChatDesc": "Create a new AI conversation in your project", "allDone": "All set! Start a new chat from the sidebar" };
|
|
16917
|
-
const askUser$1 = { "title": "Request", "other": "Other...", "back": "Back", "inputPlaceholder": "Type your response... (Enter to send)", "submit": "Submit" };
|
|
16919
|
+
const askUser$1 = { "title": "Request", "other": "Other...", "back": "Back", "inputPlaceholder": "Type your response... (Enter to send)", "submit": "Submit", "autoClose": "Auto closes on timeout" };
|
|
16918
16920
|
const shareToUser$1 = { "copyToProject": "Copy to project", "reveal": "Reveal in Finder", "loadFailed": "Failed to load image", "download": "Download" };
|
|
16919
16921
|
const imageGeneration$1 = { "copyToProject": "Copy to project", "reveal": "Reveal in Finder", "loadFailed": "Failed to load image", "download": "Download" };
|
|
16920
16922
|
const automation$1 = { "title": "Automation", "agent": "Agent", "alwaysDisabled": "always disabled", "anyMoment": "Any moment now", "back": "Back", "cancel": "Cancel", "create": "Create", "createFirst": "Create your first schedule", "delete": "Delete", "deleteConfirm": 'Delete "{{name}}" permanently?', "deleteTaskConfirm": "Delete this task permanently?", "deleteTaskTitle": "Delete Task", "deleteTitle": "Delete Schedule", "dialogDesc": "Configure the automated task schedule and prompt.", "editSchedule": "Edit Schedule", "editSettings": "Edit settings", "features": "Features", "files": "Files", "lastRun": "Last", "lessThanMinute": "Less than 1 min", "manual": "Manual", "manualDesc": "Manual trigger only. No automatic scheduling.", "mcpServers": "MCP Servers", "model": "Model", "modelPlaceholder": "Default model", "newSchedule": "New Schedule", "nextRun": "Next", "noFiles": "No files generated", "noSchedules": "No schedules yet", "emptyHint": "Schedule AI tasks to run automatically with cron expressions", "noTasksDesc": 'No runs yet. Click "Trigger now" to start the first run.', "prompt": "Prompt", "promptPlaceholder": "What should the agent do?", "save": "Save", "schedule": "Schedule", "scheduleName": "Schedule Name", "scheduleNamePlaceholder": "e.g. Morning Standup Summary", "scheduleNotFound": "Schedule not found", "schedules": "schedules", "selectFileToPreview": "Select a file to preview", "selectTaskToPreview": "Select a task to preview files", "selectTask": "Select a task", "timedExecution": "Timed (cron)", "triggerNow": "Trigger now", "validation": { "nameRequired": "Name is required", "agentRequired": "Agent is required", "promptRequired": "Prompt is required" }, "cron": { "at": "at", "atMinute": "at min", "custom": "Custom", "daily": "Every day", "hourly": "Every N hours", "weekdays": "Weekdays", "weekly": "Every week", "nextRun": "Next run", "nextRunIn": "Next run in", "lastRun": "Last run", "days": { "0": "Sun", "1": "Mon", "2": "Tue", "3": "Wed", "4": "Thu", "5": "Fri", "6": "Sat" } } };
|
|
@@ -16955,17 +16957,17 @@ const en$8 = {
|
|
|
16955
16957
|
imageGeneration: imageGeneration$1,
|
|
16956
16958
|
automation: automation$1
|
|
16957
16959
|
};
|
|
16958
|
-
const sidebar = { "welcome": "欢迎使用", "skills": "技能", "automation": "自动化", "projects": "项目", "noProjects": "暂无项目", "noProjectsHint": "添加一个项目文件夹开始", "addProject": "添加项目", "noAgentsHint": "请先配置 Agent", "configureAgent": "配置 Agent", "revealInFinder": "在访达中显示", "rename": "重命名", "delete": "删除", "renameProject": "重命名项目", "renameChat": "重命名会话", "deleteChat": "删除会话", "enterNewProjectName": "请输入新的项目名称。", "enterNewChatName": "请输入新的会话名称。", "addProjectTitle": "添加项目", "enterProjectPath": "请输入服务器上的项目绝对路径:", "pathCannotBeEmpty": "路径不能为空", "webuiEnabled": "已启用 WebUI", "deleteProject": "删除项目", "deleteProjectConfirm": "是否删除项目“{{title}}”及其所有会话?\n此操作无法撤销。", "deleteChatConfirm": "是否删除会话“{{title}}”?\n此操作无法撤销。", "cancel": "取消", "save": "保存", "settings": "设置", "agents": "智能体", "addProjectFailed": "添加项目失败。", "newChatFailed": "创建新会话失败。", "loadSessionFailed": "加载会话失败。", "revealInFinderFailed": "在访达中显示失败。", "projectExists": "项目已存在。", "projectNameEmpty": "项目名称不能为空。", "chatNameEmpty": "会话名称不能为空。", "newChat": "新会话", "projectActions": "项目操作:{{title}}", "createChatInProject": "在 {{title}} 中创建会话", "chatActions": "会话操作:{{title}}", "ilinkSetActive": "设为微信活跃会话", "ilinkUnsetActive": "取消微信活跃", "collapse": "收起侧边栏", "expand": "展开侧边栏", "newSessionDialog": { "title": "新建会话", "agent": "智能体", "selectAgent": "选择智能体", "mcp": "MCP", "noMcp": "未配置 MCP 服务器", "permission": "权限", "permissionAsk": "每次询问", "permissionAllowAll": "全部允许", "create": "创建" } };
|
|
16960
|
+
const sidebar = { "welcome": "欢迎使用", "skills": "技能", "automation": "自动化", "projects": "项目", "noProjects": "暂无项目", "noProjectsHint": "添加一个项目文件夹开始", "addProject": "添加项目", "noAgentsHint": "请先配置 Agent", "configureAgent": "配置 Agent", "revealInFinder": "在访达中显示", "rename": "重命名", "delete": "删除", "renameProject": "重命名项目", "renameChat": "重命名会话", "deleteChat": "删除会话", "enterNewProjectName": "请输入新的项目名称。", "enterNewChatName": "请输入新的会话名称。", "addProjectTitle": "添加项目", "enterProjectPath": "请输入服务器上的项目绝对路径:", "pathCannotBeEmpty": "路径不能为空", "webuiEnabled": "已启用 WebUI", "deleteProject": "删除项目", "deleteProjectConfirm": "是否删除项目“{{title}}”及其所有会话?\n此操作无法撤销。", "deleteChatConfirm": "是否删除会话“{{title}}”?\n此操作无法撤销。", "cancel": "取消", "save": "保存", "settings": "设置", "agents": "智能体", "addProjectFailed": "添加项目失败。", "newChatFailed": "创建新会话失败。", "loadSessionFailed": "加载会话失败。", "revealInFinderFailed": "在访达中显示失败。", "projectExists": "项目已存在。", "projectNameEmpty": "项目名称不能为空。", "chatNameEmpty": "会话名称不能为空。", "newChat": "新会话", "projectActions": "项目操作:{{title}}", "createChatInProject": "在 {{title}} 中创建会话", "chatActions": "会话操作:{{title}}", "ilinkSetActive": "设为微信活跃会话", "ilinkUnsetActive": "取消微信活跃", "collapse": "收起侧边栏", "expand": "展开侧边栏", "updated": "更新于", "created": "创建于", "newSessionDialog": { "title": "新建会话", "agent": "智能体", "selectAgent": "选择智能体", "mcp": "MCP", "noMcp": "未配置 MCP 服务器", "permission": "权限", "permissionAsk": "每次询问", "permissionAllowAll": "全部允许", "create": "创建" } };
|
|
16959
16961
|
const skills = { "title": "技能", "installed": { "label": "已安装", "noDescription": "暂无描述。", "revealInFinder": "在访达中显示", "viewSkill": "查看 SKILL.md", "uninstall": "卸载", "uninstallTitle": "卸载技能", "uninstallConfirm": "确定要卸载 {{name}} 吗?", "cancel": "取消", "uninstalledSuccess": "技能 {{name}} 已卸载", "uninstallFailed": "卸载失败:{{message}}", "revealFailed": "在访达中显示失败:{{message}}", "loadFailed": "加载技能失败", "loadContentFailed": "加载技能内容出错:{{message}}", "noSkills": "暂无安装的技能" }, "skillsSh": { "label": "skills.sh", "title": "探索技能", "desc": "浏览并安装社区提供的技能,以增强你的 Agent 能力。", "searchPlaceholder": "搜索技能(例如:pr-review, react-best-practices)...", "install": "安装", "installSuccess": "技能 {{name}} 已安装", "installFailed": "安装失败", "noResults": "未找到相关技能", "installs": "{{count}} 次安装", "installedStatus": "已安装", "authorPrefix": "作者: " } };
|
|
16960
16962
|
const contextMenu = { "cut": "剪切", "copy": "复制", "paste": "粘贴", "selectAll": "全选" };
|
|
16961
|
-
const settings = { "themeDesc": "自定义应用的外观", "languageDesc": "选择应用显示的语言", "title": "设置", "general": { "title": "通用", "desc": "管理应用设置。", "theme": "主题", "light": "浅色", "dark": "深色", "system": "跟随系统", "language": "语言", "english": "English", "chinese": "简体中文", "saveThemeFailed": "保存主题设置失败。", "saveLanguageFailed": "保存语言设置失败。", "groupAppearance": "外观", "groupProject": "项目", "autoWatchFiles": "自动监听文件", "autoWatchFilesDesc": "自动监听项目文件变更", "saveFileWatcherFailed": "保存文件监听设置失败。", "groupSound": "音效", "soundEnabled": "音效", "soundEnabledDesc": "播放通知音效", "soundVolume": "音量", "soundVolumeDesc": "调整通知音量", "soundTheme": "音效风格", "soundThemeDesc": "选择音效风格", "soundSoft": "柔和", "soundCrisp": "清脆", "soundTest": "试听", "soundTestDesc": "预览当前音效效果", "soundTestPlay": "播放", "saveSoundFailed": "保存音效设置失败。", "groupEditor": "编辑器", "editor": "使用编辑器打开", "editorDesc": "选择用于打开文件的编辑器", "selectEditor": "选择编辑器", "saveEditorFailed": "保存编辑器设置失败。" }, "agents": { "desc": "管理智能体的配置和启动命令。", "description": "配置智能体", "title": "智能体", "addAgent": "添加智能体", "addStdioAgent": "添加 Stdio Agent", "addApiAgent": "添加 API Agent", "editAgent": "编辑智能体", "dialogDesc": "配置智能体 ID、命令、参数和环境变量。", "apiDialogDesc": "配置 API 智能体的提供商、端点和认证信息。", "agentId": "智能体 ID (名称)", "apiProvider": "提供商", "apiBaseUrl": "Base URL", "apiKey": "API Key", "apiHeaders": "请求头 (JSON)", "contextWindowTokens": "上下文窗口 (token)", "modelIdTemplate": "Model Id 模版", "models": "模型列表 (每行一个)", "modelsHint": "通常无需填写,会自动获取。仅在接口未返回所需模型时手动指定", "command": "命令", "args": "参数", "envVars": "环境变量 (JSON)", "envJson": "环境变量 (JSON)", "cancel": "取消", "save": "保存", "edit": "编辑", "delete": "删除", "dragToReorder": "拖拽排序", "noAgents": "未配置任何智能体", "errorIdCommand": "ID 和命令不能为空。", "errorDuplicateId": "已存在具有该 ID 的智能体。", "errorEnvJson": "环境变量必须是有效的 JSON 对象。", "errorContextWindowTokens": "上下文窗口必须为正整数。", "updateFailed": "更新配置失败。", "confirmDeleteTitle": "删除智能体", "confirmDeleteDesc": "确定要删除此智能体吗?此操作无法撤销。", "confirmDeleteDescWithSessions": "确定要删除此智能体吗?{{count}} 个会话也将被同时删除。此操作无法撤销。", "reset": "重置智能体", "resetSuccess": "智能体已重置。", "resetFailed": "重置智能体失败。", "deleteAllSessions": "删除所有会话", "confirmDeleteAllSessionsTitle": "删除所有会话", "confirmDeleteAllSessionsDesc": "此智能体的所有会话将被永久删除。此操作无法撤销。", "deleteAllSessionsSuccess": "已删除 {{count}} 个会话。", "deleteAllSessionsFailed": "删除会话失败。", "validation": { "enterId": "请输入智能体 ID。", "idFormat": "只允许字母、数字、_ 和 -。", "selectProvider": "请选择提供商。", "enterBaseUrl": "请输入 Base URL。", "enterApiKey": "请输入 API Key。", "enterCommand": "请输入命令。", "jsonObject": "必须是有效的 JSON 对象(值为字符串)。", "positiveInteger": "必须为正整数。" } }, "mcp": { "desc": "管理 MCP 服务器的配置和启动命令。", "description": "配置 MCP 服务器", "title": "MCP 服务器", "addMcp": "添加 MCP 服务器", "addStdioMcp": "添加 Stdio MCP", "addHttpMcp": "添加 HTTP MCP", "addSseMcp": "添加 SSE MCP", "recommended": { "exa": { "name": "Exa", "desc": "Exa MCP 服务器 — AI 网络搜索" } }, "editMcp": "编辑 MCP 服务器", "dialogDesc": "配置 MCP 服务器 ID、命令、参数和环境变量。", "mcpId": "MCP 服务器 ID (名称)", "command": "命令", "args": "参数", "envVars": "环境变量 (JSON)", "envJson": "环境变量 (JSON)", "url": "URL", "headers": "请求头 (JSON)", "headersJson": "请求头 (JSON)", "httpDialogDesc": "配置 MCP 服务器 ID、HTTP URL 和请求头。", "sseDialogDesc": "配置 MCP 服务器 ID、SSE 端点 URL 和请求头。", "cancel": "取消", "save": "保存", "edit": "编辑", "delete": "删除", "dragToReorder": "拖拽排序", "noMcpServers": "未配置任何 MCP 服务器", "errorIdRequired": "ID 不能为空。", "errorUrlRequired": "URL 不能为空。", "errorIdCommand": "ID 和命令不能为空。", "errorDuplicateId": "已存在具有该 ID 的 MCP 服务器。", "errorHeadersJson": "请求头必须是有效的 JSON 对象。", "errorEnvJson": "环境变量必须是有效的 JSON 对象。", "updateFailed": "更新配置失败。", "confirmDeleteTitle": "删除 MCP 服务器", "confirmDeleteDesc": "确定要删除此 MCP 服务器吗?此操作无法撤销。", "validation": { "enterId": "请输入服务器 ID。", "idFormat": "只允许字母、数字、_ 和 -。", "enterCommand": "请输入命令。", "enterUrl": "请输入 URL。", "jsonObject": "必须是有效的 JSON 对象(值为字符串)。" } }, "webui": { "desc": "配置对 Fello 界面的远程访问。", "title": "WebUI", "enable": "启用 WebUI", "enableDesc": "允许通过浏览器远程访问 Fello 界面", "enableAccess": "启用 WebUI 访问", "port": "端口:", "token": "Token:", "autoGenerated": "自动生成", "accessUrl": "访问地址", "accessDesc": "注意:此地址包含临时访问令牌,应用重启后将失效。", "copy": "复制", "note": "注意:此地址包含临时访问令牌,应用重启后将失效。", "updateFailed": "更新配置失败。", "disabledInWebUI": "WebUI 配置在浏览器中不可用。" }, "ilink": { "title": "微信 iLink", "description": "通过 iLink Bot API 将 Fello 接入微信。连接后,微信中会出现一个 ClawBot 联系人,你可以随时随地与 AI 智能体对话。", "connected": "已连接", "notConnected": "未连接", "notConnectedHint": "使用微信扫描二维码连接", "login": "登录", "loggingIn": "等待扫码...", "disconnect": "断开连接", "scanPrompt": "使用微信扫描二维码登录", "qrcodeExpired": "二维码已过期,请重新获取", "scanned": "已扫码!请在手机上确认登录。", "browserOpened": "二维码已在浏览器中打开,请使用微信扫码登录。", "activeSession": "微信活跃会话", "activeSessionHint": "微信消息将路由到此会话。可在侧边栏右键会话设为活跃。", "selectSession": "-- 选择一个会话 --", "none": "-- 无 --", "howItWorks": "使用说明", "step1": "点击「登录」在浏览器中打开二维码", "step2": "使用微信扫描二维码", "step3": "微信中出现「ClawBot」联系人", "step4": "与 ClawBot 聊天 — 消息将路由到上方选择的活跃会话", "step5": "在侧边栏右键任意会话即可设为微信活跃会话", "useOriginalImage": "使用原图", "useOriginalImageDesc": "向模型发送原始大小的图片(消耗更多 token)。关闭时使用缩略图。", "keepaliveMaxCount": "保活消息", "keepaliveMaxCountDesc": "AI 思考时最大连续保活消息数。" }, "snippets": { "title": "快捷短语", "desc": "管理可复用的文本片段,快速插入到对话中。", "description": "配置快捷短语", "add": "添加短语", "edit": "编辑短语", "delete": "删除", "save": "保存", "cancel": "取消", "empty": "暂无快捷短语", "saveFailed": "保存快捷短语失败。", "titleLabel": "标题", "titlePlaceholder": "标题", "contentLabel": "内容", "contentPlaceholder": "内容", "dialogDesc": "配置短语的标题和内容。", "confirmDeleteTitle": "删除短语", "confirmDeleteDesc": "确定要删除此短语吗?此操作无法撤销。", "validation": { "enterTitle": "请输入标题。", "enterContent": "请输入内容。" } }, "memory": { "title": "记忆", "desc": "查看和管理项目级持久化记忆。", "projectMemories": "项目记忆", "refresh": "刷新", "clear": "清除", "cleared": "记忆已清除。", "clearFailed": "清除记忆失败。", "confirmClearTitle": "清除记忆", "confirmClearDesc": '确定要清除项目 "{{title}}" 的所有记忆吗?此操作不可撤销。', "revealInFinder": "在访达中显示", "revealFailed": "显示文件失败。", "noFile": "未找到记忆文件。", "noProjects": "未找到项目。", "empty": "暂无记忆。", "entries": "条目" }, "imageGeneration": { "title": "图片生成", "desc": "配置图片生成服务提供商。激活的提供商将作为工具供 Agent 使用。", "providers": "提供商", "add": "添加提供商", "addProvider": "添加提供商", "editProvider": "编辑提供商", "dialogDesc": "配置图片生成的提供商、端点和认证信息。", "edit": "编辑", "delete": "删除", "empty": "尚未配置图片生成提供商", "updateFailed": "更新配置失败。", "confirmDeleteTitle": "删除提供商", "confirmDeleteDesc": "确定要删除此图片生成提供商吗?", "cancel": "取消", "save": "保存", "form": { "name": "名称", "provider": "提供商", "baseUrl": "Base URL", "baseUrlHint": "请求将发送至 {baseUrl}/images/generations", "apiKey": "API Key", "headers": "请求头 (JSON)", "extraBody": "额外参数 (JSON)", "extraBodyHint": "合并到请求体中的额外参数(如 quality、style 等厂商特有参数)。", "model": "模型" }, "validation": { "enterName": "请输入名称。", "selectProvider": "请选择提供商。", "enterBaseUrl": "请输入 Base URL。", "enterApiKey": "请输入 API Key。", "enterModel": "请输入模型名称。", "jsonObject": "必须是有效的 JSON 对象(值为字符串)。" } } };
|
|
16963
|
+
const settings = { "themeDesc": "自定义应用的外观", "languageDesc": "选择应用显示的语言", "title": "设置", "general": { "title": "通用", "desc": "管理应用设置。", "theme": "主题", "light": "浅色", "dark": "深色", "system": "跟随系统", "language": "语言", "english": "English", "chinese": "简体中文", "saveThemeFailed": "保存主题设置失败。", "saveLanguageFailed": "保存语言设置失败。", "groupAppearance": "外观", "groupProject": "项目", "autoWatchFiles": "自动监听文件", "autoWatchFilesDesc": "自动监听项目文件变更", "saveFileWatcherFailed": "保存文件监听设置失败。", "groupNetwork": "网络", "proxy": "网络代理", "proxyDesc": "配置 Fello 的网络代理,应用于 Node 请求、子进程与界面。", "proxyEdit": "修改代理设置", "proxyOff": "直连", "proxySystem": "跟随系统", "groupSound": "音效", "soundEnabled": "音效", "soundEnabledDesc": "播放通知音效", "soundVolume": "音量", "soundVolumeDesc": "调整通知音量", "soundTheme": "音效风格", "soundThemeDesc": "选择音效风格", "soundSoft": "柔和", "soundCrisp": "清脆", "soundTest": "试听", "soundTestDesc": "预览当前音效效果", "soundTestPlay": "播放", "saveSoundFailed": "保存音效设置失败。", "groupEditor": "编辑器", "editor": "使用编辑器打开", "editorDesc": "选择用于打开文件的编辑器", "selectEditor": "选择编辑器", "saveEditorFailed": "保存编辑器设置失败。" }, "agents": { "desc": "管理智能体的配置和启动命令。", "description": "配置智能体", "title": "智能体", "addAgent": "添加智能体", "addStdioAgent": "添加 Stdio Agent", "addApiAgent": "添加 API Agent", "editAgent": "编辑智能体", "dialogDesc": "配置智能体 ID、命令、参数和环境变量。", "apiDialogDesc": "配置 API 智能体的提供商、端点和认证信息。", "agentId": "智能体 ID (名称)", "apiProvider": "提供商", "apiBaseUrl": "Base URL", "apiKey": "API Key", "apiHeaders": "请求头 (JSON)", "contextWindowTokens": "上下文窗口 (token)", "modelIdTemplate": "Model Id 模版", "models": "模型列表 (每行一个)", "modelsHint": "通常无需填写,会自动获取。仅在接口未返回所需模型时手动指定", "command": "命令", "args": "参数", "envVars": "环境变量 (JSON)", "envJson": "环境变量 (JSON)", "cancel": "取消", "save": "保存", "edit": "编辑", "delete": "删除", "dragToReorder": "拖拽排序", "noAgents": "未配置任何智能体", "errorIdCommand": "ID 和命令不能为空。", "errorDuplicateId": "已存在具有该 ID 的智能体。", "errorEnvJson": "环境变量必须是有效的 JSON 对象。", "errorContextWindowTokens": "上下文窗口必须为正整数。", "updateFailed": "更新配置失败。", "confirmDeleteTitle": "删除智能体", "confirmDeleteDesc": "确定要删除此智能体吗?此操作无法撤销。", "confirmDeleteDescWithSessions": "确定要删除此智能体吗?{{count}} 个会话也将被同时删除。此操作无法撤销。", "reset": "重置智能体", "resetSuccess": "智能体已重置。", "resetFailed": "重置智能体失败。", "deleteAllSessions": "删除所有会话", "confirmDeleteAllSessionsTitle": "删除所有会话", "confirmDeleteAllSessionsDesc": "此智能体的所有会话将被永久删除。此操作无法撤销。", "deleteAllSessionsSuccess": "已删除 {{count}} 个会话。", "deleteAllSessionsFailed": "删除会话失败。", "validation": { "enterId": "请输入智能体 ID。", "idFormat": "只允许字母、数字、_ 和 -。", "selectProvider": "请选择提供商。", "enterBaseUrl": "请输入 Base URL。", "enterApiKey": "请输入 API Key。", "enterCommand": "请输入命令。", "jsonObject": "必须是有效的 JSON 对象(值为字符串)。", "positiveInteger": "必须为正整数。" } }, "mcp": { "desc": "管理 MCP 服务器的配置和启动命令。", "description": "配置 MCP 服务器", "title": "MCP 服务器", "addMcp": "添加 MCP 服务器", "addStdioMcp": "添加 Stdio MCP", "addHttpMcp": "添加 HTTP MCP", "addSseMcp": "添加 SSE MCP", "recommended": { "exa": { "name": "Exa", "desc": "Exa MCP 服务器 — AI 网络搜索" } }, "editMcp": "编辑 MCP 服务器", "dialogDesc": "配置 MCP 服务器 ID、命令、参数和环境变量。", "mcpId": "MCP 服务器 ID (名称)", "command": "命令", "args": "参数", "envVars": "环境变量 (JSON)", "envJson": "环境变量 (JSON)", "url": "URL", "headers": "请求头 (JSON)", "headersJson": "请求头 (JSON)", "httpDialogDesc": "配置 MCP 服务器 ID、HTTP URL 和请求头。", "sseDialogDesc": "配置 MCP 服务器 ID、SSE 端点 URL 和请求头。", "cancel": "取消", "save": "保存", "edit": "编辑", "delete": "删除", "dragToReorder": "拖拽排序", "noMcpServers": "未配置任何 MCP 服务器", "errorIdRequired": "ID 不能为空。", "errorUrlRequired": "URL 不能为空。", "errorIdCommand": "ID 和命令不能为空。", "errorDuplicateId": "已存在具有该 ID 的 MCP 服务器。", "errorHeadersJson": "请求头必须是有效的 JSON 对象。", "errorEnvJson": "环境变量必须是有效的 JSON 对象。", "updateFailed": "更新配置失败。", "confirmDeleteTitle": "删除 MCP 服务器", "confirmDeleteDesc": "确定要删除此 MCP 服务器吗?此操作无法撤销。", "validation": { "enterId": "请输入服务器 ID。", "idFormat": "只允许字母、数字、_ 和 -。", "enterCommand": "请输入命令。", "enterUrl": "请输入 URL。", "jsonObject": "必须是有效的 JSON 对象(值为字符串)。" } }, "webui": { "desc": "配置对 Fello 界面的远程访问。", "title": "WebUI", "enable": "启用 WebUI", "enableDesc": "允许通过浏览器远程访问 Fello 界面", "enableAccess": "启用 WebUI 访问", "port": "端口:", "token": "Token:", "autoGenerated": "自动生成", "accessUrl": "访问地址", "accessDesc": "注意:此地址包含临时访问令牌,应用重启后将失效。", "copy": "复制", "note": "注意:此地址包含临时访问令牌,应用重启后将失效。", "updateFailed": "更新配置失败。", "disabledInWebUI": "WebUI 配置在浏览器中不可用。" }, "ilink": { "title": "微信 iLink", "description": "通过 iLink Bot API 将 Fello 接入微信。连接后,微信中会出现一个 ClawBot 联系人,你可以随时随地与 AI 智能体对话。", "connected": "已连接", "notConnected": "未连接", "notConnectedHint": "使用微信扫描二维码连接", "login": "登录", "loggingIn": "等待扫码...", "disconnect": "断开连接", "scanPrompt": "使用微信扫描二维码登录", "qrcodeExpired": "二维码已过期,请重新获取", "scanned": "已扫码!请在手机上确认登录。", "browserOpened": "二维码已在浏览器中打开,请使用微信扫码登录。", "activeSession": "微信活跃会话", "activeSessionHint": "微信消息将路由到此会话。可在侧边栏右键会话设为活跃。", "selectSession": "-- 选择一个会话 --", "none": "-- 无 --", "howItWorks": "使用说明", "step1": "点击「登录」在浏览器中打开二维码", "step2": "使用微信扫描二维码", "step3": "微信中出现「ClawBot」联系人", "step4": "与 ClawBot 聊天 — 消息将路由到上方选择的活跃会话", "step5": "在侧边栏右键任意会话即可设为微信活跃会话", "useOriginalImage": "使用原图", "useOriginalImageDesc": "向模型发送原始大小的图片(消耗更多 token)。关闭时使用缩略图。", "keepaliveMaxCount": "保活消息", "keepaliveMaxCountDesc": "AI 思考时最大连续保活消息数。" }, "snippets": { "title": "快捷短语", "desc": "管理可复用的文本片段,快速插入到对话中。", "description": "配置快捷短语", "add": "添加短语", "edit": "编辑短语", "delete": "删除", "save": "保存", "cancel": "取消", "empty": "暂无快捷短语", "saveFailed": "保存快捷短语失败。", "titleLabel": "标题", "titlePlaceholder": "标题", "contentLabel": "内容", "contentPlaceholder": "内容", "dialogDesc": "配置短语的标题和内容。", "confirmDeleteTitle": "删除短语", "confirmDeleteDesc": "确定要删除此短语吗?此操作无法撤销。", "validation": { "enterTitle": "请输入标题。", "enterContent": "请输入内容。" } }, "memory": { "title": "记忆", "desc": "查看和管理项目级持久化记忆。", "projectMemories": "项目记忆", "refresh": "刷新", "clear": "清除", "cleared": "记忆已清除。", "clearFailed": "清除记忆失败。", "delete": "删除", "deleted": "记忆条目已删除。", "deleteFailed": "删除记忆条目失败。", "confirmDeleteTitle": "删除记忆条目", "confirmDeleteDesc": "确定要删除此记忆条目吗?此操作不可撤销。", "confirmClearTitle": "清除记忆", "confirmClearDesc": '确定要清除项目 "{{title}}" 的所有记忆吗?此操作不可撤销。', "revealInFinder": "在访达中显示", "revealFailed": "显示文件失败。", "noFile": "未找到记忆文件。", "noProjects": "未找到项目。", "empty": "暂无记忆。", "entries": "条目" }, "imageGeneration": { "title": "图片生成", "desc": "配置图片生成服务提供商。激活的提供商将作为工具供 Agent 使用。", "providers": "提供商", "add": "添加提供商", "addProvider": "添加提供商", "editProvider": "编辑提供商", "dialogDesc": "配置图片生成的提供商、端点和认证信息。", "edit": "编辑", "delete": "删除", "empty": "尚未配置图片生成提供商", "updateFailed": "更新配置失败。", "confirmDeleteTitle": "删除提供商", "confirmDeleteDesc": "确定要删除此图片生成提供商吗?", "cancel": "取消", "save": "保存", "form": { "name": "名称", "provider": "提供商", "baseUrl": "Base URL", "baseUrlHint": "请求将发送至 {baseUrl}/images/generations", "apiKey": "API Key", "headers": "请求头 (JSON)", "extraBody": "额外参数 (JSON)", "extraBodyHint": "合并到请求体中的额外参数(如 quality、style 等厂商特有参数)。", "model": "模型" }, "validation": { "enterName": "请输入名称。", "selectProvider": "请选择提供商。", "enterBaseUrl": "请输入 Base URL。", "enterApiKey": "请输入 API Key。", "enterModel": "请输入模型名称。", "jsonObject": "必须是有效的 JSON 对象(值为字符串)。" } }, "proxy": { "title": "网络代理", "mode": "代理模式", "off": "直连", "offDesc": "不使用代理,直接连接", "manual": "手动", "manualDesc": "手动指定代理服务器,所有网络请求走代理", "system": "跟随系统", "systemDesc": "使用系统代理设置(macOS/Windows 或环境变量)", "httpProxy": "HTTP 代理", "httpProxyPlaceholder": "例如 http://127.0.0.1:7890", "httpsProxy": "HTTPS 代理(可选)", "httpsProxyHint": "留空时回退到 HTTP 代理。", "noProxy": "不使用代理(可选)", "noProxyPlaceholder": "例如 localhost,127.0.0.1,*.internal", "username": "用户名(可选)", "password": "密码(可选)", "cancel": "取消", "save": "保存", "later": "稍后", "restartNow": "立即重启", "restartTitle": "需要重启", "restartDesc": "代理设置已保存,重启 Fello 后新的代理配置才会生效。", "restartManualDesc": "代理设置已保存,请手动重启 Fello 服务端进程后生效。", "saveFailed": "保存代理设置失败。", "validation": { "httpProxyRequired": "手动模式下必须填写 HTTP 代理地址。", "invalidProxyUrl": "{{field}} 应以 http:// 或 https:// 开头,或使用 host:port 形式(例如 127.0.0.1:7890)。" } } };
|
|
16962
16964
|
const chat = { "failedToLoadSession": "加载会话失败。", "failedToUpdateMcpServers": "更新 MCP 服务器失败。" };
|
|
16963
16965
|
const planBubble = { "title": "计划", "summary": "已完成 {{completed}} / {{total}}", "status": { "pending": "等待中", "inProgress": "进行中", "completed": "已完成" }, "priority": { "high": "高优先级", "medium": "中优先级", "low": "低优先级" } };
|
|
16964
16966
|
const constant$4 = { "feature": { "title": "功能", "askUser": "向我提问", "skills": "技能", "shareToUser": "分享给用户", "search": "项目检索", "memory": "记忆", "imageGeneration": "图片生成" } };
|
|
16965
16967
|
const chatHeader = { "sessionId": "会话编号", "openSessionFolder": "打开会话文件夹", "refresh": "重启会话", "closeSession": "关闭会话", "closingSession": "关闭中…", "failedToCloseSession": "关闭会话失败。", "contextWindow": "上下文窗口", "used": "已用", "size": "上限", "percentUsed": "已用 {{pct}}%", "remaining": "剩余 {{count}}", "lastTurn": "上一轮", "input": "输入", "output": "输出", "total": "总计", "thought": "思考", "cacheRead": "缓存读取", "cacheWrite": "缓存写入", "cost": "费用" };
|
|
16966
16968
|
const chatInput = { "placeholderDisabled": "请先开启新的会话...", "placeholderActive": "有任何问题请问我... (回车发送)", "mode": "模式", "suggestions": "建议", "messageInput": "消息输入", "stop": "停止", "send": "发送", "tokensUsage": "输入: {{input}} 输出: {{output}} 总计: {{total}}{{thoughtStr}}", "tokensTotal": "{{total}}k tokens", "generationFailed": "生成失败。", "attach": "附加文件", "snippets": "快捷短语", "snippetsEmpty": "暂无短语,点击前往设置添加。", "selectModel": "选择模型", "stopReasonMaxTokens": "已达到最大 token 限制", "stopReasonMaxTurnRequests": "已达到最大轮次限制", "stopReasonRefusal": "模型拒绝回答", "stopReasonCancelled": "生成已取消" };
|
|
16967
16969
|
const filePanel = { "title": "文件", "emptyDirectory": "空目录", "newFile": "新建文件", "newFolder": "新建文件夹", "rename": "重命名", "copyPath": "复制路径", "copyRelativePath": "复制相对路径", "revealInFinder": "在访达中显示", "openInEditor": "使用 {{editor}} 打开", "delete": "删除", "deleteConfirmSingle": "是否删除“{{name}}”?", "deleteConfirmMultiple": "是否删除选中的 {{count}} 个项目?", "dragItems": "{{count}} 个项目", "cancel": "取消", "moveToTrash": "移至废纸篓", "moveToRecycleBin": "移至回收站", "moveConfirmTitle": "移动", "moveConfirmSingle": "是否将“{{name}}”移动到“{{dest}}”?", "moveConfirmMultiple": "是否将 {{count}} 个项目移动到“{{dest}}”?", "moveConfirmSingleToRoot": "是否将“{{name}}”移动到根目录?", "moveConfirmMultipleToRoot": "是否将 {{count}} 个项目移动到根目录?", "loading": "加载中...", "collapseFolders": "折叠文件夹", "refresh": "刷新", "addToChat": "添加到对话", "noProject": "未选择项目" };
|
|
16968
|
-
const toolBubble = { "tool": "工具", "stop": "停止", "stopping": "停止中…" };
|
|
16970
|
+
const toolBubble = { "tool": "工具", "stop": "停止", "stopping": "停止中…", "result": "结果", "terminal": "终端" };
|
|
16969
16971
|
const imageView = { "fallbackAlt": "图片" };
|
|
16970
16972
|
const readonlyTerminal = { "noOutput": "无输出." };
|
|
16971
16973
|
const message = { "validationFailed": "验证失败", "ok": "确定", "cancel": "取消", "confirm": "确认", "dialogTitle": "消息提示", "errorTitle": "错误" };
|
|
@@ -16986,7 +16988,7 @@ const detail = { "noContent": "无内容" };
|
|
|
16986
16988
|
const fileDetail = { "fileNotFound": "文件不存在", "fileTooLarge": "该文件过大不支持预览", "fileFormatNotSupported": "该文件格式不支持预览", "errorLoading": "加载文件失败", "loading": "加载中...", "noChanges": "无变更", "resetZoom": "重置", "preview": "预览", "code": "源码", "compare": "对比", "fileModifiedNotice": "文件已被修改,请刷新", "copyFileContent": "复制文件内容", "addFileToChat": "添加文件到会话", "addSelectionToChat": "添加选中内容到会话", "loadError": "加载失败", "zoomOut": "缩小", "zoomIn": "放大", "previousPage": "上一页", "nextPage": "下一页", "previousSlide": "上一张", "nextSlide": "下一张", "speakerNotes": "备注", "closeNotes": "关闭" };
|
|
16987
16989
|
const htmlDetail = { "fileNotFound": "文件不存在或无法访问", "errorLoading": "加载失败", "loadFailed": "页面加载失败", "retry": "重试", "openInBrowser": "在浏览器中打开", "webuiNotEnabled": "请先启用 WebUI 才能在浏览器中打开", "open": "打开", "refresh": "刷新" };
|
|
16988
16990
|
const welcome = { "title": "Fello", "desc": "又一个基于 ACP 协议的 Agent 客户端,连接智能体并开始协作。", "hint": "从左侧边栏新建会话开始", "getStarted": "开始使用", "stepAgent": "配置 Agent", "stepAgentDesc": "添加一个 AI 智能体(本地 Stdio 或 API)来驱动对话", "stepAgentDone": "已配置 {{count}} 个 Agent", "stepProject": "添加项目", "stepProjectDesc": "选择一个本地项目文件夹作为工作区", "stepProjectDone": "已添加 {{count}} 个项目", "stepChat": "开始会话", "stepChatDesc": "在项目中创建一个新的 AI 对话", "allDone": "一切就绪!从左侧边栏开始新会话吧" };
|
|
16989
|
-
const askUser = { "title": "请求", "other": "其他...", "back": "返回", "inputPlaceholder": "输入你的回复...(回车发送)", "submit": "提交" };
|
|
16991
|
+
const askUser = { "title": "请求", "other": "其他...", "back": "返回", "inputPlaceholder": "输入你的回复...(回车发送)", "submit": "提交", "autoClose": "超时后自动关闭" };
|
|
16990
16992
|
const shareToUser = { "copyToProject": "复制到项目", "reveal": "在访达中显示", "loadFailed": "图片加载失败" };
|
|
16991
16993
|
const imageGeneration = { "copyToProject": "复制到项目", "reveal": "在访达中显示", "loadFailed": "图片加载失败", "download": "下载" };
|
|
16992
16994
|
const automation = { "title": "自动化", "agent": "智能体", "alwaysDisabled": "始终禁用", "anyMoment": "即将执行", "back": "返回", "cancel": "取消", "create": "创建", "createFirst": "创建你的第一个计划", "delete": "删除", "deleteConfirm": "确定永久删除「{{name}}」?", "deleteTaskConfirm": "确定永久删除此任务?", "deleteTaskTitle": "删除任务", "deleteTitle": "删除计划", "dialogDesc": "配置自动化计划的执行规则和 Prompt。", "editSchedule": "编辑计划", "editSettings": "编辑设置", "features": "功能", "files": "文件", "lastRun": "上次", "lessThanMinute": "不到 1 分钟", "manual": "手动", "manualDesc": "仅手动触发,无定时计划。", "mcpServers": "MCP 服务器", "model": "模型", "modelPlaceholder": "默认模型", "newSchedule": "新建计划", "nextRun": "下次", "noFiles": "暂无生成文件", "noSchedules": "暂无计划", "emptyHint": "通过 cron 表达式配置定时 AI 任务,让 Agent 自动执行", "noTasksDesc": "暂无运行记录。点击「立即触发」开始第一次运行。", "prompt": "提示词", "promptPlaceholder": "智能体需要执行什么任务?", "save": "保存", "schedule": "计划", "scheduleName": "计划名称", "scheduleNamePlaceholder": "例如:每日站会摘要", "scheduleNotFound": "计划未找到", "schedules": "计划", "selectFileToPreview": "选择文件预览", "selectTaskToPreview": "选择任务查看文件", "selectTask": "选择一个任务", "timedExecution": "定时(cron)", "triggerNow": "立即触发", "validation": { "nameRequired": "名称不能为空", "agentRequired": "请选择智能体", "promptRequired": "提示词不能为空" }, "cron": { "at": "在", "atMinute": "第", "custom": "自定义", "daily": "每天", "hourly": "每隔 N 小时", "weekdays": "工作日", "weekly": "每周", "nextRun": "下次执行", "nextRunIn": "距离下次执行还有", "lastRun": "上次执行", "days": { "0": "周日", "1": "周一", "2": "周二", "3": "周三", "4": "周四", "5": "周五", "6": "周六" } } };
|
|
@@ -20722,10 +20724,20 @@ function calculateToolCallUpdate(state2, subSessionId, update2, displayId, recei
|
|
|
20722
20724
|
message2.title = update2.title ?? "";
|
|
20723
20725
|
}
|
|
20724
20726
|
if (Object.prototype.hasOwnProperty.call(update2, "status") && update2.status != null) {
|
|
20725
|
-
|
|
20727
|
+
const next2 = update2.status;
|
|
20728
|
+
const current2 = message2.status;
|
|
20729
|
+
const order2 = { pending: 0, in_progress: 1, completed: 2, failed: 2 };
|
|
20730
|
+
if (current2 == null || order2[next2] >= order2[current2]) {
|
|
20731
|
+
message2.status = next2;
|
|
20732
|
+
}
|
|
20726
20733
|
}
|
|
20727
20734
|
if (Object.prototype.hasOwnProperty.call(update2, "content")) {
|
|
20728
|
-
|
|
20735
|
+
const newContent = update2.content ?? [];
|
|
20736
|
+
const hasDiff = message2.content?.some((c3) => c3.type === "diff") ?? false;
|
|
20737
|
+
const nextHasDiff = newContent.some((c3) => c3.type === "diff");
|
|
20738
|
+
if (!hasDiff || nextHasDiff) {
|
|
20739
|
+
message2.content = newContent;
|
|
20740
|
+
}
|
|
20729
20741
|
}
|
|
20730
20742
|
if (Object.prototype.hasOwnProperty.call(update2, "kind") && update2.kind != null) {
|
|
20731
20743
|
message2.kind = update2.kind;
|
|
@@ -20757,6 +20769,14 @@ function calculateToolCallUpdate(state2, subSessionId, update2, displayId, recei
|
|
|
20757
20769
|
state22.activeSubagents.set(subSessionId, subagentMessage);
|
|
20758
20770
|
return subagentMessage.messages;
|
|
20759
20771
|
})();
|
|
20772
|
+
if (subSessionId) {
|
|
20773
|
+
const mainIdx = state22.messages.findIndex(
|
|
20774
|
+
(m2) => m2.role === "tool_call" && m2.toolCallId === update2.toolCallId
|
|
20775
|
+
);
|
|
20776
|
+
if (mainIdx !== -1) {
|
|
20777
|
+
state22.messages.splice(mainIdx, 1);
|
|
20778
|
+
}
|
|
20779
|
+
}
|
|
20760
20780
|
const idx = messages.findIndex(
|
|
20761
20781
|
(m2) => m2.role === "tool_call" && m2.toolCallId === update2.toolCallId
|
|
20762
20782
|
);
|
|
@@ -30983,35 +31003,35 @@ const createLucideIcon = (iconName, iconNode) => {
|
|
|
30983
31003
|
Component.displayName = toPascalCase(iconName);
|
|
30984
31004
|
return Component;
|
|
30985
31005
|
};
|
|
30986
|
-
const __iconNode$
|
|
31006
|
+
const __iconNode$1v = [
|
|
30987
31007
|
["path", { d: "M12 5v14", key: "s699le" }],
|
|
30988
31008
|
["path", { d: "m19 12-7 7-7-7", key: "1idqje" }]
|
|
30989
31009
|
];
|
|
30990
|
-
const ArrowDown = createLucideIcon("arrow-down", __iconNode$
|
|
30991
|
-
const __iconNode$
|
|
31010
|
+
const ArrowDown = createLucideIcon("arrow-down", __iconNode$1v);
|
|
31011
|
+
const __iconNode$1u = [
|
|
30992
31012
|
["path", { d: "m12 19-7-7 7-7", key: "1l729n" }],
|
|
30993
31013
|
["path", { d: "M19 12H5", key: "x3x0zl" }]
|
|
30994
31014
|
];
|
|
30995
|
-
const ArrowLeft = createLucideIcon("arrow-left", __iconNode$
|
|
30996
|
-
const __iconNode$
|
|
31015
|
+
const ArrowLeft = createLucideIcon("arrow-left", __iconNode$1u);
|
|
31016
|
+
const __iconNode$1t = [
|
|
30997
31017
|
["path", { d: "m16 3 4 4-4 4", key: "1x1c3m" }],
|
|
30998
31018
|
["path", { d: "M20 7H4", key: "zbl0bi" }],
|
|
30999
31019
|
["path", { d: "m8 21-4-4 4-4", key: "h9nckh" }],
|
|
31000
31020
|
["path", { d: "M4 17h16", key: "g4d7ey" }]
|
|
31001
31021
|
];
|
|
31002
|
-
const ArrowRightLeft = createLucideIcon("arrow-right-left", __iconNode$
|
|
31003
|
-
const __iconNode$
|
|
31022
|
+
const ArrowRightLeft = createLucideIcon("arrow-right-left", __iconNode$1t);
|
|
31023
|
+
const __iconNode$1s = [
|
|
31004
31024
|
["path", { d: "M5 3h14", key: "7usisc" }],
|
|
31005
31025
|
["path", { d: "m18 13-6-6-6 6", key: "1kf1n9" }],
|
|
31006
31026
|
["path", { d: "M12 7v14", key: "1akyts" }]
|
|
31007
31027
|
];
|
|
31008
|
-
const ArrowUpToLine = createLucideIcon("arrow-up-to-line", __iconNode$
|
|
31009
|
-
const __iconNode$
|
|
31028
|
+
const ArrowUpToLine = createLucideIcon("arrow-up-to-line", __iconNode$1s);
|
|
31029
|
+
const __iconNode$1r = [
|
|
31010
31030
|
["path", { d: "m5 12 7-7 7 7", key: "hav0vg" }],
|
|
31011
31031
|
["path", { d: "M12 19V5", key: "x0mq9r" }]
|
|
31012
31032
|
];
|
|
31013
|
-
const ArrowUp = createLucideIcon("arrow-up", __iconNode$
|
|
31014
|
-
const __iconNode$
|
|
31033
|
+
const ArrowUp = createLucideIcon("arrow-up", __iconNode$1r);
|
|
31034
|
+
const __iconNode$1q = [
|
|
31015
31035
|
[
|
|
31016
31036
|
"path",
|
|
31017
31037
|
{
|
|
@@ -31020,13 +31040,13 @@ const __iconNode$1o = [
|
|
|
31020
31040
|
}
|
|
31021
31041
|
]
|
|
31022
31042
|
];
|
|
31023
|
-
const Astroid = createLucideIcon("astroid", __iconNode$
|
|
31024
|
-
const __iconNode$
|
|
31043
|
+
const Astroid = createLucideIcon("astroid", __iconNode$1q);
|
|
31044
|
+
const __iconNode$1p = [
|
|
31025
31045
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
31026
31046
|
["path", { d: "M4.929 4.929 19.07 19.071", key: "196cmz" }]
|
|
31027
31047
|
];
|
|
31028
|
-
const Ban = createLucideIcon("ban", __iconNode$
|
|
31029
|
-
const __iconNode$
|
|
31048
|
+
const Ban = createLucideIcon("ban", __iconNode$1p);
|
|
31049
|
+
const __iconNode$1o = [
|
|
31030
31050
|
["path", { d: "M12 7v6", key: "lw1j43" }],
|
|
31031
31051
|
["path", { d: "M15 10H9", key: "o6yqo3" }],
|
|
31032
31052
|
[
|
|
@@ -31037,8 +31057,8 @@ const __iconNode$1m = [
|
|
|
31037
31057
|
}
|
|
31038
31058
|
]
|
|
31039
31059
|
];
|
|
31040
|
-
const BookmarkPlus = createLucideIcon("bookmark-plus", __iconNode$
|
|
31041
|
-
const __iconNode$
|
|
31060
|
+
const BookmarkPlus = createLucideIcon("bookmark-plus", __iconNode$1o);
|
|
31061
|
+
const __iconNode$1n = [
|
|
31042
31062
|
["path", { d: "M12 8V4H8", key: "hb8ula" }],
|
|
31043
31063
|
["rect", { width: "16", height: "12", x: "4", y: "8", rx: "2", key: "enze0r" }],
|
|
31044
31064
|
["path", { d: "M2 14h2", key: "vft8re" }],
|
|
@@ -31046,8 +31066,8 @@ const __iconNode$1l = [
|
|
|
31046
31066
|
["path", { d: "M15 13v2", key: "1xurst" }],
|
|
31047
31067
|
["path", { d: "M9 13v2", key: "rq6x2g" }]
|
|
31048
31068
|
];
|
|
31049
|
-
const Bot = createLucideIcon("bot", __iconNode$
|
|
31050
|
-
const __iconNode$
|
|
31069
|
+
const Bot = createLucideIcon("bot", __iconNode$1n);
|
|
31070
|
+
const __iconNode$1m = [
|
|
31051
31071
|
["path", { d: "M12 18V5", key: "adv99a" }],
|
|
31052
31072
|
["path", { d: "M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4", key: "1e3is1" }],
|
|
31053
31073
|
["path", { d: "M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5", key: "1gqd8o" }],
|
|
@@ -31057,61 +31077,74 @@ const __iconNode$1k = [
|
|
|
31057
31077
|
["path", { d: "M6 18a4 4 0 0 1-2-7.464", key: "k1g0md" }],
|
|
31058
31078
|
["path", { d: "M6.003 5.125a4 4 0 0 0-2.526 5.77", key: "q97ue3" }]
|
|
31059
31079
|
];
|
|
31060
|
-
const Brain = createLucideIcon("brain", __iconNode$
|
|
31061
|
-
const __iconNode$
|
|
31062
|
-
|
|
31063
|
-
|
|
31064
|
-
|
|
31065
|
-
|
|
31066
|
-
|
|
31067
|
-
|
|
31068
|
-
|
|
31069
|
-
|
|
31080
|
+
const Brain = createLucideIcon("brain", __iconNode$1m);
|
|
31081
|
+
const __iconNode$1l = [
|
|
31082
|
+
["path", { d: "M8 2v3", key: "1ioesn" }],
|
|
31083
|
+
["path", { d: "M16 2v3", key: "otl347" }],
|
|
31084
|
+
["rect", { x: "3", y: "3", width: "18", height: "18", rx: "2", key: "h1oib" }],
|
|
31085
|
+
["path", { d: "M3 9h18", key: "1pudct" }],
|
|
31086
|
+
["path", { d: "M8 13h.01", key: "1sbv64" }],
|
|
31087
|
+
["path", { d: "M12 13h.01", key: "y0uutt" }],
|
|
31088
|
+
["path", { d: "M16 13h.01", key: "wip0gl" }],
|
|
31089
|
+
["path", { d: "M8 17h.01", key: "p3bg7i" }],
|
|
31090
|
+
["path", { d: "M12 17h.01", key: "p32p05" }],
|
|
31091
|
+
["path", { d: "M16 17h.01", key: "ql8jdd" }]
|
|
31092
|
+
];
|
|
31093
|
+
const CalendarDays = createLucideIcon("calendar-days", __iconNode$1l);
|
|
31094
|
+
const __iconNode$1k = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
|
|
31095
|
+
const Check = createLucideIcon("check", __iconNode$1k);
|
|
31096
|
+
const __iconNode$1j = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
|
|
31097
|
+
const ChevronDown = createLucideIcon("chevron-down", __iconNode$1j);
|
|
31098
|
+
const __iconNode$1i = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
|
|
31099
|
+
const ChevronRight = createLucideIcon("chevron-right", __iconNode$1i);
|
|
31100
|
+
const __iconNode$1h = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
|
|
31101
|
+
const ChevronUp = createLucideIcon("chevron-up", __iconNode$1h);
|
|
31102
|
+
const __iconNode$1g = [
|
|
31070
31103
|
["path", { d: "m7 20 5-5 5 5", key: "13a0gw" }],
|
|
31071
31104
|
["path", { d: "m7 4 5 5 5-5", key: "1kwcof" }]
|
|
31072
31105
|
];
|
|
31073
|
-
const ChevronsDownUp = createLucideIcon("chevrons-down-up", __iconNode$
|
|
31074
|
-
const __iconNode$
|
|
31106
|
+
const ChevronsDownUp = createLucideIcon("chevrons-down-up", __iconNode$1g);
|
|
31107
|
+
const __iconNode$1f = [
|
|
31075
31108
|
["path", { d: "m7 15 5 5 5-5", key: "1hf1tw" }],
|
|
31076
31109
|
["path", { d: "m7 9 5-5 5 5", key: "sgt6xg" }]
|
|
31077
31110
|
];
|
|
31078
|
-
const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$
|
|
31079
|
-
const __iconNode$
|
|
31111
|
+
const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$1f);
|
|
31112
|
+
const __iconNode$1e = [
|
|
31080
31113
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
31081
31114
|
["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
|
|
31082
31115
|
["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
|
|
31083
31116
|
];
|
|
31084
|
-
const CircleAlert = createLucideIcon("circle-alert", __iconNode$
|
|
31085
|
-
const __iconNode$
|
|
31117
|
+
const CircleAlert = createLucideIcon("circle-alert", __iconNode$1e);
|
|
31118
|
+
const __iconNode$1d = [
|
|
31086
31119
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
31087
31120
|
["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
|
|
31088
31121
|
];
|
|
31089
|
-
const CircleCheck = createLucideIcon("circle-check", __iconNode$
|
|
31090
|
-
const __iconNode$
|
|
31122
|
+
const CircleCheck = createLucideIcon("circle-check", __iconNode$1d);
|
|
31123
|
+
const __iconNode$1c = [
|
|
31091
31124
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
31092
31125
|
["path", { d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3", key: "1u773s" }],
|
|
31093
31126
|
["path", { d: "M12 17h.01", key: "p32p05" }]
|
|
31094
31127
|
];
|
|
31095
|
-
const CircleQuestionMark = createLucideIcon("circle-question-mark", __iconNode$
|
|
31096
|
-
const __iconNode$
|
|
31097
|
-
const CircleSmall = createLucideIcon("circle-small", __iconNode$
|
|
31098
|
-
const __iconNode$
|
|
31128
|
+
const CircleQuestionMark = createLucideIcon("circle-question-mark", __iconNode$1c);
|
|
31129
|
+
const __iconNode$1b = [["circle", { cx: "12", cy: "12", r: "6", key: "1vlfrh" }]];
|
|
31130
|
+
const CircleSmall = createLucideIcon("circle-small", __iconNode$1b);
|
|
31131
|
+
const __iconNode$1a = [
|
|
31099
31132
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
31100
31133
|
["path", { d: "m15 9-6 6", key: "1uzhvr" }],
|
|
31101
31134
|
["path", { d: "m9 9 6 6", key: "z0biqf" }]
|
|
31102
31135
|
];
|
|
31103
|
-
const CircleX = createLucideIcon("circle-x", __iconNode$
|
|
31104
|
-
const __iconNode$
|
|
31105
|
-
const Circle = createLucideIcon("circle", __iconNode$
|
|
31106
|
-
const __iconNode$
|
|
31136
|
+
const CircleX = createLucideIcon("circle-x", __iconNode$1a);
|
|
31137
|
+
const __iconNode$19 = [["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]];
|
|
31138
|
+
const Circle = createLucideIcon("circle", __iconNode$19);
|
|
31139
|
+
const __iconNode$18 = [
|
|
31107
31140
|
["path", { d: "M11 14h10", key: "1w8e9d" }],
|
|
31108
31141
|
["path", { d: "M16 4h2a2 2 0 0 1 2 2v1.344", key: "1e62lh" }],
|
|
31109
31142
|
["path", { d: "m17 18 4-4-4-4", key: "z2g111" }],
|
|
31110
31143
|
["path", { d: "M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 1.793-1.113", key: "bjbb7m" }],
|
|
31111
31144
|
["rect", { x: "8", y: "2", width: "8", height: "4", rx: "1", key: "ublpy" }]
|
|
31112
31145
|
];
|
|
31113
|
-
const ClipboardPaste = createLucideIcon("clipboard-paste", __iconNode$
|
|
31114
|
-
const __iconNode$
|
|
31146
|
+
const ClipboardPaste = createLucideIcon("clipboard-paste", __iconNode$18);
|
|
31147
|
+
const __iconNode$17 = [
|
|
31115
31148
|
["rect", { width: "8", height: "4", x: "8", y: "2", rx: "1", ry: "1", key: "tgr4d6" }],
|
|
31116
31149
|
[
|
|
31117
31150
|
"path",
|
|
@@ -31121,65 +31154,65 @@ const __iconNode$16 = [
|
|
|
31121
31154
|
}
|
|
31122
31155
|
]
|
|
31123
31156
|
];
|
|
31124
|
-
const Clipboard = createLucideIcon("clipboard", __iconNode$
|
|
31125
|
-
const __iconNode$
|
|
31157
|
+
const Clipboard = createLucideIcon("clipboard", __iconNode$17);
|
|
31158
|
+
const __iconNode$16 = [
|
|
31126
31159
|
["path", { d: "M12 6v6l4 2", key: "mmk7yg" }],
|
|
31127
31160
|
["path", { d: "M22 12a10 10 0 1 0-11 9.95", key: "17dhok" }],
|
|
31128
31161
|
["path", { d: "m22 16-5.5 5.5L14 19", key: "1eibut" }]
|
|
31129
31162
|
];
|
|
31130
|
-
const ClockCheck = createLucideIcon("clock-check", __iconNode$
|
|
31131
|
-
const __iconNode$
|
|
31163
|
+
const ClockCheck = createLucideIcon("clock-check", __iconNode$16);
|
|
31164
|
+
const __iconNode$15 = [
|
|
31132
31165
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
31133
31166
|
["path", { d: "M12 6v6l4 2", key: "mmk7yg" }]
|
|
31134
31167
|
];
|
|
31135
|
-
const Clock = createLucideIcon("clock", __iconNode$
|
|
31136
|
-
const __iconNode$
|
|
31168
|
+
const Clock = createLucideIcon("clock", __iconNode$15);
|
|
31169
|
+
const __iconNode$14 = [
|
|
31137
31170
|
["path", { d: "m16 18 6-6-6-6", key: "eg8j8" }],
|
|
31138
31171
|
["path", { d: "m8 6-6 6 6 6", key: "ppft3o" }]
|
|
31139
31172
|
];
|
|
31140
|
-
const Code = createLucideIcon("code", __iconNode$
|
|
31141
|
-
const __iconNode$
|
|
31173
|
+
const Code = createLucideIcon("code", __iconNode$14);
|
|
31174
|
+
const __iconNode$13 = [
|
|
31142
31175
|
["line", { x1: "15", x2: "15", y1: "12", y2: "18", key: "1p7wdc" }],
|
|
31143
31176
|
["line", { x1: "12", x2: "18", y1: "15", y2: "15", key: "1nscbv" }],
|
|
31144
31177
|
["rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2", key: "17jyea" }],
|
|
31145
31178
|
["path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2", key: "zix9uf" }]
|
|
31146
31179
|
];
|
|
31147
|
-
const CopyPlus = createLucideIcon("copy-plus", __iconNode$
|
|
31148
|
-
const __iconNode$
|
|
31180
|
+
const CopyPlus = createLucideIcon("copy-plus", __iconNode$13);
|
|
31181
|
+
const __iconNode$12 = [
|
|
31149
31182
|
["rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2", key: "17jyea" }],
|
|
31150
31183
|
["path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2", key: "zix9uf" }]
|
|
31151
31184
|
];
|
|
31152
|
-
const Copy = createLucideIcon("copy", __iconNode$
|
|
31153
|
-
const __iconNode$
|
|
31185
|
+
const Copy = createLucideIcon("copy", __iconNode$12);
|
|
31186
|
+
const __iconNode$11 = [
|
|
31154
31187
|
["path", { d: "M12 15V3", key: "m9g1x1" }],
|
|
31155
31188
|
["path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4", key: "ih7n3h" }],
|
|
31156
31189
|
["path", { d: "m7 10 5 5 5-5", key: "brsn70" }]
|
|
31157
31190
|
];
|
|
31158
|
-
const Download = createLucideIcon("download", __iconNode$
|
|
31159
|
-
const __iconNode
|
|
31191
|
+
const Download = createLucideIcon("download", __iconNode$11);
|
|
31192
|
+
const __iconNode$10 = [
|
|
31160
31193
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
31161
31194
|
["path", { d: "M12 2a7 7 0 1 0 10 10", key: "1yuj32" }]
|
|
31162
31195
|
];
|
|
31163
|
-
const Eclipse = createLucideIcon("eclipse", __iconNode
|
|
31164
|
-
const __iconNode
|
|
31196
|
+
const Eclipse = createLucideIcon("eclipse", __iconNode$10);
|
|
31197
|
+
const __iconNode$$ = [
|
|
31165
31198
|
["circle", { cx: "12", cy: "12", r: "1", key: "41hilf" }],
|
|
31166
31199
|
["circle", { cx: "12", cy: "5", r: "1", key: "gxeob9" }],
|
|
31167
31200
|
["circle", { cx: "12", cy: "19", r: "1", key: "lyex9k" }]
|
|
31168
31201
|
];
|
|
31169
|
-
const EllipsisVertical = createLucideIcon("ellipsis-vertical", __iconNode
|
|
31170
|
-
const __iconNode$
|
|
31202
|
+
const EllipsisVertical = createLucideIcon("ellipsis-vertical", __iconNode$$);
|
|
31203
|
+
const __iconNode$_ = [
|
|
31171
31204
|
["circle", { cx: "12", cy: "12", r: "1", key: "41hilf" }],
|
|
31172
31205
|
["circle", { cx: "19", cy: "12", r: "1", key: "1wjl8i" }],
|
|
31173
31206
|
["circle", { cx: "5", cy: "12", r: "1", key: "1pcz8c" }]
|
|
31174
31207
|
];
|
|
31175
|
-
const Ellipsis = createLucideIcon("ellipsis", __iconNode$
|
|
31176
|
-
const __iconNode$
|
|
31208
|
+
const Ellipsis = createLucideIcon("ellipsis", __iconNode$_);
|
|
31209
|
+
const __iconNode$Z = [
|
|
31177
31210
|
["path", { d: "M15 3h6v6", key: "1q9fwt" }],
|
|
31178
31211
|
["path", { d: "M10 14 21 3", key: "gplh6r" }],
|
|
31179
31212
|
["path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6", key: "a6xqqp" }]
|
|
31180
31213
|
];
|
|
31181
|
-
const ExternalLink = createLucideIcon("external-link", __iconNode$
|
|
31182
|
-
const __iconNode$
|
|
31214
|
+
const ExternalLink = createLucideIcon("external-link", __iconNode$Z);
|
|
31215
|
+
const __iconNode$Y = [
|
|
31183
31216
|
[
|
|
31184
31217
|
"path",
|
|
31185
31218
|
{
|
|
@@ -31191,8 +31224,8 @@ const __iconNode$X = [
|
|
|
31191
31224
|
["path", { d: "M10 12.5 8 15l2 2.5", key: "1tg20x" }],
|
|
31192
31225
|
["path", { d: "m14 12.5 2 2.5-2 2.5", key: "yinavb" }]
|
|
31193
31226
|
];
|
|
31194
|
-
const FileCode = createLucideIcon("file-code", __iconNode$
|
|
31195
|
-
const __iconNode$
|
|
31227
|
+
const FileCode = createLucideIcon("file-code", __iconNode$Y);
|
|
31228
|
+
const __iconNode$X = [
|
|
31196
31229
|
[
|
|
31197
31230
|
"path",
|
|
31198
31231
|
{
|
|
@@ -31204,8 +31237,8 @@ const __iconNode$W = [
|
|
|
31204
31237
|
["path", { d: "M9 15h6", key: "cctwl0" }],
|
|
31205
31238
|
["path", { d: "M12 18v-6", key: "17g6i2" }]
|
|
31206
31239
|
];
|
|
31207
|
-
const FilePlus = createLucideIcon("file-plus", __iconNode$
|
|
31208
|
-
const __iconNode$
|
|
31240
|
+
const FilePlus = createLucideIcon("file-plus", __iconNode$X);
|
|
31241
|
+
const __iconNode$W = [
|
|
31209
31242
|
[
|
|
31210
31243
|
"path",
|
|
31211
31244
|
{
|
|
@@ -31218,8 +31251,8 @@ const __iconNode$V = [
|
|
|
31218
31251
|
["path", { d: "M16 13H8", key: "t4e002" }],
|
|
31219
31252
|
["path", { d: "M16 17H8", key: "z1uh3a" }]
|
|
31220
31253
|
];
|
|
31221
|
-
const FileText = createLucideIcon("file-text", __iconNode$
|
|
31222
|
-
const __iconNode$
|
|
31254
|
+
const FileText = createLucideIcon("file-text", __iconNode$W);
|
|
31255
|
+
const __iconNode$V = [
|
|
31223
31256
|
[
|
|
31224
31257
|
"path",
|
|
31225
31258
|
{
|
|
@@ -31229,8 +31262,8 @@ const __iconNode$U = [
|
|
|
31229
31262
|
],
|
|
31230
31263
|
["path", { d: "M2 10h20", key: "1ir3d8" }]
|
|
31231
31264
|
];
|
|
31232
|
-
const FolderClosed = createLucideIcon("folder-closed", __iconNode$
|
|
31233
|
-
const __iconNode$
|
|
31265
|
+
const FolderClosed = createLucideIcon("folder-closed", __iconNode$V);
|
|
31266
|
+
const __iconNode$U = [
|
|
31234
31267
|
[
|
|
31235
31268
|
"path",
|
|
31236
31269
|
{
|
|
@@ -31239,8 +31272,8 @@ const __iconNode$T = [
|
|
|
31239
31272
|
}
|
|
31240
31273
|
]
|
|
31241
31274
|
];
|
|
31242
|
-
const FolderOpen = createLucideIcon("folder-open", __iconNode$
|
|
31243
|
-
const __iconNode$
|
|
31275
|
+
const FolderOpen = createLucideIcon("folder-open", __iconNode$U);
|
|
31276
|
+
const __iconNode$T = [
|
|
31244
31277
|
["path", { d: "M12 10v6", key: "1bos4e" }],
|
|
31245
31278
|
["path", { d: "M9 13h6", key: "1uhe8q" }],
|
|
31246
31279
|
[
|
|
@@ -31251,8 +31284,8 @@ const __iconNode$S = [
|
|
|
31251
31284
|
}
|
|
31252
31285
|
]
|
|
31253
31286
|
];
|
|
31254
|
-
const FolderPlus = createLucideIcon("folder-plus", __iconNode$
|
|
31255
|
-
const __iconNode$
|
|
31287
|
+
const FolderPlus = createLucideIcon("folder-plus", __iconNode$T);
|
|
31288
|
+
const __iconNode$S = [
|
|
31256
31289
|
[
|
|
31257
31290
|
"path",
|
|
31258
31291
|
{
|
|
@@ -31261,8 +31294,8 @@ const __iconNode$R = [
|
|
|
31261
31294
|
}
|
|
31262
31295
|
]
|
|
31263
31296
|
];
|
|
31264
|
-
const Folder = createLucideIcon("folder", __iconNode$
|
|
31265
|
-
const __iconNode$
|
|
31297
|
+
const Folder = createLucideIcon("folder", __iconNode$S);
|
|
31298
|
+
const __iconNode$R = [
|
|
31266
31299
|
[
|
|
31267
31300
|
"path",
|
|
31268
31301
|
{
|
|
@@ -31275,25 +31308,25 @@ const __iconNode$Q = [
|
|
|
31275
31308
|
{ d: "M3 8.268a2 2 0 0 0-1 1.738V19a2 2 0 0 0 2 2h11a2 2 0 0 0 1.732-1", key: "yxbcw3" }
|
|
31276
31309
|
]
|
|
31277
31310
|
];
|
|
31278
|
-
const Folders = createLucideIcon("folders", __iconNode$
|
|
31279
|
-
const __iconNode$
|
|
31311
|
+
const Folders = createLucideIcon("folders", __iconNode$R);
|
|
31312
|
+
const __iconNode$Q = [
|
|
31280
31313
|
["path", { d: "m12 14 4-4", key: "9kzdfg" }],
|
|
31281
31314
|
["path", { d: "M3.34 19a10 10 0 1 1 17.32 0", key: "19p75a" }]
|
|
31282
31315
|
];
|
|
31283
|
-
const Gauge = createLucideIcon("gauge", __iconNode$
|
|
31284
|
-
const __iconNode$
|
|
31316
|
+
const Gauge = createLucideIcon("gauge", __iconNode$Q);
|
|
31317
|
+
const __iconNode$P = [
|
|
31285
31318
|
["path", { d: "M15 6a9 9 0 0 0-9 9V3", key: "1cii5b" }],
|
|
31286
31319
|
["circle", { cx: "18", cy: "6", r: "3", key: "1h7g24" }],
|
|
31287
31320
|
["circle", { cx: "6", cy: "18", r: "3", key: "fqmcym" }]
|
|
31288
31321
|
];
|
|
31289
|
-
const GitBranch = createLucideIcon("git-branch", __iconNode$
|
|
31290
|
-
const __iconNode$
|
|
31322
|
+
const GitBranch = createLucideIcon("git-branch", __iconNode$P);
|
|
31323
|
+
const __iconNode$O = [
|
|
31291
31324
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
31292
31325
|
["path", { d: "M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20", key: "13o1zl" }],
|
|
31293
31326
|
["path", { d: "M2 12h20", key: "9i4pu4" }]
|
|
31294
31327
|
];
|
|
31295
|
-
const Globe = createLucideIcon("globe", __iconNode$
|
|
31296
|
-
const __iconNode$
|
|
31328
|
+
const Globe = createLucideIcon("globe", __iconNode$O);
|
|
31329
|
+
const __iconNode$N = [
|
|
31297
31330
|
["circle", { cx: "9", cy: "12", r: "1", key: "1vctgf" }],
|
|
31298
31331
|
["circle", { cx: "9", cy: "5", r: "1", key: "hp0tcf" }],
|
|
31299
31332
|
["circle", { cx: "9", cy: "19", r: "1", key: "fkjjf6" }],
|
|
@@ -31301,8 +31334,8 @@ const __iconNode$M = [
|
|
|
31301
31334
|
["circle", { cx: "15", cy: "5", r: "1", key: "19l28e" }],
|
|
31302
31335
|
["circle", { cx: "15", cy: "19", r: "1", key: "f4zoj3" }]
|
|
31303
31336
|
];
|
|
31304
|
-
const GripVertical = createLucideIcon("grip-vertical", __iconNode$
|
|
31305
|
-
const __iconNode$
|
|
31337
|
+
const GripVertical = createLucideIcon("grip-vertical", __iconNode$N);
|
|
31338
|
+
const __iconNode$M = [
|
|
31306
31339
|
["path", { d: "m15 12-9.373 9.373a1 1 0 0 1-3.001-3L12 9", key: "1hayfq" }],
|
|
31307
31340
|
["path", { d: "m18 15 4-4", key: "16gjal" }],
|
|
31308
31341
|
[
|
|
@@ -31313,8 +31346,8 @@ const __iconNode$L = [
|
|
|
31313
31346
|
}
|
|
31314
31347
|
]
|
|
31315
31348
|
];
|
|
31316
|
-
const Hammer = createLucideIcon("hammer", __iconNode$
|
|
31317
|
-
const __iconNode$
|
|
31349
|
+
const Hammer = createLucideIcon("hammer", __iconNode$M);
|
|
31350
|
+
const __iconNode$L = [
|
|
31318
31351
|
["path", { d: "M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8", key: "5wwlr5" }],
|
|
31319
31352
|
[
|
|
31320
31353
|
"path",
|
|
@@ -31324,27 +31357,27 @@ const __iconNode$K = [
|
|
|
31324
31357
|
}
|
|
31325
31358
|
]
|
|
31326
31359
|
];
|
|
31327
|
-
const House = createLucideIcon("house", __iconNode$
|
|
31328
|
-
const __iconNode$
|
|
31360
|
+
const House = createLucideIcon("house", __iconNode$L);
|
|
31361
|
+
const __iconNode$K = [
|
|
31329
31362
|
["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", ry: "2", key: "1m3agn" }],
|
|
31330
31363
|
["circle", { cx: "9", cy: "9", r: "2", key: "af1f0g" }],
|
|
31331
31364
|
["path", { d: "m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21", key: "1xmnt7" }]
|
|
31332
31365
|
];
|
|
31333
|
-
const Image$1 = createLucideIcon("image", __iconNode$
|
|
31334
|
-
const __iconNode$
|
|
31366
|
+
const Image$1 = createLucideIcon("image", __iconNode$K);
|
|
31367
|
+
const __iconNode$J = [
|
|
31335
31368
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
31336
31369
|
["path", { d: "M12 16v-4", key: "1dtifu" }],
|
|
31337
31370
|
["path", { d: "M12 8h.01", key: "e9boi3" }]
|
|
31338
31371
|
];
|
|
31339
|
-
const Info$1 = createLucideIcon("info", __iconNode$
|
|
31340
|
-
const __iconNode$
|
|
31372
|
+
const Info$1 = createLucideIcon("info", __iconNode$J);
|
|
31373
|
+
const __iconNode$I = [
|
|
31341
31374
|
["path", { d: "m16 6 4 14", key: "ji33uf" }],
|
|
31342
31375
|
["path", { d: "M12 6v14", key: "1n7gus" }],
|
|
31343
31376
|
["path", { d: "M8 8v12", key: "1gg7y9" }],
|
|
31344
31377
|
["path", { d: "M4 4v16", key: "6qkkli" }]
|
|
31345
31378
|
];
|
|
31346
|
-
const Library = createLucideIcon("library", __iconNode$
|
|
31347
|
-
const __iconNode$
|
|
31379
|
+
const Library = createLucideIcon("library", __iconNode$I);
|
|
31380
|
+
const __iconNode$H = [
|
|
31348
31381
|
[
|
|
31349
31382
|
"path",
|
|
31350
31383
|
{
|
|
@@ -31355,20 +31388,27 @@ const __iconNode$G = [
|
|
|
31355
31388
|
["path", { d: "M9 18h6", key: "x1upvd" }],
|
|
31356
31389
|
["path", { d: "M10 22h4", key: "ceow96" }]
|
|
31357
31390
|
];
|
|
31358
|
-
const Lightbulb = createLucideIcon("lightbulb", __iconNode$
|
|
31359
|
-
const __iconNode$
|
|
31391
|
+
const Lightbulb = createLucideIcon("lightbulb", __iconNode$H);
|
|
31392
|
+
const __iconNode$G = [
|
|
31360
31393
|
["path", { d: "M9 17H7A5 5 0 0 1 7 7h2", key: "8i5ue5" }],
|
|
31361
31394
|
["path", { d: "M15 7h2a5 5 0 1 1 0 10h-2", key: "1b9ql8" }],
|
|
31362
31395
|
["line", { x1: "8", x2: "16", y1: "12", y2: "12", key: "1jonct" }]
|
|
31363
31396
|
];
|
|
31364
|
-
const Link2 = createLucideIcon("link-2", __iconNode$
|
|
31365
|
-
const __iconNode$
|
|
31397
|
+
const Link2 = createLucideIcon("link-2", __iconNode$G);
|
|
31398
|
+
const __iconNode$F = [
|
|
31366
31399
|
["path", { d: "M9 17H7A5 5 0 0 1 7 7", key: "10o201" }],
|
|
31367
31400
|
["path", { d: "M15 7h2a5 5 0 0 1 4 8", key: "1d3206" }],
|
|
31368
31401
|
["line", { x1: "8", x2: "12", y1: "12", y2: "12", key: "rvw6j4" }],
|
|
31369
31402
|
["line", { x1: "2", x2: "22", y1: "2", y2: "22", key: "a6p6uj" }]
|
|
31370
31403
|
];
|
|
31371
|
-
const Link2Off = createLucideIcon("link-2-off", __iconNode$
|
|
31404
|
+
const Link2Off = createLucideIcon("link-2-off", __iconNode$F);
|
|
31405
|
+
const __iconNode$E = [
|
|
31406
|
+
["path", { d: "M16 5H3", key: "m91uny" }],
|
|
31407
|
+
["path", { d: "M16 12H3", key: "1a2rj7" }],
|
|
31408
|
+
["path", { d: "M11 19H3", key: "zflm78" }],
|
|
31409
|
+
["path", { d: "m15 18 2 2 4-4", key: "1szwhi" }]
|
|
31410
|
+
];
|
|
31411
|
+
const ListCheck = createLucideIcon("list-check", __iconNode$E);
|
|
31372
31412
|
const __iconNode$D = [
|
|
31373
31413
|
["path", { d: "M3 5h8", key: "18g2rq" }],
|
|
31374
31414
|
["path", { d: "M3 12h8", key: "1xfjp6" }],
|
|
@@ -35676,9 +35716,15 @@ function GlobalTextContextMenu() {
|
|
|
35676
35716
|
})
|
|
35677
35717
|
});
|
|
35678
35718
|
requestAnimationFrame(() => {
|
|
35679
|
-
const
|
|
35680
|
-
const
|
|
35719
|
+
const selectionObj = window.getSelection();
|
|
35720
|
+
const selection2 = selectionObj?.toString() || "";
|
|
35681
35721
|
const nextIsEditable = editable;
|
|
35722
|
+
let nextHasSelection = selection2.trim().length > 0;
|
|
35723
|
+
if (nextHasSelection && selectionObj && target instanceof Node) {
|
|
35724
|
+
if (!selectionObj.containsNode(target, true)) {
|
|
35725
|
+
nextHasSelection = false;
|
|
35726
|
+
}
|
|
35727
|
+
}
|
|
35682
35728
|
if (!nextHasSelection && !nextIsEditable) {
|
|
35683
35729
|
setOpen(false);
|
|
35684
35730
|
return;
|
|
@@ -38398,6 +38444,13 @@ const electron = {
|
|
|
38398
38444
|
if (isWebUI) return;
|
|
38399
38445
|
return window.fello.invoke("installUpdate");
|
|
38400
38446
|
},
|
|
38447
|
+
restartApp: async () => {
|
|
38448
|
+
if (isWebUI) {
|
|
38449
|
+
console.warn("WebUI mode: restartApp is not supported. Restart the server process manually.");
|
|
38450
|
+
return;
|
|
38451
|
+
}
|
|
38452
|
+
return window.fello.invoke("restartApp");
|
|
38453
|
+
},
|
|
38401
38454
|
updateTheme: (theme) => {
|
|
38402
38455
|
if (isWebUI || !window.fello) return;
|
|
38403
38456
|
return window.fello.updateTheme(theme);
|
|
@@ -38415,280 +38468,6 @@ const electron = {
|
|
|
38415
38468
|
return window.fello.onUpdater(handler);
|
|
38416
38469
|
}
|
|
38417
38470
|
};
|
|
38418
|
-
function ContextMenuRoot(props) {
|
|
38419
|
-
const [anchor2, setAnchor] = reactExports.useState({
|
|
38420
|
-
getBoundingClientRect() {
|
|
38421
|
-
return DOMRect.fromRect({
|
|
38422
|
-
width: 0,
|
|
38423
|
-
height: 0,
|
|
38424
|
-
x: 0,
|
|
38425
|
-
y: 0
|
|
38426
|
-
});
|
|
38427
|
-
}
|
|
38428
|
-
});
|
|
38429
|
-
const backdropRef = reactExports.useRef(null);
|
|
38430
|
-
const internalBackdropRef = reactExports.useRef(null);
|
|
38431
|
-
const actionsRef = reactExports.useRef(null);
|
|
38432
|
-
const positionerRef = reactExports.useRef(null);
|
|
38433
|
-
const allowMouseUpTriggerRef = reactExports.useRef(true);
|
|
38434
|
-
const initialCursorPointRef = reactExports.useRef(null);
|
|
38435
|
-
const id32 = useId();
|
|
38436
|
-
const contextValue = reactExports.useMemo(() => ({
|
|
38437
|
-
anchor: anchor2,
|
|
38438
|
-
setAnchor,
|
|
38439
|
-
actionsRef,
|
|
38440
|
-
backdropRef,
|
|
38441
|
-
internalBackdropRef,
|
|
38442
|
-
positionerRef,
|
|
38443
|
-
allowMouseUpTriggerRef,
|
|
38444
|
-
initialCursorPointRef,
|
|
38445
|
-
rootId: id32
|
|
38446
|
-
}), [anchor2, id32]);
|
|
38447
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(ContextMenuRootContext.Provider, {
|
|
38448
|
-
value: contextValue,
|
|
38449
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsx(MenuRootContext.Provider, {
|
|
38450
|
-
value: void 0,
|
|
38451
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsx(MenuRoot, {
|
|
38452
|
-
...props
|
|
38453
|
-
})
|
|
38454
|
-
})
|
|
38455
|
-
});
|
|
38456
|
-
}
|
|
38457
|
-
const LONG_PRESS_DELAY = 500;
|
|
38458
|
-
const ContextMenuTrigger$1 = /* @__PURE__ */ reactExports.forwardRef(function ContextMenuTrigger2(componentProps, forwardedRef) {
|
|
38459
|
-
const {
|
|
38460
|
-
render: render4,
|
|
38461
|
-
className,
|
|
38462
|
-
style: style2,
|
|
38463
|
-
...elementProps
|
|
38464
|
-
} = componentProps;
|
|
38465
|
-
const {
|
|
38466
|
-
setAnchor,
|
|
38467
|
-
actionsRef,
|
|
38468
|
-
internalBackdropRef,
|
|
38469
|
-
backdropRef,
|
|
38470
|
-
positionerRef,
|
|
38471
|
-
allowMouseUpTriggerRef,
|
|
38472
|
-
initialCursorPointRef,
|
|
38473
|
-
rootId
|
|
38474
|
-
} = useContextMenuRootContext(false);
|
|
38475
|
-
const {
|
|
38476
|
-
store
|
|
38477
|
-
} = useMenuRootContext(false);
|
|
38478
|
-
const open2 = store.useState("open");
|
|
38479
|
-
const disabled2 = store.useState("disabled");
|
|
38480
|
-
const triggerRef = reactExports.useRef(null);
|
|
38481
|
-
const touchPositionRef = reactExports.useRef(null);
|
|
38482
|
-
const longPressTimeout = useTimeout();
|
|
38483
|
-
const allowMouseUpTimeout = useTimeout();
|
|
38484
|
-
const allowMouseUpRef = reactExports.useRef(false);
|
|
38485
|
-
const mouseUpAbortControllerRef = reactExports.useRef(null);
|
|
38486
|
-
function handleLongPress(x2, y4, event) {
|
|
38487
|
-
const isTouchEvent2 = event.type.startsWith("touch");
|
|
38488
|
-
initialCursorPointRef.current = {
|
|
38489
|
-
x: x2,
|
|
38490
|
-
y: y4
|
|
38491
|
-
};
|
|
38492
|
-
setAnchor({
|
|
38493
|
-
getBoundingClientRect() {
|
|
38494
|
-
return DOMRect.fromRect({
|
|
38495
|
-
width: isTouchEvent2 ? 10 : 0,
|
|
38496
|
-
height: isTouchEvent2 ? 10 : 0,
|
|
38497
|
-
x: x2,
|
|
38498
|
-
y: y4
|
|
38499
|
-
});
|
|
38500
|
-
}
|
|
38501
|
-
});
|
|
38502
|
-
allowMouseUpRef.current = false;
|
|
38503
|
-
actionsRef.current?.setOpen(true, createChangeEventDetails(triggerPress, event));
|
|
38504
|
-
allowMouseUpTimeout.start(LONG_PRESS_DELAY, () => {
|
|
38505
|
-
allowMouseUpRef.current = true;
|
|
38506
|
-
});
|
|
38507
|
-
}
|
|
38508
|
-
function handleContextMenu(event) {
|
|
38509
|
-
if (disabled2) {
|
|
38510
|
-
return;
|
|
38511
|
-
}
|
|
38512
|
-
allowMouseUpTriggerRef.current = true;
|
|
38513
|
-
stopEvent$1(event);
|
|
38514
|
-
handleLongPress(event.clientX, event.clientY, event.nativeEvent);
|
|
38515
|
-
const doc = ownerDocument(triggerRef.current);
|
|
38516
|
-
mouseUpAbortControllerRef.current?.abort();
|
|
38517
|
-
const mouseUpAbortController = new AbortController();
|
|
38518
|
-
mouseUpAbortControllerRef.current = mouseUpAbortController;
|
|
38519
|
-
doc.addEventListener("mouseup", (mouseEvent) => {
|
|
38520
|
-
allowMouseUpTriggerRef.current = false;
|
|
38521
|
-
if (!allowMouseUpRef.current) {
|
|
38522
|
-
return;
|
|
38523
|
-
}
|
|
38524
|
-
allowMouseUpTimeout.clear();
|
|
38525
|
-
allowMouseUpRef.current = false;
|
|
38526
|
-
const mouseUpTarget = getTarget(mouseEvent);
|
|
38527
|
-
if (contains(positionerRef.current, mouseUpTarget)) {
|
|
38528
|
-
return;
|
|
38529
|
-
}
|
|
38530
|
-
if (rootId && mouseUpTarget && findRootOwnerId(mouseUpTarget) === rootId) {
|
|
38531
|
-
return;
|
|
38532
|
-
}
|
|
38533
|
-
actionsRef.current?.setOpen(false, createChangeEventDetails(cancelOpen, mouseEvent));
|
|
38534
|
-
}, {
|
|
38535
|
-
once: true,
|
|
38536
|
-
signal: mouseUpAbortController.signal
|
|
38537
|
-
});
|
|
38538
|
-
}
|
|
38539
|
-
function cancelLongPress() {
|
|
38540
|
-
longPressTimeout.clear();
|
|
38541
|
-
touchPositionRef.current = null;
|
|
38542
|
-
}
|
|
38543
|
-
function handleTouchStart(event) {
|
|
38544
|
-
if (disabled2) {
|
|
38545
|
-
cancelLongPress();
|
|
38546
|
-
return;
|
|
38547
|
-
}
|
|
38548
|
-
allowMouseUpTriggerRef.current = false;
|
|
38549
|
-
if (event.touches.length !== 1) {
|
|
38550
|
-
cancelLongPress();
|
|
38551
|
-
return;
|
|
38552
|
-
}
|
|
38553
|
-
event.stopPropagation();
|
|
38554
|
-
const touch = event.touches[0];
|
|
38555
|
-
const touchPosition = {
|
|
38556
|
-
x: touch.clientX,
|
|
38557
|
-
y: touch.clientY
|
|
38558
|
-
};
|
|
38559
|
-
touchPositionRef.current = touchPosition;
|
|
38560
|
-
longPressTimeout.start(LONG_PRESS_DELAY, () => {
|
|
38561
|
-
handleLongPress(touchPosition.x, touchPosition.y, event.nativeEvent);
|
|
38562
|
-
});
|
|
38563
|
-
}
|
|
38564
|
-
function handleTouchMove(event) {
|
|
38565
|
-
if (event.touches.length !== 1) {
|
|
38566
|
-
cancelLongPress();
|
|
38567
|
-
return;
|
|
38568
|
-
}
|
|
38569
|
-
if (longPressTimeout.isStarted() && touchPositionRef.current) {
|
|
38570
|
-
const touch = event.touches[0];
|
|
38571
|
-
const moveThreshold = 10;
|
|
38572
|
-
const deltaX = Math.abs(touch.clientX - touchPositionRef.current.x);
|
|
38573
|
-
const deltaY = Math.abs(touch.clientY - touchPositionRef.current.y);
|
|
38574
|
-
if (deltaX > moveThreshold || deltaY > moveThreshold) {
|
|
38575
|
-
cancelLongPress();
|
|
38576
|
-
}
|
|
38577
|
-
}
|
|
38578
|
-
}
|
|
38579
|
-
reactExports.useEffect(() => () => {
|
|
38580
|
-
mouseUpAbortControllerRef.current?.abort();
|
|
38581
|
-
}, []);
|
|
38582
|
-
reactExports.useEffect(() => {
|
|
38583
|
-
function handleDocumentContextMenu(event) {
|
|
38584
|
-
if (disabled2) {
|
|
38585
|
-
return;
|
|
38586
|
-
}
|
|
38587
|
-
const target = getTarget(event);
|
|
38588
|
-
const targetElement = target;
|
|
38589
|
-
if (contains(triggerRef.current, targetElement) || contains(internalBackdropRef.current, targetElement) || contains(backdropRef.current, targetElement)) {
|
|
38590
|
-
event.preventDefault();
|
|
38591
|
-
}
|
|
38592
|
-
}
|
|
38593
|
-
const doc = ownerDocument(triggerRef.current);
|
|
38594
|
-
return addEventListener(doc, "contextmenu", handleDocumentContextMenu);
|
|
38595
|
-
}, [backdropRef, disabled2, internalBackdropRef]);
|
|
38596
|
-
const state2 = {
|
|
38597
|
-
open: open2
|
|
38598
|
-
};
|
|
38599
|
-
const element2 = useRenderElement("div", componentProps, {
|
|
38600
|
-
state: state2,
|
|
38601
|
-
ref: [triggerRef, forwardedRef],
|
|
38602
|
-
props: [{
|
|
38603
|
-
onContextMenu: handleContextMenu,
|
|
38604
|
-
onTouchStart: handleTouchStart,
|
|
38605
|
-
onTouchMove: handleTouchMove,
|
|
38606
|
-
onTouchEnd: cancelLongPress,
|
|
38607
|
-
onTouchCancel: cancelLongPress,
|
|
38608
|
-
style: {
|
|
38609
|
-
WebkitTouchCallout: "none"
|
|
38610
|
-
}
|
|
38611
|
-
}, elementProps],
|
|
38612
|
-
stateAttributesMapping: pressableTriggerOpenStateMapping
|
|
38613
|
-
});
|
|
38614
|
-
return element2;
|
|
38615
|
-
});
|
|
38616
|
-
function ContextMenu({ ...props }) {
|
|
38617
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(ContextMenuRoot, { "data-slot": "context-menu", ...props });
|
|
38618
|
-
}
|
|
38619
|
-
function ContextMenuTrigger({
|
|
38620
|
-
className,
|
|
38621
|
-
...props
|
|
38622
|
-
}) {
|
|
38623
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
38624
|
-
ContextMenuTrigger$1,
|
|
38625
|
-
{
|
|
38626
|
-
"data-slot": "context-menu-trigger",
|
|
38627
|
-
className: cn$8("select-none", className),
|
|
38628
|
-
...props
|
|
38629
|
-
}
|
|
38630
|
-
);
|
|
38631
|
-
}
|
|
38632
|
-
function ContextMenuContent({
|
|
38633
|
-
className,
|
|
38634
|
-
align = "start",
|
|
38635
|
-
alignOffset = 4,
|
|
38636
|
-
side = "right",
|
|
38637
|
-
sideOffset = 0,
|
|
38638
|
-
...props
|
|
38639
|
-
}) {
|
|
38640
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(MenuPortal, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
38641
|
-
MenuPositioner,
|
|
38642
|
-
{
|
|
38643
|
-
className: "isolate z-50 outline-none",
|
|
38644
|
-
align,
|
|
38645
|
-
alignOffset,
|
|
38646
|
-
side,
|
|
38647
|
-
sideOffset,
|
|
38648
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
38649
|
-
MenuPopup,
|
|
38650
|
-
{
|
|
38651
|
-
"data-slot": "context-menu-content",
|
|
38652
|
-
className: cn$8("z-50 max-h-(--available-height) min-w-38 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover py-1 px-1 space-y-0.5 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
|
|
38653
|
-
...props
|
|
38654
|
-
}
|
|
38655
|
-
)
|
|
38656
|
-
}
|
|
38657
|
-
) });
|
|
38658
|
-
}
|
|
38659
|
-
function ContextMenuItem({
|
|
38660
|
-
className,
|
|
38661
|
-
inset,
|
|
38662
|
-
variant = "default",
|
|
38663
|
-
...props
|
|
38664
|
-
}) {
|
|
38665
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
38666
|
-
MenuItem,
|
|
38667
|
-
{
|
|
38668
|
-
"data-slot": "context-menu-item",
|
|
38669
|
-
"data-inset": inset,
|
|
38670
|
-
"data-variant": variant,
|
|
38671
|
-
className: cn$8(
|
|
38672
|
-
"group/context-menu-item relative flex cursor-default items-center gap-1.5 rounded-sm px-1.5 py-1 text-xs text-muted-foreground/90 outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3 focus:*:[svg]:text-accent-foreground data-[variant=destructive]:*:[svg]:text-destructive",
|
|
38673
|
-
className
|
|
38674
|
-
),
|
|
38675
|
-
...props
|
|
38676
|
-
}
|
|
38677
|
-
);
|
|
38678
|
-
}
|
|
38679
|
-
function ContextMenuSeparator({
|
|
38680
|
-
className,
|
|
38681
|
-
...props
|
|
38682
|
-
}) {
|
|
38683
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
38684
|
-
Separator$1,
|
|
38685
|
-
{
|
|
38686
|
-
"data-slot": "context-menu-separator",
|
|
38687
|
-
className: cn$8("-mx-1 my-1 h-px bg-border", className),
|
|
38688
|
-
...props
|
|
38689
|
-
}
|
|
38690
|
-
);
|
|
38691
|
-
}
|
|
38692
38471
|
function useRender(params) {
|
|
38693
38472
|
return useRenderElement(params.defaultTagName ?? "div", params, params);
|
|
38694
38473
|
}
|
|
@@ -42844,11 +42623,443 @@ function ScrollBar({
|
|
|
42844
42623
|
}
|
|
42845
42624
|
);
|
|
42846
42625
|
}
|
|
42626
|
+
const PreviewCardRootContext = /* @__PURE__ */ reactExports.createContext(void 0);
|
|
42627
|
+
function usePreviewCardRootContext(optional2) {
|
|
42628
|
+
const context = reactExports.useContext(PreviewCardRootContext);
|
|
42629
|
+
if (context === void 0 && !optional2) {
|
|
42630
|
+
throw new Error(formatErrorMessage(50));
|
|
42631
|
+
}
|
|
42632
|
+
return context;
|
|
42633
|
+
}
|
|
42634
|
+
const OPEN_DELAY$1 = 600;
|
|
42635
|
+
const CLOSE_DELAY = 300;
|
|
42636
|
+
const selectors$1 = {
|
|
42637
|
+
...popupStoreSelectors,
|
|
42638
|
+
instantType: (state2) => state2.instantType,
|
|
42639
|
+
adaptiveOrigin: (state2) => state2.adaptiveOrigin,
|
|
42640
|
+
closeDelay: (state2) => state2.closeDelay
|
|
42641
|
+
};
|
|
42642
|
+
class PreviewCardStore extends ReactStore {
|
|
42643
|
+
constructor(initialState2, floatingId, nested) {
|
|
42644
|
+
const triggerElements = new PopupTriggerMap();
|
|
42645
|
+
super(createInitialState$1(initialState2, triggerElements, floatingId, nested), createInitialContext$1(triggerElements), selectors$1);
|
|
42646
|
+
}
|
|
42647
|
+
setOpen = (nextOpen, eventDetails) => {
|
|
42648
|
+
const {
|
|
42649
|
+
inlineRectCoordsRef
|
|
42650
|
+
} = this.context;
|
|
42651
|
+
applyPopupOpenChange(this, nextOpen, eventDetails, {
|
|
42652
|
+
onBeforeDispatch() {
|
|
42653
|
+
const event = eventDetails.event;
|
|
42654
|
+
if (nextOpen && eventDetails.reason === triggerHover && eventDetails.trigger && "clientX" in event && "clientY" in event && inlineRectCoordsRef.current?.element !== eventDetails.trigger) {
|
|
42655
|
+
updateInlineRectCoords(inlineRectCoordsRef, eventDetails.trigger, event.clientX, event.clientY);
|
|
42656
|
+
}
|
|
42657
|
+
}
|
|
42658
|
+
});
|
|
42659
|
+
};
|
|
42660
|
+
}
|
|
42661
|
+
function createInitialState$1(initialState2, triggerElements, floatingId, nested = false) {
|
|
42662
|
+
const state2 = {
|
|
42663
|
+
...createInitialPopupStoreState(),
|
|
42664
|
+
instantType: void 0,
|
|
42665
|
+
adaptiveOrigin: void 0,
|
|
42666
|
+
closeDelay: CLOSE_DELAY,
|
|
42667
|
+
...initialState2
|
|
42668
|
+
};
|
|
42669
|
+
state2.floatingRootContext = createPopupFloatingRootContext(triggerElements, floatingId, nested);
|
|
42670
|
+
return state2;
|
|
42671
|
+
}
|
|
42672
|
+
function createInitialContext$1(triggerElements) {
|
|
42673
|
+
return {
|
|
42674
|
+
popupRef: /* @__PURE__ */ reactExports.createRef(),
|
|
42675
|
+
onOpenChange: void 0,
|
|
42676
|
+
onOpenChangeComplete: void 0,
|
|
42677
|
+
triggerElements,
|
|
42678
|
+
inlineRectCoordsRef: {
|
|
42679
|
+
current: void 0
|
|
42680
|
+
}
|
|
42681
|
+
};
|
|
42682
|
+
}
|
|
42683
|
+
function PreviewCardRootComponent(props) {
|
|
42684
|
+
const {
|
|
42685
|
+
open: openProp,
|
|
42686
|
+
defaultOpen = false,
|
|
42687
|
+
onOpenChange,
|
|
42688
|
+
onOpenChangeComplete,
|
|
42689
|
+
actionsRef,
|
|
42690
|
+
handle: handle2,
|
|
42691
|
+
triggerId: triggerIdProp,
|
|
42692
|
+
defaultTriggerId: defaultTriggerIdProp = null,
|
|
42693
|
+
children: children2
|
|
42694
|
+
} = props;
|
|
42695
|
+
const store = usePopupRootStore((floatingId, nested) => new PreviewCardStore({
|
|
42696
|
+
open: defaultOpen,
|
|
42697
|
+
openProp,
|
|
42698
|
+
activeTriggerId: defaultTriggerIdProp,
|
|
42699
|
+
triggerIdProp
|
|
42700
|
+
}, floatingId, nested));
|
|
42701
|
+
store.useControlledProp("openProp", openProp);
|
|
42702
|
+
store.useControlledProp("triggerIdProp", triggerIdProp);
|
|
42703
|
+
store.useContextCallback("onOpenChange", onOpenChange);
|
|
42704
|
+
store.useContextCallback("onOpenChangeComplete", onOpenChangeComplete);
|
|
42705
|
+
const open2 = store.useState("open");
|
|
42706
|
+
const activeTriggerId = store.useState("activeTriggerId");
|
|
42707
|
+
const mounted = store.useState("mounted");
|
|
42708
|
+
const payload = store.useState("payload");
|
|
42709
|
+
useImplicitActiveTrigger(store, {
|
|
42710
|
+
closeOnActiveTriggerUnmount: true
|
|
42711
|
+
});
|
|
42712
|
+
const {
|
|
42713
|
+
forceUnmount
|
|
42714
|
+
} = useOpenStateTransitions(open2, store, () => {
|
|
42715
|
+
store.context.inlineRectCoordsRef.current = void 0;
|
|
42716
|
+
});
|
|
42717
|
+
useIsoLayoutEffect(() => {
|
|
42718
|
+
if (open2) {
|
|
42719
|
+
if (activeTriggerId == null) {
|
|
42720
|
+
store.set("payload", void 0);
|
|
42721
|
+
}
|
|
42722
|
+
}
|
|
42723
|
+
}, [store, activeTriggerId, open2]);
|
|
42724
|
+
reactExports.useImperativeHandle(actionsRef, () => ({
|
|
42725
|
+
unmount: forceUnmount,
|
|
42726
|
+
close: () => store.setOpen(false, createChangeEventDetails(imperativeAction))
|
|
42727
|
+
}), [forceUnmount, store]);
|
|
42728
|
+
const shouldRenderInteractions = open2 || mounted;
|
|
42729
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs(PreviewCardRootContext.Provider, {
|
|
42730
|
+
value: store,
|
|
42731
|
+
children: [handle2 && /* @__PURE__ */ jsxRuntimeExports.jsx(PopupHandleAttachment, {
|
|
42732
|
+
handle: handle2,
|
|
42733
|
+
store
|
|
42734
|
+
}), shouldRenderInteractions && /* @__PURE__ */ jsxRuntimeExports.jsx(PreviewCardInteractions, {
|
|
42735
|
+
store
|
|
42736
|
+
}), typeof children2 === "function" ? children2({
|
|
42737
|
+
payload
|
|
42738
|
+
}) : children2]
|
|
42739
|
+
});
|
|
42740
|
+
}
|
|
42741
|
+
function PreviewCardInteractions({
|
|
42742
|
+
store
|
|
42743
|
+
}) {
|
|
42744
|
+
const floatingRootContext = store.useState("floatingRootContext");
|
|
42745
|
+
const dismiss = useDismiss(floatingRootContext);
|
|
42746
|
+
usePopupInteractionProps(store, {
|
|
42747
|
+
activeTriggerProps: dismiss.reference,
|
|
42748
|
+
inactiveTriggerProps: dismiss.trigger,
|
|
42749
|
+
popupProps: dismiss.floating
|
|
42750
|
+
});
|
|
42751
|
+
return null;
|
|
42752
|
+
}
|
|
42753
|
+
const PreviewCardRoot = fastComponent(function PreviewCardRoot2(props) {
|
|
42754
|
+
if (usePreviewCardRootContext(true)) {
|
|
42755
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(PreviewCardRootComponent, {
|
|
42756
|
+
...props
|
|
42757
|
+
});
|
|
42758
|
+
}
|
|
42759
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(FloatingTree, {
|
|
42760
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(PreviewCardRootComponent, {
|
|
42761
|
+
...props
|
|
42762
|
+
})
|
|
42763
|
+
});
|
|
42764
|
+
});
|
|
42765
|
+
const PreviewCardPortalContext = /* @__PURE__ */ reactExports.createContext(void 0);
|
|
42766
|
+
function usePreviewCardPortalContext() {
|
|
42767
|
+
const value = reactExports.useContext(PreviewCardPortalContext);
|
|
42768
|
+
if (value === void 0) {
|
|
42769
|
+
throw new Error(formatErrorMessage(48));
|
|
42770
|
+
}
|
|
42771
|
+
return value;
|
|
42772
|
+
}
|
|
42773
|
+
const PreviewCardPortal = /* @__PURE__ */ reactExports.forwardRef(function PreviewCardPortal2(props, forwardedRef) {
|
|
42774
|
+
const {
|
|
42775
|
+
keepMounted = false,
|
|
42776
|
+
...portalProps
|
|
42777
|
+
} = props;
|
|
42778
|
+
const store = usePreviewCardRootContext();
|
|
42779
|
+
const mounted = store.useState("mounted");
|
|
42780
|
+
const shouldRender = mounted || keepMounted;
|
|
42781
|
+
if (!shouldRender) {
|
|
42782
|
+
return null;
|
|
42783
|
+
}
|
|
42784
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(PreviewCardPortalContext.Provider, {
|
|
42785
|
+
value: keepMounted,
|
|
42786
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(FloatingPortalLite, {
|
|
42787
|
+
ref: forwardedRef,
|
|
42788
|
+
...portalProps
|
|
42789
|
+
})
|
|
42790
|
+
});
|
|
42791
|
+
});
|
|
42792
|
+
const PreviewCardTrigger = fastComponentRef(function PreviewCardTrigger2(componentProps, forwardedRef) {
|
|
42793
|
+
const {
|
|
42794
|
+
render: render4,
|
|
42795
|
+
className,
|
|
42796
|
+
delay,
|
|
42797
|
+
closeDelay,
|
|
42798
|
+
id: idProp,
|
|
42799
|
+
payload,
|
|
42800
|
+
handle: handle2,
|
|
42801
|
+
style: style2,
|
|
42802
|
+
...elementProps
|
|
42803
|
+
} = componentProps;
|
|
42804
|
+
const rootContext = usePreviewCardRootContext(true);
|
|
42805
|
+
const handleStore = usePopupHandleStore(handle2);
|
|
42806
|
+
const store = handleStore ?? rootContext;
|
|
42807
|
+
if (!store) {
|
|
42808
|
+
throw new Error(formatErrorMessage(89));
|
|
42809
|
+
}
|
|
42810
|
+
const thisTriggerId = useBaseUiId(idProp);
|
|
42811
|
+
const isTriggerActive = store.useState("isTriggerActive", thisTriggerId);
|
|
42812
|
+
const isOpenedByThisTrigger = store.useState("isOpenedByTrigger", thisTriggerId);
|
|
42813
|
+
const floatingRootContext = store.useState("floatingRootContext");
|
|
42814
|
+
const inlineRectCoordsRef = store.context.inlineRectCoordsRef;
|
|
42815
|
+
const triggerElementRef = reactExports.useRef(null);
|
|
42816
|
+
const delayWithDefault = delay ?? OPEN_DELAY$1;
|
|
42817
|
+
const closeDelayWithDefault = closeDelay ?? CLOSE_DELAY;
|
|
42818
|
+
const {
|
|
42819
|
+
registerTrigger,
|
|
42820
|
+
isMountedByThisTrigger
|
|
42821
|
+
} = useTriggerDataForwarding(thisTriggerId, triggerElementRef, store, {
|
|
42822
|
+
payload,
|
|
42823
|
+
closeDelay: closeDelayWithDefault
|
|
42824
|
+
});
|
|
42825
|
+
const hoverProps = useHoverReferenceInteraction(floatingRootContext, {
|
|
42826
|
+
mouseOnly: true,
|
|
42827
|
+
move: false,
|
|
42828
|
+
handleClose: safePolygon(),
|
|
42829
|
+
delay: () => ({
|
|
42830
|
+
open: delayWithDefault,
|
|
42831
|
+
close: closeDelayWithDefault
|
|
42832
|
+
}),
|
|
42833
|
+
triggerElementRef,
|
|
42834
|
+
isActiveTrigger: isTriggerActive,
|
|
42835
|
+
isClosing: () => store.select("transitionStatus") === "ending"
|
|
42836
|
+
});
|
|
42837
|
+
const focusProps = useFocus(floatingRootContext, {
|
|
42838
|
+
delay: delayWithDefault
|
|
42839
|
+
});
|
|
42840
|
+
const state2 = {
|
|
42841
|
+
open: isOpenedByThisTrigger
|
|
42842
|
+
};
|
|
42843
|
+
const rootTriggerProps = store.useState("triggerProps", isMountedByThisTrigger);
|
|
42844
|
+
const inlineRectTriggerProps = getInlineRectTriggerProps(inlineRectCoordsRef, isOpenedByThisTrigger);
|
|
42845
|
+
const element2 = useRenderElement("a", componentProps, {
|
|
42846
|
+
state: state2,
|
|
42847
|
+
ref: [forwardedRef, registerTrigger, triggerElementRef],
|
|
42848
|
+
props: [hoverProps, focusProps.reference, rootTriggerProps, inlineRectTriggerProps, {
|
|
42849
|
+
id: thisTriggerId
|
|
42850
|
+
}, elementProps],
|
|
42851
|
+
stateAttributesMapping: triggerOpenStateMapping$1
|
|
42852
|
+
});
|
|
42853
|
+
return element2;
|
|
42854
|
+
});
|
|
42855
|
+
const PreviewCardPositionerContext = /* @__PURE__ */ reactExports.createContext(void 0);
|
|
42856
|
+
function usePreviewCardPositionerContext() {
|
|
42857
|
+
const context = reactExports.useContext(PreviewCardPositionerContext);
|
|
42858
|
+
if (context === void 0) {
|
|
42859
|
+
throw new Error(formatErrorMessage(49));
|
|
42860
|
+
}
|
|
42861
|
+
return context;
|
|
42862
|
+
}
|
|
42863
|
+
const PreviewCardPositioner = /* @__PURE__ */ reactExports.forwardRef(function PreviewCardPositioner2(componentProps, forwardedRef) {
|
|
42864
|
+
const {
|
|
42865
|
+
render: render4,
|
|
42866
|
+
className,
|
|
42867
|
+
anchor: anchor2,
|
|
42868
|
+
positionMethod = "absolute",
|
|
42869
|
+
side = "bottom",
|
|
42870
|
+
align = "center",
|
|
42871
|
+
sideOffset = 0,
|
|
42872
|
+
alignOffset = 0,
|
|
42873
|
+
collisionBoundary = "clipping-ancestors",
|
|
42874
|
+
collisionPadding = 5,
|
|
42875
|
+
arrowPadding = 5,
|
|
42876
|
+
sticky = false,
|
|
42877
|
+
disableAnchorTracking = false,
|
|
42878
|
+
collisionAvoidance = POPUP_COLLISION_AVOIDANCE,
|
|
42879
|
+
style: style2,
|
|
42880
|
+
...elementProps
|
|
42881
|
+
} = componentProps;
|
|
42882
|
+
const store = usePreviewCardRootContext();
|
|
42883
|
+
const keepMounted = usePreviewCardPortalContext();
|
|
42884
|
+
const nodeId = useFloatingNodeId();
|
|
42885
|
+
const open2 = store.useState("open");
|
|
42886
|
+
const mounted = store.useState("mounted");
|
|
42887
|
+
const floatingRootContext = store.useState("floatingRootContext");
|
|
42888
|
+
const instantType = store.useState("instantType");
|
|
42889
|
+
const transitionStatus = store.useState("transitionStatus");
|
|
42890
|
+
const adaptiveOrigin = store.useState("adaptiveOrigin");
|
|
42891
|
+
const inlineRectCoordsRef = store.context.inlineRectCoordsRef;
|
|
42892
|
+
const positioning = useAnchorPositioning({
|
|
42893
|
+
anchor: anchor2,
|
|
42894
|
+
floatingRootContext,
|
|
42895
|
+
positionMethod,
|
|
42896
|
+
mounted,
|
|
42897
|
+
side,
|
|
42898
|
+
sideOffset,
|
|
42899
|
+
align,
|
|
42900
|
+
alignOffset,
|
|
42901
|
+
arrowPadding,
|
|
42902
|
+
collisionBoundary,
|
|
42903
|
+
collisionPadding,
|
|
42904
|
+
sticky,
|
|
42905
|
+
disableAnchorTracking,
|
|
42906
|
+
keepMounted,
|
|
42907
|
+
nodeId,
|
|
42908
|
+
collisionAvoidance,
|
|
42909
|
+
adaptiveOrigin,
|
|
42910
|
+
inline: createInlineMiddleware(inlineRectCoordsRef)
|
|
42911
|
+
});
|
|
42912
|
+
const updatePosition = positioning.update;
|
|
42913
|
+
useIsoLayoutEffect(() => {
|
|
42914
|
+
if (open2 && mounted) {
|
|
42915
|
+
updatePosition();
|
|
42916
|
+
}
|
|
42917
|
+
}, [open2, mounted, updatePosition]);
|
|
42918
|
+
const state2 = {
|
|
42919
|
+
open: open2,
|
|
42920
|
+
side: positioning.side,
|
|
42921
|
+
align: positioning.align,
|
|
42922
|
+
anchorHidden: positioning.anchorHidden,
|
|
42923
|
+
instant: instantType
|
|
42924
|
+
};
|
|
42925
|
+
const element2 = usePositioner(componentProps, state2, {
|
|
42926
|
+
styles: positioning.positionerStyles,
|
|
42927
|
+
transitionStatus,
|
|
42928
|
+
props: elementProps,
|
|
42929
|
+
refs: [forwardedRef, store.useStateSetter("positionerElement")],
|
|
42930
|
+
hidden: !mounted,
|
|
42931
|
+
inert: !open2
|
|
42932
|
+
});
|
|
42933
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(PreviewCardPositionerContext.Provider, {
|
|
42934
|
+
value: positioning,
|
|
42935
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(FloatingNode, {
|
|
42936
|
+
id: nodeId,
|
|
42937
|
+
children: element2
|
|
42938
|
+
})
|
|
42939
|
+
});
|
|
42940
|
+
});
|
|
42941
|
+
const PreviewCardPopup = /* @__PURE__ */ reactExports.forwardRef(function PreviewCardPopup2(componentProps, forwardedRef) {
|
|
42942
|
+
const {
|
|
42943
|
+
className,
|
|
42944
|
+
render: render4,
|
|
42945
|
+
style: style2,
|
|
42946
|
+
...elementProps
|
|
42947
|
+
} = componentProps;
|
|
42948
|
+
const store = usePreviewCardRootContext();
|
|
42949
|
+
const {
|
|
42950
|
+
side,
|
|
42951
|
+
align
|
|
42952
|
+
} = usePreviewCardPositionerContext();
|
|
42953
|
+
const open2 = store.useState("open");
|
|
42954
|
+
const instantType = store.useState("instantType");
|
|
42955
|
+
const transitionStatus = store.useState("transitionStatus");
|
|
42956
|
+
const popupProps = store.useState("popupProps");
|
|
42957
|
+
const floatingContext = store.useState("floatingRootContext");
|
|
42958
|
+
const closeDelay = store.useState("closeDelay");
|
|
42959
|
+
useOpenChangeComplete({
|
|
42960
|
+
open: open2,
|
|
42961
|
+
ref: store.context.popupRef,
|
|
42962
|
+
onComplete() {
|
|
42963
|
+
if (open2) {
|
|
42964
|
+
store.context.onOpenChangeComplete?.(true);
|
|
42965
|
+
}
|
|
42966
|
+
}
|
|
42967
|
+
});
|
|
42968
|
+
useHoverFloatingInteraction(floatingContext, {
|
|
42969
|
+
closeDelay
|
|
42970
|
+
});
|
|
42971
|
+
const state2 = {
|
|
42972
|
+
open: open2,
|
|
42973
|
+
side,
|
|
42974
|
+
align,
|
|
42975
|
+
instant: instantType,
|
|
42976
|
+
transitionStatus
|
|
42977
|
+
};
|
|
42978
|
+
const element2 = useRenderElement("div", componentProps, {
|
|
42979
|
+
state: state2,
|
|
42980
|
+
ref: [forwardedRef, store.context.popupRef, store.useStateSetter("popupElement")],
|
|
42981
|
+
props: [FOCUSABLE_POPUP_PROPS, popupProps, getDisabledMountTransitionStyles(transitionStatus), elementProps],
|
|
42982
|
+
stateAttributesMapping: popupTransitionStateMapping
|
|
42983
|
+
});
|
|
42984
|
+
return element2;
|
|
42985
|
+
});
|
|
42986
|
+
function HoverCard({ ...props }) {
|
|
42987
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(PreviewCardRoot, { "data-slot": "hover-card", ...props });
|
|
42988
|
+
}
|
|
42989
|
+
function HoverCardTrigger({ ...props }) {
|
|
42990
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(PreviewCardTrigger, { "data-slot": "hover-card-trigger", ...props });
|
|
42991
|
+
}
|
|
42992
|
+
function HoverCardContent({
|
|
42993
|
+
className,
|
|
42994
|
+
side = "bottom",
|
|
42995
|
+
sideOffset = 4,
|
|
42996
|
+
align = "center",
|
|
42997
|
+
alignOffset = 4,
|
|
42998
|
+
...props
|
|
42999
|
+
}) {
|
|
43000
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(PreviewCardPortal, { "data-slot": "hover-card-portal", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
43001
|
+
PreviewCardPositioner,
|
|
43002
|
+
{
|
|
43003
|
+
align,
|
|
43004
|
+
alignOffset,
|
|
43005
|
+
side,
|
|
43006
|
+
sideOffset,
|
|
43007
|
+
className: "isolate z-50",
|
|
43008
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
43009
|
+
PreviewCardPopup,
|
|
43010
|
+
{
|
|
43011
|
+
"data-slot": "hover-card-content",
|
|
43012
|
+
className: cn$8(
|
|
43013
|
+
"z-50 w-64 origin-(--transform-origin) rounded-lg bg-popover p-2.5 text-sm text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
|
|
43014
|
+
className
|
|
43015
|
+
),
|
|
43016
|
+
...props
|
|
43017
|
+
}
|
|
43018
|
+
)
|
|
43019
|
+
}
|
|
43020
|
+
) });
|
|
43021
|
+
}
|
|
43022
|
+
function Separator({
|
|
43023
|
+
className,
|
|
43024
|
+
orientation = "horizontal",
|
|
43025
|
+
...props
|
|
43026
|
+
}) {
|
|
43027
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
43028
|
+
Separator$1,
|
|
43029
|
+
{
|
|
43030
|
+
"data-slot": "separator",
|
|
43031
|
+
orientation,
|
|
43032
|
+
className: cn$8(
|
|
43033
|
+
"shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch",
|
|
43034
|
+
className
|
|
43035
|
+
),
|
|
43036
|
+
...props
|
|
43037
|
+
}
|
|
43038
|
+
);
|
|
43039
|
+
}
|
|
42847
43040
|
function getErrorMessage(error, fallbackMessage) {
|
|
42848
43041
|
return extractErrorMessage(error) || fallbackMessage;
|
|
42849
43042
|
}
|
|
43043
|
+
function formatRelativeTime(timestamp2, language) {
|
|
43044
|
+
const diff = Date.now() - timestamp2;
|
|
43045
|
+
const rtf = new Intl.RelativeTimeFormat(language, { numeric: "auto" });
|
|
43046
|
+
const minutes = Math.round(diff / 6e4);
|
|
43047
|
+
if (minutes < 1) return rtf.format(0, "minute");
|
|
43048
|
+
if (minutes < 60) return rtf.format(-minutes, "minute");
|
|
43049
|
+
const hours = Math.round(minutes / 60);
|
|
43050
|
+
if (hours < 24) return rtf.format(-hours, "hour");
|
|
43051
|
+
const days = Math.round(hours / 24);
|
|
43052
|
+
if (days < 30) return rtf.format(-days, "day");
|
|
43053
|
+
return new Date(timestamp2).toLocaleDateString(language);
|
|
43054
|
+
}
|
|
43055
|
+
function projectHoverId(id32) {
|
|
43056
|
+
return `p:${id32}`;
|
|
43057
|
+
}
|
|
43058
|
+
function sessionHoverId(id32) {
|
|
43059
|
+
return `s:${id32}`;
|
|
43060
|
+
}
|
|
42850
43061
|
function Sidebar() {
|
|
42851
|
-
const { t: t2, i18n
|
|
43062
|
+
const { t: t2, i18n } = useTranslation();
|
|
42852
43063
|
const navigate = useNavigate();
|
|
42853
43064
|
const location2 = useLocation();
|
|
42854
43065
|
const [optimisticPath, setOptimisticPath] = reactExports.useState(null);
|
|
@@ -42923,8 +43134,7 @@ function Sidebar() {
|
|
|
42923
43134
|
[configuredAgents]
|
|
42924
43135
|
);
|
|
42925
43136
|
const [expandedProjects, setExpandedProjects] = reactExports.useState({});
|
|
42926
|
-
const [
|
|
42927
|
-
const [openSessionMenuId, setOpenSessionMenuId] = reactExports.useState(null);
|
|
43137
|
+
const [hoverId, setHoverId] = reactExports.useState(null);
|
|
42928
43138
|
const { prompt, confirm: confirm2, toast: toast2 } = useMessage();
|
|
42929
43139
|
const showMacTrafficLightSpace = isMacApp && !isFullScreen;
|
|
42930
43140
|
const refreshData = async () => {
|
|
@@ -43206,25 +43416,22 @@ function Sidebar() {
|
|
|
43206
43416
|
/* @__PURE__ */ jsxRuntimeExports.jsx(ScrollArea, { className: "min-h-0 flex-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-0.5 p-1.5", children: sortedProjects.map((project) => {
|
|
43207
43417
|
const projectSessions = sessionsByProject[project.id] ?? [];
|
|
43208
43418
|
const expanded = isProjectExpanded(project.id);
|
|
43209
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-0.5", children: [
|
|
43419
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-0.5 group", children: [
|
|
43210
43420
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
43211
|
-
|
|
43421
|
+
HoverCard,
|
|
43212
43422
|
{
|
|
43423
|
+
open: hoverId === projectHoverId(project.id),
|
|
43213
43424
|
onOpenChange: (open2) => {
|
|
43214
|
-
|
|
43215
|
-
(prev2) => open2 ? project.id : prev2 === project.id ? null : prev2
|
|
43425
|
+
setHoverId(
|
|
43426
|
+
(prev2) => open2 ? projectHoverId(project.id) : prev2 === projectHoverId(project.id) ? null : prev2
|
|
43216
43427
|
);
|
|
43217
43428
|
},
|
|
43218
43429
|
children: [
|
|
43219
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
43220
|
-
|
|
43430
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(HoverCardTrigger, { render: /* @__PURE__ */ jsxRuntimeExports.jsx("div", {}), delay: 50, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
43431
|
+
"div",
|
|
43221
43432
|
{
|
|
43222
|
-
render: /* @__PURE__ */ jsxRuntimeExports.jsx("div", {}),
|
|
43223
|
-
className: `group flex h-7 cursor-default items-center gap-1.5 rounded-md px-1.5 text-xs font-normal text-sidebar-foreground/45 hover:bg-sidebar-accent/25 hover:text-sidebar-foreground/80 ${openProjectMenuId === project.id ? "bg-sidebar-accent/25 text-sidebar-foreground/80" : ""}`,
|
|
43224
43433
|
onClick: () => toggleProject(project.id),
|
|
43225
|
-
|
|
43226
|
-
e11.stopPropagation();
|
|
43227
|
-
},
|
|
43434
|
+
className: `flex h-7 cursor-default items-center gap-1.5 rounded-md px-1.5 text-xs font-normal transition-colors text-sidebar-foreground/45 hover:bg-sidebar-accent/25 hover:text-sidebar-foreground/80 ${hoverId === projectHoverId(project.id) ? "bg-sidebar-accent/25 text-sidebar-foreground/80" : ""}`,
|
|
43228
43435
|
children: [
|
|
43229
43436
|
expanded ? /* @__PURE__ */ jsxRuntimeExports.jsx(FolderOpen, { className: "size-3.5" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(FolderClosed, { className: "size-3.5" }),
|
|
43230
43437
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex-1 truncate leading-normal font-normal uppercase select-none", children: project.title }),
|
|
@@ -43236,199 +43443,272 @@ function Sidebar() {
|
|
|
43236
43443
|
e11.stopPropagation();
|
|
43237
43444
|
openNewSessionDialog(project.id);
|
|
43238
43445
|
},
|
|
43239
|
-
className: `flex size-4 items-center justify-center rounded-sm text-sidebar-foreground/40 hover:bg-sidebar-accent/25 hover:text-sidebar-foreground/70 ${projectSessions.length === 0 ? "opacity-100" : "opacity-0 group-hover:opacity-100"}`,
|
|
43446
|
+
className: `flex size-4 items-center justify-center rounded-sm text-sidebar-foreground/40 hover:bg-sidebar-accent/25 hover:text-sidebar-foreground/70 transition-opacity duration-300 ${projectSessions.length === 0 ? "opacity-100" : "opacity-0 group-hover:opacity-100"}`,
|
|
43240
43447
|
"aria-label": t2("sidebar.createChatInProject", {
|
|
43241
43448
|
defaultValue: "Create chat in {{title}}",
|
|
43242
43449
|
title: project.title
|
|
43243
43450
|
}),
|
|
43244
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsx(MessageCirclePlus, {})
|
|
43451
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(MessageCirclePlus, { className: "size-3.5" })
|
|
43245
43452
|
}
|
|
43246
43453
|
)
|
|
43247
43454
|
]
|
|
43248
43455
|
}
|
|
43249
|
-
),
|
|
43250
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
43251
|
-
|
|
43252
|
-
|
|
43253
|
-
|
|
43254
|
-
|
|
43255
|
-
|
|
43256
|
-
|
|
43257
|
-
|
|
43258
|
-
|
|
43259
|
-
|
|
43260
|
-
|
|
43261
|
-
|
|
43262
|
-
|
|
43263
|
-
|
|
43264
|
-
|
|
43265
|
-
|
|
43266
|
-
|
|
43267
|
-
|
|
43268
|
-
|
|
43269
|
-
|
|
43270
|
-
|
|
43271
|
-
|
|
43272
|
-
|
|
43273
|
-
|
|
43274
|
-
|
|
43275
|
-
|
|
43276
|
-
|
|
43277
|
-
|
|
43278
|
-
|
|
43279
|
-
|
|
43456
|
+
) }),
|
|
43457
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
43458
|
+
HoverCardContent,
|
|
43459
|
+
{
|
|
43460
|
+
side: "right",
|
|
43461
|
+
align: "start",
|
|
43462
|
+
sideOffset: 12,
|
|
43463
|
+
alignOffset: 1,
|
|
43464
|
+
className: "max-w-60 min-w-48 w-auto p-3",
|
|
43465
|
+
children: [
|
|
43466
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-2", children: [
|
|
43467
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-sm font-medium leading-snug", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: project.title }) }),
|
|
43468
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 text-xs text-muted-foreground py-px", children: [
|
|
43469
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Folder, { className: "size-3 shrink-0" }),
|
|
43470
|
+
isWebUI ? /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate", title: project.cwd, children: project.cwd }) : /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
43471
|
+
"button",
|
|
43472
|
+
{
|
|
43473
|
+
type: "button",
|
|
43474
|
+
onClick: () => void handleRevealProjectInFinder(project),
|
|
43475
|
+
title: project.cwd,
|
|
43476
|
+
className: "min-w-0 flex-1 truncate text-left transition-colors hover:text-foreground",
|
|
43477
|
+
children: project.cwd
|
|
43478
|
+
}
|
|
43479
|
+
)
|
|
43480
|
+
] })
|
|
43481
|
+
] }),
|
|
43482
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Separator, { className: "my-2.5" }),
|
|
43483
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col -mx-2 -my-1", children: [
|
|
43484
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
43485
|
+
"button",
|
|
43486
|
+
{
|
|
43487
|
+
type: "button",
|
|
43488
|
+
onClick: () => openNewSessionDialog(project.id),
|
|
43489
|
+
className: "flex h-7 items-center gap-2 rounded-md px-2 text-xs text-foreground transition-colors hover:bg-accent hover:text-accent-foreground",
|
|
43490
|
+
children: [
|
|
43491
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(MessageCirclePlus, { className: "size-3 shrink-0" }),
|
|
43492
|
+
t2("sidebar.newChat", "New Chat")
|
|
43493
|
+
]
|
|
43494
|
+
}
|
|
43495
|
+
),
|
|
43496
|
+
!isWebUI && /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
43497
|
+
"button",
|
|
43498
|
+
{
|
|
43499
|
+
type: "button",
|
|
43500
|
+
onClick: () => void handleRevealProjectInFinder(project),
|
|
43501
|
+
className: "flex h-7 items-center gap-2 rounded-md px-2 text-xs text-foreground transition-colors hover:bg-accent hover:text-accent-foreground",
|
|
43502
|
+
children: [
|
|
43503
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(FolderOpen, { className: "size-3 shrink-0" }),
|
|
43504
|
+
t2("sidebar.revealInFinder")
|
|
43505
|
+
]
|
|
43506
|
+
}
|
|
43507
|
+
),
|
|
43508
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
43509
|
+
"button",
|
|
43510
|
+
{
|
|
43511
|
+
type: "button",
|
|
43512
|
+
onClick: () => handleRenameProject(project),
|
|
43513
|
+
className: "flex h-7 items-center gap-2 rounded-md px-2 text-xs text-foreground transition-colors hover:bg-accent hover:text-accent-foreground",
|
|
43514
|
+
children: [
|
|
43515
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Pencil, { className: "size-3 shrink-0" }),
|
|
43516
|
+
t2("sidebar.rename")
|
|
43517
|
+
]
|
|
43518
|
+
}
|
|
43519
|
+
),
|
|
43520
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
43521
|
+
"button",
|
|
43522
|
+
{
|
|
43523
|
+
type: "button",
|
|
43524
|
+
onClick: () => void handleDeleteProject(project),
|
|
43525
|
+
className: "flex h-7 items-center gap-2 rounded-md px-2 text-xs text-destructive transition-colors hover:bg-destructive/10",
|
|
43526
|
+
children: [
|
|
43527
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Trash2, { className: "size-3 shrink-0" }),
|
|
43528
|
+
t2("sidebar.delete")
|
|
43529
|
+
]
|
|
43530
|
+
}
|
|
43531
|
+
)
|
|
43532
|
+
] })
|
|
43533
|
+
]
|
|
43534
|
+
}
|
|
43535
|
+
)
|
|
43536
|
+
]
|
|
43537
|
+
}
|
|
43538
|
+
),
|
|
43539
|
+
expanded && projectSessions.map((session2) => {
|
|
43540
|
+
const agentLabel = configuredAgents.find((a2) => a2.id === session2.agentId)?.id || session2.agentId;
|
|
43541
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
43542
|
+
HoverCard,
|
|
43543
|
+
{
|
|
43544
|
+
open: hoverId === sessionHoverId(session2.id),
|
|
43545
|
+
onOpenChange: (open2) => {
|
|
43546
|
+
setHoverId(
|
|
43547
|
+
(prev2) => open2 ? sessionHoverId(session2.id) : prev2 === sessionHoverId(session2.id) ? null : prev2
|
|
43548
|
+
);
|
|
43549
|
+
},
|
|
43550
|
+
children: [
|
|
43551
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(HoverCardTrigger, { render: /* @__PURE__ */ jsxRuntimeExports.jsx("div", {}), delay: 50, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
43552
|
+
"div",
|
|
43280
43553
|
{
|
|
43281
|
-
onClick: (
|
|
43282
|
-
|
|
43283
|
-
|
|
43284
|
-
|
|
43285
|
-
|
|
43286
|
-
|
|
43287
|
-
|
|
43288
|
-
|
|
43554
|
+
onClick: () => handleSelectSession(session2),
|
|
43555
|
+
className: `group flex h-8 cursor-default items-center justify-between rounded-md pl-1.5 pr-2 text-xs font-normal transition-colors ${activeSessionId === session2.id ? "bg-sidebar-accent text-sidebar-accent-foreground" : "text-sidebar-foreground/70 hover:bg-sidebar-accent hover:text-sidebar-foreground/95"} ${hoverId === sessionHoverId(session2.id) ? "bg-sidebar-accent" : ""}`,
|
|
43556
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
43557
|
+
"div",
|
|
43558
|
+
{
|
|
43559
|
+
className: cn$8(
|
|
43560
|
+
"flex min-w-0 flex-1 items-center gap-1.5",
|
|
43561
|
+
session2.connectionStatus === "connected" ? "" : "opacity-60"
|
|
43562
|
+
),
|
|
43563
|
+
children: [
|
|
43564
|
+
(() => {
|
|
43565
|
+
const state2 = sessionStates.get(session2.id);
|
|
43566
|
+
const hasAskUser = (state2?.askUserRequests?.length ?? 0) > 0;
|
|
43567
|
+
const isStreaming = session2.isStreaming;
|
|
43568
|
+
const completedStatus = state2?.completedStatus;
|
|
43569
|
+
if (hasAskUser) {
|
|
43570
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(CircleQuestionMark, { className: "size-3 shrink-0 text-sky-500" });
|
|
43571
|
+
}
|
|
43572
|
+
if (isStreaming) {
|
|
43573
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(LoaderCircle, { className: "size-3 animate-spin shrink-0" });
|
|
43574
|
+
}
|
|
43575
|
+
if (completedStatus === "success" || state2?.completedAt && !completedStatus) {
|
|
43576
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-3 shrink-0 text-green-500" });
|
|
43577
|
+
}
|
|
43578
|
+
if (completedStatus === "error") {
|
|
43579
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(TriangleAlert, { className: "size-3 shrink-0 text-yellow-500" });
|
|
43580
|
+
}
|
|
43581
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "size-3 shrink-0" });
|
|
43582
|
+
})(),
|
|
43583
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
43584
|
+
Badge,
|
|
43585
|
+
{
|
|
43586
|
+
variant: "outline",
|
|
43587
|
+
className: "px-1 -ml-0.5 text-[10px] uppercase select-none max-w-24",
|
|
43588
|
+
children: agentLabel
|
|
43589
|
+
}
|
|
43590
|
+
),
|
|
43591
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "min-w-0 flex-1 truncate leading-normal select-none", children: session2.title || t2("sidebar.newChat", "New Chat") }),
|
|
43592
|
+
activeIlinkSessionId === session2.id && /* @__PURE__ */ jsxRuntimeExports.jsx(MessageCircle, { className: "size-3 shrink-0 text-green-500" })
|
|
43593
|
+
]
|
|
43594
|
+
}
|
|
43595
|
+
)
|
|
43289
43596
|
}
|
|
43290
|
-
),
|
|
43291
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(ContextMenuSeparator, {}),
|
|
43597
|
+
) }),
|
|
43292
43598
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
43293
|
-
|
|
43599
|
+
HoverCardContent,
|
|
43294
43600
|
{
|
|
43295
|
-
|
|
43296
|
-
|
|
43297
|
-
|
|
43298
|
-
|
|
43299
|
-
|
|
43601
|
+
side: "right",
|
|
43602
|
+
align: "start",
|
|
43603
|
+
sideOffset: 12,
|
|
43604
|
+
alignOffset: 1,
|
|
43605
|
+
className: "max-w-60 min-w-48 w-auto p-3",
|
|
43300
43606
|
children: [
|
|
43301
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
43302
|
-
|
|
43303
|
-
|
|
43304
|
-
|
|
43305
|
-
|
|
43306
|
-
|
|
43307
|
-
|
|
43308
|
-
|
|
43309
|
-
|
|
43310
|
-
|
|
43311
|
-
|
|
43312
|
-
|
|
43313
|
-
|
|
43314
|
-
|
|
43315
|
-
|
|
43316
|
-
|
|
43317
|
-
|
|
43318
|
-
|
|
43319
|
-
|
|
43320
|
-
|
|
43321
|
-
|
|
43322
|
-
|
|
43323
|
-
|
|
43324
|
-
|
|
43325
|
-
|
|
43326
|
-
|
|
43327
|
-
|
|
43328
|
-
|
|
43329
|
-
|
|
43330
|
-
|
|
43331
|
-
|
|
43332
|
-
|
|
43333
|
-
|
|
43334
|
-
|
|
43335
|
-
|
|
43336
|
-
|
|
43337
|
-
|
|
43338
|
-
|
|
43339
|
-
|
|
43340
|
-
|
|
43341
|
-
|
|
43342
|
-
|
|
43343
|
-
|
|
43344
|
-
|
|
43345
|
-
|
|
43346
|
-
|
|
43347
|
-
|
|
43348
|
-
|
|
43607
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-2", children: [
|
|
43608
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-sm font-medium leading-snug", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: session2.title || t2("sidebar.newChat", "New Chat") }) }),
|
|
43609
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 text-xs text-muted-foreground py-px", children: [
|
|
43610
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Bot, { className: "size-3 shrink-0" }),
|
|
43611
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate", children: session2.agentId })
|
|
43612
|
+
] }),
|
|
43613
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 text-xs text-muted-foreground py-px", children: [
|
|
43614
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Folder, { className: "size-3 shrink-0" }),
|
|
43615
|
+
isWebUI ? /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate", children: project.title }) : /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
43616
|
+
"button",
|
|
43617
|
+
{
|
|
43618
|
+
type: "button",
|
|
43619
|
+
onClick: () => void handleRevealProjectInFinder(project),
|
|
43620
|
+
title: project.cwd,
|
|
43621
|
+
className: "min-w-0 flex-1 truncate text-left transition-colors hover:text-foreground",
|
|
43622
|
+
children: project.title
|
|
43623
|
+
}
|
|
43624
|
+
)
|
|
43625
|
+
] }),
|
|
43626
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 text-xs text-muted-foreground py-px", children: [
|
|
43627
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Clock, { className: "size-3 shrink-0" }),
|
|
43628
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "truncate", children: [
|
|
43629
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "mr-1", children: [
|
|
43630
|
+
t2("sidebar.updated", "Updated"),
|
|
43631
|
+
":"
|
|
43632
|
+
] }),
|
|
43633
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: formatRelativeTime(session2.updatedAt, i18n.language) })
|
|
43634
|
+
] })
|
|
43635
|
+
] }),
|
|
43636
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 text-xs text-muted-foreground py-px", children: [
|
|
43637
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(CalendarDays, { className: "size-3 shrink-0" }),
|
|
43638
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "truncate", children: [
|
|
43639
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "mr-1", children: [
|
|
43640
|
+
t2("sidebar.created", "Created"),
|
|
43641
|
+
":"
|
|
43642
|
+
] }),
|
|
43643
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: formatRelativeTime(session2.createdAt, i18n.language) })
|
|
43644
|
+
] })
|
|
43645
|
+
] })
|
|
43646
|
+
] }),
|
|
43647
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Separator, { className: "my-2.5" }),
|
|
43648
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col -mx-2 -my-1", children: [
|
|
43649
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
43650
|
+
"button",
|
|
43651
|
+
{
|
|
43652
|
+
type: "button",
|
|
43653
|
+
onClick: () => handleRenameSession(session2),
|
|
43654
|
+
className: "flex h-7 items-center gap-2 rounded-md px-2 text-xs text-foreground transition-colors hover:bg-accent hover:text-accent-foreground",
|
|
43655
|
+
children: [
|
|
43656
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Pencil, { className: "size-3 shrink-0" }),
|
|
43657
|
+
t2("sidebar.rename")
|
|
43658
|
+
]
|
|
43349
43659
|
}
|
|
43350
|
-
|
|
43351
|
-
|
|
43660
|
+
),
|
|
43661
|
+
ilinkStatus.connected && activeIlinkSessionId !== session2.id && /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
43662
|
+
"button",
|
|
43663
|
+
{
|
|
43664
|
+
type: "button",
|
|
43665
|
+
onClick: () => {
|
|
43666
|
+
request.setActiveIlinkSession({ sessionId: session2.id }).catch(() => {
|
|
43667
|
+
});
|
|
43668
|
+
},
|
|
43669
|
+
className: "flex h-7 items-center gap-2 rounded-md px-2 text-xs text-foreground transition-colors hover:bg-accent hover:text-accent-foreground",
|
|
43670
|
+
children: [
|
|
43671
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(MessageCircle, { className: "size-3 shrink-0" }),
|
|
43672
|
+
t2("sidebar.ilinkSetActive", "Set as WeChat Active")
|
|
43673
|
+
]
|
|
43352
43674
|
}
|
|
43353
|
-
|
|
43354
|
-
|
|
43355
|
-
|
|
43356
|
-
Badge,
|
|
43675
|
+
),
|
|
43676
|
+
ilinkStatus.connected && activeIlinkSessionId === session2.id && /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
43677
|
+
"button",
|
|
43357
43678
|
{
|
|
43358
|
-
|
|
43359
|
-
|
|
43360
|
-
|
|
43679
|
+
type: "button",
|
|
43680
|
+
onClick: () => {
|
|
43681
|
+
request.setActiveIlinkSession({ sessionId: "" }).catch(() => {
|
|
43682
|
+
});
|
|
43683
|
+
},
|
|
43684
|
+
className: "flex h-7 items-center gap-2 rounded-md px-2 text-xs text-foreground transition-colors hover:bg-accent hover:text-accent-foreground",
|
|
43685
|
+
children: [
|
|
43686
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(MessageCircle, { className: "size-3 shrink-0 text-green-500" }),
|
|
43687
|
+
t2("sidebar.ilinkUnsetActive", "Unset WeChat Active")
|
|
43688
|
+
]
|
|
43361
43689
|
}
|
|
43362
43690
|
),
|
|
43363
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
43364
|
-
|
|
43365
|
-
|
|
43366
|
-
|
|
43367
|
-
|
|
43368
|
-
|
|
43369
|
-
|
|
43370
|
-
|
|
43371
|
-
|
|
43372
|
-
|
|
43373
|
-
|
|
43374
|
-
|
|
43375
|
-
|
|
43376
|
-
handleRenameSession(session2);
|
|
43377
|
-
},
|
|
43378
|
-
children: [
|
|
43379
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(Pencil, {}),
|
|
43380
|
-
t2("sidebar.rename")
|
|
43381
|
-
]
|
|
43382
|
-
}
|
|
43383
|
-
),
|
|
43384
|
-
ilinkStatus.connected && activeIlinkSessionId !== session2.id && /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
43385
|
-
ContextMenuItem,
|
|
43386
|
-
{
|
|
43387
|
-
onClick: (e11) => {
|
|
43388
|
-
e11.stopPropagation();
|
|
43389
|
-
request.setActiveIlinkSession({ sessionId: session2.id }).catch(() => {
|
|
43390
|
-
});
|
|
43391
|
-
},
|
|
43392
|
-
children: [
|
|
43393
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(MessageCircle, {}),
|
|
43394
|
-
t2("sidebar.ilinkSetActive", "Set as WeChat Active")
|
|
43395
|
-
]
|
|
43396
|
-
}
|
|
43397
|
-
),
|
|
43398
|
-
ilinkStatus.connected && activeIlinkSessionId === session2.id && /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
43399
|
-
ContextMenuItem,
|
|
43400
|
-
{
|
|
43401
|
-
onClick: (e11) => {
|
|
43402
|
-
e11.stopPropagation();
|
|
43403
|
-
request.setActiveIlinkSession({ sessionId: "" }).catch(() => {
|
|
43404
|
-
});
|
|
43405
|
-
},
|
|
43406
|
-
children: [
|
|
43407
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(MessageCircle, {}),
|
|
43408
|
-
t2("sidebar.ilinkUnsetActive", "Unset WeChat Active")
|
|
43409
|
-
]
|
|
43410
|
-
}
|
|
43411
|
-
),
|
|
43412
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(ContextMenuSeparator, {}),
|
|
43413
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
43414
|
-
ContextMenuItem,
|
|
43415
|
-
{
|
|
43416
|
-
variant: "destructive",
|
|
43417
|
-
onClick: (e11) => {
|
|
43418
|
-
e11.stopPropagation();
|
|
43419
|
-
void handleDeleteSession(session2);
|
|
43420
|
-
},
|
|
43421
|
-
children: [
|
|
43422
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(Trash2, {}),
|
|
43423
|
-
t2("sidebar.delete")
|
|
43691
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
43692
|
+
"button",
|
|
43693
|
+
{
|
|
43694
|
+
type: "button",
|
|
43695
|
+
onClick: () => void handleDeleteSession(session2),
|
|
43696
|
+
className: "flex h-7 items-center gap-2 rounded-md px-2 text-xs text-destructive transition-colors hover:bg-destructive/10",
|
|
43697
|
+
children: [
|
|
43698
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Trash2, { className: "size-3 shrink-0" }),
|
|
43699
|
+
t2("sidebar.delete")
|
|
43700
|
+
]
|
|
43701
|
+
}
|
|
43702
|
+
)
|
|
43703
|
+
] })
|
|
43424
43704
|
]
|
|
43425
43705
|
}
|
|
43426
43706
|
)
|
|
43427
|
-
]
|
|
43428
|
-
|
|
43429
|
-
|
|
43430
|
-
|
|
43431
|
-
)
|
|
43707
|
+
]
|
|
43708
|
+
},
|
|
43709
|
+
session2.id
|
|
43710
|
+
);
|
|
43711
|
+
})
|
|
43432
43712
|
] }, project.id);
|
|
43433
43713
|
}) }) }),
|
|
43434
43714
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-auto border-t border-border", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
@@ -43962,7 +44242,7 @@ function Welcome() {
|
|
|
43962
44242
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute bottom-3 right-4 text-[11px] text-muted-foreground/40 z-10 pointer-events-none", children: [
|
|
43963
44243
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { children: [
|
|
43964
44244
|
"v",
|
|
43965
|
-
"0.1.
|
|
44245
|
+
"0.1.49"
|
|
43966
44246
|
] }),
|
|
43967
44247
|
false
|
|
43968
44248
|
] }),
|
|
@@ -44129,7 +44409,7 @@ function usePopoverRootContext(optional2) {
|
|
|
44129
44409
|
}
|
|
44130
44410
|
return context;
|
|
44131
44411
|
}
|
|
44132
|
-
const selectors
|
|
44412
|
+
const selectors = {
|
|
44133
44413
|
...popupStoreSelectors,
|
|
44134
44414
|
disabled: (state2) => state2.disabled,
|
|
44135
44415
|
instantType: (state2) => state2.instantType,
|
|
@@ -44147,7 +44427,7 @@ const selectors$1 = {
|
|
|
44147
44427
|
class PopoverStore extends ReactStore {
|
|
44148
44428
|
constructor(initialState2, floatingId, nested) {
|
|
44149
44429
|
const triggerElements = new PopupTriggerMap();
|
|
44150
|
-
super(createInitialState
|
|
44430
|
+
super(createInitialState(initialState2, triggerElements, floatingId, nested), createInitialContext(triggerElements), selectors);
|
|
44151
44431
|
}
|
|
44152
44432
|
setOpen = (nextOpen, eventDetails) => {
|
|
44153
44433
|
const isHover = eventDetails.reason === triggerHover;
|
|
@@ -44191,7 +44471,7 @@ class PopoverStore extends ReactStore {
|
|
|
44191
44471
|
this.set("instantType", instantType);
|
|
44192
44472
|
};
|
|
44193
44473
|
}
|
|
44194
|
-
function createInitialState
|
|
44474
|
+
function createInitialState(initialState2, triggerElements, floatingId, nested = false) {
|
|
44195
44475
|
const state2 = {
|
|
44196
44476
|
...createInitialPopupStoreState(),
|
|
44197
44477
|
disabled: false,
|
|
@@ -44214,7 +44494,7 @@ function createInitialState$1(initialState2, triggerElements, floatingId, nested
|
|
|
44214
44494
|
state2.floatingRootContext = createPopupFloatingRootContext(triggerElements, floatingId, nested);
|
|
44215
44495
|
return state2;
|
|
44216
44496
|
}
|
|
44217
|
-
function createInitialContext
|
|
44497
|
+
function createInitialContext(triggerElements) {
|
|
44218
44498
|
return {
|
|
44219
44499
|
popupRef: /* @__PURE__ */ reactExports.createRef(),
|
|
44220
44500
|
onOpenChange: void 0,
|
|
@@ -44328,7 +44608,7 @@ function PopoverInteractions({
|
|
|
44328
44608
|
});
|
|
44329
44609
|
return null;
|
|
44330
44610
|
}
|
|
44331
|
-
const OPEN_DELAY
|
|
44611
|
+
const OPEN_DELAY = 300;
|
|
44332
44612
|
const PopoverTrigger = /* @__PURE__ */ reactExports.forwardRef(function PopoverTrigger2(componentProps, forwardedRef) {
|
|
44333
44613
|
const {
|
|
44334
44614
|
render: render4,
|
|
@@ -44339,7 +44619,7 @@ const PopoverTrigger = /* @__PURE__ */ reactExports.forwardRef(function PopoverT
|
|
|
44339
44619
|
handle: handle2,
|
|
44340
44620
|
payload,
|
|
44341
44621
|
openOnHover = false,
|
|
44342
|
-
delay = OPEN_DELAY
|
|
44622
|
+
delay = OPEN_DELAY,
|
|
44343
44623
|
closeDelay = 0,
|
|
44344
44624
|
id: idProp,
|
|
44345
44625
|
...elementProps
|
|
@@ -46758,24 +47038,6 @@ function CollapsibleContent({
|
|
|
46758
47038
|
}
|
|
46759
47039
|
);
|
|
46760
47040
|
}
|
|
46761
|
-
function Separator({
|
|
46762
|
-
className,
|
|
46763
|
-
orientation = "horizontal",
|
|
46764
|
-
...props
|
|
46765
|
-
}) {
|
|
46766
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
46767
|
-
Separator$1,
|
|
46768
|
-
{
|
|
46769
|
-
"data-slot": "separator",
|
|
46770
|
-
orientation,
|
|
46771
|
-
className: cn$8(
|
|
46772
|
-
"shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch",
|
|
46773
|
-
className
|
|
46774
|
-
),
|
|
46775
|
-
...props
|
|
46776
|
-
}
|
|
46777
|
-
);
|
|
46778
|
-
}
|
|
46779
47041
|
function ItemGroup({ className, ...props }) {
|
|
46780
47042
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
46781
47043
|
"div",
|
|
@@ -47168,7 +47430,7 @@ function AgentTerminalOutput({
|
|
|
47168
47430
|
const cleanLog = reactExports.useMemo(() => {
|
|
47169
47431
|
return log3?.replace(/\u001b\[[0-9;]*[a-zA-Z]/g, "").replace(/\[[0-9;]*[0-9]m/g, "");
|
|
47170
47432
|
}, [log3]);
|
|
47171
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollArea, { className: "
|
|
47433
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollArea, { className: "text-foreground/80", viewportClassName: "max-h-[70vh]", children: /* @__PURE__ */ jsxRuntimeExports.jsx("pre", { ref: containerRef, className: "p-2 whitespace-pre-wrap font-mono text-[11px] leading-3.5", children: /* @__PURE__ */ jsxRuntimeExports.jsx("code", { children: cleanLog ?? t2("readonlyTerminal.noOutput") }) }) });
|
|
47172
47434
|
}
|
|
47173
47435
|
const scriptRel = /* @__PURE__ */ (function detectScriptRel() {
|
|
47174
47436
|
const relList = typeof document !== "undefined" && document.createElement("link").relList;
|
|
@@ -70831,7 +71093,7 @@ var lr$5 = (e11) => {
|
|
|
70831
71093
|
for (; t2 > 0 && e11[t2 - 1] === `
|
|
70832
71094
|
`; ) t2--;
|
|
70833
71095
|
return e11.slice(0, t2);
|
|
70834
|
-
}, cr$4 = reactExports.lazy(() => __vitePreload(() => import("./highlighted-body-OFNGDK62-
|
|
71096
|
+
}, cr$4 = reactExports.lazy(() => __vitePreload(() => import("./highlighted-body-OFNGDK62-gS-2OBX1.js"), true ? [] : void 0, import.meta.url).then((e11) => ({ default: e11.HighlightedCodeBlockBody }))), st$8 = ({ code: e11, language: t2, className: o4, children: n2, isIncomplete: r3 = false, startLine: s16, lineNumbers: a2, ...l6 }) => {
|
|
70835
71097
|
let i3 = y$d(), d2 = reactExports.useMemo(() => lr$5(e11), [e11]), c3 = reactExports.useMemo(() => ({ bg: "transparent", fg: "inherit", tokens: d2.split(`
|
|
70836
71098
|
`).map((p3) => [{ content: p3, color: "inherit", bgColor: "transparent", htmlStyle: {}, offset: 0 }]) }), [d2]);
|
|
70837
71099
|
return jsxRuntimeExports.jsx(nt$8.Provider, { value: { code: e11 }, children: jsxRuntimeExports.jsxs(ot$8, { isIncomplete: r3, language: t2, children: [jsxRuntimeExports.jsx(rt$7, { language: t2 }), n2 ? jsxRuntimeExports.jsx("div", { className: i3("pointer-events-none sticky top-2 z-10 -mt-10 flex h-8 items-center justify-end"), children: jsxRuntimeExports.jsx("div", { className: i3("pointer-events-auto flex shrink-0 items-center gap-2 rounded-md border border-sidebar bg-sidebar/80 px-1.5 py-1 supports-[backdrop-filter]:bg-sidebar/70 supports-[backdrop-filter]:backdrop-blur"), "data-streamdown": "code-block-actions", children: n2 }) }) : null, jsxRuntimeExports.jsx(reactExports.Suspense, { fallback: jsxRuntimeExports.jsx(At$6, { className: o4, language: t2, lineNumbers: a2, result: c3, startLine: s16, ...l6 }), children: jsxRuntimeExports.jsx(cr$4, { className: o4, code: d2, language: t2, lineNumbers: a2, raw: c3, startLine: s16, ...l6 }) })] }) });
|
|
@@ -95672,12 +95934,12 @@ var registerDefaultLayoutLoaders = /* @__PURE__ */ __name(() => {
|
|
|
95672
95934
|
registerLayoutLoaders([
|
|
95673
95935
|
{
|
|
95674
95936
|
name: "dagre",
|
|
95675
|
-
loader: /* @__PURE__ */ __name(async () => await __vitePreload(() => import("./dagre-KV5264BT-
|
|
95937
|
+
loader: /* @__PURE__ */ __name(async () => await __vitePreload(() => import("./dagre-KV5264BT-H1wB7v-Q.js"), true ? __vite__mapDeps([0,1,2,3,4,5]) : void 0, import.meta.url), "loader")
|
|
95676
95938
|
},
|
|
95677
95939
|
...[
|
|
95678
95940
|
{
|
|
95679
95941
|
name: "cose-bilkent",
|
|
95680
|
-
loader: /* @__PURE__ */ __name(async () => await __vitePreload(() => import("./cose-bilkent-S5V4N54A-
|
|
95942
|
+
loader: /* @__PURE__ */ __name(async () => await __vitePreload(() => import("./cose-bilkent-S5V4N54A-CH_2zOJR.js"), true ? __vite__mapDeps([6,7]) : void 0, import.meta.url), "loader")
|
|
95681
95943
|
}
|
|
95682
95944
|
]
|
|
95683
95945
|
]);
|
|
@@ -96133,7 +96395,7 @@ var detector = /* @__PURE__ */ __name((txt) => {
|
|
|
96133
96395
|
}, "detector");
|
|
96134
96396
|
var loader = /* @__PURE__ */ __name(async () => {
|
|
96135
96397
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96136
|
-
const { diagram: diagram22 } = await import("./c4Diagram-AHTNJAMY-
|
|
96398
|
+
const { diagram: diagram22 } = await import("./c4Diagram-AHTNJAMY-DLQf0xBh.js");
|
|
96137
96399
|
return { diagram: diagram22 };
|
|
96138
96400
|
}, true ? __vite__mapDeps([8,9]) : void 0, import.meta.url);
|
|
96139
96401
|
return { id: id$1, diagram: diagram2 };
|
|
@@ -96153,7 +96415,7 @@ var detector2 = /* @__PURE__ */ __name((txt, config2) => {
|
|
|
96153
96415
|
}, "detector");
|
|
96154
96416
|
var loader2 = /* @__PURE__ */ __name(async () => {
|
|
96155
96417
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96156
|
-
const { diagram: diagram22 } = await import("./flowDiagram-DWJPFMVM-
|
|
96418
|
+
const { diagram: diagram22 } = await import("./flowDiagram-DWJPFMVM-BidIy8zc.js");
|
|
96157
96419
|
return { diagram: diagram22 };
|
|
96158
96420
|
}, true ? __vite__mapDeps([10,11,9,12,13,14]) : void 0, import.meta.url);
|
|
96159
96421
|
return { id: id2, diagram: diagram2 };
|
|
@@ -96179,7 +96441,7 @@ var detector3 = /* @__PURE__ */ __name((txt, config2) => {
|
|
|
96179
96441
|
}, "detector");
|
|
96180
96442
|
var loader3 = /* @__PURE__ */ __name(async () => {
|
|
96181
96443
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96182
|
-
const { diagram: diagram22 } = await import("./flowDiagram-DWJPFMVM-
|
|
96444
|
+
const { diagram: diagram22 } = await import("./flowDiagram-DWJPFMVM-BidIy8zc.js");
|
|
96183
96445
|
return { diagram: diagram22 };
|
|
96184
96446
|
}, true ? __vite__mapDeps([10,11,9,12,13,14]) : void 0, import.meta.url);
|
|
96185
96447
|
return { id: id3, diagram: diagram2 };
|
|
@@ -96196,7 +96458,7 @@ var detector4 = /* @__PURE__ */ __name((txt) => {
|
|
|
96196
96458
|
}, "detector");
|
|
96197
96459
|
var loader4 = /* @__PURE__ */ __name(async () => {
|
|
96198
96460
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96199
|
-
const { diagram: diagram22 } = await import("./erDiagram-SMLLAGMA-
|
|
96461
|
+
const { diagram: diagram22 } = await import("./erDiagram-SMLLAGMA-B35CLzqQ.js");
|
|
96200
96462
|
return { diagram: diagram22 };
|
|
96201
96463
|
}, true ? __vite__mapDeps([15,12,13,14]) : void 0, import.meta.url);
|
|
96202
96464
|
return { id: id4, diagram: diagram2 };
|
|
@@ -96213,7 +96475,7 @@ var detector5 = /* @__PURE__ */ __name((txt) => {
|
|
|
96213
96475
|
}, "detector");
|
|
96214
96476
|
var loader5 = /* @__PURE__ */ __name(async () => {
|
|
96215
96477
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96216
|
-
const { diagram: diagram22 } = await import("./gitGraphDiagram-UUTBAWPF-
|
|
96478
|
+
const { diagram: diagram22 } = await import("./gitGraphDiagram-UUTBAWPF-7wQ8gKPV.js");
|
|
96217
96479
|
return { diagram: diagram22 };
|
|
96218
96480
|
}, true ? __vite__mapDeps([16,17,18,19,4,2]) : void 0, import.meta.url);
|
|
96219
96481
|
return { id: id5, diagram: diagram2 };
|
|
@@ -96230,7 +96492,7 @@ var detector6 = /* @__PURE__ */ __name((txt) => {
|
|
|
96230
96492
|
}, "detector");
|
|
96231
96493
|
var loader6 = /* @__PURE__ */ __name(async () => {
|
|
96232
96494
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96233
|
-
const { diagram: diagram22 } = await import("./ganttDiagram-T4ZO3ILL-
|
|
96495
|
+
const { diagram: diagram22 } = await import("./ganttDiagram-T4ZO3ILL-CqV1ei6S.js");
|
|
96234
96496
|
return { diagram: diagram22 };
|
|
96235
96497
|
}, true ? __vite__mapDeps([20,21,22,23]) : void 0, import.meta.url);
|
|
96236
96498
|
return { id: id6, diagram: diagram2 };
|
|
@@ -96247,7 +96509,7 @@ var detector7 = /* @__PURE__ */ __name((txt) => {
|
|
|
96247
96509
|
}, "detector");
|
|
96248
96510
|
var loader7 = /* @__PURE__ */ __name(async () => {
|
|
96249
96511
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96250
|
-
const { diagram: diagram22 } = await import("./infoDiagram-42DDH7IO-
|
|
96512
|
+
const { diagram: diagram22 } = await import("./infoDiagram-42DDH7IO-DlKxzT4w.js");
|
|
96251
96513
|
return { diagram: diagram22 };
|
|
96252
96514
|
}, true ? __vite__mapDeps([24,19,4,2]) : void 0, import.meta.url);
|
|
96253
96515
|
return { id: id7, diagram: diagram2 };
|
|
@@ -96263,7 +96525,7 @@ var detector8 = /* @__PURE__ */ __name((txt) => {
|
|
|
96263
96525
|
}, "detector");
|
|
96264
96526
|
var loader8 = /* @__PURE__ */ __name(async () => {
|
|
96265
96527
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96266
|
-
const { diagram: diagram22 } = await import("./pieDiagram-DEJITSTG-
|
|
96528
|
+
const { diagram: diagram22 } = await import("./pieDiagram-DEJITSTG-BN6Ummnw.js");
|
|
96267
96529
|
return { diagram: diagram22 };
|
|
96268
96530
|
}, true ? __vite__mapDeps([25,17,19,4,2,26,27,22]) : void 0, import.meta.url);
|
|
96269
96531
|
return { id: id8, diagram: diagram2 };
|
|
@@ -96279,7 +96541,7 @@ var detector9 = /* @__PURE__ */ __name((txt) => {
|
|
|
96279
96541
|
}, "detector");
|
|
96280
96542
|
var loader9 = /* @__PURE__ */ __name(async () => {
|
|
96281
96543
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96282
|
-
const { diagram: diagram22 } = await import("./quadrantDiagram-34T5L4WZ-
|
|
96544
|
+
const { diagram: diagram22 } = await import("./quadrantDiagram-34T5L4WZ-DTE_dLJv.js");
|
|
96283
96545
|
return { diagram: diagram22 };
|
|
96284
96546
|
}, true ? __vite__mapDeps([28,21,22,23]) : void 0, import.meta.url);
|
|
96285
96547
|
return { id: id9, diagram: diagram2 };
|
|
@@ -96296,7 +96558,7 @@ var detector10 = /* @__PURE__ */ __name((txt) => {
|
|
|
96296
96558
|
}, "detector");
|
|
96297
96559
|
var loader10 = /* @__PURE__ */ __name(async () => {
|
|
96298
96560
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96299
|
-
const { diagram: diagram22 } = await import("./xychartDiagram-5P7HB3ND-
|
|
96561
|
+
const { diagram: diagram22 } = await import("./xychartDiagram-5P7HB3ND-UGlSGsDE.js");
|
|
96300
96562
|
return { diagram: diagram22 };
|
|
96301
96563
|
}, true ? __vite__mapDeps([29,22,27,21,23]) : void 0, import.meta.url);
|
|
96302
96564
|
return { id: id10, diagram: diagram2 };
|
|
@@ -96313,7 +96575,7 @@ var detector11 = /* @__PURE__ */ __name((txt) => {
|
|
|
96313
96575
|
}, "detector");
|
|
96314
96576
|
var loader11 = /* @__PURE__ */ __name(async () => {
|
|
96315
96577
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96316
|
-
const { diagram: diagram22 } = await import("./requirementDiagram-MS252O5E-
|
|
96578
|
+
const { diagram: diagram22 } = await import("./requirementDiagram-MS252O5E-DVDS2RYN.js");
|
|
96317
96579
|
return { diagram: diagram22 };
|
|
96318
96580
|
}, true ? __vite__mapDeps([30,12,13]) : void 0, import.meta.url);
|
|
96319
96581
|
return { id: id11, diagram: diagram2 };
|
|
@@ -96330,7 +96592,7 @@ var detector12 = /* @__PURE__ */ __name((txt) => {
|
|
|
96330
96592
|
}, "detector");
|
|
96331
96593
|
var loader12 = /* @__PURE__ */ __name(async () => {
|
|
96332
96594
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96333
|
-
const { diagram: diagram22 } = await import("./sequenceDiagram-FGHM5R23-
|
|
96595
|
+
const { diagram: diagram22 } = await import("./sequenceDiagram-FGHM5R23-89GBJZmd.js");
|
|
96334
96596
|
return { diagram: diagram22 };
|
|
96335
96597
|
}, true ? __vite__mapDeps([31,9,18]) : void 0, import.meta.url);
|
|
96336
96598
|
return { id: id12, diagram: diagram2 };
|
|
@@ -96350,7 +96612,7 @@ var detector13 = /* @__PURE__ */ __name((txt, config2) => {
|
|
|
96350
96612
|
}, "detector");
|
|
96351
96613
|
var loader13 = /* @__PURE__ */ __name(async () => {
|
|
96352
96614
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96353
|
-
const { diagram: diagram22 } = await import("./classDiagram-6PBFFD2Q-
|
|
96615
|
+
const { diagram: diagram22 } = await import("./classDiagram-6PBFFD2Q-BInpfZnW.js");
|
|
96354
96616
|
return { diagram: diagram22 };
|
|
96355
96617
|
}, true ? __vite__mapDeps([32,33,11,9,12,13]) : void 0, import.meta.url);
|
|
96356
96618
|
return { id: id13, diagram: diagram2 };
|
|
@@ -96370,7 +96632,7 @@ var detector14 = /* @__PURE__ */ __name((txt, config2) => {
|
|
|
96370
96632
|
}, "detector");
|
|
96371
96633
|
var loader14 = /* @__PURE__ */ __name(async () => {
|
|
96372
96634
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96373
|
-
const { diagram: diagram22 } = await import("./classDiagram-v2-HSJHXN6E-
|
|
96635
|
+
const { diagram: diagram22 } = await import("./classDiagram-v2-HSJHXN6E-BInpfZnW.js");
|
|
96374
96636
|
return { diagram: diagram22 };
|
|
96375
96637
|
}, true ? __vite__mapDeps([34,33,11,9,12,13]) : void 0, import.meta.url);
|
|
96376
96638
|
return { id: id14, diagram: diagram2 };
|
|
@@ -96390,7 +96652,7 @@ var detector15 = /* @__PURE__ */ __name((txt, config2) => {
|
|
|
96390
96652
|
}, "detector");
|
|
96391
96653
|
var loader15 = /* @__PURE__ */ __name(async () => {
|
|
96392
96654
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96393
|
-
const { diagram: diagram22 } = await import("./stateDiagram-FHFEXIEX-
|
|
96655
|
+
const { diagram: diagram22 } = await import("./stateDiagram-FHFEXIEX-YKrUbogP.js");
|
|
96394
96656
|
return { diagram: diagram22 };
|
|
96395
96657
|
}, true ? __vite__mapDeps([35,36,12,13,1,2,3,4]) : void 0, import.meta.url);
|
|
96396
96658
|
return { id: id15, diagram: diagram2 };
|
|
@@ -96413,7 +96675,7 @@ var detector16 = /* @__PURE__ */ __name((txt, config2) => {
|
|
|
96413
96675
|
}, "detector");
|
|
96414
96676
|
var loader16 = /* @__PURE__ */ __name(async () => {
|
|
96415
96677
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96416
|
-
const { diagram: diagram22 } = await import("./stateDiagram-v2-QKLJ7IA2-
|
|
96678
|
+
const { diagram: diagram22 } = await import("./stateDiagram-v2-QKLJ7IA2-CO0pZRqI.js");
|
|
96417
96679
|
return { diagram: diagram22 };
|
|
96418
96680
|
}, true ? __vite__mapDeps([37,36,12,13]) : void 0, import.meta.url);
|
|
96419
96681
|
return { id: id16, diagram: diagram2 };
|
|
@@ -96430,7 +96692,7 @@ var detector17 = /* @__PURE__ */ __name((txt) => {
|
|
|
96430
96692
|
}, "detector");
|
|
96431
96693
|
var loader17 = /* @__PURE__ */ __name(async () => {
|
|
96432
96694
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96433
|
-
const { diagram: diagram22 } = await import("./journeyDiagram-VCZTEJTY-
|
|
96695
|
+
const { diagram: diagram22 } = await import("./journeyDiagram-VCZTEJTY-CYRPGJN7.js");
|
|
96434
96696
|
return { diagram: diagram22 };
|
|
96435
96697
|
}, true ? __vite__mapDeps([38,11,9,26]) : void 0, import.meta.url);
|
|
96436
96698
|
return { id: id17, diagram: diagram2 };
|
|
@@ -96500,7 +96762,7 @@ var detector18 = /* @__PURE__ */ __name((txt, config2 = {}) => {
|
|
|
96500
96762
|
}, "detector");
|
|
96501
96763
|
var loader18 = /* @__PURE__ */ __name(async () => {
|
|
96502
96764
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96503
|
-
const { diagram: diagram22 } = await import("./flowDiagram-DWJPFMVM-
|
|
96765
|
+
const { diagram: diagram22 } = await import("./flowDiagram-DWJPFMVM-BidIy8zc.js");
|
|
96504
96766
|
return { diagram: diagram22 };
|
|
96505
96767
|
}, true ? __vite__mapDeps([10,11,9,12,13,14]) : void 0, import.meta.url);
|
|
96506
96768
|
return { id: id18, diagram: diagram2 };
|
|
@@ -96517,7 +96779,7 @@ var detector19 = /* @__PURE__ */ __name((txt) => {
|
|
|
96517
96779
|
}, "detector");
|
|
96518
96780
|
var loader19 = /* @__PURE__ */ __name(async () => {
|
|
96519
96781
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96520
|
-
const { diagram: diagram22 } = await import("./timeline-definition-GMOUNBTQ-
|
|
96782
|
+
const { diagram: diagram22 } = await import("./timeline-definition-GMOUNBTQ-BW2oxhj-.js");
|
|
96521
96783
|
return { diagram: diagram22 };
|
|
96522
96784
|
}, true ? __vite__mapDeps([39,26]) : void 0, import.meta.url);
|
|
96523
96785
|
return { id: id19, diagram: diagram2 };
|
|
@@ -96534,7 +96796,7 @@ var detector20 = /* @__PURE__ */ __name((txt) => {
|
|
|
96534
96796
|
}, "detector");
|
|
96535
96797
|
var loader20 = /* @__PURE__ */ __name(async () => {
|
|
96536
96798
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96537
|
-
const { diagram: diagram22 } = await import("./mindmap-definition-QFDTVHPH-
|
|
96799
|
+
const { diagram: diagram22 } = await import("./mindmap-definition-QFDTVHPH-CC3W7LA-.js");
|
|
96538
96800
|
return { diagram: diagram22 };
|
|
96539
96801
|
}, true ? __vite__mapDeps([40,12,13]) : void 0, import.meta.url);
|
|
96540
96802
|
return { id: id20, diagram: diagram2 };
|
|
@@ -96551,7 +96813,7 @@ var detector21 = /* @__PURE__ */ __name((txt) => {
|
|
|
96551
96813
|
}, "detector");
|
|
96552
96814
|
var loader21 = /* @__PURE__ */ __name(async () => {
|
|
96553
96815
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96554
|
-
const { diagram: diagram22 } = await import("./kanban-definition-6JOO6SKY-
|
|
96816
|
+
const { diagram: diagram22 } = await import("./kanban-definition-6JOO6SKY-Dovb_i6Z.js");
|
|
96555
96817
|
return { diagram: diagram22 };
|
|
96556
96818
|
}, true ? __vite__mapDeps([41,11]) : void 0, import.meta.url);
|
|
96557
96819
|
return { id: id21, diagram: diagram2 };
|
|
@@ -96568,7 +96830,7 @@ var detector22 = /* @__PURE__ */ __name((txt) => {
|
|
|
96568
96830
|
}, "detector");
|
|
96569
96831
|
var loader22 = /* @__PURE__ */ __name(async () => {
|
|
96570
96832
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96571
|
-
const { diagram: diagram22 } = await import("./sankeyDiagram-XADWPNL6-
|
|
96833
|
+
const { diagram: diagram22 } = await import("./sankeyDiagram-XADWPNL6-D4_LywJM.js");
|
|
96572
96834
|
return { diagram: diagram22 };
|
|
96573
96835
|
}, true ? __vite__mapDeps([42,27,22]) : void 0, import.meta.url);
|
|
96574
96836
|
return { id: id22, diagram: diagram2 };
|
|
@@ -96585,7 +96847,7 @@ var detector23 = /* @__PURE__ */ __name((txt) => {
|
|
|
96585
96847
|
}, "detector");
|
|
96586
96848
|
var loader23 = /* @__PURE__ */ __name(async () => {
|
|
96587
96849
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96588
|
-
const { diagram: diagram22 } = await import("./diagram-TYMM5635-
|
|
96850
|
+
const { diagram: diagram22 } = await import("./diagram-TYMM5635-BKn_5Ga7.js");
|
|
96589
96851
|
return { diagram: diagram22 };
|
|
96590
96852
|
}, true ? __vite__mapDeps([43,17,19,4,2]) : void 0, import.meta.url);
|
|
96591
96853
|
return { id: id23, diagram: diagram2 };
|
|
@@ -96601,7 +96863,7 @@ var detector24 = /* @__PURE__ */ __name((txt) => {
|
|
|
96601
96863
|
}, "detector");
|
|
96602
96864
|
var loader24 = /* @__PURE__ */ __name(async () => {
|
|
96603
96865
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96604
|
-
const { diagram: diagram22 } = await import("./diagram-MMDJMWI5-
|
|
96866
|
+
const { diagram: diagram22 } = await import("./diagram-MMDJMWI5-BnwRyNpR.js");
|
|
96605
96867
|
return { diagram: diagram22 };
|
|
96606
96868
|
}, true ? __vite__mapDeps([44,17,19,4,2]) : void 0, import.meta.url);
|
|
96607
96869
|
return { id: id24, diagram: diagram2 };
|
|
@@ -96617,7 +96879,7 @@ var detector25 = /* @__PURE__ */ __name((txt) => {
|
|
|
96617
96879
|
}, "detector");
|
|
96618
96880
|
var loader25 = /* @__PURE__ */ __name(async () => {
|
|
96619
96881
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96620
|
-
const { diagram: diagram22 } = await import("./blockDiagram-DXYQGD6D-
|
|
96882
|
+
const { diagram: diagram22 } = await import("./blockDiagram-DXYQGD6D-CPK2QuaJ.js");
|
|
96621
96883
|
return { diagram: diagram22 };
|
|
96622
96884
|
}, true ? __vite__mapDeps([45,11,5,1,2,14]) : void 0, import.meta.url);
|
|
96623
96885
|
return { id: id25, diagram: diagram2 };
|
|
@@ -96634,7 +96896,7 @@ var detector26 = /* @__PURE__ */ __name((txt) => {
|
|
|
96634
96896
|
}, "detector");
|
|
96635
96897
|
var loader26 = /* @__PURE__ */ __name(async () => {
|
|
96636
96898
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96637
|
-
const { diagram: diagram22 } = await import("./diagram-5BDNPKRD-
|
|
96899
|
+
const { diagram: diagram22 } = await import("./diagram-5BDNPKRD-D9VV_-Xi.js");
|
|
96638
96900
|
return { diagram: diagram22 };
|
|
96639
96901
|
}, true ? __vite__mapDeps([46,17,18,19,4,2]) : void 0, import.meta.url);
|
|
96640
96902
|
return { id: id26, diagram: diagram2 };
|
|
@@ -96651,7 +96913,7 @@ var detector27 = /* @__PURE__ */ __name((txt) => {
|
|
|
96651
96913
|
}, "detector");
|
|
96652
96914
|
var loader27 = /* @__PURE__ */ __name(async () => {
|
|
96653
96915
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96654
|
-
const { diagram: diagram22 } = await import("./architectureDiagram-Q4EWVU46-
|
|
96916
|
+
const { diagram: diagram22 } = await import("./architectureDiagram-Q4EWVU46-BNFtPc1v.js");
|
|
96655
96917
|
return { diagram: diagram22 };
|
|
96656
96918
|
}, true ? __vite__mapDeps([47,17,19,4,2,7]) : void 0, import.meta.url);
|
|
96657
96919
|
return { id: id27, diagram: diagram2 };
|
|
@@ -96668,7 +96930,7 @@ var detector28 = /* @__PURE__ */ __name((txt) => {
|
|
|
96668
96930
|
}, "detector");
|
|
96669
96931
|
var loader28 = /* @__PURE__ */ __name(async () => {
|
|
96670
96932
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96671
|
-
const { diagram: diagram22 } = await import("./ishikawaDiagram-UXIWVN3A-
|
|
96933
|
+
const { diagram: diagram22 } = await import("./ishikawaDiagram-UXIWVN3A-DmOMlIE8.js");
|
|
96672
96934
|
return { diagram: diagram22 };
|
|
96673
96935
|
}, true ? [] : void 0, import.meta.url);
|
|
96674
96936
|
return { id: id28, diagram: diagram2 };
|
|
@@ -96684,7 +96946,7 @@ var detector29 = /* @__PURE__ */ __name((txt) => {
|
|
|
96684
96946
|
}, "detector");
|
|
96685
96947
|
var loader29 = /* @__PURE__ */ __name(async () => {
|
|
96686
96948
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96687
|
-
const { diagram: diagram22 } = await import("./vennDiagram-DHZGUBPP-
|
|
96949
|
+
const { diagram: diagram22 } = await import("./vennDiagram-DHZGUBPP-DSy9zL6k.js");
|
|
96688
96950
|
return { diagram: diagram22 };
|
|
96689
96951
|
}, true ? [] : void 0, import.meta.url);
|
|
96690
96952
|
return { id: id29, diagram: diagram2 };
|
|
@@ -96701,7 +96963,7 @@ var detector30 = /* @__PURE__ */ __name((txt) => {
|
|
|
96701
96963
|
}, "detector");
|
|
96702
96964
|
var loader30 = /* @__PURE__ */ __name(async () => {
|
|
96703
96965
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96704
|
-
const { diagram: diagram22 } = await import("./diagram-G4DWMVQ6-
|
|
96966
|
+
const { diagram: diagram22 } = await import("./diagram-G4DWMVQ6-CfRglPBg.js");
|
|
96705
96967
|
return { diagram: diagram22 };
|
|
96706
96968
|
}, true ? __vite__mapDeps([48,13,17,19,4,2,23,27,22]) : void 0, import.meta.url);
|
|
96707
96969
|
return { id: id30, diagram: diagram2 };
|
|
@@ -96717,7 +96979,7 @@ var detector31 = /* @__PURE__ */ __name((text2) => {
|
|
|
96717
96979
|
}, "detector");
|
|
96718
96980
|
var loader31 = /* @__PURE__ */ __name(async () => {
|
|
96719
96981
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
96720
|
-
const { diagram: diagram22 } = await import("./wardleyDiagram-NUSXRM2D-
|
|
96982
|
+
const { diagram: diagram22 } = await import("./wardleyDiagram-NUSXRM2D-CJUPdnii.js");
|
|
96721
96983
|
return { diagram: diagram22 };
|
|
96722
96984
|
}, true ? __vite__mapDeps([49,17,19,4,2]) : void 0, import.meta.url);
|
|
96723
96985
|
return { id: id31, diagram: diagram2 };
|
|
@@ -137979,7 +138241,7 @@ function buildRehypePlugins(transformImageSrc) {
|
|
|
137979
138241
|
const protocols = sanitizeSchema.protocols;
|
|
137980
138242
|
const extendedSchema = {
|
|
137981
138243
|
...sanitizeSchema,
|
|
137982
|
-
protocols: { ...protocols, src: [...protocols.src || [], "web"] }
|
|
138244
|
+
protocols: { ...protocols, src: [...protocols.src || [], "web", "fello"] }
|
|
137983
138245
|
};
|
|
137984
138246
|
const rehypeNormalizeRelativeLinks = () => (tree) => {
|
|
137985
138247
|
const walk = (node2) => {
|
|
@@ -143104,20 +143366,43 @@ function parseFelloTools(message2) {
|
|
|
143104
143366
|
if (message2.content[0].content.type !== "text") return null;
|
|
143105
143367
|
const text2 = message2.content[0].content.text;
|
|
143106
143368
|
try {
|
|
143107
|
-
const
|
|
143108
|
-
|
|
143109
|
-
|
|
143369
|
+
const parsed = JSON.parse(text2);
|
|
143370
|
+
const candidates = [];
|
|
143371
|
+
if (Array.isArray(parsed)) {
|
|
143372
|
+
for (const item of parsed) {
|
|
143373
|
+
if (item && typeof item === "object" && "text" in item) {
|
|
143374
|
+
const inner2 = item.text;
|
|
143375
|
+
if (typeof inner2 === "string") {
|
|
143376
|
+
try {
|
|
143377
|
+
candidates.push(JSON.parse(inner2));
|
|
143378
|
+
continue;
|
|
143379
|
+
} catch {
|
|
143380
|
+
}
|
|
143381
|
+
}
|
|
143382
|
+
}
|
|
143383
|
+
candidates.push(item);
|
|
143384
|
+
}
|
|
143385
|
+
} else {
|
|
143386
|
+
candidates.push(parsed);
|
|
143387
|
+
}
|
|
143388
|
+
for (const candidate of candidates) {
|
|
143389
|
+
if (!candidate || typeof candidate !== "object") continue;
|
|
143390
|
+
const fello = candidate.fello;
|
|
143391
|
+
if (!fello || typeof fello !== "object") continue;
|
|
143392
|
+
const felloObj = fello;
|
|
143393
|
+
if (felloObj["share-to-user"]) {
|
|
143110
143394
|
const shareToUserRespondResult = shareToUserRespondSchema.safeParse(
|
|
143111
|
-
|
|
143395
|
+
felloObj["share-to-user"]
|
|
143112
143396
|
);
|
|
143113
143397
|
if (shareToUserRespondResult.success) {
|
|
143114
143398
|
return { type: "shareToUser", respond: shareToUserRespondResult.data };
|
|
143115
143399
|
}
|
|
143116
143400
|
}
|
|
143117
|
-
if (
|
|
143118
|
-
const raw2 =
|
|
143119
|
-
if (raw2
|
|
143120
|
-
|
|
143401
|
+
if (felloObj["image-generation"]) {
|
|
143402
|
+
const raw2 = felloObj["image-generation"];
|
|
143403
|
+
if (raw2 && typeof raw2 === "object" && !("images" in raw2) && "sharePath" in raw2) {
|
|
143404
|
+
const r3 = raw2;
|
|
143405
|
+
r3.images = [{ sharePath: r3.sharePath, name: r3.name, mimeType: r3.mimeType }];
|
|
143121
143406
|
}
|
|
143122
143407
|
const imageGenRespondResult = imageGenerationRespondSchema.safeParse(raw2);
|
|
143123
143408
|
if (imageGenRespondResult.success) {
|
|
@@ -143129,6 +143414,31 @@ function parseFelloTools(message2) {
|
|
|
143129
143414
|
}
|
|
143130
143415
|
return null;
|
|
143131
143416
|
}
|
|
143417
|
+
function renderContentItem(content2, index2, cwd2) {
|
|
143418
|
+
if (content2.type === "content") {
|
|
143419
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-2 text-foreground/80", children: content2.content.type === "text" ? /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollArea, { className: "-mx-2", viewportClassName: "max-h-[70vh]", children: /* @__PURE__ */ jsxRuntimeExports.jsx("pre", { className: "m-0 p-2 text-[11px]", children: /* @__PURE__ */ jsxRuntimeExports.jsx("code", {
|
|
143420
|
+
// Strip ANSI escape sequences (e.g. \x1b[38;5;250m, [38;5;250m) for clean display
|
|
143421
|
+
children: content2.content.text.replace(/\u001b\[[0-9;]*[a-zA-Z]/g, "").replace(/\[[0-9;]*[0-9]m/g, "")
|
|
143422
|
+
}) }) }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ContentBlocks, { blocks: [content2.content], role: "tool_call" }) }, index2);
|
|
143423
|
+
}
|
|
143424
|
+
if (content2.type === "diff") {
|
|
143425
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-b border-border last:border-b-0 flex flex-col", children: [
|
|
143426
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "px-2 py-2 bg-muted/50 border-b border-border text-xs font-mono text-muted-foreground truncate flex items-center gap-2", children: [
|
|
143427
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(FileIcon, { name: content2.path.split("/").pop() ?? content2.path, className: "size-3.5" }),
|
|
143428
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: content2.path.startsWith(cwd2) ? content2.path.slice(cwd2.length + 1) : content2.path })
|
|
143429
|
+
] }),
|
|
143430
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1 min-h-0 overflow-hidden w-full", children: /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollArea, { className: "w-full", viewportClassName: "max-h-[70vh]", children: content2.oldText == null || content2.oldText === content2.newText ? /* @__PURE__ */ jsxRuntimeExports.jsx(CodeView, { content: content2.newText, filename: content2.path.split("/").pop() }) : /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
143431
|
+
CodeCompareView,
|
|
143432
|
+
{
|
|
143433
|
+
oldContent: content2.oldText,
|
|
143434
|
+
newContent: content2.newText,
|
|
143435
|
+
filename: content2.path.split("/").pop()
|
|
143436
|
+
}
|
|
143437
|
+
) }) })
|
|
143438
|
+
] }, index2);
|
|
143439
|
+
}
|
|
143440
|
+
return null;
|
|
143441
|
+
}
|
|
143132
143442
|
function ToolItem({ session: session2, message: message2 }) {
|
|
143133
143443
|
const { t: t2 } = useTranslation();
|
|
143134
143444
|
const activeProjectId = session2.projectId;
|
|
@@ -143138,6 +143448,10 @@ function ToolItem({ session: session2, message: message2 }) {
|
|
|
143138
143448
|
const [open2, setOpen] = reactExports.useState(false);
|
|
143139
143449
|
const [stopping, setStopping] = reactExports.useState(false);
|
|
143140
143450
|
const isRunningShell = message2.kind === "execute" && message2.status === "in_progress" && message2.terminalId != null;
|
|
143451
|
+
const contentItems = (message2.content ?? []).filter(
|
|
143452
|
+
(c3) => c3.type === "content" || c3.type === "diff"
|
|
143453
|
+
);
|
|
143454
|
+
const defaultTab = isRunningShell ? "terminal" : contentItems.length > 0 ? "content-0" : "terminal";
|
|
143141
143455
|
const handleStop = reactExports.useCallback(async () => {
|
|
143142
143456
|
if (!message2.terminalId || stopping) return;
|
|
143143
143457
|
setStopping(true);
|
|
@@ -143230,7 +143544,7 @@ function ToolItem({ session: session2, message: message2 }) {
|
|
|
143230
143544
|
type: "button",
|
|
143231
143545
|
variant: "destructive",
|
|
143232
143546
|
size: "xs",
|
|
143233
|
-
className: "shrink-0 rounded-full px-2 disabled:opacity-100",
|
|
143547
|
+
className: "shrink-0 rounded-full px-1.5 -my-2 h-5 disabled:opacity-100",
|
|
143234
143548
|
title: t2("toolBubble.stop"),
|
|
143235
143549
|
disabled: stopping,
|
|
143236
143550
|
onClick: (e11) => {
|
|
@@ -143257,43 +143571,42 @@ function ToolItem({ session: session2, message: message2 }) {
|
|
|
143257
143571
|
children: /* @__PURE__ */ jsxRuntimeExports.jsx("pre", { className: "p-2 m-0 text-[11px] leading-relaxed text-foreground/80", children: /* @__PURE__ */ jsxRuntimeExports.jsx("code", { children: typeof message2.rawInput === "string" ? message2.rawInput : jsonToPrettyYamlExports.stringify(message2.rawInput) }) })
|
|
143258
143572
|
}
|
|
143259
143573
|
),
|
|
143260
|
-
message2.
|
|
143261
|
-
|
|
143262
|
-
|
|
143263
|
-
|
|
143264
|
-
|
|
143265
|
-
|
|
143266
|
-
|
|
143267
|
-
|
|
143268
|
-
|
|
143269
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
143270
|
-
FileIcon,
|
|
143574
|
+
(contentItems.length > 0 || message2.terminalId) && /* @__PURE__ */ jsxRuntimeExports.jsxs(Tabs, { defaultValue: defaultTab, className: "w-full", children: [
|
|
143575
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
143576
|
+
TabsList,
|
|
143577
|
+
{
|
|
143578
|
+
variant: "line",
|
|
143579
|
+
className: "w-full h-8 justify-start rounded-none border-b border-border",
|
|
143580
|
+
children: [
|
|
143581
|
+
contentItems.map((content2, index2) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
143582
|
+
TabsTrigger,
|
|
143271
143583
|
{
|
|
143272
|
-
|
|
143273
|
-
className: "
|
|
143584
|
+
value: `content-${index2}`,
|
|
143585
|
+
className: "h-full flex-none text-xs font-normal opacity-70",
|
|
143586
|
+
children: [
|
|
143587
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ListCheck, { className: "size-3.5 -ml-1" }),
|
|
143588
|
+
content2.type === "diff" ? `${content2.path.split("/").pop()}` : t2("toolBubble.result")
|
|
143589
|
+
]
|
|
143590
|
+
},
|
|
143591
|
+
index2
|
|
143592
|
+
)),
|
|
143593
|
+
message2.terminalId && /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
143594
|
+
TabsTrigger,
|
|
143595
|
+
{
|
|
143596
|
+
value: "terminal",
|
|
143597
|
+
className: "h-full flex-none px-2 text-xs font-normal opacity-70",
|
|
143598
|
+
children: [
|
|
143599
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Terminal, { className: "size-3.5 -ml-1" }),
|
|
143600
|
+
t2("toolBubble.terminal")
|
|
143601
|
+
]
|
|
143274
143602
|
}
|
|
143275
|
-
)
|
|
143276
|
-
|
|
143277
|
-
|
|
143278
|
-
|
|
143279
|
-
|
|
143280
|
-
|
|
143281
|
-
|
|
143282
|
-
filename: content2.path.split("/").pop()
|
|
143283
|
-
}
|
|
143284
|
-
) : /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
143285
|
-
CodeCompareView,
|
|
143286
|
-
{
|
|
143287
|
-
oldContent: content2.oldText,
|
|
143288
|
-
newContent: content2.newText,
|
|
143289
|
-
filename: content2.path.split("/").pop()
|
|
143290
|
-
}
|
|
143291
|
-
) }) })
|
|
143292
|
-
] }, index2);
|
|
143293
|
-
}
|
|
143294
|
-
return null;
|
|
143295
|
-
}),
|
|
143296
|
-
message2.terminalId && /* @__PURE__ */ jsxRuntimeExports.jsx(AgentTerminalOutput, { sessionId: session2.id, terminalId: message2.terminalId })
|
|
143603
|
+
)
|
|
143604
|
+
]
|
|
143605
|
+
}
|
|
143606
|
+
),
|
|
143607
|
+
contentItems.map((content2, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(TabsContent, { value: `content-${index2}`, children: renderContentItem(content2, index2, session2.cwd) }, index2)),
|
|
143608
|
+
message2.terminalId && /* @__PURE__ */ jsxRuntimeExports.jsx(TabsContent, { value: "terminal", children: /* @__PURE__ */ jsxRuntimeExports.jsx(AgentTerminalOutput, { sessionId: session2.id, terminalId: message2.terminalId }) })
|
|
143609
|
+
] })
|
|
143297
143610
|
] })
|
|
143298
143611
|
]
|
|
143299
143612
|
}
|
|
@@ -143560,8 +143873,8 @@ const ThinkingBubble = reactExports.memo(function ThinkingBubble2({
|
|
|
143560
143873
|
open: open2,
|
|
143561
143874
|
onOpenChange: setOpen,
|
|
143562
143875
|
children: [
|
|
143563
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(CollapsibleTrigger, { className: "w-full bg-transparent border-0 flex select-none items-center gap-
|
|
143564
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(Lightbulb, { className: `size-3.5 ${isStreaming ? "animate-pulse" : ""}` }),
|
|
143876
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(CollapsibleTrigger, { className: "w-full bg-transparent border-0 flex select-none items-center gap-1 px-0 py-1 text-[11px] text-muted-foreground/90 hover:text-muted-foreground pointer-events-auto", children: [
|
|
143877
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Lightbulb, { className: `size-3.5 -ml-px ${isStreaming ? "animate-pulse" : ""}` }),
|
|
143565
143878
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: isStreaming ? t2("thinkingBubble.thinking", "Thinking...") : t2("thinkingBubble.thought", "Thought") })
|
|
143566
143879
|
] }),
|
|
143567
143880
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CollapsibleContent, { className: "mt-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "max-w-none", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
@@ -147167,402 +147480,6 @@ function _$9(t2) {
|
|
|
147167
147480
|
function D$7(t2) {
|
|
147168
147481
|
be$9.setTheme(t2);
|
|
147169
147482
|
}
|
|
147170
|
-
const PreviewCardRootContext = /* @__PURE__ */ reactExports.createContext(void 0);
|
|
147171
|
-
function usePreviewCardRootContext(optional2) {
|
|
147172
|
-
const context = reactExports.useContext(PreviewCardRootContext);
|
|
147173
|
-
if (context === void 0 && !optional2) {
|
|
147174
|
-
throw new Error(formatErrorMessage(50));
|
|
147175
|
-
}
|
|
147176
|
-
return context;
|
|
147177
|
-
}
|
|
147178
|
-
const OPEN_DELAY = 600;
|
|
147179
|
-
const CLOSE_DELAY = 300;
|
|
147180
|
-
const selectors = {
|
|
147181
|
-
...popupStoreSelectors,
|
|
147182
|
-
instantType: (state2) => state2.instantType,
|
|
147183
|
-
adaptiveOrigin: (state2) => state2.adaptiveOrigin,
|
|
147184
|
-
closeDelay: (state2) => state2.closeDelay
|
|
147185
|
-
};
|
|
147186
|
-
class PreviewCardStore extends ReactStore {
|
|
147187
|
-
constructor(initialState2, floatingId, nested) {
|
|
147188
|
-
const triggerElements = new PopupTriggerMap();
|
|
147189
|
-
super(createInitialState(initialState2, triggerElements, floatingId, nested), createInitialContext(triggerElements), selectors);
|
|
147190
|
-
}
|
|
147191
|
-
setOpen = (nextOpen, eventDetails) => {
|
|
147192
|
-
const {
|
|
147193
|
-
inlineRectCoordsRef
|
|
147194
|
-
} = this.context;
|
|
147195
|
-
applyPopupOpenChange(this, nextOpen, eventDetails, {
|
|
147196
|
-
onBeforeDispatch() {
|
|
147197
|
-
const event = eventDetails.event;
|
|
147198
|
-
if (nextOpen && eventDetails.reason === triggerHover && eventDetails.trigger && "clientX" in event && "clientY" in event && inlineRectCoordsRef.current?.element !== eventDetails.trigger) {
|
|
147199
|
-
updateInlineRectCoords(inlineRectCoordsRef, eventDetails.trigger, event.clientX, event.clientY);
|
|
147200
|
-
}
|
|
147201
|
-
}
|
|
147202
|
-
});
|
|
147203
|
-
};
|
|
147204
|
-
}
|
|
147205
|
-
function createInitialState(initialState2, triggerElements, floatingId, nested = false) {
|
|
147206
|
-
const state2 = {
|
|
147207
|
-
...createInitialPopupStoreState(),
|
|
147208
|
-
instantType: void 0,
|
|
147209
|
-
adaptiveOrigin: void 0,
|
|
147210
|
-
closeDelay: CLOSE_DELAY,
|
|
147211
|
-
...initialState2
|
|
147212
|
-
};
|
|
147213
|
-
state2.floatingRootContext = createPopupFloatingRootContext(triggerElements, floatingId, nested);
|
|
147214
|
-
return state2;
|
|
147215
|
-
}
|
|
147216
|
-
function createInitialContext(triggerElements) {
|
|
147217
|
-
return {
|
|
147218
|
-
popupRef: /* @__PURE__ */ reactExports.createRef(),
|
|
147219
|
-
onOpenChange: void 0,
|
|
147220
|
-
onOpenChangeComplete: void 0,
|
|
147221
|
-
triggerElements,
|
|
147222
|
-
inlineRectCoordsRef: {
|
|
147223
|
-
current: void 0
|
|
147224
|
-
}
|
|
147225
|
-
};
|
|
147226
|
-
}
|
|
147227
|
-
function PreviewCardRootComponent(props) {
|
|
147228
|
-
const {
|
|
147229
|
-
open: openProp,
|
|
147230
|
-
defaultOpen = false,
|
|
147231
|
-
onOpenChange,
|
|
147232
|
-
onOpenChangeComplete,
|
|
147233
|
-
actionsRef,
|
|
147234
|
-
handle: handle2,
|
|
147235
|
-
triggerId: triggerIdProp,
|
|
147236
|
-
defaultTriggerId: defaultTriggerIdProp = null,
|
|
147237
|
-
children: children2
|
|
147238
|
-
} = props;
|
|
147239
|
-
const store = usePopupRootStore((floatingId, nested) => new PreviewCardStore({
|
|
147240
|
-
open: defaultOpen,
|
|
147241
|
-
openProp,
|
|
147242
|
-
activeTriggerId: defaultTriggerIdProp,
|
|
147243
|
-
triggerIdProp
|
|
147244
|
-
}, floatingId, nested));
|
|
147245
|
-
store.useControlledProp("openProp", openProp);
|
|
147246
|
-
store.useControlledProp("triggerIdProp", triggerIdProp);
|
|
147247
|
-
store.useContextCallback("onOpenChange", onOpenChange);
|
|
147248
|
-
store.useContextCallback("onOpenChangeComplete", onOpenChangeComplete);
|
|
147249
|
-
const open2 = store.useState("open");
|
|
147250
|
-
const activeTriggerId = store.useState("activeTriggerId");
|
|
147251
|
-
const mounted = store.useState("mounted");
|
|
147252
|
-
const payload = store.useState("payload");
|
|
147253
|
-
useImplicitActiveTrigger(store, {
|
|
147254
|
-
closeOnActiveTriggerUnmount: true
|
|
147255
|
-
});
|
|
147256
|
-
const {
|
|
147257
|
-
forceUnmount
|
|
147258
|
-
} = useOpenStateTransitions(open2, store, () => {
|
|
147259
|
-
store.context.inlineRectCoordsRef.current = void 0;
|
|
147260
|
-
});
|
|
147261
|
-
useIsoLayoutEffect(() => {
|
|
147262
|
-
if (open2) {
|
|
147263
|
-
if (activeTriggerId == null) {
|
|
147264
|
-
store.set("payload", void 0);
|
|
147265
|
-
}
|
|
147266
|
-
}
|
|
147267
|
-
}, [store, activeTriggerId, open2]);
|
|
147268
|
-
reactExports.useImperativeHandle(actionsRef, () => ({
|
|
147269
|
-
unmount: forceUnmount,
|
|
147270
|
-
close: () => store.setOpen(false, createChangeEventDetails(imperativeAction))
|
|
147271
|
-
}), [forceUnmount, store]);
|
|
147272
|
-
const shouldRenderInteractions = open2 || mounted;
|
|
147273
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs(PreviewCardRootContext.Provider, {
|
|
147274
|
-
value: store,
|
|
147275
|
-
children: [handle2 && /* @__PURE__ */ jsxRuntimeExports.jsx(PopupHandleAttachment, {
|
|
147276
|
-
handle: handle2,
|
|
147277
|
-
store
|
|
147278
|
-
}), shouldRenderInteractions && /* @__PURE__ */ jsxRuntimeExports.jsx(PreviewCardInteractions, {
|
|
147279
|
-
store
|
|
147280
|
-
}), typeof children2 === "function" ? children2({
|
|
147281
|
-
payload
|
|
147282
|
-
}) : children2]
|
|
147283
|
-
});
|
|
147284
|
-
}
|
|
147285
|
-
function PreviewCardInteractions({
|
|
147286
|
-
store
|
|
147287
|
-
}) {
|
|
147288
|
-
const floatingRootContext = store.useState("floatingRootContext");
|
|
147289
|
-
const dismiss = useDismiss(floatingRootContext);
|
|
147290
|
-
usePopupInteractionProps(store, {
|
|
147291
|
-
activeTriggerProps: dismiss.reference,
|
|
147292
|
-
inactiveTriggerProps: dismiss.trigger,
|
|
147293
|
-
popupProps: dismiss.floating
|
|
147294
|
-
});
|
|
147295
|
-
return null;
|
|
147296
|
-
}
|
|
147297
|
-
const PreviewCardRoot = fastComponent(function PreviewCardRoot2(props) {
|
|
147298
|
-
if (usePreviewCardRootContext(true)) {
|
|
147299
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(PreviewCardRootComponent, {
|
|
147300
|
-
...props
|
|
147301
|
-
});
|
|
147302
|
-
}
|
|
147303
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(FloatingTree, {
|
|
147304
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsx(PreviewCardRootComponent, {
|
|
147305
|
-
...props
|
|
147306
|
-
})
|
|
147307
|
-
});
|
|
147308
|
-
});
|
|
147309
|
-
const PreviewCardPortalContext = /* @__PURE__ */ reactExports.createContext(void 0);
|
|
147310
|
-
function usePreviewCardPortalContext() {
|
|
147311
|
-
const value = reactExports.useContext(PreviewCardPortalContext);
|
|
147312
|
-
if (value === void 0) {
|
|
147313
|
-
throw new Error(formatErrorMessage(48));
|
|
147314
|
-
}
|
|
147315
|
-
return value;
|
|
147316
|
-
}
|
|
147317
|
-
const PreviewCardPortal = /* @__PURE__ */ reactExports.forwardRef(function PreviewCardPortal2(props, forwardedRef) {
|
|
147318
|
-
const {
|
|
147319
|
-
keepMounted = false,
|
|
147320
|
-
...portalProps
|
|
147321
|
-
} = props;
|
|
147322
|
-
const store = usePreviewCardRootContext();
|
|
147323
|
-
const mounted = store.useState("mounted");
|
|
147324
|
-
const shouldRender = mounted || keepMounted;
|
|
147325
|
-
if (!shouldRender) {
|
|
147326
|
-
return null;
|
|
147327
|
-
}
|
|
147328
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(PreviewCardPortalContext.Provider, {
|
|
147329
|
-
value: keepMounted,
|
|
147330
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsx(FloatingPortalLite, {
|
|
147331
|
-
ref: forwardedRef,
|
|
147332
|
-
...portalProps
|
|
147333
|
-
})
|
|
147334
|
-
});
|
|
147335
|
-
});
|
|
147336
|
-
const PreviewCardTrigger = fastComponentRef(function PreviewCardTrigger2(componentProps, forwardedRef) {
|
|
147337
|
-
const {
|
|
147338
|
-
render: render4,
|
|
147339
|
-
className,
|
|
147340
|
-
delay,
|
|
147341
|
-
closeDelay,
|
|
147342
|
-
id: idProp,
|
|
147343
|
-
payload,
|
|
147344
|
-
handle: handle2,
|
|
147345
|
-
style: style2,
|
|
147346
|
-
...elementProps
|
|
147347
|
-
} = componentProps;
|
|
147348
|
-
const rootContext = usePreviewCardRootContext(true);
|
|
147349
|
-
const handleStore = usePopupHandleStore(handle2);
|
|
147350
|
-
const store = handleStore ?? rootContext;
|
|
147351
|
-
if (!store) {
|
|
147352
|
-
throw new Error(formatErrorMessage(89));
|
|
147353
|
-
}
|
|
147354
|
-
const thisTriggerId = useBaseUiId(idProp);
|
|
147355
|
-
const isTriggerActive = store.useState("isTriggerActive", thisTriggerId);
|
|
147356
|
-
const isOpenedByThisTrigger = store.useState("isOpenedByTrigger", thisTriggerId);
|
|
147357
|
-
const floatingRootContext = store.useState("floatingRootContext");
|
|
147358
|
-
const inlineRectCoordsRef = store.context.inlineRectCoordsRef;
|
|
147359
|
-
const triggerElementRef = reactExports.useRef(null);
|
|
147360
|
-
const delayWithDefault = delay ?? OPEN_DELAY;
|
|
147361
|
-
const closeDelayWithDefault = closeDelay ?? CLOSE_DELAY;
|
|
147362
|
-
const {
|
|
147363
|
-
registerTrigger,
|
|
147364
|
-
isMountedByThisTrigger
|
|
147365
|
-
} = useTriggerDataForwarding(thisTriggerId, triggerElementRef, store, {
|
|
147366
|
-
payload,
|
|
147367
|
-
closeDelay: closeDelayWithDefault
|
|
147368
|
-
});
|
|
147369
|
-
const hoverProps = useHoverReferenceInteraction(floatingRootContext, {
|
|
147370
|
-
mouseOnly: true,
|
|
147371
|
-
move: false,
|
|
147372
|
-
handleClose: safePolygon(),
|
|
147373
|
-
delay: () => ({
|
|
147374
|
-
open: delayWithDefault,
|
|
147375
|
-
close: closeDelayWithDefault
|
|
147376
|
-
}),
|
|
147377
|
-
triggerElementRef,
|
|
147378
|
-
isActiveTrigger: isTriggerActive,
|
|
147379
|
-
isClosing: () => store.select("transitionStatus") === "ending"
|
|
147380
|
-
});
|
|
147381
|
-
const focusProps = useFocus(floatingRootContext, {
|
|
147382
|
-
delay: delayWithDefault
|
|
147383
|
-
});
|
|
147384
|
-
const state2 = {
|
|
147385
|
-
open: isOpenedByThisTrigger
|
|
147386
|
-
};
|
|
147387
|
-
const rootTriggerProps = store.useState("triggerProps", isMountedByThisTrigger);
|
|
147388
|
-
const inlineRectTriggerProps = getInlineRectTriggerProps(inlineRectCoordsRef, isOpenedByThisTrigger);
|
|
147389
|
-
const element2 = useRenderElement("a", componentProps, {
|
|
147390
|
-
state: state2,
|
|
147391
|
-
ref: [forwardedRef, registerTrigger, triggerElementRef],
|
|
147392
|
-
props: [hoverProps, focusProps.reference, rootTriggerProps, inlineRectTriggerProps, {
|
|
147393
|
-
id: thisTriggerId
|
|
147394
|
-
}, elementProps],
|
|
147395
|
-
stateAttributesMapping: triggerOpenStateMapping$1
|
|
147396
|
-
});
|
|
147397
|
-
return element2;
|
|
147398
|
-
});
|
|
147399
|
-
const PreviewCardPositionerContext = /* @__PURE__ */ reactExports.createContext(void 0);
|
|
147400
|
-
function usePreviewCardPositionerContext() {
|
|
147401
|
-
const context = reactExports.useContext(PreviewCardPositionerContext);
|
|
147402
|
-
if (context === void 0) {
|
|
147403
|
-
throw new Error(formatErrorMessage(49));
|
|
147404
|
-
}
|
|
147405
|
-
return context;
|
|
147406
|
-
}
|
|
147407
|
-
const PreviewCardPositioner = /* @__PURE__ */ reactExports.forwardRef(function PreviewCardPositioner2(componentProps, forwardedRef) {
|
|
147408
|
-
const {
|
|
147409
|
-
render: render4,
|
|
147410
|
-
className,
|
|
147411
|
-
anchor: anchor2,
|
|
147412
|
-
positionMethod = "absolute",
|
|
147413
|
-
side = "bottom",
|
|
147414
|
-
align = "center",
|
|
147415
|
-
sideOffset = 0,
|
|
147416
|
-
alignOffset = 0,
|
|
147417
|
-
collisionBoundary = "clipping-ancestors",
|
|
147418
|
-
collisionPadding = 5,
|
|
147419
|
-
arrowPadding = 5,
|
|
147420
|
-
sticky = false,
|
|
147421
|
-
disableAnchorTracking = false,
|
|
147422
|
-
collisionAvoidance = POPUP_COLLISION_AVOIDANCE,
|
|
147423
|
-
style: style2,
|
|
147424
|
-
...elementProps
|
|
147425
|
-
} = componentProps;
|
|
147426
|
-
const store = usePreviewCardRootContext();
|
|
147427
|
-
const keepMounted = usePreviewCardPortalContext();
|
|
147428
|
-
const nodeId = useFloatingNodeId();
|
|
147429
|
-
const open2 = store.useState("open");
|
|
147430
|
-
const mounted = store.useState("mounted");
|
|
147431
|
-
const floatingRootContext = store.useState("floatingRootContext");
|
|
147432
|
-
const instantType = store.useState("instantType");
|
|
147433
|
-
const transitionStatus = store.useState("transitionStatus");
|
|
147434
|
-
const adaptiveOrigin = store.useState("adaptiveOrigin");
|
|
147435
|
-
const inlineRectCoordsRef = store.context.inlineRectCoordsRef;
|
|
147436
|
-
const positioning = useAnchorPositioning({
|
|
147437
|
-
anchor: anchor2,
|
|
147438
|
-
floatingRootContext,
|
|
147439
|
-
positionMethod,
|
|
147440
|
-
mounted,
|
|
147441
|
-
side,
|
|
147442
|
-
sideOffset,
|
|
147443
|
-
align,
|
|
147444
|
-
alignOffset,
|
|
147445
|
-
arrowPadding,
|
|
147446
|
-
collisionBoundary,
|
|
147447
|
-
collisionPadding,
|
|
147448
|
-
sticky,
|
|
147449
|
-
disableAnchorTracking,
|
|
147450
|
-
keepMounted,
|
|
147451
|
-
nodeId,
|
|
147452
|
-
collisionAvoidance,
|
|
147453
|
-
adaptiveOrigin,
|
|
147454
|
-
inline: createInlineMiddleware(inlineRectCoordsRef)
|
|
147455
|
-
});
|
|
147456
|
-
const updatePosition = positioning.update;
|
|
147457
|
-
useIsoLayoutEffect(() => {
|
|
147458
|
-
if (open2 && mounted) {
|
|
147459
|
-
updatePosition();
|
|
147460
|
-
}
|
|
147461
|
-
}, [open2, mounted, updatePosition]);
|
|
147462
|
-
const state2 = {
|
|
147463
|
-
open: open2,
|
|
147464
|
-
side: positioning.side,
|
|
147465
|
-
align: positioning.align,
|
|
147466
|
-
anchorHidden: positioning.anchorHidden,
|
|
147467
|
-
instant: instantType
|
|
147468
|
-
};
|
|
147469
|
-
const element2 = usePositioner(componentProps, state2, {
|
|
147470
|
-
styles: positioning.positionerStyles,
|
|
147471
|
-
transitionStatus,
|
|
147472
|
-
props: elementProps,
|
|
147473
|
-
refs: [forwardedRef, store.useStateSetter("positionerElement")],
|
|
147474
|
-
hidden: !mounted,
|
|
147475
|
-
inert: !open2
|
|
147476
|
-
});
|
|
147477
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(PreviewCardPositionerContext.Provider, {
|
|
147478
|
-
value: positioning,
|
|
147479
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsx(FloatingNode, {
|
|
147480
|
-
id: nodeId,
|
|
147481
|
-
children: element2
|
|
147482
|
-
})
|
|
147483
|
-
});
|
|
147484
|
-
});
|
|
147485
|
-
const PreviewCardPopup = /* @__PURE__ */ reactExports.forwardRef(function PreviewCardPopup2(componentProps, forwardedRef) {
|
|
147486
|
-
const {
|
|
147487
|
-
className,
|
|
147488
|
-
render: render4,
|
|
147489
|
-
style: style2,
|
|
147490
|
-
...elementProps
|
|
147491
|
-
} = componentProps;
|
|
147492
|
-
const store = usePreviewCardRootContext();
|
|
147493
|
-
const {
|
|
147494
|
-
side,
|
|
147495
|
-
align
|
|
147496
|
-
} = usePreviewCardPositionerContext();
|
|
147497
|
-
const open2 = store.useState("open");
|
|
147498
|
-
const instantType = store.useState("instantType");
|
|
147499
|
-
const transitionStatus = store.useState("transitionStatus");
|
|
147500
|
-
const popupProps = store.useState("popupProps");
|
|
147501
|
-
const floatingContext = store.useState("floatingRootContext");
|
|
147502
|
-
const closeDelay = store.useState("closeDelay");
|
|
147503
|
-
useOpenChangeComplete({
|
|
147504
|
-
open: open2,
|
|
147505
|
-
ref: store.context.popupRef,
|
|
147506
|
-
onComplete() {
|
|
147507
|
-
if (open2) {
|
|
147508
|
-
store.context.onOpenChangeComplete?.(true);
|
|
147509
|
-
}
|
|
147510
|
-
}
|
|
147511
|
-
});
|
|
147512
|
-
useHoverFloatingInteraction(floatingContext, {
|
|
147513
|
-
closeDelay
|
|
147514
|
-
});
|
|
147515
|
-
const state2 = {
|
|
147516
|
-
open: open2,
|
|
147517
|
-
side,
|
|
147518
|
-
align,
|
|
147519
|
-
instant: instantType,
|
|
147520
|
-
transitionStatus
|
|
147521
|
-
};
|
|
147522
|
-
const element2 = useRenderElement("div", componentProps, {
|
|
147523
|
-
state: state2,
|
|
147524
|
-
ref: [forwardedRef, store.context.popupRef, store.useStateSetter("popupElement")],
|
|
147525
|
-
props: [FOCUSABLE_POPUP_PROPS, popupProps, getDisabledMountTransitionStyles(transitionStatus), elementProps],
|
|
147526
|
-
stateAttributesMapping: popupTransitionStateMapping
|
|
147527
|
-
});
|
|
147528
|
-
return element2;
|
|
147529
|
-
});
|
|
147530
|
-
function HoverCard({ ...props }) {
|
|
147531
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(PreviewCardRoot, { "data-slot": "hover-card", ...props });
|
|
147532
|
-
}
|
|
147533
|
-
function HoverCardTrigger({ ...props }) {
|
|
147534
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(PreviewCardTrigger, { "data-slot": "hover-card-trigger", ...props });
|
|
147535
|
-
}
|
|
147536
|
-
function HoverCardContent({
|
|
147537
|
-
className,
|
|
147538
|
-
side = "bottom",
|
|
147539
|
-
sideOffset = 4,
|
|
147540
|
-
align = "center",
|
|
147541
|
-
alignOffset = 4,
|
|
147542
|
-
...props
|
|
147543
|
-
}) {
|
|
147544
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(PreviewCardPortal, { "data-slot": "hover-card-portal", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
147545
|
-
PreviewCardPositioner,
|
|
147546
|
-
{
|
|
147547
|
-
align,
|
|
147548
|
-
alignOffset,
|
|
147549
|
-
side,
|
|
147550
|
-
sideOffset,
|
|
147551
|
-
className: "isolate z-50",
|
|
147552
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
147553
|
-
PreviewCardPopup,
|
|
147554
|
-
{
|
|
147555
|
-
"data-slot": "hover-card-content",
|
|
147556
|
-
className: cn$8(
|
|
147557
|
-
"z-50 w-64 origin-(--transform-origin) rounded-lg bg-popover p-2.5 text-sm text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
|
|
147558
|
-
className
|
|
147559
|
-
),
|
|
147560
|
-
...props
|
|
147561
|
-
}
|
|
147562
|
-
)
|
|
147563
|
-
}
|
|
147564
|
-
) });
|
|
147565
|
-
}
|
|
147566
147483
|
function skillInfoToSuggestItem(s16) {
|
|
147567
147484
|
return {
|
|
147568
147485
|
id: s16.id,
|
|
@@ -147619,16 +147536,8 @@ function readFileAsBase64(file) {
|
|
|
147619
147536
|
reader.readAsDataURL(file);
|
|
147620
147537
|
});
|
|
147621
147538
|
}
|
|
147622
|
-
function readFileAsText(file) {
|
|
147623
|
-
return new Promise((resolve, reject) => {
|
|
147624
|
-
const reader = new FileReader();
|
|
147625
|
-
reader.onload = () => resolve(reader.result);
|
|
147626
|
-
reader.onerror = reject;
|
|
147627
|
-
reader.readAsText(file);
|
|
147628
|
-
});
|
|
147629
|
-
}
|
|
147630
147539
|
async function addFileAsAttachment(file, type2, updateSessionState) {
|
|
147631
|
-
const data =
|
|
147540
|
+
const data = await readFileAsBase64(file);
|
|
147632
147541
|
updateSessionState((s16) => ({
|
|
147633
147542
|
draftAttachments: [
|
|
147634
147543
|
...s16.draftAttachments,
|
|
@@ -147823,10 +147732,18 @@ function ChatInput({ session: session2 }) {
|
|
|
147823
147732
|
}, [appendMentionsToInput]);
|
|
147824
147733
|
const handleFileSelect = async (e11) => {
|
|
147825
147734
|
const files = Array.from(e11.target.files || []);
|
|
147735
|
+
const absPaths = [];
|
|
147826
147736
|
for (const file of files) {
|
|
147827
147737
|
const isImage2 = file.type.startsWith("image/");
|
|
147828
|
-
|
|
147829
|
-
|
|
147738
|
+
if (isImage2 && supportsImage) {
|
|
147739
|
+
await addFileAsAttachment(file, "image", updateSessionState);
|
|
147740
|
+
} else if (!isWebUI) {
|
|
147741
|
+
const p3 = electron.getPathForFile(file);
|
|
147742
|
+
if (p3) absPaths.push(p3);
|
|
147743
|
+
}
|
|
147744
|
+
}
|
|
147745
|
+
if (absPaths.length > 0) {
|
|
147746
|
+
await insertPathMentions(absPaths);
|
|
147830
147747
|
}
|
|
147831
147748
|
if (fileInputRef.current) fileInputRef.current.value = "";
|
|
147832
147749
|
};
|
|
@@ -148005,25 +147922,15 @@ function ChatInput({ session: session2 }) {
|
|
|
148005
147922
|
let hasInlineAttachments = false;
|
|
148006
147923
|
for (const file of Array.from(e11.dataTransfer.files)) {
|
|
148007
147924
|
const isImage2 = file.type.startsWith("image/");
|
|
148008
|
-
|
|
148009
|
-
const canReadText = supportsEmbedded;
|
|
148010
|
-
if (canEmbed || canReadText) {
|
|
147925
|
+
if (isImage2 && supportsImage) {
|
|
148011
147926
|
hasInlineAttachments = true;
|
|
148012
147927
|
(async () => {
|
|
148013
147928
|
try {
|
|
148014
|
-
|
|
148015
|
-
await addFileAsAttachment(file, type2, updateSessionState);
|
|
147929
|
+
await addFileAsAttachment(file, "image", updateSessionState);
|
|
148016
147930
|
} catch {
|
|
148017
147931
|
if (!isWebUI) {
|
|
148018
147932
|
const p3 = electron.getPathForFile(file);
|
|
148019
|
-
if (p3)
|
|
148020
|
-
const mention = await absPathToMention(p3, session2.projectId, session2.cwd);
|
|
148021
|
-
const textarea = getTextarea();
|
|
148022
|
-
if (textarea) {
|
|
148023
|
-
textarea.focus();
|
|
148024
|
-
insertMentionsAtCursor(textarea, [mention]);
|
|
148025
|
-
}
|
|
148026
|
-
}
|
|
147933
|
+
if (p3) absPaths.push(p3);
|
|
148027
147934
|
}
|
|
148028
147935
|
}
|
|
148029
147936
|
})();
|
|
@@ -148056,16 +147963,7 @@ function ChatInput({ session: session2 }) {
|
|
|
148056
147963
|
} catch {
|
|
148057
147964
|
}
|
|
148058
147965
|
},
|
|
148059
|
-
[
|
|
148060
|
-
supportsImage,
|
|
148061
|
-
supportsEmbedded,
|
|
148062
|
-
session2.projectId,
|
|
148063
|
-
session2.cwd,
|
|
148064
|
-
updateSessionState,
|
|
148065
|
-
getTextarea,
|
|
148066
|
-
insertPathMentions,
|
|
148067
|
-
appendMentionsToInput
|
|
148068
|
-
]
|
|
147966
|
+
[supportsImage, updateSessionState, insertPathMentions, appendMentionsToInput]
|
|
148069
147967
|
);
|
|
148070
147968
|
const handleDragOver = reactExports.useCallback((e11) => {
|
|
148071
147969
|
if (e11.dataTransfer.types.includes("application/x-fello-tree-nodes") || e11.dataTransfer.types.includes("Files") || e11.dataTransfer.types.includes("text/uri-list")) {
|
|
@@ -148131,14 +148029,16 @@ function ChatInput({ session: session2 }) {
|
|
|
148131
148029
|
const paths = [];
|
|
148132
148030
|
for (const file of Array.from(files)) {
|
|
148133
148031
|
const isImage2 = file.type.startsWith("image/");
|
|
148134
|
-
|
|
148135
|
-
const canReadText = supportsEmbedded;
|
|
148136
|
-
if (canEmbed || canReadText) {
|
|
148032
|
+
if (isImage2 && supportsImage) {
|
|
148137
148033
|
(async () => {
|
|
148138
|
-
|
|
148139
|
-
|
|
148034
|
+
try {
|
|
148035
|
+
await addFileAsAttachment(file, "image", updateSessionState);
|
|
148036
|
+
} catch {
|
|
148037
|
+
const p3 = electron.getPathForFile(file);
|
|
148038
|
+
if (p3) paths.push(p3);
|
|
148039
|
+
}
|
|
148140
148040
|
})();
|
|
148141
|
-
} else
|
|
148041
|
+
} else {
|
|
148142
148042
|
const p3 = electron.getPathForFile(file);
|
|
148143
148043
|
if (p3) paths.push(p3);
|
|
148144
148044
|
}
|
|
@@ -148153,7 +148053,7 @@ function ChatInput({ session: session2 }) {
|
|
|
148153
148053
|
return;
|
|
148154
148054
|
}
|
|
148155
148055
|
},
|
|
148156
|
-
[session2, supportsImage,
|
|
148056
|
+
[session2, supportsImage, updateSessionState, insertPathMentions]
|
|
148157
148057
|
);
|
|
148158
148058
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
148159
148059
|
"div",
|
|
@@ -148331,7 +148231,7 @@ function ChatInput({ session: session2 }) {
|
|
|
148331
148231
|
}
|
|
148332
148232
|
),
|
|
148333
148233
|
children: [
|
|
148334
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(Eclipse, { className: "size-3" }),
|
|
148234
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Eclipse, { className: "size-3.5" }),
|
|
148335
148235
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate", children: availableModes.find((m2) => m2.id === currentModeId)?.name ?? t2("chatInput.mode", "Mode") }),
|
|
148336
148236
|
/* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-3 opacity-60 shrink-0" })
|
|
148337
148237
|
]
|
|
@@ -148366,19 +148266,16 @@ function ChatInput({ session: session2 }) {
|
|
|
148366
148266
|
)
|
|
148367
148267
|
] }),
|
|
148368
148268
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center", children: [
|
|
148369
|
-
|
|
148269
|
+
supportsImage || supportsEmbedded ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
148370
148270
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
148371
148271
|
"input",
|
|
148372
148272
|
{
|
|
148373
148273
|
type: "file",
|
|
148374
148274
|
multiple: true,
|
|
148275
|
+
accept: "*/*",
|
|
148375
148276
|
ref: fileInputRef,
|
|
148376
148277
|
className: "hidden",
|
|
148377
|
-
onChange: handleFileSelect
|
|
148378
|
-
accept: [
|
|
148379
|
-
initializeInfo?.agentCapabilities?.promptCapabilities?.image ? "image/*" : "",
|
|
148380
|
-
initializeInfo?.agentCapabilities?.promptCapabilities?.embeddedContext ? "*/*" : ""
|
|
148381
|
-
].filter(Boolean).join(",")
|
|
148278
|
+
onChange: handleFileSelect
|
|
148382
148279
|
}
|
|
148383
148280
|
),
|
|
148384
148281
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
@@ -148390,7 +148287,7 @@ function ChatInput({ session: session2 }) {
|
|
|
148390
148287
|
onClick: () => fileInputRef.current?.click(),
|
|
148391
148288
|
"aria-label": t2("chatInput.attach", "Attach file"),
|
|
148392
148289
|
disabled: disabled2,
|
|
148393
|
-
children:
|
|
148290
|
+
children: supportsEmbedded ? /* @__PURE__ */ jsxRuntimeExports.jsx(Paperclip, { className: "size-3.5" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Image$1, { className: "size-3.5" })
|
|
148394
148291
|
}
|
|
148395
148292
|
)
|
|
148396
148293
|
] }) : null,
|
|
@@ -148442,7 +148339,7 @@ function ChatInput({ session: session2 }) {
|
|
|
148442
148339
|
}
|
|
148443
148340
|
),
|
|
148444
148341
|
children: [
|
|
148445
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(Astroid, { className: "size-3" }),
|
|
148342
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Astroid, { className: "size-3.5" }),
|
|
148446
148343
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate", children: availableModels.find((m2) => m2.modelId === currentModelId)?.name ?? t2("chatInput.selectModel", "Select model") }),
|
|
148447
148344
|
/* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-3 opacity-60 shrink-0" })
|
|
148448
148345
|
]
|
|
@@ -148536,11 +148433,11 @@ function ChatInput({ session: session2 }) {
|
|
|
148536
148433
|
{
|
|
148537
148434
|
variant: "outline",
|
|
148538
148435
|
size: "sm",
|
|
148539
|
-
className: "h-7 text-xs text-muted-foreground hover:text-foreground gap-2 max-w-
|
|
148436
|
+
className: "h-7 text-xs text-muted-foreground hover:text-foreground gap-2 max-w-48 shrink overflow-hidden"
|
|
148540
148437
|
}
|
|
148541
148438
|
),
|
|
148542
148439
|
children: [
|
|
148543
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(Gauge, { className: "size-3" }),
|
|
148440
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Gauge, { className: "size-3.5" }),
|
|
148544
148441
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate", children: availableThoughtLevels.find((l6) => l6.id === currentThoughtLevelId)?.name ?? "Thought" }),
|
|
148545
148442
|
/* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-3 opacity-60 shrink-0" })
|
|
148546
148443
|
]
|
|
@@ -148724,7 +148621,8 @@ function AskUserDialog({ sessionId }) {
|
|
|
148724
148621
|
children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-full max-w-6xl px-6 pb-4 mx-auto", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-rows-[auto_1fr_auto] rounded-xl border border-border bg-card p-4 shadow-lg shadow-primary/5 max-h-[90vh] overflow-hidden", children: [
|
|
148725
148622
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 mb-3 min-h-0", children: [
|
|
148726
148623
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleQuestionMark, { className: "size-4.5 shrink-0 text-sky-500" }),
|
|
148727
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-sm font-medium leading-snug truncate", children: currentRequest.title || t2("askUser.title", "Request") })
|
|
148624
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-sm font-medium leading-snug truncate", children: currentRequest.title || t2("askUser.title", "Request") }),
|
|
148625
|
+
currentRequest.timeoutAt != null && /* @__PURE__ */ jsxRuntimeExports.jsx(AskUserCountdown, { timeoutAt: currentRequest.timeoutAt })
|
|
148728
148626
|
] }),
|
|
148729
148627
|
currentRequest.description && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "min-h-0 overflow-hidden", children: /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollArea, { className: "h-full rounded-md bg-muted/40", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "py-3 px-2", children: /* @__PURE__ */ jsxRuntimeExports.jsx("pre", { className: "text-xs text-muted-foreground leading-relaxed whitespace-pre-wrap", children: /* @__PURE__ */ jsxRuntimeExports.jsx("code", { children: formatDescription(currentRequest.description) }) }) }) }) }),
|
|
148730
148628
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "pt-3 min-h-0", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
@@ -148749,6 +148647,33 @@ function formatDescription(text2) {
|
|
|
148749
148647
|
}
|
|
148750
148648
|
return text2;
|
|
148751
148649
|
}
|
|
148650
|
+
function AskUserCountdown({ timeoutAt }) {
|
|
148651
|
+
const { t: t2 } = useTranslation();
|
|
148652
|
+
const [remainingMs, setRemainingMs] = reactExports.useState(() => Math.max(0, timeoutAt - Date.now()));
|
|
148653
|
+
reactExports.useEffect(() => {
|
|
148654
|
+
const update2 = () => setRemainingMs(Math.max(0, timeoutAt - Date.now()));
|
|
148655
|
+
update2();
|
|
148656
|
+
const timer2 = setInterval(update2, 1e3);
|
|
148657
|
+
return () => clearInterval(timer2);
|
|
148658
|
+
}, [timeoutAt]);
|
|
148659
|
+
const totalSeconds = Math.ceil(remainingMs / 1e3);
|
|
148660
|
+
const minutes = Math.floor(totalSeconds / 60);
|
|
148661
|
+
const seconds = totalSeconds % 60;
|
|
148662
|
+
const urgent = totalSeconds <= 30;
|
|
148663
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
148664
|
+
"span",
|
|
148665
|
+
{
|
|
148666
|
+
className: `ml-auto inline-flex shrink-0 items-center h-5 rounded-full px-1.5 text-[10px] font-mono tabular-nums leading-none ${urgent ? "bg-destructive/10 text-destructive" : "bg-muted text-muted-foreground"}`,
|
|
148667
|
+
title: t2("askUser.autoClose", "Auto closes on timeout"),
|
|
148668
|
+
children: [
|
|
148669
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Clock, { className: "size-3 mr-1 -ml-px" }),
|
|
148670
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: minutes.toString().padStart(2, "0") }),
|
|
148671
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[8px] mx-0.5", children: ":" }),
|
|
148672
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: seconds.toString().padStart(2, "0") })
|
|
148673
|
+
]
|
|
148674
|
+
}
|
|
148675
|
+
);
|
|
148676
|
+
}
|
|
148752
148677
|
function AskUserOptions({
|
|
148753
148678
|
request: request$1,
|
|
148754
148679
|
onResolved
|
|
@@ -148919,6 +148844,280 @@ function getFileKind$1(filename) {
|
|
|
148919
148844
|
if (ext === "md") return "markdown";
|
|
148920
148845
|
return "text";
|
|
148921
148846
|
}
|
|
148847
|
+
function ContextMenuRoot(props) {
|
|
148848
|
+
const [anchor2, setAnchor] = reactExports.useState({
|
|
148849
|
+
getBoundingClientRect() {
|
|
148850
|
+
return DOMRect.fromRect({
|
|
148851
|
+
width: 0,
|
|
148852
|
+
height: 0,
|
|
148853
|
+
x: 0,
|
|
148854
|
+
y: 0
|
|
148855
|
+
});
|
|
148856
|
+
}
|
|
148857
|
+
});
|
|
148858
|
+
const backdropRef = reactExports.useRef(null);
|
|
148859
|
+
const internalBackdropRef = reactExports.useRef(null);
|
|
148860
|
+
const actionsRef = reactExports.useRef(null);
|
|
148861
|
+
const positionerRef = reactExports.useRef(null);
|
|
148862
|
+
const allowMouseUpTriggerRef = reactExports.useRef(true);
|
|
148863
|
+
const initialCursorPointRef = reactExports.useRef(null);
|
|
148864
|
+
const id32 = useId();
|
|
148865
|
+
const contextValue = reactExports.useMemo(() => ({
|
|
148866
|
+
anchor: anchor2,
|
|
148867
|
+
setAnchor,
|
|
148868
|
+
actionsRef,
|
|
148869
|
+
backdropRef,
|
|
148870
|
+
internalBackdropRef,
|
|
148871
|
+
positionerRef,
|
|
148872
|
+
allowMouseUpTriggerRef,
|
|
148873
|
+
initialCursorPointRef,
|
|
148874
|
+
rootId: id32
|
|
148875
|
+
}), [anchor2, id32]);
|
|
148876
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(ContextMenuRootContext.Provider, {
|
|
148877
|
+
value: contextValue,
|
|
148878
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(MenuRootContext.Provider, {
|
|
148879
|
+
value: void 0,
|
|
148880
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(MenuRoot, {
|
|
148881
|
+
...props
|
|
148882
|
+
})
|
|
148883
|
+
})
|
|
148884
|
+
});
|
|
148885
|
+
}
|
|
148886
|
+
const LONG_PRESS_DELAY = 500;
|
|
148887
|
+
const ContextMenuTrigger$1 = /* @__PURE__ */ reactExports.forwardRef(function ContextMenuTrigger2(componentProps, forwardedRef) {
|
|
148888
|
+
const {
|
|
148889
|
+
render: render4,
|
|
148890
|
+
className,
|
|
148891
|
+
style: style2,
|
|
148892
|
+
...elementProps
|
|
148893
|
+
} = componentProps;
|
|
148894
|
+
const {
|
|
148895
|
+
setAnchor,
|
|
148896
|
+
actionsRef,
|
|
148897
|
+
internalBackdropRef,
|
|
148898
|
+
backdropRef,
|
|
148899
|
+
positionerRef,
|
|
148900
|
+
allowMouseUpTriggerRef,
|
|
148901
|
+
initialCursorPointRef,
|
|
148902
|
+
rootId
|
|
148903
|
+
} = useContextMenuRootContext(false);
|
|
148904
|
+
const {
|
|
148905
|
+
store
|
|
148906
|
+
} = useMenuRootContext(false);
|
|
148907
|
+
const open2 = store.useState("open");
|
|
148908
|
+
const disabled2 = store.useState("disabled");
|
|
148909
|
+
const triggerRef = reactExports.useRef(null);
|
|
148910
|
+
const touchPositionRef = reactExports.useRef(null);
|
|
148911
|
+
const longPressTimeout = useTimeout();
|
|
148912
|
+
const allowMouseUpTimeout = useTimeout();
|
|
148913
|
+
const allowMouseUpRef = reactExports.useRef(false);
|
|
148914
|
+
const mouseUpAbortControllerRef = reactExports.useRef(null);
|
|
148915
|
+
function handleLongPress(x2, y4, event) {
|
|
148916
|
+
const isTouchEvent2 = event.type.startsWith("touch");
|
|
148917
|
+
initialCursorPointRef.current = {
|
|
148918
|
+
x: x2,
|
|
148919
|
+
y: y4
|
|
148920
|
+
};
|
|
148921
|
+
setAnchor({
|
|
148922
|
+
getBoundingClientRect() {
|
|
148923
|
+
return DOMRect.fromRect({
|
|
148924
|
+
width: isTouchEvent2 ? 10 : 0,
|
|
148925
|
+
height: isTouchEvent2 ? 10 : 0,
|
|
148926
|
+
x: x2,
|
|
148927
|
+
y: y4
|
|
148928
|
+
});
|
|
148929
|
+
}
|
|
148930
|
+
});
|
|
148931
|
+
allowMouseUpRef.current = false;
|
|
148932
|
+
actionsRef.current?.setOpen(true, createChangeEventDetails(triggerPress, event));
|
|
148933
|
+
allowMouseUpTimeout.start(LONG_PRESS_DELAY, () => {
|
|
148934
|
+
allowMouseUpRef.current = true;
|
|
148935
|
+
});
|
|
148936
|
+
}
|
|
148937
|
+
function handleContextMenu(event) {
|
|
148938
|
+
if (disabled2) {
|
|
148939
|
+
return;
|
|
148940
|
+
}
|
|
148941
|
+
allowMouseUpTriggerRef.current = true;
|
|
148942
|
+
stopEvent$1(event);
|
|
148943
|
+
handleLongPress(event.clientX, event.clientY, event.nativeEvent);
|
|
148944
|
+
const doc = ownerDocument(triggerRef.current);
|
|
148945
|
+
mouseUpAbortControllerRef.current?.abort();
|
|
148946
|
+
const mouseUpAbortController = new AbortController();
|
|
148947
|
+
mouseUpAbortControllerRef.current = mouseUpAbortController;
|
|
148948
|
+
doc.addEventListener("mouseup", (mouseEvent) => {
|
|
148949
|
+
allowMouseUpTriggerRef.current = false;
|
|
148950
|
+
if (!allowMouseUpRef.current) {
|
|
148951
|
+
return;
|
|
148952
|
+
}
|
|
148953
|
+
allowMouseUpTimeout.clear();
|
|
148954
|
+
allowMouseUpRef.current = false;
|
|
148955
|
+
const mouseUpTarget = getTarget(mouseEvent);
|
|
148956
|
+
if (contains(positionerRef.current, mouseUpTarget)) {
|
|
148957
|
+
return;
|
|
148958
|
+
}
|
|
148959
|
+
if (rootId && mouseUpTarget && findRootOwnerId(mouseUpTarget) === rootId) {
|
|
148960
|
+
return;
|
|
148961
|
+
}
|
|
148962
|
+
actionsRef.current?.setOpen(false, createChangeEventDetails(cancelOpen, mouseEvent));
|
|
148963
|
+
}, {
|
|
148964
|
+
once: true,
|
|
148965
|
+
signal: mouseUpAbortController.signal
|
|
148966
|
+
});
|
|
148967
|
+
}
|
|
148968
|
+
function cancelLongPress() {
|
|
148969
|
+
longPressTimeout.clear();
|
|
148970
|
+
touchPositionRef.current = null;
|
|
148971
|
+
}
|
|
148972
|
+
function handleTouchStart(event) {
|
|
148973
|
+
if (disabled2) {
|
|
148974
|
+
cancelLongPress();
|
|
148975
|
+
return;
|
|
148976
|
+
}
|
|
148977
|
+
allowMouseUpTriggerRef.current = false;
|
|
148978
|
+
if (event.touches.length !== 1) {
|
|
148979
|
+
cancelLongPress();
|
|
148980
|
+
return;
|
|
148981
|
+
}
|
|
148982
|
+
event.stopPropagation();
|
|
148983
|
+
const touch = event.touches[0];
|
|
148984
|
+
const touchPosition = {
|
|
148985
|
+
x: touch.clientX,
|
|
148986
|
+
y: touch.clientY
|
|
148987
|
+
};
|
|
148988
|
+
touchPositionRef.current = touchPosition;
|
|
148989
|
+
longPressTimeout.start(LONG_PRESS_DELAY, () => {
|
|
148990
|
+
handleLongPress(touchPosition.x, touchPosition.y, event.nativeEvent);
|
|
148991
|
+
});
|
|
148992
|
+
}
|
|
148993
|
+
function handleTouchMove(event) {
|
|
148994
|
+
if (event.touches.length !== 1) {
|
|
148995
|
+
cancelLongPress();
|
|
148996
|
+
return;
|
|
148997
|
+
}
|
|
148998
|
+
if (longPressTimeout.isStarted() && touchPositionRef.current) {
|
|
148999
|
+
const touch = event.touches[0];
|
|
149000
|
+
const moveThreshold = 10;
|
|
149001
|
+
const deltaX = Math.abs(touch.clientX - touchPositionRef.current.x);
|
|
149002
|
+
const deltaY = Math.abs(touch.clientY - touchPositionRef.current.y);
|
|
149003
|
+
if (deltaX > moveThreshold || deltaY > moveThreshold) {
|
|
149004
|
+
cancelLongPress();
|
|
149005
|
+
}
|
|
149006
|
+
}
|
|
149007
|
+
}
|
|
149008
|
+
reactExports.useEffect(() => () => {
|
|
149009
|
+
mouseUpAbortControllerRef.current?.abort();
|
|
149010
|
+
}, []);
|
|
149011
|
+
reactExports.useEffect(() => {
|
|
149012
|
+
function handleDocumentContextMenu(event) {
|
|
149013
|
+
if (disabled2) {
|
|
149014
|
+
return;
|
|
149015
|
+
}
|
|
149016
|
+
const target = getTarget(event);
|
|
149017
|
+
const targetElement = target;
|
|
149018
|
+
if (contains(triggerRef.current, targetElement) || contains(internalBackdropRef.current, targetElement) || contains(backdropRef.current, targetElement)) {
|
|
149019
|
+
event.preventDefault();
|
|
149020
|
+
}
|
|
149021
|
+
}
|
|
149022
|
+
const doc = ownerDocument(triggerRef.current);
|
|
149023
|
+
return addEventListener(doc, "contextmenu", handleDocumentContextMenu);
|
|
149024
|
+
}, [backdropRef, disabled2, internalBackdropRef]);
|
|
149025
|
+
const state2 = {
|
|
149026
|
+
open: open2
|
|
149027
|
+
};
|
|
149028
|
+
const element2 = useRenderElement("div", componentProps, {
|
|
149029
|
+
state: state2,
|
|
149030
|
+
ref: [triggerRef, forwardedRef],
|
|
149031
|
+
props: [{
|
|
149032
|
+
onContextMenu: handleContextMenu,
|
|
149033
|
+
onTouchStart: handleTouchStart,
|
|
149034
|
+
onTouchMove: handleTouchMove,
|
|
149035
|
+
onTouchEnd: cancelLongPress,
|
|
149036
|
+
onTouchCancel: cancelLongPress,
|
|
149037
|
+
style: {
|
|
149038
|
+
WebkitTouchCallout: "none"
|
|
149039
|
+
}
|
|
149040
|
+
}, elementProps],
|
|
149041
|
+
stateAttributesMapping: pressableTriggerOpenStateMapping
|
|
149042
|
+
});
|
|
149043
|
+
return element2;
|
|
149044
|
+
});
|
|
149045
|
+
function ContextMenu({ ...props }) {
|
|
149046
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(ContextMenuRoot, { "data-slot": "context-menu", ...props });
|
|
149047
|
+
}
|
|
149048
|
+
function ContextMenuTrigger({
|
|
149049
|
+
className,
|
|
149050
|
+
...props
|
|
149051
|
+
}) {
|
|
149052
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
149053
|
+
ContextMenuTrigger$1,
|
|
149054
|
+
{
|
|
149055
|
+
"data-slot": "context-menu-trigger",
|
|
149056
|
+
className: cn$8("select-none", className),
|
|
149057
|
+
...props
|
|
149058
|
+
}
|
|
149059
|
+
);
|
|
149060
|
+
}
|
|
149061
|
+
function ContextMenuContent({
|
|
149062
|
+
className,
|
|
149063
|
+
align = "start",
|
|
149064
|
+
alignOffset = 4,
|
|
149065
|
+
side = "right",
|
|
149066
|
+
sideOffset = 0,
|
|
149067
|
+
...props
|
|
149068
|
+
}) {
|
|
149069
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(MenuPortal, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
149070
|
+
MenuPositioner,
|
|
149071
|
+
{
|
|
149072
|
+
className: "isolate z-50 outline-none",
|
|
149073
|
+
align,
|
|
149074
|
+
alignOffset,
|
|
149075
|
+
side,
|
|
149076
|
+
sideOffset,
|
|
149077
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
149078
|
+
MenuPopup,
|
|
149079
|
+
{
|
|
149080
|
+
"data-slot": "context-menu-content",
|
|
149081
|
+
className: cn$8("z-50 max-h-(--available-height) min-w-38 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover py-1 px-1 space-y-0.5 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
|
|
149082
|
+
...props
|
|
149083
|
+
}
|
|
149084
|
+
)
|
|
149085
|
+
}
|
|
149086
|
+
) });
|
|
149087
|
+
}
|
|
149088
|
+
function ContextMenuItem({
|
|
149089
|
+
className,
|
|
149090
|
+
inset,
|
|
149091
|
+
variant = "default",
|
|
149092
|
+
...props
|
|
149093
|
+
}) {
|
|
149094
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
149095
|
+
MenuItem,
|
|
149096
|
+
{
|
|
149097
|
+
"data-slot": "context-menu-item",
|
|
149098
|
+
"data-inset": inset,
|
|
149099
|
+
"data-variant": variant,
|
|
149100
|
+
className: cn$8(
|
|
149101
|
+
"group/context-menu-item relative flex cursor-default items-center gap-1.5 rounded-sm px-1.5 py-1 text-xs text-muted-foreground/90 outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3 focus:*:[svg]:text-accent-foreground data-[variant=destructive]:*:[svg]:text-destructive",
|
|
149102
|
+
className
|
|
149103
|
+
),
|
|
149104
|
+
...props
|
|
149105
|
+
}
|
|
149106
|
+
);
|
|
149107
|
+
}
|
|
149108
|
+
function ContextMenuSeparator({
|
|
149109
|
+
className,
|
|
149110
|
+
...props
|
|
149111
|
+
}) {
|
|
149112
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
149113
|
+
Separator$1,
|
|
149114
|
+
{
|
|
149115
|
+
"data-slot": "context-menu-separator",
|
|
149116
|
+
className: cn$8("-mx-1 my-1 h-px bg-border", className),
|
|
149117
|
+
...props
|
|
149118
|
+
}
|
|
149119
|
+
);
|
|
149120
|
+
}
|
|
148922
149121
|
function FileViewTabs({ viewMode, viewModes, onViewModeChange }) {
|
|
148923
149122
|
const { t: t2 } = useTranslation();
|
|
148924
149123
|
if (viewModes.length <= 1) return null;
|
|
@@ -270733,7 +270932,15 @@ function Detail({ detailType, projectId, file, terminalId, onClose }) {
|
|
|
270733
270932
|
if (!detailType) return null;
|
|
270734
270933
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col h-full min-h-0 overflow-hidden bg-background", children: [
|
|
270735
270934
|
detailType === "file" && projectId && file && /* @__PURE__ */ jsxRuntimeExports.jsx(FileDetail$1, { projectId, file, onClose }),
|
|
270736
|
-
detailType === "terminal" && projectId && terminalId && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
270935
|
+
detailType === "terminal" && projectId && terminalId && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
270936
|
+
TerminalDetail,
|
|
270937
|
+
{
|
|
270938
|
+
terminalId,
|
|
270939
|
+
projectId,
|
|
270940
|
+
onClose
|
|
270941
|
+
},
|
|
270942
|
+
terminalId
|
|
270943
|
+
),
|
|
270737
270944
|
(!detailType || detailType === "file" && (!projectId || !file) || detailType === "terminal" && (!projectId || !terminalId)) && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex h-full items-center justify-center text-xs text-muted-foreground", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: t2("detail.noContent", "No content") }) })
|
|
270738
270945
|
] });
|
|
270739
270946
|
}
|
|
@@ -270838,6 +271045,7 @@ function TreeItem({
|
|
|
270838
271045
|
},
|
|
270839
271046
|
className: cn$8(
|
|
270840
271047
|
"flex h-6 cursor-default select-none items-center gap-1.5 px-1.5 text-sx leading-none text-foreground/60",
|
|
271048
|
+
node2.ignored && "opacity-50",
|
|
270841
271049
|
node2.id === previewId ? "bg-primary/8 hover:bg-primary/10" : "hover:bg-primary/5 hover:text-foreground",
|
|
270842
271050
|
isSelected ? "text-foreground bg-primary/6" : "",
|
|
270843
271051
|
isDragOver && "relative ring-1 ring-primary bg-primary/5"
|
|
@@ -271398,6 +271606,7 @@ const FilePanel = reactExports.memo(function FilePanel2({
|
|
|
271398
271606
|
id: tempId,
|
|
271399
271607
|
name: "",
|
|
271400
271608
|
isFolder,
|
|
271609
|
+
ignored: false,
|
|
271401
271610
|
children: isFolder ? [] : void 0
|
|
271402
271611
|
};
|
|
271403
271612
|
if (parentId) {
|
|
@@ -274563,6 +274772,7 @@ function Session({ session: session2 }) {
|
|
|
274563
274772
|
}
|
|
274564
274773
|
state2 = reduceSessionNotification(sessionId, state2, notification);
|
|
274565
274774
|
}
|
|
274775
|
+
state2 = reduceFlushStreaming(state2);
|
|
274566
274776
|
state2 = {
|
|
274567
274777
|
...state2,
|
|
274568
274778
|
isLoading: false,
|
|
@@ -274663,6 +274873,367 @@ function Session({ session: session2 }) {
|
|
|
274663
274873
|
] })
|
|
274664
274874
|
] }, sessionId) : null });
|
|
274665
274875
|
}
|
|
274876
|
+
function Label({ className, ...props }) {
|
|
274877
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
274878
|
+
"label",
|
|
274879
|
+
{
|
|
274880
|
+
"data-slot": "label",
|
|
274881
|
+
className: cn$8(
|
|
274882
|
+
"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
|
|
274883
|
+
className
|
|
274884
|
+
),
|
|
274885
|
+
...props
|
|
274886
|
+
}
|
|
274887
|
+
);
|
|
274888
|
+
}
|
|
274889
|
+
function FieldGroup({ className, ...props }) {
|
|
274890
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
274891
|
+
"div",
|
|
274892
|
+
{
|
|
274893
|
+
"data-slot": "field-group",
|
|
274894
|
+
className: cn$8(
|
|
274895
|
+
"group/field-group @container/field-group flex w-full flex-col gap-5 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4",
|
|
274896
|
+
className
|
|
274897
|
+
),
|
|
274898
|
+
...props
|
|
274899
|
+
}
|
|
274900
|
+
);
|
|
274901
|
+
}
|
|
274902
|
+
const fieldVariants = cva(
|
|
274903
|
+
"group/field flex w-full gap-2 data-[invalid=true]:text-destructive",
|
|
274904
|
+
{
|
|
274905
|
+
variants: {
|
|
274906
|
+
orientation: {
|
|
274907
|
+
vertical: "flex-col *:w-full [&>.sr-only]:w-auto",
|
|
274908
|
+
horizontal: "flex-row items-center has-[>[data-slot=field-content]]:items-start *:data-[slot=field-label]:flex-auto has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px",
|
|
274909
|
+
responsive: "flex-col *:w-full @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:*:data-[slot=field-label]:flex-auto [&>.sr-only]:w-auto @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"
|
|
274910
|
+
}
|
|
274911
|
+
},
|
|
274912
|
+
defaultVariants: {
|
|
274913
|
+
orientation: "vertical"
|
|
274914
|
+
}
|
|
274915
|
+
}
|
|
274916
|
+
);
|
|
274917
|
+
function Field({
|
|
274918
|
+
className,
|
|
274919
|
+
orientation = "vertical",
|
|
274920
|
+
...props
|
|
274921
|
+
}) {
|
|
274922
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
274923
|
+
"div",
|
|
274924
|
+
{
|
|
274925
|
+
role: "group",
|
|
274926
|
+
"data-slot": "field",
|
|
274927
|
+
"data-orientation": orientation,
|
|
274928
|
+
className: cn$8(fieldVariants({ orientation }), className),
|
|
274929
|
+
...props
|
|
274930
|
+
}
|
|
274931
|
+
);
|
|
274932
|
+
}
|
|
274933
|
+
function FieldLabel({
|
|
274934
|
+
className,
|
|
274935
|
+
...props
|
|
274936
|
+
}) {
|
|
274937
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
274938
|
+
Label,
|
|
274939
|
+
{
|
|
274940
|
+
"data-slot": "field-label",
|
|
274941
|
+
className: cn$8(
|
|
274942
|
+
"group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50 has-data-checked:border-primary/30 has-data-checked:bg-primary/5 has-[>[data-slot=field]]:rounded-lg has-[>[data-slot=field]]:border *:data-[slot=field]:p-2.5 dark:has-data-checked:border-primary/20 dark:has-data-checked:bg-primary/10",
|
|
274943
|
+
"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col",
|
|
274944
|
+
className
|
|
274945
|
+
),
|
|
274946
|
+
...props
|
|
274947
|
+
}
|
|
274948
|
+
);
|
|
274949
|
+
}
|
|
274950
|
+
function FieldError({
|
|
274951
|
+
className,
|
|
274952
|
+
children: children2,
|
|
274953
|
+
errors,
|
|
274954
|
+
...props
|
|
274955
|
+
}) {
|
|
274956
|
+
const content2 = reactExports.useMemo(() => {
|
|
274957
|
+
if (children2) {
|
|
274958
|
+
return children2;
|
|
274959
|
+
}
|
|
274960
|
+
if (!errors?.length) {
|
|
274961
|
+
return null;
|
|
274962
|
+
}
|
|
274963
|
+
const uniqueErrors = [
|
|
274964
|
+
...new Map(errors.map((error) => [error?.message, error])).values()
|
|
274965
|
+
];
|
|
274966
|
+
if (uniqueErrors?.length == 1) {
|
|
274967
|
+
return uniqueErrors[0]?.message;
|
|
274968
|
+
}
|
|
274969
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { className: "ml-4 flex list-disc flex-col gap-1", children: uniqueErrors.map(
|
|
274970
|
+
(error, index2) => error?.message && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: error.message }, index2)
|
|
274971
|
+
) });
|
|
274972
|
+
}, [children2, errors]);
|
|
274973
|
+
if (!content2) {
|
|
274974
|
+
return null;
|
|
274975
|
+
}
|
|
274976
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
274977
|
+
"div",
|
|
274978
|
+
{
|
|
274979
|
+
role: "alert",
|
|
274980
|
+
"data-slot": "field-error",
|
|
274981
|
+
className: cn$8("text-xs font-normal text-destructive -mb-4.5 -mt-1.5 min-h-4 text-[11px]", className),
|
|
274982
|
+
...props,
|
|
274983
|
+
children: content2
|
|
274984
|
+
}
|
|
274985
|
+
);
|
|
274986
|
+
}
|
|
274987
|
+
function SettingsProxyDialog({ open: open2, onOpenChange }) {
|
|
274988
|
+
const { t: t2 } = useTranslation();
|
|
274989
|
+
const proxy = useAppStore((s16) => s16.proxy);
|
|
274990
|
+
const setProxy = useAppStore((s16) => s16.setProxy);
|
|
274991
|
+
const { toast: toast2, alert, confirm: confirm2 } = useMessage();
|
|
274992
|
+
const [draft, setDraft] = reactExports.useState(() => ({
|
|
274993
|
+
mode: proxy.mode ?? "off",
|
|
274994
|
+
httpProxy: proxy.httpProxy ?? "",
|
|
274995
|
+
httpsProxy: proxy.httpsProxy ?? "",
|
|
274996
|
+
noProxy: proxy.noProxy ?? "",
|
|
274997
|
+
username: proxy.username ?? "",
|
|
274998
|
+
password: proxy.password ?? ""
|
|
274999
|
+
}));
|
|
275000
|
+
reactExports.useEffect(() => {
|
|
275001
|
+
if (!open2) return;
|
|
275002
|
+
setDraft({
|
|
275003
|
+
mode: proxy.mode ?? "off",
|
|
275004
|
+
httpProxy: proxy.httpProxy ?? "",
|
|
275005
|
+
httpsProxy: proxy.httpsProxy ?? "",
|
|
275006
|
+
noProxy: proxy.noProxy ?? "",
|
|
275007
|
+
username: proxy.username ?? "",
|
|
275008
|
+
password: proxy.password ?? ""
|
|
275009
|
+
});
|
|
275010
|
+
}, [open2, proxy]);
|
|
275011
|
+
const updateDraft = (patch2) => {
|
|
275012
|
+
setDraft((prev2) => ({ ...prev2, ...patch2 }));
|
|
275013
|
+
};
|
|
275014
|
+
const handleModeChange = (mode) => {
|
|
275015
|
+
if (!mode) return;
|
|
275016
|
+
updateDraft({ mode });
|
|
275017
|
+
};
|
|
275018
|
+
const handleSave = async () => {
|
|
275019
|
+
const trimStr = (value) => {
|
|
275020
|
+
const trimmed = value?.trim();
|
|
275021
|
+
return trimmed ? trimmed : void 0;
|
|
275022
|
+
};
|
|
275023
|
+
const next2 = {
|
|
275024
|
+
mode: draft.mode,
|
|
275025
|
+
httpProxy: trimStr(draft.httpProxy),
|
|
275026
|
+
httpsProxy: trimStr(draft.httpsProxy),
|
|
275027
|
+
noProxy: trimStr(draft.noProxy),
|
|
275028
|
+
username: trimStr(draft.username),
|
|
275029
|
+
password: trimStr(draft.password)
|
|
275030
|
+
};
|
|
275031
|
+
if (next2.mode === "manual") {
|
|
275032
|
+
if (!next2.httpProxy) {
|
|
275033
|
+
toast2.error(
|
|
275034
|
+
t2(
|
|
275035
|
+
"settings.proxy.validation.httpProxyRequired",
|
|
275036
|
+
"HTTP proxy URL is required in manual mode."
|
|
275037
|
+
)
|
|
275038
|
+
);
|
|
275039
|
+
return;
|
|
275040
|
+
}
|
|
275041
|
+
for (const [field, value] of [
|
|
275042
|
+
[t2("settings.proxy.httpProxy", "HTTP Proxy"), next2.httpProxy],
|
|
275043
|
+
[t2("settings.proxy.httpsProxy", "HTTPS proxy"), next2.httpsProxy]
|
|
275044
|
+
]) {
|
|
275045
|
+
const v3 = value?.trim();
|
|
275046
|
+
if (v3 && !/^https?:\/\//i.test(v3) && !/^[^/]+:\d+$/i.test(v3)) {
|
|
275047
|
+
toast2.error(
|
|
275048
|
+
t2(
|
|
275049
|
+
"settings.proxy.validation.invalidProxyUrl",
|
|
275050
|
+
"{{field}} should start with http:// or https://, or use a host:port address (e.g. http://127.0.0.1:7890).",
|
|
275051
|
+
{ field }
|
|
275052
|
+
)
|
|
275053
|
+
);
|
|
275054
|
+
return;
|
|
275055
|
+
}
|
|
275056
|
+
}
|
|
275057
|
+
}
|
|
275058
|
+
try {
|
|
275059
|
+
await request.updateSettings({ proxy: next2 });
|
|
275060
|
+
setProxy(next2);
|
|
275061
|
+
onOpenChange(false);
|
|
275062
|
+
if (isWebUI) {
|
|
275063
|
+
await alert({
|
|
275064
|
+
title: t2("settings.proxy.restartTitle", "Restart Required"),
|
|
275065
|
+
content: t2(
|
|
275066
|
+
"settings.proxy.restartManualDesc",
|
|
275067
|
+
"Proxy settings saved. Please manually restart the Fello server process to apply the new configuration."
|
|
275068
|
+
)
|
|
275069
|
+
});
|
|
275070
|
+
return;
|
|
275071
|
+
}
|
|
275072
|
+
const result = await confirm2({
|
|
275073
|
+
title: t2("settings.proxy.restartTitle", "Restart Required"),
|
|
275074
|
+
content: t2(
|
|
275075
|
+
"settings.proxy.restartDesc",
|
|
275076
|
+
"Proxy settings saved. Restart Fello to apply the new proxy configuration."
|
|
275077
|
+
),
|
|
275078
|
+
buttons: [
|
|
275079
|
+
{ text: t2("settings.proxy.later", "Later"), value: null, variant: "outline" },
|
|
275080
|
+
{
|
|
275081
|
+
text: t2("settings.proxy.restartNow", "Restart Now"),
|
|
275082
|
+
value: "confirm",
|
|
275083
|
+
variant: "default"
|
|
275084
|
+
}
|
|
275085
|
+
]
|
|
275086
|
+
});
|
|
275087
|
+
if (result) {
|
|
275088
|
+
await electron.restartApp();
|
|
275089
|
+
}
|
|
275090
|
+
} catch (err) {
|
|
275091
|
+
toast2.error(
|
|
275092
|
+
extractErrorMessage(err) || t2("settings.proxy.saveFailed", "Failed to save proxy settings.")
|
|
275093
|
+
);
|
|
275094
|
+
}
|
|
275095
|
+
};
|
|
275096
|
+
const modeItems = [
|
|
275097
|
+
{ value: "off", label: t2("settings.proxy.off", "Direct") },
|
|
275098
|
+
{ value: "manual", label: t2("settings.proxy.manual", "Manual") },
|
|
275099
|
+
{ value: "system", label: t2("settings.proxy.system", "System") }
|
|
275100
|
+
];
|
|
275101
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(Dialog, { open: open2, onOpenChange, disablePointerDismissal: true, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(DialogContent, { className: "sm:max-w-lg", children: [
|
|
275102
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(DialogHeader, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(DialogTitle, { children: t2("settings.proxy.title", "Network Proxy") }) }),
|
|
275103
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-4 mt-2", children: [
|
|
275104
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-4", children: [
|
|
275105
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(Field, { className: "gap-1", children: [
|
|
275106
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(FieldLabel, { className: "text-xs text-muted-foreground", children: t2("settings.proxy.mode", "Proxy Mode") }),
|
|
275107
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-[10px] text-muted-foreground/70", children: [
|
|
275108
|
+
draft.mode === "off" && t2("settings.proxy.offDesc", "Connect directly without a proxy"),
|
|
275109
|
+
draft.mode === "manual" && t2(
|
|
275110
|
+
"settings.proxy.manualDesc",
|
|
275111
|
+
"Specify a proxy server manually for all network requests"
|
|
275112
|
+
),
|
|
275113
|
+
draft.mode === "system" && t2(
|
|
275114
|
+
"settings.proxy.systemDesc",
|
|
275115
|
+
"Use the system proxy settings (macOS/Windows or environment variables)"
|
|
275116
|
+
)
|
|
275117
|
+
] })
|
|
275118
|
+
] }),
|
|
275119
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(Select, { items: modeItems, value: draft.mode, onValueChange: handleModeChange, children: [
|
|
275120
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(SelectTrigger, { size: "sm", className: "w-35 text-[11px]!", children: /* @__PURE__ */ jsxRuntimeExports.jsx(SelectValue, { placeholder: "Mode" }) }),
|
|
275121
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(SelectContent, { children: modeItems.map((item) => /* @__PURE__ */ jsxRuntimeExports.jsx(SelectItem, { value: item.value, children: item.label }, item.value)) })
|
|
275122
|
+
] })
|
|
275123
|
+
] }),
|
|
275124
|
+
draft.mode === "manual" && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-4", children: [
|
|
275125
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(Field, { children: [
|
|
275126
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(FieldLabel, { htmlFor: "proxy-http", className: "text-[11px] text-muted-foreground", children: t2("settings.proxy.httpProxy", "HTTP Proxy") }),
|
|
275127
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
275128
|
+
Input,
|
|
275129
|
+
{
|
|
275130
|
+
id: "proxy-http",
|
|
275131
|
+
type: "text",
|
|
275132
|
+
value: draft.httpProxy ?? "",
|
|
275133
|
+
onChange: (e11) => updateDraft({ httpProxy: e11.target.value }),
|
|
275134
|
+
placeholder: t2(
|
|
275135
|
+
"settings.proxy.httpProxyPlaceholder",
|
|
275136
|
+
"e.g. http://127.0.0.1:7890"
|
|
275137
|
+
),
|
|
275138
|
+
className: "h-8 text-[11px]! font-mono text-foreground/70 focus-visible:ring-0.5"
|
|
275139
|
+
}
|
|
275140
|
+
)
|
|
275141
|
+
] }),
|
|
275142
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(Field, { children: [
|
|
275143
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(FieldLabel, { htmlFor: "proxy-https", className: "text-[11px] text-muted-foreground", children: t2("settings.proxy.httpsProxy", "HTTPS Proxy (optional)") }),
|
|
275144
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
275145
|
+
Input,
|
|
275146
|
+
{
|
|
275147
|
+
id: "proxy-https",
|
|
275148
|
+
type: "text",
|
|
275149
|
+
value: draft.httpsProxy ?? "",
|
|
275150
|
+
onChange: (e11) => updateDraft({ httpsProxy: e11.target.value }),
|
|
275151
|
+
placeholder: t2(
|
|
275152
|
+
"settings.proxy.httpProxyPlaceholder",
|
|
275153
|
+
"e.g. http://127.0.0.1:7890"
|
|
275154
|
+
),
|
|
275155
|
+
className: "h-8 text-[11px]! font-mono text-foreground/70 focus-visible:ring-0.5"
|
|
275156
|
+
}
|
|
275157
|
+
),
|
|
275158
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-[10px] text-muted-foreground/70", children: t2("settings.proxy.httpsProxyHint", "Falls back to the HTTP proxy when empty.") })
|
|
275159
|
+
] }),
|
|
275160
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(Field, { children: [
|
|
275161
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(FieldLabel, { htmlFor: "proxy-no-proxy", className: "text-[11px] text-muted-foreground", children: t2("settings.proxy.noProxy", "No Proxy (optional)") }),
|
|
275162
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
275163
|
+
Input,
|
|
275164
|
+
{
|
|
275165
|
+
id: "proxy-no-proxy",
|
|
275166
|
+
type: "text",
|
|
275167
|
+
value: draft.noProxy ?? "",
|
|
275168
|
+
onChange: (e11) => updateDraft({ noProxy: e11.target.value }),
|
|
275169
|
+
placeholder: t2(
|
|
275170
|
+
"settings.proxy.noProxyPlaceholder",
|
|
275171
|
+
"e.g. localhost,127.0.0.1,*.internal"
|
|
275172
|
+
),
|
|
275173
|
+
className: "h-8 text-[11px]! font-mono text-foreground/70 focus-visible:ring-0.5"
|
|
275174
|
+
}
|
|
275175
|
+
)
|
|
275176
|
+
] }),
|
|
275177
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
|
|
275178
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(Field, { children: [
|
|
275179
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
275180
|
+
FieldLabel,
|
|
275181
|
+
{
|
|
275182
|
+
htmlFor: "proxy-username",
|
|
275183
|
+
className: "text-[11px] text-muted-foreground",
|
|
275184
|
+
children: t2("settings.proxy.username", "Username (optional)")
|
|
275185
|
+
}
|
|
275186
|
+
),
|
|
275187
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
275188
|
+
Input,
|
|
275189
|
+
{
|
|
275190
|
+
id: "proxy-username",
|
|
275191
|
+
type: "text",
|
|
275192
|
+
value: draft.username ?? "",
|
|
275193
|
+
onChange: (e11) => updateDraft({ username: e11.target.value }),
|
|
275194
|
+
className: "h-8 text-[11px]! text-foreground/70 focus-visible:ring-0.5"
|
|
275195
|
+
}
|
|
275196
|
+
)
|
|
275197
|
+
] }),
|
|
275198
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(Field, { children: [
|
|
275199
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
275200
|
+
FieldLabel,
|
|
275201
|
+
{
|
|
275202
|
+
htmlFor: "proxy-password",
|
|
275203
|
+
className: "text-[11px] text-muted-foreground",
|
|
275204
|
+
children: t2("settings.proxy.password", "Password (optional)")
|
|
275205
|
+
}
|
|
275206
|
+
),
|
|
275207
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
275208
|
+
Input,
|
|
275209
|
+
{
|
|
275210
|
+
id: "proxy-password",
|
|
275211
|
+
type: "password",
|
|
275212
|
+
value: draft.password ?? "",
|
|
275213
|
+
onChange: (e11) => updateDraft({ password: e11.target.value }),
|
|
275214
|
+
className: "h-8 text-[11px]! text-foreground/70 focus-visible:ring-0.5"
|
|
275215
|
+
}
|
|
275216
|
+
)
|
|
275217
|
+
] })
|
|
275218
|
+
] })
|
|
275219
|
+
] })
|
|
275220
|
+
] }),
|
|
275221
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(DialogFooter, { children: [
|
|
275222
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
275223
|
+
Button,
|
|
275224
|
+
{
|
|
275225
|
+
type: "button",
|
|
275226
|
+
variant: "outline",
|
|
275227
|
+
size: "sm",
|
|
275228
|
+
onClick: () => onOpenChange(false),
|
|
275229
|
+
className: "h-7 text-xs",
|
|
275230
|
+
children: t2("settings.proxy.cancel", "Cancel")
|
|
275231
|
+
}
|
|
275232
|
+
),
|
|
275233
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Button, { type: "button", size: "sm", className: "h-7 text-xs", onClick: handleSave, children: t2("settings.proxy.save", "Save") })
|
|
275234
|
+
] })
|
|
275235
|
+
] }) });
|
|
275236
|
+
}
|
|
274666
275237
|
function asc(a2, b2) {
|
|
274667
275238
|
return a2 - b2;
|
|
274668
275239
|
}
|
|
@@ -275939,9 +276510,18 @@ function SettingsGeneral() {
|
|
|
275939
276510
|
editor,
|
|
275940
276511
|
setEditor,
|
|
275941
276512
|
sound,
|
|
275942
|
-
setSound
|
|
276513
|
+
setSound,
|
|
276514
|
+
proxy
|
|
275943
276515
|
} = useAppStore();
|
|
275944
276516
|
const { toast: toast2 } = useMessage();
|
|
276517
|
+
const [proxyDialogOpen, setProxyDialogOpen] = reactExports.useState(false);
|
|
276518
|
+
const proxySummary = (() => {
|
|
276519
|
+
const mode = proxy.mode ?? "off";
|
|
276520
|
+
if (mode === "off") return t2("settings.general.proxyOff", "Direct");
|
|
276521
|
+
if (mode === "system") return t2("settings.general.proxySystem", "System");
|
|
276522
|
+
const url = proxy.httpProxy || proxy.httpsProxy || "";
|
|
276523
|
+
return url ? url : t2("settings.proxy.manual", "Manual");
|
|
276524
|
+
})();
|
|
275945
276525
|
const handleThemeChange = async (mode) => {
|
|
275946
276526
|
if (!mode) return;
|
|
275947
276527
|
const newTheme = { themeMode: mode };
|
|
@@ -275981,246 +276561,277 @@ function SettingsGeneral() {
|
|
|
275981
276561
|
);
|
|
275982
276562
|
}
|
|
275983
276563
|
};
|
|
275984
|
-
return /* @__PURE__ */ jsxRuntimeExports.
|
|
275985
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
275986
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-lg font-medium", children: t2("settings.general.title", "General") }),
|
|
275987
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground", children: t2("settings.general.desc", "Manage your application settings.") })
|
|
275988
|
-
] }),
|
|
275989
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-6", children: [
|
|
275990
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
275991
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-xs font-semibold text-muted-foreground/60 uppercase tracking-wider mb-3", children: t2("settings.general.groupAppearance", "Appearance") }),
|
|
275992
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-4", children: [
|
|
275993
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
275994
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1.5", children: [
|
|
275995
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-sm font-medium leading-none", children: t2("settings.general.theme") }),
|
|
275996
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs text-muted-foreground/90", children: t2("settings.themeDesc", "Customize the appearance of the application") })
|
|
275997
|
-
] }),
|
|
275998
|
-
(() => {
|
|
275999
|
-
const themeItems = [
|
|
276000
|
-
{ value: "light", label: t2("settings.general.light") },
|
|
276001
|
-
{ value: "dark", label: t2("settings.general.dark") },
|
|
276002
|
-
{ value: "system", label: t2("settings.general.system") }
|
|
276003
|
-
];
|
|
276004
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
276005
|
-
Select,
|
|
276006
|
-
{
|
|
276007
|
-
items: themeItems,
|
|
276008
|
-
value: theme.themeMode,
|
|
276009
|
-
onValueChange: handleThemeChange,
|
|
276010
|
-
children: [
|
|
276011
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(SelectTrigger, { size: "sm", className: "w-35", children: /* @__PURE__ */ jsxRuntimeExports.jsx(SelectValue, { placeholder: "Theme" }) }),
|
|
276012
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(SelectContent, { children: themeItems.map((item) => /* @__PURE__ */ jsxRuntimeExports.jsx(SelectItem, { value: item.value, children: item.label }, item.value)) })
|
|
276013
|
-
]
|
|
276014
|
-
}
|
|
276015
|
-
);
|
|
276016
|
-
})()
|
|
276017
|
-
] }),
|
|
276018
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
276019
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1.5", children: [
|
|
276020
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-sm font-medium leading-none", children: t2("settings.general.language") }),
|
|
276021
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs text-muted-foreground/90", children: t2("settings.languageDesc", "Select the display language") })
|
|
276022
|
-
] }),
|
|
276023
|
-
(() => {
|
|
276024
|
-
const languageItems = [
|
|
276025
|
-
{ value: "en", label: t2("settings.general.english") },
|
|
276026
|
-
{ value: "zh-CN", label: t2("settings.general.chinese") }
|
|
276027
|
-
];
|
|
276028
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
276029
|
-
Select,
|
|
276030
|
-
{
|
|
276031
|
-
items: languageItems,
|
|
276032
|
-
value: i18n.language,
|
|
276033
|
-
onValueChange: handleLanguageChange,
|
|
276034
|
-
children: [
|
|
276035
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(SelectTrigger, { size: "sm", className: "w-35", children: /* @__PURE__ */ jsxRuntimeExports.jsx(SelectValue, { placeholder: "Language" }) }),
|
|
276036
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(SelectContent, { children: languageItems.map((item) => /* @__PURE__ */ jsxRuntimeExports.jsx(SelectItem, { value: item.value, children: item.label }, item.value)) })
|
|
276037
|
-
]
|
|
276038
|
-
}
|
|
276039
|
-
);
|
|
276040
|
-
})()
|
|
276041
|
-
] })
|
|
276042
|
-
] })
|
|
276043
|
-
] }),
|
|
276044
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border-t border-border" }),
|
|
276564
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 flex flex-col h-full", children: [
|
|
276565
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ScrollArea, { className: "flex-1 overflow-hidden", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-6 px-5 py-4 w-full max-w-4xl mx-auto", children: [
|
|
276045
276566
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
276046
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("
|
|
276047
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("
|
|
276048
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1.5", children: [
|
|
276049
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-sm font-medium leading-none", children: t2("settings.general.autoWatchFiles") }),
|
|
276050
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs text-muted-foreground/90", children: t2(
|
|
276051
|
-
"settings.general.autoWatchFilesDesc",
|
|
276052
|
-
"Automatically watch project file changes"
|
|
276053
|
-
) })
|
|
276054
|
-
] }),
|
|
276055
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(Switch, { checked: fileWatcher.enabled, onCheckedChange: handleFileWatcherChange })
|
|
276056
|
-
] }) })
|
|
276567
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-lg font-medium", children: t2("settings.general.title", "General") }),
|
|
276568
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground", children: t2("settings.general.desc", "Manage your application settings.") })
|
|
276057
276569
|
] }),
|
|
276058
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
276059
|
-
|
|
276060
|
-
|
|
276061
|
-
|
|
276062
|
-
|
|
276063
|
-
|
|
276064
|
-
|
|
276065
|
-
|
|
276066
|
-
|
|
276067
|
-
|
|
276068
|
-
|
|
276069
|
-
|
|
276070
|
-
|
|
276071
|
-
|
|
276072
|
-
|
|
276073
|
-
|
|
276074
|
-
|
|
276075
|
-
|
|
276076
|
-
|
|
276077
|
-
|
|
276078
|
-
|
|
276079
|
-
|
|
276080
|
-
|
|
276081
|
-
|
|
276082
|
-
|
|
276083
|
-
"Failed to save editor setting."
|
|
276084
|
-
)
|
|
276085
|
-
);
|
|
276570
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-6", children: [
|
|
276571
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
276572
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-xs font-semibold text-muted-foreground/60 uppercase tracking-wider mb-3", children: t2("settings.general.groupAppearance", "Appearance") }),
|
|
276573
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-4", children: [
|
|
276574
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
276575
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1.5", children: [
|
|
276576
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-sm font-medium leading-none", children: t2("settings.general.theme") }),
|
|
276577
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs text-muted-foreground/90", children: t2("settings.themeDesc", "Customize the appearance of the application") })
|
|
276578
|
+
] }),
|
|
276579
|
+
(() => {
|
|
276580
|
+
const themeItems = [
|
|
276581
|
+
{ value: "light", label: t2("settings.general.light") },
|
|
276582
|
+
{ value: "dark", label: t2("settings.general.dark") },
|
|
276583
|
+
{ value: "system", label: t2("settings.general.system") }
|
|
276584
|
+
];
|
|
276585
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
276586
|
+
Select,
|
|
276587
|
+
{
|
|
276588
|
+
items: themeItems,
|
|
276589
|
+
value: theme.themeMode,
|
|
276590
|
+
onValueChange: handleThemeChange,
|
|
276591
|
+
children: [
|
|
276592
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(SelectTrigger, { size: "sm", className: "w-35", children: /* @__PURE__ */ jsxRuntimeExports.jsx(SelectValue, { placeholder: "Theme" }) }),
|
|
276593
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(SelectContent, { children: themeItems.map((item) => /* @__PURE__ */ jsxRuntimeExports.jsx(SelectItem, { value: item.value, children: item.label }, item.value)) })
|
|
276594
|
+
]
|
|
276086
276595
|
}
|
|
276087
|
-
|
|
276088
|
-
|
|
276089
|
-
|
|
276090
|
-
|
|
276091
|
-
|
|
276092
|
-
|
|
276093
|
-
|
|
276094
|
-
|
|
276095
|
-
|
|
276096
|
-
|
|
276097
|
-
|
|
276098
|
-
|
|
276099
|
-
|
|
276100
|
-
|
|
276101
|
-
|
|
276102
|
-
|
|
276103
|
-
|
|
276104
|
-
|
|
276105
|
-
|
|
276106
|
-
|
|
276596
|
+
);
|
|
276597
|
+
})()
|
|
276598
|
+
] }),
|
|
276599
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
276600
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1.5", children: [
|
|
276601
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-sm font-medium leading-none", children: t2("settings.general.language") }),
|
|
276602
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs text-muted-foreground/90", children: t2("settings.languageDesc", "Select the display language") })
|
|
276603
|
+
] }),
|
|
276604
|
+
(() => {
|
|
276605
|
+
const languageItems = [
|
|
276606
|
+
{ value: "en", label: t2("settings.general.english") },
|
|
276607
|
+
{ value: "zh-CN", label: t2("settings.general.chinese") }
|
|
276608
|
+
];
|
|
276609
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
276610
|
+
Select,
|
|
276611
|
+
{
|
|
276612
|
+
items: languageItems,
|
|
276613
|
+
value: i18n.language,
|
|
276614
|
+
onValueChange: handleLanguageChange,
|
|
276615
|
+
children: [
|
|
276616
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(SelectTrigger, { size: "sm", className: "w-35", children: /* @__PURE__ */ jsxRuntimeExports.jsx(SelectValue, { placeholder: "Language" }) }),
|
|
276617
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(SelectContent, { children: languageItems.map((item) => /* @__PURE__ */ jsxRuntimeExports.jsx(SelectItem, { value: item.value, children: item.label }, item.value)) })
|
|
276618
|
+
]
|
|
276619
|
+
}
|
|
276620
|
+
);
|
|
276621
|
+
})()
|
|
276622
|
+
] })
|
|
276623
|
+
] })
|
|
276624
|
+
] }),
|
|
276625
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border-t border-border" }),
|
|
276626
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
276627
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-xs font-semibold text-muted-foreground/60 uppercase tracking-wider mb-3", children: t2("settings.general.groupProject", "Project") }),
|
|
276628
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-4", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
276107
276629
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1.5", children: [
|
|
276108
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-sm font-medium leading-none", children: t2("settings.general.
|
|
276630
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-sm font-medium leading-none", children: t2("settings.general.autoWatchFiles") }),
|
|
276109
276631
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs text-muted-foreground/90", children: t2(
|
|
276110
|
-
"settings.general.
|
|
276111
|
-
"
|
|
276632
|
+
"settings.general.autoWatchFilesDesc",
|
|
276633
|
+
"Automatically watch project file changes"
|
|
276112
276634
|
) })
|
|
276113
276635
|
] }),
|
|
276114
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
276115
|
-
|
|
276116
|
-
|
|
276117
|
-
|
|
276118
|
-
|
|
276119
|
-
|
|
276120
|
-
setSound(newSound);
|
|
276121
|
-
if (newSound.muted) {
|
|
276122
|
-
L$9();
|
|
276123
|
-
} else {
|
|
276124
|
-
N$6();
|
|
276125
|
-
}
|
|
276126
|
-
try {
|
|
276127
|
-
await request.updateSettings({ sound: newSound });
|
|
276128
|
-
} catch {
|
|
276129
|
-
toast2.error(
|
|
276130
|
-
t2("settings.general.saveSoundFailed", "Failed to save sound setting.")
|
|
276131
|
-
);
|
|
276132
|
-
}
|
|
276133
|
-
}
|
|
276134
|
-
}
|
|
276135
|
-
)
|
|
276136
|
-
] }),
|
|
276636
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Switch, { checked: fileWatcher.enabled, onCheckedChange: handleFileWatcherChange })
|
|
276637
|
+
] }) })
|
|
276638
|
+
] }),
|
|
276639
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border-t border-border" }),
|
|
276640
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
276641
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-xs font-semibold text-muted-foreground/60 uppercase tracking-wider mb-3", children: t2("settings.general.groupNetwork", "Network") }),
|
|
276137
276642
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
276138
276643
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1.5", children: [
|
|
276139
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-sm font-medium leading-none", children: t2("settings.general.
|
|
276140
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs text-muted-foreground/90", children: t2(
|
|
276644
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-sm font-medium leading-none", children: t2("settings.general.proxy", "Network Proxy") }),
|
|
276645
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs text-muted-foreground/90", children: t2(
|
|
276646
|
+
"settings.general.proxyDesc",
|
|
276647
|
+
"Configure the network proxy used by Fello for Node requests, subprocesses and the UI."
|
|
276648
|
+
) })
|
|
276141
276649
|
] }),
|
|
276142
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
276143
|
-
|
|
276650
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
276651
|
+
Button,
|
|
276144
276652
|
{
|
|
276145
|
-
|
|
276146
|
-
|
|
276147
|
-
|
|
276148
|
-
|
|
276149
|
-
|
|
276150
|
-
|
|
276151
|
-
|
|
276152
|
-
|
|
276153
|
-
|
|
276154
|
-
|
|
276155
|
-
await request.updateSettings({ sound: newSound });
|
|
276156
|
-
} catch {
|
|
276157
|
-
toast2.error(
|
|
276158
|
-
t2("settings.general.saveSoundFailed", "Failed to save sound setting.")
|
|
276159
|
-
);
|
|
276160
|
-
}
|
|
276161
|
-
}
|
|
276653
|
+
type: "button",
|
|
276654
|
+
variant: "outline",
|
|
276655
|
+
size: "sm",
|
|
276656
|
+
className: "h-7 w-35 shrink-0 text-xs text-muted-foreground hover:text-foreground",
|
|
276657
|
+
onClick: () => setProxyDialogOpen(true),
|
|
276658
|
+
title: t2("settings.general.proxyEdit", "Edit proxy settings"),
|
|
276659
|
+
children: [
|
|
276660
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "min-w-0 flex-1 truncate text-left", children: proxySummary }),
|
|
276661
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "size-3 shrink-0" })
|
|
276662
|
+
]
|
|
276162
276663
|
}
|
|
276163
|
-
)
|
|
276164
|
-
] })
|
|
276165
|
-
|
|
276664
|
+
)
|
|
276665
|
+
] })
|
|
276666
|
+
] }),
|
|
276667
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border-t border-border" }),
|
|
276668
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
276669
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-xs font-semibold text-muted-foreground/60 uppercase tracking-wider mb-3", children: t2("settings.general.groupEditor", "Editor") }),
|
|
276670
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-4", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
276166
276671
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1.5", children: [
|
|
276167
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-sm font-medium leading-none", children: t2("settings.general.
|
|
276168
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs text-muted-foreground/90", children: t2("settings.general.
|
|
276672
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-sm font-medium leading-none", children: t2("settings.general.editor", "Open in Editor") }),
|
|
276673
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs text-muted-foreground/90", children: t2("settings.general.editorDesc", "Choose the editor to open files") })
|
|
276169
276674
|
] }),
|
|
276170
276675
|
(() => {
|
|
276171
|
-
const
|
|
276172
|
-
{ value: "soft", label: t2("settings.general.soundSoft", "Soft") },
|
|
276173
|
-
{ value: "crisp", label: t2("settings.general.soundCrisp", "Crisp") }
|
|
276174
|
-
];
|
|
276676
|
+
const editorItems = Object.keys(EDITOR_LABELS).sort((a2, b2) => EDITOR_LABELS[a2].localeCompare(EDITOR_LABELS[b2])).map((value) => ({ value, label: EDITOR_LABELS[value] }));
|
|
276175
276677
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
276176
276678
|
Select,
|
|
276177
276679
|
{
|
|
276178
|
-
items:
|
|
276179
|
-
value:
|
|
276680
|
+
items: editorItems,
|
|
276681
|
+
value: editor.name,
|
|
276180
276682
|
onValueChange: async (val) => {
|
|
276181
276683
|
if (!val) return;
|
|
276182
|
-
const
|
|
276183
|
-
|
|
276184
|
-
D$7(newSound.theme);
|
|
276684
|
+
const newEditor = { name: val };
|
|
276685
|
+
setEditor(newEditor);
|
|
276185
276686
|
try {
|
|
276186
|
-
await request.updateSettings({
|
|
276687
|
+
await request.updateSettings({ editor: newEditor });
|
|
276187
276688
|
} catch {
|
|
276188
276689
|
toast2.error(
|
|
276189
276690
|
t2(
|
|
276190
|
-
"settings.general.
|
|
276191
|
-
"Failed to save
|
|
276691
|
+
"settings.general.saveEditorFailed",
|
|
276692
|
+
"Failed to save editor setting."
|
|
276192
276693
|
)
|
|
276193
276694
|
);
|
|
276194
276695
|
}
|
|
276195
276696
|
},
|
|
276196
276697
|
children: [
|
|
276197
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(SelectTrigger, { size: "sm", className: "w-
|
|
276198
|
-
|
|
276698
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(SelectTrigger, { size: "sm", className: "w-44", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
276699
|
+
SelectValue,
|
|
276700
|
+
{
|
|
276701
|
+
placeholder: t2("settings.general.selectEditor", "Select editor")
|
|
276702
|
+
}
|
|
276703
|
+
) }),
|
|
276704
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(SelectContent, { children: editorItems.map((item) => /* @__PURE__ */ jsxRuntimeExports.jsx(SelectItem, { value: item.value, children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex items-center gap-2", children: item.label }) }, item.value)) })
|
|
276199
276705
|
]
|
|
276200
276706
|
}
|
|
276201
276707
|
);
|
|
276202
276708
|
})()
|
|
276203
|
-
] })
|
|
276204
|
-
|
|
276205
|
-
|
|
276206
|
-
|
|
276207
|
-
|
|
276709
|
+
] }) })
|
|
276710
|
+
] }),
|
|
276711
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border-t border-border" }),
|
|
276712
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
276713
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-xs font-semibold text-muted-foreground/60 uppercase tracking-wider mb-3", children: t2("settings.general.groupSound", "Sound") }),
|
|
276714
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-4", children: [
|
|
276715
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
276716
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1.5", children: [
|
|
276717
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-sm font-medium leading-none", children: t2("settings.general.soundEnabled", "Sound Effects") }),
|
|
276718
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs text-muted-foreground/90", children: t2(
|
|
276719
|
+
"settings.general.soundEnabledDesc",
|
|
276720
|
+
"Play sound effects for notifications"
|
|
276721
|
+
) })
|
|
276722
|
+
] }),
|
|
276723
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
276724
|
+
Switch,
|
|
276725
|
+
{
|
|
276726
|
+
checked: !sound.muted,
|
|
276727
|
+
onCheckedChange: async (checked) => {
|
|
276728
|
+
const newSound = { ...sound, muted: !checked };
|
|
276729
|
+
setSound(newSound);
|
|
276730
|
+
if (newSound.muted) {
|
|
276731
|
+
L$9();
|
|
276732
|
+
} else {
|
|
276733
|
+
N$6();
|
|
276734
|
+
}
|
|
276735
|
+
try {
|
|
276736
|
+
await request.updateSettings({ sound: newSound });
|
|
276737
|
+
} catch {
|
|
276738
|
+
toast2.error(
|
|
276739
|
+
t2("settings.general.saveSoundFailed", "Failed to save sound setting.")
|
|
276740
|
+
);
|
|
276741
|
+
}
|
|
276742
|
+
}
|
|
276743
|
+
}
|
|
276744
|
+
)
|
|
276208
276745
|
] }),
|
|
276209
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
276210
|
-
|
|
276211
|
-
|
|
276212
|
-
|
|
276213
|
-
|
|
276214
|
-
|
|
276215
|
-
|
|
276216
|
-
|
|
276217
|
-
|
|
276218
|
-
|
|
276746
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
276747
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1.5", children: [
|
|
276748
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-sm font-medium leading-none", children: t2("settings.general.soundVolume", "Volume") }),
|
|
276749
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs text-muted-foreground/90", children: t2("settings.general.soundVolumeDesc", "Adjust notification volume") })
|
|
276750
|
+
] }),
|
|
276751
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-35", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
276752
|
+
Slider,
|
|
276753
|
+
{
|
|
276754
|
+
value: [sound.volume],
|
|
276755
|
+
min: 0,
|
|
276756
|
+
max: 100,
|
|
276757
|
+
step: 1,
|
|
276758
|
+
onValueChange: async (val) => {
|
|
276759
|
+
const vol = Array.isArray(val) ? val[0] : val;
|
|
276760
|
+
const newSound = { ...sound, volume: vol };
|
|
276761
|
+
setSound(newSound);
|
|
276762
|
+
_$9(vol / 100);
|
|
276763
|
+
try {
|
|
276764
|
+
await request.updateSettings({ sound: newSound });
|
|
276765
|
+
} catch {
|
|
276766
|
+
toast2.error(
|
|
276767
|
+
t2("settings.general.saveSoundFailed", "Failed to save sound setting.")
|
|
276768
|
+
);
|
|
276769
|
+
}
|
|
276770
|
+
}
|
|
276771
|
+
}
|
|
276772
|
+
) })
|
|
276773
|
+
] }),
|
|
276774
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
276775
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1.5", children: [
|
|
276776
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-sm font-medium leading-none", children: t2("settings.general.soundTheme", "Sound Style") }),
|
|
276777
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs text-muted-foreground/90", children: t2("settings.general.soundThemeDesc", "Select the sound effect style") })
|
|
276778
|
+
] }),
|
|
276779
|
+
(() => {
|
|
276780
|
+
const themeItems = [
|
|
276781
|
+
{ value: "soft", label: t2("settings.general.soundSoft", "Soft") },
|
|
276782
|
+
{ value: "crisp", label: t2("settings.general.soundCrisp", "Crisp") }
|
|
276783
|
+
];
|
|
276784
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
276785
|
+
Select,
|
|
276786
|
+
{
|
|
276787
|
+
items: themeItems,
|
|
276788
|
+
value: sound.theme,
|
|
276789
|
+
onValueChange: async (val) => {
|
|
276790
|
+
if (!val) return;
|
|
276791
|
+
const newSound = { ...sound, theme: val };
|
|
276792
|
+
setSound(newSound);
|
|
276793
|
+
D$7(newSound.theme);
|
|
276794
|
+
try {
|
|
276795
|
+
await request.updateSettings({ sound: newSound });
|
|
276796
|
+
} catch {
|
|
276797
|
+
toast2.error(
|
|
276798
|
+
t2(
|
|
276799
|
+
"settings.general.saveSoundFailed",
|
|
276800
|
+
"Failed to save sound setting."
|
|
276801
|
+
)
|
|
276802
|
+
);
|
|
276803
|
+
}
|
|
276804
|
+
},
|
|
276805
|
+
children: [
|
|
276806
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(SelectTrigger, { size: "sm", className: "w-35", children: /* @__PURE__ */ jsxRuntimeExports.jsx(SelectValue, { placeholder: "Theme" }) }),
|
|
276807
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(SelectContent, { children: themeItems.map((item) => /* @__PURE__ */ jsxRuntimeExports.jsx(SelectItem, { value: item.value, children: item.label }, item.value)) })
|
|
276808
|
+
]
|
|
276809
|
+
}
|
|
276810
|
+
);
|
|
276811
|
+
})()
|
|
276812
|
+
] }),
|
|
276813
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
276814
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1.5", children: [
|
|
276815
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-sm font-medium leading-none", children: t2("settings.general.soundTest", "Test") }),
|
|
276816
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs text-muted-foreground/90", children: t2("settings.general.soundTestDesc", "Preview the current sound effect") })
|
|
276817
|
+
] }),
|
|
276818
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
276819
|
+
Button,
|
|
276820
|
+
{
|
|
276821
|
+
variant: "outline",
|
|
276822
|
+
size: "sm",
|
|
276823
|
+
className: "h-7 text-xs w-35 text-muted-foreground hover:text-foreground",
|
|
276824
|
+
onClick: () => w$6(),
|
|
276825
|
+
children: t2("settings.general.soundTestPlay", "Play")
|
|
276826
|
+
}
|
|
276827
|
+
)
|
|
276828
|
+
] })
|
|
276219
276829
|
] })
|
|
276220
276830
|
] })
|
|
276221
276831
|
] })
|
|
276222
|
-
] })
|
|
276223
|
-
|
|
276832
|
+
] }) }),
|
|
276833
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(SettingsProxyDialog, { open: proxyDialogOpen, onOpenChange: setProxyDialogOpen })
|
|
276834
|
+
] });
|
|
276224
276835
|
}
|
|
276225
276836
|
function useCombinedRefs() {
|
|
276226
276837
|
for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
@@ -282561,117 +283172,6 @@ function i2(i3, u4, l6) {
|
|
|
282561
283172
|
}
|
|
282562
283173
|
};
|
|
282563
283174
|
}
|
|
282564
|
-
function Label({ className, ...props }) {
|
|
282565
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
282566
|
-
"label",
|
|
282567
|
-
{
|
|
282568
|
-
"data-slot": "label",
|
|
282569
|
-
className: cn$8(
|
|
282570
|
-
"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
|
|
282571
|
-
className
|
|
282572
|
-
),
|
|
282573
|
-
...props
|
|
282574
|
-
}
|
|
282575
|
-
);
|
|
282576
|
-
}
|
|
282577
|
-
function FieldGroup({ className, ...props }) {
|
|
282578
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
282579
|
-
"div",
|
|
282580
|
-
{
|
|
282581
|
-
"data-slot": "field-group",
|
|
282582
|
-
className: cn$8(
|
|
282583
|
-
"group/field-group @container/field-group flex w-full flex-col gap-5 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4",
|
|
282584
|
-
className
|
|
282585
|
-
),
|
|
282586
|
-
...props
|
|
282587
|
-
}
|
|
282588
|
-
);
|
|
282589
|
-
}
|
|
282590
|
-
const fieldVariants = cva(
|
|
282591
|
-
"group/field flex w-full gap-2 data-[invalid=true]:text-destructive",
|
|
282592
|
-
{
|
|
282593
|
-
variants: {
|
|
282594
|
-
orientation: {
|
|
282595
|
-
vertical: "flex-col *:w-full [&>.sr-only]:w-auto",
|
|
282596
|
-
horizontal: "flex-row items-center has-[>[data-slot=field-content]]:items-start *:data-[slot=field-label]:flex-auto has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px",
|
|
282597
|
-
responsive: "flex-col *:w-full @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:*:data-[slot=field-label]:flex-auto [&>.sr-only]:w-auto @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"
|
|
282598
|
-
}
|
|
282599
|
-
},
|
|
282600
|
-
defaultVariants: {
|
|
282601
|
-
orientation: "vertical"
|
|
282602
|
-
}
|
|
282603
|
-
}
|
|
282604
|
-
);
|
|
282605
|
-
function Field({
|
|
282606
|
-
className,
|
|
282607
|
-
orientation = "vertical",
|
|
282608
|
-
...props
|
|
282609
|
-
}) {
|
|
282610
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
282611
|
-
"div",
|
|
282612
|
-
{
|
|
282613
|
-
role: "group",
|
|
282614
|
-
"data-slot": "field",
|
|
282615
|
-
"data-orientation": orientation,
|
|
282616
|
-
className: cn$8(fieldVariants({ orientation }), className),
|
|
282617
|
-
...props
|
|
282618
|
-
}
|
|
282619
|
-
);
|
|
282620
|
-
}
|
|
282621
|
-
function FieldLabel({
|
|
282622
|
-
className,
|
|
282623
|
-
...props
|
|
282624
|
-
}) {
|
|
282625
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
282626
|
-
Label,
|
|
282627
|
-
{
|
|
282628
|
-
"data-slot": "field-label",
|
|
282629
|
-
className: cn$8(
|
|
282630
|
-
"group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50 has-data-checked:border-primary/30 has-data-checked:bg-primary/5 has-[>[data-slot=field]]:rounded-lg has-[>[data-slot=field]]:border *:data-[slot=field]:p-2.5 dark:has-data-checked:border-primary/20 dark:has-data-checked:bg-primary/10",
|
|
282631
|
-
"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col",
|
|
282632
|
-
className
|
|
282633
|
-
),
|
|
282634
|
-
...props
|
|
282635
|
-
}
|
|
282636
|
-
);
|
|
282637
|
-
}
|
|
282638
|
-
function FieldError({
|
|
282639
|
-
className,
|
|
282640
|
-
children: children2,
|
|
282641
|
-
errors,
|
|
282642
|
-
...props
|
|
282643
|
-
}) {
|
|
282644
|
-
const content2 = reactExports.useMemo(() => {
|
|
282645
|
-
if (children2) {
|
|
282646
|
-
return children2;
|
|
282647
|
-
}
|
|
282648
|
-
if (!errors?.length) {
|
|
282649
|
-
return null;
|
|
282650
|
-
}
|
|
282651
|
-
const uniqueErrors = [
|
|
282652
|
-
...new Map(errors.map((error) => [error?.message, error])).values()
|
|
282653
|
-
];
|
|
282654
|
-
if (uniqueErrors?.length == 1) {
|
|
282655
|
-
return uniqueErrors[0]?.message;
|
|
282656
|
-
}
|
|
282657
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { className: "ml-4 flex list-disc flex-col gap-1", children: uniqueErrors.map(
|
|
282658
|
-
(error, index2) => error?.message && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: error.message }, index2)
|
|
282659
|
-
) });
|
|
282660
|
-
}, [children2, errors]);
|
|
282661
|
-
if (!content2) {
|
|
282662
|
-
return null;
|
|
282663
|
-
}
|
|
282664
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
282665
|
-
"div",
|
|
282666
|
-
{
|
|
282667
|
-
role: "alert",
|
|
282668
|
-
"data-slot": "field-error",
|
|
282669
|
-
className: cn$8("text-xs font-normal text-destructive -mb-4.5 -mt-1.5 min-h-4 text-[11px]", className),
|
|
282670
|
-
...props,
|
|
282671
|
-
children: content2
|
|
282672
|
-
}
|
|
282673
|
-
);
|
|
282674
|
-
}
|
|
282675
283175
|
function isValidStringMap$5(raw2) {
|
|
282676
283176
|
const trimmed = raw2.trim();
|
|
282677
283177
|
if (!trimmed) return true;
|
|
@@ -285342,6 +285842,29 @@ function SettingsMemory() {
|
|
|
285342
285842
|
);
|
|
285343
285843
|
}
|
|
285344
285844
|
};
|
|
285845
|
+
const handleDeleteEntry = async (projectId, entryId) => {
|
|
285846
|
+
const result = await confirm2({
|
|
285847
|
+
title: t2("settings.memory.confirmDeleteTitle", "Delete Memory Entry"),
|
|
285848
|
+
content: t2(
|
|
285849
|
+
"settings.memory.confirmDeleteDesc",
|
|
285850
|
+
"Are you sure you want to delete this memory entry? This cannot be undone."
|
|
285851
|
+
),
|
|
285852
|
+
buttons: [
|
|
285853
|
+
{ text: t2("message.cancel", "Cancel"), value: null, variant: "outline" },
|
|
285854
|
+
{ text: t2("settings.memory.delete", "Delete"), value: "confirm", variant: "destructive" }
|
|
285855
|
+
]
|
|
285856
|
+
});
|
|
285857
|
+
if (!result) return;
|
|
285858
|
+
try {
|
|
285859
|
+
await request.deleteMemoryEntry({ projectId, entryId });
|
|
285860
|
+
await loadMemories();
|
|
285861
|
+
toast2.success(t2("settings.memory.deleted", "Memory entry deleted."));
|
|
285862
|
+
} catch (err) {
|
|
285863
|
+
toast2.error(
|
|
285864
|
+
extractErrorMessage(err) || t2("settings.memory.deleteFailed", "Failed to delete memory entry.")
|
|
285865
|
+
);
|
|
285866
|
+
}
|
|
285867
|
+
};
|
|
285345
285868
|
const handleReveal = async (projectId) => {
|
|
285346
285869
|
try {
|
|
285347
285870
|
const filePath = await request.getMemorySystemFilePath({ projectId });
|
|
@@ -285434,33 +285957,49 @@ function SettingsMemory() {
|
|
|
285434
285957
|
")"
|
|
285435
285958
|
] })
|
|
285436
285959
|
] }),
|
|
285437
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(CollapsibleContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "divide-y divide-border border-t border-border", children: pm2.entries.map((entry
|
|
285438
|
-
|
|
285439
|
-
|
|
285440
|
-
|
|
285441
|
-
|
|
285442
|
-
|
|
285443
|
-
|
|
285444
|
-
"+",
|
|
285445
|
-
entry.weight
|
|
285446
|
-
] })
|
|
285447
|
-
}
|
|
285448
|
-
),
|
|
285449
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
285450
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-foreground/80", children: entry.text }),
|
|
285451
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex mt-2 items-center", children: [
|
|
285452
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "shrink-0 flex gap-1 flex-1", children: entry.tags.map((tag) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
285453
|
-
"span",
|
|
285960
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(CollapsibleContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "divide-y divide-border border-t border-border", children: pm2.entries.map((entry) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
285961
|
+
"div",
|
|
285962
|
+
{
|
|
285963
|
+
className: "group flex items-start gap-3 px-4 py-2 text-xs",
|
|
285964
|
+
children: [
|
|
285965
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
285966
|
+
"div",
|
|
285454
285967
|
{
|
|
285455
|
-
className:
|
|
285456
|
-
|
|
285457
|
-
|
|
285458
|
-
|
|
285459
|
-
|
|
285460
|
-
|
|
285461
|
-
|
|
285462
|
-
|
|
285463
|
-
|
|
285968
|
+
className: `w-4 text-center shrink-0 font-mono font-medium ${weightColor(entry.weight)}`,
|
|
285969
|
+
"aria-label": weightLabel(entry.weight),
|
|
285970
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { children: [
|
|
285971
|
+
"+",
|
|
285972
|
+
entry.weight
|
|
285973
|
+
] })
|
|
285974
|
+
}
|
|
285975
|
+
),
|
|
285976
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
285977
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-foreground/80", children: entry.text }),
|
|
285978
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex mt-2 items-center gap-3", children: [
|
|
285979
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "shrink-0 flex gap-1 flex-1", children: entry.tags.map((tag) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
285980
|
+
"span",
|
|
285981
|
+
{
|
|
285982
|
+
className: "px-1.5 py-0.5 rounded bg-muted text-[10px] text-muted-foreground",
|
|
285983
|
+
children: tag
|
|
285984
|
+
},
|
|
285985
|
+
tag
|
|
285986
|
+
)) }),
|
|
285987
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
285988
|
+
"button",
|
|
285989
|
+
{
|
|
285990
|
+
type: "button",
|
|
285991
|
+
className: "shrink-0 text-[10px] text-destructive/70 hover:text-destructive opacity-0 group-hover:opacity-100 transition-opacity focus-visible:opacity-100",
|
|
285992
|
+
onClick: () => handleDeleteEntry(pm2.projectId, entry.id),
|
|
285993
|
+
children: t2("settings.memory.delete", "Delete")
|
|
285994
|
+
}
|
|
285995
|
+
),
|
|
285996
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "shrink-0 text-muted-foreground/80 text-[10px]", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: entry.date }) })
|
|
285997
|
+
] })
|
|
285998
|
+
] })
|
|
285999
|
+
]
|
|
286000
|
+
},
|
|
286001
|
+
entry.id
|
|
286002
|
+
)) }) })
|
|
285464
286003
|
] }) })
|
|
285465
286004
|
] }, pm2.projectId))
|
|
285466
286005
|
] }) }) })
|
|
@@ -288533,7 +289072,7 @@ function AppRouter() {
|
|
|
288533
289072
|
"div",
|
|
288534
289073
|
{
|
|
288535
289074
|
className: cn$8(
|
|
288536
|
-
"flex h-12 w-12
|
|
289075
|
+
"flex h-12 w-12 absolute z-10 top-0 items-center justify-center transition-[left] duration-200",
|
|
288537
289076
|
sidebarOpen ? "left-49" : showMacTrafficLightSpace ? "left-16" : "left-0"
|
|
288538
289077
|
),
|
|
288539
289078
|
style: { WebkitAppRegion: "no-drag" },
|
|
@@ -288567,6 +289106,7 @@ function AppContent() {
|
|
|
288567
289106
|
setEditor,
|
|
288568
289107
|
setSnippets,
|
|
288569
289108
|
setImageGeneration,
|
|
289109
|
+
setProxy,
|
|
288570
289110
|
isMacApp,
|
|
288571
289111
|
setIsFullScreen,
|
|
288572
289112
|
setIlinkStatus,
|
|
@@ -288615,6 +289155,7 @@ function AppContent() {
|
|
|
288615
289155
|
setI18n2(settings2.i18n);
|
|
288616
289156
|
i18n.changeLanguage(settings2.i18n.language);
|
|
288617
289157
|
}
|
|
289158
|
+
if (settings2.proxy) setProxy(settings2.proxy);
|
|
288618
289159
|
if (settings2.editor) setEditor(settings2.editor);
|
|
288619
289160
|
if (settings2.snippets) setSnippets(settings2.snippets);
|
|
288620
289161
|
if (settings2.imageGeneration) setImageGeneration(settings2.imageGeneration);
|
|
@@ -288650,6 +289191,7 @@ function AppContent() {
|
|
|
288650
289191
|
setEditor,
|
|
288651
289192
|
setSnippets,
|
|
288652
289193
|
setImageGeneration,
|
|
289194
|
+
setProxy,
|
|
288653
289195
|
setIlinkStatus,
|
|
288654
289196
|
setActiveIlinkSessionId
|
|
288655
289197
|
]);
|
|
@@ -288821,7 +289363,12 @@ function AppContent() {
|
|
|
288821
289363
|
if (event.manual) {
|
|
288822
289364
|
toast2.loading(t2("updater.checking", "Checking for updates..."), {
|
|
288823
289365
|
id: UPDATE_TOAST_ID,
|
|
288824
|
-
duration: Infinity
|
|
289366
|
+
duration: Infinity,
|
|
289367
|
+
action: void 0,
|
|
289368
|
+
cancel: {
|
|
289369
|
+
label: t2("updater.later", "Later"),
|
|
289370
|
+
onClick: () => toast2.dismiss(UPDATE_TOAST_ID)
|
|
289371
|
+
}
|
|
288825
289372
|
});
|
|
288826
289373
|
}
|
|
288827
289374
|
break;
|
|
@@ -288855,7 +289402,9 @@ function AppContent() {
|
|
|
288855
289402
|
if (event.manual) {
|
|
288856
289403
|
toast2.success(t2("updater.upToDate", "Fello is up to date."), {
|
|
288857
289404
|
id: UPDATE_TOAST_ID,
|
|
288858
|
-
duration: 3e3
|
|
289405
|
+
duration: 3e3,
|
|
289406
|
+
action: void 0,
|
|
289407
|
+
cancel: void 0
|
|
288859
289408
|
});
|
|
288860
289409
|
}
|
|
288861
289410
|
break;
|
|
@@ -288866,7 +289415,9 @@ function AppContent() {
|
|
|
288866
289415
|
}),
|
|
288867
289416
|
{
|
|
288868
289417
|
id: UPDATE_TOAST_ID,
|
|
288869
|
-
duration: Infinity
|
|
289418
|
+
duration: Infinity,
|
|
289419
|
+
action: void 0,
|
|
289420
|
+
cancel: void 0
|
|
288870
289421
|
}
|
|
288871
289422
|
);
|
|
288872
289423
|
break;
|
|
@@ -288898,7 +289449,9 @@ function AppContent() {
|
|
|
288898
289449
|
if (event.manual) {
|
|
288899
289450
|
toast2.info(t2("updater.disabled", "Updates are available only in packaged builds."), {
|
|
288900
289451
|
id: UPDATE_TOAST_ID,
|
|
288901
|
-
duration: 4e3
|
|
289452
|
+
duration: 4e3,
|
|
289453
|
+
action: void 0,
|
|
289454
|
+
cancel: void 0
|
|
288902
289455
|
});
|
|
288903
289456
|
}
|
|
288904
289457
|
break;
|
|
@@ -288906,7 +289459,9 @@ function AppContent() {
|
|
|
288906
289459
|
if (event.manual) {
|
|
288907
289460
|
toast2.error(event.message, {
|
|
288908
289461
|
id: UPDATE_TOAST_ID,
|
|
288909
|
-
duration: 5e3
|
|
289462
|
+
duration: 5e3,
|
|
289463
|
+
action: void 0,
|
|
289464
|
+
cancel: void 0
|
|
288910
289465
|
});
|
|
288911
289466
|
}
|
|
288912
289467
|
break;
|