@futdevpro/ccap 1.1.3472 → 1.1.3475
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-ORETU4C4.js → agent-instances.module-DMLE5SQ6.js} +2 -2
- package/client-dist/{ca.module-XU3RU5WI.js → ca.module-QOHKCHLO.js} +2 -2
- package/client-dist/{cc-usage-dashboard.component-XZMV7C2A.js → cc-usage-dashboard.component-Q7JB2QGU.js} +2 -2
- package/client-dist/cc-usage-dashboard.component-Q7JB2QGU.js.map +7 -0
- package/client-dist/{cc.module-OVYH7HDX.js → cc.module-5G7YIZIN.js} +2 -2
- package/client-dist/{cc.module-OVYH7HDX.js.map → cc.module-5G7YIZIN.js.map} +1 -1
- package/client-dist/{chunk-MYUJTKZZ.js → chunk-2REG4JGE.js} +2 -2
- package/client-dist/{chunk-LLHIPXPK.js → chunk-3BTPNZMW.js} +2 -2
- package/client-dist/{chunk-THHFPFSJ.js → chunk-3OSBKV37.js} +2 -2
- package/client-dist/{chunk-W7KUBZJ2.js → chunk-3XIKUFTG.js} +2 -2
- package/client-dist/{chunk-JTJ64BYT.js → chunk-45AAM2E6.js} +2 -2
- package/client-dist/{chunk-JEM5PIVF.js → chunk-45QQ75U4.js} +2 -2
- package/client-dist/{chunk-RBIRZL76.js → chunk-4HU6KBS2.js} +2 -2
- package/client-dist/{chunk-F5WKTR3W.js → chunk-4RSRS6ZD.js} +2 -2
- package/client-dist/{chunk-U6PK7K5R.js → chunk-5YFMIJGP.js} +2 -2
- package/client-dist/{chunk-NAXRLDMX.js → chunk-6UCTALVH.js} +2 -2
- package/client-dist/{chunk-7BDJCDI2.js → chunk-74OHWSOM.js} +2 -2
- package/client-dist/{chunk-SUQBC6CV.js → chunk-7KVFGSPS.js} +2 -2
- package/client-dist/{chunk-JUVY4GXD.js → chunk-7XBV7PXE.js} +2 -2
- package/client-dist/{chunk-MW4WZMOK.js → chunk-A2I5OKYO.js} +2 -2
- package/client-dist/{chunk-W7LI4RRE.js → chunk-AFY476P6.js} +2 -2
- package/client-dist/{chunk-RQZKWSZ5.js → chunk-AXBADCJF.js} +2 -2
- package/client-dist/{chunk-KGYWMIQJ.js → chunk-BTKVE43X.js} +2 -2
- package/client-dist/{chunk-6SMRFEEE.js → chunk-CLBQLVIQ.js} +2 -2
- package/client-dist/{chunk-B6FRLDT6.js → chunk-CXDFXM7A.js} +2 -2
- package/client-dist/{chunk-5AJE5M6X.js → chunk-D624TAJK.js} +2 -2
- package/client-dist/{chunk-6ULWDTUR.js → chunk-EETHWHWB.js} +2 -2
- package/client-dist/{chunk-JHMZKIVG.js → chunk-HOIPM3VO.js} +2 -2
- package/client-dist/{chunk-D7YVQJMU.js → chunk-I6VVYTVP.js} +2 -2
- package/client-dist/{chunk-NIAHCU6O.js → chunk-IZCSH6HT.js} +2 -2
- package/client-dist/{chunk-CVIKSKEP.js → chunk-JB7QCGTL.js} +2 -2
- package/client-dist/{chunk-QPN5U5DL.js → chunk-JCDL4BUN.js} +2 -2
- package/client-dist/{chunk-FUAZESUI.js → chunk-JSDJGSEJ.js} +2 -2
- package/client-dist/{chunk-6PZRPTLP.js → chunk-K5DYQMWL.js} +2 -2
- package/client-dist/{chunk-HMWMKVGQ.js → chunk-KI5TGLLN.js} +2 -2
- package/client-dist/{chunk-PJ7XFZCP.js → chunk-KP7EE7KX.js} +2 -2
- package/client-dist/{chunk-BLBZDQAC.js → chunk-LK72JGGM.js} +2 -2
- package/client-dist/{chunk-CCVAQETK.js → chunk-NYN276YL.js} +2 -2
- package/client-dist/chunk-NYN276YL.js.map +7 -0
- package/client-dist/{chunk-BYYD4WGI.js → chunk-O4AGH6FE.js} +2 -2
- package/client-dist/{chunk-XVQGBI7F.js → chunk-PIVAVJA3.js} +2 -2
- package/client-dist/{chunk-GGWONO6R.js → chunk-PWGP7JAY.js} +2 -2
- package/client-dist/{chunk-6DFM4DSL.js → chunk-PYBPMJVA.js} +2 -2
- package/client-dist/{chunk-WUNSZS5D.js → chunk-PZWZ5LED.js} +2 -2
- package/client-dist/{chunk-27YSKWMH.js → chunk-QSTOFD3E.js} +2 -2
- package/client-dist/{chunk-SY2VZTPV.js → chunk-RSHIAWAM.js} +2 -2
- package/client-dist/{chunk-Y732BBLW.js → chunk-SWOZFC5L.js} +2 -2
- package/client-dist/{chunk-OWCLRJKX.js → chunk-TAUATS6O.js} +2 -2
- package/client-dist/{chunk-CKVU7IOJ.js → chunk-U23LUA3L.js} +2 -2
- package/client-dist/{chunk-JU2WSBTO.js → chunk-UAGCRRSF.js} +2 -2
- package/client-dist/{chunk-LBGGD6N4.js → chunk-UEZEQPYZ.js} +2 -2
- package/client-dist/{chunk-USRQOKZS.js → chunk-UTPSCM4T.js} +2 -2
- package/client-dist/{chunk-MUH7O4WZ.js → chunk-UV2CNQPN.js} +2 -2
- package/client-dist/{chunk-Y3VM3QEL.js → chunk-UVUPZWVM.js} +2 -2
- package/client-dist/{chunk-YGQUW5IK.js → chunk-VZDVIDOY.js} +2 -2
- package/client-dist/{chunk-PLVVQ4WV.js → chunk-VZWJDDQO.js} +2 -2
- package/client-dist/{chunk-PK6TSNGP.js → chunk-X4LM76A6.js} +2 -2
- package/client-dist/{chunk-X64MACZF.js → chunk-XLI6UF2I.js} +2 -2
- package/client-dist/{chunk-EYAKADSX.js → chunk-Y5BU7PKD.js} +2 -2
- package/client-dist/{chunk-3O5EFMMB.js → chunk-YABLCEL2.js} +2 -2
- package/client-dist/{chunk-HMYWRRZU.js → chunk-ZHZZ23WS.js} +2 -2
- package/client-dist/{chunk-GFJXVSYA.js → chunk-ZP5H6DPG.js} +2 -2
- package/client-dist/{chunk-GQHC47CX.js → chunk-ZTJG3WRV.js} +2 -2
- package/client-dist/{chunk-GQHC47CX.js.map → chunk-ZTJG3WRV.js.map} +1 -1
- package/client-dist/{chunk-XXUXHU2G.js → chunk-ZYDX4CZ4.js} +2 -2
- package/client-dist/{consultant.module-ASUOHDQO.js → consultant.module-YAJAXDG4.js} +2 -2
- package/client-dist/{crd.module-65NWPZMN.js → crd.module-6MAO5PYR.js} +2 -2
- package/client-dist/{dashboard.module-TLFGGUJK.js → dashboard.module-FYRAAV5H.js} +2 -2
- package/client-dist/{do.module-BOKGM5BZ.js → do.module-2GCOF5CS.js} +2 -2
- package/client-dist/{document-library.module-KANUFXKK.js → document-library.module-SMSACCOR.js} +2 -2
- package/client-dist/{embedding-eval.module-5DMMIQGY.js → embedding-eval.module-D4MSUV46.js} +2 -2
- package/client-dist/{embedding-registry.module-SYLRYPCY.js → embedding-registry.module-AGKRAKFD.js} +2 -2
- package/client-dist/{err.module-N4YUGIO5.js → err.module-7TIY3H7V.js} +2 -2
- package/client-dist/{feedback.module-JPXS2M76.js → feedback.module-OQGBQUDO.js} +2 -2
- package/client-dist/{host-runtime-mcp.module-43GMPPSN.js → host-runtime-mcp.module-MWKIKSX5.js} +2 -2
- package/client-dist/index.html +1 -1
- package/client-dist/{live-dev-pipeline.module-RGNYG3KM.js → live-dev-pipeline.module-W5RQPWRY.js} +2 -2
- package/client-dist/{logs.module-EUB7CCIQ.js → logs.module-52SIGR4B.js} +2 -2
- package/client-dist/{main-GE66ZGJY.js → main-3VHQGHYH.js} +3 -3
- package/client-dist/{master-control-remote-poc.module-2QTXC5ON.js → master-control-remote-poc.module-BM3SO7E2.js} +2 -2
- package/client-dist/{mobile-app.module-JFHYQ6W6.js → mobile-app.module-I77M7L5F.js} +2 -2
- package/client-dist/{model-registry.module-J3RV3VHM.js → model-registry.module-REDLL4RE.js} +2 -2
- package/client-dist/{oc.module-2TBBPTBU.js → oc.module-NGAYUB5S.js} +2 -2
- package/client-dist/{orc.module-K4L3D7TZ.js → orc.module-L74IH6HE.js} +2 -2
- package/client-dist/{project-management.module-NUN7ZVFO.js → project-management.module-YGDAUDD4.js} +2 -2
- package/client-dist/project-source-routed.module-IUH445SK.js +2 -0
- package/client-dist/{scheduler.module-REFQKPR5.js → scheduler.module-PPM6CPOG.js} +2 -2
- package/client-dist/{session.module-7MIPVZ2I.js → session.module-WDSN7ISN.js} +2 -2
- package/client-dist/{set.module-KMRWBSUE.js → set.module-YDZDF4KJ.js} +2 -2
- package/client-dist/{setup.module-4KH5G6AL.js → setup.module-EKA4N3W7.js} +2 -2
- package/client-dist/{terminals.module-TZIA3COB.js → terminals.module-A72F2AGE.js} +2 -2
- package/client-dist/{voice-notes-poc.module-RHHQKPRU.js → voice-notes-poc.module-A5ZHRPJX.js} +2 -2
- package/client-dist/{wfs.module-GMA66N2F.js → wfs.module-XY7IV5Y7.js} +2 -2
- package/package.json +1 -1
- package/server/build/src/app.server.d.ts.map +1 -1
- package/server/build/src/app.server.js +4 -9
- package/server/build/src/app.server.js.map +1 -1
- package/client-dist/cc-usage-dashboard.component-XZMV7C2A.js.map +0 -7
- package/client-dist/chunk-CCVAQETK.js.map +0 -7
- package/client-dist/project-source-routed.module-VWUKBPAC.js +0 -2
- /package/client-dist/{agent-instances.module-ORETU4C4.js.map → agent-instances.module-DMLE5SQ6.js.map} +0 -0
- /package/client-dist/{ca.module-XU3RU5WI.js.map → ca.module-QOHKCHLO.js.map} +0 -0
- /package/client-dist/{chunk-MYUJTKZZ.js.map → chunk-2REG4JGE.js.map} +0 -0
- /package/client-dist/{chunk-LLHIPXPK.js.map → chunk-3BTPNZMW.js.map} +0 -0
- /package/client-dist/{chunk-THHFPFSJ.js.map → chunk-3OSBKV37.js.map} +0 -0
- /package/client-dist/{chunk-W7KUBZJ2.js.map → chunk-3XIKUFTG.js.map} +0 -0
- /package/client-dist/{chunk-JTJ64BYT.js.map → chunk-45AAM2E6.js.map} +0 -0
- /package/client-dist/{chunk-JEM5PIVF.js.map → chunk-45QQ75U4.js.map} +0 -0
- /package/client-dist/{chunk-RBIRZL76.js.map → chunk-4HU6KBS2.js.map} +0 -0
- /package/client-dist/{chunk-F5WKTR3W.js.map → chunk-4RSRS6ZD.js.map} +0 -0
- /package/client-dist/{chunk-U6PK7K5R.js.map → chunk-5YFMIJGP.js.map} +0 -0
- /package/client-dist/{chunk-NAXRLDMX.js.map → chunk-6UCTALVH.js.map} +0 -0
- /package/client-dist/{chunk-7BDJCDI2.js.map → chunk-74OHWSOM.js.map} +0 -0
- /package/client-dist/{chunk-SUQBC6CV.js.map → chunk-7KVFGSPS.js.map} +0 -0
- /package/client-dist/{chunk-JUVY4GXD.js.map → chunk-7XBV7PXE.js.map} +0 -0
- /package/client-dist/{chunk-MW4WZMOK.js.map → chunk-A2I5OKYO.js.map} +0 -0
- /package/client-dist/{chunk-W7LI4RRE.js.map → chunk-AFY476P6.js.map} +0 -0
- /package/client-dist/{chunk-RQZKWSZ5.js.map → chunk-AXBADCJF.js.map} +0 -0
- /package/client-dist/{chunk-KGYWMIQJ.js.map → chunk-BTKVE43X.js.map} +0 -0
- /package/client-dist/{chunk-6SMRFEEE.js.map → chunk-CLBQLVIQ.js.map} +0 -0
- /package/client-dist/{chunk-B6FRLDT6.js.map → chunk-CXDFXM7A.js.map} +0 -0
- /package/client-dist/{chunk-5AJE5M6X.js.map → chunk-D624TAJK.js.map} +0 -0
- /package/client-dist/{chunk-6ULWDTUR.js.map → chunk-EETHWHWB.js.map} +0 -0
- /package/client-dist/{chunk-JHMZKIVG.js.map → chunk-HOIPM3VO.js.map} +0 -0
- /package/client-dist/{chunk-D7YVQJMU.js.map → chunk-I6VVYTVP.js.map} +0 -0
- /package/client-dist/{chunk-NIAHCU6O.js.map → chunk-IZCSH6HT.js.map} +0 -0
- /package/client-dist/{chunk-CVIKSKEP.js.map → chunk-JB7QCGTL.js.map} +0 -0
- /package/client-dist/{chunk-QPN5U5DL.js.map → chunk-JCDL4BUN.js.map} +0 -0
- /package/client-dist/{chunk-FUAZESUI.js.map → chunk-JSDJGSEJ.js.map} +0 -0
- /package/client-dist/{chunk-6PZRPTLP.js.map → chunk-K5DYQMWL.js.map} +0 -0
- /package/client-dist/{chunk-HMWMKVGQ.js.map → chunk-KI5TGLLN.js.map} +0 -0
- /package/client-dist/{chunk-PJ7XFZCP.js.map → chunk-KP7EE7KX.js.map} +0 -0
- /package/client-dist/{chunk-BLBZDQAC.js.map → chunk-LK72JGGM.js.map} +0 -0
- /package/client-dist/{chunk-BYYD4WGI.js.map → chunk-O4AGH6FE.js.map} +0 -0
- /package/client-dist/{chunk-XVQGBI7F.js.map → chunk-PIVAVJA3.js.map} +0 -0
- /package/client-dist/{chunk-GGWONO6R.js.map → chunk-PWGP7JAY.js.map} +0 -0
- /package/client-dist/{chunk-6DFM4DSL.js.map → chunk-PYBPMJVA.js.map} +0 -0
- /package/client-dist/{chunk-WUNSZS5D.js.map → chunk-PZWZ5LED.js.map} +0 -0
- /package/client-dist/{chunk-27YSKWMH.js.map → chunk-QSTOFD3E.js.map} +0 -0
- /package/client-dist/{chunk-SY2VZTPV.js.map → chunk-RSHIAWAM.js.map} +0 -0
- /package/client-dist/{chunk-Y732BBLW.js.map → chunk-SWOZFC5L.js.map} +0 -0
- /package/client-dist/{chunk-OWCLRJKX.js.map → chunk-TAUATS6O.js.map} +0 -0
- /package/client-dist/{chunk-CKVU7IOJ.js.map → chunk-U23LUA3L.js.map} +0 -0
- /package/client-dist/{chunk-JU2WSBTO.js.map → chunk-UAGCRRSF.js.map} +0 -0
- /package/client-dist/{chunk-LBGGD6N4.js.map → chunk-UEZEQPYZ.js.map} +0 -0
- /package/client-dist/{chunk-USRQOKZS.js.map → chunk-UTPSCM4T.js.map} +0 -0
- /package/client-dist/{chunk-MUH7O4WZ.js.map → chunk-UV2CNQPN.js.map} +0 -0
- /package/client-dist/{chunk-Y3VM3QEL.js.map → chunk-UVUPZWVM.js.map} +0 -0
- /package/client-dist/{chunk-YGQUW5IK.js.map → chunk-VZDVIDOY.js.map} +0 -0
- /package/client-dist/{chunk-PLVVQ4WV.js.map → chunk-VZWJDDQO.js.map} +0 -0
- /package/client-dist/{chunk-PK6TSNGP.js.map → chunk-X4LM76A6.js.map} +0 -0
- /package/client-dist/{chunk-X64MACZF.js.map → chunk-XLI6UF2I.js.map} +0 -0
- /package/client-dist/{chunk-EYAKADSX.js.map → chunk-Y5BU7PKD.js.map} +0 -0
- /package/client-dist/{chunk-3O5EFMMB.js.map → chunk-YABLCEL2.js.map} +0 -0
- /package/client-dist/{chunk-HMYWRRZU.js.map → chunk-ZHZZ23WS.js.map} +0 -0
- /package/client-dist/{chunk-GFJXVSYA.js.map → chunk-ZP5H6DPG.js.map} +0 -0
- /package/client-dist/{chunk-XXUXHU2G.js.map → chunk-ZYDX4CZ4.js.map} +0 -0
- /package/client-dist/{consultant.module-ASUOHDQO.js.map → consultant.module-YAJAXDG4.js.map} +0 -0
- /package/client-dist/{crd.module-65NWPZMN.js.map → crd.module-6MAO5PYR.js.map} +0 -0
- /package/client-dist/{dashboard.module-TLFGGUJK.js.map → dashboard.module-FYRAAV5H.js.map} +0 -0
- /package/client-dist/{do.module-BOKGM5BZ.js.map → do.module-2GCOF5CS.js.map} +0 -0
- /package/client-dist/{document-library.module-KANUFXKK.js.map → document-library.module-SMSACCOR.js.map} +0 -0
- /package/client-dist/{embedding-eval.module-5DMMIQGY.js.map → embedding-eval.module-D4MSUV46.js.map} +0 -0
- /package/client-dist/{embedding-registry.module-SYLRYPCY.js.map → embedding-registry.module-AGKRAKFD.js.map} +0 -0
- /package/client-dist/{err.module-N4YUGIO5.js.map → err.module-7TIY3H7V.js.map} +0 -0
- /package/client-dist/{feedback.module-JPXS2M76.js.map → feedback.module-OQGBQUDO.js.map} +0 -0
- /package/client-dist/{host-runtime-mcp.module-43GMPPSN.js.map → host-runtime-mcp.module-MWKIKSX5.js.map} +0 -0
- /package/client-dist/{live-dev-pipeline.module-RGNYG3KM.js.map → live-dev-pipeline.module-W5RQPWRY.js.map} +0 -0
- /package/client-dist/{logs.module-EUB7CCIQ.js.map → logs.module-52SIGR4B.js.map} +0 -0
- /package/client-dist/{main-GE66ZGJY.js.map → main-3VHQGHYH.js.map} +0 -0
- /package/client-dist/{master-control-remote-poc.module-2QTXC5ON.js.map → master-control-remote-poc.module-BM3SO7E2.js.map} +0 -0
- /package/client-dist/{mobile-app.module-JFHYQ6W6.js.map → mobile-app.module-I77M7L5F.js.map} +0 -0
- /package/client-dist/{model-registry.module-J3RV3VHM.js.map → model-registry.module-REDLL4RE.js.map} +0 -0
- /package/client-dist/{oc.module-2TBBPTBU.js.map → oc.module-NGAYUB5S.js.map} +0 -0
- /package/client-dist/{orc.module-K4L3D7TZ.js.map → orc.module-L74IH6HE.js.map} +0 -0
- /package/client-dist/{project-management.module-NUN7ZVFO.js.map → project-management.module-YGDAUDD4.js.map} +0 -0
- /package/client-dist/{project-source-routed.module-VWUKBPAC.js.map → project-source-routed.module-IUH445SK.js.map} +0 -0
- /package/client-dist/{scheduler.module-REFQKPR5.js.map → scheduler.module-PPM6CPOG.js.map} +0 -0
- /package/client-dist/{session.module-7MIPVZ2I.js.map → session.module-WDSN7ISN.js.map} +0 -0
- /package/client-dist/{set.module-KMRWBSUE.js.map → set.module-YDZDF4KJ.js.map} +0 -0
- /package/client-dist/{setup.module-4KH5G6AL.js.map → setup.module-EKA4N3W7.js.map} +0 -0
- /package/client-dist/{terminals.module-TZIA3COB.js.map → terminals.module-A72F2AGE.js.map} +0 -0
- /package/client-dist/{voice-notes-poc.module-RHHQKPRU.js.map → voice-notes-poc.module-A5ZHRPJX.js.map} +0 -0
- /package/client-dist/{wfs.module-GMA66N2F.js.map → wfs.module-XY7IV5Y7.js.map} +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["src/app/_modules/external-sessions/_modules/claude-code/_services/cc-account.api-service.ts", "src/app/_modules/external-sessions/_modules/claude-code/_services/cc-account.data-service.ts", "src/app/_modules/external-sessions/_modules/claude-code/_collections/cc-account-usage-chart.util.ts", "src/app/_modules/external-sessions/_modules/claude-code/_components/cc-account-usage-view/cc-account-usage-view.component.ts", "src/app/_modules/external-sessions/_modules/claude-code/_components/cc-account-usage-view/cc-account-usage-view.component.html"],
|
|
4
|
-
"sourcesContent": ["import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\nimport { firstValueFrom } from 'rxjs';\n\nimport { CC_Account_Response } from '../_models/interfaces/cc-account.interface';\nimport { CC_AccountUsageEvent_Response } from '../_models/interfaces/cc-account-usage-event.interface';\nimport {\n CC_AccountInstanceMapping_Response,\n CC_AccountUsageState_Response,\n} from '../_models/interfaces/cc-account-usage-state.interface';\nimport { CC_AccountIdentityList_Response } from '../_models/interfaces/cc-account-identity-group.interface';\nimport { environment } from '../../../../../../environments/environment';\n\n/**\n * CC Account REST API service (REQ-CC-USAGE-DASHBOARD-001 Slice 5 cycle 856).\n *\n * HTTP-bridge a server-oldali `CC_Account_Controller` endpoint-jaihoz\n * (`/cc-account/*`). Egyszerű thin api-service mintán a\n * `cc-cci-instance-data.api-service.ts`-hez hasonlóan: minden hívás\n * `firstValueFrom`-mal Promise-ra fordított `HttpClient` get/post/patch.\n *\n * A Slice 5+ Dashboard komponensek és a Slice 6 instance-mapping view\n * data-service-en keresztül használja.\n */\n@Injectable({ providedIn: 'root' })\nexport class CC_Account_ApiService {\n\n private readonly baseUrl: string = `${environment.api.baseUrl}/cc-account`;\n\n private readonly http: HttpClient = inject(HttpClient);\n\n /** GET /cc-account/list — cross-instance account-lista. */\n listAccounts(): Promise<{ items: CC_Account_Response[] }> {\n return firstValueFrom(\n this.http.get<{ items: CC_Account_Response[] }>(`${this.baseUrl}/list`),\n );\n }\n\n /**\n * GET /cc-account/list-by-identity — REQ-CC-ACCOUNT-IDENTITY-EMAIL-001 Slice 3\n * part-1 (cycle 890): account-lista accountIdentity szerint csoportosítva.\n * A Dashboard ezt használja a per-email view-hoz (a token-rotation\n * duplikátumok egyetlen kártyán).\n */\n listAccountsByIdentity(): Promise<CC_AccountIdentityList_Response> {\n return firstValueFrom(\n this.http.get<CC_AccountIdentityList_Response>(`${this.baseUrl}/list-by-identity`),\n );\n }\n\n /**\n * POST /cc-account/backfill-identity — REQ-CC-ACCOUNT-IDENTITY-EMAIL-001\n * Slice 2 (cycle 889): manuális identity-backfill trigger.\n */\n backfillIdentity(): Promise<{\n totalScanned: number;\n alreadyPopulated: number;\n populated: number;\n skippedMissingFile: number;\n skippedInvalidPayload: number;\n failures: number;\n }> {\n return firstValueFrom(\n this.http.post<{\n totalScanned: number;\n alreadyPopulated: number;\n populated: number;\n skippedMissingFile: number;\n skippedInvalidPayload: number;\n failures: number;\n }>(`${this.baseUrl}/backfill-identity`, {}),\n );\n }\n\n /**\n * GET /cc-account/identity-audit — REQ-CC-ACCOUNT-IDENTITY-EMAIL-001 Slice 2\n * (cycle 889): identity-duplikáció audit.\n */\n auditIdentityDuplicates(): Promise<{\n duplicateGroups: { accountIdentity: string; accountKeys: string[]; count: number }[];\n totalDuplicates: number;\n uniqueIdentities: number;\n recordsWithoutIdentity: number;\n }> {\n return firstValueFrom(\n this.http.get<{\n duplicateGroups: { accountIdentity: string; accountKeys: string[]; count: number }[];\n totalDuplicates: number;\n uniqueIdentities: number;\n recordsWithoutIdentity: number;\n }>(`${this.baseUrl}/identity-audit`),\n );\n }\n\n /** POST /cc-account/refresh — a hívó CCAP instance-en credential-discovery újrafutás. */\n refreshLocalAccounts(): Promise<{ refreshedKeys: string[]; scannedPaths: number }> {\n return firstValueFrom(\n this.http.post<{ refreshedKeys: string[]; scannedPaths: number }>(\n `${this.baseUrl}/refresh`,\n {},\n ),\n );\n }\n\n /**\n * GET /cc-account/instance-mapping — Slice 4 cross-instance aggregate.\n * Minden ismert CCAP instance group-by lastObservedByCcapId — melyik account-okat\n * látta utoljára.\n */\n getInstanceMapping(): Promise<CC_AccountInstanceMapping_Response> {\n return firstValueFrom(\n this.http.get<CC_AccountInstanceMapping_Response>(`${this.baseUrl}/instance-mapping`),\n );\n }\n\n /** GET /cc-account/:accountKey — egy account részletek. */\n getAccount(accountKey: string): Promise<CC_Account_Response> {\n return firstValueFrom(\n this.http.get<CC_Account_Response>(`${this.baseUrl}/${accountKey}`),\n );\n }\n\n /**\n * GET /cc-account/:accountKey/usage — Slice 3 per-account usage state-ek.\n * 0..5 rekord (egy windowType-onként).\n */\n getAccountUsage(accountKey: string): Promise<{ items: CC_AccountUsageState_Response[] }> {\n return firstValueFrom(\n this.http.get<{ items: CC_AccountUsageState_Response[] }>(\n `${this.baseUrl}/${accountKey}/usage`,\n ),\n );\n }\n\n /**\n * GET /cc-account/:accountKey/usage-history — történeti event-lista\n * (REQ-CC-USAGE-DASHBOARD-001 cycle 879). Append-only timeline; opcionális\n * windowType + idő-tartomány szűrők (`fromMs`, `toMs`).\n */\n getAccountUsageHistory(params: {\n accountKey: string;\n windowType?: string;\n fromMs?: number;\n toMs?: number;\n }): Promise<{ items: CC_AccountUsageEvent_Response[] }> {\n const query: string[] = [];\n if (params.windowType != null && params.windowType !== '') {\n query.push(`windowType=${encodeURIComponent(params.windowType)}`);\n }\n if (params.fromMs != null) {\n query.push(`fromMs=${params.fromMs}`);\n }\n if (params.toMs != null) {\n query.push(`toMs=${params.toMs}`);\n }\n const qs: string = query.length > 0 ? `?${query.join('&')}` : '';\n return firstValueFrom(\n this.http.get<{ items: CC_AccountUsageEvent_Response[] }>(\n `${this.baseUrl}/${params.accountKey}/usage-history${qs}`,\n ),\n );\n }\n\n /**\n * POST /cc-account/:accountKey/refresh-usage — aktív Anthropic usage-pull\n * (REQ-CC-USAGE-DASHBOARD-001 cycle 873). A server credential-fájl + Bearer-rel\n * hív, az 5 window state-et upsert-eli, profile-mezőket (email/orgId/planTier)\n * a CC_Account-ba updateli, socket-broadcast.\n */\n refreshAccountUsage(accountKey: string): Promise<{ status: string; windowsUpserted: number; email: string | null }> {\n return firstValueFrom(\n this.http.post<{ status: string; windowsUpserted: number; email: string | null }>(\n `${this.baseUrl}/${accountKey}/refresh-usage`,\n {},\n ),\n );\n }\n\n /**\n * PATCH /cc-account/:accountKey — user-editable mezők frissítése (cycle 876):\n * `displayName` és/vagy `email`. Mindkettő opcionális; legalább egy kell.\n * `email: null` (vagy üres string) → kitörli (clear). Server-side validáció:\n * displayName 200-char + control-char tiltás, email RFC alap-formátum + 320-char.\n */\n renameAccount(params: {\n accountKey: string;\n displayName?: string;\n email?: string | null;\n }): Promise<CC_Account_Response> {\n const body: Record<string, unknown> = {};\n if (params.displayName !== undefined) {\n body.displayName = params.displayName;\n }\n if (params.email !== undefined) {\n body.email = params.email;\n }\n return firstValueFrom(\n this.http.patch<CC_Account_Response>(\n `${this.baseUrl}/${params.accountKey}`,\n body,\n ),\n );\n }\n}\n", "import { inject, Injectable, NgZone, OnDestroy, signal } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { CCAP_Socket_ControlService } from '../../../../../_services/control-services/ccap-socket.control-service';\nimport { CC_Account_ApiService } from './cc-account.api-service';\nimport { CC_Account_Response } from '../_models/interfaces/cc-account.interface';\nimport { CC_AccountUsageEvent_Response } from '../_models/interfaces/cc-account-usage-event.interface';\nimport {\n CC_AccountInstanceMapping_Response,\n CC_AccountUsageState_Response,\n} from '../_models/interfaces/cc-account-usage-state.interface';\nimport {\n CC_AccountIdentityGroup_Response,\n} from '../_models/interfaces/cc-account-identity-group.interface';\n\n/** Socket envelope shape — `CCAP_Socket_ControlService.event$` Subject közvetíti. */\ninterface SocketEnvelope_Interface {\n event: string;\n payload: Record<string, unknown>;\n}\n\n/** REQ-CC-USAGE-DASHBOARD-001 Slice 6 second-half: socket event nevek. */\nconst SOCKET_EVENT_CC_ACCOUNT_USAGE_UPDATE: string = 'cc:account-usage-update';\nconst SOCKET_EVENT_CC_ACCOUNT_LIST_UPDATE: string = 'cc:account-list-update';\n\n/**\n * CC Account Dashboard data service (REQ-CC-USAGE-DASHBOARD-001 Slice 5 cycle 857).\n *\n * SSOT a Slice 5+ Dashboard kliens-oldali state-jéhez. Signal-ek a komponensek\n * change-detection-jéhez (`accounts_$`, `accountUsageMap_$`, `instanceMapping_$`,\n * `isLoading_$`, `loadError_$`); async metódusok REST hívásokhoz a\n * `CC_Account_ApiService`-en át (cycle 856).\n *\n * NEM perzisztál (a backend DBNT a SSOT) — a kliens csak cache-eli a fetch-eket\n * a komponens élettartam alatt. Refresh: explicit user-action (`refreshAccounts`)\n * vagy szocket-event (Slice 6).\n */\n@Injectable({ providedIn: 'root' })\nexport class CC_Account_DataService implements OnDestroy {\n\n private readonly account_AS: CC_Account_ApiService = inject(CC_Account_ApiService);\n private readonly socket_CS: CCAP_Socket_ControlService = inject(CCAP_Socket_ControlService);\n private readonly ngZone: NgZone = inject(NgZone);\n\n /** Socket envelope subscription élettartam-kezelése. */\n private socketSubscription: Subscription | null = null;\n\n /** Cross-instance account-lista (a `listAccounts` REST eredménye). */\n readonly accounts_$ = signal<CC_Account_Response[]>([]);\n\n /**\n * Per-account usage state cache: `accountKey → usage-state[]` (5 windowType-onként\n * egy rekord max). A Slice 5 Dashboard account-card-ok ebből rendernek.\n */\n readonly accountUsageMap_$ = signal<Map<string, CC_AccountUsageState_Response[]>>(\n new Map(),\n );\n\n /** Cross-instance aggregate (Slice 4 instance-mapping endpoint cache). */\n readonly instanceMapping_$ = signal<CC_AccountInstanceMapping_Response | null>(null);\n\n /**\n * Per-account usage-history cache: `accountKey → event[]` (REQ-CC-USAGE-DASHBOARD-001\n * cycle 879). Append-only timeline a `ccap_cc_account_usage_event` collection-ből;\n * lazy-loaded a Dashboard expand-panel megnyitásakor.\n */\n readonly usageHistoryMap_$ = signal<Map<string, CC_AccountUsageEvent_Response[]>>(\n new Map(),\n );\n\n /**\n * REQ-CC-ACCOUNT-IDENTITY-EMAIL-001 Slice 3 part-1 (cycle 890): identity-\n * csoportosított account-lista — per-email view a Dashboard-on. A\n * `accounts_$` (raw rekordok, duplikátumokkal) MELLETT él; a Dashboard a\n * `identityGroups_$`-ot rendereli (egy kártya / identity), az `accounts_$`\n * audit / admin-célokra megmarad.\n */\n readonly identityGroups_$ = signal<CC_AccountIdentityGroup_Response[]>([]);\n\n /** Bármelyik load folyamatban-e (UI spinner-hez). */\n readonly isLoading_$ = signal<boolean>(false);\n\n /** Utolsó load hiba — null ha sikeres vagy nem futott. */\n readonly loadError_$ = signal<string | null>(null);\n\n /**\n * Bootstrap fetch: account-list + instance-mapping párhuzamosan, majd a\n * megismert account-okhoz az 5 windowType-os usage state-eket is lehúzzuk\n * (REQ-CC-USAGE-DASHBOARD-001 cycle 883). Ez biztosítja, hogy a Dashboard\n * megnyitásakor azonnal látszanak az utolsó perzisztált usage értékek —\n * nem kell auto-pull socket-eventre vagy manuális Pull-clickre várni.\n */\n async loadDashboardBootstrap(): Promise<void> {\n this.isLoading_$.set(true);\n this.loadError_$.set(null);\n try {\n // REQ-CC-ACCOUNT-IDENTITY-EMAIL-001 Slice 3 part-1 (cycle 890): a Dashboard\n // most az identity-group endpoint-ot is használja a per-email view-hoz.\n // Párhuzamosan az accountsList + instance-mapping + identity-groups.\n const [accountsResp, mappingResp, groupsResp] = await Promise.all([\n this.account_AS.listAccounts(),\n this.account_AS.getInstanceMapping(),\n this.account_AS.listAccountsByIdentity(),\n ]);\n this.accounts_$.set(accountsResp.items);\n this.instanceMapping_$.set(mappingResp);\n this.identityGroups_$.set(groupsResp.groups);\n // A `accountUsageMap_$` cache-be a group merged-usage-eket is beleírjuk\n // — a `<app-cc-account-usage-view [accountKey]>` komponens (per identity-group\n // a primary.accountKey-vel) ezt olvassa.\n const nextMap: Map<string, CC_AccountUsageState_Response[]> = new Map(this.accountUsageMap_$());\n for (const group of groupsResp.groups) {\n nextMap.set(group.primary.accountKey, group.mergedUsage);\n }\n this.accountUsageMap_$.set(nextMap);\n } catch (err: unknown) {\n this.loadError_$.set(this.errorMessageOf(err));\n } finally {\n this.isLoading_$.set(false);\n }\n }\n\n /**\n * REQ-CC-ACCOUNT-IDENTITY-EMAIL-001 Slice 3 part-1 (cycle 890): csak az\n * identity-groups refetch-je (a refresh-after-pull / list-update szocketnél).\n */\n async loadIdentityGroups(): Promise<void> {\n try {\n const resp = await this.account_AS.listAccountsByIdentity();\n this.identityGroups_$.set(resp.groups);\n // Merged-usage cache update is.\n const nextMap: Map<string, CC_AccountUsageState_Response[]> = new Map(this.accountUsageMap_$());\n for (const group of resp.groups) {\n nextMap.set(group.primary.accountKey, group.mergedUsage);\n }\n this.accountUsageMap_$.set(nextMap);\n } catch (err: unknown) {\n this.loadError_$.set(this.errorMessageOf(err));\n }\n }\n\n /** Csak az account-listát tölti újra (kis fetch). */\n async loadAccounts(): Promise<void> {\n try {\n const resp = await this.account_AS.listAccounts();\n this.accounts_$.set(resp.items);\n } catch (err: unknown) {\n this.loadError_$.set(this.errorMessageOf(err));\n }\n }\n\n /**\n * Per-account usage-state fetch + cache-be írás. A Slice 5 account-card\n * komponens ezt hívja a saját accountKey-jére.\n */\n async loadAccountUsage(accountKey: string): Promise<void> {\n try {\n const resp = await this.account_AS.getAccountUsage(accountKey);\n const next: Map<string, CC_AccountUsageState_Response[]> = new Map(this.accountUsageMap_$());\n next.set(accountKey, resp.items);\n this.accountUsageMap_$.set(next);\n } catch (err: unknown) {\n this.loadError_$.set(this.errorMessageOf(err));\n }\n }\n\n /**\n * Per-account usage-history fetch + cache-be írás (REQ-CC-USAGE-DASHBOARD-001\n * cycle 879). Lazy: a Dashboard expand-panel megnyitásakor hívjuk. Opcionális\n * windowType + idő-tartomány szűrőkkel.\n */\n async loadAccountUsageHistory(params: {\n accountKey: string;\n windowType?: string;\n fromMs?: number;\n toMs?: number;\n }): Promise<void> {\n try {\n const resp = await this.account_AS.getAccountUsageHistory(params);\n const next: Map<string, CC_AccountUsageEvent_Response[]> = new Map(this.usageHistoryMap_$());\n next.set(params.accountKey, resp.items);\n this.usageHistoryMap_$.set(next);\n } catch (err: unknown) {\n this.loadError_$.set(this.errorMessageOf(err));\n }\n }\n\n /** Cross-instance aggregate refetch (Slice 4 — Slice 6 view bootstrap-jánál). */\n async loadInstanceMapping(): Promise<void> {\n try {\n const resp = await this.account_AS.getInstanceMapping();\n this.instanceMapping_$.set(resp);\n } catch (err: unknown) {\n this.loadError_$.set(this.errorMessageOf(err));\n }\n }\n\n /**\n * Explicit user-trigger: a hívó CCAP instance-en credential-discovery újrafutás\n * + account-lista refetch. POST /refresh után automatikusan listAccounts-szal frissít.\n */\n async refreshAccounts(): Promise<{ refreshedKeys: string[]; scannedPaths: number }> {\n this.isLoading_$.set(true);\n this.loadError_$.set(null);\n try {\n const refreshResult = await this.account_AS.refreshLocalAccounts();\n await this.loadAccounts();\n return refreshResult;\n } catch (err: unknown) {\n this.loadError_$.set(this.errorMessageOf(err));\n return { refreshedKeys: [], scannedPaths: 0 };\n } finally {\n this.isLoading_$.set(false);\n }\n }\n\n /**\n * Aktív usage-pull egy adott account-ra (REQ-CC-USAGE-DASHBOARD-001 cycle 873).\n * A server `POST /cc-account/:accountKey/refresh-usage`-t hívja, ami az\n * Anthropic `/api/oauth/usage` endpoint-ját triggeri Bearer-rel. A pull\n * eredménye automatikusan jön socket-eventként (`cc:account-usage-update`),\n * de a sikeres POST után explicit re-fetch-eljük is az adott account usage-ét\n * + a teljes account-listát (a profile-mezők is updatelődtek).\n */\n async refreshAccountUsage(accountKey: string): Promise<{ status: string; windowsUpserted: number; email: string | null }> {\n try {\n const result = await this.account_AS.refreshAccountUsage(accountKey);\n // Re-fetch a friss state-et — bár a socket-event is jön, a cache-frissítés\n // garantált a user-action végén.\n await this.loadAccountUsage(accountKey);\n await this.loadAccounts();\n return result;\n } catch (err: unknown) {\n this.loadError_$.set(this.errorMessageOf(err));\n return { status: 'error', windowsUpserted: 0, email: null };\n }\n }\n\n /**\n * Display-name átírása + a cache-elt account-lista frissítése (a megfelelő\n * elem displayName mezőjének felülírása, signal-update).\n */\n async renameAccount(params: {\n accountKey: string;\n displayName?: string;\n email?: string | null;\n }): Promise<void> {\n try {\n const updated = await this.account_AS.renameAccount(params);\n const next: CC_Account_Response[] = this.accounts_$().map(\n (a): CC_Account_Response => (a.accountKey === params.accountKey ? updated : a),\n );\n this.accounts_$.set(next);\n } catch (err: unknown) {\n this.loadError_$.set(this.errorMessageOf(err));\n }\n }\n\n /**\n * Socket subscription init (REQ-CC-USAGE-DASHBOARD-001 Slice 6 second-half cycle 871).\n * A `CCAP_Socket_ControlService.event$` Subject minden socket-event-et közvetít\n * envelope-formában (event-name + payload). Mi az `cc:account-usage-update`\n * és `cc:account-list-update` event-ekre szűrünk és a megfelelő signal-eket frissítjük.\n *\n * Late subscription: a Dashboard component `ngOnInit`-jéből hívjuk (vagy explicit\n * service-init-kor), hogy ne legyen subscription-overhead, ha a Dashboard sose\n * nyílik meg.\n */\n startLiveUpdates(): void {\n if (this.socketSubscription != null) {\n return;\n }\n this.socketSubscription = this.socket_CS.event$.subscribe(\n (envelope: SocketEnvelope_Interface): void => {\n this.ngZone.run((): void => {\n if (envelope.event === SOCKET_EVENT_CC_ACCOUNT_USAGE_UPDATE) {\n this.handleAccountUsageUpdate(envelope.payload);\n } else if (envelope.event === SOCKET_EVENT_CC_ACCOUNT_LIST_UPDATE) {\n this.handleAccountListUpdate(envelope.payload);\n }\n });\n },\n );\n }\n\n /** Socket subscription teardown (component destroy / explicit stop). */\n stopLiveUpdates(): void {\n if (this.socketSubscription != null) {\n this.socketSubscription.unsubscribe();\n this.socketSubscription = null;\n }\n }\n\n ngOnDestroy(): void {\n this.stopLiveUpdates();\n }\n\n /**\n * Per-account usage state real-time frissítés. A server `persistAccountUsageState`\n * upsert sikere után emit-elt event-ből építjük újra a `accountUsageMap_$`\n * megfelelő `accountKey` bejegyzését. Ha a windowType már szerepel, lecseréljük;\n * különben hozzáadjuk.\n */\n private handleAccountUsageUpdate(payload: Record<string, unknown>): void {\n const accountKey: unknown = payload.accountKey;\n const windowType: unknown = payload.windowType;\n if (typeof accountKey !== 'string' || accountKey === '' || typeof windowType !== 'string') {\n return;\n }\n const newItem: CC_AccountUsageState_Response = {\n accountKey: accountKey,\n windowType: windowType,\n utilization: typeof payload.utilization === 'number' ? payload.utilization : undefined,\n resetsAtMs: typeof payload.resetsAtMs === 'number' ? payload.resetsAtMs : undefined,\n lastObservedStatus: typeof payload.lastObservedStatus === 'string' ? payload.lastObservedStatus : undefined,\n observedAt: typeof payload.observedAt === 'string' ? payload.observedAt : undefined,\n lastObservedByCcapId: typeof payload.lastObservedByCcapId === 'string' ? payload.lastObservedByCcapId : undefined,\n lastObservedBySessionId: typeof payload.lastObservedBySessionId === 'string' ? payload.lastObservedBySessionId : undefined,\n };\n\n const next: Map<string, CC_AccountUsageState_Response[]> = new Map(this.accountUsageMap_$());\n const existing: CC_AccountUsageState_Response[] = next.get(accountKey) ?? [];\n const replaced: CC_AccountUsageState_Response[] = existing.filter(\n (item: CC_AccountUsageState_Response): boolean => item.windowType !== windowType,\n );\n replaced.push(newItem);\n next.set(accountKey, replaced);\n this.accountUsageMap_$.set(next);\n }\n\n /**\n * Account-pool változás (új account felfedezve, displayName-átírás): a\n * legegyszerűbb és legbiztonságosabb módon `loadAccounts()` re-fetch-csel\n * frissítjük a `accounts_$` signal-t. Cross-instance change-ek esetén is\n * ez a megközelítés robosztus (a DB SSOT-ből minden instance ugyanazt látja).\n */\n private handleAccountListUpdate(_payload: Record<string, unknown>): void {\n void this.loadAccounts();\n // REQ-CC-ACCOUNT-IDENTITY-EMAIL-001 Slice 3 part-1 (cycle 890): a Dashboard\n // identity-groups view is frissül a socket-eventre — egyébként új account\n // (vagy backfill utáni identity-update) nem jutna el a Dashboard kártyáira.\n void this.loadIdentityGroups();\n }\n\n /** Hibaüzenet kinyerés tipikus shape-ekből (HttpErrorResponse / Error / unknown). */\n private errorMessageOf(err: unknown): string {\n if (err instanceof Error) {\n return err.message;\n }\n if (typeof err === 'object' && err !== null) {\n const rec: Record<string, unknown> = err as Record<string, unknown>;\n if (typeof rec.message === 'string') {\n return rec.message;\n }\n }\n return String(err);\n }\n}\n", "import { CC_AccountUsageEvent_Response } from '../_models/interfaces/cc-account-usage-event.interface';\nimport {\n CC_AccountUsageChartLine_Interface,\n CC_AccountUsageChart_Result,\n} from '../_models/interfaces/cc-account-usage-chart.interface';\n\n/**\n * Account usage-history → SVG chart-line projektor (REQ-CC-USAGE-DASHBOARD-001\n * cycle 884). Az event-eket windowType-onként szétválogatja, observedAt szerint\n * növekvő sorrendbe rendezi, majd a `(t, utilization)` párokat egy 100×40 unit-os\n * viewBox-ba projektálja (x: 0..100 idő-tengely, y: 0=tele/100% .. 40=üres/0%).\n *\n * A 5 fix windowType-onkénti szín stabil (a Dashboard-kártyák és a Session-info\n * popover is ugyanezt használja, mint vizuális SSOT).\n */\nexport class CC_AccountUsageChart_Util {\n\n static readonly CHART_WIDTH: number = 100;\n static readonly CHART_HEIGHT: number = 40;\n\n /** Fix windowType-onkénti szín-paletta (stroke hex). */\n static readonly COLOR_MAP: Record<string, string> = {\n five_hour: '#10b981',\n seven_day: '#06b6d4',\n seven_day_opus: '#a855f7',\n seven_day_sonnet: '#f59e0b',\n extra_usage: '#f43f5e',\n };\n\n static readonly WINDOW_LABEL_MAP: Record<string, string> = {\n five_hour: '5h',\n seven_day: 'Weekly',\n seven_day_opus: 'Opus',\n seven_day_sonnet: 'Sonnet',\n extra_usage: 'Extra',\n };\n\n /** Fix windowType render-sorrend (stabil legend-sorrend). */\n static readonly WINDOW_ORDER: string[] = [\n 'five_hour',\n 'seven_day',\n 'seven_day_opus',\n 'seven_day_sonnet',\n 'extra_usage',\n ];\n\n /**\n * Account-history events → chart-line projektálás.\n * Üres input → üres result (`hasAnyData=false`); a hívó tudja kezelni az\n * \"no data yet\" placeholder render-t.\n */\n static buildChart(events: CC_AccountUsageEvent_Response[]): CC_AccountUsageChart_Result {\n // Idő-tartomány + érvényes pontok detektálása egy menetben.\n let minT: number = Number.POSITIVE_INFINITY;\n let maxT: number = Number.NEGATIVE_INFINITY;\n let validCount: number = 0;\n for (const e of events) {\n if (typeof e.observedAt !== 'string' || e.observedAt === '') {\n continue;\n }\n if (typeof e.utilization !== 'number' || !isFinite(e.utilization)) {\n continue;\n }\n const t: number = Date.parse(e.observedAt);\n if (!isFinite(t)) {\n continue;\n }\n if (t < minT) {\n minT = t;\n }\n if (t > maxT) {\n maxT = t;\n }\n validCount++;\n }\n\n if (validCount === 0) {\n return {\n lines: CC_AccountUsageChart_Util.WINDOW_ORDER.map(\n (wt: string): CC_AccountUsageChartLine_Interface => ({\n windowType: wt,\n label: CC_AccountUsageChart_Util.WINDOW_LABEL_MAP[wt] ?? wt,\n colorHex: CC_AccountUsageChart_Util.COLOR_MAP[wt] ?? '#9ca3af',\n pathPoints: '',\n hasData: false,\n pointCount: 0,\n lastX: 0,\n lastY: 0,\n }),\n ),\n hasAnyData: false,\n minTimeMs: 0,\n maxTimeMs: 0,\n };\n }\n\n // Degenerate eset: minden esemény ugyanabban a ms-ben — expand-eljük 1h-vel,\n // hogy a vízszintes vonalak ne 0-szélességűek legyenek.\n if (maxT - minT < 1) {\n maxT = minT + 3_600_000;\n }\n const range: number = maxT - minT;\n\n const lines: CC_AccountUsageChartLine_Interface[] =\n CC_AccountUsageChart_Util.WINDOW_ORDER.map((wt: string): CC_AccountUsageChartLine_Interface => {\n // windowType-onkénti gyűjtés + növekvő idő szerinti rendezés.\n const points: { t: number; u: number }[] = [];\n for (const e of events) {\n if (e.windowType !== wt) {\n continue;\n }\n if (typeof e.observedAt !== 'string' || e.observedAt === '') {\n continue;\n }\n if (typeof e.utilization !== 'number' || !isFinite(e.utilization)) {\n continue;\n }\n const t: number = Date.parse(e.observedAt);\n if (!isFinite(t)) {\n continue;\n }\n points.push({ t: t, u: Math.max(0, Math.min(1, e.utilization)) });\n }\n points.sort((a: { t: number; u: number }, b: { t: number; u: number }): number => a.t - b.t);\n\n const coords: string[] = [];\n let lastX: number = 0;\n let lastY: number = 0;\n for (const p of points) {\n const x: number = ((p.t - minT) / range) * CC_AccountUsageChart_Util.CHART_WIDTH;\n const y: number = CC_AccountUsageChart_Util.CHART_HEIGHT\n - (p.u * CC_AccountUsageChart_Util.CHART_HEIGHT);\n coords.push(`${x.toFixed(2)},${y.toFixed(2)}`);\n lastX = x;\n lastY = y;\n }\n\n return {\n windowType: wt,\n label: CC_AccountUsageChart_Util.WINDOW_LABEL_MAP[wt] ?? wt,\n colorHex: CC_AccountUsageChart_Util.COLOR_MAP[wt] ?? '#9ca3af',\n pathPoints: coords.join(' '),\n hasData: coords.length > 0,\n pointCount: coords.length,\n lastX: lastX,\n lastY: lastY,\n };\n });\n\n return {\n lines: lines,\n hasAnyData: lines.some((l: CC_AccountUsageChartLine_Interface): boolean => l.hasData),\n minTimeMs: minT,\n maxTimeMs: maxT,\n };\n }\n}\n", "import { CommonModule } from '@angular/common';\nimport { Component, computed, effect, inject, Input, signal, Signal } from '@angular/core';\n\nimport { CC_Account_DataService } from '../../_services/cc-account.data-service';\nimport { CC_AccountUsageState_Response } from '../../_models/interfaces/cc-account-usage-state.interface';\nimport { CC_AccountUsageChart_Result } from '../../_models/interfaces/cc-account-usage-chart.interface';\nimport { CC_AccountUsageChart_Util } from '../../_collections/cc-account-usage-chart.util';\n\n/**\n * CC Account Usage View — megosztott komponens (REQ-CC-USAGE-DASHBOARD-001 cycle 885).\n *\n * Egy account `accountKey`-éhez tartozó 5 windowType-os usage státusz + opcionális\n * időbeli SVG-graph render. Több helyen használt:\n * - CC Usage Dashboard (account-cards) — `compact=false`, graph elérhető\n * - CC Session info-panel popover — `compact=true` szűk popover-hez\n * - bárhol ahol egy accountKey-hez kell mutatni a usage-snapshot-ot\n *\n * SSOT: a `CC_Account_DataService.accountUsageMap_$` és `usageHistoryMap_$` signal-okat\n * olvassa. Lazy-fetch saját maga: ha a state cache-ben még nincs, indítja a\n * `loadAccountUsage`-t. A history-fetch csak akkor fut, ha a graph megnyílik.\n */\n@Component({\n selector: 'app-cc-account-usage-view',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './cc-account-usage-view.component.html',\n})\n/**\n * REQ-CC-USAGE-DASHBOARD-001 (cycle 885) — shared CC account-usage megjelenítő.\n * Egyetlen komponens a per-account utilization graph + status egységes renderéhez,\n * amit a Dashboard és a CC Session info-panel egyaránt használ (graph + status\n * SSOT). Csak Render-only: state-et a `CC_Account_DataService`-ből olvas.\n */\nexport class CC_AccountUsageView_Component {\n\n private readonly account_DS: CC_Account_DataService = inject(CC_Account_DataService);\n\n /** Account stable kulcs — kötelező input. */\n @Input({ required: true }) accountKey: string = '';\n\n /** Kompakt layout (kisebb fontok, szűkebb padding) — popover-be javasolt. */\n @Input() compact: boolean = false;\n\n /** Igaz → a graph toggle gomb meg fog jelenni (default: true). */\n @Input() showGraphToggle: boolean = true;\n\n /** Igaz → a graph-panel induláskor nyitva (default: false → lezárt). */\n @Input() initiallyOpenGraph: boolean = false;\n\n /** Lokális UI state: a graph-panel nyitva/zárva. */\n readonly isGraphOpen_$ = signal<boolean>(false);\n\n /** SVG chart-data builder az adott account-history cache-éből. */\n readonly chart_$: Signal<CC_AccountUsageChart_Result> = computed(\n (): CC_AccountUsageChart_Result => {\n return CC_AccountUsageChart_Util.buildChart(\n this.account_DS.usageHistoryMap_$().get(this.accountKey) ?? [],\n );\n },\n );\n\n /** SVG viewBox literal (a template használja). */\n readonly chartViewBox: string = `0 0 ${CC_AccountUsageChart_Util.CHART_WIDTH} ${CC_AccountUsageChart_Util.CHART_HEIGHT}`;\n readonly chartW: number = CC_AccountUsageChart_Util.CHART_WIDTH;\n readonly chartH: number = CC_AccountUsageChart_Util.CHART_HEIGHT;\n readonly chartMidY: number = CC_AccountUsageChart_Util.CHART_HEIGHT / 2;\n\n /**\n * Reaktív lazy-fetch: ha az accountKey változik vagy a cache üres, lekérjük\n * a perzisztált usage state-et. Ez azoknál a használati helyeknél kritikus\n * (popover, CC sessions dashboard), ahol a Dashboard-bootstrap NEM futott.\n */\n private readonly usageEffect = effect((): void => {\n const key: string = this.accountKey;\n if (!key) {\n return;\n }\n if (!this.account_DS.accountUsageMap_$().has(key)) {\n void this.account_DS.loadAccountUsage(key);\n }\n });\n\n /** initiallyOpenGraph input alkalmazása az isGraphOpen_$-ra. */\n private readonly initialOpenEffect = effect((): void => {\n if (this.initiallyOpenGraph) {\n this.isGraphOpen_$.set(true);\n }\n });\n\n /** Graph-toggle handler — első megnyitás-kor history-fetch. */\n async handleToggleGraph(): Promise<void> {\n const next: boolean = !this.isGraphOpen_$();\n this.isGraphOpen_$.set(next);\n if (next && !this.account_DS.usageHistoryMap_$().has(this.accountKey)) {\n await this.account_DS.loadAccountUsageHistory({ accountKey: this.accountKey });\n }\n }\n\n /** Explicit refresh — history-fetch reload. */\n async handleRefreshGraph(): Promise<void> {\n await this.account_DS.loadAccountUsageHistory({ accountKey: this.accountKey });\n }\n\n /** Egy adott windowType state-jét adja vissza, vagy null. */\n usageItemOfWindow(windowType: string): CC_AccountUsageState_Response | null {\n const items: CC_AccountUsageState_Response[] = this.account_DS.accountUsageMap_$().get(this.accountKey) ?? [];\n for (const item of items) {\n if (item.windowType === windowType) {\n return item;\n }\n }\n return null;\n }\n\n /** True ha legalább egy windowType-ra van adat. */\n hasAnyUsageData(): boolean {\n const items: CC_AccountUsageState_Response[] = this.account_DS.accountUsageMap_$().get(this.accountKey) ?? [];\n return items.length > 0;\n }\n\n /** Window-typeName → emberi label (pure mapping). */\n windowLabelOf(windowType: string): string {\n switch (windowType) {\n case 'five_hour': return '5-hour session';\n case 'seven_day': return 'Weekly';\n case 'seven_day_opus': return 'Weekly · Opus';\n case 'seven_day_sonnet': return 'Weekly · Sonnet';\n case 'extra_usage': return 'Extra (pay-as-you-go)';\n default: return windowType;\n }\n }\n\n /** Utilization → progress-bar width (0..100%, 0 ha null). */\n utilizationPercent(utilization: number | undefined): number {\n if (utilization == null || !isFinite(utilization)) {\n return 0;\n }\n return Math.max(0, Math.min(100, Math.round(utilization * 100)));\n }\n\n /** Utilization fraction (0..1) → percent string '42%'. null → '—'. */\n formatUtilization(utilization: number | null | undefined): string {\n if (utilization == null) {\n return '—';\n }\n return `${Math.round(utilization * 100)}%`;\n }\n\n /** Progress-bar szín-osztály utilization alapján (zöld/sárga/piros). */\n utilizationBarColorClass(utilization: number | undefined): string {\n if (utilization == null || !isFinite(utilization)) {\n return 'bg-neutral-600';\n }\n if (utilization >= 0.85) {\n return 'bg-red-500';\n }\n if (utilization >= 0.5) {\n return 'bg-amber-500';\n }\n return 'bg-emerald-500';\n }\n\n /** Reset countdown — emberi olvasható ('2h 34m', '5d 1h', 'expired', '—'). */\n formatResetCountdown(resetsAtMs: number | undefined): string {\n if (resetsAtMs == null || !isFinite(resetsAtMs) || resetsAtMs <= 0) {\n return '—';\n }\n const diffMs: number = resetsAtMs - Date.now();\n if (diffMs <= 0) {\n return 'expired';\n }\n const totalMinutes: number = Math.floor(diffMs / 60_000);\n const days: number = Math.floor(totalMinutes / (60 * 24));\n const hours: number = Math.floor((totalMinutes % (60 * 24)) / 60);\n const minutes: number = totalMinutes % 60;\n if (days > 0) {\n return `${days}d ${hours}h`;\n }\n if (hours > 0) {\n return `${hours}h ${minutes}m`;\n }\n return `${minutes}m`;\n }\n}\n", "<!-- CC Account Usage View — megosztott komponens (cycle 885).\n A 5 usage-sor mindig látszik (placeholder ha üres), a graph opcionális toggle-able. -->\n<div class=\"flex flex-col\" [class.gap-1]=\"compact\" [class.gap-2]=\"!compact\">\n <!-- 5 usage-sor: a mindig-látható status block. -->\n <div [class.space-y-1]=\"compact\" [class.space-y-2]=\"!compact\">\n @for (windowType of ['five_hour', 'seven_day', 'seven_day_opus', 'seven_day_sonnet', 'extra_usage']; track windowType) {\n @let item = usageItemOfWindow(windowType);\n <div [class]=\"compact ? 'grid grid-cols-[90px_1fr_56px] items-center gap-2 text-[10px]' : 'grid grid-cols-[110px_1fr_64px] items-center gap-2 text-[11px]'\"\n [class.opacity-50]=\"!item\">\n <div class=\"text-neutral-300 font-medium truncate\" [title]=\"windowType\">\n {{ windowLabelOf(windowType) }}\n </div>\n <div class=\"flex items-center gap-2 min-w-0\">\n <div [class]=\"compact ? 'flex-1 h-1.5 bg-neutral-800 rounded-full overflow-hidden' : 'flex-1 h-2 bg-neutral-800 rounded-full overflow-hidden'\">\n @if (item) {\n <div [class]=\"'h-full transition-all ' + utilizationBarColorClass(item.utilization)\"\n [style.width.%]=\"utilizationPercent(item.utilization)\"></div>\n }\n </div>\n <span class=\"font-mono text-neutral-200 text-right shrink-0\"\n [class]=\"compact ? 'w-8 text-[10px]' : 'w-9'\">\n {{ formatUtilization(item?.utilization ?? null) }}\n </span>\n </div>\n <div class=\"font-mono text-neutral-500 text-right text-[10px] truncate\"\n [title]=\"'Resets in ' + formatResetCountdown(item?.resetsAtMs)\">\n {{ formatResetCountdown(item?.resetsAtMs) }}\n </div>\n </div>\n }\n </div>\n\n @if (!hasAnyUsageData()) {\n <div class=\"text-[10px] text-neutral-500 italic pt-1 border-t border-neutral-800/40\">\n No data yet — click <strong class=\"text-neutral-400\">Pull</strong> or wait for the next rate-limit event.\n </div>\n }\n\n <!-- Graph toggle + SVG line-chart (cycle 884 portolva ide). -->\n @if (showGraphToggle) {\n <div class=\"border-t border-neutral-800/40 pt-2\">\n <button\n type=\"button\"\n class=\"text-[11px] text-neutral-400 hover:text-neonCyan flex items-center gap-1 transition-colors\"\n (click)=\"handleToggleGraph()\"\n [title]=\"isGraphOpen_$() ? 'Hide usage graph' : 'Show usage graph (utilization over time per window)'\"\n >\n <svg class=\"w-3 h-3 transition-transform\"\n [class.rotate-90]=\"isGraphOpen_$()\"\n fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\"/>\n </svg>\n 📈 {{ isGraphOpen_$() ? 'Hide' : 'Show' }} graph\n </button>\n\n @if (isGraphOpen_$()) {\n @let chart = chart_$();\n <div class=\"mt-2 rounded-md border border-neutral-800 bg-neutral-950/40 p-2\">\n @if (!chart.hasAnyData) {\n <div class=\"text-[11px] text-neutral-500 italic px-2 py-3 text-center\">\n No graph data yet — pull usage or wait for a CC session rate-limit event.\n </div>\n } @else {\n <div class=\"relative w-full\">\n <svg [attr.viewBox]=\"chartViewBox\" preserveAspectRatio=\"none\"\n class=\"w-full block\"\n [class.h-24]=\"compact\"\n [class.h-32]=\"!compact\">\n <!-- Háttér + 0%, 50%, 100% referencia-vonalak. -->\n <line x1=\"0\" [attr.y1]=\"chartH\" [attr.x2]=\"chartW\" [attr.y2]=\"chartH\"\n stroke=\"#3f3f46\" stroke-width=\"0.3\"/>\n <line x1=\"0\" [attr.y1]=\"chartMidY\" [attr.x2]=\"chartW\" [attr.y2]=\"chartMidY\"\n stroke=\"#3f3f46\" stroke-width=\"0.2\" stroke-dasharray=\"1,1\"/>\n <line x1=\"0\" y1=\"0\" [attr.x2]=\"chartW\" y2=\"0\"\n stroke=\"#3f3f46\" stroke-width=\"0.2\" stroke-dasharray=\"1,1\"/>\n @for (line of chart.lines; track line.windowType) {\n @if (line.hasData) {\n @if (line.pointCount === 1) {\n <circle [attr.cx]=\"line.lastX\" [attr.cy]=\"line.lastY\" r=\"0.8\" [attr.fill]=\"line.colorHex\"/>\n } @else {\n <polyline [attr.points]=\"line.pathPoints\"\n [attr.stroke]=\"line.colorHex\"\n fill=\"none\" stroke-width=\"0.6\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\"\n vector-effect=\"non-scaling-stroke\"/>\n <circle [attr.cx]=\"line.lastX\" [attr.cy]=\"line.lastY\" r=\"0.6\" [attr.fill]=\"line.colorHex\"/>\n }\n }\n }\n </svg>\n <div class=\"absolute inset-y-0 left-0 flex flex-col justify-between text-[8px] text-neutral-600 font-mono pointer-events-none\">\n <span>100%</span>\n <span>50%</span>\n <span>0%</span>\n </div>\n </div>\n <div class=\"mt-2 flex flex-wrap items-center gap-2 text-[10px]\">\n @for (line of chart.lines; track line.windowType) {\n <div class=\"flex items-center gap-1\" [class.opacity-40]=\"!line.hasData\">\n <span class=\"inline-block w-2 h-2 rounded-sm\" [style.background-color]=\"line.colorHex\"></span>\n <span class=\"text-neutral-300\">{{ line.label }}</span>\n @if (line.hasData) {\n <span class=\"text-neutral-500\">·</span>\n <span class=\"font-mono text-neutral-400\">\n {{ ((chartH - line.lastY) / chartH * 100).toFixed(0) }}%\n </span>\n }\n </div>\n }\n </div>\n <div class=\"mt-1 flex items-center justify-between text-[9px] text-neutral-600\">\n @if (chart.minTimeMs) {\n <span>{{ chart.minTimeMs | date:'yyyy-MM-dd HH:mm' }}</span>\n } @else {\n <span>—</span>\n }\n <button\n type=\"button\"\n class=\"text-[10px] text-neutral-400 hover:text-neonCyan border border-neutral-700\n hover:border-neonCyan rounded px-1.5 py-0.5 transition-colors\"\n (click)=\"handleRefreshGraph()\"\n title=\"Re-fetch usage event history for this graph.\"\n >\n ↻ Refresh\n </button>\n @if (chart.maxTimeMs) {\n <span>{{ chart.maxTimeMs | date:'yyyy-MM-dd HH:mm' }}</span>\n } @else {\n <span>—</span>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n</div>\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["CC_Account_ApiService", "baseUrl", "environment", "api", "http", "inject", "HttpClient", "listAccounts", "firstValueFrom", "get", "listAccountsByIdentity", "backfillIdentity", "post", "auditIdentityDuplicates", "refreshLocalAccounts", "getInstanceMapping", "getAccount", "accountKey", "getAccountUsage", "getAccountUsageHistory", "params", "query", "windowType", "push", "encodeURIComponent", "fromMs", "toMs", "qs", "length", "join", "refreshAccountUsage", "renameAccount", "body", "displayName", "undefined", "email", "patch", "factory", "\u0275fac", "providedIn", "SOCKET_EVENT_CC_ACCOUNT_USAGE_UPDATE", "SOCKET_EVENT_CC_ACCOUNT_LIST_UPDATE", "CC_Account_DataService", "account_AS", "inject", "CC_Account_ApiService", "socket_CS", "CCAP_Socket_ControlService", "ngZone", "NgZone", "socketSubscription", "accounts_$", "signal", "accountUsageMap_$", "Map", "instanceMapping_$", "usageHistoryMap_$", "identityGroups_$", "isLoading_$", "loadError_$", "loadDashboardBootstrap", "__async", "set", "accountsResp", "mappingResp", "groupsResp", "Promise", "all", "listAccounts", "getInstanceMapping", "listAccountsByIdentity", "items", "groups", "nextMap", "group", "primary", "accountKey", "mergedUsage", "err", "errorMessageOf", "loadIdentityGroups", "resp", "loadAccounts", "loadAccountUsage", "getAccountUsage", "next", "loadAccountUsageHistory", "params", "getAccountUsageHistory", "loadInstanceMapping", "refreshAccounts", "refreshResult", "refreshLocalAccounts", "refreshedKeys", "scannedPaths", "refreshAccountUsage", "result", "status", "windowsUpserted", "email", "renameAccount", "updated", "map", "a", "startLiveUpdates", "event$", "subscribe", "envelope", "run", "event", "handleAccountUsageUpdate", "payload", "handleAccountListUpdate", "stopLiveUpdates", "unsubscribe", "ngOnDestroy", "windowType", "newItem", "utilization", "undefined", "resetsAtMs", "lastObservedStatus", "observedAt", "lastObservedByCcapId", "lastObservedBySessionId", "replaced", "get", "filter", "item", "push", "_payload", "Error", "message", "rec", "String", "factory", "\u0275fac", "providedIn", "CC_AccountUsageChart_Util", "CHART_WIDTH", "CHART_HEIGHT", "COLOR_MAP", "five_hour", "seven_day", "seven_day_opus", "seven_day_sonnet", "extra_usage", "WINDOW_LABEL_MAP", "WINDOW_ORDER", "buildChart", "events", "minT", "Number", "POSITIVE_INFINITY", "maxT", "NEGATIVE_INFINITY", "validCount", "e", "observedAt", "utilization", "isFinite", "t", "Date", "parse", "lines", "map", "wt", "windowType", "label", "colorHex", "pathPoints", "hasData", "pointCount", "lastX", "lastY", "hasAnyData", "minTimeMs", "maxTimeMs", "range", "points", "push", "u", "Math", "max", "min", "sort", "a", "b", "coords", "p", "x", "y", "toFixed", "join", "length", "some", "l", "\u0275\u0275element", "\u0275\u0275classMap", "ctx_r1", "utilizationBarColorClass", "item_r1", "utilization", "\u0275\u0275styleProp", "utilizationPercent", "\u0275\u0275declareLet", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275template", "CC_AccountUsageView_Component_For_3_Conditional_6_Template", "\u0275\u0275storeLet", "usageItemOfWindow", "windowType_r3", "\u0275\u0275advance", "compact", "\u0275\u0275classProp", "item_r4", "\u0275\u0275property", "\u0275\u0275textInterpolate1", "windowLabelOf", "\u0275\u0275conditional", "formatUtilization", "tmp_18_0", "undefined", "formatResetCountdown", "resetsAtMs", "CC_AccountUsageView_Component_Conditional_5_Conditional_5_Conditional_3_For_6_Conditional_0_Conditional_0_Template", "CC_AccountUsageView_Component_Conditional_5_Conditional_5_Conditional_3_For_6_Conditional_0_Conditional_1_Template", "line_r7", "pointCount", "CC_AccountUsageView_Component_Conditional_5_Conditional_5_Conditional_3_For_6_Conditional_0_Template", "hasData", "chartH", "line_r8", "lastY", "toFixed", "CC_AccountUsageView_Component_Conditional_5_Conditional_5_Conditional_3_For_16_Conditional_4_Template", "colorHex", "\u0275\u0275textInterpolate", "label", "\u0275\u0275pipeBind2", "chart_r9", "minTimeMs", "maxTimeMs", "\u0275\u0275repeaterCreate", "CC_AccountUsageView_Component_Conditional_5_Conditional_5_Conditional_3_For_6_Template", "_forTrack0", "CC_AccountUsageView_Component_Conditional_5_Conditional_5_Conditional_3_For_16_Template", "CC_AccountUsageView_Component_Conditional_5_Conditional_5_Conditional_3_Conditional_18_Template", "CC_AccountUsageView_Component_Conditional_5_Conditional_5_Conditional_3_Conditional_19_Template", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r6", "\u0275\u0275nextContext", "\u0275\u0275resetView", "handleRefreshGraph", "CC_AccountUsageView_Component_Conditional_5_Conditional_5_Conditional_3_Conditional_22_Template", "CC_AccountUsageView_Component_Conditional_5_Conditional_5_Conditional_3_Conditional_23_Template", "\u0275\u0275repeater", "lines", "CC_AccountUsageView_Component_Conditional_5_Conditional_5_Conditional_2_Template", "CC_AccountUsageView_Component_Conditional_5_Conditional_5_Conditional_3_Template", "chart_$", "chart_r10", "hasAnyData", "_r5", "handleToggleGraph", "CC_AccountUsageView_Component_Conditional_5_Conditional_5_Template", "isGraphOpen_$", "CC_AccountUsageView_Component", "account_DS", "inject", "CC_Account_DataService", "accountKey", "showGraphToggle", "initiallyOpenGraph", "signal", "computed", "CC_AccountUsageChart_Util", "buildChart", "usageHistoryMap_$", "get", "chartViewBox", "CHART_WIDTH", "CHART_HEIGHT", "chartW", "chartMidY", "usageEffect", "effect", "key", "accountUsageMap_$", "has", "loadAccountUsage", "initialOpenEffect", "set", "__async", "next", "loadAccountUsageHistory", "windowType", "items", "item", "hasAnyUsageData", "length", "isFinite", "Math", "max", "min", "round", "diffMs", "Date", "now", "totalMinutes", "floor", "days", "hours", "minutes", "selectors", "inputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "ctx", "CC_AccountUsageView_Component_For_3_Template", "\u0275\u0275repeaterTrackByIdentity", "CC_AccountUsageView_Component_Conditional_4_Template", "CC_AccountUsageView_Component_Conditional_5_Template", "\u0275\u0275pureFunction0", "_c0", "CommonModule", "DatePipe", "encapsulation"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as i,b as c}from"./chunk-6ULWDTUR.js";import"./chunk-Q2PKIGLB.js";import"./chunk-HMYWRRZU.js";import"./chunk-SUQBC6CV.js";import"./chunk-7JUIBZEE.js";import"./chunk-C7XPBJTG.js";import"./chunk-U6PK7K5R.js";import"./chunk-WPHEQXWB.js";import"./chunk-F5WKTR3W.js";import"./chunk-B6FRLDT6.js";import"./chunk-X64MACZF.js";import"./chunk-MYUJTKZZ.js";import"./chunk-Q2NVIOCY.js";import"./chunk-PLVVQ4WV.js";import"./chunk-MUH7O4WZ.js";import"./chunk-JTJ64BYT.js";import"./chunk-V3VQWJQL.js";import"./chunk-GGWONO6R.js";import"./chunk-ZBTWQZNB.js";import"./chunk-FLAJXIYW.js";import"./chunk-EO4DNTT4.js";import"./chunk-W7LI4RRE.js";import"./chunk-5UPNU54P.js";import"./chunk-PK6TSNGP.js";import"./chunk-GQHC47CX.js";import{E as e,Kb as r,z as t}from"./chunk-TBMJSIBB.js";var n=[{path:"",component:i}],s=(()=>{class o{static \u0275fac=function(m){return new(m||o)};static \u0275mod=e({type:o});static \u0275inj=t({imports:[c,r.forChild(n)]})}return o})();export{s as ProjectSource_RoutedModule};
|
|
2
|
-
//# sourceMappingURL=project-source-routed.module-VWUKBPAC.js.map
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/client-dist/{consultant.module-ASUOHDQO.js.map → consultant.module-YAJAXDG4.js.map}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/client-dist/{embedding-eval.module-5DMMIQGY.js.map → embedding-eval.module-D4MSUV46.js.map}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/client-dist/{mobile-app.module-JFHYQ6W6.js.map → mobile-app.module-I77M7L5F.js.map}
RENAMED
|
File without changes
|
/package/client-dist/{model-registry.module-J3RV3VHM.js.map → model-registry.module-REDLL4RE.js.map}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|