@whoz-oss/coday-client 3.33.1 → 3.34.1
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/browser/{chunk-DmspnNZU.js → chunk-1pMMl5aQ.js} +1 -1
- package/browser/{chunk-CCjiYUwJ.js → chunk-24Rqvp-B.js} +1 -1
- package/browser/{chunk-DoBiZHJP.js → chunk-3SjkoJQ2.js} +1 -1
- package/browser/{chunk-Xqo-i29q.js → chunk-6yN7LoqT.js} +1 -1
- package/browser/{chunk-Dq_iutg_.js → chunk-8bJEDZYk.js} +1 -1
- package/browser/{chunk-DRINXf1H.js → chunk-9B6pDYGf.js} +1 -1
- package/browser/{chunk-DKZE1MMp.js → chunk-9Y4DMIzP.js} +1 -1
- package/browser/{chunk-BfgOvSfj.js → chunk-B0wi4IQ8.js} +1 -1
- package/browser/{chunk-ZI_RF6mJ.js → chunk-B1h8Rr_L.js} +1 -1
- package/browser/{chunk-CgZso3Sn.js → chunk-B400uKLU.js} +1 -1
- package/browser/{chunk-BVHP3O1y.js → chunk-B4GIoG1U.js} +1 -1
- package/browser/{chunk-DTO-7qsb.js → chunk-BAHGxBjI.js} +1 -1
- package/browser/{chunk-Dg2L56ka.js → chunk-BByguAe9.js} +1 -1
- package/browser/{chunk-CrDpiJQ_.js → chunk-BECO5DZL.js} +1 -1
- package/browser/{chunk-CfLw6giw.js → chunk-BEoycX98.js} +1 -1
- package/browser/{chunk-vuYNru7F.js → chunk-BHtGbjK6.js} +1 -1
- package/browser/{chunk-WJVIVGQ_.js → chunk-BK-SvUGW.js} +1 -1
- package/browser/chunk-BLltB5Fl.js +1 -0
- package/browser/{chunk-s2nIreh9.js → chunk-BOwbpQDE.js} +1 -1
- package/browser/{chunk-97Ur9CVM.js → chunk-B_wrSH-e.js} +1 -1
- package/browser/{chunk-DSWc3xOX.js → chunk-Begup16p.js} +1 -1
- package/browser/{chunk-BwA9KDbo.js → chunk-BqbE20yc.js} +1 -1
- package/browser/{chunk-DrktTXS1.js → chunk-BscGFXSw.js} +1 -1
- package/browser/{chunk-Fswp1zS2.js → chunk-Bt_Yi0KO.js} +1 -1
- package/browser/{chunk-6LX0m2KK.js → chunk-BvggdF8d.js} +1 -1
- package/browser/{chunk-7OibMkdV.js → chunk-C5xuZf5R.js} +1 -1
- package/browser/{chunk-BA-NscEe.js → chunk-C7OQXeW9.js} +1 -1
- package/browser/{chunk--u1fh-bE.js → chunk-C8eqogQ9.js} +1 -1
- package/browser/{chunk-CWhMBwZt.js → chunk-CDyIhHOt.js} +1 -1
- package/browser/{chunk-D1wn67qT.js → chunk-CGjjc55P.js} +6 -6
- package/browser/{chunk-ByHd8LOC.js → chunk-CJCjJyKP.js} +1 -1
- package/browser/{chunk-nyQxv1ai.js → chunk-CLaD3yHE.js} +1 -1
- package/browser/{chunk-CrtwjGyv.js → chunk-CMjxkuFH.js} +2 -2
- package/browser/{chunk-Bdo-PzpO.js → chunk-CS3cO2Tx.js} +1 -1
- package/browser/{chunk-BgHBODRL.js → chunk-CT8vu_Pw.js} +1 -1
- package/browser/{chunk-I798FyiF.js → chunk-CThe5GoQ.js} +1 -1
- package/browser/{chunk-CY4cIdrD.js → chunk-CX3BRjB5.js} +1 -1
- package/browser/{chunk-KJgXoqSt.js → chunk-CXqNbVXr.js} +1 -1
- package/browser/{chunk-CaZu6-ik.js → chunk-CZe6uHRZ.js} +1 -1
- package/browser/{chunk-tpkg6uRN.js → chunk-Ceb8iCgi.js} +1 -1
- package/browser/{chunk-DFN1Pyx5.js → chunk-Ci0veFyD.js} +1 -1
- package/browser/{chunk-BYRF4k2F.js → chunk-CqTTbhQw.js} +1 -1
- package/browser/{chunk-XRvc0QGl.js → chunk-D-bfzu2J.js} +1 -1
- package/browser/{chunk-BMMVal6G.js → chunk-DE0C-yKk.js} +1 -1
- package/browser/{chunk-CvSL9m7J.js → chunk-DFjEHH4o.js} +1 -1
- package/browser/{chunk-DzIeB2JV.js → chunk-DGUwcds6.js} +1 -1
- package/browser/{chunk-CDVp9M5o.js → chunk-DH80wnhH.js} +1 -1
- package/browser/{chunk-BAW4T6Di.js → chunk-DLpC4uuD.js} +1 -1
- package/browser/chunk-DOeIIw1a.js +1 -0
- package/browser/{chunk-Bb0cfZpR.js → chunk-DS1gnXQd.js} +1 -1
- package/browser/{chunk-BR2UGTBA.js → chunk-DUTqrLQ0.js} +2 -2
- package/browser/{chunk-amKg4vsy.js → chunk-DVK2B443.js} +1 -1
- package/browser/chunk-DY8YywkA.js +1 -0
- package/browser/{chunk-BvidtKG2.js → chunk-DdPOtjZp.js} +5 -5
- package/browser/{chunk-qnkDdlfN.js → chunk-DfHrtnxD.js} +1 -1
- package/browser/{chunk-DRl5lKc8.js → chunk-DmpFu0Pv.js} +1 -1
- package/browser/{chunk-Bp6uMEC4.js → chunk-Dn1IeSER.js} +1 -1
- package/browser/{chunk-BuwCQJib.js → chunk-DpjNfc-X.js} +1 -1
- package/browser/{chunk-BrwKLScI.js → chunk-DvkkGOWr.js} +1 -1
- package/browser/{chunk-D0hAJFb0.js → chunk-Dy3jpvsK.js} +1 -1
- package/browser/chunk-DzRcZL5W.js +4 -0
- package/browser/{chunk-DngrH8va.js → chunk-O_d524Nl.js} +1 -1
- package/browser/chunk-U55ggdv9.js +1 -0
- package/browser/{chunk-DMb_O3oJ.js → chunk-ZnMmRxVz.js} +1 -1
- package/browser/{chunk-D2JaJwBk.js → chunk-_pYIE7Vn.js} +1 -1
- package/browser/{chunk-DYl74_xV.js → chunk-b-dxVOcr.js} +1 -1
- package/browser/{chunk-BJy7Ev8t.js → chunk-e71Ldo0f.js} +1 -1
- package/browser/{chunk-gfpawxnm.js → chunk-heXluV0a.js} +1 -1
- package/browser/{chunk-zoDBYyjf.js → chunk-iFWDza_l.js} +1 -1
- package/browser/{chunk-Dl_uhmYA.js → chunk-qlZmtZOW.js} +1 -1
- package/browser/{chunk-Cjnbx8x8.js → chunk-x_UzK7O8.js} +1 -1
- package/browser/index.html +1 -1
- package/browser/{main-COD2LZKB.js → main-GYSPY3UE.js} +1 -1
- package/package.json +1 -1
- package/browser/chunk-2e1XJLC3.js +0 -1
- package/browser/chunk-DHVomWlH.js +0 -1
- package/browser/chunk-DQhceK5b.js +0 -4
- package/browser/chunk-DkYkMN4g.js +0 -1
- package/browser/chunk-JXiqGD2F.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import {f}from'./chunk-D-bfzu2J.js';import {g,bm as Mm,R as Re,a as Gi,m as mT,e as xw,h as hr,j as Gn,k as ws,q as Rg,n as GC,o as pl,J as Jw,af as Eg,ag as fT,u as CC,X as XE,v as bg,y as eC,H as py,P,aF as R,Y as x,Z as z,_ as Ue,$ as zt,a0 as jt,a1 as Vt,a2 as Nt,i as pr,bn as Xt,ai as tm,aj as KC,a3 as VI,t as rC,bo as tC,a8 as Yg,ak as em,a6 as UI,z as oC,a5 as vl,ac as gC,a9 as lC,aa as If,ab as wf,bp as ml,bq as yl,ah as rT,b4 as oT,A as Ug,b0 as Qg,a4 as nC,T as Tg,S as Sg}from'./main-GYSPY3UE.js';import {P as Pt}from'./chunk-6yN7LoqT.js';import {T as Tn,S as Sn,n as nt$1,a as ae,l as le,c as ce}from'./chunk-BByguAe9.js';import {$ as $n,o as ot$1,i as it$1,I as In,E as Ee,z as ze$1,v as va,D as Dn}from'./chunk-CGjjc55P.js';import'./chunk-CZe6uHRZ.js';import {y as yt,w as wt,t as ti,Q as Qn,e as ei,Y as Ye$1,f as fn,m as mn,Z as Zn,g as gt,$ as $t,W as Wt,c as cn}from'./chunk-DS1gnXQd.js';var w=class s{http=g(py);projectState=g(P);getBaseUrl(){return `/api/projects/${this.projectState.getSelectedProjectIdOrThrow()}/agents`}listEditableAgents(){return this.http.get(`${this.getBaseUrl()}/editable`)}getAgent(t){return this.http.get(`${this.getBaseUrl()}/${encodeURIComponent(t)}`)}createAgent(t,e){return this.http.post(this.getBaseUrl(),{location:e,definition:t})}updateAgent(t,e){return this.http.put(`${this.getBaseUrl()}/${encodeURIComponent(t)}`,{definition:e})}listDocuments(t){return this.http.get(`${this.getBaseUrl()}/documents`,{params:{location:t}})}uploadDocument(t,e){return new R(n=>{let a=new FileReader;a.onload=()=>{let r=a.result.split(",")[1];this.http.post(`${this.getBaseUrl()}/documents`,{filename:e.name,content:r,mimeType:e.type},{params:{location:t}}).subscribe(n);},a.onerror=()=>n.error(a.error),a.readAsDataURL(e);})}deleteAgent(t){return this.http.delete(`${this.getBaseUrl()}/${encodeURIComponent(t)}`)}static \u0275fac=function(e){return new(e||s)};static \u0275prov=x({token:s,factory:s.\u0275fac,providedIn:"root"})};function ze(s,t){s&1&&(ws(0,"p",15),GC(1,"No integrations defined \u2014 agent will have access to all tools."),pl());}function qe(s,t){if(s&1){let e=lC();ws(0,"div",16)(1,"mat-form-field",22)(2,"mat-label"),GC(3,"Integration"),pl(),ws(4,"input",23),tm("ngModelChange",function(a){let r=If(e).$implicit;return KC(r.integration,a)||(r.integration=a),wf(a)}),pl(),VI(),pl(),ws(5,"mat-form-field",24)(6,"mat-label"),GC(7,"Tools (comma-separated)"),pl(),ws(8,"input",25),tm("ngModelChange",function(a){let r=If(e).$implicit;return KC(r.tools,a)||(r.tools=a),wf(a)}),pl(),VI(),pl(),ws(9,"button",26),Rg("click",function(){let a=If(e).$index,r=gC();return wf(r.removeIntegrationRow(a))}),ws(10,"mat-icon"),GC(11,"delete"),pl()()();}if(s&2){let e=t.$implicit;XE(4),em("ngModel",e.integration),UI(),XE(4),em("ngModel",e.tools),UI();}}function He(s,t){if(s&1&&(ws(0,"p",30),GC(1),pl()),s&2){let e=gC(2);XE(),Yg(e.docUploadError);}}function Ge(s,t){s&1&&(ws(0,"p",15),GC(1,"No mandatory documents defined."),pl());}function Ze(s,t){if(s&1&&Sg(0,"option",35),s&2){let e=t.$implicit;bg("value","documents/"+e);}}function Ke(s,t){if(s&1){let e=lC();ws(0,"div",31)(1,"mat-form-field",32)(2,"mat-label"),GC(3,"Document path"),pl(),ws(4,"input",33),tm("ngModelChange",function(a){let r=If(e).$index,j=gC(2);return KC(j.mandatoryDocs[r],a)||(j.mandatoryDocs[r]=a),wf(a)}),pl(),VI(),ws(5,"datalist",34),rC(6,Ze,1,1,"option",35,nC),pl()(),ws(8,"button",26),Rg("click",function(){let a=If(e).$index,r=gC(2);return wf(r.removeDocRow(a))}),ws(9,"mat-icon"),GC(10,"delete"),pl()()();}if(s&2){let e=t.$index,n=gC(2);XE(4),em("ngModel",n.mandatoryDocs[e]),Tg("list","docs-list-"+e),UI(),XE(),bg("id","docs-list-"+e),XE(),oC(n.availableDocuments);}}function Je(s,t){if(s&1){let e=lC();ws(0,"div",6)(1,"span"),GC(2,"Mandatory Documents"),pl(),ws(3,"button",27),Rg("click",function(){If(e);let a=gC();return wf(a.addDocRow())}),ws(4,"mat-icon"),GC(5,"add"),pl()(),ws(6,"label",28)(7,"mat-icon"),GC(8,"upload_file"),pl(),ws(9,"input",29),Rg("change",function(a){If(e);let r=gC();return wf(r.onDocFileSelected(a))}),pl()()(),Jw(10,He,2,1,"p",30),Jw(11,Ge,2,0,"p",15),rC(12,Ke,11,3,"div",31,tC);}if(s&2){let e=gC();XE(6),Ug("uploading",e.isUploadingDoc),XE(3),bg("disabled",e.isUploadingDoc),XE(),eC(e.docUploadError?10:-1),XE(),eC(e.mandatoryDocs.length===0?11:-1),XE(),oC(e.mandatoryDocs);}}function Qe(s,t){s&1&&(ws(0,"p",15),GC(1,"\u{1F4A1} Documents can be added after the agent is created."),pl());}function Xe(s,t){if(s&1){let e=lC();ws(0,"div",6),GC(1,"Save to"),pl(),ws(2,"div",36)(3,"label",37)(4,"input",38),tm("ngModelChange",function(a){If(e);let r=gC();return KC(r.location,a)||(r.location=a),wf(a)}),pl(),VI(),ws(5,"div",39)(6,"div",40)(7,"span",41),GC(8,"\u{1F464}"),pl(),ws(9,"span",42),GC(10,"Project config"),pl()(),ws(11,"p",43),GC(12),pl()()(),ws(13,"label",37)(14,"input",44),tm("ngModelChange",function(a){If(e);let r=gC();return KC(r.location,a)||(r.location=a),wf(a)}),pl(),VI(),ws(15,"div",39)(16,"div",40)(17,"span",41),GC(18,"\u{1F4E6}"),pl(),ws(19,"span",42),GC(20,"Colocated"),pl()(),ws(21,"p",43),GC(22,"Next to coday.yaml in ./agents/ (committable)"),pl()()()(),ws(23,"p",15),GC(24,"Storage location is permanent and cannot be changed after creation."),pl();}if(s&2){let e=gC();XE(3),Ug("selected",e.location==="project"),XE(),em("ngModel",e.location),UI(),XE(8),Qg("~/.coday/projects/","{","name","}","/agents/ (not committed)"),XE(),Ug("selected",e.location==="colocated"),XE(),em("ngModel",e.location),UI();}}function Ye(s,t){if(s&1&&(ws(0,"div",17)(1,"span",6),GC(2,"Storage Location"),pl(),ws(3,"span",45),GC(4),pl(),ws(5,"p",15),GC(6,"Cannot be changed after creation."),pl()()),s&2){let e=gC();XE(3),Ug("badge-project",e.location==="project")("badge-colocated",e.location==="colocated"),XE(),vl(" ",e.location==="project"?"\u{1F464} Project config":"\u{1F4E6} Colocated"," ");}}function $e(s,t){if(s&1&&(ws(0,"div",18)(1,"mat-icon"),GC(2,"error"),pl(),ws(3,"span"),GC(4),pl()()),s&2){let e=gC();XE(4),Yg(e.errorMessage);}}var E=class s{agentCrudApi=g(w);agentApi=g(f);dialogRef=g(z);data=g(Ue);name="";description="";instructions="";aiProvider="";modelName="";temperature=null;maxOutputTokens=null;openaiAssistantId="";integrationRows=[];mandatoryDocs=[];availableDocuments=[];isUploadingDoc=false;docUploadError="";location="project";isSaving=false;errorMessage="";isEditMode=false;ngOnInit(){if(this.isEditMode=this.data.mode==="edit",this.isEditMode&&this.data.agent){let t=this.data.agent.definition;this.name=t.name,this.description=t.description,this.instructions=t.instructions??"",this.aiProvider=t.aiProvider??"",this.modelName=t.modelName??"",this.temperature=t.temperature??null,this.maxOutputTokens=t.maxOutputTokens??null,this.openaiAssistantId=t.openaiAssistantId??"",this.location=this.data.agent.source,t.integrations&&(this.integrationRows=Object.entries(t.integrations).map(([e,n])=>({integration:e,tools:n?.join(", ")??""}))),this.mandatoryDocs=[...t.mandatoryDocs??[]],this.loadAvailableDocuments();}}loadAvailableDocuments(){this.agentCrudApi.listDocuments(this.location).subscribe({next:t=>this.availableDocuments=t,error:()=>this.availableDocuments=[]});}addDocRow(){this.mandatoryDocs.push("");}removeDocRow(t){this.mandatoryDocs.splice(t,1);}onDocFileSelected(t){let e=t.target,n=e.files?.[0];n&&(this.isUploadingDoc=true,this.docUploadError="",this.agentCrudApi.uploadDocument(this.location,n).subscribe({next:a=>{this.isUploadingDoc=false,this.mandatoryDocs.push(a.relativePath),this.loadAvailableDocuments(),e.value="";},error:a=>{this.isUploadingDoc=false,this.docUploadError=a?.error?.error??a?.message??"Upload failed",e.value="";}}));}addIntegrationRow(){this.integrationRows.push({integration:"",tools:""});}removeIntegrationRow(t){this.integrationRows.splice(t,1);}trackByIndex(t){return t}validateForm(){if(!this.name.trim())return this.errorMessage="Name is required",false;if(!/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/.test(this.name.trim()))return this.errorMessage="Name must start with alphanumeric and contain only letters, digits, hyphens or underscores",false;if(!this.description.trim())return this.errorMessage="Description is required",false;for(let t of this.integrationRows)if(!t.integration.trim())return this.errorMessage="Integration name cannot be empty",false;return true}buildDefinition(){let t=this.mandatoryDocs.map(n=>n.trim()).filter(Boolean),e=this.integrationRows.length>0?Object.fromEntries(this.integrationRows.filter(n=>n.integration.trim()).map(n=>[n.integration.trim(),n.tools.split(",").map(a=>a.trim()).filter(Boolean)])):void 0;return {name:this.name.trim(),description:this.description.trim(),instructions:this.instructions.trim()||void 0,aiProvider:this.aiProvider.trim()||void 0,modelName:this.modelName.trim()||void 0,temperature:this.temperature??void 0,maxOutputTokens:this.maxOutputTokens??void 0,openaiAssistantId:this.openaiAssistantId.trim()||void 0,integrations:e,mandatoryDocs:t.length>0?t:void 0}}save(){if(this.errorMessage="",!this.validateForm())return;let t=this.buildDefinition();this.isSaving=true,(this.isEditMode?this.agentCrudApi.updateAgent(this.name.trim(),t):this.agentCrudApi.createAgent(t,this.location)).subscribe({next:()=>{this.isSaving=false,this.agentApi.clearAllCache(),this.dialogRef.close(true);},error:n=>{this.isSaving=false,this.errorMessage=n?.error?.error||n?.message||"Failed to save agent";}});}cancel(){this.dialogRef.close(false);}static \u0275fac=function(e){return new(e||s)};static \u0275cmp=xw({type:s,selectors:[["app-agent-form"]],decls:69,vars:18,consts:[["mat-dialog-title",""],[1,"form-container"],["appearance","outline",1,"full-width"],["matInput","","placeholder","my-agent","required","",3,"ngModelChange","ngModel","readonly"],["matInput","","placeholder","What does this agent do?","rows","2","required","",3,"ngModelChange","ngModel"],["matInput","","placeholder","System instructions for the agent...","rows","6",3,"ngModelChange","ngModel"],[1,"section-title"],[1,"row-2col"],["appearance","outline"],["matInput","","placeholder","e.g. anthropic, openai",3,"ngModelChange","ngModel"],["matInput","","placeholder","e.g. claude-sonnet-4-5",3,"ngModelChange","ngModel"],["matInput","","type","number","min","0","max","2","step","0.1","placeholder","0.0 \u2013 2.0",3,"ngModelChange","ngModel"],["matInput","","type","number","min","1","placeholder","e.g. 4096",3,"ngModelChange","ngModel"],["matInput","","placeholder","asst_...",3,"ngModelChange","ngModel"],["mat-icon-button","","type","button","title","Add integration",3,"click"],[1,"hint"],[1,"integration-row"],[1,"source-display"],[1,"error-message"],["align","end"],["mat-button","",3,"click","disabled"],["mat-raised-button","","color","primary",3,"click","disabled"],["appearance","outline",1,"integration-name"],["matInput","","placeholder","e.g. GITHUB",3,"ngModelChange","ngModel"],["appearance","outline",1,"integration-tools"],["matInput","","placeholder","Leave empty for all tools",3,"ngModelChange","ngModel"],["mat-icon-button","","type","button","title","Remove",3,"click"],["mat-icon-button","","type","button","title","Add document path",3,"click"],["title","Upload a document to the pool",1,"upload-btn"],["type","file","hidden","",3,"change","disabled"],[1,"doc-upload-error"],[1,"doc-row"],["appearance","outline",1,"doc-field"],["matInput","","placeholder","documents/guide.md",3,"ngModelChange","ngModel"],[3,"id"],[3,"value"],[1,"source-options"],[1,"source-option"],["type","radio","name","location","value","project",3,"ngModelChange","ngModel"],[1,"source-content"],[1,"source-header"],[1,"source-icon"],[1,"source-label"],[1,"source-description"],["type","radio","name","location","value","colocated",3,"ngModelChange","ngModel"],[1,"source-badge"]],template:function(e,n){e&1&&(ws(0,"h2",0),GC(1),pl(),ws(2,"mat-dialog-content")(3,"div",1)(4,"mat-form-field",2)(5,"mat-label"),GC(6,"Name"),pl(),ws(7,"input",3),tm("ngModelChange",function(r){return KC(n.name,r)||(n.name=r),r}),pl(),VI(),ws(8,"mat-hint"),GC(9,"Alphanumeric, hyphens and underscores only. Cannot be changed after creation."),pl()(),ws(10,"mat-form-field",2)(11,"mat-label"),GC(12,"Description"),pl(),ws(13,"textarea",4),tm("ngModelChange",function(r){return KC(n.description,r)||(n.description=r),r}),pl(),VI(),pl(),ws(14,"mat-form-field",2)(15,"mat-label"),GC(16,"Instructions"),pl(),ws(17,"textarea",5),tm("ngModelChange",function(r){return KC(n.instructions,r)||(n.instructions=r),r}),pl(),VI(),ws(18,"mat-hint"),GC(19,"System prompt / instructions sent to the AI model"),pl()(),ws(20,"div",6),GC(21,"AI Configuration"),pl(),ws(22,"div",7)(23,"mat-form-field",8)(24,"mat-label"),GC(25,"AI Provider"),pl(),ws(26,"input",9),tm("ngModelChange",function(r){return KC(n.aiProvider,r)||(n.aiProvider=r),r}),pl(),VI(),pl(),ws(27,"mat-form-field",8)(28,"mat-label"),GC(29,"Model Name"),pl(),ws(30,"input",10),tm("ngModelChange",function(r){return KC(n.modelName,r)||(n.modelName=r),r}),pl(),VI(),pl()(),ws(31,"div",7)(32,"mat-form-field",8)(33,"mat-label"),GC(34,"Temperature"),pl(),ws(35,"input",11),tm("ngModelChange",function(r){return KC(n.temperature,r)||(n.temperature=r),r}),pl(),VI(),ws(36,"mat-hint"),GC(37,"Leave empty for model default"),pl()(),ws(38,"mat-form-field",8)(39,"mat-label"),GC(40,"Max Output Tokens"),pl(),ws(41,"input",12),tm("ngModelChange",function(r){return KC(n.maxOutputTokens,r)||(n.maxOutputTokens=r),r}),pl(),VI(),ws(42,"mat-hint"),GC(43,"Leave empty for model default"),pl()()(),ws(44,"mat-form-field",2)(45,"mat-label"),GC(46,"OpenAI Assistant ID"),pl(),ws(47,"input",13),tm("ngModelChange",function(r){return KC(n.openaiAssistantId,r)||(n.openaiAssistantId=r),r}),pl(),VI(),ws(48,"mat-hint"),GC(49,"If set, forces aiProvider to openai"),pl()(),ws(50,"div",6)(51,"span"),GC(52,"Integrations"),pl(),ws(53,"button",14),Rg("click",function(){return n.addIntegrationRow()}),ws(54,"mat-icon"),GC(55,"add"),pl()()(),Jw(56,ze,2,0,"p",15),rC(57,qe,12,2,"div",16,tC),Jw(59,Je,14,5)(60,Qe,2,0,"p",15),Jw(61,Xe,25,8),Jw(62,Ye,7,5,"div",17),Jw(63,$e,5,1,"div",18),pl()(),ws(64,"mat-dialog-actions",19)(65,"button",20),Rg("click",function(){return n.cancel()}),GC(66,"Cancel"),pl(),ws(67,"button",21),Rg("click",function(){return n.save()}),GC(68),pl()()),e&2&&(XE(),Yg(n.isEditMode?"Edit Agent":"Create Agent"),XE(6),em("ngModel",n.name),bg("readonly",n.isEditMode),UI(),XE(6),em("ngModel",n.description),UI(),XE(4),em("ngModel",n.instructions),UI(),XE(9),em("ngModel",n.aiProvider),UI(),XE(4),em("ngModel",n.modelName),UI(),XE(5),em("ngModel",n.temperature),UI(),XE(6),em("ngModel",n.maxOutputTokens),UI(),XE(6),em("ngModel",n.openaiAssistantId),UI(),XE(9),eC(n.integrationRows.length===0?56:-1),XE(),oC(n.integrationRows),XE(2),eC(n.isEditMode?59:60),XE(2),eC(n.isEditMode?-1:61),XE(),eC(n.isEditMode?62:-1),XE(),eC(n.errorMessage?63:-1),XE(2),bg("disabled",n.isSaving),XE(2),bg("disabled",n.isSaving),XE(),vl(" ",n.isSaving?"Saving...":"Save"," "));},dependencies:[ti,Qn,ei,Ye$1,fn,mn,Zn,gt,$t,Wt,cn,zt,jt,Vt,Nt,hr,pr,Gn,Tn,Sn,nt$1,ae,le,ce,yt,wt,Pt,Xt],styles:[".form-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1rem;padding:0;min-width:560px}@media(max-width:768px){.form-container[_ngcontent-%COMP%]{min-width:auto}}.full-width[_ngcontent-%COMP%]{width:100%}.section-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;font-size:1rem;font-weight:600;margin-top:.5rem;margin-bottom:-.25rem}.row-2col[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:1rem}@media(max-width:768px){.row-2col[_ngcontent-%COMP%]{grid-template-columns:1fr}}.integration-row[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.5rem}.integration-row[_ngcontent-%COMP%] .integration-name[_ngcontent-%COMP%]{flex:0 0 180px}.integration-row[_ngcontent-%COMP%] .integration-tools[_ngcontent-%COMP%]{flex:1}.hint[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-text-secondary);font-style:italic}.source-options[_ngcontent-%COMP%]{display:flex;gap:1rem;margin-bottom:.5rem}@media(max-width:768px){.source-options[_ngcontent-%COMP%]{flex-direction:column}}.source-option[_ngcontent-%COMP%]{flex:1;display:flex;align-items:flex-start;gap:.75rem;padding:1rem;background:var(--color-bg);border:2px solid var(--color-border);border-radius:8px;cursor:pointer;transition:all .2s ease}.source-option[_ngcontent-%COMP%]:hover{border-color:var(--color-primary);background:var(--color-bg-hover)}.source-option.selected[_ngcontent-%COMP%]{border-color:var(--color-primary);background:var(--color-bg-hover);box-shadow:0 0 0 1px var(--color-primary)}.source-option[_ngcontent-%COMP%] input[type=radio][_ngcontent-%COMP%]{margin-top:2px;cursor:pointer}.source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%]{flex:1}.source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%] .source-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;margin-bottom:.5rem}.source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%] .source-header[_ngcontent-%COMP%] .source-icon[_ngcontent-%COMP%]{font-size:1.25rem}.source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%] .source-header[_ngcontent-%COMP%] .source-label[_ngcontent-%COMP%]{font-weight:600;font-size:.95rem}.source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%] .source-description[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-text-secondary);font-family:monospace;line-height:1.4}.source-display[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.source-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem 1rem;border-radius:6px;font-size:.9rem;font-weight:500}.source-badge.badge-project[_ngcontent-%COMP%]{background:#2196f31a;color:#2196f3;border:1px solid rgba(33,150,243,.3)}.source-badge.badge-colocated[_ngcontent-%COMP%]{background:#4caf501a;color:#4caf50;border:1px solid rgba(76,175,80,.3)}.doc-row[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.5rem}.doc-row[_ngcontent-%COMP%] .doc-field[_ngcontent-%COMP%]{flex:1}.upload-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%;cursor:pointer;color:var(--color-text-secondary);transition:background .2s}.upload-btn[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover);color:var(--color-primary)}.upload-btn.uploading[_ngcontent-%COMP%]{opacity:.5;cursor:wait}.upload-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:1.25rem;width:1.25rem;height:1.25rem}.doc-upload-error[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-error)}.error-message[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:.75rem;background:#f443361a;border:1px solid var(--color-error);border-radius:4px;color:var(--color-error)}.error-message[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:1.25rem;width:1.25rem;height:1.25rem}.error-message[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{flex:1}"],changeDetection:1})};var et=()=>[],tt=s=>({id:s});function nt(s,t){if(s&1&&(ws(0,"div",5),GC(1),pl()),s&2){let e=gC();XE(),Yg(e.errorMessage());}}function it(s,t){if(s&1){let e=lC();ws(0,"ds-entity-card",7),Rg("selected",function(a){If(e);let r=gC();return wf(r.onEdit(a))}),ml(1,8),ws(2,"button",9),Rg("click",function(a){return a.stopPropagation()}),ws(3,"mat-icon"),GC(4,"more_vert"),pl()(),yl(),pl();}if(s&2){let e=t.$implicit;gC();let n=CC(9);bg("id",e.id)("name",e.name)("description",e.description)("badges",e.badges??rT(6,et)),XE(2),bg("matMenuTriggerFor",n)("matMenuTriggerData",oT(7,tt,e.id));}}function ot(s,t){if(s&1){let e=lC();ws(0,"button",10),Rg("click",function(){let a=If(e).id,r=gC();return wf(r.onEdit(a))}),ws(1,"mat-icon"),GC(2,"edit"),pl(),GC(3," Edit "),pl(),ws(4,"button",11),Rg("click",function(){let a=If(e).id,r=gC();return wf(r.onDelete(a))}),ws(5,"mat-icon"),GC(6,"delete"),pl(),GC(7," Delete "),pl();}}var Ve=class s{agentCrudApi=g(w);location=g(Mm);dialog=g(Re);agents=Gi([]);isLoading=Gi(false);errorMessage=Gi(null);agentItems=mT(()=>this.agents().map(t=>({id:t.name,name:t.name,description:t.description,badges:this.buildBadges(t),groupKey:t.source,groupLabel:t.source==="project"?"Project (~/.coday/)":"Colocated (next to coday.yaml)"})));ngOnInit(){this.loadAgents();}loadAgents(){this.isLoading.set(true),this.errorMessage.set(null),this.agentCrudApi.listEditableAgents().subscribe({next:t=>{this.agents.set(t),this.isLoading.set(false);},error:t=>{this.errorMessage.set(t?.error?.error??"Failed to load agents"),this.isLoading.set(false);}});}onBack(){this.location.back();}onCreate(){this.dialog.open(E,{width:"700px",maxHeight:"90vh",data:{mode:"create"}}).afterClosed().subscribe(e=>{e&&this.loadAgents();});}onEdit(t){this.agentCrudApi.getAgent(t).subscribe({next:e=>{this.dialog.open(E,{width:"700px",maxHeight:"90vh",data:{mode:"edit",agent:e}}).afterClosed().subscribe(a=>{a&&this.loadAgents();});},error:e=>this.errorMessage.set(e?.error?.error??"Failed to load agent")});}onDelete(t){confirm(`Are you sure you want to delete agent "${t}"?`)&&this.agentCrudApi.deleteAgent(t).subscribe({next:()=>this.loadAgents(),error:e=>this.errorMessage.set(e?.error?.error??"Failed to delete agent")});}buildBadges(t){return [t.source==="project"?{label:"project",variant:"info"}:{label:"colocated",variant:"success"}]}static \u0275fac=function(e){return new(e||s)};static \u0275cmp=xw({type:s,selectors:[["app-agent-list"]],decls:11,vars:5,consts:[["agentCard",""],["cardMenu","matMenu"],[1,"agent-list-page"],["title","Agents","cardMinWidth","260px","contentMaxWidth","1400px","searchPlaceholder","Filter agents\u2026","emptyMessage","No file-based agents found.",3,"createRequested","items","loading","showCreate","itemTemplate"],["toolbar-start","","mat-icon-button","","title","Back",3,"click"],[1,"agent-list__error"],["matMenuContent",""],[3,"selected","id","name","description","badges"],["dsCardActions",""],["mat-icon-button","",3,"click","matMenuTriggerFor","matMenuTriggerData"],["mat-menu-item","",3,"click"],["mat-menu-item","",1,"agent-list__delete-item",3,"click"]],template:function(e,n){if(e&1&&(ws(0,"div",2)(1,"ds-entity-list",3),Rg("createRequested",function(){return n.onCreate()}),ws(2,"button",4),Rg("click",function(){return n.onBack()}),ws(3,"mat-icon"),GC(4,"chevron_left"),pl()()(),Jw(5,nt,2,1,"div",5),pl(),Eg(6,it,5,9,"ng-template",null,0,fT),ws(8,"mat-menu",null,1),Eg(10,ot,8,0,"ng-template",6),pl()),e&2){let a=CC(7);XE(),bg("items",n.agentItems())("loading",n.isLoading())("showCreate",true)("itemTemplate",a),XE(4),eC(n.errorMessage()?5:-1);}},dependencies:[$n,ot$1,it$1,hr,Gn,yt,wt,In,Ee,ze$1,va,Dn],styles:["[_nghost-%COMP%]{display:block;width:100%;min-height:100vh;background:var(--color-bg);overflow-y:auto}.agent-list__delete-item[_ngcontent-%COMP%]{color:var(--color-error, #ff3b30)}.agent-list__delete-item[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:inherit}.agent-list__error[_ngcontent-%COMP%]{margin:1rem auto;max-width:900px;padding:.75rem 1rem;background:#dc262614;border:1px solid rgba(220,38,38,.25);border-radius:8px;color:var(--color-error, #ff3b30);font-size:.875rem}"],changeDetection:1})};export{Ve as AgentListComponent};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import {g,bm as Mm,R as Re,a as Gi,m as mT,e as xw,h as hr,j as Gn,k as ws,q as Rg,n as GC,o as pl,a3 as VI,J as Jw,af as Eg,ag as fT,u as CC,X as XE,v as bg,a6 as UI,y as eC,Z as z,bl as Mt,_ as Ue$1,am as qm,$ as zt,a0 as jt,a1 as Vt,a2 as Nt,i as pr,bn as Xt,ai as tm,aj as KC,t as rC,bo as tC,a8 as Yg,ak as em,z as oC,a5 as vl,ac as gC,a9 as lC,aa as If,ab as wf,bp as ml,bq as yl,ah as rT,b4 as oT,A as Ug}from'./main-COD2LZKB.js';import {d}from'./chunk-BfgOvSfj.js';import {W,k as ke,s as se}from'./chunk-ByHd8LOC.js';import {T as Tn,S as Sn,n as nt,a as ae,l as le,c as ce}from'./chunk-Dg2L56ka.js';import {W as Wn,o as ot,i as it,I as In,D as De,B as Be,y as ya,E as En}from'./chunk-D1wn67qT.js';import'./chunk-CaZu6-ik.js';import {y as yt,w as wt,t as ti,Z as Zn,c as cn,Y as Ye$1,a as wt$1,m as mn,g as gt}from'./chunk-Bb0cfZpR.js';function Ue(s,i){if(s&1){let e=lC();ws(0,"div",9)(1,"mat-form-field",18)(2,"mat-label"),GC(3),pl(),ws(4,"textarea",19),tm("ngModelChange",function(r){let m=If(e).$index,D=gC();return KC(D.commands[m],r)||(D.commands[m]=r),wf(r)}),pl(),VI(),ws(5,"mat-hint"),GC(6,"Use placeholder for dynamic values"),pl()(),ws(7,"button",20),Rg("click",function(){let r=If(e).$index,m=gC();return wf(m.removeCommand(r))}),ws(8,"mat-icon"),GC(9,"delete"),pl()()();}if(s&2){let e=i.$index,t=gC();XE(3),vl("Prompt ",e+1),XE(),em("ngModel",t.commands[e]),UI(),XE(3),bg("disabled",t.commands.length===1);}}function Ne(s,i){if(s&1){let e=lC();ws(0,"div",10)(1,"h3"),GC(2,"Save to"),pl(),ws(3,"div",21)(4,"label",22)(5,"input",23),tm("ngModelChange",function(r){If(e);let m=gC();return KC(m.source,r)||(m.source=r),wf(r)}),pl(),VI(),ws(6,"div",24)(7,"div",25)(8,"span",26),GC(9,"\u{1F464}"),pl(),ws(10,"span",27),GC(11,"Local"),pl()(),ws(12,"p",28),GC(13,"Personal prompt in ~/.coday/... (not committed)"),pl()()(),ws(14,"label",22)(15,"input",29),tm("ngModelChange",function(r){If(e);let m=gC();return KC(m.source,r)||(m.source=r),wf(r)}),pl(),VI(),ws(16,"div",24)(17,"div",25)(18,"span",26),GC(19,"\u{1F4E6}"),pl(),ws(20,"span",27),GC(21,"Project"),pl()(),ws(22,"p",28),GC(23,"Shared prompt in ./prompts/ (committable)"),pl()()()(),ws(24,"p",30),GC(25,"Storage location is permanent and cannot be changed after creation"),pl()();}if(s&2){let e=gC();XE(4),Ug("selected",e.source==="local"),XE(),em("ngModel",e.source),UI(),XE(9),Ug("selected",e.source==="project"),XE(),em("ngModel",e.source),UI();}}function je(s,i){if(s&1&&(ws(0,"div",11)(1,"h3"),GC(2,"Storage Location"),pl(),ws(3,"div",31)(4,"span",26),GC(5),pl(),ws(6,"span",27),GC(7),pl()(),ws(8,"p",30),GC(9,"Cannot be changed after creation"),pl()()),s&2){let e=gC();XE(3),Ug("badge-local",e.source==="local")("badge-project",e.source==="project"),XE(2),Yg(e.source==="local"?"\u{1F464}":"\u{1F4E6}"),XE(2),Yg(e.source==="local"?"Local":"Project");}}function qe(s,i){if(s&1){let e=lC();ws(0,"div",12)(1,"label",32)(2,"input",33),tm("ngModelChange",function(r){If(e);let m=gC();return KC(m.webhookEnabled,r)||(m.webhookEnabled=r),wf(r)}),pl(),VI(),ws(3,"span"),GC(4,"Enable webhook"),pl()(),ws(5,"p",30),GC(6,"Enable webhook to trigger this prompt via HTTP POST"),pl()();}if(s&2){let e=gC();XE(2),em("ngModel",e.webhookEnabled),UI();}}function He(s,i){if(s&1){let e=lC();ws(0,"div",13)(1,"div",34)(2,"mat-icon",35),GC(3,"link"),pl(),ws(4,"h4"),GC(5,"Webhook URL"),pl()(),ws(6,"div",36)(7,"p",37),GC(8),pl(),ws(9,"button",38),Rg("click",function(){If(e);let r=gC();return wf(r.copyWebhookUrl())}),ws(10,"mat-icon"),GC(11,"content_copy"),pl(),ws(12,"span"),GC(13,"Copy URL"),pl()()(),ws(14,"p",30),GC(15,"Use this URL to trigger the prompt via HTTP POST"),pl()();}if(s&2){let e=gC();XE(8),Yg(e.getWebhookUrl());}}function Ye(s,i){if(s&1&&(ws(0,"div",14)(1,"mat-icon"),GC(2,"error"),pl(),ws(3,"span"),GC(4),pl()()),s&2){let e=gC();XE(4),Yg(e.errorMessage);}}var S=class s{promptApi=g(d);dialogRef=g(z);configApi=g(W);snackBar=g(Mt);name="";description="";commands=[""];webhookEnabled=false;threadLifetime="";source="local";isSaving=false;errorMessage="";isAdmin=false;isEditMode=false;promptId="";data=g(Ue$1);constructor(){this.isEditMode=this.data.mode==="edit";}ngOnInit(){this.configApi.getUserConfig().subscribe({next:i=>{this.isAdmin=i.groups?.includes("CODAY_ADMIN")??false;},error:i=>{console.error("[PROMPT_FORM] Error loading user config:",i),this.isAdmin=false;}}),this.isEditMode&&this.data.prompt&&(this.promptId=this.data.prompt.id,this.name=this.data.prompt.name,this.description=this.data.prompt.description,this.commands=[...this.data.prompt.commands],this.webhookEnabled=this.data.prompt.webhookEnabled,this.source=this.data.prompt.source);}addCommand(){this.commands.push("");}removeCommand(i){this.commands.length>1&&this.commands.splice(i,1);}trackByIndex(i){return i}normalizeName(){this.name=this.name.replace(/[\s_.,;:!?()[\]{}]+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").toLowerCase();}validateForm(){return this.name.trim()?this.description.trim()?this.commands.filter(e=>e.trim()).length===0?(this.errorMessage="At least one command is required",false):true:(this.errorMessage="Description is required",false):(this.errorMessage="Name is required",false)}save(){if(this.errorMessage="",!this.validateForm())return;let i=this.commands.filter(e=>e.trim());if(this.isSaving=true,this.isEditMode&&this.data.prompt){let e={name:this.name.trim(),description:this.description.trim(),commands:i,webhookEnabled:this.webhookEnabled};this.promptApi.updatePrompt(this.data.prompt.id,e).subscribe({next:()=>{this.isSaving=false,this.dialogRef.close(true);},error:t=>{console.error("Error updating prompt:",t),this.errorMessage=t?.error?.error||t?.message||"Failed to update prompt",this.isSaving=false;}});}else {let e={name:this.name.trim(),description:this.description.trim(),commands:i,webhookEnabled:this.webhookEnabled,source:this.source};this.promptApi.createPrompt(e).subscribe({next:()=>{this.isSaving=false,this.dialogRef.close(true);},error:t=>{console.error("Error creating prompt:",t),this.errorMessage=t?.error?.error||t?.message||"Failed to create prompt",this.isSaving=false;}});}}cancel(){this.dialogRef.close(false);}getWebhookUrl(){return `${window.location.origin}/api/webhooks/${this.promptId}/execute`}copyWebhookUrl(){if(!this.webhookEnabled){this.snackBar.open("Webhook is not enabled","Close",{duration:3e3});return}if(!this.promptId){this.snackBar.open("Prompt must be saved before getting webhook URL","Close",{duration:3e3});return}let i=this.getWebhookUrl();navigator.clipboard.writeText(i).then(()=>{this.snackBar.open("Webhook URL copied to clipboard!","Close",{duration:3e3});}).catch(e=>{console.error("Failed to copy webhook URL:",e),this.snackBar.open("Failed to copy URL","Close",{duration:3e3});});}static \u0275fac=function(e){return new(e||s)};static \u0275cmp=xw({type:s,selectors:[["app-prompt-form"]],decls:36,vars:11,consts:[["mat-dialog-title",""],[1,"form-container"],["appearance","outline",1,"full-width"],["matInput","","placeholder","my-prompt","required","",3,"ngModelChange","blur","ngModel"],["matInput","","placeholder","What does this prompt do?","rows","3","required","",3,"ngModelChange","ngModel"],[1,"commands-section"],[1,"section-header"],["mat-icon-button","","type","button","title","Add command",3,"click"],[1,"commands-list"],[1,"command-item"],[1,"source-section"],[1,"source-display"],[1,"webhook-section"],[1,"webhook-url-section"],[1,"error-message"],["align","end"],["mat-button","",3,"click","disabled"],["mat-raised-button","","color","primary",3,"click","disabled"],["appearance","outline",1,"command-field"],["matInput","","placeholder","Enter command with placeholders like \\{\\{key\\}\\}","rows","2",3,"ngModelChange","ngModel"],["mat-icon-button","","type","button","title","Remove command",1,"remove-btn",3,"click","disabled"],[1,"source-options"],[1,"source-option"],["type","radio","name","source","value","local",3,"ngModelChange","ngModel"],[1,"source-content"],[1,"source-header"],[1,"source-icon"],[1,"source-label"],[1,"source-description"],["type","radio","name","source","value","project",3,"ngModelChange","ngModel"],[1,"hint"],[1,"source-badge"],[1,"checkbox-label"],["type","checkbox",3,"ngModelChange","ngModel"],[1,"webhook-url-header"],[1,"webhook-icon"],[1,"webhook-url-content"],[1,"url-text"],["mat-raised-button","","color","accent","type","button",3,"click"]],template:function(e,t){e&1&&(ws(0,"h2",0),GC(1),pl(),ws(2,"mat-dialog-content")(3,"div",1)(4,"mat-form-field",2)(5,"mat-label"),GC(6,"Name"),pl(),ws(7,"input",3),tm("ngModelChange",function(m){return KC(t.name,m)||(t.name=m),m}),Rg("blur",function(){return t.normalizeName()}),pl(),VI(),ws(8,"mat-hint"),GC(9,"A descriptive name (spaces and punctuation will be replaced with hyphens), will be used as command name"),pl()(),ws(10,"mat-form-field",2)(11,"mat-label"),GC(12,"Description"),pl(),ws(13,"textarea",4),tm("ngModelChange",function(m){return KC(t.description,m)||(t.description=m),m}),pl(),VI(),ws(14,"mat-hint"),GC(15,"Explain the purpose of this prompt, helps for searchability"),pl()(),ws(16,"div",5)(17,"div",6)(18,"h3"),GC(19,"Prompts"),pl(),ws(20,"button",7),Rg("click",function(){return t.addCommand()}),ws(21,"mat-icon"),GC(22,"add"),pl()()(),ws(23,"div",8),rC(24,Ue,10,3,"div",9,tC),pl()(),Jw(26,Ne,26,6,"div",10),Jw(27,je,10,6,"div",11),Jw(28,qe,7,1,"div",12),Jw(29,He,16,1,"div",13),Jw(30,Ye,5,1,"div",14),pl()(),ws(31,"mat-dialog-actions",15)(32,"button",16),Rg("click",function(){return t.cancel()}),GC(33,"Cancel"),pl(),ws(34,"button",17),Rg("click",function(){return t.save()}),GC(35),pl()()),e&2&&(XE(),Yg(t.isEditMode?"Edit Prompt":"Create Prompt"),XE(6),em("ngModel",t.name),UI(),XE(6),em("ngModel",t.description),UI(),XE(11),oC(t.commands),XE(2),eC(t.isEditMode?-1:26),XE(),eC(t.isEditMode?27:-1),XE(),eC(t.isAdmin?28:-1),XE(),eC(t.isEditMode&&t.webhookEnabled&&t.isAdmin?29:-1),XE(),eC(t.errorMessage?30:-1),XE(2),bg("disabled",t.isSaving),XE(2),bg("disabled",t.isSaving),XE(),vl(" ",t.isSaving?"Saving...":"Save"," "));},dependencies:[qm,ti,Ye$1,wt$1,mn,Zn,gt,cn,zt,jt,Vt,Nt,hr,pr,Gn,Tn,Sn,nt,ae,le,ce,yt,wt,Xt],styles:[".form-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1rem;padding:0;min-width:500px}@media(max-width:768px){.form-container[_ngcontent-%COMP%]{min-width:auto}}.full-width[_ngcontent-%COMP%]{width:100%}.commands-section[_ngcontent-%COMP%] .section-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin-bottom:.5rem}.commands-section[_ngcontent-%COMP%] .section-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:1rem;font-weight:600}.commands-section[_ngcontent-%COMP%] .commands-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1rem}.commands-section[_ngcontent-%COMP%] .command-item[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.5rem}.commands-section[_ngcontent-%COMP%] .command-item[_ngcontent-%COMP%] .command-field[_ngcontent-%COMP%]{flex:1}.commands-section[_ngcontent-%COMP%] .command-item[_ngcontent-%COMP%] .remove-btn[_ngcontent-%COMP%]{margin-top:8px}.commands-section[_ngcontent-%COMP%] .command-item[_ngcontent-%COMP%] .remove-btn[_ngcontent-%COMP%]:disabled{opacity:.3;cursor:not-allowed}.webhook-section[_ngcontent-%COMP%]{padding:1rem;background:var(--color-surface);border-radius:8px;border:1px solid var(--color-border)}.webhook-section[_ngcontent-%COMP%] .checkbox-label[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;cursor:pointer}.webhook-section[_ngcontent-%COMP%] .checkbox-label[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%]{width:18px;height:18px;cursor:pointer}.webhook-section[_ngcontent-%COMP%] .checkbox-label[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:.95rem}.webhook-section[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%]{margin:.5rem 0 0;font-size:.85rem;color:var(--color-text-secondary)}.webhook-url-section[_ngcontent-%COMP%]{padding:1rem;background:var(--color-surface);border-radius:8px;border:1px solid var(--color-border)}.webhook-url-section[_ngcontent-%COMP%] .webhook-url-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;margin-bottom:.75rem}.webhook-url-section[_ngcontent-%COMP%] .webhook-url-header[_ngcontent-%COMP%] .webhook-icon[_ngcontent-%COMP%]{color:var(--color-primary)}.webhook-url-section[_ngcontent-%COMP%] .webhook-url-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{margin:0;font-size:1rem;font-weight:600}.webhook-url-section[_ngcontent-%COMP%] .webhook-url-content[_ngcontent-%COMP%]{display:flex;align-items:center;gap:1rem;margin-bottom:.5rem}.webhook-url-section[_ngcontent-%COMP%] .webhook-url-content[_ngcontent-%COMP%] .url-text[_ngcontent-%COMP%]{flex:1;margin:0;padding:.75rem;background:var(--color-bg);border:1px solid var(--color-border);border-radius:4px;font-family:monospace;font-size:.85rem;word-break:break-all;color:var(--color-text)}.webhook-url-section[_ngcontent-%COMP%] .webhook-url-content[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{white-space:nowrap;display:flex;align-items:center;gap:.5rem}.webhook-url-section[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-text-secondary)}.error-message[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:.75rem;background:#f443361a;border:1px solid var(--color-error);border-radius:4px;color:var(--color-error)}.error-message[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:1.25rem;width:1.25rem;height:1.25rem}.error-message[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{flex:1}.source-section[_ngcontent-%COMP%]{padding:1rem;background:var(--color-surface);border-radius:8px;border:1px solid var(--color-border)}.source-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 1rem;font-size:1rem;font-weight:600}.source-section[_ngcontent-%COMP%] .source-options[_ngcontent-%COMP%]{display:flex;gap:1rem;margin-bottom:.75rem}@media(max-width:768px){.source-section[_ngcontent-%COMP%] .source-options[_ngcontent-%COMP%]{flex-direction:column}}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%]{flex:1;display:flex;align-items:flex-start;gap:.75rem;padding:1rem;background:var(--color-bg);border:2px solid var(--color-border);border-radius:8px;cursor:pointer;transition:all .2s ease}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%]:hover{border-color:var(--color-primary);background:var(--color-bg-hover)}.source-section[_ngcontent-%COMP%] .source-option.selected[_ngcontent-%COMP%]{border-color:var(--color-primary);background:var(--color-bg-hover);box-shadow:0 0 0 1px var(--color-primary)}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%] input[type=radio][_ngcontent-%COMP%]{margin-top:2px;cursor:pointer}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%]{flex:1}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%] .source-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;margin-bottom:.5rem}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%] .source-header[_ngcontent-%COMP%] .source-icon[_ngcontent-%COMP%]{font-size:1.25rem}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%] .source-header[_ngcontent-%COMP%] .source-label[_ngcontent-%COMP%]{font-weight:600;font-size:.95rem}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%] .source-description[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-text-secondary);line-height:1.4}.source-section[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-text-secondary);font-style:italic}.thread-lifetime-disabled[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.75rem;padding:1rem;background:#2196f30d;border:1px solid rgba(33,150,243,.2);border-radius:8px;margin-bottom:1rem}.thread-lifetime-disabled[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:#2196f3cc;font-size:1.25rem;width:1.25rem;height:1.25rem;margin-top:2px}.thread-lifetime-disabled[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;flex:1}.thread-lifetime-disabled[_ngcontent-%COMP%] p[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-size:.95rem;color:var(--color-text)}.thread-lifetime-disabled[_ngcontent-%COMP%] p[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%]{display:block;margin-top:.25rem;font-size:.85rem;color:var(--color-text-secondary);line-height:1.4}.source-display[_ngcontent-%COMP%]{padding:1rem;background:var(--color-surface);border-radius:8px;border:1px solid var(--color-border)}.source-display[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 .75rem;font-size:1rem;font-weight:600}.source-display[_ngcontent-%COMP%] .source-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem 1rem;border-radius:6px;font-size:.9rem;font-weight:500;margin-bottom:.5rem}.source-display[_ngcontent-%COMP%] .source-badge[_ngcontent-%COMP%] .source-icon[_ngcontent-%COMP%]{font-size:1.1rem}.source-display[_ngcontent-%COMP%] .source-badge.badge-local[_ngcontent-%COMP%]{background:#2196f31a;color:#2196f3;border:1px solid rgba(33,150,243,.3)}.source-display[_ngcontent-%COMP%] .source-badge.badge-project[_ngcontent-%COMP%]{background:#4caf501a;color:#4caf50;border:1px solid rgba(76,175,80,.3)}.source-display[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-text-secondary);font-style:italic}"],changeDetection:1})};var Ge=()=>[],Ke=s=>({id:s});function Je(s,i){if(s&1&&(ws(0,"div",6),GC(1),pl()),s&2){let e=gC();XE(),Yg(e.errorMessage());}}function Qe(s,i){if(s&1){let e=lC();ws(0,"ds-entity-card",8),Rg("selected",function(r){If(e);let m=gC();return wf(m.onEdit(r))}),ml(1,9),ws(2,"button",10),Rg("click",function(r){return r.stopPropagation()}),ws(3,"mat-icon"),GC(4,"more_vert"),pl()(),yl(),pl();}if(s&2){let e=i.$implicit;gC();let t=CC(11);bg("id",e.id)("name",e.name)("description",e.description)("badges",e.badges??rT(6,Ge)),XE(2),bg("matMenuTriggerFor",t)("matMenuTriggerData",oT(7,Ke,e.id));}}function Xe(s,i){if(s&1){let e=lC();ws(0,"button",11),Rg("click",function(){If(e);let r=gC().id,m=gC();return wf(m.onToggleWebhook(r))}),ws(1,"mat-icon"),GC(2),pl(),GC(3),pl();}if(s&2){let e=gC().id,t=gC();XE(2),Yg(t.isWebhookEnabled(e)?"link_off":"link"),XE(),vl(" ",t.isWebhookEnabled(e)?"Disable webhook":"Enable webhook"," ");}}function Ze(s,i){if(s&1){let e=lC();ws(0,"button",11),Rg("click",function(){let r=If(e).id,m=gC();return wf(m.onEdit(r))}),ws(1,"mat-icon"),GC(2,"edit"),pl(),GC(3," Edit "),pl(),Jw(4,Xe,4,2,"button",12),ws(5,"button",13),Rg("click",function(){let r=If(e).id,m=gC();return wf(m.onDelete(r))}),ws(6,"mat-icon"),GC(7,"delete"),pl(),GC(8," Delete "),pl();}if(s&2){let e=gC();XE(4),eC(e.isAdmin()?4:-1);}}var Le="system",Ie=class s{promptApi=g(d);configApi=g(W);location=g(Mm);dialog=g(Re);prompts=Gi([]);isLoading=Gi(false);errorMessage=Gi(null);showOnlyMine=Gi(true);isAdmin=Gi(false);currentUsername=Gi("");promptItems=mT(()=>{let i=this.prompts(),e=this.currentUsername(),r=this.showOnlyMine()&&e?i.filter(p=>this.isMyPrompt(p)):i,D=[...new Set(r.map(p=>p.createdBy))].sort((p,k)=>p===e&&k!==e?-1:k===e&&p!==e||p===Le?1:k===Le?-1:p.localeCompare(k)),H=[];for(let p of D){let k=p===e?`${p} (you)`:p;for(let F of r.filter(Ae=>Ae.createdBy===p))H.push({id:F.id,name:F.name,description:F.description,badges:this.buildBadges(F),groupKey:p,groupLabel:k});}return H});ngOnInit(){this.configApi.getUserConfig().subscribe({next:i=>{this.isAdmin.set(i.groups?.includes("CODAY_ADMIN")??false),this.currentUsername.set(i.username??"");},error:()=>this.isAdmin.set(false)}),this.loadPrompts();}loadPrompts(){this.isLoading.set(true),this.promptApi.listPrompts().subscribe({next:i=>{this.prompts.set(i.filter(e=>!e.id.startsWith("builtin"))),this.isLoading.set(false);},error:i=>{this.errorMessage.set(i?.error?.error??"Failed to load prompts"),this.isLoading.set(false);}});}onBack(){this.location.back();}onCreate(){this.dialog.open(S,{width:"700px",maxHeight:"90vh",data:{mode:"create"}}).afterClosed().subscribe(e=>{e&&this.loadPrompts();});}onEdit(i){this.promptApi.getPrompt(i).subscribe({next:e=>{this.dialog.open(S,{width:"700px",maxHeight:"90vh",data:{mode:"edit",prompt:e}}).afterClosed().subscribe(r=>{r&&this.loadPrompts();});},error:e=>this.errorMessage.set(e?.error?.error??"Failed to load prompt")});}onDelete(i){confirm("Are you sure you want to delete this prompt?")&&this.promptApi.deletePrompt(i).subscribe({next:()=>this.loadPrompts(),error:e=>this.errorMessage.set(e?.error?.error??"Failed to delete prompt")});}onToggleWebhook(i){let e=this.prompts().find(r=>r.id===i);if(!e)return;(e.webhookEnabled?this.promptApi.disableWebhook(i):this.promptApi.enableWebhook(i)).subscribe({next:()=>this.loadPrompts(),error:r=>this.errorMessage.set(r?.error?.error??"Failed to toggle webhook")});}isWebhookEnabled(i){return this.prompts().find(e=>e.id===i)?.webhookEnabled??false}isMyPrompt(i){let e=t=>t.replace(/[.\s]+/g,"_").toLowerCase();return e(i.createdBy)===e(this.currentUsername())}buildBadges(i){let e=[];return i.source==="local"?e.push({label:"local",variant:"info"}):e.push({label:"project",variant:"success"}),i.webhookEnabled&&e.push({label:"webhook",variant:"warning"}),e}static \u0275fac=function(e){return new(e||s)};static \u0275cmp=xw({type:s,selectors:[["app-prompt-list"]],decls:13,vars:6,consts:[["promptCard",""],["cardMenu","matMenu"],[1,"prompt-list-page"],["title","Prompts","cardMinWidth","320px","contentMaxWidth","1400px","searchPlaceholder","Filter prompts\u2026","emptyMessage","No prompts found.",3,"createRequested","items","loading","showCreate","itemTemplate"],["toolbar-start","","mat-icon-button","","title","Back",3,"click"],["toolbar-extras","","color","primary",1,"prompt-list__mine-toggle",3,"ngModelChange","ngModel"],[1,"prompt-list__error"],["matMenuContent",""],[3,"selected","id","name","description","badges"],["dsCardActions",""],["mat-icon-button","",3,"click","matMenuTriggerFor","matMenuTriggerData"],["mat-menu-item","",3,"click"],["mat-menu-item",""],["mat-menu-item","",1,"prompt-list__delete-item",3,"click"]],template:function(e,t){if(e&1&&(ws(0,"div",2)(1,"ds-entity-list",3),Rg("createRequested",function(){return t.onCreate()}),ws(2,"button",4),Rg("click",function(){return t.onBack()}),ws(3,"mat-icon"),GC(4,"chevron_left"),pl()(),ws(5,"mat-slide-toggle",5),Rg("ngModelChange",function(m){return t.showOnlyMine.set(m)}),GC(6," Mine "),pl(),VI(),pl(),Jw(7,Je,2,1,"div",6),pl(),Eg(8,Qe,5,9,"ng-template",null,0,fT),ws(10,"mat-menu",null,1),Eg(12,Ze,9,1,"ng-template",7),pl()),e&2){let r=CC(9);XE(),bg("items",t.promptItems())("loading",t.isLoading())("showCreate",true)("itemTemplate",r),XE(4),bg("ngModel",t.showOnlyMine()),UI(),XE(2),eC(t.errorMessage()?7:-1);}},dependencies:[Wn,ot,it,hr,Gn,yt,wt,ke,se,In,De,Be,ya,En,ti,Zn,cn],styles:["[_nghost-%COMP%]{display:block;width:100%;min-height:100vh;background:var(--color-bg);overflow-y:auto}.prompt-list__mine-toggle[_ngcontent-%COMP%]{flex-shrink:0;font-size:.875rem}.prompt-list__delete-item[_ngcontent-%COMP%]{color:var(--color-error, #ff3b30)}.prompt-list__delete-item[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:inherit}.prompt-list__error[_ngcontent-%COMP%]{margin:1rem auto;max-width:900px;padding:.75rem 1rem;background:#dc262614;border:1px solid rgba(220,38,38,.25);border-radius:8px;color:var(--color-error, #ff3b30);font-size:.875rem}"],changeDetection:1})};export{Ie as PromptListComponent};
|
|
1
|
+
import {g,bm as Mm,R as Re,a as Gi,m as mT,e as xw,h as hr,j as Gn,k as ws,q as Rg,n as GC,o as pl,a3 as VI,J as Jw,af as Eg,ag as fT,u as CC,X as XE,v as bg,a6 as UI,y as eC,Z as z,bl as Mt,_ as Ue$1,am as qm,$ as zt,a0 as jt,a1 as Vt,a2 as Nt,i as pr,bn as Xt,ai as tm,aj as KC,t as rC,bo as tC,a8 as Yg,ak as em,z as oC,a5 as vl,ac as gC,a9 as lC,aa as If,ab as wf,bp as ml,bq as yl,ah as rT,b4 as oT,A as Ug}from'./main-GYSPY3UE.js';import {d}from'./chunk-B0wi4IQ8.js';import {W,k as ke,s as se}from'./chunk-CJCjJyKP.js';import {T as Tn,S as Sn,n as nt,a as ae,l as le,c as ce}from'./chunk-BByguAe9.js';import {$ as $n,o as ot,i as it,I as In,E as Ee,z as ze,v as va,D as Dn}from'./chunk-CGjjc55P.js';import'./chunk-CZe6uHRZ.js';import {y as yt,w as wt,t as ti,Z as Zn,c as cn,Y as Ye$1,a as wt$1,m as mn,g as gt}from'./chunk-DS1gnXQd.js';function Ue(s,i){if(s&1){let e=lC();ws(0,"div",9)(1,"mat-form-field",18)(2,"mat-label"),GC(3),pl(),ws(4,"textarea",19),tm("ngModelChange",function(r){let m=If(e).$index,D=gC();return KC(D.commands[m],r)||(D.commands[m]=r),wf(r)}),pl(),VI(),ws(5,"mat-hint"),GC(6,"Use placeholder for dynamic values"),pl()(),ws(7,"button",20),Rg("click",function(){let r=If(e).$index,m=gC();return wf(m.removeCommand(r))}),ws(8,"mat-icon"),GC(9,"delete"),pl()()();}if(s&2){let e=i.$index,t=gC();XE(3),vl("Prompt ",e+1),XE(),em("ngModel",t.commands[e]),UI(),XE(3),bg("disabled",t.commands.length===1);}}function Ne(s,i){if(s&1){let e=lC();ws(0,"div",10)(1,"h3"),GC(2,"Save to"),pl(),ws(3,"div",21)(4,"label",22)(5,"input",23),tm("ngModelChange",function(r){If(e);let m=gC();return KC(m.source,r)||(m.source=r),wf(r)}),pl(),VI(),ws(6,"div",24)(7,"div",25)(8,"span",26),GC(9,"\u{1F464}"),pl(),ws(10,"span",27),GC(11,"Local"),pl()(),ws(12,"p",28),GC(13,"Personal prompt in ~/.coday/... (not committed)"),pl()()(),ws(14,"label",22)(15,"input",29),tm("ngModelChange",function(r){If(e);let m=gC();return KC(m.source,r)||(m.source=r),wf(r)}),pl(),VI(),ws(16,"div",24)(17,"div",25)(18,"span",26),GC(19,"\u{1F4E6}"),pl(),ws(20,"span",27),GC(21,"Project"),pl()(),ws(22,"p",28),GC(23,"Shared prompt in ./prompts/ (committable)"),pl()()()(),ws(24,"p",30),GC(25,"Storage location is permanent and cannot be changed after creation"),pl()();}if(s&2){let e=gC();XE(4),Ug("selected",e.source==="local"),XE(),em("ngModel",e.source),UI(),XE(9),Ug("selected",e.source==="project"),XE(),em("ngModel",e.source),UI();}}function je(s,i){if(s&1&&(ws(0,"div",11)(1,"h3"),GC(2,"Storage Location"),pl(),ws(3,"div",31)(4,"span",26),GC(5),pl(),ws(6,"span",27),GC(7),pl()(),ws(8,"p",30),GC(9,"Cannot be changed after creation"),pl()()),s&2){let e=gC();XE(3),Ug("badge-local",e.source==="local")("badge-project",e.source==="project"),XE(2),Yg(e.source==="local"?"\u{1F464}":"\u{1F4E6}"),XE(2),Yg(e.source==="local"?"Local":"Project");}}function qe(s,i){if(s&1){let e=lC();ws(0,"div",12)(1,"label",32)(2,"input",33),tm("ngModelChange",function(r){If(e);let m=gC();return KC(m.webhookEnabled,r)||(m.webhookEnabled=r),wf(r)}),pl(),VI(),ws(3,"span"),GC(4,"Enable webhook"),pl()(),ws(5,"p",30),GC(6,"Enable webhook to trigger this prompt via HTTP POST"),pl()();}if(s&2){let e=gC();XE(2),em("ngModel",e.webhookEnabled),UI();}}function He(s,i){if(s&1){let e=lC();ws(0,"div",13)(1,"div",34)(2,"mat-icon",35),GC(3,"link"),pl(),ws(4,"h4"),GC(5,"Webhook URL"),pl()(),ws(6,"div",36)(7,"p",37),GC(8),pl(),ws(9,"button",38),Rg("click",function(){If(e);let r=gC();return wf(r.copyWebhookUrl())}),ws(10,"mat-icon"),GC(11,"content_copy"),pl(),ws(12,"span"),GC(13,"Copy URL"),pl()()(),ws(14,"p",30),GC(15,"Use this URL to trigger the prompt via HTTP POST"),pl()();}if(s&2){let e=gC();XE(8),Yg(e.getWebhookUrl());}}function Ye(s,i){if(s&1&&(ws(0,"div",14)(1,"mat-icon"),GC(2,"error"),pl(),ws(3,"span"),GC(4),pl()()),s&2){let e=gC();XE(4),Yg(e.errorMessage);}}var S=class s{promptApi=g(d);dialogRef=g(z);configApi=g(W);snackBar=g(Mt);name="";description="";commands=[""];webhookEnabled=false;threadLifetime="";source="local";isSaving=false;errorMessage="";isAdmin=false;isEditMode=false;promptId="";data=g(Ue$1);constructor(){this.isEditMode=this.data.mode==="edit";}ngOnInit(){this.configApi.getUserConfig().subscribe({next:i=>{this.isAdmin=i.groups?.includes("CODAY_ADMIN")??false;},error:i=>{console.error("[PROMPT_FORM] Error loading user config:",i),this.isAdmin=false;}}),this.isEditMode&&this.data.prompt&&(this.promptId=this.data.prompt.id,this.name=this.data.prompt.name,this.description=this.data.prompt.description,this.commands=[...this.data.prompt.commands],this.webhookEnabled=this.data.prompt.webhookEnabled,this.source=this.data.prompt.source);}addCommand(){this.commands.push("");}removeCommand(i){this.commands.length>1&&this.commands.splice(i,1);}trackByIndex(i){return i}normalizeName(){this.name=this.name.replace(/[\s_.,;:!?()[\]{}]+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").toLowerCase();}validateForm(){return this.name.trim()?this.description.trim()?this.commands.filter(e=>e.trim()).length===0?(this.errorMessage="At least one command is required",false):true:(this.errorMessage="Description is required",false):(this.errorMessage="Name is required",false)}save(){if(this.errorMessage="",!this.validateForm())return;let i=this.commands.filter(e=>e.trim());if(this.isSaving=true,this.isEditMode&&this.data.prompt){let e={name:this.name.trim(),description:this.description.trim(),commands:i,webhookEnabled:this.webhookEnabled};this.promptApi.updatePrompt(this.data.prompt.id,e).subscribe({next:()=>{this.isSaving=false,this.dialogRef.close(true);},error:t=>{console.error("Error updating prompt:",t),this.errorMessage=t?.error?.error||t?.message||"Failed to update prompt",this.isSaving=false;}});}else {let e={name:this.name.trim(),description:this.description.trim(),commands:i,webhookEnabled:this.webhookEnabled,source:this.source};this.promptApi.createPrompt(e).subscribe({next:()=>{this.isSaving=false,this.dialogRef.close(true);},error:t=>{console.error("Error creating prompt:",t),this.errorMessage=t?.error?.error||t?.message||"Failed to create prompt",this.isSaving=false;}});}}cancel(){this.dialogRef.close(false);}getWebhookUrl(){return `${window.location.origin}/api/webhooks/${this.promptId}/execute`}copyWebhookUrl(){if(!this.webhookEnabled){this.snackBar.open("Webhook is not enabled","Close",{duration:3e3});return}if(!this.promptId){this.snackBar.open("Prompt must be saved before getting webhook URL","Close",{duration:3e3});return}let i=this.getWebhookUrl();navigator.clipboard.writeText(i).then(()=>{this.snackBar.open("Webhook URL copied to clipboard!","Close",{duration:3e3});}).catch(e=>{console.error("Failed to copy webhook URL:",e),this.snackBar.open("Failed to copy URL","Close",{duration:3e3});});}static \u0275fac=function(e){return new(e||s)};static \u0275cmp=xw({type:s,selectors:[["app-prompt-form"]],decls:36,vars:11,consts:[["mat-dialog-title",""],[1,"form-container"],["appearance","outline",1,"full-width"],["matInput","","placeholder","my-prompt","required","",3,"ngModelChange","blur","ngModel"],["matInput","","placeholder","What does this prompt do?","rows","3","required","",3,"ngModelChange","ngModel"],[1,"commands-section"],[1,"section-header"],["mat-icon-button","","type","button","title","Add command",3,"click"],[1,"commands-list"],[1,"command-item"],[1,"source-section"],[1,"source-display"],[1,"webhook-section"],[1,"webhook-url-section"],[1,"error-message"],["align","end"],["mat-button","",3,"click","disabled"],["mat-raised-button","","color","primary",3,"click","disabled"],["appearance","outline",1,"command-field"],["matInput","","placeholder","Enter command with placeholders like \\{\\{key\\}\\}","rows","2",3,"ngModelChange","ngModel"],["mat-icon-button","","type","button","title","Remove command",1,"remove-btn",3,"click","disabled"],[1,"source-options"],[1,"source-option"],["type","radio","name","source","value","local",3,"ngModelChange","ngModel"],[1,"source-content"],[1,"source-header"],[1,"source-icon"],[1,"source-label"],[1,"source-description"],["type","radio","name","source","value","project",3,"ngModelChange","ngModel"],[1,"hint"],[1,"source-badge"],[1,"checkbox-label"],["type","checkbox",3,"ngModelChange","ngModel"],[1,"webhook-url-header"],[1,"webhook-icon"],[1,"webhook-url-content"],[1,"url-text"],["mat-raised-button","","color","accent","type","button",3,"click"]],template:function(e,t){e&1&&(ws(0,"h2",0),GC(1),pl(),ws(2,"mat-dialog-content")(3,"div",1)(4,"mat-form-field",2)(5,"mat-label"),GC(6,"Name"),pl(),ws(7,"input",3),tm("ngModelChange",function(m){return KC(t.name,m)||(t.name=m),m}),Rg("blur",function(){return t.normalizeName()}),pl(),VI(),ws(8,"mat-hint"),GC(9,"A descriptive name (spaces and punctuation will be replaced with hyphens), will be used as command name"),pl()(),ws(10,"mat-form-field",2)(11,"mat-label"),GC(12,"Description"),pl(),ws(13,"textarea",4),tm("ngModelChange",function(m){return KC(t.description,m)||(t.description=m),m}),pl(),VI(),ws(14,"mat-hint"),GC(15,"Explain the purpose of this prompt, helps for searchability"),pl()(),ws(16,"div",5)(17,"div",6)(18,"h3"),GC(19,"Prompts"),pl(),ws(20,"button",7),Rg("click",function(){return t.addCommand()}),ws(21,"mat-icon"),GC(22,"add"),pl()()(),ws(23,"div",8),rC(24,Ue,10,3,"div",9,tC),pl()(),Jw(26,Ne,26,6,"div",10),Jw(27,je,10,6,"div",11),Jw(28,qe,7,1,"div",12),Jw(29,He,16,1,"div",13),Jw(30,Ye,5,1,"div",14),pl()(),ws(31,"mat-dialog-actions",15)(32,"button",16),Rg("click",function(){return t.cancel()}),GC(33,"Cancel"),pl(),ws(34,"button",17),Rg("click",function(){return t.save()}),GC(35),pl()()),e&2&&(XE(),Yg(t.isEditMode?"Edit Prompt":"Create Prompt"),XE(6),em("ngModel",t.name),UI(),XE(6),em("ngModel",t.description),UI(),XE(11),oC(t.commands),XE(2),eC(t.isEditMode?-1:26),XE(),eC(t.isEditMode?27:-1),XE(),eC(t.isAdmin?28:-1),XE(),eC(t.isEditMode&&t.webhookEnabled&&t.isAdmin?29:-1),XE(),eC(t.errorMessage?30:-1),XE(2),bg("disabled",t.isSaving),XE(2),bg("disabled",t.isSaving),XE(),vl(" ",t.isSaving?"Saving...":"Save"," "));},dependencies:[qm,ti,Ye$1,wt$1,mn,Zn,gt,cn,zt,jt,Vt,Nt,hr,pr,Gn,Tn,Sn,nt,ae,le,ce,yt,wt,Xt],styles:[".form-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1rem;padding:0;min-width:500px}@media(max-width:768px){.form-container[_ngcontent-%COMP%]{min-width:auto}}.full-width[_ngcontent-%COMP%]{width:100%}.commands-section[_ngcontent-%COMP%] .section-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin-bottom:.5rem}.commands-section[_ngcontent-%COMP%] .section-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:1rem;font-weight:600}.commands-section[_ngcontent-%COMP%] .commands-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1rem}.commands-section[_ngcontent-%COMP%] .command-item[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.5rem}.commands-section[_ngcontent-%COMP%] .command-item[_ngcontent-%COMP%] .command-field[_ngcontent-%COMP%]{flex:1}.commands-section[_ngcontent-%COMP%] .command-item[_ngcontent-%COMP%] .remove-btn[_ngcontent-%COMP%]{margin-top:8px}.commands-section[_ngcontent-%COMP%] .command-item[_ngcontent-%COMP%] .remove-btn[_ngcontent-%COMP%]:disabled{opacity:.3;cursor:not-allowed}.webhook-section[_ngcontent-%COMP%]{padding:1rem;background:var(--color-surface);border-radius:8px;border:1px solid var(--color-border)}.webhook-section[_ngcontent-%COMP%] .checkbox-label[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;cursor:pointer}.webhook-section[_ngcontent-%COMP%] .checkbox-label[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%]{width:18px;height:18px;cursor:pointer}.webhook-section[_ngcontent-%COMP%] .checkbox-label[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:.95rem}.webhook-section[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%]{margin:.5rem 0 0;font-size:.85rem;color:var(--color-text-secondary)}.webhook-url-section[_ngcontent-%COMP%]{padding:1rem;background:var(--color-surface);border-radius:8px;border:1px solid var(--color-border)}.webhook-url-section[_ngcontent-%COMP%] .webhook-url-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;margin-bottom:.75rem}.webhook-url-section[_ngcontent-%COMP%] .webhook-url-header[_ngcontent-%COMP%] .webhook-icon[_ngcontent-%COMP%]{color:var(--color-primary)}.webhook-url-section[_ngcontent-%COMP%] .webhook-url-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{margin:0;font-size:1rem;font-weight:600}.webhook-url-section[_ngcontent-%COMP%] .webhook-url-content[_ngcontent-%COMP%]{display:flex;align-items:center;gap:1rem;margin-bottom:.5rem}.webhook-url-section[_ngcontent-%COMP%] .webhook-url-content[_ngcontent-%COMP%] .url-text[_ngcontent-%COMP%]{flex:1;margin:0;padding:.75rem;background:var(--color-bg);border:1px solid var(--color-border);border-radius:4px;font-family:monospace;font-size:.85rem;word-break:break-all;color:var(--color-text)}.webhook-url-section[_ngcontent-%COMP%] .webhook-url-content[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{white-space:nowrap;display:flex;align-items:center;gap:.5rem}.webhook-url-section[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-text-secondary)}.error-message[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:.75rem;background:#f443361a;border:1px solid var(--color-error);border-radius:4px;color:var(--color-error)}.error-message[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:1.25rem;width:1.25rem;height:1.25rem}.error-message[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{flex:1}.source-section[_ngcontent-%COMP%]{padding:1rem;background:var(--color-surface);border-radius:8px;border:1px solid var(--color-border)}.source-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 1rem;font-size:1rem;font-weight:600}.source-section[_ngcontent-%COMP%] .source-options[_ngcontent-%COMP%]{display:flex;gap:1rem;margin-bottom:.75rem}@media(max-width:768px){.source-section[_ngcontent-%COMP%] .source-options[_ngcontent-%COMP%]{flex-direction:column}}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%]{flex:1;display:flex;align-items:flex-start;gap:.75rem;padding:1rem;background:var(--color-bg);border:2px solid var(--color-border);border-radius:8px;cursor:pointer;transition:all .2s ease}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%]:hover{border-color:var(--color-primary);background:var(--color-bg-hover)}.source-section[_ngcontent-%COMP%] .source-option.selected[_ngcontent-%COMP%]{border-color:var(--color-primary);background:var(--color-bg-hover);box-shadow:0 0 0 1px var(--color-primary)}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%] input[type=radio][_ngcontent-%COMP%]{margin-top:2px;cursor:pointer}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%]{flex:1}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%] .source-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;margin-bottom:.5rem}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%] .source-header[_ngcontent-%COMP%] .source-icon[_ngcontent-%COMP%]{font-size:1.25rem}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%] .source-header[_ngcontent-%COMP%] .source-label[_ngcontent-%COMP%]{font-weight:600;font-size:.95rem}.source-section[_ngcontent-%COMP%] .source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%] .source-description[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-text-secondary);line-height:1.4}.source-section[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-text-secondary);font-style:italic}.thread-lifetime-disabled[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.75rem;padding:1rem;background:#2196f30d;border:1px solid rgba(33,150,243,.2);border-radius:8px;margin-bottom:1rem}.thread-lifetime-disabled[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:#2196f3cc;font-size:1.25rem;width:1.25rem;height:1.25rem;margin-top:2px}.thread-lifetime-disabled[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;flex:1}.thread-lifetime-disabled[_ngcontent-%COMP%] p[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-size:.95rem;color:var(--color-text)}.thread-lifetime-disabled[_ngcontent-%COMP%] p[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%]{display:block;margin-top:.25rem;font-size:.85rem;color:var(--color-text-secondary);line-height:1.4}.source-display[_ngcontent-%COMP%]{padding:1rem;background:var(--color-surface);border-radius:8px;border:1px solid var(--color-border)}.source-display[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 .75rem;font-size:1rem;font-weight:600}.source-display[_ngcontent-%COMP%] .source-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem 1rem;border-radius:6px;font-size:.9rem;font-weight:500;margin-bottom:.5rem}.source-display[_ngcontent-%COMP%] .source-badge[_ngcontent-%COMP%] .source-icon[_ngcontent-%COMP%]{font-size:1.1rem}.source-display[_ngcontent-%COMP%] .source-badge.badge-local[_ngcontent-%COMP%]{background:#2196f31a;color:#2196f3;border:1px solid rgba(33,150,243,.3)}.source-display[_ngcontent-%COMP%] .source-badge.badge-project[_ngcontent-%COMP%]{background:#4caf501a;color:#4caf50;border:1px solid rgba(76,175,80,.3)}.source-display[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-text-secondary);font-style:italic}"],changeDetection:1})};var Ge=()=>[],Ke=s=>({id:s});function Je(s,i){if(s&1&&(ws(0,"div",6),GC(1),pl()),s&2){let e=gC();XE(),Yg(e.errorMessage());}}function Qe(s,i){if(s&1){let e=lC();ws(0,"ds-entity-card",8),Rg("selected",function(r){If(e);let m=gC();return wf(m.onEdit(r))}),ml(1,9),ws(2,"button",10),Rg("click",function(r){return r.stopPropagation()}),ws(3,"mat-icon"),GC(4,"more_vert"),pl()(),yl(),pl();}if(s&2){let e=i.$implicit;gC();let t=CC(11);bg("id",e.id)("name",e.name)("description",e.description)("badges",e.badges??rT(6,Ge)),XE(2),bg("matMenuTriggerFor",t)("matMenuTriggerData",oT(7,Ke,e.id));}}function Xe(s,i){if(s&1){let e=lC();ws(0,"button",11),Rg("click",function(){If(e);let r=gC().id,m=gC();return wf(m.onToggleWebhook(r))}),ws(1,"mat-icon"),GC(2),pl(),GC(3),pl();}if(s&2){let e=gC().id,t=gC();XE(2),Yg(t.isWebhookEnabled(e)?"link_off":"link"),XE(),vl(" ",t.isWebhookEnabled(e)?"Disable webhook":"Enable webhook"," ");}}function Ze(s,i){if(s&1){let e=lC();ws(0,"button",11),Rg("click",function(){let r=If(e).id,m=gC();return wf(m.onEdit(r))}),ws(1,"mat-icon"),GC(2,"edit"),pl(),GC(3," Edit "),pl(),Jw(4,Xe,4,2,"button",12),ws(5,"button",13),Rg("click",function(){let r=If(e).id,m=gC();return wf(m.onDelete(r))}),ws(6,"mat-icon"),GC(7,"delete"),pl(),GC(8," Delete "),pl();}if(s&2){let e=gC();XE(4),eC(e.isAdmin()?4:-1);}}var Le="system",Ie=class s{promptApi=g(d);configApi=g(W);location=g(Mm);dialog=g(Re);prompts=Gi([]);isLoading=Gi(false);errorMessage=Gi(null);showOnlyMine=Gi(true);isAdmin=Gi(false);currentUsername=Gi("");promptItems=mT(()=>{let i=this.prompts(),e=this.currentUsername(),r=this.showOnlyMine()&&e?i.filter(p=>this.isMyPrompt(p)):i,D=[...new Set(r.map(p=>p.createdBy))].sort((p,k)=>p===e&&k!==e?-1:k===e&&p!==e||p===Le?1:k===Le?-1:p.localeCompare(k)),H=[];for(let p of D){let k=p===e?`${p} (you)`:p;for(let F of r.filter(Ae=>Ae.createdBy===p))H.push({id:F.id,name:F.name,description:F.description,badges:this.buildBadges(F),groupKey:p,groupLabel:k});}return H});ngOnInit(){this.configApi.getUserConfig().subscribe({next:i=>{this.isAdmin.set(i.groups?.includes("CODAY_ADMIN")??false),this.currentUsername.set(i.username??"");},error:()=>this.isAdmin.set(false)}),this.loadPrompts();}loadPrompts(){this.isLoading.set(true),this.promptApi.listPrompts().subscribe({next:i=>{this.prompts.set(i.filter(e=>!e.id.startsWith("builtin"))),this.isLoading.set(false);},error:i=>{this.errorMessage.set(i?.error?.error??"Failed to load prompts"),this.isLoading.set(false);}});}onBack(){this.location.back();}onCreate(){this.dialog.open(S,{width:"700px",maxHeight:"90vh",data:{mode:"create"}}).afterClosed().subscribe(e=>{e&&this.loadPrompts();});}onEdit(i){this.promptApi.getPrompt(i).subscribe({next:e=>{this.dialog.open(S,{width:"700px",maxHeight:"90vh",data:{mode:"edit",prompt:e}}).afterClosed().subscribe(r=>{r&&this.loadPrompts();});},error:e=>this.errorMessage.set(e?.error?.error??"Failed to load prompt")});}onDelete(i){confirm("Are you sure you want to delete this prompt?")&&this.promptApi.deletePrompt(i).subscribe({next:()=>this.loadPrompts(),error:e=>this.errorMessage.set(e?.error?.error??"Failed to delete prompt")});}onToggleWebhook(i){let e=this.prompts().find(r=>r.id===i);if(!e)return;(e.webhookEnabled?this.promptApi.disableWebhook(i):this.promptApi.enableWebhook(i)).subscribe({next:()=>this.loadPrompts(),error:r=>this.errorMessage.set(r?.error?.error??"Failed to toggle webhook")});}isWebhookEnabled(i){return this.prompts().find(e=>e.id===i)?.webhookEnabled??false}isMyPrompt(i){let e=t=>t.replace(/[.\s]+/g,"_").toLowerCase();return e(i.createdBy)===e(this.currentUsername())}buildBadges(i){let e=[];return i.source==="local"?e.push({label:"local",variant:"info"}):e.push({label:"project",variant:"success"}),i.webhookEnabled&&e.push({label:"webhook",variant:"warning"}),e}static \u0275fac=function(e){return new(e||s)};static \u0275cmp=xw({type:s,selectors:[["app-prompt-list"]],decls:13,vars:6,consts:[["promptCard",""],["cardMenu","matMenu"],[1,"prompt-list-page"],["title","Prompts","cardMinWidth","320px","contentMaxWidth","1400px","searchPlaceholder","Filter prompts\u2026","emptyMessage","No prompts found.",3,"createRequested","items","loading","showCreate","itemTemplate"],["toolbar-start","","mat-icon-button","","title","Back",3,"click"],["toolbar-extras","","color","primary",1,"prompt-list__mine-toggle",3,"ngModelChange","ngModel"],[1,"prompt-list__error"],["matMenuContent",""],[3,"selected","id","name","description","badges"],["dsCardActions",""],["mat-icon-button","",3,"click","matMenuTriggerFor","matMenuTriggerData"],["mat-menu-item","",3,"click"],["mat-menu-item",""],["mat-menu-item","",1,"prompt-list__delete-item",3,"click"]],template:function(e,t){if(e&1&&(ws(0,"div",2)(1,"ds-entity-list",3),Rg("createRequested",function(){return t.onCreate()}),ws(2,"button",4),Rg("click",function(){return t.onBack()}),ws(3,"mat-icon"),GC(4,"chevron_left"),pl()(),ws(5,"mat-slide-toggle",5),Rg("ngModelChange",function(m){return t.showOnlyMine.set(m)}),GC(6," Mine "),pl(),VI(),pl(),Jw(7,Je,2,1,"div",6),pl(),Eg(8,Qe,5,9,"ng-template",null,0,fT),ws(10,"mat-menu",null,1),Eg(12,Ze,9,1,"ng-template",7),pl()),e&2){let r=CC(9);XE(),bg("items",t.promptItems())("loading",t.isLoading())("showCreate",true)("itemTemplate",r),XE(4),bg("ngModel",t.showOnlyMine()),UI(),XE(2),eC(t.errorMessage()?7:-1);}},dependencies:[$n,ot,it,hr,Gn,yt,wt,ke,se,In,Ee,ze,va,Dn,ti,Zn,cn],styles:["[_nghost-%COMP%]{display:block;width:100%;min-height:100vh;background:var(--color-bg);overflow-y:auto}.prompt-list__mine-toggle[_ngcontent-%COMP%]{flex-shrink:0;font-size:.875rem}.prompt-list__delete-item[_ngcontent-%COMP%]{color:var(--color-error, #ff3b30)}.prompt-list__delete-item[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:inherit}.prompt-list__error[_ngcontent-%COMP%]{margin:1rem auto;max-width:900px;padding:.75rem 1rem;background:#dc262614;border:1px solid rgba(220,38,38,.25);border-radius:8px;color:var(--color-error, #ff3b30);font-size:.875rem}"],changeDetection:1})};export{Ie as PromptListComponent};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import {A,k as kt,b as bt}from'./chunk-DzIeB2JV.js';import {S as St}from'./chunk-Fswp1zS2.js';import {E as Et,y as yt$1,G as Ge}from'./chunk-BYRF4k2F.js';import {g,G,P,U,N,p as pe$1,K as c,C as Ce$1,a as Gi,F as F$1,m as mT,b as U$1,e as xw,h as hr,i as pr,k as ws,n as GC,o as pl,q as Rg,J as Jw,t as rC,X as XE,v as bg,y as eC,z as oC,A as Ug,T as Tg,r as re,ca as _e$1,Y as x,an as ue$1,ap as wd,l as le$1,V,S as Sg,a9 as lC,aa as If,ac as gC,ab as wf,a8 as Yg,a5 as vl}from'./main-COD2LZKB.js';import'./chunk-DmspnNZU.js';import'./chunk-ByHd8LOC.js';import'./chunk-Dg2L56ka.js';import'./chunk-CaZu6-ik.js';import {y as yt,w as wt}from'./chunk-Bb0cfZpR.js';var R=class n{threadState=g(U);codayService=g(Ge);threadList=F$1(this.threadState.threadList$,{initialValue:[]});selectedThread=F$1(this.threadState.selectedThread$,{initialValue:null});isThinking=F$1(this.codayService.isThinking$,{initialValue:false});inviteEvent=F$1(this.codayService.currentInviteEvent$.pipe(re(t=>t?.invite===_e$1?null:t)),{initialValue:null});tasks=mT(()=>{let t=this.threadList(),e=this.selectedThread(),r=this.isThinking(),o=this.inviteEvent();return t.filter(i=>!i.parentThreadId).map(i=>{let m=!!e&&i.id===e.id;return {id:i.id,name:i.name,summary:i.summary,modifiedDate:i.modifiedDate,starring:i.starring??[],users:i.users??[],status:this.deriveStatus(i,m,r,!!o),isActive:m,worktreeProject:i.worktreeProject}}).sort((i,m)=>{let q=kt[i.status]-kt[m.status];return q!==0?q:i.modifiedDate>m.modifiedDate?-1:1})});deriveStatus(t,e,r,o){let i=Date.now()-new Date(t.modifiedDate).getTime();return t.closedByUser?"done":t.pendingInvite?"waiting-you":e?r?"in-progress":"paused":i<bt?"in-progress":"paused"}static \u0275fac=function(e){return new(e||n)};static \u0275prov=x({token:n,factory:n.\u0275fac,providedIn:"root"})};var F=class n{projectState=g(P);threadState=g(U);destroy$=new ue$1;eventSource=null;currentProject=null;constructor(){this.projectState.selectedProject$.pipe(wd(this.destroy$)).subscribe(t=>{let e=t?.name??null;e!==this.currentProject&&(this.disconnect(),e&&this.connect(e));});}connect(t,e=5e3){this.currentProject=t;let r=`/api/projects/${encodeURIComponent(t)}/event-stream`;console.log(`[PROJECT_SSE] Connecting to ${r}`),this.eventSource=new EventSource(r),this.eventSource.onmessage=o=>{try{let i=JSON.parse(o.data),m=le$1(i);if(!m)return;m instanceof V&&(console.log("[PROJECT_SSE] ThreadUpdateEvent \u2014 refreshing thread list"),this.threadState.refreshThreadList());}catch(i){console.warn("[PROJECT_SSE] Failed to parse event:",i);}},this.eventSource.onerror=()=>{this.eventSource?.readyState===EventSource.CLOSED&&(console.warn(`[PROJECT_SSE] Connection closed for ${t}, reconnecting in ${e}ms`),this.eventSource=null,setTimeout(()=>{this.currentProject===t&&this.connect(t,Math.min(e*2,6e4));},e));};}disconnect(){this.eventSource&&(this.eventSource.close(),this.eventSource=null,console.log(`[PROJECT_SSE] Disconnected from project ${this.currentProject}`)),this.currentProject=null;}ngOnDestroy(){this.disconnect(),this.destroy$.next(),this.destroy$.complete();}static \u0275fac=function(e){return new(e||n)};static \u0275prov=x({token:n,factory:n.\u0275fac,providedIn:"root"})};var ce=(n,t)=>t.key,de=(n,t)=>t.status,le=(n,t)=>t.id;function pe(n,t){n&1&&Sg(0,"mat-spinner",6);}function me(n,t){n&1&&(ws(0,"mat-icon"),GC(1,"add"),pl());}function ue(n,t){if(n&1&&(ws(0,"span",16),GC(1),pl()),n&2){let e=gC().$implicit,r=gC();XE(),Yg(r.filterCounts()[e.key]);}}function ge(n,t){if(n&1){let e=lC();ws(0,"button",15),Rg("click",function(){let o=If(e).$implicit,i=gC();return wf(i.setFilter(o.key))}),ws(1,"mat-icon",10),GC(2),pl(),ws(3,"span"),GC(4),pl(),Jw(5,ue,2,1,"span",16),pl();}if(n&2){let e=t.$implicit,r=gC();Ug("active",r.activeFilter()===e.key),Tg("aria-selected",r.activeFilter()===e.key),XE(2),Yg(e.icon),XE(2),Yg(e.label),XE(),eC(r.filterCounts()[e.key]>0?5:-1);}}function _e(n,t){n&1&&(ws(0,"div",12),Sg(1,"mat-spinner",17),ws(2,"p"),GC(3,"Loading tasks\u2026"),pl()());}function fe(n,t){if(n&1){let e=lC();ws(0,"p"),GC(1,"No tasks yet. Start your first one!"),pl(),ws(2,"button",19),Rg("click",function(){If(e);let o=gC(2);return wf(o.createTask())}),ws(3,"mat-icon"),GC(4,"add"),pl(),GC(5," New Task "),pl();}}function he(n,t){n&1&&(ws(0,"p"),GC(1,"No tasks in this category."),pl());}function ke(n,t){if(n&1&&(ws(0,"div",13)(1,"mat-icon",18),GC(2,"rocket_launch"),pl(),Jw(3,fe,6,0)(4,he,2,0,"p"),pl()),n&2){let e=gC();XE(3),eC(e.activeFilter()==="all"?3:4);}}function ve(n,t){if(n&1){let e=lC();ws(0,"app-task-card",25),Rg("stopRequested",function(o){If(e);let i=gC(3);return wf(i.onStopRequested(o))})("deleteRequested",function(o){If(e);let i=gC(3);return wf(i.onDeleteRequested(o))})("starToggled",function(o){If(e);let i=gC(3);return wf(i.onStarToggled(o))})("markDoneRequested",function(o){If(e);let i=gC(3);return wf(i.onMarkDoneRequested(o))})("markActiveRequested",function(o){If(e);let i=gC(3);return wf(i.onMarkActiveRequested(o))}),pl();}if(n&2){let e=t.$implicit;bg("task",e);}}function Ce(n,t){if(n&1&&(ws(0,"section",20)(1,"h2",21)(2,"mat-icon",22),GC(3),pl(),GC(4),ws(5,"span",23),GC(6),pl()(),ws(7,"div",14),rC(8,ve,1,1,"app-task-card",24,le),pl()()),n&2){let e=t.$implicit;XE(3),Yg(e.icon),XE(),vl(" ",e.label," "),XE(2),Yg(e.tasks.length),XE(2),oC(e.tasks);}}function be(n,t){if(n&1&&rC(0,Ce,10,3,"section",20,de),n&2){let e=gC();oC(e.taskGroups());}}function ye(n,t){if(n&1){let e=lC();ws(0,"app-task-card",25),Rg("stopRequested",function(o){If(e);let i=gC(2);return wf(i.onStopRequested(o))})("deleteRequested",function(o){If(e);let i=gC(2);return wf(i.onDeleteRequested(o))})("starToggled",function(o){If(e);let i=gC(2);return wf(i.onStarToggled(o))})("markDoneRequested",function(o){If(e);let i=gC(2);return wf(i.onMarkDoneRequested(o))})("markActiveRequested",function(o){If(e);let i=gC(2);return wf(i.onMarkActiveRequested(o))}),pl();}if(n&2){let e=t.$implicit;bg("task",e);}}function xe(n,t){if(n&1&&(ws(0,"div",14),rC(1,ye,1,1,"app-task-card",24,le),pl()),n&2){let e=gC();XE(),oC(e.filteredTasks());}}var Te=[{key:"all",label:"All",icon:"grid_view"},{key:"waiting-you",label:"Waiting for you",icon:"mark_unread_chat_alt"},{key:"in-progress",label:"In progress",icon:"pending"},{key:"paused",label:"Paused",icon:"pause_circle"},{key:"done",label:"Done",icon:"check_circle"}],se=class n{router=g(G);projectState=g(P);threadState=g(U);threadApi=g(N);taskStatus=g(R);userService=g(pe$1);projectApi=g(c);destroyRef=g(Ce$1);_projectEventStream=g(F);filters=Te;activeFilter=Gi("all");starredOnly=Gi(false);isCreating=Gi(false);isLoadingList=F$1(this.threadState.isLoadingThreadList$,{initialValue:false});username=F$1(this.userService.username$,{initialValue:null});allTasks=this.taskStatus.tasks;filteredTasks=mT(()=>{let t=this.activeFilter(),e=this.username(),r=this.allTasks();return this.starredOnly()&&e&&(r=r.filter(o=>o.starring.includes(e))),t==="all"?r:r.filter(o=>o.status===t)});filterCounts=mT(()=>{let t=this.username(),e=this.allTasks();return this.starredOnly()&&t&&(e=e.filter(r=>r.starring.includes(t))),{all:e.length,"waiting-you":e.filter(r=>r.status==="waiting-you").length,"in-progress":e.filter(r=>r.status==="in-progress").length,paused:e.filter(r=>r.status==="paused").length,done:e.filter(r=>r.status==="done").length}});taskGroups=mT(()=>{let t=this.username(),e=this.allTasks();this.starredOnly()&&t&&(e=e.filter(o=>o.starring.includes(t)));let r=[{status:"waiting-you",label:"Waiting for you",icon:"mark_unread_chat_alt",tasks:[]},{status:"in-progress",label:"In progress",icon:"pending",tasks:[]},{status:"done",label:"Done",icon:"check_circle",tasks:[]},{status:"paused",label:"Paused",icon:"pause_circle",tasks:[]},{status:"error",label:"Error",icon:"error",tasks:[]}];for(let o of e){let i=r.find(m=>m.status===o.status);i&&i.tasks.push(o);}return r.filter(o=>o.tasks.length>0)});ngOnInit(){this.userService.fetchCurrentUser().pipe(U$1(this.destroyRef)).subscribe({error:t=>console.warn("[TASK-CONTROL] Could not fetch user:",t)});}setFilter(t){this.activeFilter.set(t);}toggleStarredFilter(){this.starredOnly.update(t=>!t);}createTask(){let t=this.projectState.getSelectedProjectId();!t||this.isCreating()||(this.isCreating.set(true),this.threadApi.createThread().pipe(U$1(this.destroyRef)).subscribe({next:e=>{this.isCreating.set(false),this.router.navigate(["project",t,"thread",e.thread.id]);},error:e=>{console.error("[TASK-CONTROL] Failed to create thread:",e),this.isCreating.set(false);}}));}onStopRequested(t){this.threadApi.stopThread(t).pipe(U$1(this.destroyRef)).subscribe({error:e=>console.error("[TASK-CONTROL] Failed to stop thread:",e)});}onDeleteRequested(t){this.threadApi.deleteThread(t).pipe(U$1(this.destroyRef)).subscribe({next:()=>this.threadState.refreshThreadList(),error:e=>console.error("[TASK-CONTROL] Failed to delete thread:",e)});}onStarToggled(t){let e=this.username();if(!e)return;let r=this.allTasks().find(m=>m.id===t);if(!r)return;let o=r.starring.includes(e),i=o?this.threadApi.unstarThread(t):this.threadApi.starThread(t);this.threadState.updateStarLocal(t,!o,e),i.pipe(U$1(this.destroyRef)).subscribe({error:m=>{console.error("[TASK-CONTROL] Failed to toggle star:",m),this.threadState.refreshThreadList();}});}onMarkDoneRequested(t){let e=this.projectState.getSelectedProjectId();e&&this.projectApi.markThreadDone(e,t).pipe(U$1(this.destroyRef)).subscribe({next:()=>this.threadState.refreshThreadList(),error:r=>console.error("[TASK-CONTROL] Failed to mark task as done:",r)});}onMarkActiveRequested(t){let e=this.projectState.getSelectedProjectId();e&&this.projectApi.markThreadActive(e,t).pipe(U$1(this.destroyRef)).subscribe({next:()=>this.threadState.refreshThreadList(),error:r=>console.error("[TASK-CONTROL] Failed to mark task as active:",r)});}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=xw({type:n,selectors:[["app-task-control"]],decls:25,vars:6,consts:[[1,"task-control"],[1,"tc-header"],[1,"tc-title-row"],[1,"tc-title"],[1,"title-icon"],["mat-flat-button","","aria-label","Start a new task",1,"new-task-btn",3,"click","disabled"],["diameter","16"],["role","tablist","aria-label","Filter tasks",1,"tc-filters"],["role","tab",1,"filter-chip",3,"active"],["role","switch","aria-label","Show starred tasks only",1,"filter-chip","starred-filter",3,"click"],[1,"filter-icon"],[1,"tc-grid-wrapper"],[1,"tc-loading"],[1,"tc-empty"],[1,"tc-grid"],["role","tab",1,"filter-chip",3,"click"],[1,"filter-badge"],["diameter","40"],[1,"empty-icon"],["mat-flat-button","",1,"new-task-btn",3,"click"],[1,"tc-group"],[1,"tc-group-title"],[1,"group-icon"],[1,"group-count"],[3,"task"],[3,"stopRequested","deleteRequested","starToggled","markDoneRequested","markActiveRequested","task"]],template:function(e,r){e&1&&(ws(0,"app-sidenav")(1,"div",0)(2,"header",1)(3,"div",2)(4,"h1",3)(5,"mat-icon",4),GC(6,"rocket_launch"),pl(),GC(7," Task Control "),pl(),ws(8,"button",5),Rg("click",function(){return r.createTask()}),Jw(9,pe,1,0,"mat-spinner",6)(10,me,2,0,"mat-icon"),GC(11," New Task "),pl()(),ws(12,"nav",7),rC(13,ge,6,6,"button",8,ce),ws(15,"button",9),Rg("click",function(){return r.toggleStarredFilter()}),ws(16,"mat-icon",10),GC(17,"star"),pl(),ws(18,"span"),GC(19,"Starred"),pl()()()(),ws(20,"main",11),Jw(21,_e,4,0,"div",12)(22,ke,5,1,"div",13)(23,be,2,0)(24,xe,3,0,"div",14),pl()()()),e&2&&(XE(8),bg("disabled",r.isCreating()),XE(),eC(r.isCreating()?9:10),XE(4),oC(r.filters),XE(2),Ug("active",r.starredOnly()),Tg("aria-checked",r.starredOnly()),XE(6),eC(r.isLoadingList()?21:r.filteredTasks().length===0?22:r.activeFilter()==="all"?23:24));},dependencies:[A,St,yt,wt,hr,pr,Et,yt$1],styles:[".glass-panel[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow)}.glass-interactive[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow);transition:all .3s cubic-bezier(.4,0,.2,1)}.glass-interactive[_ngcontent-%COMP%]:hover{transform:translateY(-2px);box-shadow:0 12px 40px #00000026}.glass-interactive[_ngcontent-%COMP%]:active{transform:translateY(0)}.glass-card[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow);border-radius:20px;padding:1.5rem}.glass-button[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow);transition:all .3s cubic-bezier(.4,0,.2,1)}.glass-button[_ngcontent-%COMP%]:hover{transform:translateY(-2px);box-shadow:0 12px 40px #00000026}.glass-button[_ngcontent-%COMP%]:active{transform:translateY(0)}.glass-button[_ngcontent-%COMP%]{border-radius:12px;padding:.75rem 1.5rem;font-weight:600;cursor:pointer}.glass-button[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed;transform:none}.glass-button[_ngcontent-%COMP%]:disabled:hover{transform:none}.smooth-theme-transition[_ngcontent-%COMP%]{transition:background .3s ease,color .3s ease,border-color .3s ease,box-shadow .3s ease}[_nghost-%COMP%]{display:flex;height:100vh;width:100%;overflow:hidden}.task-control[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;overflow:hidden;padding:1.5rem;gap:1.25rem;box-sizing:border-box}.tc-header[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1rem;flex-shrink:0}.tc-title-row[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:1rem}.tc-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;margin:0;font-size:1.5rem;font-weight:700;color:var(--color-text)}.tc-title[_ngcontent-%COMP%] .title-icon[_ngcontent-%COMP%]{font-size:1.5rem;width:1.5rem;height:1.5rem;color:var(--color-primary)}.new-task-btn[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.375rem;background:var(--color-primary);color:var(--color-text-inverse);border-radius:12px;font-weight:600;padding:0 1rem;height:36px;flex-shrink:0}.new-task-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:1.1rem;width:1.1rem;height:1.1rem}.new-task-btn[_ngcontent-%COMP%] mat-spinner[_ngcontent-%COMP%]{display:inline-block}.tc-filters[_ngcontent-%COMP%]{display:flex;gap:.5rem;flex-wrap:wrap}.filter-chip[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow);display:flex;align-items:center;gap:.375rem;padding:.375rem .875rem;border-radius:100px;font-size:.8rem;font-weight:500;color:var(--color-text-secondary);cursor:pointer;border:1px solid var(--color-border);transition:background .15s ease,color .15s ease,border-color .15s ease;white-space:nowrap}.filter-chip[_ngcontent-%COMP%] .filter-icon[_ngcontent-%COMP%]{font-size:.9rem;width:.9rem;height:.9rem}.filter-chip[_ngcontent-%COMP%] .filter-badge[_ngcontent-%COMP%]{background:var(--color-primary);color:var(--color-text-inverse);border-radius:100px;padding:0 .375rem;font-size:.7rem;font-weight:700;min-width:18px;text-align:center;line-height:18px}.filter-chip.active[_ngcontent-%COMP%]{background:var(--color-primary);color:var(--color-text-inverse);border-color:var(--color-primary)}.filter-chip.active[_ngcontent-%COMP%] .filter-icon[_ngcontent-%COMP%]{color:var(--color-text-inverse)}.filter-chip.active[_ngcontent-%COMP%] .filter-badge[_ngcontent-%COMP%]{background:#ffffff4d;color:var(--color-text-inverse)}.filter-chip[_ngcontent-%COMP%]:hover:not(.active){background:var(--color-bg-hover);color:var(--color-text)}.starred-filter.active[_ngcontent-%COMP%]{background:#f5a62326;border-color:#f5a623;color:#f5a623}.starred-filter.active[_ngcontent-%COMP%] .filter-icon[_ngcontent-%COMP%]{color:#f5a623}.tc-group[_ngcontent-%COMP%]{margin-bottom:1.5rem}.tc-group[_ngcontent-%COMP%]:last-child{margin-bottom:0}.tc-group-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;margin:0 0 .75rem;font-size:.85rem;font-weight:600;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.05em}.tc-group-title[_ngcontent-%COMP%] .group-icon[_ngcontent-%COMP%]{font-size:1rem;width:1rem;height:1rem}.tc-group-title[_ngcontent-%COMP%] .group-count[_ngcontent-%COMP%]{background:var(--color-bg-hover);border-radius:100px;padding:0 .375rem;font-size:.75rem;font-weight:700;min-width:18px;text-align:center;line-height:18px}.tc-grid-wrapper[_ngcontent-%COMP%]{flex:1;overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--color-border) transparent}.tc-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1rem;padding-bottom:1rem}@media(max-width:600px){.tc-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}}.tc-loading[_ngcontent-%COMP%], .tc-empty[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem;height:100%;min-height:240px;color:var(--color-text-secondary);text-align:center}.tc-loading[_ngcontent-%COMP%] p[_ngcontent-%COMP%], .tc-empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:.95rem}.empty-icon[_ngcontent-%COMP%]{font-size:3rem;width:3rem;height:3rem;opacity:.3}"]})};export{se as TaskControlComponent};
|
|
1
|
+
import {A,k as kt,b as bt}from'./chunk-DGUwcds6.js';import {S as St}from'./chunk-Bt_Yi0KO.js';import {E as Et,y as yt$1,G as Ge}from'./chunk-CqTTbhQw.js';import {g,G,P,U,N,p as pe$1,K as c,C as Ce$1,a as Gi,F as F$1,m as mT,b as U$1,e as xw,h as hr,i as pr,k as ws,n as GC,o as pl,q as Rg,J as Jw,t as rC,X as XE,v as bg,y as eC,z as oC,A as Ug,T as Tg,r as re,ca as _e$1,Y as x,an as ue$1,ap as wd,l as le$1,V,S as Sg,a9 as lC,aa as If,ac as gC,ab as wf,a8 as Yg,a5 as vl}from'./main-GYSPY3UE.js';import'./chunk-1pMMl5aQ.js';import'./chunk-CJCjJyKP.js';import'./chunk-BByguAe9.js';import'./chunk-CZe6uHRZ.js';import {y as yt,w as wt}from'./chunk-DS1gnXQd.js';var R=class n{threadState=g(U);codayService=g(Ge);threadList=F$1(this.threadState.threadList$,{initialValue:[]});selectedThread=F$1(this.threadState.selectedThread$,{initialValue:null});isThinking=F$1(this.codayService.isThinking$,{initialValue:false});inviteEvent=F$1(this.codayService.currentInviteEvent$.pipe(re(t=>t?.invite===_e$1?null:t)),{initialValue:null});tasks=mT(()=>{let t=this.threadList(),e=this.selectedThread(),r=this.isThinking(),o=this.inviteEvent();return t.filter(i=>!i.parentThreadId).map(i=>{let m=!!e&&i.id===e.id;return {id:i.id,name:i.name,summary:i.summary,modifiedDate:i.modifiedDate,starring:i.starring??[],users:i.users??[],status:this.deriveStatus(i,m,r,!!o),isActive:m,worktreeProject:i.worktreeProject}}).sort((i,m)=>{let q=kt[i.status]-kt[m.status];return q!==0?q:i.modifiedDate>m.modifiedDate?-1:1})});deriveStatus(t,e,r,o){let i=Date.now()-new Date(t.modifiedDate).getTime();return t.closedByUser?"done":t.pendingInvite?"waiting-you":e?r?"in-progress":"paused":i<bt?"in-progress":"paused"}static \u0275fac=function(e){return new(e||n)};static \u0275prov=x({token:n,factory:n.\u0275fac,providedIn:"root"})};var F=class n{projectState=g(P);threadState=g(U);destroy$=new ue$1;eventSource=null;currentProject=null;constructor(){this.projectState.selectedProject$.pipe(wd(this.destroy$)).subscribe(t=>{let e=t?.name??null;e!==this.currentProject&&(this.disconnect(),e&&this.connect(e));});}connect(t,e=5e3){this.currentProject=t;let r=`/api/projects/${encodeURIComponent(t)}/event-stream`;console.log(`[PROJECT_SSE] Connecting to ${r}`),this.eventSource=new EventSource(r),this.eventSource.onmessage=o=>{try{let i=JSON.parse(o.data),m=le$1(i);if(!m)return;m instanceof V&&(console.log("[PROJECT_SSE] ThreadUpdateEvent \u2014 refreshing thread list"),this.threadState.refreshThreadList());}catch(i){console.warn("[PROJECT_SSE] Failed to parse event:",i);}},this.eventSource.onerror=()=>{this.eventSource?.readyState===EventSource.CLOSED&&(console.warn(`[PROJECT_SSE] Connection closed for ${t}, reconnecting in ${e}ms`),this.eventSource=null,setTimeout(()=>{this.currentProject===t&&this.connect(t,Math.min(e*2,6e4));},e));};}disconnect(){this.eventSource&&(this.eventSource.close(),this.eventSource=null,console.log(`[PROJECT_SSE] Disconnected from project ${this.currentProject}`)),this.currentProject=null;}ngOnDestroy(){this.disconnect(),this.destroy$.next(),this.destroy$.complete();}static \u0275fac=function(e){return new(e||n)};static \u0275prov=x({token:n,factory:n.\u0275fac,providedIn:"root"})};var ce=(n,t)=>t.key,de=(n,t)=>t.status,le=(n,t)=>t.id;function pe(n,t){n&1&&Sg(0,"mat-spinner",6);}function me(n,t){n&1&&(ws(0,"mat-icon"),GC(1,"add"),pl());}function ue(n,t){if(n&1&&(ws(0,"span",16),GC(1),pl()),n&2){let e=gC().$implicit,r=gC();XE(),Yg(r.filterCounts()[e.key]);}}function ge(n,t){if(n&1){let e=lC();ws(0,"button",15),Rg("click",function(){let o=If(e).$implicit,i=gC();return wf(i.setFilter(o.key))}),ws(1,"mat-icon",10),GC(2),pl(),ws(3,"span"),GC(4),pl(),Jw(5,ue,2,1,"span",16),pl();}if(n&2){let e=t.$implicit,r=gC();Ug("active",r.activeFilter()===e.key),Tg("aria-selected",r.activeFilter()===e.key),XE(2),Yg(e.icon),XE(2),Yg(e.label),XE(),eC(r.filterCounts()[e.key]>0?5:-1);}}function _e(n,t){n&1&&(ws(0,"div",12),Sg(1,"mat-spinner",17),ws(2,"p"),GC(3,"Loading tasks\u2026"),pl()());}function fe(n,t){if(n&1){let e=lC();ws(0,"p"),GC(1,"No tasks yet. Start your first one!"),pl(),ws(2,"button",19),Rg("click",function(){If(e);let o=gC(2);return wf(o.createTask())}),ws(3,"mat-icon"),GC(4,"add"),pl(),GC(5," New Task "),pl();}}function he(n,t){n&1&&(ws(0,"p"),GC(1,"No tasks in this category."),pl());}function ke(n,t){if(n&1&&(ws(0,"div",13)(1,"mat-icon",18),GC(2,"rocket_launch"),pl(),Jw(3,fe,6,0)(4,he,2,0,"p"),pl()),n&2){let e=gC();XE(3),eC(e.activeFilter()==="all"?3:4);}}function ve(n,t){if(n&1){let e=lC();ws(0,"app-task-card",25),Rg("stopRequested",function(o){If(e);let i=gC(3);return wf(i.onStopRequested(o))})("deleteRequested",function(o){If(e);let i=gC(3);return wf(i.onDeleteRequested(o))})("starToggled",function(o){If(e);let i=gC(3);return wf(i.onStarToggled(o))})("markDoneRequested",function(o){If(e);let i=gC(3);return wf(i.onMarkDoneRequested(o))})("markActiveRequested",function(o){If(e);let i=gC(3);return wf(i.onMarkActiveRequested(o))}),pl();}if(n&2){let e=t.$implicit;bg("task",e);}}function Ce(n,t){if(n&1&&(ws(0,"section",20)(1,"h2",21)(2,"mat-icon",22),GC(3),pl(),GC(4),ws(5,"span",23),GC(6),pl()(),ws(7,"div",14),rC(8,ve,1,1,"app-task-card",24,le),pl()()),n&2){let e=t.$implicit;XE(3),Yg(e.icon),XE(),vl(" ",e.label," "),XE(2),Yg(e.tasks.length),XE(2),oC(e.tasks);}}function be(n,t){if(n&1&&rC(0,Ce,10,3,"section",20,de),n&2){let e=gC();oC(e.taskGroups());}}function ye(n,t){if(n&1){let e=lC();ws(0,"app-task-card",25),Rg("stopRequested",function(o){If(e);let i=gC(2);return wf(i.onStopRequested(o))})("deleteRequested",function(o){If(e);let i=gC(2);return wf(i.onDeleteRequested(o))})("starToggled",function(o){If(e);let i=gC(2);return wf(i.onStarToggled(o))})("markDoneRequested",function(o){If(e);let i=gC(2);return wf(i.onMarkDoneRequested(o))})("markActiveRequested",function(o){If(e);let i=gC(2);return wf(i.onMarkActiveRequested(o))}),pl();}if(n&2){let e=t.$implicit;bg("task",e);}}function xe(n,t){if(n&1&&(ws(0,"div",14),rC(1,ye,1,1,"app-task-card",24,le),pl()),n&2){let e=gC();XE(),oC(e.filteredTasks());}}var Te=[{key:"all",label:"All",icon:"grid_view"},{key:"waiting-you",label:"Waiting for you",icon:"mark_unread_chat_alt"},{key:"in-progress",label:"In progress",icon:"pending"},{key:"paused",label:"Paused",icon:"pause_circle"},{key:"done",label:"Done",icon:"check_circle"}],se=class n{router=g(G);projectState=g(P);threadState=g(U);threadApi=g(N);taskStatus=g(R);userService=g(pe$1);projectApi=g(c);destroyRef=g(Ce$1);_projectEventStream=g(F);filters=Te;activeFilter=Gi("all");starredOnly=Gi(false);isCreating=Gi(false);isLoadingList=F$1(this.threadState.isLoadingThreadList$,{initialValue:false});username=F$1(this.userService.username$,{initialValue:null});allTasks=this.taskStatus.tasks;filteredTasks=mT(()=>{let t=this.activeFilter(),e=this.username(),r=this.allTasks();return this.starredOnly()&&e&&(r=r.filter(o=>o.starring.includes(e))),t==="all"?r:r.filter(o=>o.status===t)});filterCounts=mT(()=>{let t=this.username(),e=this.allTasks();return this.starredOnly()&&t&&(e=e.filter(r=>r.starring.includes(t))),{all:e.length,"waiting-you":e.filter(r=>r.status==="waiting-you").length,"in-progress":e.filter(r=>r.status==="in-progress").length,paused:e.filter(r=>r.status==="paused").length,done:e.filter(r=>r.status==="done").length}});taskGroups=mT(()=>{let t=this.username(),e=this.allTasks();this.starredOnly()&&t&&(e=e.filter(o=>o.starring.includes(t)));let r=[{status:"waiting-you",label:"Waiting for you",icon:"mark_unread_chat_alt",tasks:[]},{status:"in-progress",label:"In progress",icon:"pending",tasks:[]},{status:"done",label:"Done",icon:"check_circle",tasks:[]},{status:"paused",label:"Paused",icon:"pause_circle",tasks:[]},{status:"error",label:"Error",icon:"error",tasks:[]}];for(let o of e){let i=r.find(m=>m.status===o.status);i&&i.tasks.push(o);}return r.filter(o=>o.tasks.length>0)});ngOnInit(){this.userService.fetchCurrentUser().pipe(U$1(this.destroyRef)).subscribe({error:t=>console.warn("[TASK-CONTROL] Could not fetch user:",t)});}setFilter(t){this.activeFilter.set(t);}toggleStarredFilter(){this.starredOnly.update(t=>!t);}createTask(){let t=this.projectState.getSelectedProjectId();!t||this.isCreating()||(this.isCreating.set(true),this.threadApi.createThread().pipe(U$1(this.destroyRef)).subscribe({next:e=>{this.isCreating.set(false),this.router.navigate(["project",t,"thread",e.thread.id]);},error:e=>{console.error("[TASK-CONTROL] Failed to create thread:",e),this.isCreating.set(false);}}));}onStopRequested(t){this.threadApi.stopThread(t).pipe(U$1(this.destroyRef)).subscribe({error:e=>console.error("[TASK-CONTROL] Failed to stop thread:",e)});}onDeleteRequested(t){this.threadApi.deleteThread(t).pipe(U$1(this.destroyRef)).subscribe({next:()=>this.threadState.refreshThreadList(),error:e=>console.error("[TASK-CONTROL] Failed to delete thread:",e)});}onStarToggled(t){let e=this.username();if(!e)return;let r=this.allTasks().find(m=>m.id===t);if(!r)return;let o=r.starring.includes(e),i=o?this.threadApi.unstarThread(t):this.threadApi.starThread(t);this.threadState.updateStarLocal(t,!o,e),i.pipe(U$1(this.destroyRef)).subscribe({error:m=>{console.error("[TASK-CONTROL] Failed to toggle star:",m),this.threadState.refreshThreadList();}});}onMarkDoneRequested(t){let e=this.projectState.getSelectedProjectId();e&&this.projectApi.markThreadDone(e,t).pipe(U$1(this.destroyRef)).subscribe({next:()=>this.threadState.refreshThreadList(),error:r=>console.error("[TASK-CONTROL] Failed to mark task as done:",r)});}onMarkActiveRequested(t){let e=this.projectState.getSelectedProjectId();e&&this.projectApi.markThreadActive(e,t).pipe(U$1(this.destroyRef)).subscribe({next:()=>this.threadState.refreshThreadList(),error:r=>console.error("[TASK-CONTROL] Failed to mark task as active:",r)});}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=xw({type:n,selectors:[["app-task-control"]],decls:25,vars:6,consts:[[1,"task-control"],[1,"tc-header"],[1,"tc-title-row"],[1,"tc-title"],[1,"title-icon"],["mat-flat-button","","aria-label","Start a new task",1,"new-task-btn",3,"click","disabled"],["diameter","16"],["role","tablist","aria-label","Filter tasks",1,"tc-filters"],["role","tab",1,"filter-chip",3,"active"],["role","switch","aria-label","Show starred tasks only",1,"filter-chip","starred-filter",3,"click"],[1,"filter-icon"],[1,"tc-grid-wrapper"],[1,"tc-loading"],[1,"tc-empty"],[1,"tc-grid"],["role","tab",1,"filter-chip",3,"click"],[1,"filter-badge"],["diameter","40"],[1,"empty-icon"],["mat-flat-button","",1,"new-task-btn",3,"click"],[1,"tc-group"],[1,"tc-group-title"],[1,"group-icon"],[1,"group-count"],[3,"task"],[3,"stopRequested","deleteRequested","starToggled","markDoneRequested","markActiveRequested","task"]],template:function(e,r){e&1&&(ws(0,"app-sidenav")(1,"div",0)(2,"header",1)(3,"div",2)(4,"h1",3)(5,"mat-icon",4),GC(6,"rocket_launch"),pl(),GC(7," Task Control "),pl(),ws(8,"button",5),Rg("click",function(){return r.createTask()}),Jw(9,pe,1,0,"mat-spinner",6)(10,me,2,0,"mat-icon"),GC(11," New Task "),pl()(),ws(12,"nav",7),rC(13,ge,6,6,"button",8,ce),ws(15,"button",9),Rg("click",function(){return r.toggleStarredFilter()}),ws(16,"mat-icon",10),GC(17,"star"),pl(),ws(18,"span"),GC(19,"Starred"),pl()()()(),ws(20,"main",11),Jw(21,_e,4,0,"div",12)(22,ke,5,1,"div",13)(23,be,2,0)(24,xe,3,0,"div",14),pl()()()),e&2&&(XE(8),bg("disabled",r.isCreating()),XE(),eC(r.isCreating()?9:10),XE(4),oC(r.filters),XE(2),Ug("active",r.starredOnly()),Tg("aria-checked",r.starredOnly()),XE(6),eC(r.isLoadingList()?21:r.filteredTasks().length===0?22:r.activeFilter()==="all"?23:24));},dependencies:[A,St,yt,wt,hr,pr,Et,yt$1],styles:[".glass-panel[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow)}.glass-interactive[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow);transition:all .3s cubic-bezier(.4,0,.2,1)}.glass-interactive[_ngcontent-%COMP%]:hover{transform:translateY(-2px);box-shadow:0 12px 40px #00000026}.glass-interactive[_ngcontent-%COMP%]:active{transform:translateY(0)}.glass-card[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow);border-radius:20px;padding:1.5rem}.glass-button[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow);transition:all .3s cubic-bezier(.4,0,.2,1)}.glass-button[_ngcontent-%COMP%]:hover{transform:translateY(-2px);box-shadow:0 12px 40px #00000026}.glass-button[_ngcontent-%COMP%]:active{transform:translateY(0)}.glass-button[_ngcontent-%COMP%]{border-radius:12px;padding:.75rem 1.5rem;font-weight:600;cursor:pointer}.glass-button[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed;transform:none}.glass-button[_ngcontent-%COMP%]:disabled:hover{transform:none}.smooth-theme-transition[_ngcontent-%COMP%]{transition:background .3s ease,color .3s ease,border-color .3s ease,box-shadow .3s ease}[_nghost-%COMP%]{display:flex;height:100vh;width:100%;overflow:hidden}.task-control[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;overflow:hidden;padding:1.5rem;gap:1.25rem;box-sizing:border-box}.tc-header[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1rem;flex-shrink:0}.tc-title-row[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:1rem}.tc-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;margin:0;font-size:1.5rem;font-weight:700;color:var(--color-text)}.tc-title[_ngcontent-%COMP%] .title-icon[_ngcontent-%COMP%]{font-size:1.5rem;width:1.5rem;height:1.5rem;color:var(--color-primary)}.new-task-btn[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.375rem;background:var(--color-primary);color:var(--color-text-inverse);border-radius:12px;font-weight:600;padding:0 1rem;height:36px;flex-shrink:0}.new-task-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:1.1rem;width:1.1rem;height:1.1rem}.new-task-btn[_ngcontent-%COMP%] mat-spinner[_ngcontent-%COMP%]{display:inline-block}.tc-filters[_ngcontent-%COMP%]{display:flex;gap:.5rem;flex-wrap:wrap}.filter-chip[_ngcontent-%COMP%]{background:var(--glass-bg);backdrop-filter:var(--glass-backdrop-blur);-webkit-backdrop-filter:var(--glass-backdrop-blur);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow);display:flex;align-items:center;gap:.375rem;padding:.375rem .875rem;border-radius:100px;font-size:.8rem;font-weight:500;color:var(--color-text-secondary);cursor:pointer;border:1px solid var(--color-border);transition:background .15s ease,color .15s ease,border-color .15s ease;white-space:nowrap}.filter-chip[_ngcontent-%COMP%] .filter-icon[_ngcontent-%COMP%]{font-size:.9rem;width:.9rem;height:.9rem}.filter-chip[_ngcontent-%COMP%] .filter-badge[_ngcontent-%COMP%]{background:var(--color-primary);color:var(--color-text-inverse);border-radius:100px;padding:0 .375rem;font-size:.7rem;font-weight:700;min-width:18px;text-align:center;line-height:18px}.filter-chip.active[_ngcontent-%COMP%]{background:var(--color-primary);color:var(--color-text-inverse);border-color:var(--color-primary)}.filter-chip.active[_ngcontent-%COMP%] .filter-icon[_ngcontent-%COMP%]{color:var(--color-text-inverse)}.filter-chip.active[_ngcontent-%COMP%] .filter-badge[_ngcontent-%COMP%]{background:#ffffff4d;color:var(--color-text-inverse)}.filter-chip[_ngcontent-%COMP%]:hover:not(.active){background:var(--color-bg-hover);color:var(--color-text)}.starred-filter.active[_ngcontent-%COMP%]{background:#f5a62326;border-color:#f5a623;color:#f5a623}.starred-filter.active[_ngcontent-%COMP%] .filter-icon[_ngcontent-%COMP%]{color:#f5a623}.tc-group[_ngcontent-%COMP%]{margin-bottom:1.5rem}.tc-group[_ngcontent-%COMP%]:last-child{margin-bottom:0}.tc-group-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;margin:0 0 .75rem;font-size:.85rem;font-weight:600;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.05em}.tc-group-title[_ngcontent-%COMP%] .group-icon[_ngcontent-%COMP%]{font-size:1rem;width:1rem;height:1rem}.tc-group-title[_ngcontent-%COMP%] .group-count[_ngcontent-%COMP%]{background:var(--color-bg-hover);border-radius:100px;padding:0 .375rem;font-size:.75rem;font-weight:700;min-width:18px;text-align:center;line-height:18px}.tc-grid-wrapper[_ngcontent-%COMP%]{flex:1;overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--color-border) transparent}.tc-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1rem;padding-bottom:1rem}@media(max-width:600px){.tc-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}}.tc-loading[_ngcontent-%COMP%], .tc-empty[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem;height:100%;min-height:240px;color:var(--color-text-secondary);text-align:center}.tc-loading[_ngcontent-%COMP%] p[_ngcontent-%COMP%], .tc-empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:.95rem}.empty-icon[_ngcontent-%COMP%]{font-size:3rem;width:3rem;height:3rem;opacity:.3}"]})};export{se as TaskControlComponent};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import {K as Kn,Z as Zn,S as Se}from'./chunk-
|
|
1
|
+
import {K as Kn,Z as Zn,S as Se}from'./chunk-CGjjc55P.js';import {cb as ZB,cc as qB,a as Gi,m as mT,e as xw,k as ws,n as GC,o as pl,J as Jw,X as XE,a8 as Yg,y as eC,ac as gC,T as Tg,a5 as vl,a9 as lC,q as Rg,v as bg,aa as If,ab as wf}from'./main-GYSPY3UE.js';function I(t,d){if(t&1&&(ws(0,"span",4),GC(1),pl()),t&2){let e=gC();Tg("data-variant",e.badge().variant)("aria-label",e.badge().ariaLabel),XE(),vl(" ",e.badge().label," ");}}function E(t,d){if(t&1&&(ws(0,"span",6),GC(1),pl()),t&2){let e=gC();XE(),Yg(e.config().baseUrl);}}function R(t,d){if(t&1){let e=lC();ws(0,"span",8),GC(1,"Delete?"),pl(),ws(2,"ds-icon-button",9),Rg("action",function(){If(e);let l=gC();return wf(l.onDeleteConfirmed())}),pl(),ws(3,"ds-icon-button",10),Rg("action",function(){If(e);let l=gC();return wf(l.onDeleteCancelled())}),pl();}}function k(t,d){if(t&1){let e=lC();ws(0,"ds-kebab-menu",13),Rg("itemSelected",function(l){If(e);let A=gC(2);return wf(A.onMenuAction(l))}),pl();}if(t&2){let e=gC(2);bg("items",e.menuItems());}}function q(t,d){if(t&1){let e=lC();ws(0,"ds-icon-button",11),Rg("action",function(){If(e);let l=gC();return wf(l.onDuplicate())}),pl(),Jw(1,k,1,1,"ds-kebab-menu",12);}if(t&2){let e=gC();XE(),eC(e.readOnly()?-1:1);}}var B=Object.freeze({platform:{label:"PLATFORM",ariaLabel:"Configuration de niveau plateforme (lecture seule)",variant:"neutral"},namespace:{label:"NS",ariaLabel:"Configuration partag\xE9e du namespace",variant:"neutral"},userOnNs:{label:"USER \xD7 NS",ariaLabel:"Configuration utilisateur sur ce namespace",variant:"info"},userGlobal:{label:"USER GLOBAL",ariaLabel:"Configuration utilisateur globale",variant:"warning"}}),S=class t{config=ZB.required();scope=ZB.required();readOnly=ZB(false);showBadge=ZB(true);editRequested=qB();deleteRequested=qB();duplicateRequested=qB();pendingDelete=Gi(false);badge=mT(()=>B[this.scope()]);menuItems=mT(()=>[{key:"edit",label:"Edit provider",icon:"edit"},{key:"delete",label:"Delete provider",icon:"delete",variant:"danger"}]);onMenuAction(d){switch(d){case "edit":this.editRequested.emit(this.config());break;case "delete":this.pendingDelete.set(true);break}}onDuplicate(){this.duplicateRequested.emit(this.config());}onDeleteConfirmed(){this.pendingDelete.set(false),this.deleteRequested.emit(this.config());}onDeleteCancelled(){this.pendingDelete.set(false);}static \u0275fac=function(e){return new(e||t)};static \u0275cmp=xw({type:t,selectors:[["agentos-ai-provider-item"]],inputs:{config:[1,"config"],scope:[1,"scope"],readOnly:[1,"readOnly"],showBadge:[1,"showBadge"]},outputs:{editRequested:"editRequested",deleteRequested:"deleteRequested",duplicateRequested:"duplicateRequested"},decls:12,vars:5,consts:[["role","listitem","dsBlueprint","",1,"ai-provider-item"],[1,"ai-provider-item__body"],[1,"ai-provider-item__heading"],[1,"ai-provider-item__name"],[1,"ai-provider-item__badge"],[1,"ai-provider-item__type"],[1,"ai-provider-item__url"],[1,"ai-provider-item__actions"],[1,"ai-provider-item__confirm-label"],["icon","check","variant","danger","title","Confirm deletion",3,"action"],["icon","close","title","Cancel deletion",3,"action"],["icon","content_copy","title","Duplicate this provider",3,"action"],[3,"items"],[3,"itemSelected","items"]],template:function(e,o){e&1&&(ws(0,"div",0)(1,"div",1)(2,"div",2)(3,"span",3),GC(4),pl(),Jw(5,I,2,3,"span",4),pl(),ws(6,"span",5),GC(7),pl(),Jw(8,E,2,1,"span",6),pl(),ws(9,"div",7),Jw(10,R,4,0)(11,q,2,1),pl()()),e&2&&(XE(4),Yg(o.config().name),XE(),eC(o.showBadge()?5:-1),XE(2),Yg(o.config().apiType),XE(),eC(o.config().baseUrl?8:-1),XE(2),eC(o.pendingDelete()?10:11));},dependencies:[Kn,Zn,Se],styles:[".ai-provider-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:14px 16px;position:relative;border-radius:0;border:1px solid var(--color-divider);background:var(--color-bg);box-shadow:var(--shadow-sm);overflow:visible;transition:border-color .15s ease}.ai-provider-item[_ngcontent-%COMP%]:hover{border-color:var(--color-accent)}.ai-provider-item__body[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;gap:.2rem;min-width:0}.ai-provider-item__heading[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;min-width:0}.ai-provider-item__name[_ngcontent-%COMP%]{font-size:15px;font-weight:600;color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.ai-provider-item__badge[_ngcontent-%COMP%]{flex-shrink:0;font-family:var(--font-heading);font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;border-radius:0;padding:.1rem .4rem;line-height:1.2;white-space:nowrap}.ai-provider-item__badge[data-variant=neutral][_ngcontent-%COMP%]{border:1px solid var(--color-divider);color:var(--color-neutral-600);background:transparent}.ai-provider-item__badge[data-variant=info][_ngcontent-%COMP%]{border:1px solid color-mix(in srgb,var(--color-info) 40%,transparent);color:var(--color-info);background:color-mix(in srgb,var(--color-info) 10%,transparent)}.ai-provider-item__badge[data-variant=warning][_ngcontent-%COMP%]{border:1px solid color-mix(in srgb,var(--color-warning) 40%,transparent);color:var(--color-warning);background:color-mix(in srgb,var(--color-warning) 10%,transparent)}.ai-provider-item__type[_ngcontent-%COMP%], .ai-provider-item__url[_ngcontent-%COMP%]{font-size:13px;color:var(--color-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ai-provider-item__actions[_ngcontent-%COMP%]{flex-shrink:0;display:flex;align-items:center;gap:.125rem;opacity:0;transition:opacity .15s ease}.ai-provider-item[_ngcontent-%COMP%]:hover .ai-provider-item__actions[_ngcontent-%COMP%], .ai-provider-item[_ngcontent-%COMP%]:focus-within .ai-provider-item__actions[_ngcontent-%COMP%]{opacity:1}.ai-provider-item__confirm-label[_ngcontent-%COMP%]{font-family:var(--font-heading);font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--red-deep);margin-right:.25rem;white-space:nowrap}"]})};export{S};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {O}from'./chunk-amKg4vsy.js';import {R}from'./chunk-qnkDdlfN.js';import {N}from'./chunk-2e1XJLC3.js';import {g,G,bm as Mm,C as Ce$1,a as Gi,m as mT,F,aD as Ly,r as re,b as U,e as xw,k as ws,q as Rg,o as pl,n as GC,J as Jw,X as XE,y as eC,t as rC,ac as gC,z as oC,a9 as lC,A as Ug,T as Tg,a8 as Yg,a5 as vl,S as Sg,a3 as VI,v as bg,a6 as UI,aa as If,ab as wf,cH as Kw}from'./main-COD2LZKB.js';import {l,I,f}from'./chunk-BvidtKG2.js';import {S as Se$1}from'./chunk-D1wn67qT.js';import'./chunk-CaZu6-ik.js';import {o as z,k as _t,n as ni,J as Jn,Q as Qn,e as ei,Y as Ye,A as At,Z as Zn,l as Xn,E as En,p as An}from'./chunk-Bb0cfZpR.js';import'./chunk-JXiqGD2F.js';import'./chunk-KJgXoqSt.js';var D=(r,i)=>i.value;function se(r,i){r&1&&(ws(0,"p",4),GC(1,"Loading\u2026"),pl());}function de(r,i){if(r&1){let e=lC();ws(0,"button",18),Rg("click",function(){let d=If(e).$implicit,_=gC(2);return wf(_.setThemeVariant(d.value))}),ws(1,"span",19),GC(2),pl(),ws(3,"span",20),GC(4),pl()();}if(r&2){let e=i.$implicit,a=gC(2);Ug("user-profile__theme-variant--active",a.themeVariant()===e.value),Tg("aria-pressed",a.themeVariant()===e.value),XE(2),Yg(e.label),XE(2),Yg(e.description);}}function _e(r,i){if(r&1){let e=lC();ws(0,"button",21),Rg("click",function(){let d=If(e).$implicit,_=gC(2);return wf(_.setTheme(d.value))}),GC(1),pl();}if(r&2){let e=i.$implicit,a=gC(2);Ug("user-profile__segmented-option--active",a.themeMode()===e.value),Tg("aria-pressed",a.themeMode()===e.value),XE(),vl(" ",e.label," ");}}function ce(r,i){if(r&1){let e=lC();ws(0,"button",21),Rg("click",function(){let d=If(e).$implicit,_=gC(2);return wf(_.setEnterKeyBehavior(d.value))}),GC(1),pl();}if(r&2){let e=i.$implicit,a=gC(2);Ug("user-profile__segmented-option--active",a.enterKeyBehavior()===e.value),Tg("aria-pressed",a.enterKeyBehavior()===e.value),XE(),vl(" ",e.label," ");}}function pe(r,i){if(r&1&&(ws(0,"option",32),GC(1),pl()),r&2){let e=i.$implicit;bg("value",e.value),XE(),Yg(e.label);}}function me(r,i){if(r&1){let e=lC();ws(0,"form",22),Rg("ngSubmit",function(){If(e);let d=gC(2);return wf(d.save())}),ws(1,"div",5)(2,"h2",6),GC(3,"Identity"),pl(),ws(4,"div",7)(5,"span",8),GC(6,"Email"),pl(),ws(7,"span",23),GC(8),pl()(),ws(9,"div",7)(10,"span",8),GC(11,"External ID"),pl(),ws(12,"span",23),GC(13),pl()()(),ws(14,"div",5)(15,"h2",6),GC(16,"Profile"),pl(),ws(17,"div",7)(18,"label",24),GC(19,"First name"),pl(),Sg(20,"input",25),VI(),pl(),ws(21,"div",7)(22,"label",26),GC(23,"Last name"),pl(),Sg(24,"input",27),VI(),pl(),ws(25,"div",7)(26,"label",28),GC(27,"Bio"),pl(),Sg(28,"textarea",29),VI(),pl(),ws(29,"div",7)(30,"label",30),GC(31,"Language"),pl(),ws(32,"select",31),rC(33,pe,2,2,"option",32,D),pl(),VI(),pl()(),ws(35,"div",33)(36,"button",34),GC(37),pl(),ws(38,"button",35),Rg("click",function(){If(e);let d=gC(2);return wf(d.cancelEditing())}),GC(39,"Cancel"),pl()()();}if(r&2){let e=gC(),a=gC();bg("formGroup",a.form),XE(8),Yg(e.email),XE(5),Yg(e.externalId),XE(7),UI(),XE(4),UI(),XE(4),UI(),XE(4),UI(),XE(),oC(a.languageOptions),XE(3),bg("disabled",a.isSaving()),XE(),vl(" ",a.isSaving()?"Saving\u2026":"Save changes"," ");}}function ue(r,i){r&1&&(ws(0,"p",43),GC(1," No global configuration yet. Create one from the Integrations / AI Providers / Auth Settings pages of your namespaces. "),pl());}function fe(r,i){if(r&1){let e=lC();ws(0,"span",50),GC(1,"Delete?"),pl(),ws(2,"button",51),Rg("click",function(){If(e);let d=gC().$implicit,_=gC(6);return wf(_.confirmDelete(d))}),GC(3," Confirm "),pl(),ws(4,"button",52),Rg("click",function(){If(e);let d=gC(7);return wf(d.cancelDelete())}),GC(5," Cancel "),pl();}}function ge(r,i){if(r&1){let e=lC();ws(0,"button",52),Rg("click",function(){If(e);let d=gC().$implicit,_=gC(6);return wf(_.armDelete(d))}),GC(1," Delete "),pl();}}function Ce(r,i){if(r&1&&(ws(0,"li",46)(1,"span",47),GC(2),pl(),ws(3,"span",48),GC(4),pl(),Jw(5,fe,6,0)(6,ge,2,0,"button",49),pl()),r&2){let e=i.$implicit,a=gC(6);XE(2),Yg(e.name),XE(2),Yg(e.subtitle),XE(),eC(a.isPendingDelete(e)?5:6);}}function ve(r,i){if(r&1&&(ws(0,"h3",44),GC(1,"Integrations"),pl(),ws(2,"ul",45),rC(3,Ce,7,3,"li",46,Kw().trackEntry,true),pl()),r&2){let e=gC(5);XE(3),oC(e.recap().integrations);}}function xe(r,i){if(r&1){let e=lC();ws(0,"span",50),GC(1,"Delete?"),pl(),ws(2,"button",51),Rg("click",function(){If(e);let d=gC().$implicit,_=gC(6);return wf(_.confirmDelete(d))}),GC(3," Confirm "),pl(),ws(4,"button",52),Rg("click",function(){If(e);let d=gC(7);return wf(d.cancelDelete())}),GC(5," Cancel "),pl();}}function be(r,i){if(r&1){let e=lC();ws(0,"button",52),Rg("click",function(){If(e);let d=gC().$implicit,_=gC(6);return wf(_.armDelete(d))}),GC(1," Delete "),pl();}}function ye(r,i){if(r&1&&(ws(0,"li",46)(1,"span",47),GC(2),pl(),ws(3,"span",48),GC(4),pl(),Jw(5,xe,6,0)(6,be,2,0,"button",49),pl()),r&2){let e=i.$implicit,a=gC(6);XE(2),Yg(e.name),XE(2),Yg(e.subtitle),XE(),eC(a.isPendingDelete(e)?5:6);}}function he(r,i){if(r&1&&(ws(0,"h3",44),GC(1,"AI Providers"),pl(),ws(2,"ul",45),rC(3,ye,7,3,"li",46,Kw().trackEntry,true),pl()),r&2){let e=gC(5);XE(3),oC(e.recap().aiProviders);}}function Ee(r,i){if(r&1){let e=lC();ws(0,"span",50),GC(1,"Delete?"),pl(),ws(2,"button",51),Rg("click",function(){If(e);let d=gC().$implicit,_=gC(6);return wf(_.confirmDelete(d))}),GC(3," Confirm "),pl(),ws(4,"button",52),Rg("click",function(){If(e);let d=gC(7);return wf(d.cancelDelete())}),GC(5," Cancel "),pl();}}function Pe(r,i){if(r&1){let e=lC();ws(0,"button",52),Rg("click",function(){If(e);let d=gC().$implicit,_=gC(6);return wf(_.armDelete(d))}),GC(1," Delete "),pl();}}function Se(r,i){if(r&1&&(ws(0,"li",46)(1,"span",47),GC(2),pl(),ws(3,"span",48),GC(4),pl(),Jw(5,Ee,6,0)(6,Pe,2,0,"button",49),pl()),r&2){let e=i.$implicit,a=gC(6);XE(2),Yg(e.name),XE(2),Yg(e.subtitle),XE(),eC(a.isPendingDelete(e)?5:6);}}function we(r,i){if(r&1&&(ws(0,"h3",44),GC(1,"My global auth settings"),pl(),ws(2,"ul",45),rC(3,Se,7,3,"li",46,Kw().trackEntry,true),pl()),r&2){let e=gC(5);XE(3),oC(e.recap().authSettings);}}function ke(r,i){if(r&1&&(Jw(0,ve,5,0),Jw(1,he,5,0),Jw(2,we,5,0)),r&2){let e=gC(4);eC(e.recap().integrations.length>0?0:-1),XE(),eC(e.recap().aiProviders.length>0?1:-1),XE(),eC(e.recap().authSettings.length>0?2:-1);}}function Me(r,i){if(r&1&&Jw(0,ue,2,0,"p",43)(1,ke,3,3),r&2){let e=gC(3);eC(e.recap().total===0?0:1);}}function Oe(r,i){if(r&1){let e=lC();ws(0,"div",17)(1,"div",5)(2,"h2",6),GC(3,"Identity"),pl(),ws(4,"div",7)(5,"span",8),GC(6,"Email"),pl(),ws(7,"span",36),GC(8),pl()(),ws(9,"div",7)(10,"span",8),GC(11,"External ID"),pl(),ws(12,"span",36),GC(13),pl()()(),ws(14,"div",5)(15,"h2",6),GC(16,"Profile"),pl(),ws(17,"div",7)(18,"span",8),GC(19,"First name"),pl(),ws(20,"span",36),GC(21),pl()(),ws(22,"div",7)(23,"span",8),GC(24,"Last name"),pl(),ws(25,"span",36),GC(26),pl()(),ws(27,"div",37)(28,"span",8),GC(29,"Bio"),pl(),ws(30,"span",36),GC(31),pl()(),ws(32,"div",7)(33,"span",8),GC(34,"Language"),pl(),ws(35,"span",36),GC(36),pl()()(),ws(37,"div",33)(38,"button",38),Rg("click",function(){If(e);let d=gC(2);return wf(d.startEditing())}),GC(39," Edit profile "),pl()(),ws(40,"div",39)(41,"button",40),Rg("click",function(){If(e);let d=gC(2);return wf(d.toggleOverrides())}),ws(42,"span",41),GC(43,"\u25B6"),pl(),GC(44," My global user configurations "),ws(45,"span",42),GC(46),pl()(),Jw(47,Me,2,1),pl()();}if(r&2){let e=gC(),a=gC();XE(8),Yg(e.email),XE(5),Yg(e.externalId),XE(8),Yg(e.firstname||"\u2014"),XE(5),Yg(e.lastname||"\u2014"),XE(5),Yg(e.bio||"\u2014"),XE(5),Yg(e.preferredLanguage||"\u2014"),XE(5),Tg("aria-expanded",a.isOverridesExpanded()),XE(),Ug("user-profile__overrides-arrow--open",a.isOverridesExpanded()),XE(4),vl("(",a.recap().total,")"),XE(),eC(a.isOverridesExpanded()?47:-1);}}function Ue(r,i){if(r&1&&(ws(0,"div",5)(1,"h2",6),GC(2,"Appearance"),pl(),ws(3,"div",7)(4,"span",8),GC(5,"Skin"),pl(),ws(6,"div",9),rC(7,de,5,5,"button",10,D),pl()(),ws(9,"div",7)(10,"span",8),GC(11,"Mode"),pl(),ws(12,"div",11),rC(13,_e,2,4,"button",12,D),pl()()(),ws(15,"div",5)(16,"h2",6),GC(17,"Composer"),pl(),ws(18,"div",7)(19,"span",8),GC(20,"Enter key"),pl(),ws(21,"div",13)(22,"div",14),rC(23,ce,2,4,"button",12,D),pl(),ws(25,"p",15),GC(26,'In "New line" mode, press Ctrl or Cmd + Enter to send.'),pl()()()(),Jw(27,me,40,5,"form",16)(28,Oe,48,11,"div",17)),r&2){let e=gC();XE(7),oC(e.themeVariantOptions),XE(6),oC(e.themeOptions),XE(10),oC(e.enterKeyOptions),XE(4),eC(e.isEditing()?27:28);}}function Te(r,i){r&1&&(ws(0,"p",4),GC(1,"Unable to load profile."),pl());}var le=class r{userState=g(l);router=g(G);location=g(Mm);destroyRef=g(Ce$1);integrationState=g(N);providerState=g(O);authSettingState=g(R);themePort=g(I);preferencesPort=g(f);isEditing=Gi(false);isLoading=Gi(false);isSaving=Gi(false);isOverridesExpanded=Gi(false);currentUser=this.userState.currentUser;theme=this.themePort.theme;themeMode=mT(()=>this.themePort.theme().mode);themeOptions=[{value:"light",label:"Light"},{value:"dark",label:"Dark"},{value:"system",label:"System"}];themeVariant=mT(()=>this.themePort.theme().variant);themeVariantOptions=[{value:"industry",label:"Industry",description:"Bleu acier, Barlow"},{value:"terminal",label:"Terminal",description:"Ambre CRT, JetBrains Mono"}];enterKeyBehavior=this.preferencesPort.enterKeyBehavior;enterKeyOptions=[{value:"send",label:"Send"},{value:"newline",label:"New line"}];languageOptions=[{value:"",label:"No preference (English fallback)"},{value:"fr",label:"French"},{value:"de",label:"German"},{value:"es",label:"Spanish"},{value:"pt",label:"Portuguese"},{value:"it",label:"Italian"},{value:"nl",label:"Dutch"},{value:"pl",label:"Polish"},{value:"ja",label:"Japanese"},{value:"zh",label:"Chinese"}];form=new z({firstname:new _t("",{nonNullable:true}),lastname:new _t("",{nonNullable:true}),bio:new _t("",{nonNullable:true}),preferredLanguage:new _t("",{nonNullable:true})});recap=F(Ly([this.integrationState.userGlobal$,this.providerState.userGlobal$,this.authSettingState.userGlobal$]).pipe(re(([i,e,a])=>{let d=i.map(g=>({category:"integration",id:g.id??"",name:g.name,subtitle:g.integrationType})),_=e.map(g=>({category:"aiProvider",id:g.id??"",name:g.name,subtitle:g.apiType})),I=a.map(g=>({category:"authSetting",id:g.id??"",name:g.name,subtitle:g.authType}));return {integrations:d,aiProviders:_,authSettings:I,total:d.length+_.length+I.length}})),{initialValue:{integrations:[],aiProviders:[],authSettings:[],total:0}});ngOnInit(){if(this.currentUser()){this.syncFormFromState();return}this.isLoading.set(true),this.userState.loadMe().pipe(U(this.destroyRef)).subscribe({next:()=>{this.syncFormFromState(),this.isLoading.set(false);},error:()=>this.isLoading.set(false)});}startEditing(){this.syncFormFromState(),this.isEditing.set(true);}cancelEditing(){this.isEditing.set(false);}setTheme(i){this.themePort.setTheme({variant:this.themePort.theme().variant,mode:i});}setThemeVariant(i){this.themePort.setTheme({variant:i,mode:this.themePort.theme().mode});}setEnterKeyBehavior(i){this.preferencesPort.setEnterKeyBehavior(i);}save(){if(this.isSaving())return;this.isSaving.set(true);let i=this.form.controls.preferredLanguage.value.trim();this.userState.updateMe({firstname:this.form.controls.firstname.value.trim()||void 0,lastname:this.form.controls.lastname.value.trim()||void 0,bio:this.form.controls.bio.value.trim()||void 0,preferredLanguage:i||void 0}).pipe(U(this.destroyRef)).subscribe({next:()=>{this.isSaving.set(false),this.isEditing.set(false);},error:()=>this.isSaving.set(false)});}toggleOverrides(){this.isOverridesExpanded.update(i=>!i),this.pendingDeleteKey.set(null);}pendingDeleteKey=Gi(null);isPendingDelete(i){return this.pendingDeleteKey()===this.entryKey(i)}armDelete(i){i.id&&this.pendingDeleteKey.set(this.entryKey(i));}cancelDelete(){this.pendingDeleteKey.set(null);}confirmDelete(i){if(!i.id)return;this.pendingDeleteKey.set(null),(i.category==="integration"?this.integrationState.delete(i.id,"userGlobal"):i.category==="authSetting"?this.authSettingState.delete(i.id,"userGlobal"):this.providerState.delete(i.id,"userGlobal")).pipe(U(this.destroyRef)).subscribe({error:a=>{console.error(`[UserProfile] Delete failed for ${i.category}:${i.id}:`,a);}});}entryKey(i){return `${i.category}:${i.id}`}goBack(){window.history.length>1?this.location.back():this.router.navigate(["/agentos"]);}trackEntry(i,e){return this.entryKey(e)}syncFormFromState(){let i=this.currentUser();i&&this.form.setValue({firstname:i.firstname??"",lastname:i.lastname??"",bio:i.bio??"",preferredLanguage:i.preferredLanguage??""});}static \u0275fac=function(e){return new(e||r)};static \u0275cmp=xw({type:r,selectors:[["agentos-user-profile"]],decls:8,vars:1,consts:[[1,"user-profile"],[1,"user-profile__header"],["icon","arrow_back","title","Back",3,"action"],[1,"user-profile__title"],[1,"user-profile__loading"],[1,"user-profile__section"],[1,"user-profile__section-title"],[1,"user-profile__field"],[1,"user-profile__label"],[1,"user-profile__theme-variants"],["type","button",1,"user-profile__theme-variant",3,"user-profile__theme-variant--active"],["role","group","aria-label","Color mode",1,"user-profile__segmented"],["type","button",1,"user-profile__segmented-option",3,"user-profile__segmented-option--active"],[1,"user-profile__field-control"],["role","group","aria-label","Enter key behavior",1,"user-profile__segmented"],[1,"user-profile__hint"],[1,"user-profile__form",3,"formGroup"],[1,"user-profile__view"],["type","button",1,"user-profile__theme-variant",3,"click"],[1,"user-profile__theme-variant-name"],[1,"user-profile__theme-variant-desc"],["type","button",1,"user-profile__segmented-option",3,"click"],[1,"user-profile__form",3,"ngSubmit","formGroup"],[1,"user-profile__value","user-profile__value--readonly"],["for","up-firstname",1,"user-profile__label"],["id","up-firstname","type","text","placeholder","Your first name","formControlName","firstname","autocomplete","given-name",1,"user-profile__input"],["for","up-lastname",1,"user-profile__label"],["id","up-lastname","type","text","placeholder","Your last name","formControlName","lastname","autocomplete","family-name",1,"user-profile__input"],["for","up-bio",1,"user-profile__label"],["id","up-bio","placeholder","A short description about yourself","formControlName","bio","rows","4",1,"user-profile__input","user-profile__input--textarea"],["for","up-preferredLanguage",1,"user-profile__label"],["id","up-preferredLanguage","formControlName","preferredLanguage",1,"user-profile__input","user-profile__select"],[3,"value"],[1,"user-profile__actions"],["type","submit",1,"user-profile__btn","user-profile__btn--primary",3,"disabled"],["type","button",1,"user-profile__btn",3,"click"],[1,"user-profile__value"],[1,"user-profile__field","user-profile__field--bio"],["type","button",1,"user-profile__btn","user-profile__btn--primary",3,"click"],[1,"user-profile__overrides"],["type","button",1,"user-profile__overrides-toggle",3,"click"],[1,"user-profile__overrides-arrow"],[1,"user-profile__overrides-count"],[1,"user-profile__overrides-empty"],[1,"user-profile__overrides-subtitle"],[1,"user-profile__overrides-list"],[1,"user-profile__overrides-row"],[1,"user-profile__overrides-name"],[1,"user-profile__overrides-subtitle-text"],["type","button",1,"user-profile__overrides-delete"],[1,"user-profile__overrides-confirm-label"],["type","button",1,"user-profile__overrides-delete","user-profile__overrides-delete--confirm",3,"click"],["type","button",1,"user-profile__overrides-delete",3,"click"]],template:function(e,a){if(e&1&&(ws(0,"div",0)(1,"header",1)(2,"ds-icon-button",2),Rg("action",function(){return a.goBack()}),pl(),ws(3,"h1",3),GC(4,"My profile"),pl()(),Jw(5,se,2,0,"p",4)(6,Ue,29,1)(7,Te,2,0,"p",4),pl()),e&2){let d;XE(5),eC(a.isLoading()?5:(d=a.currentUser())?6:7,d);}},dependencies:[ni,Jn,Qn,ei,Ye,At,Zn,Xn,En,An,Se$1],styles:[`.user-profile[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2rem;max-width:560px;margin:0 auto;padding:2rem 1rem}.user-profile__header[_ngcontent-%COMP%]{display:flex;flex-direction:row;align-items:center;gap:.5rem}.user-profile__back[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.375rem;background:none;border:none;padding:0;cursor:pointer;font-size:.875rem;color:var(--color-accent)}.user-profile__back[_ngcontent-%COMP%]:hover{text-decoration:underline}.user-profile__back-icon[_ngcontent-%COMP%]{font-size:1rem;line-height:1}.user-profile__title[_ngcontent-%COMP%]{margin:0;font-size:1.5rem;font-weight:700;color:var(--color-text);letter-spacing:-.02em}.user-profile__loading[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:.9rem;margin:0}.user-profile__view[_ngcontent-%COMP%], .user-profile__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2rem}.user-profile__section[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1rem}.user-profile__section-title[_ngcontent-%COMP%]{margin:0;font-family:var(--font-heading);font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.12em;color:var(--color-neutral-500);border-bottom:1px solid var(--color-divider);padding-bottom:.5rem}.user-profile__field[_ngcontent-%COMP%]{display:grid;grid-template-columns:140px 1fr;align-items:baseline;gap:.75rem}.user-profile__field--bio[_ngcontent-%COMP%]{align-items:start}.user-profile__label[_ngcontent-%COMP%]{font-size:.875rem;font-weight:500;color:var(--color-text-secondary);white-space:nowrap}.user-profile__value[_ngcontent-%COMP%]{font-size:.9375rem;color:var(--color-text);word-break:break-word;white-space:pre-wrap}.user-profile__value--readonly[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:.875rem}.user-profile__segmented[_ngcontent-%COMP%]{display:inline-flex;justify-self:start;border:1px solid var(--color-divider);overflow:hidden}.user-profile__segmented-option[_ngcontent-%COMP%]{padding:.4rem .85rem;background:transparent;border:none;border-right:1px solid var(--color-divider);color:var(--color-text-secondary);font-size:.875rem;cursor:pointer;transition:background .15s ease,color .15s ease}.user-profile__segmented-option[_ngcontent-%COMP%]:last-child{border-right:none}.user-profile__segmented-option[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover)}.user-profile__segmented-option--active[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff}.user-profile__segmented-option--active[_ngcontent-%COMP%]:hover{background:var(--color-accent-700)}.user-profile__field-control[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:flex-start;gap:.4rem}.user-profile__hint[_ngcontent-%COMP%]{margin:0;font-size:.8rem;color:var(--color-text-secondary)}.user-profile__select[_ngcontent-%COMP%]{appearance:none;cursor:pointer;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%236e6e73' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .75rem center;padding-right:2.25rem}.user-profile__input[_ngcontent-%COMP%]{width:100%;padding:.625rem .875rem;border:1px solid var(--color-divider);background:var(--color-surface);color:var(--color-text);font-size:.9375rem;font-family:inherit;outline:none;box-sizing:border-box;border-radius:0;transition:border-color .15s ease;resize:none}.user-profile__input[_ngcontent-%COMP%]:focus{border-color:var(--color-accent)}.user-profile__input[_ngcontent-%COMP%]::placeholder{color:var(--color-neutral-500)}.user-profile__input--textarea[_ngcontent-%COMP%]{line-height:1.5;resize:vertical}.user-profile__actions[_ngcontent-%COMP%]{display:flex;gap:.75rem;padding-top:.5rem}.user-profile__btn[_ngcontent-%COMP%]{padding:.6rem 1.25rem;border:1px solid var(--color-divider);background:transparent;color:var(--color-text);font-size:13px;font-family:var(--font-heading);font-weight:600;cursor:pointer;border-radius:0;transition:background .15s ease,border-color .15s ease}.user-profile__btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-bg-hover);border-color:var(--color-neutral-500)}.user-profile__btn[_ngcontent-%COMP%]:disabled{opacity:.45;cursor:not-allowed}.user-profile__btn--primary[_ngcontent-%COMP%]{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.user-profile__btn--primary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-700);border-color:var(--color-accent-700)}.user-profile__theme-variants[_ngcontent-%COMP%]{display:flex;gap:8px;justify-self:start}.user-profile__theme-variant[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:flex-start;gap:3px;padding:10px 16px;border:1px solid var(--color-divider);background:transparent;cursor:pointer;min-width:120px;transition:background .12s,border-color .12s}.user-profile__theme-variant[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover);border-color:var(--color-neutral-500)}.user-profile__theme-variant--active[_ngcontent-%COMP%]{border-color:var(--color-accent);background:color-mix(in srgb,var(--color-accent) 8%,transparent)}.user-profile__theme-variant-name[_ngcontent-%COMP%]{font-family:var(--font-heading);font-size:13px;font-weight:600;color:var(--color-text)}.user-profile__theme-variant-desc[_ngcontent-%COMP%]{font-size:11px;color:var(--color-text-secondary);font-family:var(--font-body)}.user-profile__overrides[_ngcontent-%COMP%]{margin-top:1rem;padding-top:1rem;border-top:1px solid var(--color-divider)}.user-profile__overrides-toggle[_ngcontent-%COMP%]{background:transparent;border:none;padding:.25rem 0;font-size:.85rem;color:var(--color-text-secondary);cursor:pointer;display:flex;align-items:center;gap:.4rem}.user-profile__overrides-toggle[_ngcontent-%COMP%]:hover{color:var(--color-text)}.user-profile__overrides-arrow[_ngcontent-%COMP%]{display:inline-block;font-size:.65rem;transition:transform .15s ease}.user-profile__overrides-arrow--open[_ngcontent-%COMP%]{transform:rotate(90deg)}.user-profile__overrides-count[_ngcontent-%COMP%]{color:var(--color-text-tertiary)}.user-profile__overrides-empty[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-secondary);font-style:italic;padding:.5rem 0 0;margin:0}.user-profile__overrides-subtitle[_ngcontent-%COMP%]{font-family:var(--font-heading);font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.12em;color:var(--color-neutral-500);margin:.75rem 0 .25rem}.user-profile__overrides-list[_ngcontent-%COMP%]{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.25rem}.user-profile__overrides-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:.4rem .5rem;font-size:.85rem;border-radius:0}.user-profile__overrides-row[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover)}.user-profile__overrides-name[_ngcontent-%COMP%]{flex:1;color:var(--color-text);font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.user-profile__overrides-subtitle-text[_ngcontent-%COMP%]{font-size:.75rem;color:var(--color-text-secondary);font-family:var(--font-heading)}.user-profile__overrides-confirm-label[_ngcontent-%COMP%]{font-size:11px;font-family:var(--font-heading);font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--red-deep);white-space:nowrap}.user-profile__overrides-delete[_ngcontent-%COMP%]{background:transparent;border:1px solid transparent;font-size:11px;font-family:var(--font-heading);font-weight:600;color:var(--color-neutral-500);cursor:pointer;padding:3px 8px;border-radius:0;transition:color .12s,background .12s,border-color .12s}.user-profile__overrides-delete[_ngcontent-%COMP%]:hover{color:var(--red);background:color-mix(in srgb,var(--red) 10%,transparent);border-color:var(--red)}.user-profile__overrides-delete--confirm[_ngcontent-%COMP%]{border-color:var(--red);background:var(--red);color:#fff}.user-profile__overrides-delete--confirm[_ngcontent-%COMP%]:hover{background:var(--red-deep);border-color:var(--red-deep)}`]})};
|
|
1
|
+
import {O}from'./chunk-DVK2B443.js';import {R}from'./chunk-DfHrtnxD.js';import {N}from'./chunk-BLltB5Fl.js';import {g,G,bm as Mm,C as Ce$1,a as Gi,m as mT,F,aD as Ly,r as re,b as U,e as xw,k as ws,q as Rg,o as pl,n as GC,J as Jw,X as XE,y as eC,t as rC,ac as gC,z as oC,a9 as lC,A as Ug,T as Tg,a8 as Yg,a5 as vl,S as Sg,a3 as VI,v as bg,a6 as UI,aa as If,ab as wf,cH as Kw}from'./main-GYSPY3UE.js';import {l,I,f}from'./chunk-DdPOtjZp.js';import {S as Se$1}from'./chunk-CGjjc55P.js';import'./chunk-CZe6uHRZ.js';import {o as z,k as _t,n as ni,J as Jn,Q as Qn,e as ei,Y as Ye,A as At,Z as Zn,l as Xn,E as En,p as An}from'./chunk-DS1gnXQd.js';import'./chunk-DOeIIw1a.js';import'./chunk-CXqNbVXr.js';var D=(r,i)=>i.value;function se(r,i){r&1&&(ws(0,"p",4),GC(1,"Loading\u2026"),pl());}function de(r,i){if(r&1){let e=lC();ws(0,"button",18),Rg("click",function(){let d=If(e).$implicit,_=gC(2);return wf(_.setThemeVariant(d.value))}),ws(1,"span",19),GC(2),pl(),ws(3,"span",20),GC(4),pl()();}if(r&2){let e=i.$implicit,a=gC(2);Ug("user-profile__theme-variant--active",a.themeVariant()===e.value),Tg("aria-pressed",a.themeVariant()===e.value),XE(2),Yg(e.label),XE(2),Yg(e.description);}}function _e(r,i){if(r&1){let e=lC();ws(0,"button",21),Rg("click",function(){let d=If(e).$implicit,_=gC(2);return wf(_.setTheme(d.value))}),GC(1),pl();}if(r&2){let e=i.$implicit,a=gC(2);Ug("user-profile__segmented-option--active",a.themeMode()===e.value),Tg("aria-pressed",a.themeMode()===e.value),XE(),vl(" ",e.label," ");}}function ce(r,i){if(r&1){let e=lC();ws(0,"button",21),Rg("click",function(){let d=If(e).$implicit,_=gC(2);return wf(_.setEnterKeyBehavior(d.value))}),GC(1),pl();}if(r&2){let e=i.$implicit,a=gC(2);Ug("user-profile__segmented-option--active",a.enterKeyBehavior()===e.value),Tg("aria-pressed",a.enterKeyBehavior()===e.value),XE(),vl(" ",e.label," ");}}function pe(r,i){if(r&1&&(ws(0,"option",32),GC(1),pl()),r&2){let e=i.$implicit;bg("value",e.value),XE(),Yg(e.label);}}function me(r,i){if(r&1){let e=lC();ws(0,"form",22),Rg("ngSubmit",function(){If(e);let d=gC(2);return wf(d.save())}),ws(1,"div",5)(2,"h2",6),GC(3,"Identity"),pl(),ws(4,"div",7)(5,"span",8),GC(6,"Email"),pl(),ws(7,"span",23),GC(8),pl()(),ws(9,"div",7)(10,"span",8),GC(11,"External ID"),pl(),ws(12,"span",23),GC(13),pl()()(),ws(14,"div",5)(15,"h2",6),GC(16,"Profile"),pl(),ws(17,"div",7)(18,"label",24),GC(19,"First name"),pl(),Sg(20,"input",25),VI(),pl(),ws(21,"div",7)(22,"label",26),GC(23,"Last name"),pl(),Sg(24,"input",27),VI(),pl(),ws(25,"div",7)(26,"label",28),GC(27,"Bio"),pl(),Sg(28,"textarea",29),VI(),pl(),ws(29,"div",7)(30,"label",30),GC(31,"Language"),pl(),ws(32,"select",31),rC(33,pe,2,2,"option",32,D),pl(),VI(),pl()(),ws(35,"div",33)(36,"button",34),GC(37),pl(),ws(38,"button",35),Rg("click",function(){If(e);let d=gC(2);return wf(d.cancelEditing())}),GC(39,"Cancel"),pl()()();}if(r&2){let e=gC(),a=gC();bg("formGroup",a.form),XE(8),Yg(e.email),XE(5),Yg(e.externalId),XE(7),UI(),XE(4),UI(),XE(4),UI(),XE(4),UI(),XE(),oC(a.languageOptions),XE(3),bg("disabled",a.isSaving()),XE(),vl(" ",a.isSaving()?"Saving\u2026":"Save changes"," ");}}function ue(r,i){r&1&&(ws(0,"p",43),GC(1," No global configuration yet. Create one from the Integrations / AI Providers / Auth Settings pages of your namespaces. "),pl());}function fe(r,i){if(r&1){let e=lC();ws(0,"span",50),GC(1,"Delete?"),pl(),ws(2,"button",51),Rg("click",function(){If(e);let d=gC().$implicit,_=gC(6);return wf(_.confirmDelete(d))}),GC(3," Confirm "),pl(),ws(4,"button",52),Rg("click",function(){If(e);let d=gC(7);return wf(d.cancelDelete())}),GC(5," Cancel "),pl();}}function ge(r,i){if(r&1){let e=lC();ws(0,"button",52),Rg("click",function(){If(e);let d=gC().$implicit,_=gC(6);return wf(_.armDelete(d))}),GC(1," Delete "),pl();}}function Ce(r,i){if(r&1&&(ws(0,"li",46)(1,"span",47),GC(2),pl(),ws(3,"span",48),GC(4),pl(),Jw(5,fe,6,0)(6,ge,2,0,"button",49),pl()),r&2){let e=i.$implicit,a=gC(6);XE(2),Yg(e.name),XE(2),Yg(e.subtitle),XE(),eC(a.isPendingDelete(e)?5:6);}}function ve(r,i){if(r&1&&(ws(0,"h3",44),GC(1,"Integrations"),pl(),ws(2,"ul",45),rC(3,Ce,7,3,"li",46,Kw().trackEntry,true),pl()),r&2){let e=gC(5);XE(3),oC(e.recap().integrations);}}function xe(r,i){if(r&1){let e=lC();ws(0,"span",50),GC(1,"Delete?"),pl(),ws(2,"button",51),Rg("click",function(){If(e);let d=gC().$implicit,_=gC(6);return wf(_.confirmDelete(d))}),GC(3," Confirm "),pl(),ws(4,"button",52),Rg("click",function(){If(e);let d=gC(7);return wf(d.cancelDelete())}),GC(5," Cancel "),pl();}}function be(r,i){if(r&1){let e=lC();ws(0,"button",52),Rg("click",function(){If(e);let d=gC().$implicit,_=gC(6);return wf(_.armDelete(d))}),GC(1," Delete "),pl();}}function ye(r,i){if(r&1&&(ws(0,"li",46)(1,"span",47),GC(2),pl(),ws(3,"span",48),GC(4),pl(),Jw(5,xe,6,0)(6,be,2,0,"button",49),pl()),r&2){let e=i.$implicit,a=gC(6);XE(2),Yg(e.name),XE(2),Yg(e.subtitle),XE(),eC(a.isPendingDelete(e)?5:6);}}function he(r,i){if(r&1&&(ws(0,"h3",44),GC(1,"AI Providers"),pl(),ws(2,"ul",45),rC(3,ye,7,3,"li",46,Kw().trackEntry,true),pl()),r&2){let e=gC(5);XE(3),oC(e.recap().aiProviders);}}function Ee(r,i){if(r&1){let e=lC();ws(0,"span",50),GC(1,"Delete?"),pl(),ws(2,"button",51),Rg("click",function(){If(e);let d=gC().$implicit,_=gC(6);return wf(_.confirmDelete(d))}),GC(3," Confirm "),pl(),ws(4,"button",52),Rg("click",function(){If(e);let d=gC(7);return wf(d.cancelDelete())}),GC(5," Cancel "),pl();}}function Pe(r,i){if(r&1){let e=lC();ws(0,"button",52),Rg("click",function(){If(e);let d=gC().$implicit,_=gC(6);return wf(_.armDelete(d))}),GC(1," Delete "),pl();}}function Se(r,i){if(r&1&&(ws(0,"li",46)(1,"span",47),GC(2),pl(),ws(3,"span",48),GC(4),pl(),Jw(5,Ee,6,0)(6,Pe,2,0,"button",49),pl()),r&2){let e=i.$implicit,a=gC(6);XE(2),Yg(e.name),XE(2),Yg(e.subtitle),XE(),eC(a.isPendingDelete(e)?5:6);}}function we(r,i){if(r&1&&(ws(0,"h3",44),GC(1,"My global auth settings"),pl(),ws(2,"ul",45),rC(3,Se,7,3,"li",46,Kw().trackEntry,true),pl()),r&2){let e=gC(5);XE(3),oC(e.recap().authSettings);}}function ke(r,i){if(r&1&&(Jw(0,ve,5,0),Jw(1,he,5,0),Jw(2,we,5,0)),r&2){let e=gC(4);eC(e.recap().integrations.length>0?0:-1),XE(),eC(e.recap().aiProviders.length>0?1:-1),XE(),eC(e.recap().authSettings.length>0?2:-1);}}function Me(r,i){if(r&1&&Jw(0,ue,2,0,"p",43)(1,ke,3,3),r&2){let e=gC(3);eC(e.recap().total===0?0:1);}}function Oe(r,i){if(r&1){let e=lC();ws(0,"div",17)(1,"div",5)(2,"h2",6),GC(3,"Identity"),pl(),ws(4,"div",7)(5,"span",8),GC(6,"Email"),pl(),ws(7,"span",36),GC(8),pl()(),ws(9,"div",7)(10,"span",8),GC(11,"External ID"),pl(),ws(12,"span",36),GC(13),pl()()(),ws(14,"div",5)(15,"h2",6),GC(16,"Profile"),pl(),ws(17,"div",7)(18,"span",8),GC(19,"First name"),pl(),ws(20,"span",36),GC(21),pl()(),ws(22,"div",7)(23,"span",8),GC(24,"Last name"),pl(),ws(25,"span",36),GC(26),pl()(),ws(27,"div",37)(28,"span",8),GC(29,"Bio"),pl(),ws(30,"span",36),GC(31),pl()(),ws(32,"div",7)(33,"span",8),GC(34,"Language"),pl(),ws(35,"span",36),GC(36),pl()()(),ws(37,"div",33)(38,"button",38),Rg("click",function(){If(e);let d=gC(2);return wf(d.startEditing())}),GC(39," Edit profile "),pl()(),ws(40,"div",39)(41,"button",40),Rg("click",function(){If(e);let d=gC(2);return wf(d.toggleOverrides())}),ws(42,"span",41),GC(43,"\u25B6"),pl(),GC(44," My global user configurations "),ws(45,"span",42),GC(46),pl()(),Jw(47,Me,2,1),pl()();}if(r&2){let e=gC(),a=gC();XE(8),Yg(e.email),XE(5),Yg(e.externalId),XE(8),Yg(e.firstname||"\u2014"),XE(5),Yg(e.lastname||"\u2014"),XE(5),Yg(e.bio||"\u2014"),XE(5),Yg(e.preferredLanguage||"\u2014"),XE(5),Tg("aria-expanded",a.isOverridesExpanded()),XE(),Ug("user-profile__overrides-arrow--open",a.isOverridesExpanded()),XE(4),vl("(",a.recap().total,")"),XE(),eC(a.isOverridesExpanded()?47:-1);}}function Ue(r,i){if(r&1&&(ws(0,"div",5)(1,"h2",6),GC(2,"Appearance"),pl(),ws(3,"div",7)(4,"span",8),GC(5,"Skin"),pl(),ws(6,"div",9),rC(7,de,5,5,"button",10,D),pl()(),ws(9,"div",7)(10,"span",8),GC(11,"Mode"),pl(),ws(12,"div",11),rC(13,_e,2,4,"button",12,D),pl()()(),ws(15,"div",5)(16,"h2",6),GC(17,"Composer"),pl(),ws(18,"div",7)(19,"span",8),GC(20,"Enter key"),pl(),ws(21,"div",13)(22,"div",14),rC(23,ce,2,4,"button",12,D),pl(),ws(25,"p",15),GC(26,'In "New line" mode, press Ctrl or Cmd + Enter to send.'),pl()()()(),Jw(27,me,40,5,"form",16)(28,Oe,48,11,"div",17)),r&2){let e=gC();XE(7),oC(e.themeVariantOptions),XE(6),oC(e.themeOptions),XE(10),oC(e.enterKeyOptions),XE(4),eC(e.isEditing()?27:28);}}function Te(r,i){r&1&&(ws(0,"p",4),GC(1,"Unable to load profile."),pl());}var le=class r{userState=g(l);router=g(G);location=g(Mm);destroyRef=g(Ce$1);integrationState=g(N);providerState=g(O);authSettingState=g(R);themePort=g(I);preferencesPort=g(f);isEditing=Gi(false);isLoading=Gi(false);isSaving=Gi(false);isOverridesExpanded=Gi(false);currentUser=this.userState.currentUser;theme=this.themePort.theme;themeMode=mT(()=>this.themePort.theme().mode);themeOptions=[{value:"light",label:"Light"},{value:"dark",label:"Dark"},{value:"system",label:"System"}];themeVariant=mT(()=>this.themePort.theme().variant);themeVariantOptions=[{value:"industry",label:"Industry",description:"Bleu acier, Barlow"},{value:"terminal",label:"Terminal",description:"Ambre CRT, JetBrains Mono"}];enterKeyBehavior=this.preferencesPort.enterKeyBehavior;enterKeyOptions=[{value:"send",label:"Send"},{value:"newline",label:"New line"}];languageOptions=[{value:"",label:"No preference (English fallback)"},{value:"fr",label:"French"},{value:"de",label:"German"},{value:"es",label:"Spanish"},{value:"pt",label:"Portuguese"},{value:"it",label:"Italian"},{value:"nl",label:"Dutch"},{value:"pl",label:"Polish"},{value:"ja",label:"Japanese"},{value:"zh",label:"Chinese"}];form=new z({firstname:new _t("",{nonNullable:true}),lastname:new _t("",{nonNullable:true}),bio:new _t("",{nonNullable:true}),preferredLanguage:new _t("",{nonNullable:true})});recap=F(Ly([this.integrationState.userGlobal$,this.providerState.userGlobal$,this.authSettingState.userGlobal$]).pipe(re(([i,e,a])=>{let d=i.map(g=>({category:"integration",id:g.id??"",name:g.name,subtitle:g.integrationType})),_=e.map(g=>({category:"aiProvider",id:g.id??"",name:g.name,subtitle:g.apiType})),I=a.map(g=>({category:"authSetting",id:g.id??"",name:g.name,subtitle:g.authType}));return {integrations:d,aiProviders:_,authSettings:I,total:d.length+_.length+I.length}})),{initialValue:{integrations:[],aiProviders:[],authSettings:[],total:0}});ngOnInit(){if(this.currentUser()){this.syncFormFromState();return}this.isLoading.set(true),this.userState.loadMe().pipe(U(this.destroyRef)).subscribe({next:()=>{this.syncFormFromState(),this.isLoading.set(false);},error:()=>this.isLoading.set(false)});}startEditing(){this.syncFormFromState(),this.isEditing.set(true);}cancelEditing(){this.isEditing.set(false);}setTheme(i){this.themePort.setTheme({variant:this.themePort.theme().variant,mode:i});}setThemeVariant(i){this.themePort.setTheme({variant:i,mode:this.themePort.theme().mode});}setEnterKeyBehavior(i){this.preferencesPort.setEnterKeyBehavior(i);}save(){if(this.isSaving())return;this.isSaving.set(true);let i=this.form.controls.preferredLanguage.value.trim();this.userState.updateMe({firstname:this.form.controls.firstname.value.trim()||void 0,lastname:this.form.controls.lastname.value.trim()||void 0,bio:this.form.controls.bio.value.trim()||void 0,preferredLanguage:i||void 0}).pipe(U(this.destroyRef)).subscribe({next:()=>{this.isSaving.set(false),this.isEditing.set(false);},error:()=>this.isSaving.set(false)});}toggleOverrides(){this.isOverridesExpanded.update(i=>!i),this.pendingDeleteKey.set(null);}pendingDeleteKey=Gi(null);isPendingDelete(i){return this.pendingDeleteKey()===this.entryKey(i)}armDelete(i){i.id&&this.pendingDeleteKey.set(this.entryKey(i));}cancelDelete(){this.pendingDeleteKey.set(null);}confirmDelete(i){if(!i.id)return;this.pendingDeleteKey.set(null),(i.category==="integration"?this.integrationState.delete(i.id,"userGlobal"):i.category==="authSetting"?this.authSettingState.delete(i.id,"userGlobal"):this.providerState.delete(i.id,"userGlobal")).pipe(U(this.destroyRef)).subscribe({error:a=>{console.error(`[UserProfile] Delete failed for ${i.category}:${i.id}:`,a);}});}entryKey(i){return `${i.category}:${i.id}`}goBack(){window.history.length>1?this.location.back():this.router.navigate(["/agentos"]);}trackEntry(i,e){return this.entryKey(e)}syncFormFromState(){let i=this.currentUser();i&&this.form.setValue({firstname:i.firstname??"",lastname:i.lastname??"",bio:i.bio??"",preferredLanguage:i.preferredLanguage??""});}static \u0275fac=function(e){return new(e||r)};static \u0275cmp=xw({type:r,selectors:[["agentos-user-profile"]],decls:8,vars:1,consts:[[1,"user-profile"],[1,"user-profile__header"],["icon","arrow_back","title","Back",3,"action"],[1,"user-profile__title"],[1,"user-profile__loading"],[1,"user-profile__section"],[1,"user-profile__section-title"],[1,"user-profile__field"],[1,"user-profile__label"],[1,"user-profile__theme-variants"],["type","button",1,"user-profile__theme-variant",3,"user-profile__theme-variant--active"],["role","group","aria-label","Color mode",1,"user-profile__segmented"],["type","button",1,"user-profile__segmented-option",3,"user-profile__segmented-option--active"],[1,"user-profile__field-control"],["role","group","aria-label","Enter key behavior",1,"user-profile__segmented"],[1,"user-profile__hint"],[1,"user-profile__form",3,"formGroup"],[1,"user-profile__view"],["type","button",1,"user-profile__theme-variant",3,"click"],[1,"user-profile__theme-variant-name"],[1,"user-profile__theme-variant-desc"],["type","button",1,"user-profile__segmented-option",3,"click"],[1,"user-profile__form",3,"ngSubmit","formGroup"],[1,"user-profile__value","user-profile__value--readonly"],["for","up-firstname",1,"user-profile__label"],["id","up-firstname","type","text","placeholder","Your first name","formControlName","firstname","autocomplete","given-name",1,"user-profile__input"],["for","up-lastname",1,"user-profile__label"],["id","up-lastname","type","text","placeholder","Your last name","formControlName","lastname","autocomplete","family-name",1,"user-profile__input"],["for","up-bio",1,"user-profile__label"],["id","up-bio","placeholder","A short description about yourself","formControlName","bio","rows","4",1,"user-profile__input","user-profile__input--textarea"],["for","up-preferredLanguage",1,"user-profile__label"],["id","up-preferredLanguage","formControlName","preferredLanguage",1,"user-profile__input","user-profile__select"],[3,"value"],[1,"user-profile__actions"],["type","submit",1,"user-profile__btn","user-profile__btn--primary",3,"disabled"],["type","button",1,"user-profile__btn",3,"click"],[1,"user-profile__value"],[1,"user-profile__field","user-profile__field--bio"],["type","button",1,"user-profile__btn","user-profile__btn--primary",3,"click"],[1,"user-profile__overrides"],["type","button",1,"user-profile__overrides-toggle",3,"click"],[1,"user-profile__overrides-arrow"],[1,"user-profile__overrides-count"],[1,"user-profile__overrides-empty"],[1,"user-profile__overrides-subtitle"],[1,"user-profile__overrides-list"],[1,"user-profile__overrides-row"],[1,"user-profile__overrides-name"],[1,"user-profile__overrides-subtitle-text"],["type","button",1,"user-profile__overrides-delete"],[1,"user-profile__overrides-confirm-label"],["type","button",1,"user-profile__overrides-delete","user-profile__overrides-delete--confirm",3,"click"],["type","button",1,"user-profile__overrides-delete",3,"click"]],template:function(e,a){if(e&1&&(ws(0,"div",0)(1,"header",1)(2,"ds-icon-button",2),Rg("action",function(){return a.goBack()}),pl(),ws(3,"h1",3),GC(4,"My profile"),pl()(),Jw(5,se,2,0,"p",4)(6,Ue,29,1)(7,Te,2,0,"p",4),pl()),e&2){let d;XE(5),eC(a.isLoading()?5:(d=a.currentUser())?6:7,d);}},dependencies:[ni,Jn,Qn,ei,Ye,At,Zn,Xn,En,An,Se$1],styles:[`.user-profile[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2rem;max-width:560px;margin:0 auto;padding:2rem 1rem}.user-profile__header[_ngcontent-%COMP%]{display:flex;flex-direction:row;align-items:center;gap:.5rem}.user-profile__back[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.375rem;background:none;border:none;padding:0;cursor:pointer;font-size:.875rem;color:var(--color-accent)}.user-profile__back[_ngcontent-%COMP%]:hover{text-decoration:underline}.user-profile__back-icon[_ngcontent-%COMP%]{font-size:1rem;line-height:1}.user-profile__title[_ngcontent-%COMP%]{margin:0;font-size:1.5rem;font-weight:700;color:var(--color-text);letter-spacing:-.02em}.user-profile__loading[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:.9rem;margin:0}.user-profile__view[_ngcontent-%COMP%], .user-profile__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2rem}.user-profile__section[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1rem}.user-profile__section-title[_ngcontent-%COMP%]{margin:0;font-family:var(--font-heading);font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.12em;color:var(--color-neutral-500);border-bottom:1px solid var(--color-divider);padding-bottom:.5rem}.user-profile__field[_ngcontent-%COMP%]{display:grid;grid-template-columns:140px 1fr;align-items:baseline;gap:.75rem}.user-profile__field--bio[_ngcontent-%COMP%]{align-items:start}.user-profile__label[_ngcontent-%COMP%]{font-size:.875rem;font-weight:500;color:var(--color-text-secondary);white-space:nowrap}.user-profile__value[_ngcontent-%COMP%]{font-size:.9375rem;color:var(--color-text);word-break:break-word;white-space:pre-wrap}.user-profile__value--readonly[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:.875rem}.user-profile__segmented[_ngcontent-%COMP%]{display:inline-flex;justify-self:start;border:1px solid var(--color-divider);overflow:hidden}.user-profile__segmented-option[_ngcontent-%COMP%]{padding:.4rem .85rem;background:transparent;border:none;border-right:1px solid var(--color-divider);color:var(--color-text-secondary);font-size:.875rem;cursor:pointer;transition:background .15s ease,color .15s ease}.user-profile__segmented-option[_ngcontent-%COMP%]:last-child{border-right:none}.user-profile__segmented-option[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover)}.user-profile__segmented-option--active[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff}.user-profile__segmented-option--active[_ngcontent-%COMP%]:hover{background:var(--color-accent-700)}.user-profile__field-control[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:flex-start;gap:.4rem}.user-profile__hint[_ngcontent-%COMP%]{margin:0;font-size:.8rem;color:var(--color-text-secondary)}.user-profile__select[_ngcontent-%COMP%]{appearance:none;cursor:pointer;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%236e6e73' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .75rem center;padding-right:2.25rem}.user-profile__input[_ngcontent-%COMP%]{width:100%;padding:.625rem .875rem;border:1px solid var(--color-divider);background:var(--color-surface);color:var(--color-text);font-size:.9375rem;font-family:inherit;outline:none;box-sizing:border-box;border-radius:0;transition:border-color .15s ease;resize:none}.user-profile__input[_ngcontent-%COMP%]:focus{border-color:var(--color-accent)}.user-profile__input[_ngcontent-%COMP%]::placeholder{color:var(--color-neutral-500)}.user-profile__input--textarea[_ngcontent-%COMP%]{line-height:1.5;resize:vertical}.user-profile__actions[_ngcontent-%COMP%]{display:flex;gap:.75rem;padding-top:.5rem}.user-profile__btn[_ngcontent-%COMP%]{padding:.6rem 1.25rem;border:1px solid var(--color-divider);background:transparent;color:var(--color-text);font-size:13px;font-family:var(--font-heading);font-weight:600;cursor:pointer;border-radius:0;transition:background .15s ease,border-color .15s ease}.user-profile__btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-bg-hover);border-color:var(--color-neutral-500)}.user-profile__btn[_ngcontent-%COMP%]:disabled{opacity:.45;cursor:not-allowed}.user-profile__btn--primary[_ngcontent-%COMP%]{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.user-profile__btn--primary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-700);border-color:var(--color-accent-700)}.user-profile__theme-variants[_ngcontent-%COMP%]{display:flex;gap:8px;justify-self:start}.user-profile__theme-variant[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:flex-start;gap:3px;padding:10px 16px;border:1px solid var(--color-divider);background:transparent;cursor:pointer;min-width:120px;transition:background .12s,border-color .12s}.user-profile__theme-variant[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover);border-color:var(--color-neutral-500)}.user-profile__theme-variant--active[_ngcontent-%COMP%]{border-color:var(--color-accent);background:color-mix(in srgb,var(--color-accent) 8%,transparent)}.user-profile__theme-variant-name[_ngcontent-%COMP%]{font-family:var(--font-heading);font-size:13px;font-weight:600;color:var(--color-text)}.user-profile__theme-variant-desc[_ngcontent-%COMP%]{font-size:11px;color:var(--color-text-secondary);font-family:var(--font-body)}.user-profile__overrides[_ngcontent-%COMP%]{margin-top:1rem;padding-top:1rem;border-top:1px solid var(--color-divider)}.user-profile__overrides-toggle[_ngcontent-%COMP%]{background:transparent;border:none;padding:.25rem 0;font-size:.85rem;color:var(--color-text-secondary);cursor:pointer;display:flex;align-items:center;gap:.4rem}.user-profile__overrides-toggle[_ngcontent-%COMP%]:hover{color:var(--color-text)}.user-profile__overrides-arrow[_ngcontent-%COMP%]{display:inline-block;font-size:.65rem;transition:transform .15s ease}.user-profile__overrides-arrow--open[_ngcontent-%COMP%]{transform:rotate(90deg)}.user-profile__overrides-count[_ngcontent-%COMP%]{color:var(--color-text-tertiary)}.user-profile__overrides-empty[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-secondary);font-style:italic;padding:.5rem 0 0;margin:0}.user-profile__overrides-subtitle[_ngcontent-%COMP%]{font-family:var(--font-heading);font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.12em;color:var(--color-neutral-500);margin:.75rem 0 .25rem}.user-profile__overrides-list[_ngcontent-%COMP%]{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.25rem}.user-profile__overrides-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:.4rem .5rem;font-size:.85rem;border-radius:0}.user-profile__overrides-row[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover)}.user-profile__overrides-name[_ngcontent-%COMP%]{flex:1;color:var(--color-text);font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.user-profile__overrides-subtitle-text[_ngcontent-%COMP%]{font-size:.75rem;color:var(--color-text-secondary);font-family:var(--font-heading)}.user-profile__overrides-confirm-label[_ngcontent-%COMP%]{font-size:11px;font-family:var(--font-heading);font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--red-deep);white-space:nowrap}.user-profile__overrides-delete[_ngcontent-%COMP%]{background:transparent;border:1px solid transparent;font-size:11px;font-family:var(--font-heading);font-weight:600;color:var(--color-neutral-500);cursor:pointer;padding:3px 8px;border-radius:0;transition:color .12s,background .12s,border-color .12s}.user-profile__overrides-delete[_ngcontent-%COMP%]:hover{color:var(--red);background:color-mix(in srgb,var(--red) 10%,transparent);border-color:var(--red)}.user-profile__overrides-delete--confirm[_ngcontent-%COMP%]{border-color:var(--red);background:var(--red);color:#fff}.user-profile__overrides-delete--confirm[_ngcontent-%COMP%]:hover{background:var(--red-deep);border-color:var(--red-deep)}`]})};
|
|
2
2
|
export{le as UserProfileComponent};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {n as ne}from'./chunk-
|
|
1
|
+
import {n as ne}from'./chunk-1pMMl5aQ.js';import {g,Z as z$1,_ as Ue,e as xw,$ as zt,a0 as jt,a1 as Vt,a2 as Nt,h as hr,i as pr,k as ws,n as GC,o as pl,J as Jw,q as Rg,X as XE,A as Ug,a5 as vl,a8 as Yg,y as eC,v as bg,a9 as lC,ai as tm,aa as If,ac as gC,aj as KC,ab as wf,a3 as VI,ak as em,a6 as UI}from'./main-GYSPY3UE.js';import {y as yt,w as wt,t as ti,Z as Zn,c as cn}from'./chunk-DS1gnXQd.js';function G(c,p){if(c&1){let t=lC();ws(0,"mat-checkbox",5),tm("ngModelChange",function(l){If(t);let f=gC();return KC(f.checkboxChecked,l)||(f.checkboxChecked=l),wf(l)}),GC(1),pl(),VI();}if(c&2){let t=gC();em("ngModel",t.checkboxChecked),UI(),XE(),Yg(t.data.checkboxLabel);}}var z=class c{dialogRef=g(z$1);data=g(Ue);checkboxChecked=false;confirm(){this.dialogRef.close({confirmed:true,checkboxChecked:this.checkboxChecked});}cancel(){this.dialogRef.close({confirmed:false});}static \u0275fac=function(t){return new(t||c)};static \u0275cmp=xw({type:c,selectors:[["app-confirm-dialog"]],decls:13,vars:8,consts:[["mat-dialog-title",""],[3,"ngModel"],["align","end"],["mat-button","",3,"click"],["mat-flat-button","",3,"click","color"],[3,"ngModelChange","ngModel"]],template:function(t,e){t&1&&(ws(0,"h2",0)(1,"mat-icon"),GC(2,"warning"),pl(),GC(3),pl(),ws(4,"mat-dialog-content")(5,"p"),GC(6),pl(),Jw(7,G,2,2,"mat-checkbox",1),pl(),ws(8,"mat-dialog-actions",2)(9,"button",3),Rg("click",function(){return e.cancel()}),GC(10),pl(),ws(11,"button",4),Rg("click",function(){return e.confirm()}),GC(12),pl()()),t&2&&(XE(),Ug("destructive",!!e.data.isDestructive),XE(2),vl(" ",e.data.title,`
|
|
2
2
|
`),XE(3),Yg(e.data.message),XE(),eC(e.data.checkboxLabel?7:-1),XE(3),Yg(e.data.cancelLabel??"Cancel"),XE(),bg("color",e.data.isDestructive?"warn":"primary"),XE(),vl(" ",e.data.confirmLabel??"Confirm"," "));},dependencies:[zt,jt,Vt,Nt,hr,pr,yt,wt,ne,ti,Zn,cn],styles:["h2[mat-dialog-title][_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem}h2[mat-dialog-title][_ngcontent-%COMP%] mat-icon.destructive[_ngcontent-%COMP%]{color:var(--color-error, #f44336)}mat-dialog-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--color-text-secondary);line-height:1.5}mat-dialog-content[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%]{display:block;margin-top:8px;font-size:.875rem}"]})};export{z};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import {R}from'./chunk-
|
|
1
|
+
import {R}from'./chunk-C7OQXeW9.js';import {c}from'./chunk-B1h8Rr_L.js';import {g,G,C as Ce,a as Gi,m as mT,b as U,e as xw,k as ws,q as Rg,o as pl,af as Eg,u as CC,v as bg,J as Jw,ac as gC,y as eC,a9 as lC,aa as If,ab as wf,ag as fT}from'./main-GYSPY3UE.js';import {$ as $n,S as Se}from'./chunk-CGjjc55P.js';import'./chunk-CZe6uHRZ.js';import'./chunk-DS1gnXQd.js';function M(i,e){if(i&1){let t=lC();ws(0,"agentos-scheduled-prompt-item",4),Rg("enableRequested",function(n){If(t);let r=gC(2);return wf(r.enablePrompt(n))})("disableRequested",function(n){If(t);let r=gC(2);return wf(r.disablePrompt(n))})("deleteRequested",function(n){If(t);let r=gC(2);return wf(r.deletePrompt(n))}),pl();}i&2&&bg("definition",e)("platformMode",true);}function L(i,e){if(i&1&&Jw(0,M,1,2,"agentos-scheduled-prompt-item",3),i&2){let t,o=e.$implicit,n=gC();eC((t=n.resolvePrompt(o.id))?0:-1,t);}}var D=class i{router=g(G);destroyRef=g(Ce);state=g(c);prompts=Gi([]);isLoading=Gi(true);promptItems=mT(()=>this.prompts().map(e=>({id:e.id??"",name:e.name,description:e.description,badges:[{label:e.enabled?"Enabled":"Disabled",variant:e.enabled?"success":"warning"}]})));constructor(){this.state.listPlatform().pipe(U(this.destroyRef)).subscribe({next:e=>{this.prompts.set(e),this.isLoading.set(false);},error:()=>this.isLoading.set(false)});}goBack(){this.router.navigate(["/agentos","admin"]);}openCreateForm(){this.router.navigate(["/agentos","admin","scheduled-prompts","new"]);}enablePrompt(e){this.state.enable(e.id??"").pipe(U(this.destroyRef)).subscribe(t=>this.patchPrompt(t));}disablePrompt(e){this.state.disable(e.id??"").pipe(U(this.destroyRef)).subscribe(t=>this.patchPrompt(t));}deletePrompt(e){let t=e.id??"";this.state.delete(t).pipe(U(this.destroyRef)).subscribe(()=>this.prompts.update(o=>o.filter(n=>n.id!==t)));}resolvePrompt(e){return this.prompts().find(t=>t.id===e)??null}patchPrompt(e){this.prompts.update(t=>t.map(o=>o.id===e.id?e:o));}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=xw({type:i,selectors:[["agentos-platform-scheduled-prompts"]],decls:4,vars:4,consts:[["scheduledPromptItemTpl",""],["title","Platform Scheduled Prompts","emptyMessage","No platform scheduled prompts defined yet. Add one above.","cardMinWidth","420px",3,"createRequested","items","loading","showCreate","itemTemplate"],["toolbar-start","","icon","arrow_back","title","Back",3,"action"],[3,"definition","platformMode"],[3,"enableRequested","disableRequested","deleteRequested","definition","platformMode"]],template:function(t,o){if(t&1&&(ws(0,"ds-entity-list",1),Rg("createRequested",function(){return o.openCreateForm()}),ws(1,"ds-icon-button",2),Rg("action",function(){return o.goBack()}),pl()(),Eg(2,L,1,1,"ng-template",null,0,fT)),t&2){let n=CC(3);bg("items",o.promptItems())("loading",o.isLoading())("showCreate",true)("itemTemplate",n);}},dependencies:[$n,R,Se],encapsulation:2})};export{D as PlatformScheduledPromptsComponent};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import {n}from'./chunk-CfgXrte_.js';import {v}from'./chunk-
|
|
1
|
+
import {n}from'./chunk-CfgXrte_.js';import {v}from'./chunk-BECO5DZL.js';import {O}from'./chunk-3SjkoJQ2.js';import {N}from'./chunk-BLltB5Fl.js';import {g,ao as V,G,C as Ce,a as Gi,r as re,b as U$1,bS as va,W as br,e as xw,aK as xb,k as ws,bf as aT,q as Rg,o as pl,af as Eg,u as CC,v as bg,bg as uT,ah as rT,J as Jw,ac as gC,y as eC,n as GC,X as XE,a8 as Yg,a9 as lC,aa as If,ab as wf,ag as fT}from'./main-GYSPY3UE.js';import'./chunk-DdPOtjZp.js';import {$ as $n,S as Se}from'./chunk-CGjjc55P.js';import'./chunk-CZe6uHRZ.js';import'./chunk-DS1gnXQd.js';import'./chunk-DOeIIw1a.js';import'./chunk-CXqNbVXr.js';var z=()=>[];function W(o,e){if(o&1&&(ws(0,"p",3),GC(1),pl()),o&2){let t=gC().$implicit;XE(),Yg(t.name);}}function U(o,e){if(o&1){let t=lC();ws(0,"agentos-integration-config-item",5),Rg("editRequested",function(){let i=If(t),r=gC(2);return wf(r.onEdit(i))})("deleteRequested",function(){let i=If(t),r=gC(2);return wf(r.onDelete(i))})("duplicateRequested",function(){let i=If(t),r=gC(2);return wf(r.onDuplicate(i))}),pl();}if(o&2){let t=e,n=gC(2);bg("config",t.config)("scope",t.scope)("readOnly",t.scope==="platform"||t.scope==="namespace"&&!n.isAdmin());}}function X(o,e){if(o&1&&Jw(0,W,2,1,"p",3)(1,U,1,3,"agentos-integration-config-item",4),o&2){let t,n=e.$implicit,i=gC();eC(i.isEmptyPlaceholder(n.id)?0:(t=i.resolve(n.id))?1:-1,t);}}var k=Object.freeze({platform:"Configurations plateforme",namespace:"Configurations du namespace",userOnNs:"Mes overrides sur ce namespace",userGlobal:"Mes overrides globaux"}),F="__empty__",j=class o{route=g(V);router=g(G);destroyRef=g(Ce);state=g(N);namespaceRole=g(v);namespaceId=this.route.snapshot.params.namespaceId;isAdmin=Gi(false);listItems$=this.state.vm$.pipe(re(e=>this.toListItems(e)));isLoading=Gi(true);resolved=new Map;ngOnInit(){this.route.paramMap.pipe(U$1(this.destroyRef)).subscribe(e=>{let t=e.get("namespaceId")??"";t&&t!==this.namespaceId&&(this.namespaceId=t),this.state.setNamespace(t);}),this.route.paramMap.pipe(re(e=>e.get("namespaceId")??""),va(e=>e?this.namespaceRole.isAdminOfNamespace$(e):br(false)),U$1(this.destroyRef)).subscribe(e=>this.isAdmin.set(e)),this.state.vm$.pipe(U$1(this.destroyRef)).subscribe(e=>{this.isLoading.set(false);let t=new Map;e.platform.forEach(n=>{n.id&&t.set(this.itemKey("platform",n.id),{config:n,scope:"platform"});}),e.namespace.forEach(n=>{n.id&&t.set(this.itemKey("namespace",n.id),{config:n,scope:"namespace"});}),e.userOnNs.forEach(n=>{n.id&&t.set(this.itemKey("userOnNs",n.id),{config:n,scope:"userOnNs"});}),e.userGlobal.forEach(n=>{n.id&&t.set(this.itemKey("userGlobal",n.id),{config:n,scope:"userGlobal"});}),this.resolved=t;});}isEmptyPlaceholder(e){return e.startsWith(F)}resolve(e){return this.resolved.get(e)??null}itemKey(e,t){return `${e}:${t}`}goBack(){this.router.navigate(["/agentos","namespaces"]);}openCreateForm(){this.router.navigate(["/agentos",this.namespaceId,"integrations","new"],{queryParams:{scope:n(this.isAdmin())}});}onEdit(e){let t=e.config.id??"";this.router.navigate(["/agentos",this.namespaceId,"integrations",t,"edit"],{queryParams:{scope:e.scope}});}onDelete(e){let t=e.config.id;t&&this.state.delete(t,e.scope).pipe(U$1(this.destroyRef)).subscribe({error:n=>{console.error(`[IntegrationsAllScopes] Delete failed for ${e.scope}:${t}:`,n);}});}onDuplicate(e){if(!e.config.id)return;let n=(e.scope==="namespace"||e.scope==="platform")&&!this.isAdmin()?"userOnNs":e.scope;this.router.navigate(["/agentos",this.namespaceId,"integrations","new"],{queryParams:{scope:n,template:e.config.id,templateScope:e.scope}});}toListItems(e){let t=[];return t.push(...this.sectionItems("platform",e.platform)),t.push(...this.sectionItems("namespace",e.namespace)),t.push(...this.sectionItems("userOnNs",e.userOnNs)),t.push(...this.sectionItems("userGlobal",e.userGlobal)),t}sectionItems(e,t){return t.length===0?[{id:`${F}${e}`,name:"Aucune configuration",groupKey:e,groupLabel:k[e]}]:t.filter(n=>!!n.id).map(n=>({id:this.itemKey(e,n.id),name:n.name,description:n.integrationType,groupKey:e,groupLabel:k[e]}))}static \u0275fac=function(t){return new(t||o)};static \u0275cmp=xw({type:o,selectors:[["agentos-integrations-all-scopes"]],decls:5,vars:7,consts:[["integrationItemTpl",""],["title","Integrations","emptyMessage","No integrations available.","cardMinWidth","400px",3,"createRequested","items","loading","showCreate","itemTemplate"],["toolbar-start","","icon","arrow_back","title","Back",3,"action"],[1,"integrations-all-scopes__empty"],[3,"config","scope","readOnly"],[3,"editRequested","deleteRequested","duplicateRequested","config","scope","readOnly"]],template:function(t,n){if(t&1&&(ws(0,"ds-entity-list",1),aT(1,"async"),Rg("createRequested",function(){return n.openCreateForm()}),ws(2,"ds-icon-button",2),Rg("action",function(){return n.goBack()}),pl()(),Eg(3,X,2,1,"ng-template",null,0,fT)),t&2){let i=CC(4);bg("items",uT(1,4,n.listItems$)??rT(6,z))("loading",n.isLoading())("showCreate",true)("itemTemplate",i);}},dependencies:[$n,O,Se,xb],styles:[".integrations-all-scopes__empty[_ngcontent-%COMP%]{margin:0;padding:.65rem 1rem;font-size:.85rem;font-style:italic;color:var(--color-text-secondary)}"]})};export{j as IntegrationsAllScopesComponent};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import {S as S$1}from'./chunk-
|
|
1
|
+
import {S as S$1}from'./chunk-b-dxVOcr.js';import {g,G,C as Ce,df as U,aJ as Tr,a as Gi,bS as va,r as re,b as U$1,e as xw,aK as xb,k as ws,bf as aT,q as Rg,o as pl,af as Eg,u as CC,v as bg,bg as uT,ah as rT,J as Jw,ac as gC,y as eC,a9 as lC,aa as If,ab as wf,ag as fT}from'./main-GYSPY3UE.js';import {$ as $n,S as Se}from'./chunk-CGjjc55P.js';import'./chunk-CZe6uHRZ.js';import'./chunk-DS1gnXQd.js';var S=()=>[];function V(r,e){if(r&1){let t=lC();ws(0,"agentos-ai-provider-item",4),Rg("editRequested",function(i){If(t);let p=gC(2);return wf(p.onEdit(i))})("deleteRequested",function(i){If(t);let p=gC(2);return wf(p.onDelete(i))}),pl();}r&2&&bg("config",e)("showBadge",false);}function F(r,e){if(r&1&&Jw(0,V,1,2,"agentos-ai-provider-item",3),r&2){let t,o=e.$implicit,i=gC();eC((t=i.resolveProvider(o.id))?0:-1,t);}}var E=class r{router=g(G);destroyRef=g(Ce);aiProviderController=g(U);refresh$=new Tr(void 0);isLoading=Gi(true);providers$=this.refresh$.pipe(va(()=>(this.isLoading.set(true),this.aiProviderController.listAiProvider("none"))));providerItems$=this.providers$.pipe(re(e=>e.map(t=>({id:t.id??"",name:t.name,description:t.apiType}))));providersById=new Map;constructor(){this.providers$.pipe(U$1(this.destroyRef)).subscribe({next:e=>{this.providersById=new Map(e.map(t=>[t.id??"",t])),this.isLoading.set(false);},error:()=>this.isLoading.set(false)});}goBack(){this.router.navigate(["/agentos","admin"]);}openCreateForm(){this.router.navigate(["/agentos","admin","ai-providers","new"]);}onEdit(e){e.id&&this.router.navigate(["/agentos","admin","ai-providers",e.id,"edit"]);}onDelete(e){e.id&&this.aiProviderController.deleteAiProvider(e.id).pipe(U$1(this.destroyRef)).subscribe(()=>this.refresh$.next());}resolveProvider(e){return this.providersById.get(e)??null}static \u0275fac=function(t){return new(t||r)};static \u0275cmp=xw({type:r,selectors:[["agentos-platform-ai-providers"]],decls:5,vars:7,consts:[["aiProviderItemTpl",""],["title","Platform AI Providers","emptyMessage","No platform AI providers defined yet. Add one above.","cardMinWidth","400px",3,"createRequested","items","loading","showCreate","itemTemplate"],["toolbar-start","","icon","arrow_back","title","Back",3,"action"],["scope","namespace",3,"config","showBadge"],["scope","namespace",3,"editRequested","deleteRequested","config","showBadge"]],template:function(t,o){if(t&1&&(ws(0,"ds-entity-list",1),aT(1,"async"),Rg("createRequested",function(){return o.openCreateForm()}),ws(2,"ds-icon-button",2),Rg("action",function(){return o.goBack()}),pl()(),Eg(3,F,1,1,"ng-template",null,0,fT)),t&2){let i=CC(4);bg("items",uT(1,4,o.providerItems$)??rT(6,S))("loading",o.isLoading())("showCreate",true)("itemTemplate",i);}},dependencies:[$n,S$1,Se,xb],styles:[".platform-ai-providers__back[_ngcontent-%COMP%]{background:none;border:none;cursor:pointer;font-family:inherit;font-size:.875rem;color:var(--color-text-secondary, #6e6e73);padding:.25rem .5rem;border-radius:4px;transition:color .15s ease}.platform-ai-providers__back[_ngcontent-%COMP%]:hover{color:var(--color-primary, #007aff)}"]})};export{E as PlatformAiProvidersComponent};
|