@futdevpro/ccap 1.1.2403 → 1.1.2411
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/client-dist/{agent-instances.module-A2ZUQC4D.js → agent-instances.module-X4WGT34K.js} +2 -2
- package/client-dist/{ca.module-LCOTOYZS.js → ca.module-XSJ7BLYW.js} +2 -2
- package/client-dist/cc.module-BNVNHGFY.js +4 -0
- package/client-dist/cc.module-BNVNHGFY.js.map +7 -0
- package/client-dist/{chunk-D2JXXPA3.js → chunk-26ZVYTEO.js} +2 -2
- package/client-dist/{chunk-GCBCHT45.js → chunk-3CIISQAU.js} +2 -2
- package/client-dist/{chunk-VC2WZEJW.js → chunk-3MTK72EJ.js} +2 -2
- package/client-dist/{chunk-ZPPMC73W.js → chunk-3PAAZAV3.js} +2 -2
- package/client-dist/{chunk-EJK7DYOT.js → chunk-3Q542Z45.js} +2 -2
- package/client-dist/{chunk-QR3HYUNS.js → chunk-5O4QDCHT.js} +2 -2
- package/client-dist/{chunk-HGKIQDDN.js → chunk-5TWAO654.js} +2 -2
- package/client-dist/{chunk-MJHVFZNJ.js → chunk-6A5S3RMM.js} +2 -2
- package/client-dist/{chunk-NBYYHCJY.js → chunk-6OF2NGQO.js} +2 -2
- package/client-dist/{chunk-BE63JRDK.js → chunk-7KN6UEW5.js} +2 -2
- package/client-dist/{chunk-7SKYHNYQ.js → chunk-AKBUQRXG.js} +2 -2
- package/client-dist/{chunk-CXJU7YRU.js → chunk-AT63C2RH.js} +2 -2
- package/client-dist/{chunk-6BO4RGTF.js → chunk-AVIF2IP3.js} +2 -2
- package/client-dist/{chunk-XG3ULHDY.js → chunk-AX76VMRT.js} +2 -2
- package/client-dist/{chunk-6TQLCMPS.js → chunk-AXPUK5TF.js} +2 -2
- package/client-dist/{chunk-ISY352NI.js → chunk-BJW2WCQT.js} +2 -2
- package/client-dist/{chunk-6EYSPF43.js → chunk-C7XPBJTG.js} +2 -2
- package/client-dist/{chunk-6EYSPF43.js.map → chunk-C7XPBJTG.js.map} +2 -2
- package/client-dist/{chunk-ZTG2B752.js → chunk-CVKT3VCR.js} +2 -2
- package/client-dist/{chunk-4FPJBDX3.js → chunk-DVUUFWKQ.js} +2 -2
- package/client-dist/{chunk-FX7QVSB2.js → chunk-FK7N3Z5S.js} +2 -2
- package/client-dist/{chunk-BWHF5I73.js → chunk-FTKYKFDR.js} +2 -2
- package/client-dist/{chunk-4IU43FSF.js → chunk-FZFLGRLE.js} +2 -2
- package/client-dist/{chunk-VRJJFYHZ.js → chunk-G6IHLHJ7.js} +2 -2
- package/client-dist/{chunk-L3PDYXCS.js → chunk-GJGBEN73.js} +2 -2
- package/client-dist/{chunk-TDTESSW2.js → chunk-GYCYFHVK.js} +2 -2
- package/client-dist/{chunk-3LJYOX46.js → chunk-HHY62NRY.js} +2 -2
- package/client-dist/{chunk-KMZABECD.js → chunk-HSWFTS47.js} +2 -2
- package/client-dist/{chunk-UPWIIVQ6.js → chunk-JCPOMMVH.js} +2 -2
- package/client-dist/{chunk-XPUEDVEA.js → chunk-JPRPSYHF.js} +2 -2
- package/client-dist/{chunk-ULHGCRZF.js → chunk-KANJT65V.js} +2 -2
- package/client-dist/{chunk-Q2LOKNTG.js → chunk-KT3BYRL3.js} +2 -2
- package/client-dist/{chunk-LYNJHJHR.js → chunk-L4PEP75V.js} +2 -2
- package/client-dist/{chunk-VUPHBESM.js → chunk-LII3XCUF.js} +2 -2
- package/client-dist/{chunk-URM2RHFX.js → chunk-MYZVTRJZ.js} +2 -2
- package/client-dist/{chunk-LWUPRATP.js → chunk-O3N3XIMG.js} +2 -2
- package/client-dist/{chunk-4OROAMCK.js → chunk-OG3VMUNV.js} +2 -2
- package/client-dist/chunk-P2FJ6ZAJ.js +3 -0
- package/client-dist/{chunk-2WIMZNS4.js.map → chunk-P2FJ6ZAJ.js.map} +4 -4
- package/client-dist/{chunk-R5JJ4NXA.js → chunk-PN3KA4H6.js} +2 -2
- package/client-dist/{chunk-T3QPQMWE.js → chunk-QTFJL2CG.js} +2 -2
- package/client-dist/{chunk-T6DWWQQO.js → chunk-RS24N3BW.js} +2 -2
- package/client-dist/{chunk-3J24BPVB.js → chunk-S37DYZ4D.js} +2 -2
- package/client-dist/{chunk-KAS4KL5H.js → chunk-S6WQL46S.js} +2 -2
- package/client-dist/{chunk-LXLZTYDV.js → chunk-SBCMX4K4.js} +2 -2
- package/client-dist/{chunk-GLADIICK.js → chunk-TGIQ5T5X.js} +2 -2
- package/client-dist/{chunk-GLADIICK.js.map → chunk-TGIQ5T5X.js.map} +1 -1
- package/client-dist/{chunk-VJR3HZ3G.js → chunk-TOHUYDQN.js} +2 -2
- package/client-dist/{chunk-MISCMKZP.js → chunk-U57ABGMI.js} +2 -2
- package/client-dist/{chunk-ICJ34KOC.js → chunk-UWTY5YHV.js} +2 -2
- package/client-dist/{chunk-BS6NS62C.js → chunk-UZBRDH6C.js} +2 -2
- package/client-dist/{chunk-HDQB2FFA.js → chunk-V3APWHIK.js} +2 -2
- package/client-dist/{chunk-6PT2MZ74.js → chunk-VKRB7RPF.js} +2 -2
- package/client-dist/{chunk-USSOB2ST.js → chunk-VNNRNIBP.js} +2 -2
- package/client-dist/{chunk-2XTCHCAU.js → chunk-WF5REVE2.js} +2 -2
- package/client-dist/{chunk-WWBFRXUC.js → chunk-XH5VH5JJ.js} +2 -2
- package/client-dist/{chunk-7GGP7THR.js → chunk-XIP3DG7D.js} +2 -2
- package/client-dist/{chunk-4QMG7L3K.js → chunk-XMEY5EOS.js} +22 -22
- package/client-dist/{chunk-4QMG7L3K.js.map → chunk-XMEY5EOS.js.map} +1 -1
- package/client-dist/{chunk-2ANUGZLV.js → chunk-YE2TCO62.js} +2 -2
- package/client-dist/{chunk-N6HZQAGL.js → chunk-ZSUUXOY6.js} +2 -2
- package/client-dist/{consultant.module-QZ2ZSGVT.js → consultant.module-6CHZ2SU6.js} +2 -2
- package/client-dist/{crd.module-QXWKVYQA.js → crd.module-3V4KQOUO.js} +2 -2
- package/client-dist/{dashboard.module-VMO6DNGU.js → dashboard.module-JCQYOTIA.js} +2 -2
- package/client-dist/{do.module-MEKI67XV.js → do.module-SAW7Q2GH.js} +2 -2
- package/client-dist/{document-library.module-WTVKD4YU.js → document-library.module-633NSZOY.js} +2 -2
- package/client-dist/{embedding-eval.module-PLYAYGF2.js → embedding-eval.module-BRZFA5S7.js} +2 -2
- package/client-dist/{embedding-registry.module-4HXKVG27.js → embedding-registry.module-MFJM25SW.js} +2 -2
- package/client-dist/{err.module-3JS2XT7W.js → err.module-5XCTDXB3.js} +2 -2
- package/client-dist/{feedback.module-SFHES7MB.js → feedback.module-AFUAWZ3J.js} +2 -2
- package/client-dist/{host-runtime-mcp.module-SDW7ZVPN.js → host-runtime-mcp.module-EIOWQEYV.js} +2 -2
- package/client-dist/index.html +2 -2
- package/client-dist/{live-dev-pipeline.module-PZKHWCO7.js → live-dev-pipeline.module-YOLDXWCL.js} +2 -2
- package/client-dist/{logs.module-SGSLBVCW.js → logs.module-NC5RPLNT.js} +2 -2
- package/client-dist/{main-LU2I2R35.js → main-FKDZMHCD.js} +3 -3
- package/client-dist/{master-control-remote-poc.module-6VPAKQUQ.js → master-control-remote-poc.module-UOKVH2YM.js} +2 -2
- package/client-dist/{mobile-app.module-EREJO2WC.js → mobile-app.module-LLFEBFGK.js} +2 -2
- package/client-dist/{model-registry.module-7IGKIWLN.js → model-registry.module-WACRX4PQ.js} +2 -2
- package/client-dist/{oc.module-CT4XLVCX.js → oc.module-4JYGDCAF.js} +2 -2
- package/client-dist/{orc.module-WJBCFXB3.js → orc.module-XEK6LG3C.js} +2 -2
- package/client-dist/{project-management.module-UDRPUGVK.js → project-management.module-4DMDWYLX.js} +2 -2
- package/client-dist/project-source-routed.module-75LP5YYX.js +2 -0
- package/client-dist/{scheduler.module-LIOP3COI.js → scheduler.module-3BGSX7YH.js} +2 -2
- package/client-dist/session.module-7WUX4ZDX.js +12 -0
- package/client-dist/session.module-7WUX4ZDX.js.map +7 -0
- package/client-dist/{set.module-QYL53JEQ.js → set.module-VWNHXENW.js} +2 -2
- package/client-dist/{setup.module-TGTJ6IZV.js → setup.module-XBBSFHNL.js} +2 -2
- package/client-dist/styles-IPQY7PNR.css +2 -0
- package/client-dist/styles-IPQY7PNR.css.map +7 -0
- package/client-dist/{terminals.module-CKXLHM76.js → terminals.module-YV2CDNLU.js} +2 -2
- package/client-dist/{voice-notes-poc.module-L4XPDMU3.js → voice-notes-poc.module-SZHQ55R6.js} +2 -2
- package/client-dist/{wfs.module-DGP3CKHF.js → wfs.module-Q4HXNWZW.js} +2 -2
- package/package.json +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-adapter.control-service.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-adapter.control-service.js +8 -17
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-adapter.control-service.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-output.control-service.d.ts +4 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-output.control-service.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-output.control-service.js +17 -3
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-output.control-service.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.d.ts +20 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.js +44 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.spec.d.ts +8 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.spec.d.ts.map +1 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.spec.js +45 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.spec.js.map +1 -0
- package/client-dist/cc.module-JNBWNLXT.js +0 -4
- package/client-dist/cc.module-JNBWNLXT.js.map +0 -7
- package/client-dist/chunk-2WIMZNS4.js +0 -2
- package/client-dist/project-source-routed.module-MPNN6Y7L.js +0 -2
- package/client-dist/session.module-IOUXNQQL.js +0 -13
- package/client-dist/session.module-IOUXNQQL.js.map +0 -7
- package/client-dist/styles-GRAX54DU.css +0 -2
- package/client-dist/styles-GRAX54DU.css.map +0 -7
- /package/client-dist/{agent-instances.module-A2ZUQC4D.js.map → agent-instances.module-X4WGT34K.js.map} +0 -0
- /package/client-dist/{ca.module-LCOTOYZS.js.map → ca.module-XSJ7BLYW.js.map} +0 -0
- /package/client-dist/{chunk-D2JXXPA3.js.map → chunk-26ZVYTEO.js.map} +0 -0
- /package/client-dist/{chunk-GCBCHT45.js.map → chunk-3CIISQAU.js.map} +0 -0
- /package/client-dist/{chunk-VC2WZEJW.js.map → chunk-3MTK72EJ.js.map} +0 -0
- /package/client-dist/{chunk-ZPPMC73W.js.map → chunk-3PAAZAV3.js.map} +0 -0
- /package/client-dist/{chunk-EJK7DYOT.js.map → chunk-3Q542Z45.js.map} +0 -0
- /package/client-dist/{chunk-QR3HYUNS.js.map → chunk-5O4QDCHT.js.map} +0 -0
- /package/client-dist/{chunk-HGKIQDDN.js.map → chunk-5TWAO654.js.map} +0 -0
- /package/client-dist/{chunk-MJHVFZNJ.js.map → chunk-6A5S3RMM.js.map} +0 -0
- /package/client-dist/{chunk-NBYYHCJY.js.map → chunk-6OF2NGQO.js.map} +0 -0
- /package/client-dist/{chunk-BE63JRDK.js.map → chunk-7KN6UEW5.js.map} +0 -0
- /package/client-dist/{chunk-7SKYHNYQ.js.map → chunk-AKBUQRXG.js.map} +0 -0
- /package/client-dist/{chunk-CXJU7YRU.js.map → chunk-AT63C2RH.js.map} +0 -0
- /package/client-dist/{chunk-6BO4RGTF.js.map → chunk-AVIF2IP3.js.map} +0 -0
- /package/client-dist/{chunk-XG3ULHDY.js.map → chunk-AX76VMRT.js.map} +0 -0
- /package/client-dist/{chunk-6TQLCMPS.js.map → chunk-AXPUK5TF.js.map} +0 -0
- /package/client-dist/{chunk-ISY352NI.js.map → chunk-BJW2WCQT.js.map} +0 -0
- /package/client-dist/{chunk-ZTG2B752.js.map → chunk-CVKT3VCR.js.map} +0 -0
- /package/client-dist/{chunk-4FPJBDX3.js.map → chunk-DVUUFWKQ.js.map} +0 -0
- /package/client-dist/{chunk-FX7QVSB2.js.map → chunk-FK7N3Z5S.js.map} +0 -0
- /package/client-dist/{chunk-BWHF5I73.js.map → chunk-FTKYKFDR.js.map} +0 -0
- /package/client-dist/{chunk-4IU43FSF.js.map → chunk-FZFLGRLE.js.map} +0 -0
- /package/client-dist/{chunk-VRJJFYHZ.js.map → chunk-G6IHLHJ7.js.map} +0 -0
- /package/client-dist/{chunk-L3PDYXCS.js.map → chunk-GJGBEN73.js.map} +0 -0
- /package/client-dist/{chunk-TDTESSW2.js.map → chunk-GYCYFHVK.js.map} +0 -0
- /package/client-dist/{chunk-3LJYOX46.js.map → chunk-HHY62NRY.js.map} +0 -0
- /package/client-dist/{chunk-KMZABECD.js.map → chunk-HSWFTS47.js.map} +0 -0
- /package/client-dist/{chunk-UPWIIVQ6.js.map → chunk-JCPOMMVH.js.map} +0 -0
- /package/client-dist/{chunk-XPUEDVEA.js.map → chunk-JPRPSYHF.js.map} +0 -0
- /package/client-dist/{chunk-ULHGCRZF.js.map → chunk-KANJT65V.js.map} +0 -0
- /package/client-dist/{chunk-Q2LOKNTG.js.map → chunk-KT3BYRL3.js.map} +0 -0
- /package/client-dist/{chunk-LYNJHJHR.js.map → chunk-L4PEP75V.js.map} +0 -0
- /package/client-dist/{chunk-VUPHBESM.js.map → chunk-LII3XCUF.js.map} +0 -0
- /package/client-dist/{chunk-URM2RHFX.js.map → chunk-MYZVTRJZ.js.map} +0 -0
- /package/client-dist/{chunk-LWUPRATP.js.map → chunk-O3N3XIMG.js.map} +0 -0
- /package/client-dist/{chunk-4OROAMCK.js.map → chunk-OG3VMUNV.js.map} +0 -0
- /package/client-dist/{chunk-R5JJ4NXA.js.map → chunk-PN3KA4H6.js.map} +0 -0
- /package/client-dist/{chunk-T3QPQMWE.js.map → chunk-QTFJL2CG.js.map} +0 -0
- /package/client-dist/{chunk-T6DWWQQO.js.map → chunk-RS24N3BW.js.map} +0 -0
- /package/client-dist/{chunk-3J24BPVB.js.map → chunk-S37DYZ4D.js.map} +0 -0
- /package/client-dist/{chunk-KAS4KL5H.js.map → chunk-S6WQL46S.js.map} +0 -0
- /package/client-dist/{chunk-LXLZTYDV.js.map → chunk-SBCMX4K4.js.map} +0 -0
- /package/client-dist/{chunk-VJR3HZ3G.js.map → chunk-TOHUYDQN.js.map} +0 -0
- /package/client-dist/{chunk-MISCMKZP.js.map → chunk-U57ABGMI.js.map} +0 -0
- /package/client-dist/{chunk-ICJ34KOC.js.map → chunk-UWTY5YHV.js.map} +0 -0
- /package/client-dist/{chunk-BS6NS62C.js.map → chunk-UZBRDH6C.js.map} +0 -0
- /package/client-dist/{chunk-HDQB2FFA.js.map → chunk-V3APWHIK.js.map} +0 -0
- /package/client-dist/{chunk-6PT2MZ74.js.map → chunk-VKRB7RPF.js.map} +0 -0
- /package/client-dist/{chunk-USSOB2ST.js.map → chunk-VNNRNIBP.js.map} +0 -0
- /package/client-dist/{chunk-2XTCHCAU.js.map → chunk-WF5REVE2.js.map} +0 -0
- /package/client-dist/{chunk-WWBFRXUC.js.map → chunk-XH5VH5JJ.js.map} +0 -0
- /package/client-dist/{chunk-7GGP7THR.js.map → chunk-XIP3DG7D.js.map} +0 -0
- /package/client-dist/{chunk-2ANUGZLV.js.map → chunk-YE2TCO62.js.map} +0 -0
- /package/client-dist/{chunk-N6HZQAGL.js.map → chunk-ZSUUXOY6.js.map} +0 -0
- /package/client-dist/{consultant.module-QZ2ZSGVT.js.map → consultant.module-6CHZ2SU6.js.map} +0 -0
- /package/client-dist/{crd.module-QXWKVYQA.js.map → crd.module-3V4KQOUO.js.map} +0 -0
- /package/client-dist/{dashboard.module-VMO6DNGU.js.map → dashboard.module-JCQYOTIA.js.map} +0 -0
- /package/client-dist/{do.module-MEKI67XV.js.map → do.module-SAW7Q2GH.js.map} +0 -0
- /package/client-dist/{document-library.module-WTVKD4YU.js.map → document-library.module-633NSZOY.js.map} +0 -0
- /package/client-dist/{embedding-eval.module-PLYAYGF2.js.map → embedding-eval.module-BRZFA5S7.js.map} +0 -0
- /package/client-dist/{embedding-registry.module-4HXKVG27.js.map → embedding-registry.module-MFJM25SW.js.map} +0 -0
- /package/client-dist/{err.module-3JS2XT7W.js.map → err.module-5XCTDXB3.js.map} +0 -0
- /package/client-dist/{feedback.module-SFHES7MB.js.map → feedback.module-AFUAWZ3J.js.map} +0 -0
- /package/client-dist/{host-runtime-mcp.module-SDW7ZVPN.js.map → host-runtime-mcp.module-EIOWQEYV.js.map} +0 -0
- /package/client-dist/{live-dev-pipeline.module-PZKHWCO7.js.map → live-dev-pipeline.module-YOLDXWCL.js.map} +0 -0
- /package/client-dist/{logs.module-SGSLBVCW.js.map → logs.module-NC5RPLNT.js.map} +0 -0
- /package/client-dist/{main-LU2I2R35.js.map → main-FKDZMHCD.js.map} +0 -0
- /package/client-dist/{master-control-remote-poc.module-6VPAKQUQ.js.map → master-control-remote-poc.module-UOKVH2YM.js.map} +0 -0
- /package/client-dist/{mobile-app.module-EREJO2WC.js.map → mobile-app.module-LLFEBFGK.js.map} +0 -0
- /package/client-dist/{model-registry.module-7IGKIWLN.js.map → model-registry.module-WACRX4PQ.js.map} +0 -0
- /package/client-dist/{oc.module-CT4XLVCX.js.map → oc.module-4JYGDCAF.js.map} +0 -0
- /package/client-dist/{orc.module-WJBCFXB3.js.map → orc.module-XEK6LG3C.js.map} +0 -0
- /package/client-dist/{project-management.module-UDRPUGVK.js.map → project-management.module-4DMDWYLX.js.map} +0 -0
- /package/client-dist/{project-source-routed.module-MPNN6Y7L.js.map → project-source-routed.module-75LP5YYX.js.map} +0 -0
- /package/client-dist/{scheduler.module-LIOP3COI.js.map → scheduler.module-3BGSX7YH.js.map} +0 -0
- /package/client-dist/{set.module-QYL53JEQ.js.map → set.module-VWNHXENW.js.map} +0 -0
- /package/client-dist/{setup.module-TGTJ6IZV.js.map → setup.module-XBBSFHNL.js.map} +0 -0
- /package/client-dist/{terminals.module-CKXLHM76.js.map → terminals.module-YV2CDNLU.js.map} +0 -0
- /package/client-dist/{voice-notes-poc.module-L4XPDMU3.js.map → voice-notes-poc.module-SZHQ55R6.js.map} +0 -0
- /package/client-dist/{wfs.module-DGP3CKHF.js.map → wfs.module-Q4HXNWZW.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["src/app/_modules/shared/_components/session-ui/s-session-shell-toolbar/s-session-shell-toolbar.component.ts", "src/app/_modules/shared/_components/session-ui/s-session-shell-toolbar/s-session-shell-toolbar.component.html", "src/app/_modules/shared/_components/session-ui/s-resizable-session-shell-layout/s-resizable-session-shell-layout.component.ts", "src/app/_modules/shared/_components/session-ui/s-resizable-session-shell-layout/s-resizable-session-shell-layout.component.html", "src/app/_modules/shared/_components/session-ui/s-session-input/s-session-input.component.ts", "src/app/_modules/shared/_components/session-ui/s-session-input/s-session-input.component.html"],
|
|
4
|
-
"sourcesContent": ["import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n/**\n * Session shell felső toolbar: 1fr | auto | 1fr grid, három ng-content slot.\n * Domain-logika nélkül — csak elrendezés.\n */\n@Component({\n selector: 'app-s-session-shell-toolbar',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './s-session-shell-toolbar.component.html',\n host: { class: 'block shrink-0 w-full min-w-0' },\n})\n/** S_SessionShellToolbar_Component class. */\nexport class S_SessionShellToolbar_Component {}\n", "<div\n class=\"grid grid-cols-[1fr_auto_1fr] items-center gap-x-1 gap-y-1 p-1 border-b border-neonDefault bg-ccapSurface w-full min-w-0\">\n <div class=\"flex items-center gap-1 min-w-0 justify-self-start\">\n <ng-content select=\"[sSessionToolbarLeft]\"></ng-content>\n </div>\n <div\n class=\"flex items-center justify-center gap-2 min-w-0 max-w-[min(100vw-12rem,42rem)] justify-self-center\">\n <ng-content select=\"[sSessionToolbarCenter]\"></ng-content>\n </div>\n <div class=\"flex items-center gap-1 min-w-0 justify-self-end flex-wrap justify-end\">\n <ng-content select=\"[sSessionToolbarRight]\"></ng-content>\n </div>\n</div>\n", "import { Component, input, output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n/**\n * Shell: opcionális bal sidebar fix px szélességgel + resize handle + fő tartalom + opcionális jobb panel.\n * A szélesség mentés és a drag matematika a szülőn marad — itt csak a handle esemény.\n * Opcionális mobil backdrop: sidebar nyitott állapotban xs nézetben overlay-t mutat.\n */\n@Component({\n selector: 'app-s-resizable-session-shell-layout',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './s-resizable-session-shell-layout.component.html',\n host: { class: 'block flex flex-1 min-h-0 w-full overflow-hidden' },\n})\n/** S_ResizableSessionShellLayout_Component class. */\nexport class S_ResizableSessionShellLayout_Component {\n\n /** Sidebar látható. */\n readonly isSidebarOpen = input<boolean>(true);\n\n /** Sidebar szélesség (px). */\n readonly sidebarWidthPx = input<number>(320);\n\n /** Resize aktív — host select-none-hoz. */\n readonly isResizing = input<boolean>(false);\n\n /** Sidebar resize kezdő esemény (pointerdown a handle-n). */\n readonly sidebarResizeStart = output<PointerEvent>();\n\n /**\n * Mobil backdrop aktív — ha true, xs nézetben fix overlay-t renderel a sidebar mögött.\n * A szülő feladata eldönteni, mikor aktív (általában: sidebar nyitott állapotban).\n * CSS-en keresztül (xs:block gt-xs:hidden) csak mobilon jelenik meg.\n */\n readonly isMobileBackdropActive = input<boolean>(false);\n\n /** Mobil backdrop kattintás esemény — a szülő kezeli (általában: sidebar bezárás). */\n readonly mobileBackdropClicked = output<void>();\n}\n", "@if (isMobileBackdropActive()) {\n <div class=\"fixed inset-0 z-30 bg-black/50 xs:block gt-xs:hidden\"\n (click)=\"mobileBackdropClicked.emit()\"\n aria-hidden=\"true\"></div>\n}\n@if (isSidebarOpen()) {\n <div\n class=\"border-r border-neonDefault bg-ccapSurface flex flex-col min-h-0 overflow-hidden shrink-0 self-stretch\"\n [style.width.px]=\"sidebarWidthPx()\">\n <ng-content select=\"[sSessionShellSidebar]\"></ng-content>\n </div>\n <div\n class=\"w-1 shrink-0 cursor-col-resize hover:bg-ccapAccent/40 active:bg-ccapAccent/60 transition-colors touch-none\"\n (pointerdown)=\"sidebarResizeStart.emit($event)\">\n </div>\n}\n<div class=\"flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden bg-ccapBg self-stretch\">\n <ng-content select=\"[sSessionShellMain]\"></ng-content>\n</div>\n<ng-content select=\"[sSessionShellRightPanel]\"></ng-content>\n", "import { Component, input, output, signal, OnDestroy, ViewChild, ElementRef, Renderer2, HostBinding, effect } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport {\n CCAP_PendingAttachment_Interface,\n} from '../../../../../_models/interfaces/session/ccap-pending-attachment.interface';\nimport {\n SQ_SnapshotItem_Interface,\n} from '../../../../../_models/interfaces/session-queue/ccap-session-queue-snapshot.interface';\n\n/** Engedélyezett image MIME típusok (preview-hoz). */\nconst IMAGE_MIME_PREFIXES: string[] = ['image/png', 'image/jpeg', 'image/webp', 'image/gif'];\n\n/** Panel minimális magassága px-ben (resize alsó limit). */\nconst PANEL_MIN_HEIGHT: number = 120;\n\n/** Textarea auto-grow maximális magassága viewport arányában. */\nconst TEXTAREA_AUTO_MAX_VH: number = 0.4;\n\n/**\n * Közös session input komponens — textarea, send/stop, config dropdownok, fájl csatolás.\n * Feature flag input-okkal konfigurálható: ami üres / false, az nem jelenik meg.\n *\n * Content projection:\n * - `[sInputTextareaAccessory]` — absolute overlay a textarea-ra (pl. voice gomb)\n */\n@Component({\n selector: 'app-s-session-input',\n standalone: true,\n imports: [CommonModule, FormsModule],\n templateUrl: './s-session-input.component.html',\n styleUrls: ['./s-session-input.component.scss'],\n host: { class: 'flex flex-col shrink-0 border-t border-neonDefault bg-ccapSurface relative overflow-hidden' },\n})\n/** S_SessionInput_Component class. */\nexport class S_SessionInput_Component implements OnDestroy {\n\n // ── Szöveg ───────────────────────────────────────────────────────────\n\n /** Piszkozat szöveg (two-way a szülővel). */\n readonly draftText = input<string>('');\n\n /** Placeholder. */\n readonly placeholder = input<string>('Send a prompt…');\n\n /** Textarea sorok. */\n readonly textareaRows = input<number>(3);\n\n /** Piszkozat változás. */\n readonly draftTextChange = output<string>();\n\n // ── Állapot ──────────────────────────────────────────────────────────\n\n /** Agent dolgozik — ilyenkor Stop gomb jelenik meg Send helyett. */\n readonly isExecuting = input<boolean>(false);\n\n /** Küldés folyamatban. */\n readonly isSending = input<boolean>(false);\n\n /** Stop folyamatban. */\n readonly isStopping = input<boolean>(false);\n\n // ── Config feature flags ─────────────────────────────────────────────\n\n /** Mód opciók (üres = nem mutatjuk). */\n readonly modeOptions = input<string[]>([]);\n\n /** Kiválasztott mód. */\n readonly selectedMode = input<string>('');\n\n /** Model opciók (üres = nem mutatjuk). */\n readonly modelOptions = input<string[]>([]);\n\n /** Kiválasztott model. */\n readonly selectedModel = input<string>('');\n\n /** Effort opciók (üres = nem mutatjuk). */\n readonly effortOptions = input<string[]>([]);\n\n /** Kiválasztott effort. */\n readonly selectedEffort = input<string>('');\n\n /** Használat kijelzés (token szám / cost; üres = nem mutatjuk). */\n readonly usageText = input<string>('');\n\n // ── Queue ────────────────────────────────────────────────────────────\n\n /** Queue elemek (üres = nincs queue panel). */\n readonly queueItems = input<SQ_SnapshotItem_Interface[]>([]);\n\n /** Queue lock állapot (true = szerkesztés alatt, auto-delivery tiltott). */\n readonly isQueueLocked = input<boolean>(false);\n\n /** Szerkesztés alatt álló queue elem ID-ja (null = nincs szerkesztés). */\n readonly editingQueueItemId = input<string | null>(null);\n\n /** Szerkesztés alatti szöveg (two-way a szülővel). */\n readonly editingQueueText = input<string>('');\n\n /** Edit indítás (queueItemId). */\n readonly queueEditStart = output<string>();\n\n /** Szerkesztés közbeni text change. */\n readonly queueEditTextChange = output<string>();\n\n /** Edit mentés. */\n readonly queueEditSave = output<void>();\n\n /** Edit visszavonás. */\n readonly queueEditCancel = output<void>();\n\n /** Elem törlés (queueItemId). */\n readonly queueRemoveItem = output<string>();\n\n /** Azonnali küldés (queueItemId). */\n readonly queueSendNow = output<string>();\n\n /** Elem mozgatás felfelé (queueItemId). */\n readonly queueMoveUp = output<string>();\n\n /** Elem mozgatás lefelé (queueItemId). */\n readonly queueMoveDown = output<string>();\n\n // ── Attachment config ────────────────────────────────────────────────\n\n /** Fájl csatolás engedélyezése. */\n readonly enableAttachments = input<boolean>(false);\n\n /** Elfogadott fájl típusok (accept attribútum). */\n readonly acceptedFileTypes = input<string>(\n 'image/png,image/jpeg,image/webp,image/gif,.txt,.pdf,.md,.json,.csv,.xml,.yaml,.yml,.log',\n );\n\n /** Max csatolható fájlok száma. */\n readonly maxAttachmentCount = input<number>(6);\n\n // ── Outputok ─────────────────────────────────────────────────────────\n\n /** Küldés kérése (idle állapotban Enter / Send gomb). */\n readonly sendRequested = output<void>();\n\n /** Queue-ba küldés kérése (isExecuting alatt Enter / Queue gomb) — server oldalon auto-enqueue ugyanazon prompt endpointon keresztül. */\n readonly queueRequested = output<void>();\n\n /** Stop kérése. */\n readonly stopRequested = output<void>();\n\n /** Mód változás. */\n readonly modeChanged = output<string>();\n\n /** Model változás. */\n readonly modelChanged = output<string>();\n\n /** Effort változás. */\n readonly effortChanged = output<string>();\n\n /** Attachment lista változás. */\n readonly attachmentsChanged = output<CCAP_PendingAttachment_Interface[]>();\n\n // ── Belső state ──────────────────────────────────────────────────────\n\n /** Pending attachment-ek. */\n pendingAttachments: CCAP_PendingAttachment_Interface[] = [];\n\n /** Dropdown nyitott állapotok. */\n readonly isModeDropdownOpen_$ = signal<boolean>(false);\n readonly isModelDropdownOpen_$ = signal<boolean>(false);\n readonly isEffortDropdownOpen_$ = signal<boolean>(false);\n\n // ── Resize ───────────────────────────────────────────────────────────\n\n /** Manuális resize aktív (drag után; dblclick reset-eli). */\n readonly isManualResize_$ = signal<boolean>(false);\n\n /** Manuális panel magasság px-ben. */\n readonly manualPanelHeight_$ = signal<number>(300);\n\n /** Textarea DOM referencia (auto-grow számításhoz). */\n @ViewChild('textareaEl') textareaElRef: ElementRef<HTMLTextAreaElement> | undefined;\n\n /** Resize drag kiindulási Y pozíció. */\n private resizeStartY: number = 0;\n\n /** Resize drag kiindulási panel magasság. */\n private resizeStartHeight: number = 0;\n\n /** Document pointermove listener cleanup. */\n private resizeMoveCleanup: (() => void) | null = null;\n\n /** Document pointerup listener cleanup. */\n private resizeUpCleanup: (() => void) | null = null;\n\n /** Document pointercancel listener cleanup. */\n private resizeCancelCleanup: (() => void) | null = null;\n\n /** Host magasság — manual resize módban explicit, auto módban undefined (content-driven). */\n @HostBinding('style.height.px')\n get hostHeightPx(): number | undefined {\n return this.isManualResize_$() ? this.manualPanelHeight_$() : undefined;\n }\n\n constructor(\n private elementRef: ElementRef<HTMLElement>,\n private renderer: Renderer2,\n ) {\n /** Auto-grow effect — draftText változáskor (pl. küldés utáni törlés) textarea magasság újraszámolás. */\n effect(() => {\n this.draftText();\n if (!this.isManualResize_$()) {\n requestAnimationFrame(() => {\n if (this.textareaElRef?.nativeElement) {\n this.adjustTextareaAutoGrow(this.textareaElRef.nativeElement);\n }\n });\n }\n });\n }\n\n // ── Lifecycle ────────────────────────────────────────────────────────\n\n ngOnDestroy(): void {\n this.cleanupResizeListeners();\n for (const att of this.pendingAttachments) {\n if (att.previewUrl) {\n URL.revokeObjectURL(att.previewUrl);\n }\n }\n this.pendingAttachments = [];\n }\n\n // ── Keyboard ─────────────────────────────────────────────────────────\n\n /**\n * Enter küldés, Shift+Enter új sor.\n * Running alatt a default Enter a queueRequested-et emittálja (Stop külön gombbal).\n */\n handleKeyDown(event: KeyboardEvent): void {\n if (event.key !== 'Enter' || event.shiftKey) {\n return;\n }\n event.preventDefault();\n this.emitSendOrQueue();\n }\n\n // ── Send / Queue / Stop ──────────────────────────────────────────────\n\n /**\n * Send gomb kattintás (idle).\n */\n handleSendClick(): void {\n this.emitSendOrQueue();\n }\n\n /**\n * Queue gomb kattintás (running alatt látható, plusz input-send).\n */\n handleQueueClick(): void {\n this.emitSendOrQueue();\n }\n\n /**\n * Stop gomb kattintás.\n */\n handleStopClick(): void {\n if (this.isStopping()) {\n return;\n }\n this.stopRequested.emit();\n }\n\n // ── Textarea auto-grow ───────────────────────────────────────────────\n\n /**\n * Textarea input event — azonnali auto-grow (gyorsabb mint az effect + rAF).\n */\n handleTextareaInput(): void {\n if (this.isManualResize_$()) {\n return;\n }\n if (this.textareaElRef?.nativeElement) {\n this.adjustTextareaAutoGrow(this.textareaElRef.nativeElement);\n }\n }\n\n // ── Panel resize ─────────────────────────────────────────────────────\n\n /**\n * Resize handle pointerdown — drag indítás pointer capture-rel.\n */\n handleResizeStart(event: PointerEvent): void {\n event.preventDefault();\n const target: EventTarget | null = event.currentTarget;\n if (target instanceof HTMLElement) {\n target.setPointerCapture(event.pointerId);\n }\n this.resizeStartY = event.clientY;\n this.resizeStartHeight = this.elementRef.nativeElement.offsetHeight;\n\n this.resizeMoveCleanup = this.renderer.listen('document', 'pointermove', (e: PointerEvent): void => {\n this.handleResizeMove(e);\n });\n this.resizeUpCleanup = this.renderer.listen('document', 'pointerup', (): void => {\n if (target instanceof HTMLElement && target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n }\n this.cleanupResizeListeners();\n });\n this.resizeCancelCleanup = this.renderer.listen('document', 'pointercancel', (): void => {\n if (target instanceof HTMLElement && target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n }\n this.cleanupResizeListeners();\n });\n }\n\n /**\n * Resize handle duplakattintás — visszaállás auto módba.\n */\n handleResizeReset(): void {\n this.isManualResize_$.set(false);\n requestAnimationFrame(() => {\n if (this.textareaElRef?.nativeElement) {\n this.adjustTextareaAutoGrow(this.textareaElRef.nativeElement);\n }\n });\n }\n\n // ── Config dropdowns ─────────────────────────────────────────────────\n\n /** Mód dropdown toggle. */\n handleToggleModeDropdown(): void {\n this.closeAllDropdownsExcept('mode');\n this.isModeDropdownOpen_$.set(!this.isModeDropdownOpen_$());\n }\n\n /** Model dropdown toggle. */\n handleToggleModelDropdown(): void {\n this.closeAllDropdownsExcept('model');\n this.isModelDropdownOpen_$.set(!this.isModelDropdownOpen_$());\n }\n\n /** Effort dropdown toggle. */\n handleToggleEffortDropdown(): void {\n this.closeAllDropdownsExcept('effort');\n this.isEffortDropdownOpen_$.set(!this.isEffortDropdownOpen_$());\n }\n\n /** Mód kiválasztás. */\n handleSelectMode(mode: string): void {\n this.isModeDropdownOpen_$.set(false);\n this.modeChanged.emit(mode);\n }\n\n /** Model kiválasztás. */\n handleSelectModel(model: string): void {\n this.isModelDropdownOpen_$.set(false);\n this.modelChanged.emit(model);\n }\n\n /** Effort kiválasztás. */\n handleSelectEffort(effort: string): void {\n this.isEffortDropdownOpen_$.set(false);\n this.effortChanged.emit(effort);\n }\n\n // ── Attachments ──────────────────────────────────────────────────────\n\n /**\n * Fájl kiválasztás event kezelése (file input change).\n */\n async handleFilesSelected(event: Event): Promise<void> {\n const input: HTMLInputElement | null = event.target as HTMLInputElement | null;\n const list: FileList | null = input?.files ?? null;\n if (!list?.length) {\n return;\n }\n\n await this.addFiles(Array.from(list));\n\n if (input) {\n input.value = '';\n }\n }\n\n /**\n * Clipboard paste kezelése — ha kép van a vágólapon, csatolásként befogadjuk.\n */\n handlePaste(event: ClipboardEvent): void {\n if (!this.enableAttachments()) {\n return;\n }\n const items: DataTransferItemList | undefined = event.clipboardData?.items;\n if (!items?.length) {\n return;\n }\n\n const imageFiles: File[] = [];\n for (let i: number = 0; i < items.length; i++) {\n const item: DataTransferItem = items[i];\n if (item.kind === 'file' && IMAGE_MIME_PREFIXES.some(\n (prefix: string): boolean => item.type.toLowerCase().startsWith(prefix),\n )) {\n const file: File | null = item.getAsFile();\n if (file) {\n imageFiles.push(file);\n }\n }\n }\n\n if (imageFiles.length) {\n event.preventDefault();\n void this.addFiles(imageFiles);\n }\n }\n\n /**\n * Attachment eltávolítása.\n */\n handleRemoveAttachment(id: string): void {\n const found: CCAP_PendingAttachment_Interface | undefined =\n this.pendingAttachments.find(\n (a: CCAP_PendingAttachment_Interface): boolean => a.id === id,\n );\n if (found?.previewUrl) {\n URL.revokeObjectURL(found.previewUrl);\n }\n this.pendingAttachments = this.pendingAttachments.filter(\n (a: CCAP_PendingAttachment_Interface): boolean => a.id !== id,\n );\n this.attachmentsChanged.emit(this.pendingAttachments);\n }\n\n /**\n * Pending attachments törlése (szülő hívja küldés után).\n */\n clearAttachments(): void {\n for (const att of this.pendingAttachments) {\n if (att.previewUrl) {\n URL.revokeObjectURL(att.previewUrl);\n }\n }\n this.pendingAttachments = [];\n this.attachmentsChanged.emit(this.pendingAttachments);\n }\n\n // ── Privát ───────────────────────────────────────────────────────────\n\n /**\n * Küldés vagy queue-ba rakás — running alatt queueRequested, idle-ben sendRequested.\n * isSending közben nem engedjük (dupla request védelem); üres tartalom esetén sem.\n */\n private emitSendOrQueue(): void {\n if (this.isSending()) {\n return;\n }\n const hasText: boolean = (this.draftText() ?? '').trim().length > 0;\n const hasAttachments: boolean = this.pendingAttachments.length > 0;\n if (!hasText && !hasAttachments) {\n return;\n }\n if (this.isExecuting()) {\n this.queueRequested.emit();\n } else {\n this.sendRequested.emit();\n }\n }\n\n /**\n * Textarea magasság igazítása scrollHeight alapján (auto-grow mód).\n */\n private adjustTextareaAutoGrow(el: HTMLTextAreaElement): void {\n el.style.height = 'auto';\n const maxHeight: number = Math.round(window.innerHeight * TEXTAREA_AUTO_MAX_VH);\n const newHeight: number = Math.min(el.scrollHeight, maxHeight);\n el.style.height = newHeight + 'px';\n }\n\n /**\n * Resize drag mozgatás — panel magasság frissítés.\n */\n private handleResizeMove(event: PointerEvent): void {\n const wasManual: boolean = this.isManualResize_$();\n const delta: number = this.resizeStartY - event.clientY;\n const maxHeight: number = Math.round(window.innerHeight * 0.7);\n const newHeight: number = Math.max(PANEL_MIN_HEIGHT, Math.min(this.resizeStartHeight + delta, maxHeight));\n\n this.isManualResize_$.set(true);\n this.manualPanelHeight_$.set(newHeight);\n\n // Első resize mozgatás: inline auto-grow style törlés, hogy a h-full class érvényesüljön\n if (!wasManual && this.textareaElRef?.nativeElement) {\n this.textareaElRef.nativeElement.style.height = '';\n }\n }\n\n /**\n * Resize listener-ek eltávolítása (cleanup).\n */\n private cleanupResizeListeners(): void {\n if (this.resizeMoveCleanup) {\n this.resizeMoveCleanup();\n this.resizeMoveCleanup = null;\n }\n if (this.resizeUpCleanup) {\n this.resizeUpCleanup();\n this.resizeUpCleanup = null;\n }\n if (this.resizeCancelCleanup) {\n this.resizeCancelCleanup();\n this.resizeCancelCleanup = null;\n }\n }\n\n /**\n * Bezárja az összes dropdown-ot kivéve a megadottat.\n */\n private closeAllDropdownsExcept(except: string): void {\n if (except !== 'mode') {\n this.isModeDropdownOpen_$.set(false);\n }\n if (except !== 'model') {\n this.isModelDropdownOpen_$.set(false);\n }\n if (except !== 'effort') {\n this.isEffortDropdownOpen_$.set(false);\n }\n }\n\n /**\n * Fájlok hozzáadása a pending attachment listához (file input és clipboard paste közös logika).\n */\n private async addFiles(files: File[]): Promise<void> {\n const room: number = this.maxAttachmentCount() - this.pendingAttachments.length;\n if (room <= 0) {\n return;\n }\n\n const filesToProcess: File[] = files.slice(0, room);\n\n for (const file of filesToProcess) {\n try {\n const base64: string = await this.readFileToBase64(file);\n const isImage: boolean = IMAGE_MIME_PREFIXES.some(\n (prefix: string): boolean => file.type.toLowerCase().startsWith(prefix),\n );\n const id: string =\n typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function'\n ? crypto.randomUUID()\n : `att-${Date.now()}-${Math.random()}`;\n\n const attachment: CCAP_PendingAttachment_Interface = {\n id: id,\n fileName: file.name,\n mimeType: file.type || 'application/octet-stream',\n base64: base64,\n previewUrl: isImage ? URL.createObjectURL(file) : undefined,\n sizeBytes: file.size,\n isImage: isImage,\n };\n\n this.pendingAttachments = [...this.pendingAttachments, attachment];\n } catch {\n // FileReader hiba: kihagyjuk ezt a fájlt\n }\n }\n\n this.attachmentsChanged.emit(this.pendingAttachments);\n }\n\n /**\n * Fájl beolvasása base64-be.\n */\n private readFileToBase64(file: File): Promise<string> {\n return new Promise(\n (\n resolve: (v: string) => void,\n reject: (e: unknown) => void,\n ): void => {\n const reader: FileReader = new FileReader();\n reader.onload = (): void => {\n const dataUrl: string = String(reader.result ?? '');\n const commaIdx: number = dataUrl.indexOf(',');\n resolve(commaIdx >= 0 ? dataUrl.slice(commaIdx + 1) : dataUrl);\n };\n reader.onerror = (): void => {\n reject(reader.error);\n };\n reader.readAsDataURL(file);\n },\n );\n }\n}\n", "<!-- Resize handle — húzással méretezés; dupla kattintás = auto mód visszaállítás -->\n<div class=\"group flex items-center justify-center h-2.5 shrink-0 cursor-ns-resize select-none touch-none\"\n (pointerdown)=\"handleResizeStart($event)\"\n (dblclick)=\"handleResizeReset()\">\n <div class=\"w-8 h-0.5 rounded-full bg-neutral-600 transition-all\n group-hover:bg-neonCyan/50 group-hover:w-12\"></div>\n</div>\n\n<!-- Knight Rider scanner — agent futása közben a border-t vonalon sweepel -->\n@if (isExecuting()) {\n <div class=\"knight-rider-bar\"></div>\n}\n\n<div class=\"flex flex-col gap-2 p-2 flex-1 min-h-0\">\n <!-- Attachment preview sor -->\n @if (pendingAttachments.length) {\n <div class=\"flex flex-wrap gap-2\">\n @for (att of pendingAttachments; track att.id) {\n @if (att.isImage && att.previewUrl) {\n <div class=\"relative w-14 h-14 rounded border border-neonDefault overflow-hidden shrink-0\">\n <img [src]=\"att.previewUrl\" alt=\"\" class=\"w-full h-full object-cover\" />\n <button type=\"button\"\n class=\"absolute top-0 right-0 w-4 h-4 text-[10px] leading-4 bg-black/70 text-white border-0 cursor-pointer\"\n (click)=\"handleRemoveAttachment(att.id)\">\n ×\n </button>\n </div>\n } @else {\n <div class=\"relative flex items-center gap-1 px-2 py-1 rounded border border-neonDefault text-[10px] text-neutral-400 shrink-0 max-w-[140px]\">\n <svg class=\"w-3 h-3 shrink-0 opacity-60\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M7 1H3a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V4L7 1z\" stroke=\"currentColor\" stroke-width=\"1\"/>\n <polyline points=\"7 1 7 4 10 4\" stroke=\"currentColor\" stroke-width=\"1\"/>\n </svg>\n <span class=\"truncate\">{{ att.fileName }}</span>\n <button type=\"button\"\n class=\"ml-auto w-3 h-3 text-[10px] leading-3 text-neutral-500 hover:text-white cursor-pointer shrink-0\"\n (click)=\"handleRemoveAttachment(att.id)\">\n ×\n </button>\n </div>\n }\n }\n </div>\n }\n\n <!-- Queue panel (textarea fölött) -->\n @if (queueItems().length) {\n <div class=\"flex flex-col gap-1 rounded border border-neutral-700/50 bg-neutral-900/60 p-2 text-[11px]\">\n <div class=\"flex items-center gap-1.5 text-neutral-500 font-medium mb-0.5\">\n <svg class=\"w-3 h-3 opacity-60\" viewBox=\"0 0 12 12\" fill=\"none\">\n <rect x=\"1\" y=\"1\" width=\"10\" height=\"3\" rx=\"0.5\" stroke=\"currentColor\" stroke-width=\"0.8\"/>\n <rect x=\"1\" y=\"5\" width=\"10\" height=\"3\" rx=\"0.5\" stroke=\"currentColor\" stroke-width=\"0.8\" opacity=\"0.6\"/>\n <rect x=\"1\" y=\"9\" width=\"10\" height=\"3\" rx=\"0.5\" stroke=\"currentColor\" stroke-width=\"0.8\" opacity=\"0.3\"/>\n </svg>\n <span>Queued ({{ queueItems().length }})</span>\n @if (isQueueLocked()) {\n <span class=\"ml-1 rounded bg-neonAmber/15 px-1 py-px text-[9px] font-semibold text-neonAmber uppercase tracking-wider\">Editing</span>\n }\n </div>\n\n <!-- REQ-UI-QUEUE-001: a queue lista magassága korlátolt + görgethető, ha sok elem van. -->\n <div class=\"flex flex-col gap-1 max-h-[280px] overflow-y-auto overscroll-contain pr-1\">\n @for (item of queueItems(); track item.queueItemId) {\n <div class=\"flex items-start gap-1.5 rounded px-2 py-1.5 transition-colors\"\n [class]=\"editingQueueItemId() === item.queueItemId\n ? 'bg-neutral-800 border border-neonAmber/30'\n : 'bg-neutral-800/40 hover:bg-neutral-800/70'\">\n\n @if (editingQueueItemId() === item.queueItemId) {\n <!-- Edit mód -->\n <textarea\n class=\"flex-1 min-h-[36px] max-h-[100px] resize-none rounded border border-neutral-600 bg-neutral-900\n px-2 py-1 text-[11px] text-neutral-200 focus:border-neonAmber focus:outline-none\"\n rows=\"2\"\n [ngModel]=\"editingQueueText()\"\n (ngModelChange)=\"queueEditTextChange.emit($event)\">\n </textarea>\n <div class=\"flex flex-col gap-1 shrink-0\">\n <button type=\"button\"\n class=\"px-1.5 py-0.5 text-[10px] rounded bg-neonAmber/20 text-neonAmber hover:bg-neonAmber/30 transition-colors cursor-pointer\"\n (click)=\"queueEditSave.emit()\">\n Save\n </button>\n <button type=\"button\"\n class=\"px-1.5 py-0.5 text-[10px] rounded text-neutral-500 hover:text-neutral-300 hover:bg-neutral-700 transition-colors cursor-pointer\"\n (click)=\"queueEditCancel.emit()\">\n Cancel\n </button>\n </div>\n } @else {\n <!-- Read mód -->\n <span class=\"flex-1 text-neutral-300 break-words whitespace-pre-wrap leading-relaxed\">{{ item.text }}</span>\n <div class=\"flex items-center gap-1 shrink-0 opacity-0 group-hover:opacity-100 transition-opacity\"\n [class.opacity-100]=\"true\">\n <!-- Reorder gombok (fel/le) -->\n <button type=\"button\"\n class=\"px-1 py-0.5 text-[10px] rounded text-neutral-500 hover:text-neutral-200 hover:bg-neutral-700 transition-colors cursor-pointer disabled:opacity-30 disabled:cursor-not-allowed\"\n [disabled]=\"isQueueLocked() || $first\"\n (click)=\"queueMoveUp.emit(item.queueItemId)\"\n title=\"Move up\">\n <svg class=\"w-3 h-3\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M6 3L3 7h6L6 3z\" fill=\"currentColor\"/>\n </svg>\n </button>\n <button type=\"button\"\n class=\"px-1 py-0.5 text-[10px] rounded text-neutral-500 hover:text-neutral-200 hover:bg-neutral-700 transition-colors cursor-pointer disabled:opacity-30 disabled:cursor-not-allowed\"\n [disabled]=\"isQueueLocked() || $last\"\n (click)=\"queueMoveDown.emit(item.queueItemId)\"\n title=\"Move down\">\n <svg class=\"w-3 h-3\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M6 9L3 5h6L6 9z\" fill=\"currentColor\"/>\n </svg>\n </button>\n <button type=\"button\"\n class=\"px-1.5 py-0.5 text-[10px] rounded text-neutral-500 hover:text-neutral-200 hover:bg-neutral-700 transition-colors cursor-pointer disabled:opacity-30 disabled:cursor-not-allowed\"\n [disabled]=\"isQueueLocked()\"\n (click)=\"queueEditStart.emit(item.queueItemId)\">\n Edit\n </button>\n <button type=\"button\"\n class=\"px-1.5 py-0.5 text-[10px] rounded text-neutral-500 hover:text-red-400 hover:bg-red-950/30 transition-colors cursor-pointer disabled:opacity-30 disabled:cursor-not-allowed\"\n [disabled]=\"isQueueLocked()\"\n (click)=\"queueRemoveItem.emit(item.queueItemId)\">\n ×\n </button>\n <button type=\"button\"\n class=\"px-1.5 py-0.5 text-[10px] rounded text-neutral-500 hover:text-neonCyan hover:bg-neonCyan/10 transition-colors cursor-pointer disabled:opacity-30 disabled:cursor-not-allowed\"\n [disabled]=\"isQueueLocked()\"\n (click)=\"queueSendNow.emit(item.queueItemId)\">\n Send Now\n </button>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Textarea + send/stop gomb egymás mellett -->\n <div class=\"flex gap-2\"\n [class.flex-1]=\"isManualResize_$()\"\n [class.min-h-0]=\"isManualResize_$()\">\n <!-- Textarea -->\n <div class=\"relative min-w-0 flex-1\"\n [class.min-h-0]=\"isManualResize_$()\">\n <textarea\n #textareaEl\n class=\"min-h-[60px] w-full resize-none rounded border border-neutral-700 bg-neutral-800\n px-3 py-2 text-sm text-neutral-200 placeholder-neutral-600\n focus:border-ccapAccent focus:outline-none\"\n [class.h-full]=\"isManualResize_$()\"\n [attr.rows]=\"textareaRows()\"\n [placeholder]=\"placeholder()\"\n [ngModel]=\"draftText()\"\n (ngModelChange)=\"draftTextChange.emit($event)\"\n (input)=\"handleTextareaInput()\"\n (keydown)=\"handleKeyDown($event)\"\n (paste)=\"handlePaste($event)\">\n </textarea>\n </div>\n\n <!-- Voice (felül) + Send/Stop+Queue (alul) — textarea jobb oldalán, space-between; gap-2 minimum távolság, hogy alacsony panelnél se csúsztanak össze -->\n <div class=\"shrink-0 self-stretch flex flex-col items-center justify-between gap-2\">\n <ng-content select=\"[sInputTextareaAccessory]\"></ng-content>\n @if (isExecuting()) {\n <!-- Running: Queue (amber, felül — ez az új default Enter target) + Stop (piros, alul — execution leállítás) -->\n <div class=\"flex flex-col items-center gap-1.5\">\n <!-- Queue gomb: paper-plane + \"+\" badge a jobb-alsó sarokban; Enter is ezt hívja futás közben -->\n <button\n type=\"button\"\n class=\"flex items-center justify-center min-w-[44px] min-h-[44px] w-10 h-10 rounded-full shrink-0\n bg-neutral-900 border-2 border-neonAmber/60 text-neonAmber\n hover:border-neonAmber hover:shadow-neon-glow-amber hover:bg-neonAmber/10 transition-all duration-200 disabled:opacity-40\n focus:outline-none focus:ring-2 focus:ring-neonAmber focus:ring-offset-2 focus:ring-offset-neutral-900\"\n [disabled]=\"isSending()\"\n (click)=\"handleQueueClick()\"\n aria-label=\"Add to queue\"\n title=\"Add to queue (Enter)\">\n @if (isSending()) {\n <span class=\"inline-block w-5 h-5 shrink-0 animate-spin rounded-full border-2 border-neonAmber/40 border-t-neonAmber\"\n aria-hidden=\"true\"></span>\n } @else {\n <svg class=\"w-5 h-5 shrink-0\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <!-- Paper-plane — kisebb, bal-felső orientációjú, hogy helyet adjon a plus badge-nek -->\n <polygon points=\"18 3 2 9 9 12 18 3\" />\n <polyline points=\"18 3 11 19 9 12\" />\n <!-- Plus jel — jobb-alsó sarokban, jelzi a „queue-hoz adás\" szemantikát -->\n <line x1=\"19\" y1=\"15\" x2=\"19\" y2=\"21\" />\n <line x1=\"16\" y1=\"18\" x2=\"22\" y2=\"18\" />\n </svg>\n }\n </button>\n <button\n type=\"button\"\n class=\"flex items-center justify-center min-w-[44px] min-h-[44px] w-10 h-10 rounded-full shrink-0\n bg-neutral-900 border-2 border-neonRed/50 text-red-300\n hover:border-neonRed hover:shadow-neon-glow-red transition-all duration-200 disabled:opacity-40\n focus:outline-none focus:ring-2 focus:ring-neonRed focus:ring-offset-2 focus:ring-offset-neutral-900\"\n [disabled]=\"isStopping()\"\n (click)=\"handleStopClick()\"\n [attr.aria-label]=\"isStopping() ? 'Stopping…' : 'Stop'\"\n [attr.title]=\"isStopping() ? 'Stopping…' : 'Stop'\">\n @if (isStopping()) {\n <span class=\"inline-block w-5 h-5 shrink-0 animate-spin rounded-full border-2 border-neonRed/40 border-t-neonRed\"\n aria-hidden=\"true\"></span>\n } @else {\n <svg class=\"w-5 h-5 shrink-0\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\" />\n </svg>\n }\n </button>\n </div>\n } @else {\n <!-- Idle: sima Send gomb -->\n <button\n type=\"button\"\n class=\"flex items-center justify-center min-w-[44px] min-h-[44px] w-10 h-10 rounded-full shrink-0\n bg-ccapAccent text-black transition-all duration-200 disabled:opacity-50\n hover:bg-ccapAccent/80 hover:shadow-neon-glow-cyan\n focus:outline-none focus:ring-2 focus:ring-ccapAccent focus:ring-offset-2 focus:ring-offset-neutral-900\"\n [disabled]=\"isSending()\"\n (click)=\"handleSendClick()\"\n aria-label=\"Send\"\n title=\"Send\">\n @if (isSending()) {\n <span class=\"inline-block w-5 h-5 shrink-0 animate-spin rounded-full border-2 border-black/40 border-t-black\"\n aria-hidden=\"true\"></span>\n } @else {\n <svg class=\"w-5 h-5 shrink-0\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\" />\n <polygon points=\"22 2 15 22 11 13 2 9 22 2\" />\n </svg>\n }\n </button>\n }\n </div>\n </div>\n\n <!-- Alsó sor: attach + config dropdownok -->\n <div class=\"flex flex-wrap items-center gap-2 text-[11px] shrink-0\">\n <!-- Attach gomb -->\n @if (enableAttachments()) {\n <label class=\"flex items-center gap-1 px-2 py-1 rounded border border-neutral-700\n text-neutral-400 hover:text-neutral-300 hover:border-neutral-600\n cursor-pointer transition-colors shrink-0\">\n <svg class=\"w-3 h-3 opacity-60\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M10.5 5.5l-4.3 4.3a2.5 2.5 0 0 1-3.5-3.5L7 2a1.7 1.7 0 0 1 2.4 2.4L5.1 8.7a.8.8 0 0 1-1.2-1.2L7.5 4\" stroke=\"currentColor\" stroke-width=\"1\" stroke-linecap=\"round\"/>\n </svg>\n Attach\n <input type=\"file\"\n class=\"sr-only\"\n [accept]=\"acceptedFileTypes()\"\n multiple\n (change)=\"handleFilesSelected($event)\" />\n </label>\n }\n\n <!-- Mode dropdown -->\n @if (modeOptions().length) {\n <div class=\"relative\">\n <button\n type=\"button\"\n class=\"flex items-center gap-1 px-2 py-0.5 rounded border transition-colors cursor-pointer\"\n [class]=\"isModeDropdownOpen_$()\n ? 'border-neonCyan/50 text-neonCyan bg-neonCyan/10'\n : 'border-neutral-700 text-neutral-400 hover:text-neutral-300 hover:border-neutral-600'\"\n (click)=\"handleToggleModeDropdown()\"\n [attr.aria-label]=\"'Mode: ' + selectedMode()\">\n <!-- REQ-MOBILE-INPUT-COMPACT-001 (cycle 440): label + ':' rejtve mobile-on, csak value. -->\n <span class=\"uppercase font-medium tracking-wide hidden gt-xs:inline\">Mode</span>\n <span class=\"text-neutral-500 mx-0.5 hidden gt-xs:inline\">:</span>\n <span class=\"capitalize\">{{ selectedMode() }}</span>\n <svg class=\"w-3 h-3 ml-0.5 opacity-50\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M3 5l3 3 3-3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n </button>\n @if (isModeDropdownOpen_$()) {\n <div class=\"absolute bottom-full left-0 mb-1 bg-neutral-900 border border-neutral-700 rounded-lg shadow-lg overflow-hidden z-20 min-w-[100px]\">\n @for (mode of modeOptions(); track mode) {\n <button\n type=\"button\"\n class=\"w-full text-left px-3 py-1.5 text-[11px] capitalize transition-colors cursor-pointer\"\n [class]=\"mode === selectedMode()\n ? 'text-neonCyan bg-neonCyan/10'\n : 'text-neutral-400 hover:text-neutral-200 hover:bg-neutral-800'\"\n (click)=\"handleSelectMode(mode)\">\n {{ mode }}\n </button>\n }\n </div>\n }\n </div>\n }\n\n <!-- Model dropdown -->\n @if (modelOptions().length) {\n <div class=\"relative\">\n <button\n type=\"button\"\n class=\"flex items-center gap-1 px-2 py-0.5 rounded border transition-colors cursor-pointer\"\n [class]=\"isModelDropdownOpen_$()\n ? 'border-neonAmber/50 text-neonAmber bg-neonAmber/10'\n : 'border-neutral-700 text-neutral-400 hover:text-neutral-300 hover:border-neutral-600'\"\n (click)=\"handleToggleModelDropdown()\"\n [attr.aria-label]=\"'Model: ' + selectedModel()\">\n <!-- REQ-MOBILE-INPUT-COMPACT-001 (cycle 440): label + ':' rejtve mobile-on, csak value. -->\n <span class=\"uppercase font-medium tracking-wide hidden gt-xs:inline\">Model</span>\n <span class=\"text-neutral-500 mx-0.5 hidden gt-xs:inline\">:</span>\n <span class=\"capitalize\">{{ selectedModel() }}</span>\n <svg class=\"w-3 h-3 ml-0.5 opacity-50\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M3 5l3 3 3-3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n </button>\n @if (isModelDropdownOpen_$()) {\n <div class=\"absolute bottom-full left-0 mb-1 bg-neutral-900 border border-neutral-700 rounded-lg shadow-lg overflow-hidden z-20 min-w-[100px]\">\n @for (model of modelOptions(); track model) {\n <button\n type=\"button\"\n class=\"w-full text-left px-3 py-1.5 text-[11px] capitalize transition-colors cursor-pointer\"\n [class]=\"model === selectedModel()\n ? 'text-neonAmber bg-neonAmber/10'\n : 'text-neutral-400 hover:text-neutral-200 hover:bg-neutral-800'\"\n (click)=\"handleSelectModel(model)\">\n {{ model }}\n </button>\n }\n </div>\n }\n </div>\n }\n\n <!-- Effort dropdown -->\n @if (effortOptions().length) {\n <div class=\"relative\">\n <button\n type=\"button\"\n class=\"flex items-center gap-1 px-2 py-0.5 rounded border transition-colors cursor-pointer\"\n [class]=\"isEffortDropdownOpen_$()\n ? 'border-neonPurple/50 text-neonPurple bg-neonPurple/10'\n : 'border-neutral-700 text-neutral-400 hover:text-neutral-300 hover:border-neutral-600'\"\n (click)=\"handleToggleEffortDropdown()\"\n [attr.aria-label]=\"'Effort: ' + selectedEffort()\">\n <!-- REQ-MOBILE-INPUT-COMPACT-001 (cycle 440): label + ':' rejtve mobile-on, csak value. -->\n <span class=\"uppercase font-medium tracking-wide hidden gt-xs:inline\">Effort</span>\n <span class=\"text-neutral-500 mx-0.5 hidden gt-xs:inline\">:</span>\n <span class=\"capitalize\">{{ selectedEffort() }}</span>\n <svg class=\"w-3 h-3 ml-0.5 opacity-50\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M3 5l3 3 3-3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n </button>\n @if (isEffortDropdownOpen_$()) {\n <div class=\"absolute bottom-full left-0 mb-1 bg-neutral-900 border border-neutral-700 rounded-lg shadow-lg overflow-hidden z-20 min-w-[100px]\">\n @for (effort of effortOptions(); track effort) {\n <button\n type=\"button\"\n class=\"w-full text-left px-3 py-1.5 text-[11px] capitalize transition-colors cursor-pointer\"\n [class]=\"effort === selectedEffort()\n ? 'text-neonPurple bg-neonPurple/10'\n : 'text-neutral-400 hover:text-neutral-200 hover:bg-neutral-800'\"\n (click)=\"handleSelectEffort(effort)\">\n {{ effort }}\n </button>\n }\n </div>\n }\n </div>\n }\n\n <div class=\"flex-1\"></div>\n\n <!-- Usage kijelzés (token szám / cost) -->\n @if (usageText()) {\n <div class=\"flex items-center gap-1.5 text-neutral-500 shrink-0\">\n <svg class=\"w-3 h-3 opacity-60\" viewBox=\"0 0 12 12\" fill=\"none\">\n <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1\"/>\n <path d=\"M6 3v3.5l2 1.5\" stroke=\"currentColor\" stroke-width=\"1\" stroke-linecap=\"round\"/>\n </svg>\n <span>{{ usageText() }}</span>\n </div>\n }\n </div>\n</div>\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n/**\n * Session shell felső toolbar: 1fr | auto | 1fr grid, három ng-content slot.\n * Domain-logika nélkül — csak elrendezés.\n */\n@Component({\n selector: 'app-s-session-shell-toolbar',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './s-session-shell-toolbar.component.html',\n host: { class: 'block shrink-0 w-full min-w-0' },\n})\n/** S_SessionShellToolbar_Component class. */\nexport class S_SessionShellToolbar_Component {}\n", "<div\n class=\"grid grid-cols-[1fr_auto_1fr] items-center gap-x-1 gap-y-1 p-1 border-b border-neonDefault bg-ccapSurface w-full min-w-0\">\n <div class=\"flex items-center gap-1 min-w-0 justify-self-start\">\n <ng-content select=\"[sSessionToolbarLeft]\"></ng-content>\n </div>\n <div\n class=\"flex items-center justify-center gap-2 min-w-0 max-w-[min(100vw-12rem,42rem)] justify-self-center\">\n <ng-content select=\"[sSessionToolbarCenter]\"></ng-content>\n </div>\n <div class=\"flex items-center gap-1 min-w-0 justify-self-end flex-wrap justify-end\">\n <ng-content select=\"[sSessionToolbarRight]\"></ng-content>\n </div>\n</div>\n", "import { Component, input, output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n/**\n * Shell: opcionális bal sidebar fix px szélességgel + resize handle + fő tartalom + opcionális jobb panel.\n * A szélesség mentés és a drag matematika a szülőn marad — itt csak a handle esemény.\n * Opcionális mobil backdrop: sidebar nyitott állapotban xs nézetben overlay-t mutat.\n */\n@Component({\n selector: 'app-s-resizable-session-shell-layout',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './s-resizable-session-shell-layout.component.html',\n host: { class: 'block flex flex-1 min-h-0 w-full overflow-hidden' },\n})\n/** S_ResizableSessionShellLayout_Component class. */\nexport class S_ResizableSessionShellLayout_Component {\n\n /** Sidebar látható. */\n readonly isSidebarOpen = input<boolean>(true);\n\n /** Sidebar szélesség (px). */\n readonly sidebarWidthPx = input<number>(320);\n\n /** Resize aktív — host select-none-hoz. */\n readonly isResizing = input<boolean>(false);\n\n /** Sidebar resize kezdő esemény (pointerdown a handle-n). */\n readonly sidebarResizeStart = output<PointerEvent>();\n\n /**\n * Mobil backdrop aktív — ha true, xs nézetben fix overlay-t renderel a sidebar mögött.\n * A szülő feladata eldönteni, mikor aktív (általában: sidebar nyitott állapotban).\n * CSS-en keresztül (xs:block gt-xs:hidden) csak mobilon jelenik meg.\n */\n readonly isMobileBackdropActive = input<boolean>(false);\n\n /** Mobil backdrop kattintás esemény — a szülő kezeli (általában: sidebar bezárás). */\n readonly mobileBackdropClicked = output<void>();\n}\n", "@if (isMobileBackdropActive()) {\n <div class=\"fixed inset-0 z-30 bg-black/50 xs:block gt-xs:hidden\"\n (click)=\"mobileBackdropClicked.emit()\"\n aria-hidden=\"true\"></div>\n}\n@if (isSidebarOpen()) {\n <div\n class=\"border-r border-neonDefault bg-ccapSurface flex flex-col min-h-0 overflow-hidden shrink-0 self-stretch\"\n [style.width.px]=\"sidebarWidthPx()\">\n <ng-content select=\"[sSessionShellSidebar]\"></ng-content>\n </div>\n <div\n class=\"w-1 shrink-0 cursor-col-resize hover:bg-ccapAccent/40 active:bg-ccapAccent/60 transition-colors touch-none\"\n (pointerdown)=\"sidebarResizeStart.emit($event)\">\n </div>\n}\n<div class=\"flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden bg-ccapBg self-stretch\">\n <ng-content select=\"[sSessionShellMain]\"></ng-content>\n</div>\n<ng-content select=\"[sSessionShellRightPanel]\"></ng-content>\n", "import { Component, input, output, signal, OnDestroy, ViewChild, ElementRef, Renderer2, HostBinding, effect } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport {\n CCAP_PendingAttachment_Interface,\n} from '../../../../../_models/interfaces/session/ccap-pending-attachment.interface';\nimport {\n SQ_SnapshotItem_Interface,\n} from '../../../../../_models/interfaces/session-queue/ccap-session-queue-snapshot.interface';\n\n/** Engedélyezett image MIME típusok (preview-hoz). */\nconst IMAGE_MIME_PREFIXES: string[] = ['image/png', 'image/jpeg', 'image/webp', 'image/gif'];\n\n/** Panel minimális magassága px-ben (resize alsó limit). */\nconst PANEL_MIN_HEIGHT: number = 120;\n\n/** Textarea auto-grow maximális magassága viewport arányában. */\nconst TEXTAREA_AUTO_MAX_VH: number = 0.4;\n\n/**\n * Közös session input komponens — textarea, send/stop, config dropdownok, fájl csatolás.\n * Feature flag input-okkal konfigurálható: ami üres / false, az nem jelenik meg.\n *\n * Content projection:\n * - `[sInputTextareaAccessory]` — absolute overlay a textarea-ra (pl. voice gomb)\n */\n@Component({\n selector: 'app-s-session-input',\n standalone: true,\n imports: [CommonModule, FormsModule],\n templateUrl: './s-session-input.component.html',\n styleUrls: ['./s-session-input.component.scss'],\n host: { class: 'flex flex-col shrink-0 border-t border-neonDefault bg-ccapSurface relative overflow-hidden' },\n})\n/** S_SessionInput_Component class. */\nexport class S_SessionInput_Component implements OnDestroy {\n\n // ── Szöveg ───────────────────────────────────────────────────────────\n\n /** Piszkozat szöveg (two-way a szülővel). */\n readonly draftText = input<string>('');\n\n /** Placeholder. */\n readonly placeholder = input<string>('Send a prompt…');\n\n /** Textarea sorok. */\n readonly textareaRows = input<number>(3);\n\n /** Piszkozat változás. */\n readonly draftTextChange = output<string>();\n\n // ── Állapot ──────────────────────────────────────────────────────────\n\n /** Agent dolgozik — ilyenkor Stop gomb jelenik meg Send helyett. */\n readonly isExecuting = input<boolean>(false);\n\n /** Küldés folyamatban. */\n readonly isSending = input<boolean>(false);\n\n /** Stop folyamatban. */\n readonly isStopping = input<boolean>(false);\n\n // ── Config feature flags ─────────────────────────────────────────────\n\n /** Mód opciók (üres = nem mutatjuk). */\n readonly modeOptions = input<string[]>([]);\n\n /** Kiválasztott mód. */\n readonly selectedMode = input<string>('');\n\n /** Model opciók (üres = nem mutatjuk). */\n readonly modelOptions = input<string[]>([]);\n\n /** Kiválasztott model. */\n readonly selectedModel = input<string>('');\n\n /** Effort opciók (üres = nem mutatjuk). */\n readonly effortOptions = input<string[]>([]);\n\n /** Kiválasztott effort. */\n readonly selectedEffort = input<string>('');\n\n /** Használat kijelzés (token szám / cost; üres = nem mutatjuk). */\n readonly usageText = input<string>('');\n\n // ── Queue ────────────────────────────────────────────────────────────\n\n /** Queue elemek (üres = nincs queue panel). */\n readonly queueItems = input<SQ_SnapshotItem_Interface[]>([]);\n\n /** Queue lock állapot (true = szerkesztés alatt, auto-delivery tiltott). */\n readonly isQueueLocked = input<boolean>(false);\n\n /** Szerkesztés alatt álló queue elem ID-ja (null = nincs szerkesztés). */\n readonly editingQueueItemId = input<string | null>(null);\n\n /** Szerkesztés alatti szöveg (two-way a szülővel). */\n readonly editingQueueText = input<string>('');\n\n /** Edit indítás (queueItemId). */\n readonly queueEditStart = output<string>();\n\n /** Szerkesztés közbeni text change. */\n readonly queueEditTextChange = output<string>();\n\n /** Edit mentés. */\n readonly queueEditSave = output<void>();\n\n /** Edit visszavonás. */\n readonly queueEditCancel = output<void>();\n\n /** Elem törlés (queueItemId). */\n readonly queueRemoveItem = output<string>();\n\n /** Azonnali küldés (queueItemId). */\n readonly queueSendNow = output<string>();\n\n /** Elem mozgatás felfelé (queueItemId). */\n readonly queueMoveUp = output<string>();\n\n /** Elem mozgatás lefelé (queueItemId). */\n readonly queueMoveDown = output<string>();\n\n // ── Attachment config ────────────────────────────────────────────────\n\n /** Fájl csatolás engedélyezése. */\n readonly enableAttachments = input<boolean>(false);\n\n /** Elfogadott fájl típusok (accept attribútum). */\n readonly acceptedFileTypes = input<string>(\n 'image/png,image/jpeg,image/webp,image/gif,.txt,.pdf,.md,.json,.csv,.xml,.yaml,.yml,.log',\n );\n\n /** Max csatolható fájlok száma. */\n readonly maxAttachmentCount = input<number>(6);\n\n // ── Outputok ─────────────────────────────────────────────────────────\n\n /** Küldés kérése (idle állapotban Enter / Send gomb). */\n readonly sendRequested = output<void>();\n\n /** Queue-ba küldés kérése (isExecuting alatt Enter / Queue gomb) — server oldalon auto-enqueue ugyanazon prompt endpointon keresztül. */\n readonly queueRequested = output<void>();\n\n /** Stop kérése. */\n readonly stopRequested = output<void>();\n\n /** Mód változás. */\n readonly modeChanged = output<string>();\n\n /** Model változás. */\n readonly modelChanged = output<string>();\n\n /** Effort változás. */\n readonly effortChanged = output<string>();\n\n /** Attachment lista változás. */\n readonly attachmentsChanged = output<CCAP_PendingAttachment_Interface[]>();\n\n // ── Belső state ──────────────────────────────────────────────────────\n\n /** Pending attachment-ek. */\n pendingAttachments: CCAP_PendingAttachment_Interface[] = [];\n\n /** Dropdown nyitott állapotok. */\n readonly isModeDropdownOpen_$ = signal<boolean>(false);\n readonly isModelDropdownOpen_$ = signal<boolean>(false);\n readonly isEffortDropdownOpen_$ = signal<boolean>(false);\n\n // ── Resize ───────────────────────────────────────────────────────────\n\n /** Manuális resize aktív (drag után; dblclick reset-eli). */\n readonly isManualResize_$ = signal<boolean>(false);\n\n /** Manuális panel magasság px-ben. */\n readonly manualPanelHeight_$ = signal<number>(300);\n\n /** Textarea DOM referencia (auto-grow számításhoz). */\n @ViewChild('textareaEl') textareaElRef: ElementRef<HTMLTextAreaElement> | undefined;\n\n /** Resize drag kiindulási Y pozíció. */\n private resizeStartY: number = 0;\n\n /** Resize drag kiindulási panel magasság. */\n private resizeStartHeight: number = 0;\n\n /** Document pointermove listener cleanup. */\n private resizeMoveCleanup: (() => void) | null = null;\n\n /** Document pointerup listener cleanup. */\n private resizeUpCleanup: (() => void) | null = null;\n\n /** Document pointercancel listener cleanup. */\n private resizeCancelCleanup: (() => void) | null = null;\n\n /** Host magasság — manual resize módban explicit, auto módban undefined (content-driven). */\n @HostBinding('style.height.px')\n get hostHeightPx(): number | undefined {\n return this.isManualResize_$() ? this.manualPanelHeight_$() : undefined;\n }\n\n constructor(\n private elementRef: ElementRef<HTMLElement>,\n private renderer: Renderer2,\n ) {\n /** Auto-grow effect — draftText változáskor (pl. küldés utáni törlés) textarea magasság újraszámolás. */\n effect(() => {\n this.draftText();\n if (!this.isManualResize_$()) {\n requestAnimationFrame(() => {\n if (this.textareaElRef?.nativeElement) {\n this.adjustTextareaAutoGrow(this.textareaElRef.nativeElement);\n }\n });\n }\n });\n }\n\n // ── Lifecycle ────────────────────────────────────────────────────────\n\n ngOnDestroy(): void {\n this.cleanupResizeListeners();\n for (const att of this.pendingAttachments) {\n if (att.previewUrl) {\n URL.revokeObjectURL(att.previewUrl);\n }\n }\n this.pendingAttachments = [];\n }\n\n // ── Keyboard ─────────────────────────────────────────────────────────\n\n /**\n * Enter küldés, Shift+Enter új sor.\n * Running alatt a default Enter a queueRequested-et emittálja (Stop külön gombbal).\n */\n handleKeyDown(event: KeyboardEvent): void {\n if (event.key !== 'Enter' || event.shiftKey) {\n return;\n }\n event.preventDefault();\n this.emitSendOrQueue();\n }\n\n // ── Send / Queue / Stop ──────────────────────────────────────────────\n\n /**\n * Send gomb kattintás (idle).\n */\n handleSendClick(): void {\n this.emitSendOrQueue();\n }\n\n /**\n * Queue gomb kattintás (running alatt látható, plusz input-send).\n */\n handleQueueClick(): void {\n this.emitSendOrQueue();\n }\n\n /**\n * Stop gomb kattintás.\n */\n handleStopClick(): void {\n if (this.isStopping()) {\n return;\n }\n this.stopRequested.emit();\n }\n\n // ── Textarea auto-grow ───────────────────────────────────────────────\n\n /**\n * Textarea input event — azonnali auto-grow (gyorsabb mint az effect + rAF).\n */\n handleTextareaInput(): void {\n if (this.isManualResize_$()) {\n return;\n }\n if (this.textareaElRef?.nativeElement) {\n this.adjustTextareaAutoGrow(this.textareaElRef.nativeElement);\n }\n }\n\n // ── Panel resize ─────────────────────────────────────────────────────\n\n /**\n * Resize handle pointerdown — drag indítás pointer capture-rel.\n */\n handleResizeStart(event: PointerEvent): void {\n event.preventDefault();\n const target: EventTarget | null = event.currentTarget;\n if (target instanceof HTMLElement) {\n target.setPointerCapture(event.pointerId);\n }\n this.resizeStartY = event.clientY;\n this.resizeStartHeight = this.elementRef.nativeElement.offsetHeight;\n\n this.resizeMoveCleanup = this.renderer.listen('document', 'pointermove', (e: PointerEvent): void => {\n this.handleResizeMove(e);\n });\n this.resizeUpCleanup = this.renderer.listen('document', 'pointerup', (): void => {\n if (target instanceof HTMLElement && target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n }\n this.cleanupResizeListeners();\n });\n this.resizeCancelCleanup = this.renderer.listen('document', 'pointercancel', (): void => {\n if (target instanceof HTMLElement && target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n }\n this.cleanupResizeListeners();\n });\n }\n\n /**\n * Resize handle duplakattintás — visszaállás auto módba.\n */\n handleResizeReset(): void {\n this.isManualResize_$.set(false);\n requestAnimationFrame(() => {\n if (this.textareaElRef?.nativeElement) {\n this.adjustTextareaAutoGrow(this.textareaElRef.nativeElement);\n }\n });\n }\n\n // ── Config dropdowns ─────────────────────────────────────────────────\n\n /** Mód dropdown toggle. */\n handleToggleModeDropdown(): void {\n this.closeAllDropdownsExcept('mode');\n this.isModeDropdownOpen_$.set(!this.isModeDropdownOpen_$());\n }\n\n /** Model dropdown toggle. */\n handleToggleModelDropdown(): void {\n this.closeAllDropdownsExcept('model');\n this.isModelDropdownOpen_$.set(!this.isModelDropdownOpen_$());\n }\n\n /** Effort dropdown toggle. */\n handleToggleEffortDropdown(): void {\n this.closeAllDropdownsExcept('effort');\n this.isEffortDropdownOpen_$.set(!this.isEffortDropdownOpen_$());\n }\n\n /** Mód kiválasztás. */\n handleSelectMode(mode: string): void {\n this.isModeDropdownOpen_$.set(false);\n this.modeChanged.emit(mode);\n }\n\n /** Model kiválasztás. */\n handleSelectModel(model: string): void {\n this.isModelDropdownOpen_$.set(false);\n this.modelChanged.emit(model);\n }\n\n /** Effort kiválasztás. */\n handleSelectEffort(effort: string): void {\n this.isEffortDropdownOpen_$.set(false);\n this.effortChanged.emit(effort);\n }\n\n // ── Attachments ──────────────────────────────────────────────────────\n\n /**\n * Fájl kiválasztás event kezelése (file input change).\n */\n async handleFilesSelected(event: Event): Promise<void> {\n const input: HTMLInputElement | null = event.target as HTMLInputElement | null;\n const list: FileList | null = input?.files ?? null;\n if (!list?.length) {\n return;\n }\n\n await this.addFiles(Array.from(list));\n\n if (input) {\n input.value = '';\n }\n }\n\n /**\n * Clipboard paste kezelése — ha kép van a vágólapon, csatolásként befogadjuk.\n */\n handlePaste(event: ClipboardEvent): void {\n if (!this.enableAttachments()) {\n return;\n }\n const items: DataTransferItemList | undefined = event.clipboardData?.items;\n if (!items?.length) {\n return;\n }\n\n const imageFiles: File[] = [];\n for (let i: number = 0; i < items.length; i++) {\n const item: DataTransferItem = items[i];\n if (item.kind === 'file' && IMAGE_MIME_PREFIXES.some(\n (prefix: string): boolean => item.type.toLowerCase().startsWith(prefix),\n )) {\n const file: File | null = item.getAsFile();\n if (file) {\n imageFiles.push(file);\n }\n }\n }\n\n if (imageFiles.length) {\n event.preventDefault();\n void this.addFiles(imageFiles);\n }\n }\n\n /**\n * Attachment eltávolítása.\n */\n handleRemoveAttachment(id: string): void {\n const found: CCAP_PendingAttachment_Interface | undefined =\n this.pendingAttachments.find(\n (a: CCAP_PendingAttachment_Interface): boolean => a.id === id,\n );\n if (found?.previewUrl) {\n URL.revokeObjectURL(found.previewUrl);\n }\n this.pendingAttachments = this.pendingAttachments.filter(\n (a: CCAP_PendingAttachment_Interface): boolean => a.id !== id,\n );\n this.attachmentsChanged.emit(this.pendingAttachments);\n }\n\n /**\n * Pending attachments törlése (szülő hívja küldés után).\n */\n clearAttachments(): void {\n for (const att of this.pendingAttachments) {\n if (att.previewUrl) {\n URL.revokeObjectURL(att.previewUrl);\n }\n }\n this.pendingAttachments = [];\n this.attachmentsChanged.emit(this.pendingAttachments);\n }\n\n // ── Privát ───────────────────────────────────────────────────────────\n\n /**\n * Küldés vagy queue-ba rakás — running alatt queueRequested, idle-ben sendRequested.\n * isSending közben nem engedjük (dupla request védelem); üres tartalom esetén sem.\n */\n private emitSendOrQueue(): void {\n if (this.isSending()) {\n return;\n }\n const hasText: boolean = (this.draftText() ?? '').trim().length > 0;\n const hasAttachments: boolean = this.pendingAttachments.length > 0;\n if (!hasText && !hasAttachments) {\n return;\n }\n if (this.isExecuting()) {\n this.queueRequested.emit();\n } else {\n this.sendRequested.emit();\n }\n }\n\n /**\n * Textarea magasság igazítása scrollHeight alapján (auto-grow mód).\n */\n private adjustTextareaAutoGrow(el: HTMLTextAreaElement): void {\n el.style.height = 'auto';\n const maxHeight: number = Math.round(window.innerHeight * TEXTAREA_AUTO_MAX_VH);\n const newHeight: number = Math.min(el.scrollHeight, maxHeight);\n el.style.height = newHeight + 'px';\n }\n\n /**\n * Resize drag mozgatás — panel magasság frissítés.\n */\n private handleResizeMove(event: PointerEvent): void {\n const wasManual: boolean = this.isManualResize_$();\n const delta: number = this.resizeStartY - event.clientY;\n const maxHeight: number = Math.round(window.innerHeight * 0.7);\n const newHeight: number = Math.max(PANEL_MIN_HEIGHT, Math.min(this.resizeStartHeight + delta, maxHeight));\n\n this.isManualResize_$.set(true);\n this.manualPanelHeight_$.set(newHeight);\n\n // Első resize mozgatás: inline auto-grow style törlés, hogy a h-full class érvényesüljön\n if (!wasManual && this.textareaElRef?.nativeElement) {\n this.textareaElRef.nativeElement.style.height = '';\n }\n }\n\n /**\n * Resize listener-ek eltávolítása (cleanup).\n */\n private cleanupResizeListeners(): void {\n if (this.resizeMoveCleanup) {\n this.resizeMoveCleanup();\n this.resizeMoveCleanup = null;\n }\n if (this.resizeUpCleanup) {\n this.resizeUpCleanup();\n this.resizeUpCleanup = null;\n }\n if (this.resizeCancelCleanup) {\n this.resizeCancelCleanup();\n this.resizeCancelCleanup = null;\n }\n }\n\n /**\n * Bezárja az összes dropdown-ot kivéve a megadottat.\n */\n private closeAllDropdownsExcept(except: string): void {\n if (except !== 'mode') {\n this.isModeDropdownOpen_$.set(false);\n }\n if (except !== 'model') {\n this.isModelDropdownOpen_$.set(false);\n }\n if (except !== 'effort') {\n this.isEffortDropdownOpen_$.set(false);\n }\n }\n\n /**\n * Fájlok hozzáadása a pending attachment listához (file input és clipboard paste közös logika).\n */\n private async addFiles(files: File[]): Promise<void> {\n const room: number = this.maxAttachmentCount() - this.pendingAttachments.length;\n if (room <= 0) {\n return;\n }\n\n const filesToProcess: File[] = files.slice(0, room);\n\n for (const file of filesToProcess) {\n try {\n const base64: string = await this.readFileToBase64(file);\n const isImage: boolean = IMAGE_MIME_PREFIXES.some(\n (prefix: string): boolean => file.type.toLowerCase().startsWith(prefix),\n );\n const id: string =\n typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function'\n ? crypto.randomUUID()\n : `att-${Date.now()}-${Math.random()}`;\n\n const attachment: CCAP_PendingAttachment_Interface = {\n id: id,\n fileName: file.name,\n mimeType: file.type || 'application/octet-stream',\n base64: base64,\n previewUrl: isImage ? URL.createObjectURL(file) : undefined,\n sizeBytes: file.size,\n isImage: isImage,\n };\n\n this.pendingAttachments = [...this.pendingAttachments, attachment];\n } catch {\n // FileReader hiba: kihagyjuk ezt a fájlt\n }\n }\n\n this.attachmentsChanged.emit(this.pendingAttachments);\n }\n\n /**\n * Fájl beolvasása base64-be.\n */\n private readFileToBase64(file: File): Promise<string> {\n return new Promise(\n (\n resolve: (v: string) => void,\n reject: (e: unknown) => void,\n ): void => {\n const reader: FileReader = new FileReader();\n reader.onload = (): void => {\n const dataUrl: string = String(reader.result ?? '');\n const commaIdx: number = dataUrl.indexOf(',');\n resolve(commaIdx >= 0 ? dataUrl.slice(commaIdx + 1) : dataUrl);\n };\n reader.onerror = (): void => {\n reject(reader.error);\n };\n reader.readAsDataURL(file);\n },\n );\n }\n}\n", "<!-- Resize handle — húzással méretezés; dupla kattintás = auto mód visszaállítás -->\n<div class=\"group flex items-center justify-center h-2.5 shrink-0 cursor-ns-resize select-none touch-none\"\n (pointerdown)=\"handleResizeStart($event)\"\n (dblclick)=\"handleResizeReset()\">\n <div class=\"w-8 h-0.5 rounded-full bg-neutral-600 transition-all\n group-hover:bg-neonCyan/50 group-hover:w-12\"></div>\n</div>\n\n<!-- Knight Rider scanner — agent futása közben a border-t vonalon sweepel -->\n@if (isExecuting()) {\n <div class=\"knight-rider-bar\"></div>\n}\n\n<div class=\"flex flex-col gap-2 p-2 flex-1 min-h-0\">\n <!-- Attachment preview sor -->\n @if (pendingAttachments.length) {\n <div class=\"flex flex-wrap gap-2\">\n @for (att of pendingAttachments; track att.id) {\n @if (att.isImage && att.previewUrl) {\n <div class=\"relative w-14 h-14 rounded border border-neonDefault overflow-hidden shrink-0\">\n <img [src]=\"att.previewUrl\" alt=\"\" class=\"w-full h-full object-cover\" />\n <button type=\"button\"\n class=\"absolute top-0 right-0 w-4 h-4 text-[10px] leading-4 bg-black/70 text-white border-0 cursor-pointer\"\n (click)=\"handleRemoveAttachment(att.id)\">\n ×\n </button>\n </div>\n } @else {\n <div class=\"relative flex items-center gap-1 px-2 py-1 rounded border border-neonDefault text-[10px] text-neutral-400 shrink-0 max-w-[140px]\">\n <svg class=\"w-3 h-3 shrink-0 opacity-60\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M7 1H3a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V4L7 1z\" stroke=\"currentColor\" stroke-width=\"1\"/>\n <polyline points=\"7 1 7 4 10 4\" stroke=\"currentColor\" stroke-width=\"1\"/>\n </svg>\n <span class=\"truncate\">{{ att.fileName }}</span>\n <button type=\"button\"\n class=\"ml-auto w-3 h-3 text-[10px] leading-3 text-neutral-500 hover:text-white cursor-pointer shrink-0\"\n (click)=\"handleRemoveAttachment(att.id)\">\n ×\n </button>\n </div>\n }\n }\n </div>\n }\n\n <!-- Queue panel (textarea fölött) -->\n @if (queueItems().length) {\n <div class=\"flex flex-col gap-1 rounded border border-neutral-700/50 bg-neutral-900/60 p-2 text-[11px]\">\n <div class=\"flex items-center gap-1.5 text-neutral-500 font-medium mb-0.5\">\n <svg class=\"w-3 h-3 opacity-60\" viewBox=\"0 0 12 12\" fill=\"none\">\n <rect x=\"1\" y=\"1\" width=\"10\" height=\"3\" rx=\"0.5\" stroke=\"currentColor\" stroke-width=\"0.8\"/>\n <rect x=\"1\" y=\"5\" width=\"10\" height=\"3\" rx=\"0.5\" stroke=\"currentColor\" stroke-width=\"0.8\" opacity=\"0.6\"/>\n <rect x=\"1\" y=\"9\" width=\"10\" height=\"3\" rx=\"0.5\" stroke=\"currentColor\" stroke-width=\"0.8\" opacity=\"0.3\"/>\n </svg>\n <span>Queued ({{ queueItems().length }})</span>\n @if (isQueueLocked()) {\n <span class=\"ml-1 rounded bg-neonAmber/15 px-1 py-px text-[9px] font-semibold text-neonAmber uppercase tracking-wider\">Editing</span>\n }\n </div>\n\n <!-- REQ-UI-QUEUE-001: a queue lista magassága korlátolt + görgethető, ha sok elem van. -->\n <div class=\"flex flex-col gap-1 max-h-[280px] overflow-y-auto overscroll-contain pr-1\">\n @for (item of queueItems(); track item.queueItemId) {\n <div class=\"flex items-start gap-1.5 rounded px-2 py-1.5 transition-colors\"\n [class]=\"editingQueueItemId() === item.queueItemId\n ? 'bg-neutral-800 border border-neonAmber/30'\n : 'bg-neutral-800/40 hover:bg-neutral-800/70'\">\n\n @if (editingQueueItemId() === item.queueItemId) {\n <!-- Edit mód -->\n <textarea\n class=\"flex-1 min-h-[36px] max-h-[100px] resize-none rounded border border-neutral-600 bg-neutral-900\n px-2 py-1 text-[11px] text-neutral-200 focus:border-neonAmber focus:outline-none\"\n rows=\"2\"\n [ngModel]=\"editingQueueText()\"\n (ngModelChange)=\"queueEditTextChange.emit($event)\">\n </textarea>\n <div class=\"flex flex-col gap-1 shrink-0\">\n <button type=\"button\"\n class=\"px-1.5 py-0.5 text-[10px] rounded bg-neonAmber/20 text-neonAmber hover:bg-neonAmber/30 transition-colors cursor-pointer\"\n (click)=\"queueEditSave.emit()\">\n Save\n </button>\n <button type=\"button\"\n class=\"px-1.5 py-0.5 text-[10px] rounded text-neutral-500 hover:text-neutral-300 hover:bg-neutral-700 transition-colors cursor-pointer\"\n (click)=\"queueEditCancel.emit()\">\n Cancel\n </button>\n </div>\n } @else {\n <!-- Read mód -->\n <span class=\"flex-1 text-neutral-300 break-words whitespace-pre-wrap leading-relaxed\">{{ item.text }}</span>\n <div class=\"flex items-center gap-1 shrink-0 opacity-0 group-hover:opacity-100 transition-opacity\"\n [class.opacity-100]=\"true\">\n <!-- Reorder gombok (fel/le) -->\n <button type=\"button\"\n class=\"px-1 py-0.5 text-[10px] rounded text-neutral-500 hover:text-neutral-200 hover:bg-neutral-700 transition-colors cursor-pointer disabled:opacity-30 disabled:cursor-not-allowed\"\n [disabled]=\"isQueueLocked() || $first\"\n (click)=\"queueMoveUp.emit(item.queueItemId)\"\n title=\"Move up\">\n <svg class=\"w-3 h-3\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M6 3L3 7h6L6 3z\" fill=\"currentColor\"/>\n </svg>\n </button>\n <button type=\"button\"\n class=\"px-1 py-0.5 text-[10px] rounded text-neutral-500 hover:text-neutral-200 hover:bg-neutral-700 transition-colors cursor-pointer disabled:opacity-30 disabled:cursor-not-allowed\"\n [disabled]=\"isQueueLocked() || $last\"\n (click)=\"queueMoveDown.emit(item.queueItemId)\"\n title=\"Move down\">\n <svg class=\"w-3 h-3\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M6 9L3 5h6L6 9z\" fill=\"currentColor\"/>\n </svg>\n </button>\n <button type=\"button\"\n class=\"px-1.5 py-0.5 text-[10px] rounded text-neutral-500 hover:text-neutral-200 hover:bg-neutral-700 transition-colors cursor-pointer disabled:opacity-30 disabled:cursor-not-allowed\"\n [disabled]=\"isQueueLocked()\"\n (click)=\"queueEditStart.emit(item.queueItemId)\">\n Edit\n </button>\n <button type=\"button\"\n class=\"px-1.5 py-0.5 text-[10px] rounded text-neutral-500 hover:text-red-400 hover:bg-red-950/30 transition-colors cursor-pointer disabled:opacity-30 disabled:cursor-not-allowed\"\n [disabled]=\"isQueueLocked()\"\n (click)=\"queueRemoveItem.emit(item.queueItemId)\">\n ×\n </button>\n <button type=\"button\"\n class=\"px-1.5 py-0.5 text-[10px] rounded text-neutral-500 hover:text-neonCyan hover:bg-neonCyan/10 transition-colors cursor-pointer disabled:opacity-30 disabled:cursor-not-allowed\"\n [disabled]=\"isQueueLocked()\"\n (click)=\"queueSendNow.emit(item.queueItemId)\">\n Send Now\n </button>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Textarea + send/stop gomb egymás mellett -->\n <div class=\"flex gap-2\"\n [class.flex-1]=\"isManualResize_$()\"\n [class.min-h-0]=\"isManualResize_$()\">\n <!-- Textarea -->\n <div class=\"relative min-w-0 flex-1\"\n [class.min-h-0]=\"isManualResize_$()\">\n <textarea\n #textareaEl\n class=\"min-h-[60px] w-full resize-none rounded border border-neutral-700 bg-neutral-800\n px-3 py-2 text-sm text-neutral-200 placeholder-neutral-600\n focus:border-ccapAccent focus:outline-none\"\n [class.h-full]=\"isManualResize_$()\"\n [attr.rows]=\"textareaRows()\"\n [placeholder]=\"placeholder()\"\n [ngModel]=\"draftText()\"\n (ngModelChange)=\"draftTextChange.emit($event)\"\n (input)=\"handleTextareaInput()\"\n (keydown)=\"handleKeyDown($event)\"\n (paste)=\"handlePaste($event)\">\n </textarea>\n </div>\n\n <!-- Voice (felül) + Send/Stop+Queue (alul) — textarea jobb oldalán, space-between; gap-2 minimum távolság, hogy alacsony panelnél se csúsztanak össze -->\n <div class=\"shrink-0 self-stretch flex flex-col items-center justify-between gap-2\">\n <ng-content select=\"[sInputTextareaAccessory]\"></ng-content>\n @if (isExecuting()) {\n <!-- Running: Queue (amber, felül — ez az új default Enter target) + Stop (piros, alul — execution leállítás) -->\n <div class=\"flex flex-col items-center gap-1.5\">\n <!-- Queue gomb: paper-plane + \"+\" badge a jobb-alsó sarokban; Enter is ezt hívja futás közben -->\n <button\n type=\"button\"\n class=\"flex items-center justify-center min-w-[44px] min-h-[44px] w-10 h-10 rounded-full shrink-0\n bg-neutral-900 border-2 border-neonAmber/60 text-neonAmber\n hover:border-neonAmber hover:shadow-neon-glow-amber hover:bg-neonAmber/10 transition-all duration-200 disabled:opacity-40\n focus:outline-none focus:ring-2 focus:ring-neonAmber focus:ring-offset-2 focus:ring-offset-neutral-900\"\n [disabled]=\"isSending()\"\n (click)=\"handleQueueClick()\"\n aria-label=\"Add to queue\"\n title=\"Add to queue (Enter)\">\n @if (isSending()) {\n <span class=\"inline-block w-5 h-5 shrink-0 animate-spin rounded-full border-2 border-neonAmber/40 border-t-neonAmber\"\n aria-hidden=\"true\"></span>\n } @else {\n <svg class=\"w-5 h-5 shrink-0\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <!-- Paper-plane — kisebb, bal-felső orientációjú, hogy helyet adjon a plus badge-nek -->\n <polygon points=\"18 3 2 9 9 12 18 3\" />\n <polyline points=\"18 3 11 19 9 12\" />\n <!-- Plus jel — jobb-alsó sarokban, jelzi a „queue-hoz adás\" szemantikát -->\n <line x1=\"19\" y1=\"15\" x2=\"19\" y2=\"21\" />\n <line x1=\"16\" y1=\"18\" x2=\"22\" y2=\"18\" />\n </svg>\n }\n </button>\n <!-- Stop gomb: a Queue gomb FELE akkora (20×20 px vs 40×40 px), mert\n a Stop kevésbé gyakori akció és a Queue legyen a domináns Enter-target. -->\n <button\n type=\"button\"\n class=\"flex items-center justify-center w-5 h-5 rounded-full shrink-0\n bg-neutral-900 border border-neonRed/50 text-red-300\n hover:border-neonRed hover:shadow-neon-glow-red transition-all duration-200 disabled:opacity-40\n focus:outline-none focus:ring-2 focus:ring-neonRed focus:ring-offset-2 focus:ring-offset-neutral-900\"\n [disabled]=\"isStopping()\"\n (click)=\"handleStopClick()\"\n [attr.aria-label]=\"isStopping() ? 'Stopping…' : 'Stop'\"\n [attr.title]=\"isStopping() ? 'Stopping…' : 'Stop'\">\n @if (isStopping()) {\n <span class=\"inline-block w-2.5 h-2.5 shrink-0 animate-spin rounded-full border border-neonRed/40 border-t-neonRed\"\n aria-hidden=\"true\"></span>\n } @else {\n <svg class=\"w-2.5 h-2.5 shrink-0\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\" />\n </svg>\n }\n </button>\n </div>\n } @else {\n <!-- Idle: sima Send gomb -->\n <button\n type=\"button\"\n class=\"flex items-center justify-center min-w-[44px] min-h-[44px] w-10 h-10 rounded-full shrink-0\n bg-ccapAccent text-black transition-all duration-200 disabled:opacity-50\n hover:bg-ccapAccent/80 hover:shadow-neon-glow-cyan\n focus:outline-none focus:ring-2 focus:ring-ccapAccent focus:ring-offset-2 focus:ring-offset-neutral-900\"\n [disabled]=\"isSending()\"\n (click)=\"handleSendClick()\"\n aria-label=\"Send\"\n title=\"Send\">\n @if (isSending()) {\n <span class=\"inline-block w-5 h-5 shrink-0 animate-spin rounded-full border-2 border-black/40 border-t-black\"\n aria-hidden=\"true\"></span>\n } @else {\n <svg class=\"w-5 h-5 shrink-0\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\" />\n <polygon points=\"22 2 15 22 11 13 2 9 22 2\" />\n </svg>\n }\n </button>\n }\n </div>\n </div>\n\n <!-- Alsó sor: attach + config dropdownok -->\n <div class=\"flex flex-wrap items-center gap-2 text-[11px] shrink-0\">\n <!-- Attach gomb -->\n @if (enableAttachments()) {\n <label class=\"flex items-center gap-1 px-2 py-1 rounded border border-neutral-700\n text-neutral-400 hover:text-neutral-300 hover:border-neutral-600\n cursor-pointer transition-colors shrink-0\">\n <svg class=\"w-3 h-3 opacity-60\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M10.5 5.5l-4.3 4.3a2.5 2.5 0 0 1-3.5-3.5L7 2a1.7 1.7 0 0 1 2.4 2.4L5.1 8.7a.8.8 0 0 1-1.2-1.2L7.5 4\" stroke=\"currentColor\" stroke-width=\"1\" stroke-linecap=\"round\"/>\n </svg>\n Attach\n <input type=\"file\"\n class=\"sr-only\"\n [accept]=\"acceptedFileTypes()\"\n multiple\n (change)=\"handleFilesSelected($event)\" />\n </label>\n }\n\n <!-- Mode dropdown -->\n @if (modeOptions().length) {\n <div class=\"relative\">\n <button\n type=\"button\"\n class=\"flex items-center gap-1 px-2 py-0.5 rounded border transition-colors cursor-pointer\"\n [class]=\"isModeDropdownOpen_$()\n ? 'border-neonCyan/50 text-neonCyan bg-neonCyan/10'\n : 'border-neutral-700 text-neutral-400 hover:text-neutral-300 hover:border-neutral-600'\"\n (click)=\"handleToggleModeDropdown()\"\n [attr.aria-label]=\"'Mode: ' + selectedMode()\">\n <!-- REQ-MOBILE-INPUT-COMPACT-001 (cycle 440): label + ':' rejtve mobile-on, csak value. -->\n <span class=\"uppercase font-medium tracking-wide hidden gt-xs:inline\">Mode</span>\n <span class=\"text-neutral-500 mx-0.5 hidden gt-xs:inline\">:</span>\n <span class=\"capitalize\">{{ selectedMode() }}</span>\n <svg class=\"w-3 h-3 ml-0.5 opacity-50\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M3 5l3 3 3-3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n </button>\n @if (isModeDropdownOpen_$()) {\n <div class=\"absolute bottom-full left-0 mb-1 bg-neutral-900 border border-neutral-700 rounded-lg shadow-lg overflow-hidden z-20 min-w-[100px]\">\n @for (mode of modeOptions(); track mode) {\n <button\n type=\"button\"\n class=\"w-full text-left px-3 py-1.5 text-[11px] capitalize transition-colors cursor-pointer\"\n [class]=\"mode === selectedMode()\n ? 'text-neonCyan bg-neonCyan/10'\n : 'text-neutral-400 hover:text-neutral-200 hover:bg-neutral-800'\"\n (click)=\"handleSelectMode(mode)\">\n {{ mode }}\n </button>\n }\n </div>\n }\n </div>\n }\n\n <!-- Model dropdown -->\n @if (modelOptions().length) {\n <div class=\"relative\">\n <button\n type=\"button\"\n class=\"flex items-center gap-1 px-2 py-0.5 rounded border transition-colors cursor-pointer\"\n [class]=\"isModelDropdownOpen_$()\n ? 'border-neonAmber/50 text-neonAmber bg-neonAmber/10'\n : 'border-neutral-700 text-neutral-400 hover:text-neutral-300 hover:border-neutral-600'\"\n (click)=\"handleToggleModelDropdown()\"\n [attr.aria-label]=\"'Model: ' + selectedModel()\">\n <!-- REQ-MOBILE-INPUT-COMPACT-001 (cycle 440): label + ':' rejtve mobile-on, csak value. -->\n <span class=\"uppercase font-medium tracking-wide hidden gt-xs:inline\">Model</span>\n <span class=\"text-neutral-500 mx-0.5 hidden gt-xs:inline\">:</span>\n <span class=\"capitalize\">{{ selectedModel() }}</span>\n <svg class=\"w-3 h-3 ml-0.5 opacity-50\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M3 5l3 3 3-3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n </button>\n @if (isModelDropdownOpen_$()) {\n <div class=\"absolute bottom-full left-0 mb-1 bg-neutral-900 border border-neutral-700 rounded-lg shadow-lg overflow-hidden z-20 min-w-[100px]\">\n @for (model of modelOptions(); track model) {\n <button\n type=\"button\"\n class=\"w-full text-left px-3 py-1.5 text-[11px] capitalize transition-colors cursor-pointer\"\n [class]=\"model === selectedModel()\n ? 'text-neonAmber bg-neonAmber/10'\n : 'text-neutral-400 hover:text-neutral-200 hover:bg-neutral-800'\"\n (click)=\"handleSelectModel(model)\">\n {{ model }}\n </button>\n }\n </div>\n }\n </div>\n }\n\n <!-- Effort dropdown -->\n @if (effortOptions().length) {\n <div class=\"relative\">\n <button\n type=\"button\"\n class=\"flex items-center gap-1 px-2 py-0.5 rounded border transition-colors cursor-pointer\"\n [class]=\"isEffortDropdownOpen_$()\n ? 'border-neonPurple/50 text-neonPurple bg-neonPurple/10'\n : 'border-neutral-700 text-neutral-400 hover:text-neutral-300 hover:border-neutral-600'\"\n (click)=\"handleToggleEffortDropdown()\"\n [attr.aria-label]=\"'Effort: ' + selectedEffort()\">\n <!-- REQ-MOBILE-INPUT-COMPACT-001 (cycle 440): label + ':' rejtve mobile-on, csak value. -->\n <span class=\"uppercase font-medium tracking-wide hidden gt-xs:inline\">Effort</span>\n <span class=\"text-neutral-500 mx-0.5 hidden gt-xs:inline\">:</span>\n <span class=\"capitalize\">{{ selectedEffort() }}</span>\n <svg class=\"w-3 h-3 ml-0.5 opacity-50\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M3 5l3 3 3-3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n </button>\n @if (isEffortDropdownOpen_$()) {\n <div class=\"absolute bottom-full left-0 mb-1 bg-neutral-900 border border-neutral-700 rounded-lg shadow-lg overflow-hidden z-20 min-w-[100px]\">\n @for (effort of effortOptions(); track effort) {\n <button\n type=\"button\"\n class=\"w-full text-left px-3 py-1.5 text-[11px] capitalize transition-colors cursor-pointer\"\n [class]=\"effort === selectedEffort()\n ? 'text-neonPurple bg-neonPurple/10'\n : 'text-neutral-400 hover:text-neutral-200 hover:bg-neutral-800'\"\n (click)=\"handleSelectEffort(effort)\">\n {{ effort }}\n </button>\n }\n </div>\n }\n </div>\n }\n\n <div class=\"flex-1\"></div>\n\n <!-- Usage kijelzés (token szám / cost) -->\n @if (usageText()) {\n <div class=\"flex items-center gap-1.5 text-neutral-500 shrink-0\">\n <svg class=\"w-3 h-3 opacity-60\" viewBox=\"0 0 12 12\" fill=\"none\">\n <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1\"/>\n <path d=\"M6 3v3.5l2 1.5\" stroke=\"currentColor\" stroke-width=\"1\" stroke-linecap=\"round\"/>\n </svg>\n <span>{{ usageText() }}</span>\n </div>\n }\n </div>\n</div>\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["S_SessionShellToolbar_Component", "selectors", "hostAttrs", "standalone", "features", "\u0275\u0275StandaloneFeature", "ngContentSelectors", "_c1", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275elementStart", "\u0275\u0275projection", "\u0275\u0275elementEnd", "CommonModule", "encapsulation", "\u0275\u0275elementStart", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r1", "ctx_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "mobileBackdropClicked", "emit", "\u0275\u0275elementEnd", "\u0275\u0275projection", "$event", "_r3", "sidebarResizeStart", "\u0275\u0275styleProp", "sidebarWidthPx", "S_ResizableSessionShellLayout_Component", "isSidebarOpen", "input", "isResizing", "output", "isMobileBackdropActive", "selectors", "hostAttrs", "inputs", "outputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "ngContentSelectors", "_c1", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275template", "S_ResizableSessionShellLayout_Component_Conditional_0_Template", "S_ResizableSessionShellLayout_Component_Conditional_1_Template", "\u0275\u0275conditional", "\u0275\u0275advance", "CommonModule", "encapsulation", "\u0275\u0275element", "\u0275\u0275elementStart", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r2", "att_r3", "\u0275\u0275nextContext", "$implicit", "ctx_r3", "\u0275\u0275resetView", "handleRemoveAttachment", "id", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275property", "previewUrl", "\u0275\u0275sanitizeUrl", "_r5", "\u0275\u0275textInterpolate", "fileName", "\u0275\u0275template", "S_SessionInput_Component_Conditional_4_For_2_Conditional_0_Template", "S_SessionInput_Component_Conditional_4_For_2_Conditional_1_Template", "\u0275\u0275conditional", "isImage", "\u0275\u0275repeaterCreate", "S_SessionInput_Component_Conditional_4_For_2_Template", "_forTrack0", "\u0275\u0275repeater", "pendingAttachments", "$event", "_r6", "queueEditTextChange", "emit", "queueEditSave", "queueEditCancel", "editingQueueText", "_r7", "item_r8", "queueMoveUp", "queueItemId", "queueMoveDown", "queueEditStart", "queueRemoveItem", "queueSendNow", "text", "\u0275\u0275classProp", "isQueueLocked", "\u0275$index_59_r10", "\u0275$count_59_r11", "S_SessionInput_Component_Conditional_5_For_11_Conditional_1_Template", "S_SessionInput_Component_Conditional_5_For_11_Conditional_2_Template", "\u0275\u0275classMap", "editingQueueItemId", "S_SessionInput_Component_Conditional_5_Conditional_8_Template", "S_SessionInput_Component_Conditional_5_For_11_Template", "_forTrack1", "\u0275\u0275textInterpolate1", "queueItems", "length", "_r12", "handleQueueClick", "S_SessionInput_Component_Conditional_13_Conditional_2_Template", "S_SessionInput_Component_Conditional_13_Conditional_3_Template", "handleStopClick", "S_SessionInput_Component_Conditional_13_Conditional_5_Template", "S_SessionInput_Component_Conditional_13_Conditional_6_Template", "isSending", "isStopping", "_r13", "handleSendClick", "S_SessionInput_Component_Conditional_14_Conditional_1_Template", "S_SessionInput_Component_Conditional_14_Conditional_2_Template", "_r14", "handleFilesSelected", "acceptedFileTypes", "mode_r17", "_r16", "handleSelectMode", "selectedMode", "S_SessionInput_Component_Conditional_17_Conditional_10_For_2_Template", "\u0275\u0275repeaterTrackByIdentity", "modeOptions", "_r15", "handleToggleModeDropdown", "S_SessionInput_Component_Conditional_17_Conditional_10_Template", "isModeDropdownOpen_$", "model_r20", "_r19", "handleSelectModel", "selectedModel", "S_SessionInput_Component_Conditional_18_Conditional_10_For_2_Template", "modelOptions", "_r18", "handleToggleModelDropdown", "S_SessionInput_Component_Conditional_18_Conditional_10_Template", "isModelDropdownOpen_$", "effort_r23", "_r22", "handleSelectEffort", "selectedEffort", "S_SessionInput_Component_Conditional_19_Conditional_10_For_2_Template", "effortOptions", "_r21", "handleToggleEffortDropdown", "S_SessionInput_Component_Conditional_19_Conditional_10_Template", "isEffortDropdownOpen_$", "usageText", "IMAGE_MIME_PREFIXES", "PANEL_MIN_HEIGHT", "TEXTAREA_AUTO_MAX_VH", "S_SessionInput_Component", "elementRef", "renderer", "draftText", "input", "placeholder", "textareaRows", "draftTextChange", "output", "isExecuting", "enableAttachments", "maxAttachmentCount", "sendRequested", "queueRequested", "stopRequested", "modeChanged", "modelChanged", "effortChanged", "attachmentsChanged", "signal", "isManualResize_$", "manualPanelHeight_$", "textareaElRef", "resizeStartY", "resizeStartHeight", "resizeMoveCleanup", "resizeUpCleanup", "resizeCancelCleanup", "hostHeightPx", "undefined", "constructor", "effect", "requestAnimationFrame", "nativeElement", "adjustTextareaAutoGrow", "ngOnDestroy", "cleanupResizeListeners", "att", "URL", "revokeObjectURL", "handleKeyDown", "event", "key", "shiftKey", "preventDefault", "emitSendOrQueue", "handleTextareaInput", "handleResizeStart", "target", "currentTarget", "HTMLElement", "setPointerCapture", "pointerId", "clientY", "offsetHeight", "listen", "e", "handleResizeMove", "hasPointerCapture", "releasePointerCapture", "handleResizeReset", "set", "closeAllDropdownsExcept", "mode", "model", "effort", "__async", "list", "files", "addFiles", "Array", "from", "value", "handlePaste", "items", "clipboardData", "imageFiles", "i", "item", "kind", "some", "prefix", "type", "toLowerCase", "startsWith", "file", "getAsFile", "push", "found", "find", "a", "filter", "clearAttachments", "hasText", "trim", "hasAttachments", "el", "style", "height", "maxHeight", "Math", "round", "window", "innerHeight", "newHeight", "min", "scrollHeight", "wasManual", "delta", "max", "except", "room", "filesToProcess", "slice", "base64", "readFileToBase64", "attachment", "crypto", "randomUUID", "Date", "now", "random", "name", "mimeType", "createObjectURL", "sizeBytes", "size", "Promise", "resolve", "reject", "reader", "FileReader", "onload", "dataUrl", "String", "result", "commaIdx", "indexOf", "onerror", "error", "readAsDataURL", "\u0275\u0275directiveInject", "ElementRef", "Renderer2", "selectors", "viewQuery", "rf", "ctx", "\u0275\u0275styleProp", "i0", "_r1", "S_SessionInput_Component_Conditional_2_Template", "S_SessionInput_Component_Conditional_4_Template", "S_SessionInput_Component_Conditional_5_Template", "\u0275\u0275projection", "S_SessionInput_Component_Conditional_13_Template", "S_SessionInput_Component_Conditional_14_Template", "S_SessionInput_Component_Conditional_16_Template", "S_SessionInput_Component_Conditional_17_Template", "S_SessionInput_Component_Conditional_18_Template", "S_SessionInput_Component_Conditional_19_Template", "S_SessionInput_Component_Conditional_21_Template", "CommonModule", "FormsModule", "DefaultValueAccessor", "NgControlStatus", "NgModel", "styles"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{b as c}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{b as c}from"./chunk-QTFJL2CG.js";import{I as d,p as h}from"./chunk-TGIQ5T5X.js";import{C as l,aa as o,h as u,k as r,y as s}from"./chunk-TBMJSIBB.js";var e=function(t){return t.idle="idle",t.downloading="downloading",t.installing="installing",t.completed="completed",t.failed="failed",t}(e||{});var p=u(h());function m(){return typeof window.Capacitor<"u"&&window.Capacitor.isNativePlatform?.()===!0}function w(){let a=window.Capacitor?.Plugins?.AppUpdater;return a||null}var y=(()=>{class t{versionCheck_CS=l(c);downloadUrl=d.api.baseUrl+"/mobile/download";phase_$=o(e.idle);lastError_$=o("");startUpdate(){return r(this,null,function*(){let n=this.phase_$();if(!(n===e.downloading||n===e.installing)){this.lastError_$.set(""),this.phase_$.set(e.downloading);try{let i=w();if(i){this.phase_$.set(e.installing),yield i.downloadAndInstall({downloadUrl:this.downloadUrl}),this.phase_$.set(e.completed);return}this.openInSystemBrowser(this.downloadUrl),this.phase_$.set(e.completed)}catch(i){let f=i instanceof Error?i.message:String(i);this.lastError_$.set(f),this.phase_$.set(e.failed),p.DyFM_Error.logSimple("CCAP_MobileAppUpdater | startUpdate failed",i)}}})}autoUpdateIfAvailable(){return r(this,null,function*(){m()&&(yield this.versionCheck_CS.checkNow(),this.versionCheck_CS.updateAvailable_$()&&(yield this.startUpdate()))})}openInSystemBrowser(n){window.open(n,"_system")}static \u0275fac=function(i){return new(i||t)};static \u0275prov=s({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();export{e as a,y as b};
|
|
2
|
+
//# sourceMappingURL=chunk-CVKT3VCR.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{I as d}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{I as d}from"./chunk-TGIQ5T5X.js";import{C as o,p as n,xb as l,y as s}from"./chunk-TBMJSIBB.js";var p=(()=>{class r{baseUrl=`${d.api.baseUrl}/model-registry`;http=o(l);getList(e){let t=new URLSearchParams;e?.provider!==void 0&&e.provider.trim()!==""&&t.set("provider",e.provider.trim()),e?.modelName!==void 0&&e.modelName.trim()!==""&&t.set("modelName",e.modelName.trim()),e?.enabled===!0?t.set("enabled","true"):e?.enabled===!1&&t.set("enabled","false"),e?.inactiveProviderOnly===!0&&t.set("inactiveProviderOnly","true");let i=t.toString(),u=`${this.baseUrl}/list${i!==""?`?${i}`:""}`;return n(this.http.get(u))}sync(){return n(this.http.post(`${this.baseUrl}/sync`,{}))}setEnabled(e,t){return n(this.http.patch(`${this.baseUrl}/patch/${encodeURIComponent(e)}`,{enabled:t}))}patchEntry(e,t){let i={};return t.enabled!==void 0&&(i.enabled=t.enabled),t.reasoningLevelForTest!==void 0&&(i.reasoningLevelForTest=t.reasoningLevelForTest),t.capabilities!==void 0&&(i.capabilities=t.capabilities),n(this.http.patch(`${this.baseUrl}/patch/${encodeURIComponent(e)}`,i))}bulkSetEnabled(e,t){return n(this.http.patch(`${this.baseUrl}/bulk-enabled`,{ids:e,enabled:t}))}deleteEntry(e){return n(this.http.delete(`${this.baseUrl}/entry/${encodeURIComponent(e)}`))}deleteEntries(e){return n(this.http.post(`${this.baseUrl}/delete-entries`,{ids:e}))}getTestResults(e){let t=new URLSearchParams;e.provider&&t.set("provider",e.provider),e.model&&t.set("model",e.model),e.limit!==void 0&&t.set("limit",String(e.limit)),e.reasoningLevel!==void 0&&e.reasoningLevel.trim()!==""&&t.set("reasoningLevel",e.reasoningLevel.trim());let i=t.toString();return n(this.http.get(`${this.baseUrl}/test-results${i?`?${i}`:""}`))}getPrompts(){return n(this.http.get(`${this.baseUrl}/prompts`))}startTestRun(e,t){let i={modelIds:e};return t!==void 0&&t.length>0&&(i.promptIds=t),n(this.http.post(`${this.baseUrl}/test-run`,i))}getTestRunStatus(e){return n(this.http.get(`${this.baseUrl}/test-run/${e}`))}static \u0275fac=function(t){return new(t||r)};static \u0275prov=s({token:r,factory:r.\u0275fac,providedIn:"root"})}return r})();export{p as a};
|
|
2
|
+
//# sourceMappingURL=chunk-DVUUFWKQ.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as k}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as k}from"./chunk-XIP3DG7D.js";import{a as C}from"./chunk-V3VQWJQL.js";import{I as U,L as P,t as A}from"./chunk-TGIQ5T5X.js";import{C as h,k as m,p as a,xb as M,y as b}from"./chunk-TBMJSIBB.js";var y=class{static readLlmCloudBucketsFromSectionResponse(n){return{anthropicLlm:v(n.anthropicSettings,{includeBaseUrl:!1}),googleLlm:v(n.googleSettings,{includeBaseUrl:!1}),deepseekLlm:v(n.deepseekSettings,{includeBaseUrl:!1}),fdpaiLlm:v(n.fdpaiSettings,{includeBaseUrl:!0})}}};function v(s,n){if(s==null||typeof s!="object"||Array.isArray(s))return{enabled:!1,defaultModel:"",baseUrl:"",apiKey:"",apiKeyMasked:""};let e=Reflect.get(s,"defaultModel"),o=Reflect.get(s,"apiKeyMasked"),i=Reflect.get(s,"baseUrl");return{enabled:Reflect.get(s,"enabled")===!0,defaultModel:typeof e=="string"?e:"",baseUrl:n.includeBaseUrl&&typeof i=="string"?i:"",apiKey:"",apiKeyMasked:typeof o=="string"?o:""}}var L=class{static parseLlmSettingsSectionForUi(n){let e=n.openAiSettings,o=!1,i="gpt-4o";if(e!=null&&typeof e=="object"&&!Array.isArray(e)){o=Reflect.get(e,"enabled")===!0;let t=Reflect.get(e,"defaultModel");typeof t=="string"&&(i=t)}let c=(Array.isArray(n.localAiSettings)?n.localAiSettings:[]).filter(t=>t!=null&&typeof t=="object"&&!Array.isArray(t)).map(t=>{let g=typeof t.key=="string"?t.key.trim():"";if(!g.length)return null;let S=typeof t.name=="string"?t.name:"",$=k.build({localAiKey:g}),T=S.trim().length>0?S.trim():"Local AI",_=t.enabled!==!1;return{id:$,baseUrl:(typeof t.baseUrl=="string"?t.baseUrl:"").trim(),model:(typeof t.defaultModel=="string"?t.defaultModel:"").trim(),label:T,enabled:_}}).filter(t=>t!=null),d=y.readLlmCloudBucketsFromSectionResponse(n),l=[];o&&l.push("open-ai"),d.anthropicLlm.enabled&&l.push("anthropic"),d.googleLlm.enabled&&l.push("google"),d.deepseekLlm.enabled&&l.push("deepseek"),d.fdpaiLlm.enabled&&l.push("fdp-ai");for(let t of c)t.enabled&&l.push(t.id);l.length===0&&l.push("open-ai");let F=c.map(t=>({id:t.id,label:t.label})),V=l.map(t=>({value:t,label:C.resolve(t,F)})),p=typeof n.defaultLlmProvider=="string"?n.defaultLlmProvider:"open-ai",u="";if(p==="open-ai")u=i;else if(p==="anthropic")u=d.anthropicLlm.defaultModel;else if(p==="google")u=d.googleLlm.defaultModel;else if(p==="deepseek")u=d.deepseekLlm.defaultModel;else if(p==="fdp-ai")u=d.fdpaiLlm.defaultModel;else{let t=c.find(g=>g.id===p);t&&(u=t.model)}return{enabledLlmProviderIds:l,llmProviderSelectOptions:V,defaultLlmProvider:p.trim(),defaultLlmModel:u.trim()}}};var I=(()=>{class s{baseUrl=`${U.api.baseUrl}/voice`;http=h(M);fetchVoiceNotesPoc(){return a(this.http.get(`${this.baseUrl}/poc/get-notes`))}fetchVoiceNotesQaSettings(){return a(this.http.get(`${this.baseUrl}/notes/qa-settings`))}saveVoiceNotesQaSettings(e){return a(this.http.put(`${this.baseUrl}/notes/qa-settings`,e,{headers:{"Content-Type":"application/json"}}))}saveVoiceNotesPoc(e){return a(this.http.put(`${this.baseUrl}/notes/poc`,e))}transcribeVoiceChunk(e){let o={qa:e.qaEnabled===!0?"1":"0",skip_classification:e.skipClassification!==!1?"true":"false"};e.confidenceThreshold!==void 0&&(o.confidence_threshold=String(e.confidenceThreshold)),e.noteContext!==void 0&&(o.note_context=e.noteContext);let i=Object.keys(o).map(c=>`${encodeURIComponent(c)}=${encodeURIComponent(o[c])}`).join("&"),f=`${this.baseUrl}/notes/transcribe${i?`?${i}`:""}`,r={"Content-Type":e.mimeType,Filename:e.filename};return a(this.http.post(f,e.blob,{headers:r}))}generateTtsSpeechBlob(e){return a(this.http.post(`${this.baseUrl}/tts/speech`,{input:e.text},{responseType:"blob"}))}getTtsMessageAudioUrl(e){let o=typeof e=="string"?e.trim():"";return o?`${this.baseUrl}/tts/message-audio/${encodeURIComponent(o)}`:""}getOrCreateTtsMessageAudio(e){return a(this.http.post(`${this.baseUrl}/tts/message-audio`,{sessionId:e.sessionId,role:e.role,content:e.content,timestamp:e.timestamp},{responseType:"blob",headers:{"Content-Type":"application/json"}}))}getVoiceSettings(){return a(this.http.get(`${this.baseUrl}/settings`))}saveTtsProvider(e){return a(this.http.post(`${this.baseUrl}/settings/tts-provider`,{provider:e}))}saveElevenLabsKey(e){return a(this.http.post(`${this.baseUrl}/settings/elevenlabs-key`,{apiKey:e}))}testElevenLabsApiKey(){return a(this.http.post(`${this.baseUrl}/settings/test-elevenlabs-key`,{}))}saveVoiceConfig(e){return a(this.http.post(`${this.baseUrl}/settings/voice-config`,{elevenLabsModelId:e.elevenLabsModelId,elevenLabsVoiceId:e.elevenLabsVoiceId}))}static \u0275fac=function(o){return new(o||s)};static \u0275prov=b({token:s,factory:s.\u0275fac,providedIn:"root"})}return s})();var Y=(()=>{class s{voice_AS=h(I);settings_AS=h(P);fetchQaEnabledFlag(){return m(this,null,function*(){try{return(yield this.voice_AS.fetchVoiceNotesQaSettings()).qaEnabled===!0}catch{return!1}})}loadSttQaSettingsPanelState(){return m(this,null,function*(){let e=yield this.voice_AS.fetchVoiceNotesQaSettings(),o=yield this.settings_AS.getSection(A.llmProviders),i=L.parseLlmSettingsSectionForUi(o),f=(e.providerName??"").trim(),r=[],c="";if(f.length>0){let d=yield this.fetchLlmModelsListForSttQa(f);r=[...d.models],c=d.errorMessage;let l=(e.modelName??"").trim();l.length>0&&!r.includes(l)&&(r=[l,...r])}return{qa:e,llmProviderSelectOptions:i.llmProviderSelectOptions,defaultLlmProvider:i.defaultLlmProvider,defaultLlmModel:i.defaultLlmModel,qaModelsForProvider:r,qaModelsListFetchError:c}})}fetchLlmModelsListForSttQa(e){return m(this,null,function*(){let o=e.trim();if(!o.length)return{models:[],errorMessage:""};try{let i=yield this.settings_AS.postListLlmModels({providerId:o}),f=i.models??[],r=typeof i.error=="string"?i.error.trim():"",c=i.success===!1;return f.length>0?{models:f,errorMessage:c?r.length>0?r:"Model list request failed.":""}:c?{models:[],errorMessage:r.length>0?r:"Model list request failed."}:{models:[],errorMessage:r}}catch(i){let f=i instanceof Error?i.message:String(i);return{models:[],errorMessage:f}}})}fetchLlmModelIdsForProvider(e){return m(this,null,function*(){return(yield this.fetchLlmModelsListForSttQa(e)).models})}normalizeConfusionMapEntries(e){return e.map(o=>({from:String(o.from).trim(),to:String(o.to).trim()})).filter(o=>o.from.length>0||o.to.length>0)}saveVoiceNotesQaSettings(e){return m(this,null,function*(){yield this.voice_AS.saveVoiceNotesQaSettings(e)})}fetchVoiceNotesPoc(){return this.voice_AS.fetchVoiceNotesPoc()}saveVoiceNotesPoc(e){return this.voice_AS.saveVoiceNotesPoc(e)}transcribeVoiceChunk(e){return this.voice_AS.transcribeVoiceChunk(e)}getTtsMessageAudioUrl(e){return this.voice_AS.getTtsMessageAudioUrl(e)}getOrCreateTtsMessageAudio(e){return this.voice_AS.getOrCreateTtsMessageAudio(e)}static \u0275fac=function(o){return new(o||s)};static \u0275prov=b({token:s,factory:s.\u0275fac,providedIn:"root"})}return s})();export{y as a,I as b,Y as c};
|
|
2
|
+
//# sourceMappingURL=chunk-FK7N3Z5S.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{I as s}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{I as s}from"./chunk-TGIQ5T5X.js";import{C as o,xb as i,y as n}from"./chunk-TBMJSIBB.js";var p=(()=>{class e{baseUrl=`${s.api.baseUrl}/document-library`;http=o(i);listDocuments(){return this.http.get(this.baseUrl)}getDocument(t){return this.http.get(`${this.baseUrl}/${encodeURIComponent(t.documentId)}`)}uploadDocument(t){return this.http.post(`${this.baseUrl}/upload`,t.formData)}deleteDocument(t){return this.http.delete(`${this.baseUrl}/${encodeURIComponent(t.documentId)}`)}startIndexing(t){return this.http.post(`${this.baseUrl}/${encodeURIComponent(t.documentId)}/index`,{registryEntryId:t.registryEntryId})}getIndexingStatus(t){let r=new URLSearchParams({registryEntryId:t.registryEntryId}).toString();return this.http.get(`${this.baseUrl}/${encodeURIComponent(t.documentId)}/indexing-status?${r}`)}static \u0275fac=function(r){return new(r||e)};static \u0275prov=n({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();export{p as a};
|
|
2
|
+
//# sourceMappingURL=chunk-FTKYKFDR.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as E}from"./chunk-4FPJBDX3.js";import{a as I}from"./chunk-7GGP7THR.js";import{e as v}from"./chunk-NBYYHCJY.js";import{L,p as F,t as k,w as c}from"./chunk-GLADIICK.js";import{C as $,a as _,aa as i,b as S,h as A,hb as T,k as o,y as P}from"./chunk-TBMJSIBB.js";var a=A(F());var D="model-test-run-progress",w="model-test-result-saved",M=5e3,q=(()=>{class d{runPollingInterval=null;modelTestRunProgressSocketSub=null;modelTestResultSavedSocketSub=null;lastListFilters=void 0;list_$=i([]);listLoading_$=i(!1);listLoadError_$=i(null);registryProviderIds_$=i([]);selectedEntryId_$=i("");entryDetail_$=i(null);entryDetailLoading_$=i(!1);entryDetailNotFound_$=i(!1);entryDetailLoadError_$=i(null);prompts_$=i([]);promptsLoading_$=i(!1);results_$=i([]);testRunId_$=i("");testRunStatus_$=i(null);testRunPollingActive_$=i(!1);testRunError_$=i(null);testRunSelectedModelIds_$=i([]);testRunPanelDismissed_$=i(!1);testRunPanelVisible_$=T(()=>{let t=this.testRunId_$(),e=this.testRunStatus_$();return!(!t||e==null||this.testRunPanelDismissed_$())});setupConfigForRegistry_$=i(null);syncing_$=i(!1);modelTestRunProgressCurrentTask_$=i(null);modelRegistry_AS=$(E);settings_AS=$(L);socket_CS=$(v);ngOnDestroy(){this.stopRunPolling(),this.stopModelTestRunProgressSocket(),this.stopModelTestResultSavedSocket()}loadList(t){return o(this,null,function*(){t!==void 0&&(this.lastListFilters=t),this.listLoading_$.set(!0),this.listLoadError_$.set(null);try{let s=(yield this.modelRegistry_AS.getList(t)).list??[];return this.list_$.set(s),s}catch(e){return a.DyFM_Error.logSimple("CCAP_ModelRegistryDS | Failed to load list",e),this.listLoadError_$.set(e),[]}finally{this.listLoading_$.set(!1)}})}loadRegistryProviderIdsUnfiltered(){return o(this,null,function*(){try{let e=(yield this.modelRegistry_AS.getList({})).list??[],s=d.collectSortedUniqueProviderIds(e);this.registryProviderIds_$.set(s)}catch(t){a.DyFM_Error.logSimple("CCAP_ModelRegistryDS | Failed to load registry provider ids for filter UI (unfiltered list)",t)}})}deleteRegistryEntry(t){return o(this,null,function*(){this.listLoadError_$.set(null);try{return yield this.modelRegistry_AS.deleteEntry(t),yield this.loadList(this.lastListFilters),yield this.loadRegistryProviderIdsUnfiltered(),!0}catch(e){return a.DyFM_Error.logSimple("CCAP_ModelRegistryDS | deleteRegistryEntry failed",e),this.listLoadError_$.set(e),!1}})}deleteRegistryEntries(t){return o(this,null,function*(){this.listLoadError_$.set(null);try{let e=yield this.modelRegistry_AS.deleteEntries(t);return yield this.loadList(this.lastListFilters),yield this.loadRegistryProviderIdsUnfiltered(),e}catch(e){return a.DyFM_Error.logSimple("CCAP_ModelRegistryDS | deleteRegistryEntries failed",e),this.listLoadError_$.set(e),null}})}static collectSortedUniqueProviderIds(t){let e=t.map(s=>s.provider??"").filter(s=>s!=="");return[...new Set(e)].sort()}setSelectedEntryId(t){this.selectedEntryId_$.set(t??"")}loadEntry(t){return o(this,null,function*(){this.entryDetailLoading_$.set(!0),this.entryDetailNotFound_$.set(!1),this.entryDetailLoadError_$.set(null),this.selectedEntryId_$()!==t&&(this.entryDetail_$.set(null),this.results_$.set([]));try{let r=((yield this.modelRegistry_AS.getList(this.lastListFilters)).list??[]).find(f=>f.id===t);if(!r)return this.entryDetail_$.set(null),this.entryDetailNotFound_$.set(!0),null;this.entryDetail_$.set(r);let n=r.reasoningLevelForTest?.trim()||"none",l=yield this.modelRegistry_AS.getTestResults({provider:r.provider,model:r.modelName,limit:200,reasoningLevel:n});return this.results_$.set(l.results??[]),r}catch(e){a.DyFM_Error.logSimple("CCAP_ModelRegistryDS | Failed to load entry",e);let s=e instanceof Error?e.message:String(e);return this.entryDetailLoadError_$.set(s),this.selectedEntryId_$()===t&&this.entryDetail_$.set(null),null}finally{this.entryDetailLoading_$.set(!1)}})}loadPrompts(){return o(this,null,function*(){this.promptsLoading_$.set(!0);try{let e=(yield this.modelRegistry_AS.getPrompts()).prompts??[];return this.prompts_$.set(e),e}catch(t){return a.DyFM_Error.logSimple("CCAP_ModelRegistryDS | Failed to load prompts",t),this.prompts_$.set([]),[]}finally{this.promptsLoading_$.set(!1)}})}loadResults(t,e,s){return o(this,null,function*(){try{let n=(yield this.modelRegistry_AS.getTestResults({provider:t,model:e,limit:200,reasoningLevel:s})).results??[];return this.results_$.set(n),n}catch(r){return a.DyFM_Error.logSimple("CCAP_ModelRegistryDS | Failed to load results",r),[]}})}sync(){return o(this,null,function*(){this.syncing_$.set(!0),this.listLoadError_$.set(null);try{let t=yield this.modelRegistry_AS.sync();return yield Promise.all([this.loadSetupConfigForRegistry(),this.loadList(this.lastListFilters),this.loadRegistryProviderIdsUnfiltered()]),t}catch(t){return a.DyFM_Error.logSimple("CCAP_ModelRegistryDS | Sync failed",t),this.listLoadError_$.set(t),null}finally{this.syncing_$.set(!1)}})}setEnabled(t,e){return o(this,null,function*(){this.listLoadError_$.set(null);try{return yield this.modelRegistry_AS.setEnabled(t,e),yield this.loadList(this.lastListFilters),!0}catch(s){return a.DyFM_Error.logSimple("CCAP_ModelRegistryDS | setEnabled failed",s),this.listLoadError_$.set(s),!1}})}patchEntry(t,e){return o(this,null,function*(){this.listLoadError_$.set(null);let s=this.selectedEntryId_$()===t,r=this.entryDetail_$();if(s&&r&&e.reasoningLevelForTest!==void 0&&this.entryDetail_$.update(n=>n?S(_({},n),{reasoningLevelForTest:e.reasoningLevelForTest}):null),s&&r&&e.enabled!==void 0){let n=e.enabled;this.entryDetail_$.update(l=>l?S(_({},l),{enabled:n}):null)}s&&r&&e.capabilities!==void 0&&this.entryDetail_$.update(n=>n?S(_({},n),{capabilities:e.capabilities}):null);try{return yield this.modelRegistry_AS.patchEntry(t,e),yield this.loadList(this.lastListFilters),s&&(e.reasoningLevelForTest!==void 0&&e.enabled===void 0&&e.capabilities===void 0||(yield this.loadEntry(t))),!0}catch(n){return a.DyFM_Error.logSimple("CCAP_ModelRegistryDS | patchEntry failed",n),this.listLoadError_$.set(n),s&&this.entryDetail_$()&&this.loadEntry(t),!1}})}setReasoningLevelForTest(t,e){return o(this,null,function*(){return this.patchEntry(t,{reasoningLevelForTest:e})})}bulkSetEnabled(t,e){return o(this,null,function*(){this.listLoadError_$.set(null);try{let s=yield this.modelRegistry_AS.bulkSetEnabled(t,e);return yield this.loadList(this.lastListFilters),s.updated}catch(s){return a.DyFM_Error.logSimple("CCAP_ModelRegistryDS | bulkSetEnabled failed",s),this.listLoadError_$.set(s),null}})}startTestRun(t,e){return o(this,null,function*(){this.testRunError_$.set(null);try{let s=yield this.modelRegistry_AS.startTestRun(t,e);return this.testRunPanelDismissed_$.set(!1),this.testRunSelectedModelIds_$.set([...t]),this.testRunId_$.set(s.runId),this.testRunStatus_$.set({runId:s.runId,status:c.pending,results:[]}),this.startModelTestRunProgressSocket(),this.startModelTestResultSavedSocket(),this.startRunPolling(s.runId),s.runId}catch(s){return a.DyFM_Error.logSimple("CCAP_ModelRegistryDS | startTestRun failed",s),this.testRunError_$.set(s),null}})}startRunPolling(t){this.clearRunPollingIntervalOnly(),this.testRunPollingActive_$.set(!0);let e=M;this.runPollingInterval=setInterval(()=>{this.pollRunStatus(t)},e),this.pollRunStatus(t)}clearRunPollingIntervalOnly(){this.runPollingInterval&&(clearInterval(this.runPollingInterval),this.runPollingInterval=null)}stopRunPolling(){this.clearRunPollingIntervalOnly(),this.testRunPollingActive_$.set(!1),this.testRunId_$.set(""),this.testRunStatus_$.set(null),this.testRunError_$.set(null),this.modelTestRunProgressCurrentTask_$.set(null),this.testRunSelectedModelIds_$.set([]),this.testRunPanelDismissed_$.set(!1)}dismissTestRunPanel(){this.testRunPanelDismissed_$.set(!0)}pollRunStatus(t){return o(this,null,function*(){try{let e=yield this.modelRegistry_AS.getTestRunStatus(t);this.testRunStatus_$.set(e),(e.status==="completed"||e.status==="failed")&&(this.clearRunPollingIntervalOnly(),this.testRunPollingActive_$.set(!1))}catch(e){this.testRunError_$.set(e),this.clearRunPollingIntervalOnly(),this.testRunPollingActive_$.set(!1)}})}startModelTestRunProgressSocket(){this.modelTestRunProgressSocketSub||(this.modelTestRunProgressSocketSub=this.socket_CS.event$.subscribe(t=>{if(t.event!=="user-notification")return;let e=t.payload??{};if(e.type!==D)return;let s=e.runId,r=e.status,n=e.current,l=e.total,f=e.currentTask,m=e.error,u=e.failedTask,g=e.errorDetails;this.setTestRunProgressFromSocket({runId:typeof s=="string"?s:void 0,status:typeof r=="string"?r:void 0,current:typeof n=="number"?n:void 0,total:typeof l=="number"?l:void 0,currentTask:f,error:typeof m=="string"?m:void 0,failedTask:u,errorDetails:g})}))}stopModelTestRunProgressSocket(){this.modelTestRunProgressSocketSub&&(this.modelTestRunProgressSocketSub.unsubscribe(),this.modelTestRunProgressSocketSub=null)}startModelTestResultSavedSocket(){this.modelTestResultSavedSocketSub||(this.modelTestResultSavedSocketSub=this.socket_CS.event$.subscribe(t=>{if(t.event!=="user-notification")return;let e=t.payload??{};e.type===w&&this.mergeResultFromSocket(e)}))}stopModelTestResultSavedSocket(){this.modelTestResultSavedSocketSub&&(this.modelTestResultSavedSocketSub.unsubscribe(),this.modelTestResultSavedSocketSub=null)}mergeResultFromSocket(t){let e=this.testRunId_$();if(!e||t.runId!==e)return;let s=this.testRunStatus_$();if(!s)return;let r=d.parseResultItemFromSocket(t);if(!r)return;let n=R=>`${R.provider}|${R.model}|${R.promptId}|${R.reasoningLevel??"none"}`,l=n(r),m=[...s.results.filter(R=>n(R)!==l),r],u=t.current,g=t.total,h=typeof u=="number"?u:s.progress?.current,y=typeof g=="number"?g:s.progress?.total;this.testRunStatus_$.set(S(_({},s),{results:m,progress:typeof y=="number"&&y>0&&typeof h=="number"?{current:Math.max(h,s.progress?.current??0),total:y}:s.progress}));let p=this.entryDetail_$();if(p&&r.provider===p.provider&&r.model===p.modelName){let b=this.results_$().filter(C=>n(C)!==l);this.results_$.set([r,...b])}}static parseResultItemFromSocket(t){let e=t.provider,s=t.model,r=t.promptId,n=t.score;return typeof e!="string"||typeof s!="string"||typeof r!="string"?null:{provider:e,model:s,promptId:r,reasoningLevel:typeof t.reasoningLevel=="string"?t.reasoningLevel:void 0,score:typeof n=="number"?n:0,analysis:typeof t.analysis=="string"?t.analysis:void 0,promptText:typeof t.promptText=="string"?t.promptText:void 0,modelOutput:typeof t.modelOutput=="string"?t.modelOutput:void 0,thinking:typeof t.thinking=="string"?t.thinking:void 0,generationTimeMs:typeof t.generationTimeMs=="number"?t.generationTimeMs:void 0,analyzerProvider:typeof t.analyzerProvider=="string"?t.analyzerProvider:void 0,analyzerModel:typeof t.analyzerModel=="string"?t.analyzerModel:void 0,inputTokens:typeof t.inputTokens=="number"?t.inputTokens:void 0,outputTokens:typeof t.outputTokens=="number"?t.outputTokens:void 0,thinkingTokens:typeof t.thinkingTokens=="number"?t.thinkingTokens:void 0,createdAt:typeof t.createdAt=="string"?t.createdAt:void 0}}setTestRunProgressFromSocket(t){let e=this.testRunId_$();if(!e||t.runId!==e)return;let s=this.testRunStatus_$();if(!s)return;let r=d.parseRunStatusFromSocket(t.status,s.status),n=d.parseFailedTaskFromSocketPayload(t.failedTask),l=d.parseErrorDetailsFromSocketPayload(t.errorDetails),f=t.error!==void 0?t.error:s.error;this.testRunStatus_$.set(S(_({},s),{status:r,progress:typeof t.total=="number"&&t.total>0?{current:t.current??0,total:t.total}:s.progress,error:f,failedTask:n??s.failedTask,errorDetails:l??s.errorDetails}));let m=typeof t.status=="string"?t.status:"";if(m===c.completed||m===c.failed){this.modelTestRunProgressCurrentTask_$.set(null);return}let u=t.currentTask;if(u&&typeof u=="object"&&u!==null&&"promptId"in u){let g=u,h=g.promptId,y=g.provider,p=g.modelName;this.modelTestRunProgressCurrentTask_$.set({provider:typeof y=="string"?y:"",modelName:typeof p=="string"?p:"",promptId:typeof h=="string"?h:""});return}this.modelTestRunProgressCurrentTask_$.set(null)}static isPlainObjectRecord(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}static parseFailedTaskFromSocketPayload(t){if(!d.isPlainObjectRecord(t))return;let e=t,s=e.provider,r=e.model,n=e.promptId;if(!(typeof s!="string"||typeof r!="string"||typeof n!="string"))return{provider:s,model:r,promptId:n}}static parseErrorDetailsFromSocketPayload(t){if(!d.isPlainObjectRecord(t))return;let e=t,s=e.message;if(typeof s!="string")return;let r=e.errorCode,n=e.stack;return{message:s,errorCode:typeof r=="string"?r:void 0,stack:typeof n=="string"?n:void 0}}static parseRunStatusFromSocket(t,e){return typeof t!="string"?e:t===c.pending?c.pending:t===c.running?c.running:t===c.completed?c.completed:t===c.failed?c.failed:e}loadSetupConfigForRegistry(){return o(this,null,function*(){try{let t=yield this.settings_AS.getSection(k.llmProviders),e=typeof t.defaultLlmProvider=="string"?t.defaultLlmProvider:void 0,s=typeof t.defaultLlmModel=="string"?t.defaultLlmModel:void 0,r={},n=t.localAiSettings;if(Array.isArray(n))for(let f of n){if(f==null||typeof f!="object"||Array.isArray(f))continue;let m=f,u=m.key,g=m.name;if(typeof u!="string"||!u.trim())continue;let h=typeof g=="string"?g.trim():"",y=h.length>0?h:"Local AI",p=I.build({localAiKey:u.trim()});r[p]={label:y}}let l={defaultLlmProvider:e,defaultLlmModel:s,llmProviderConfig:Object.keys(r).length>0?r:void 0};return this.setupConfigForRegistry_$.set(l),l}catch{return this.setupConfigForRegistry_$.set(null),null}})}getCachedList(){return this.list_$()}getCachedEntryDetail(){return this.entryDetail_$()}getCachedPrompts(){return this.prompts_$()}getCachedResults(){return this.results_$()}getCachedSetupConfigForRegistry(){return this.setupConfigForRegistry_$()}static \u0275fac=function(e){return new(e||d)};static \u0275prov=P({token:d,factory:d.\u0275fac,providedIn:"root"})}return d})();export{q as a};
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as E}from"./chunk-DVUUFWKQ.js";import{a as I}from"./chunk-XIP3DG7D.js";import{e as v}from"./chunk-6OF2NGQO.js";import{L,p as F,t as k,w as c}from"./chunk-TGIQ5T5X.js";import{C as $,a as _,aa as i,b as S,h as A,hb as T,k as o,y as P}from"./chunk-TBMJSIBB.js";var a=A(F());var D="model-test-run-progress",w="model-test-result-saved",M=5e3,q=(()=>{class d{runPollingInterval=null;modelTestRunProgressSocketSub=null;modelTestResultSavedSocketSub=null;lastListFilters=void 0;list_$=i([]);listLoading_$=i(!1);listLoadError_$=i(null);registryProviderIds_$=i([]);selectedEntryId_$=i("");entryDetail_$=i(null);entryDetailLoading_$=i(!1);entryDetailNotFound_$=i(!1);entryDetailLoadError_$=i(null);prompts_$=i([]);promptsLoading_$=i(!1);results_$=i([]);testRunId_$=i("");testRunStatus_$=i(null);testRunPollingActive_$=i(!1);testRunError_$=i(null);testRunSelectedModelIds_$=i([]);testRunPanelDismissed_$=i(!1);testRunPanelVisible_$=T(()=>{let t=this.testRunId_$(),e=this.testRunStatus_$();return!(!t||e==null||this.testRunPanelDismissed_$())});setupConfigForRegistry_$=i(null);syncing_$=i(!1);modelTestRunProgressCurrentTask_$=i(null);modelRegistry_AS=$(E);settings_AS=$(L);socket_CS=$(v);ngOnDestroy(){this.stopRunPolling(),this.stopModelTestRunProgressSocket(),this.stopModelTestResultSavedSocket()}loadList(t){return o(this,null,function*(){t!==void 0&&(this.lastListFilters=t),this.listLoading_$.set(!0),this.listLoadError_$.set(null);try{let s=(yield this.modelRegistry_AS.getList(t)).list??[];return this.list_$.set(s),s}catch(e){return a.DyFM_Error.logSimple("CCAP_ModelRegistryDS | Failed to load list",e),this.listLoadError_$.set(e),[]}finally{this.listLoading_$.set(!1)}})}loadRegistryProviderIdsUnfiltered(){return o(this,null,function*(){try{let e=(yield this.modelRegistry_AS.getList({})).list??[],s=d.collectSortedUniqueProviderIds(e);this.registryProviderIds_$.set(s)}catch(t){a.DyFM_Error.logSimple("CCAP_ModelRegistryDS | Failed to load registry provider ids for filter UI (unfiltered list)",t)}})}deleteRegistryEntry(t){return o(this,null,function*(){this.listLoadError_$.set(null);try{return yield this.modelRegistry_AS.deleteEntry(t),yield this.loadList(this.lastListFilters),yield this.loadRegistryProviderIdsUnfiltered(),!0}catch(e){return a.DyFM_Error.logSimple("CCAP_ModelRegistryDS | deleteRegistryEntry failed",e),this.listLoadError_$.set(e),!1}})}deleteRegistryEntries(t){return o(this,null,function*(){this.listLoadError_$.set(null);try{let e=yield this.modelRegistry_AS.deleteEntries(t);return yield this.loadList(this.lastListFilters),yield this.loadRegistryProviderIdsUnfiltered(),e}catch(e){return a.DyFM_Error.logSimple("CCAP_ModelRegistryDS | deleteRegistryEntries failed",e),this.listLoadError_$.set(e),null}})}static collectSortedUniqueProviderIds(t){let e=t.map(s=>s.provider??"").filter(s=>s!=="");return[...new Set(e)].sort()}setSelectedEntryId(t){this.selectedEntryId_$.set(t??"")}loadEntry(t){return o(this,null,function*(){this.entryDetailLoading_$.set(!0),this.entryDetailNotFound_$.set(!1),this.entryDetailLoadError_$.set(null),this.selectedEntryId_$()!==t&&(this.entryDetail_$.set(null),this.results_$.set([]));try{let r=((yield this.modelRegistry_AS.getList(this.lastListFilters)).list??[]).find(f=>f.id===t);if(!r)return this.entryDetail_$.set(null),this.entryDetailNotFound_$.set(!0),null;this.entryDetail_$.set(r);let n=r.reasoningLevelForTest?.trim()||"none",l=yield this.modelRegistry_AS.getTestResults({provider:r.provider,model:r.modelName,limit:200,reasoningLevel:n});return this.results_$.set(l.results??[]),r}catch(e){a.DyFM_Error.logSimple("CCAP_ModelRegistryDS | Failed to load entry",e);let s=e instanceof Error?e.message:String(e);return this.entryDetailLoadError_$.set(s),this.selectedEntryId_$()===t&&this.entryDetail_$.set(null),null}finally{this.entryDetailLoading_$.set(!1)}})}loadPrompts(){return o(this,null,function*(){this.promptsLoading_$.set(!0);try{let e=(yield this.modelRegistry_AS.getPrompts()).prompts??[];return this.prompts_$.set(e),e}catch(t){return a.DyFM_Error.logSimple("CCAP_ModelRegistryDS | Failed to load prompts",t),this.prompts_$.set([]),[]}finally{this.promptsLoading_$.set(!1)}})}loadResults(t,e,s){return o(this,null,function*(){try{let n=(yield this.modelRegistry_AS.getTestResults({provider:t,model:e,limit:200,reasoningLevel:s})).results??[];return this.results_$.set(n),n}catch(r){return a.DyFM_Error.logSimple("CCAP_ModelRegistryDS | Failed to load results",r),[]}})}sync(){return o(this,null,function*(){this.syncing_$.set(!0),this.listLoadError_$.set(null);try{let t=yield this.modelRegistry_AS.sync();return yield Promise.all([this.loadSetupConfigForRegistry(),this.loadList(this.lastListFilters),this.loadRegistryProviderIdsUnfiltered()]),t}catch(t){return a.DyFM_Error.logSimple("CCAP_ModelRegistryDS | Sync failed",t),this.listLoadError_$.set(t),null}finally{this.syncing_$.set(!1)}})}setEnabled(t,e){return o(this,null,function*(){this.listLoadError_$.set(null);try{return yield this.modelRegistry_AS.setEnabled(t,e),yield this.loadList(this.lastListFilters),!0}catch(s){return a.DyFM_Error.logSimple("CCAP_ModelRegistryDS | setEnabled failed",s),this.listLoadError_$.set(s),!1}})}patchEntry(t,e){return o(this,null,function*(){this.listLoadError_$.set(null);let s=this.selectedEntryId_$()===t,r=this.entryDetail_$();if(s&&r&&e.reasoningLevelForTest!==void 0&&this.entryDetail_$.update(n=>n?S(_({},n),{reasoningLevelForTest:e.reasoningLevelForTest}):null),s&&r&&e.enabled!==void 0){let n=e.enabled;this.entryDetail_$.update(l=>l?S(_({},l),{enabled:n}):null)}s&&r&&e.capabilities!==void 0&&this.entryDetail_$.update(n=>n?S(_({},n),{capabilities:e.capabilities}):null);try{return yield this.modelRegistry_AS.patchEntry(t,e),yield this.loadList(this.lastListFilters),s&&(e.reasoningLevelForTest!==void 0&&e.enabled===void 0&&e.capabilities===void 0||(yield this.loadEntry(t))),!0}catch(n){return a.DyFM_Error.logSimple("CCAP_ModelRegistryDS | patchEntry failed",n),this.listLoadError_$.set(n),s&&this.entryDetail_$()&&this.loadEntry(t),!1}})}setReasoningLevelForTest(t,e){return o(this,null,function*(){return this.patchEntry(t,{reasoningLevelForTest:e})})}bulkSetEnabled(t,e){return o(this,null,function*(){this.listLoadError_$.set(null);try{let s=yield this.modelRegistry_AS.bulkSetEnabled(t,e);return yield this.loadList(this.lastListFilters),s.updated}catch(s){return a.DyFM_Error.logSimple("CCAP_ModelRegistryDS | bulkSetEnabled failed",s),this.listLoadError_$.set(s),null}})}startTestRun(t,e){return o(this,null,function*(){this.testRunError_$.set(null);try{let s=yield this.modelRegistry_AS.startTestRun(t,e);return this.testRunPanelDismissed_$.set(!1),this.testRunSelectedModelIds_$.set([...t]),this.testRunId_$.set(s.runId),this.testRunStatus_$.set({runId:s.runId,status:c.pending,results:[]}),this.startModelTestRunProgressSocket(),this.startModelTestResultSavedSocket(),this.startRunPolling(s.runId),s.runId}catch(s){return a.DyFM_Error.logSimple("CCAP_ModelRegistryDS | startTestRun failed",s),this.testRunError_$.set(s),null}})}startRunPolling(t){this.clearRunPollingIntervalOnly(),this.testRunPollingActive_$.set(!0);let e=M;this.runPollingInterval=setInterval(()=>{this.pollRunStatus(t)},e),this.pollRunStatus(t)}clearRunPollingIntervalOnly(){this.runPollingInterval&&(clearInterval(this.runPollingInterval),this.runPollingInterval=null)}stopRunPolling(){this.clearRunPollingIntervalOnly(),this.testRunPollingActive_$.set(!1),this.testRunId_$.set(""),this.testRunStatus_$.set(null),this.testRunError_$.set(null),this.modelTestRunProgressCurrentTask_$.set(null),this.testRunSelectedModelIds_$.set([]),this.testRunPanelDismissed_$.set(!1)}dismissTestRunPanel(){this.testRunPanelDismissed_$.set(!0)}pollRunStatus(t){return o(this,null,function*(){try{let e=yield this.modelRegistry_AS.getTestRunStatus(t);this.testRunStatus_$.set(e),(e.status==="completed"||e.status==="failed")&&(this.clearRunPollingIntervalOnly(),this.testRunPollingActive_$.set(!1))}catch(e){this.testRunError_$.set(e),this.clearRunPollingIntervalOnly(),this.testRunPollingActive_$.set(!1)}})}startModelTestRunProgressSocket(){this.modelTestRunProgressSocketSub||(this.modelTestRunProgressSocketSub=this.socket_CS.event$.subscribe(t=>{if(t.event!=="user-notification")return;let e=t.payload??{};if(e.type!==D)return;let s=e.runId,r=e.status,n=e.current,l=e.total,f=e.currentTask,m=e.error,u=e.failedTask,g=e.errorDetails;this.setTestRunProgressFromSocket({runId:typeof s=="string"?s:void 0,status:typeof r=="string"?r:void 0,current:typeof n=="number"?n:void 0,total:typeof l=="number"?l:void 0,currentTask:f,error:typeof m=="string"?m:void 0,failedTask:u,errorDetails:g})}))}stopModelTestRunProgressSocket(){this.modelTestRunProgressSocketSub&&(this.modelTestRunProgressSocketSub.unsubscribe(),this.modelTestRunProgressSocketSub=null)}startModelTestResultSavedSocket(){this.modelTestResultSavedSocketSub||(this.modelTestResultSavedSocketSub=this.socket_CS.event$.subscribe(t=>{if(t.event!=="user-notification")return;let e=t.payload??{};e.type===w&&this.mergeResultFromSocket(e)}))}stopModelTestResultSavedSocket(){this.modelTestResultSavedSocketSub&&(this.modelTestResultSavedSocketSub.unsubscribe(),this.modelTestResultSavedSocketSub=null)}mergeResultFromSocket(t){let e=this.testRunId_$();if(!e||t.runId!==e)return;let s=this.testRunStatus_$();if(!s)return;let r=d.parseResultItemFromSocket(t);if(!r)return;let n=R=>`${R.provider}|${R.model}|${R.promptId}|${R.reasoningLevel??"none"}`,l=n(r),m=[...s.results.filter(R=>n(R)!==l),r],u=t.current,g=t.total,h=typeof u=="number"?u:s.progress?.current,y=typeof g=="number"?g:s.progress?.total;this.testRunStatus_$.set(S(_({},s),{results:m,progress:typeof y=="number"&&y>0&&typeof h=="number"?{current:Math.max(h,s.progress?.current??0),total:y}:s.progress}));let p=this.entryDetail_$();if(p&&r.provider===p.provider&&r.model===p.modelName){let b=this.results_$().filter(C=>n(C)!==l);this.results_$.set([r,...b])}}static parseResultItemFromSocket(t){let e=t.provider,s=t.model,r=t.promptId,n=t.score;return typeof e!="string"||typeof s!="string"||typeof r!="string"?null:{provider:e,model:s,promptId:r,reasoningLevel:typeof t.reasoningLevel=="string"?t.reasoningLevel:void 0,score:typeof n=="number"?n:0,analysis:typeof t.analysis=="string"?t.analysis:void 0,promptText:typeof t.promptText=="string"?t.promptText:void 0,modelOutput:typeof t.modelOutput=="string"?t.modelOutput:void 0,thinking:typeof t.thinking=="string"?t.thinking:void 0,generationTimeMs:typeof t.generationTimeMs=="number"?t.generationTimeMs:void 0,analyzerProvider:typeof t.analyzerProvider=="string"?t.analyzerProvider:void 0,analyzerModel:typeof t.analyzerModel=="string"?t.analyzerModel:void 0,inputTokens:typeof t.inputTokens=="number"?t.inputTokens:void 0,outputTokens:typeof t.outputTokens=="number"?t.outputTokens:void 0,thinkingTokens:typeof t.thinkingTokens=="number"?t.thinkingTokens:void 0,createdAt:typeof t.createdAt=="string"?t.createdAt:void 0}}setTestRunProgressFromSocket(t){let e=this.testRunId_$();if(!e||t.runId!==e)return;let s=this.testRunStatus_$();if(!s)return;let r=d.parseRunStatusFromSocket(t.status,s.status),n=d.parseFailedTaskFromSocketPayload(t.failedTask),l=d.parseErrorDetailsFromSocketPayload(t.errorDetails),f=t.error!==void 0?t.error:s.error;this.testRunStatus_$.set(S(_({},s),{status:r,progress:typeof t.total=="number"&&t.total>0?{current:t.current??0,total:t.total}:s.progress,error:f,failedTask:n??s.failedTask,errorDetails:l??s.errorDetails}));let m=typeof t.status=="string"?t.status:"";if(m===c.completed||m===c.failed){this.modelTestRunProgressCurrentTask_$.set(null);return}let u=t.currentTask;if(u&&typeof u=="object"&&u!==null&&"promptId"in u){let g=u,h=g.promptId,y=g.provider,p=g.modelName;this.modelTestRunProgressCurrentTask_$.set({provider:typeof y=="string"?y:"",modelName:typeof p=="string"?p:"",promptId:typeof h=="string"?h:""});return}this.modelTestRunProgressCurrentTask_$.set(null)}static isPlainObjectRecord(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}static parseFailedTaskFromSocketPayload(t){if(!d.isPlainObjectRecord(t))return;let e=t,s=e.provider,r=e.model,n=e.promptId;if(!(typeof s!="string"||typeof r!="string"||typeof n!="string"))return{provider:s,model:r,promptId:n}}static parseErrorDetailsFromSocketPayload(t){if(!d.isPlainObjectRecord(t))return;let e=t,s=e.message;if(typeof s!="string")return;let r=e.errorCode,n=e.stack;return{message:s,errorCode:typeof r=="string"?r:void 0,stack:typeof n=="string"?n:void 0}}static parseRunStatusFromSocket(t,e){return typeof t!="string"?e:t===c.pending?c.pending:t===c.running?c.running:t===c.completed?c.completed:t===c.failed?c.failed:e}loadSetupConfigForRegistry(){return o(this,null,function*(){try{let t=yield this.settings_AS.getSection(k.llmProviders),e=typeof t.defaultLlmProvider=="string"?t.defaultLlmProvider:void 0,s=typeof t.defaultLlmModel=="string"?t.defaultLlmModel:void 0,r={},n=t.localAiSettings;if(Array.isArray(n))for(let f of n){if(f==null||typeof f!="object"||Array.isArray(f))continue;let m=f,u=m.key,g=m.name;if(typeof u!="string"||!u.trim())continue;let h=typeof g=="string"?g.trim():"",y=h.length>0?h:"Local AI",p=I.build({localAiKey:u.trim()});r[p]={label:y}}let l={defaultLlmProvider:e,defaultLlmModel:s,llmProviderConfig:Object.keys(r).length>0?r:void 0};return this.setupConfigForRegistry_$.set(l),l}catch{return this.setupConfigForRegistry_$.set(null),null}})}getCachedList(){return this.list_$()}getCachedEntryDetail(){return this.entryDetail_$()}getCachedPrompts(){return this.prompts_$()}getCachedResults(){return this.results_$()}getCachedSetupConfigForRegistry(){return this.setupConfigForRegistry_$()}static \u0275fac=function(e){return new(e||d)};static \u0275prov=P({token:d,factory:d.\u0275fac,providedIn:"root"})}return d})();export{q as a};
|
|
2
|
+
//# sourceMappingURL=chunk-FZFLGRLE.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as c}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as c}from"./chunk-3MTK72EJ.js";import{p as d}from"./chunk-TGIQ5T5X.js";import{C as o,aa as s,h as l,k as i,y as a}from"./chunk-TBMJSIBB.js";var f=l(d());var h=6e4,S=(()=>{class t{api_AS=o(c);instancePresenceMap_$=s(new Map);intervalHandle=void 0;lastRefreshAt_$=s(null);startPeriodicRefresh(){this.intervalHandle===void 0&&(this.refreshNow(),this.intervalHandle=setInterval(()=>{this.refreshNow()},h))}stopPeriodicRefresh(){this.intervalHandle!==void 0&&(clearInterval(this.intervalHandle),this.intervalHandle=void 0)}refreshNow(){return i(this,null,function*(){try{let e=yield this.api_AS.getPresence(),n=new Map;for(let r of e.list??[])r.instanceKey&&n.set(r.instanceKey,r);this.instancePresenceMap_$.set(n),this.lastRefreshAt_$.set(new Date().toISOString())}catch(e){f.DyFM_Log.warn(`[CCAP] ExS_InstancePresence_DataService refresh failed (non-fatal): ${e instanceof Error?e.message:String(e)}`)}})}getPresence(e){let n=this.instancePresenceMap_$().get(e);return n||{instanceKey:e,presence:"unknown",wsConnected:!1,reason:"presence map not loaded yet"}}ngOnDestroy(){this.stopPeriodicRefresh()}static \u0275fac=function(n){return new(n||t)};static \u0275prov=a({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();export{S as a};
|
|
2
|
+
//# sourceMappingURL=chunk-G6IHLHJ7.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as _}from"./chunk-5UPNU54P.js";import{a as ke,b as _e,g as De,h as x,j as Fe}from"./chunk-
|
|
1
|
+
import{a as _}from"./chunk-5UPNU54P.js";import{a as ke,b as _e,g as De,h as x,j as Fe}from"./chunk-JPRPSYHF.js";import{A as Y,B as X,C as Z,I as Te,K as Oe,p as ge,z as q}from"./chunk-TGIQ5T5X.js";import{C as M,D as ve,Fa as k,Ga as C,Gb as je,Ha as z,J as T,Ja as Le,K as O,L as D,M as me,P as $e,Ta as Me,U as V,X as Ee,Z as u,a as re,aa as m,b as Pe,da as A,ga as he,h as fe,hb as S,ia as F,jb as K,k as P,la as v,ma as Ae,oa as J,p as d,pa as G,qa as f,ra as p,sa as Q,ua as W,ub as we,va as N,wa as I,wb as L,xb as Re,y as ie}from"./chunk-TBMJSIBB.js";var Ne=fe(ge());var ee=function(i){return i.strictParse="strict-parse",i.llmExtract="llm-extract",i.llmPrepare="llm-prepare",i.llmParse="llm-parse",i}(ee||{});var Qe=12e3,se=120,xe=600,te=class i{static extractJsonFromContent(n){let e=n.match(/```(?:json)?\s*([\s\S]*?)```/);if(e?.[1])return e[1].trim();let t=n.indexOf("{"),r=n.lastIndexOf("}");return t!==-1&&r>t?n.slice(t,r+1):n}static rawContentLooksLikeExtractableJsonObject(n){let e=(n??"").trim(),t=i.extractJsonFromContent(e);return i.extractedTrimmedLooksLikeJsonObjectRoot(t)}static prepareLlmJsonTextForStrictParse(n){if(!i.extractedTrimmedLooksLikeJsonObjectRoot(n))return i.relaxTrailingCommasInJsonLikeText(n);let t=i.repairExecutionSummaryForUserOrphanSiblingStrings(n),r=i.repairUnescapedInnerDoubleQuotesInJsonLikeText(t),o=i.sanitizeRawControlCharsInsideJsonStrings(r);return i.relaxTrailingCommasInJsonLikeText(o)}static extractedTrimmedLooksLikeJsonObjectRoot(n){return(n??"").trimStart().startsWith("{")}static getLlmPipelinePreparedText(n){let e=(n??"").trim(),t=i.extractJsonFromContent(e);return i.prepareLlmJsonTextForStrictParse(t)}static tryParseStrict(n){let e=n.text??"";try{return{ok:!0,value:JSON.parse(e)}}catch(t){return{ok:!1,failure:i.buildFailureFromParseError({error:t,sourceText:e,contextLabel:n.contextLabel,phase:ee.strictParse})}}}static parseStrictOrThrow(n){let e=i.tryParseStrict({text:n.text,contextLabel:n.contextLabel});if(e.ok)return e.value;let t=new Error(e.failure.summaryMessage),r=e.failure.originalError;throw t.cause=r instanceof Error?r:new Error(e.failure.rawMessage),t}static tryParseLlmPipeline(n){let e=(n.content??"").trim(),t=i.extractJsonFromContent(e),r=i.prepareLlmJsonTextForStrictParse(t),o=i.tryParseStrict({text:r,contextLabel:n.contextLabel});if(o.ok)return{ok:!0,value:o.value};let s=o.failure,l=`JSON parse failed [${s.contextLabel}] (${ee.llmParse}): ${s.rawMessage}`;return{ok:!1,failure:{phase:ee.llmParse,contextLabel:s.contextLabel,rawMessage:s.rawMessage,summaryMessage:l,position:s.position,line:s.line,column:s.column,inputLength:e.length,snippetAroundError:s.snippetAroundError,extractedLength:t.length,preparedLength:r.length,originalError:s.originalError}}}static parseLlmPipelineOrThrow(n){let e=i.tryParseLlmPipeline({content:n.content,contextLabel:n.contextLabel});if(e.ok)return e.value;let t=new Error(e.failure.summaryMessage),r=e.failure.originalError;throw t.cause=r instanceof Error?r:new Error(e.failure.rawMessage),t}static failureToPlainAdditionalContext(n){let e={jsonParsePhase:n.phase,jsonParseContextLabel:n.contextLabel,jsonParseRawMessage:n.rawMessage,jsonParseSummaryMessage:n.summaryMessage};n.position!==void 0&&(e.jsonParsePosition=n.position),n.line!==void 0&&(e.jsonParseLine=n.line),n.column!==void 0&&(e.jsonParseColumn=n.column),n.inputLength!==void 0&&(e.jsonParseInputLength=n.inputLength),n.extractedLength!==void 0&&(e.jsonParseExtractedLength=n.extractedLength),n.preparedLength!==void 0&&(e.jsonParsePreparedLength=n.preparedLength),n.snippetAroundError!==void 0&&(e.jsonParseSnippetAroundError=n.snippetAroundError);let t=n.originalError;return t instanceof Error?e.jsonParseOriginalErrorMessage=t.message:t!=null&&(e.jsonParseOriginalErrorMessage=String(t)),e}static formatFailureForLog(n,e,t){let r=n.position,o;if(r!==void 0&&r<e.length){let y=Math.max(0,r-se),c=Math.min(e.length,r+se),$=e.slice(y,c),E=r-y,ue=" ".repeat(Math.max(0,E))+"^";o=`snippetAroundPosition | startOffset: ${String(y)} | errorIndex: ${String(r)}
|
|
2
2
|
${$}
|
|
3
3
|
${ue}`}else{let y=e.slice(0,xe);o=`snippetFallback | noUsablePosition | firstChars: ${String(xe)}
|
|
4
4
|
`+y+(e.length>xe?`
|
|
@@ -36,4 +36,4 @@ ${JSON.stringify(s,null,2)}`;return x.toDisplaySafeString(o??l)}let t=e instance
|
|
|
36
36
|
|
|
37
37
|
Stack:
|
|
38
38
|
${t}`:""].join("")}copyToClipboard(){return P(this,null,function*(){if(this.error()==null)return;let e=this.buildErrorText(),t=yield this.globalError_CS.copyToClipboard(e);t.ok?(this.copyFeedback="M\xE1solva!",setTimeout(()=>{this.copyFeedback=""},i.copyFeedbackResetMs)):(this.copyFeedback="M\xE1sol\xE1s sikertelen",this.globalError_CS.reportErrorOnly({message:x.getErrorMessageForDisplay(t.error),source:"error-display-copy",stack:x.getStackForReport(t.error)}),setTimeout(()=>{this.copyFeedback=""},i.copyFeedbackResetMs))})}sendToQuickInput(){return P(this,null,function*(){if(this.error()==null||this.isSendingToQuickInput_$())return;let e=this.buildErrorText();if(e.trim()){this.isSendingToQuickInput_$.set(!0);try{let t=yield this.userInput_DS.submitInputForGlobalError(e);this.quickInputFeedback=t?"Quick Input l\xE9trehozva!":"Quick Input sikertelen \u2014 nincs el\xE9rhet\u0151 projekt",t||this.globalError_CS.reportErrorOnly({message:"Send-to-Quick-Input returned false (likely: no available project or server-side validation reject)",source:"send-to-quick-input-no-result"})}catch(t){this.quickInputFeedback="Quick Input sikertelen";let r=t instanceof Error?`Send-to-Quick-Input threw: ${t.message}`:`Send-to-Quick-Input threw: ${String(t)}`;this.globalError_CS.reportErrorOnly({message:r,source:"send-to-quick-input-fail",stack:t instanceof Error?t.stack:void 0})}finally{this.isSendingToQuickInput_$.set(!1),setTimeout(()=>{this.quickInputFeedback=""},i.copyFeedbackResetMs)}}})}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=ve({type:i,selectors:[["app-ccap-error-display"]],inputs:{error:[1,"error"],sourceLabelOverride:[1,"sourceLabelOverride"],errorClientSource:[1,"errorClientSource"],ng0600Diagnostics:[1,"ng0600Diagnostics"],ng0203Diagnostics:[1,"ng0203Diagnostics"]},standalone:!0,features:[Me],decls:1,vars:1,consts:[[1,"border-2","border-neonRed","rounded-lg","bg-neutral-800","shadow-lg","flex","flex-col","max-h-full","min-h-0"],[1,"flex","items-center","justify-between","p-4","border-b","border-neonRed/50","shrink-0"],[1,"text-lg","font-semibold","text-red-400"],[1,"flex","items-center","gap-2"],["type","button","title","M\xE1sol\xE1s v\xE1g\xF3lapra","aria-label","M\xE1sol\xE1s v\xE1g\xF3lapra",1,"p-2","min-h-[44px]","min-w-[44px]","flex","items-center","justify-center","rounded","text-neutral-300","hover:bg-neutral-600","hover:text-white","transition-colors",3,"click"],["xmlns","http://www.w3.org/2000/svg","fill","none","viewBox","0 0 24 24","stroke","currentColor",1,"h-5","w-5"],["stroke-linecap","round","stroke-linejoin","round","stroke-width","2","d","M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"],[1,"text-sm",3,"text-green-400","text-red-400"],["type","button","title","K\xFCld\xE9s Quick Input-ba","aria-label","K\xFCld\xE9s Quick Input-ba",1,"p-2","min-h-[44px]","min-w-[44px]","flex","items-center","justify-center","rounded","text-neutral-300","hover:bg-neutral-600","hover:text-white","transition-colors","disabled:opacity-50","disabled:cursor-not-allowed",3,"click","disabled"],["stroke-linecap","round","stroke-linejoin","round","stroke-width","2","d","M12 19l9 2-9-18-9 18 9-2zm0 0v-8"],[1,"p-4","flex-1","min-h-0","overflow-y-auto","space-y-4","overscroll-contain"],[1,"text-sm","font-medium","text-neutral-400","mb-1"],[1,"text-neutral-100","break-words"],[1,"rounded-md","border","border-amber-600/60","bg-amber-950/40","p-3","space-y-2"],["type","button",1,"text-neutral-400","hover:text-neutral-200","text-sm","mb-1","text-left","w-full","flex","items-center","gap-1",3,"click"],["viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2","stroke-linecap","round","stroke-linejoin","round",1,"w-3","h-3","shrink-0","transition-transform","duration-150"],["points","6 9 12 15 18 9"],[1,"p-3","bg-neutral-900","rounded","text-xs","text-neutral-300","overflow-x-auto","whitespace-pre-wrap","break-words","max-h-[70vh]","overflow-y-auto"],[1,"text-sm"],[1,"text-sm","font-medium","text-amber-200/95"],[1,"list-disc","list-inside","space-y-1.5","text-xs","text-amber-100/90"],[1,"break-words"],[1,"pt-1","space-y-1"],[1,"text-xs","font-medium","text-neutral-400"],[1,"space-y-1","text-xs"],["target","_blank","rel","noopener noreferrer",1,"text-ccapAccent","hover:underline","break-all",3,"href"],[1,"text-neutral-300","text-sm"],[1,"text-neutral-300","text-sm","break-words"],[1,"text-xs","text-neutral-400","mb-2"],[1,"space-y-3","text-xs","text-neutral-300"],[1,"border","border-neutral-600","rounded-md","p-2","bg-neutral-900/80"],[1,"font-medium","text-neonCyan/90","mb-1"],[1,"whitespace-pre-wrap","break-words","text-neutral-400"]],template:function(t,r){t&1&&A(0,Ct,31,15,"div",0),t&2&&v(r.error()?0:-1)},dependencies:[we],encapsulation:2})}return i})();export{qe as a,ae as b,le as c,w as d,R as e,Be as f,dn as g,H as h,He as i,te as j,$n as k};
|
|
39
|
-
//# sourceMappingURL=chunk-
|
|
39
|
+
//# sourceMappingURL=chunk-GJGBEN73.js.map
|