@whoz-oss/coday-client 3.24.0 → 3.26.0
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/3rdpartylicenses.txt +234 -0
- package/browser/{chunk-D4DTIvDf.js → chunk-1xKCP6gl.js} +1 -1
- package/browser/{chunk-BHb31ndI.js → chunk-B1gTtKFG.js} +1 -1
- package/browser/{chunk-15rAOoZz.js → chunk-BIdH1XJF.js} +2 -2
- package/browser/chunk-BSAXfS2x.js +1 -0
- package/browser/{chunk-DK1hp0WW.js → chunk-Bbb2Oy9I.js} +6 -6
- package/browser/{chunk-DeXXr4BL.js → chunk-BjBW1d-u.js} +6 -6
- package/browser/{chunk-C2agnPiQ.js → chunk-BlUiCEeR.js} +1 -1
- package/browser/{chunk-CPI0Zzv3.js → chunk-BloWX02p.js} +1 -1
- package/browser/{chunk-XBakzM_b.js → chunk-BmHNWYuZ.js} +1 -1
- package/browser/{chunk-DgYr3Diz.js → chunk-Bo1DjeiW.js} +1 -1
- package/browser/{chunk-CPt7Uw3a.js → chunk-Boc0RvBR.js} +1 -1
- package/browser/{chunk-CjPIJIB-.js → chunk-Bol7PdRu.js} +1 -1
- package/browser/{chunk-DNVNXvsJ.js → chunk-BtBbv-Bf.js} +1 -1
- package/browser/{chunk-I8YepFsn.js → chunk-BvO---8Y.js} +2 -2
- package/browser/chunk-Bv_n_Pea.js +141 -0
- package/browser/chunk-C-VoWDOg.js +10 -0
- package/browser/chunk-C0DMx9CU.js +1 -0
- package/browser/chunk-C3cvHmBJ.js +1 -0
- package/browser/chunk-C5mPb_F4.js +1 -0
- package/browser/chunk-C6x9SBjG.js +1 -0
- package/browser/{chunk-C11du_uP.js → chunk-CBwpP2V0.js} +1 -1
- package/browser/{chunk-CIcEtCxk.js → chunk-CCEiNYBj.js} +1 -1
- package/browser/chunk-CCQAu0MS.js +1 -0
- package/browser/chunk-CE5rgBGE.js +182 -0
- package/browser/{chunk-BYJTaU4n.js → chunk-CERsD1uZ.js} +1 -1
- package/browser/chunk-CFY3CFkD.js +1 -0
- package/browser/{chunk-DCx8SlS-.js → chunk-CFfiJ53b.js} +1 -1
- package/browser/{chunk-7-d3g3_Q.js → chunk-CG4buEjj.js} +1 -1
- package/browser/{chunk-mUd43Vo8.js → chunk-CGL1Leue.js} +1 -1
- package/browser/{chunk-kNbhE9tu.js → chunk-CGlvdEI7.js} +1 -1
- package/browser/chunk-CHSLALZZ.js +111 -0
- package/browser/chunk-CRrjfkUg.js +5 -0
- package/browser/chunk-CdkqXKu3.js +1 -0
- package/browser/{chunk-DDertr1B.js → chunk-ChTqQ8HQ.js} +1 -1
- package/browser/chunk-CjKxvXTd.js +1 -0
- package/browser/{chunk-DCjMvdvV.js → chunk-Cmp8otOQ.js} +1 -1
- package/browser/{chunk-CbCwwL-W.js → chunk-CpGwP-5T.js} +1 -1
- package/browser/{chunk-CaH-AtD3.js → chunk-CrYRdxC9.js} +2 -2
- package/browser/chunk-CrZEE1qa.js +1 -0
- package/browser/chunk-Cw62GRPX.js +1 -0
- package/browser/{chunk-B-t2KLMQ.js → chunk-CxozF4Vf.js} +1 -1
- package/browser/{chunk-CzDFGxwY.js → chunk-D-vld_6F.js} +1 -1
- package/browser/{chunk-DFjiy89D.js → chunk-D2pgQ9ii.js} +1 -1
- package/browser/{chunk-BPAPWlpQ.js → chunk-D5UGtM5T.js} +1 -1
- package/browser/{chunk-CKBQdAGJ.js → chunk-DG8M0PqZ.js} +1 -1
- package/browser/chunk-DKg7p59a.js +1 -0
- package/browser/chunk-DOV6c8DN.js +4 -0
- package/browser/{chunk-BLSD82nL.js → chunk-DX05HUs9.js} +1 -1
- package/browser/{chunk-IXLj2Qpp.js → chunk-DZe-m4Sd.js} +1 -1
- package/browser/chunk-D_aTK145.js +37 -0
- package/browser/chunk-DczzZnS1.js +1 -0
- package/browser/{chunk-KXiD_ZK3.js → chunk-Ddpg0y75.js} +1 -1
- package/browser/chunk-DgmZwFcU.js +2 -0
- package/browser/chunk-DpKLsgM9.js +1 -0
- package/browser/chunk-DuNMllH-.js +2 -0
- package/browser/chunk-Dz1wgxrF.js +1 -0
- package/browser/{chunk-CKEgNNXU.js → chunk-Fh0Lvh-K.js} +1 -1
- package/browser/{chunk-BK_05kmN.js → chunk-G_l8BMaJ.js} +3 -3
- package/browser/{chunk-DpkO3_bQ.js → chunk-Ov4I3GYD.js} +1 -1
- package/browser/{chunk-4XIlyOr9.js → chunk-RUBMO7Yb.js} +3 -3
- package/browser/{chunk-DwQ0v-xH.js → chunk-WuZ8xi__.js} +1 -1
- package/browser/chunk-_2qKLbuS.js +1 -0
- package/browser/{chunk-B3xYeZtG.js → chunk-a4RWgm8g.js} +1 -1
- package/browser/{chunk-C2Rueaad.js → chunk-bIJnspzL.js} +1 -1
- package/browser/{chunk-Co5BFbll.js → chunk-cNEt2yX6.js} +1 -1
- package/browser/{chunk-Cf7f_94t.js → chunk-cg5smJeu.js} +1 -1
- package/browser/{chunk-CBYDDKYs.js → chunk-q9uyoVUw.js} +1 -1
- package/browser/chunk-sqjr_Ky0.js +1 -0
- package/browser/{chunk-D-5Imhde.js → chunk-u3jxNXQ8.js} +1 -1
- package/browser/chunk-vQXZQsZC.js +1 -0
- package/browser/index.html +1 -1
- package/browser/main-2GG5NZ4C.js +1811 -0
- package/package.json +1 -1
- package/browser/chunk-16yQFy5_.js +0 -1
- package/browser/chunk-B4l5qLZ6.js +0 -1
- package/browser/chunk-B52iVZ-n.js +0 -182
- package/browser/chunk-B7GIYsvs.js +0 -1
- package/browser/chunk-BBRGEWfs.js +0 -1
- package/browser/chunk-BOArVQMu.js +0 -1
- package/browser/chunk-BQmHxval.js +0 -1
- package/browser/chunk-BYg1TwUC.js +0 -1
- package/browser/chunk-BqhCkR9t.js +0 -1
- package/browser/chunk-BqxwtKFs.js +0 -1
- package/browser/chunk-Byin_63d.js +0 -141
- package/browser/chunk-BzZbVcon.js +0 -4
- package/browser/chunk-C1RU8zia.js +0 -9
- package/browser/chunk-C93ZXc5y.js +0 -1
- package/browser/chunk-C9dkqMA4.js +0 -1
- package/browser/chunk-CIfgFQUQ.js +0 -5
- package/browser/chunk-CqM-2yCQ.js +0 -2
- package/browser/chunk-D4_R7aqN.js +0 -1
- package/browser/chunk-DIuETvVC.js +0 -1
- package/browser/chunk-DuXr-yGB.js +0 -37
- package/browser/chunk-TkSR4UzV.js +0 -1
- package/browser/chunk-buoxjd5i.js +0 -1
- package/browser/chunk-g2nkIubB.js +0 -1
- package/browser/chunk-j5aTABHx.js +0 -2
- package/browser/chunk-nSYjfmpf.js +0 -1
- package/browser/chunk-sLJinEtR.js +0 -1
- package/browser/main-JTU33H5D.js +0 -1811
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import {g,bm as Om,W as Wi,T as TT,cF as $b,j as jw,h as hr,i as Gn,k as Cs,n as Lg,J as JC,m as hl,a3 as ZI,o as aC,u as sI,x as xg,a6 as QI,v as cC,C as Ce,z as z$1,a as P,S as Wy,b as U,Y as x,b1 as On,bf as gT,ac as CC,a8 as em,bi as vT,cG as DT,q as dC,cH as iC,A as Ag,w as fC,E as vy,cI as xt,aw as gl,ax as ml,c9 as Bf,b6 as Rg,ck as Vf,N as Ng,a5 as Dl,a9 as vC,cJ as jg,aa as Sf,ab as _f,ad as Wg}from'./main-JTU33H5D.js';import {t as ti,Q as Qn,e as ei,Y as Ye$1,A as At,Z as Zn,c as cn,y as yt,w as wt}from'./chunk-DuXr-yGB.js';var Ae=(o,t)=>t.date,He=(o,t)=>t.x,$e=(o,t)=>t.label;function Ve(o,t){o&1&&(gl(0,"div",0),JC(1,"No daily data points for this period."),ml());}function Le(o,t){if(o&1&&(Bf(),Rg(0,"rect",18)),o&2){let e=CC().$implicit,n=CC(2);Ng("x",e.w+6)("y",n.yBase-e.tokensStubH)("width",e.w)("height",e.tokensStubH);}}function Ge(o,t){if(o&1&&(Bf(),Rg(0,"rect",19)(1,"rect",20)),o&2){let e=CC().$implicit,n=CC(2);Ng("x",e.w+6)("y",n.yBase-(e.promptH??0))("width",e.w)("height",e.promptH??0),sI(),Ng("x",e.w+6)("y",n.yBase-((e.promptH??0)+(e.completionH??0)))("width",e.w)("height",e.completionH??0);}}function Ye(o,t){if(o&1){let e=vC();Bf(),gl(0,"g",15),jg("mouseenter",function(i){let d=Sf(e).$implicit,u=CC(2);return _f(u.showTooltip(i,d.point))})("mousemove",function(i){let d=Sf(e).$implicit,u=CC(2);return _f(u.showTooltip(i,d.point))})("mouseleave",function(){Sf(e);let i=CC(2);return _f(i.hideTooltip())}),Rg(1,"rect",16)(2,"rect",17),aC(3,Le,1,4,":svg:rect",18)(4,Ge,2,8),ml();}if(o&2){let e=t.$implicit,n=CC(2);Ng("transform","translate("+e.xGroup+",0)"),sI(),Ng("y",n.yTop)("width",e.groupW)("height",n.yBase-n.yTop),sI(),Ng("y",n.yBase-e.costH)("width",e.w)("height",e.costH),sI(),cC(e.tokensStubH!==null?3:4);}}function We(o,t){if(o&1&&(Bf(),gl(0,"text",5),JC(1),ml()),o&2){let e=t.$implicit,n=CC(2);Ng("x",e.x)("y",n.yAxis),sI(),em(e.label);}}function je(o,t){if(o&1&&(gl(0,"div",24),JC(1),ml(),gl(2,"div",25),JC(3),ml()),o&2){let e=t.$implicit;sI(),em(e.label),sI(2),em(e.value);}}function ze(o,t){if(o&1&&(gl(0,"div",21)(1,"div",22),JC(2),ml(),gl(3,"div",23),dC(4,je,4,2,null,null,$e),ml()()),o&2){let e=CC(2);Wg("left",e.tooltip().x+12,"px")("top",e.tooltip().y+12,"px"),sI(2),em(e.tooltip().data.date),sI(2),fC(e.tooltipLines());}}function Xe(o,t){if(o&1&&(gl(0,"div",8)(1,"span",10),JC(2),ml()()),o&2){let e=CC(2);sI(2),em(e.tokenCoverageLabel());}}function Je(o,t){if(o&1&&(gl(0,"div",1),Bf(),gl(1,"svg",2),Rg(2,"line",3)(3,"line",3),dC(4,Ye,5,8,":svg:g",4,Ae),dC(6,We,2,3,":svg:text",5,He),ml(),aC(8,ze,6,5,"div",6),Vf(),gl(9,"div",7)(10,"div",8),Rg(11,"span",9),gl(12,"span",10),JC(13,"Cost (per day)"),ml(),gl(14,"span",11),JC(15),ml()(),gl(16,"div",8),Rg(17,"span",12),gl(18,"span",10),JC(19,"Prompt tokens"),ml()(),gl(20,"div",8),Rg(21,"span",13),gl(22,"span",10),JC(23,"Completion tokens"),ml()(),gl(24,"div",8),Rg(25,"span",14),gl(26,"span",10),JC(27,"Tokens missing"),ml()(),gl(28,"div",8)(29,"span",10),JC(30,"Tokens scale"),ml(),gl(31,"span",11),JC(32),ml()(),aC(33,Xe,3,1,"div",8),ml()()),o&2){let e=CC();sI(),Ng("viewBox",e.viewBox),sI(),Ng("y1",e.yTop)("x2",720)("y2",e.yTop),sI(),Ng("y1",e.yBase)("x2",720)("y2",e.yBase),sI(),fC(e.bars()),sI(2),fC(e.axisLabels()),sI(2),cC(e.tooltip().visible&&e.tooltip().data?8:-1),sI(7),Dl("max ",e.maxCostLabel()),sI(17),Dl("max ",e.maxTokensLabel()),sI(),cC(e.tokenCoverageLabel()?33:-1);}}var j=class o{points=[];width=720;height=240;paddingX=12;paddingY=16;bottomAxisH=48;viewBox=`0 0 ${this.width} ${this.height}`;innerW=this.width-this.paddingX*2;innerH=this.height-this.paddingY*2-this.bottomAxisH;barGap=6;groupGap=14;safePoints=TT(()=>(this.points??[]).filter(t=>!!t.date));maxCost=TT(()=>Math.max(0,...this.safePoints().map(t=>t.cost??0)));maxTokens=TT(()=>{let t=this.safePoints().map(e=>{let n=e.promptTokens??null,i=e.completionTokens??null;return n===null&&i===null?null:(n??0)+(i??0)}).filter(e=>e!==null);return Math.max(0,...t)});tokenCoverageLabel=TT(()=>{let t=this.safePoints();return t.length===0?"":`Tokens available for ${t.filter(n=>n.promptTokens!==null||n.completionTokens!==null).length}/${t.length} days`});maxCostLabel=TT(()=>"$"+(new $b("en-US").transform(this.maxCost(),"1.2-2")??"0.00"));maxTokensLabel=TT(()=>new $b("en-US").transform(this.maxTokens(),"1.0-2")??"0");tooltip=Wi({visible:false,x:0,y:0,data:null});toTooltipData(t){let e=t.promptTokens,n=t.completionTokens,i=e===null&&n===null?null:(e??0)+(n??0);return {date:t.date,cost:t.cost??0,promptTokens:e,completionTokens:n,totalTokens:i,callCount:t.callCount??0}}showTooltip(t,e){let i=t.currentTarget?.closest(".chart")?.getBoundingClientRect(),d=i?t.clientX-i.left:t.clientX,u=i?t.clientY-i.top:t.clientY,f=320,k=170,U=12,C=i?Math.max(0,i.width-f-U):d,B=i?Math.max(0,i.height-k-U):u,F=i?Math.min(Math.max(0,d),C):d,ne=i?Math.min(Math.max(0,u),B):u;this.tooltip.set({visible:true,x:F,y:ne,data:this.toTooltipData(e)});}hideTooltip(){this.tooltip.update(t=>z$1(P({},t),{visible:false}));}formatTokens(t){return t===null?"\u2014":new $b("en-US").transform(t,"1.0-2")??"0"}formatCost(t){return "$"+(new $b("en-US").transform(t??0,"1.2-2")??"0.00")}tooltipLines=TT(()=>{let t=this.tooltip(),e=t.data;return !t.visible||!e?[]:[{label:"Cost",value:this.formatCost(e.cost)},{label:"Prompt tokens",value:this.formatTokens(e.promptTokens)},{label:"Completion tokens",value:this.formatTokens(e.completionTokens)},{label:"Total tokens",value:this.formatTokens(e.totalTokens)},{label:"Calls",value:`${e.callCount}`}]});bars=TT(()=>{let t=this.safePoints(),e=t.length;if(e===0)return [];let n=(this.innerW-(e-1)*this.groupGap)/e,i=Math.max(2,n),d=(i-this.barGap)/2,u=Math.max(1,d),f=this.maxCost()||1,k=this.maxTokens()||1,U=45;return t.map((C,B)=>{let F=this.paddingX+B*(i+this.groupGap),Ie=(C.cost??0)/f*this.innerH,oe=C.promptTokens,ae=C.completionTokens,Z=oe!==null||ae!==null,Ne=oe??0,Ue=ae??0,Be=Z?Ne/k*this.innerH:null,Fe=Z?Ue/k*this.innerH:null;return {date:C.date,point:C,xGroup:F,groupW:i,xCost:F,w:u,costH:Ie,xTokens:F+u+this.barGap,promptH:Be,completionH:Fe,tokensStubH:Z?null:U}})});axisLabels=TT(()=>{let t=this.safePoints(),e=t.length;if(e===0)return [];let i=Math.max(1,Math.ceil(e/8)),d=(this.innerW-(e-1)*this.groupGap)/e,u=Math.max(2,d);return t.map((f,k)=>({p:f,i:k})).filter(({i:f})=>f%i===0||f===e-1).map(({p:f,i:k})=>{let C=this.paddingX+k*(u+this.groupGap)+u/2,B=f.date.slice(5);return {x:C,label:B}})});yTop=this.paddingY;yBase=this.paddingY+this.innerH;yAxis=this.yBase+28;static \u0275fac=function(e){return new(e||o)};static \u0275cmp=jw({type:o,selectors:[["app-daily-series-chart"]],inputs:{points:"points"},decls:2,vars:1,consts:[[1,"muted"],[1,"chart"],["preserveAspectRatio","none","role","img","aria-label","Daily token and cost usage",1,"chart__svg"],["x1","0",1,"chart__grid"],[1,"chart__day"],["text-anchor","middle",1,"chart__axis-label"],[1,"chart__tooltip",3,"left","top"],[1,"chart__legend"],[1,"chart__legend-item"],["aria-hidden","true",1,"chart__legend-swatch","chart__legend-swatch--cost"],[1,"chart__legend-label"],[1,"chart__legend-value"],["aria-hidden","true",1,"chart__legend-swatch","chart__legend-swatch--prompt"],["aria-hidden","true",1,"chart__legend-swatch","chart__legend-swatch--completion"],["aria-hidden","true",1,"chart__legend-swatch","chart__legend-swatch--tokens-missing"],[1,"chart__day",3,"mouseenter","mousemove","mouseleave"],["x","0",1,"chart__hover"],["x","0",1,"chart__bar","chart__bar--cost"],[1,"chart__bar","chart__bar--tokens-missing"],[1,"chart__bar","chart__bar--prompt"],[1,"chart__bar","chart__bar--completion"],[1,"chart__tooltip"],[1,"chart__tooltip-title"],[1,"chart__tooltip-grid"],[1,"chart__tooltip-label"],[1,"chart__tooltip-value"]],template:function(e,n){e&1&&aC(0,Ve,2,0,"div",0)(1,Je,34,11,"div",1),e&2&&cC(n.safePoints().length===0?0:1);},styles:[".chart[_ngcontent-%COMP%]{display:grid;gap:.5rem;position:relative}.chart__svg[_ngcontent-%COMP%]{width:100%;height:260px;display:block;border-radius:12px;background:var(--color-bg-secondary, rgba(255, 255, 255, .72));border:1px solid var(--color-border-light, rgba(0, 0, 0, .08))}.chart__grid[_ngcontent-%COMP%]{stroke:var(--color-border-light, rgba(0, 0, 0, .08));stroke-width:1}.chart__day[_ngcontent-%COMP%]{cursor:default}.chart__hover[_ngcontent-%COMP%]{fill:transparent}.chart__day[_ngcontent-%COMP%]:hover .chart__hover[_ngcontent-%COMP%]{fill:var(--color-bg-hover, rgba(0, 0, 0, .03))}.chart__tooltip[_ngcontent-%COMP%]{position:absolute;z-index:2;min-width:220px;max-width:320px;padding:10px 12px;border-radius:12px;background:rgb(var(--color-bg-secondary-rgb, 255 255 255)/1);border:1px solid var(--color-border-light, rgba(0, 0, 0, .08));box-shadow:var(--glass-shadow, 0 8px 24px rgba(0, 0, 0, .12));pointer-events:none}.chart__tooltip-title[_ngcontent-%COMP%]{font-weight:650;margin-bottom:6px}.chart__tooltip-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr auto;column-gap:10px;row-gap:4px}.chart__tooltip-label[_ngcontent-%COMP%]{color:var(--color-text-secondary, rgba(29, 29, 31, .7));font-size:.85rem}.chart__tooltip-value[_ngcontent-%COMP%]{font-variant-numeric:tabular-nums;text-align:right}.chart__bar[_ngcontent-%COMP%]{shape-rendering:geometricPrecision;rx:2;ry:2}.chart__bar--cost[_ngcontent-%COMP%]{fill:var(--color-primary, #007aff);opacity:.85}.chart__bar--prompt[_ngcontent-%COMP%]{fill:var(--color-success, #34c759);opacity:.85}.chart__bar--completion[_ngcontent-%COMP%]{fill:var(--color-warning, #ff9500);opacity:.85}.chart__bar--tokens-missing[_ngcontent-%COMP%]{fill:transparent;stroke:var(--color-text-secondary, rgba(29, 29, 31, .55));stroke-width:1.5;stroke-dasharray:4 3}.chart__axis-label[_ngcontent-%COMP%]{fill:var(--color-text-secondary, rgba(29, 29, 31, .7));font-size:12px;font-variant-numeric:tabular-nums}.chart__legend[_ngcontent-%COMP%]{display:flex;justify-content:space-between;gap:.75rem;flex-wrap:wrap}.chart__legend-item[_ngcontent-%COMP%]{display:flex;gap:.5rem;align-items:baseline}.chart__legend-swatch[_ngcontent-%COMP%]{width:10px;height:10px;border-radius:3px;align-self:center}.chart__legend-swatch--cost[_ngcontent-%COMP%]{background:var(--color-primary, #007aff)}.chart__legend-swatch--prompt[_ngcontent-%COMP%]{background:var(--color-success, #34c759)}.chart__legend-swatch--completion[_ngcontent-%COMP%]{background:var(--color-warning, #ff9500)}.chart__legend-swatch--tokens-missing[_ngcontent-%COMP%]{background:transparent;border:1px dashed var(--color-text-secondary, rgba(29, 29, 31, .55))}.chart__legend-label[_ngcontent-%COMP%]{color:var(--color-text-secondary, rgba(29, 29, 31, .7));font-size:.85rem}.chart__legend-value[_ngcontent-%COMP%]{font-variant-numeric:tabular-nums}.muted[_ngcontent-%COMP%]{color:var(--color-text-secondary, rgba(29, 29, 31, .7))}"]})};var X=class o{http=g(vy);getTokenUsage(t){let e=new xt;return t.from&&(e=e.set("from",t.from)),t.to&&(e=e.set("to",t.to)),this.http.get("/api/token-usage",{params:e})}getTokenUsageSeries(t){let e=new xt;return t.from&&(e=e.set("from",t.from)),t.to&&(e=e.set("to",t.to)),this.http.get("/api/token-usage/series",{params:e})}static \u0275fac=function(e){return new(e||o)};static \u0275prov=x({token:o,factory:o.\u0275fac,providedIn:"root"})};function Pe(o){return `${o}`.padStart(2,"0")}function we(o){return `${o.getUTCFullYear()}-${Pe(o.getUTCMonth()+1)}-${Pe(o.getUTCDate())}`}function qe(o=new Date){return new Date(Date.UTC(o.getUTCFullYear(),o.getUTCMonth(),1))}function Ke(o=new Date){return new Date(Date.UTC(o.getUTCFullYear(),o.getUTCMonth()+1,1))}var J=class o{api=g(X);destroyRef=g(Ce);defaultFrom=we(qe());defaultTo=we(Ke());draftFilters=Wi({from:this.defaultFrom,to:this.defaultTo});appliedFilters=Wi({from:this.defaultFrom,to:this.defaultTo});loading=Wi(false);error=Wi(null);aggregation=Wi(null);seriesResponse=Wi(null);series=Wi(null);tokenDataPartial=Wi(false);aggregationByModelId=Wi(null);seriesByModelId=Wi(null);init(){this.reload();}setDraftFrom(t){this.draftFilters.update(e=>z$1(P({},e),{from:t}));}setDraftTo(t){this.draftFilters.update(e=>z$1(P({},e),{to:t}));}clearDraftFrom(){this.setDraftFrom(null);}clearDraftTo(){this.setDraftTo(null);}apply(){this.appliedFilters.set(this.draftFilters()),this.reload();}addNullableTokens(t,e){return t===null&&e===null?null:(t??0)+(e??0)}aggregateByModelId(t){let e=new Map;for(let n of t){let i=n.modelId,d=e.get(i);d?(d.promptTokens=this.addNullableTokens(d.promptTokens,n.promptTokens),d.completionTokens=this.addNullableTokens(d.completionTokens,n.completionTokens),d.totalTokens=this.addNullableTokens(d.totalTokens,n.totalTokens),d.callCount+=n.callCount??0,d.cost=(d.cost??0)+(n.cost??0)):e.set(i,{agentName:"All agents",providerName:"all",modelId:n.modelId,promptTokens:n.promptTokens,completionTokens:n.completionTokens,totalTokens:n.totalTokens,callCount:n.callCount??0,cost:n.cost??0});}return [...e.values()].sort((n,i)=>(i.totalTokens??0)-(n.totalTokens??0))}aggregateSeriesByModelId(t){let e=new Map;for(let n of t){let i=`${n.date}|${n.modelId}`,d=e.get(i);d?(d.promptTokens=this.addNullableTokens(d.promptTokens,n.promptTokens),d.completionTokens=this.addNullableTokens(d.completionTokens,n.completionTokens),d.totalTokens=this.addNullableTokens(d.totalTokens,n.totalTokens),d.callCount+=n.callCount??0,d.cost=(d.cost??0)+(n.cost??0)):e.set(i,{date:n.date,agentName:"All agents",providerName:"all",modelId:n.modelId,promptTokens:n.promptTokens,completionTokens:n.completionTokens,totalTokens:n.totalTokens,callCount:n.callCount??0,cost:n.cost??0});}return [...e.values()].sort((n,i)=>n.date<i.date?-1:1)}reload(){let{from:t,to:e}=this.appliedFilters();this.loading.set(true),this.error.set(null),Wy({aggregation:this.api.getTokenUsage({from:t,to:e}),series:this.api.getTokenUsageSeries({from:t,to:e})}).pipe(U(this.destroyRef)).subscribe({next:({aggregation:n,series:i})=>{this.aggregation.set(n),this.seriesResponse.set(i);let d=i.points??[];this.series.set(d),this.tokenDataPartial.set(n.tokenDataPartial||i.tokenDataPartial);let u=this.aggregateByModelId(n.models??[]);this.aggregationByModelId.set(u),this.seriesByModelId.set(this.aggregateSeriesByModelId(d)),this.loading.set(false);},error:n=>{this.loading.set(false),this.aggregation.set(null),this.seriesResponse.set(null),this.series.set(null),this.tokenDataPartial.set(false),this.aggregationByModelId.set(null),this.seriesByModelId.set(null),this.error.set(n instanceof Error?n.message:"Failed to load token usage");}});}static \u0275fac=function(e){return new(e||o)};static \u0275prov=x({token:o,factory:o.\u0275fac,providedIn:"root"})};var q=function(){throw new Error("DON'T USE this INSIDE A FUNCTION CALLED BY | call OR | apply IT MUST BE A PURE FUNCTION!")},De=typeof Proxy!="function"?Object.seal({}):new Proxy({},{get:q,set:q,deleteProperty:q,has:q}),K=class o{transform(t,e){if(typeof e!="function")throw new TypeError("You must pass a PURE function to | call");return e?.call(De,t)}static \u0275fac=function(e){return new(e||o)};static \u0275pipe=On({name:"call",type:o,pure:true})},Q=class o{transform(t,...e){if(typeof t!="function")throw new TypeError("You must use | apply on a PURE function");return t.apply(De,e)}static \u0275fac=function(e){return new(e||o)};static \u0275pipe=On({name:"apply",type:o,pure:true})};function Qe(o,t){o&1&&(Cs(0,"div",23),JC(1," Partial data \u2014 token counts may not cover the full period "),hl());}function Ze(o,t){o&1&&(Cs(0,"div",24),JC(1," No token data collected for this period "),hl());}function et(o,t){if(o&1&&(Cs(0,"div",19)(1,"div",20)(2,"div",21),JC(3,"Total tokens"),hl(),Cs(4,"div",22),JC(5),gT(6,"call"),hl()(),Cs(7,"div",20)(8,"div",21),JC(9,"Total calls"),hl(),Cs(10,"div",22),JC(11),hl()(),Cs(12,"div",20)(13,"div",21),JC(14,"Total cost"),hl(),Cs(15,"div",22),JC(16),gT(17,"apply"),hl()()(),aC(18,Qe,2,0,"div",23),aC(19,Ze,2,0,"div",24)),o&2){let e=CC();sI(5),em(vT(6,5,e.totalRow().totalTokens,e.formatTokenValue)),sI(6),em(e.totalRow().callCount),sI(5),em(DT(17,8,e.formatCostValue,e.isMissingPeriod(),e.totalRow().cost)),sI(2),cC(e.isPartialPeriod()?18:-1),sI(),cC(e.isMissingPeriod()?19:-1);}}function tt(o,t){o&1&&(Cs(0,"div",16)(1,"div",25),JC(2,"Loading token usage\u2026"),hl()());}function nt(o,t){if(o&1&&(Cs(0,"div",17)(1,"div",26),JC(2,"Failed to load"),hl(),Cs(3,"div",25),JC(4),hl()()),o&2){let e=CC();sI(4),em(e.state.error());}}function ot(o,t){o&1&&(Cs(0,"div",16)(1,"div",26),JC(2,"No data"),hl(),Cs(3,"div",25),JC(4,"No token usage recorded yet for this period."),hl()());}function at(o,t){if(o&1&&(Cs(0,"div",32)(1,"div",29),JC(2),hl(),Cs(3,"div",29),JC(4),hl(),Cs(5,"div",29),JC(6),hl(),Cs(7,"div",30),JC(8),gT(9,"call"),hl(),Cs(10,"div",30),JC(11),gT(12,"call"),hl(),Cs(13,"div",30),JC(14),gT(15,"call"),hl(),Cs(16,"div",30),JC(17),hl(),Cs(18,"div",30),JC(19),gT(20,"apply"),hl()()),o&2){let e=t.$implicit,n=CC(2);sI(2),em(e.agentName),sI(2),em(e.providerName),sI(2),em(e.modelId),sI(2),em(vT(9,8,e.promptTokens,n.formatTokenValue)),sI(3),em(vT(12,11,e.completionTokens,n.formatTokenValue)),sI(3),em(vT(15,14,e.totalTokens,n.formatTokenValue)),sI(3),em(e.callCount),sI(2),Dl(" ",DT(20,17,n.formatCostValue,n.isMissingPeriod(),e.cost)," ");}}function it(o,t){if(o&1&&(Cs(0,"div",33)(1,"div",29),JC(2),hl(),Cs(3,"div",29),JC(4),hl(),Cs(5,"div",29),JC(6),hl(),Cs(7,"div",30),JC(8),gT(9,"call"),hl(),Cs(10,"div",30),JC(11),gT(12,"call"),hl(),Cs(13,"div",30),JC(14),gT(15,"call"),hl(),Cs(16,"div",30),JC(17),hl(),Cs(18,"div",30),JC(19),gT(20,"apply"),hl()()),o&2){let e=CC(2);sI(2),em(e.totalRow().agentName),sI(2),em(e.totalRow().providerName),sI(2),em(e.totalRow().modelId),sI(2),em(vT(9,8,e.totalRow().promptTokens,e.formatTokenValue)),sI(3),Dl(" ",vT(12,11,e.totalRow().completionTokens,e.formatTokenValue)," "),sI(3),em(vT(15,14,e.totalRow().totalTokens,e.formatTokenValue)),sI(3),em(e.totalRow().callCount),sI(2),Dl(" ",DT(20,17,e.formatCostValue,e.isMissingPeriod(),e.totalRow().cost)," ");}}function rt(o,t){if(o&1&&(Cs(0,"div",18)(1,"section",16)(2,"div",26),JC(3,"Summary"),hl(),Cs(4,"div",27)(5,"div",28)(6,"div",29),JC(7,"agentName"),hl(),Cs(8,"div",29),JC(9,"providerName"),hl(),Cs(10,"div",29),JC(11,"modelId"),hl(),Cs(12,"div",30),JC(13,"promptTokens"),hl(),Cs(14,"div",30),JC(15,"completionTokens"),hl(),Cs(16,"div",30),JC(17,"totalTokens"),hl(),Cs(18,"div",30),JC(19,"callCount"),hl(),Cs(20,"div",30),JC(21,"cost"),hl()(),Cs(22,"div",31),dC(23,at,21,21,"div",32,iC().trackRow,true),aC(25,it,21,21,"div",33),hl()()(),Cs(26,"section",16)(27,"div",26),JC(28,"Daily series"),hl(),Ag(29,"app-daily-series-chart",34),hl()()),o&2){let e=CC();sI(23),fC(e.rows()),sI(2),cC(e.totalRow()?25:-1),sI(4),xg("points",e.chartPoints());}}var Ee="\u2014",Oe=class o{location=g(Om);state=g(J);view=Wi("byModel");rowsByAgent=TT(()=>this.state.aggregation()?.models??[]);totalRow=TT(()=>this.state.aggregation()?.total??null);rowsByModel=TT(()=>this.state.aggregationByModelId()??[]);chartPointsByAgent=TT(()=>{let t=this.state.series()??[];return this.aggregateDailyPoints(t)});chartPointsByModel=TT(()=>{let t=this.state.seriesByModelId()??[];return this.aggregateDailyPoints(t)});chartPoints=TT(()=>this.view()==="byAgent"?this.chartPointsByAgent():this.chartPointsByModel());rows=TT(()=>this.view()==="byAgent"?this.rowsByAgent():this.rowsByModel());isEmpty=TT(()=>{let t=this.state.aggregation();return t?(t.models?.length??0)===0&&(t.total?.callCount??0)===0:false});ngOnInit(){this.state.init();}onFromChange(t){this.state.setDraftFrom(t||null);}onToChange(t){this.state.setDraftTo(t||null);}clearFrom(){this.state.clearDraftFrom();}clearTo(){this.state.clearDraftTo();}apply(){this.state.apply();}aggregateDailyPoints(t){let e=new Map;for(let n of t){let i=e.get(n.date);if(!i)e.set(n.date,{date:n.date,promptTokens:n.promptTokens,completionTokens:n.completionTokens,cost:n.cost??0,callCount:n.callCount??0});else {let d=(u,f)=>u===null&&f===null?null:(u??0)+(f??0);i.promptTokens=d(i.promptTokens,n.promptTokens),i.completionTokens=d(i.completionTokens,n.completionTokens),i.cost=(i.cost??0)+(n.cost??0),i.callCount=(i.callCount??0)+(n.callCount??0);}}return [...e.values()].sort((n,i)=>n.date<i.date?-1:1)}trackRow(t,e){return `${e.agentName}|${e.providerName}|${e.modelId}`}isMissingPeriod=TT(()=>{if(this.state.loading())return false;let t=this.state.aggregation()?.total;return t?t.totalTokens===null&&(t.cost===null||t.cost===void 0):false});isPartialPeriod=TT(()=>!this.isMissingPeriod()&&this.state.tokenDataPartial());navigateBack(){this.location.back();}formatTokenValue(t){return t===null?Ee:new $b("en-US").transform(t,"1.0-2")??"0"}formatCostValue(t,e){return t?Ee:"$"+(new $b("en-US").transform(e??0,"1.2-2")??"0.00")}static \u0275fac=function(e){return new(e||o)};static \u0275cmp=jw({type:o,selectors:[["app-token-usage"]],decls:41,vars:8,consts:[[1,"page"],[1,"page__header"],[1,"page__title-block"],["mat-icon-button","","title","Back",3,"click"],[1,"page__title"],[1,"page__subtitle"],[1,"filters"],[1,"filters__field"],[1,"filters__label"],[1,"filters__control"],["type","date",1,"filters__input",3,"ngModelChange","ngModel"],["type","button",1,"filters__clear",3,"click","disabled"],[1,"filters__select",3,"ngModelChange","ngModel"],["value","byModel"],["value","byAgent"],["type","button",1,"filters__apply",3,"click","disabled"],[1,"card"],[1,"card","card--error"],[1,"grid"],[1,"kpis"],[1,"kpi"],[1,"kpi__label"],[1,"kpi__value"],["title","Some calls in this period were recorded before token tracking was enabled. Token counts reflect only the portion where data was collected.",1,"hint"],["title","No token usage data was collected for this period.",1,"hint"],[1,"muted"],[1,"card__title"],[1,"table"],[1,"table__head"],[1,"table__cell"],[1,"table__cell","table__cell--num"],[1,"table__body"],[1,"table__row"],[1,"table__row","table__row--total"],[3,"points"]],template:function(e,n){e&1&&(Cs(0,"section",0)(1,"header",1)(2,"div",2)(3,"button",3),Lg("click",function(){return n.navigateBack()}),Cs(4,"mat-icon"),JC(5,"chevron_left"),hl()(),Cs(6,"div")(7,"h1",4),JC(8,"Token Usage"),hl(),Cs(9,"p",5),JC(10,"Track prompt and completion token usage by agent and model."),hl()()(),Cs(11,"div",6)(12,"label",7)(13,"span",8),JC(14,"From"),hl(),Cs(15,"div",9)(16,"input",10),Lg("ngModelChange",function(d){return n.onFromChange(d)}),hl(),ZI(),Cs(17,"button",11),Lg("click",function(){return n.clearFrom()}),JC(18," Clear "),hl()()(),Cs(19,"label",7)(20,"span",8),JC(21,"To"),hl(),Cs(22,"div",9)(23,"input",10),Lg("ngModelChange",function(d){return n.onToChange(d)}),hl(),ZI(),Cs(24,"button",11),Lg("click",function(){return n.clearTo()}),JC(25," Clear "),hl()()(),Cs(26,"label",7)(27,"span",8),JC(28,"View"),hl(),Cs(29,"select",12),Lg("ngModelChange",function(d){return n.view.set(d)}),Cs(30,"option",13),JC(31,"By model"),hl(),Cs(32,"option",14),JC(33,"By agent"),hl()(),ZI(),hl(),Cs(34,"button",15),Lg("click",function(){return n.apply()}),JC(35,"Apply"),hl()()(),aC(36,et,20,12),aC(37,tt,3,0,"div",16)(38,nt,5,1,"div",17)(39,ot,5,0,"div",16)(40,rt,30,2,"div",18),hl()),e&2&&(sI(16),xg("ngModel",n.state.draftFilters().from),QI(),sI(),xg("disabled",!n.state.draftFilters().from),sI(6),xg("ngModel",n.state.draftFilters().to),QI(),sI(),xg("disabled",!n.state.draftFilters().to),sI(5),xg("ngModel",n.view()),QI(),sI(5),xg("disabled",n.state.loading()),sI(2),cC(n.totalRow()?36:-1),sI(),cC(n.state.loading()?37:n.state.error()?38:n.isEmpty()?39:40));},dependencies:[ti,Qn,ei,Ye$1,At,Zn,cn,j,hr,Gn,yt,wt,K,Q],styles:[".page[_ngcontent-%COMP%]{padding:1.5rem;color:var(--color-text, #1d1d1f)}.page__header[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:1.5rem;margin-bottom:1rem}.page__title-block[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.75rem}.page__title[_ngcontent-%COMP%]{margin:0;font-size:1.25rem;font-weight:650}.page__subtitle[_ngcontent-%COMP%]{margin:.25rem 0 0;color:var(--color-text-secondary, rgba(29, 29, 31, .7));font-size:.95rem}.filters[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:flex-end;gap:.75rem}.filters__field[_ngcontent-%COMP%]{display:grid;gap:.25rem}.filters__label[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-secondary, rgba(29, 29, 31, .7))}.filters__control[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem}.filters__input[_ngcontent-%COMP%], .filters__select[_ngcontent-%COMP%]{height:34px;padding:0 .5rem;border-radius:8px;border:1px solid var(--color-border, rgba(0, 0, 0, .12));background:var(--color-bg-secondary, rgba(255, 255, 255, .72));color:var(--color-text, #1d1d1f)}.filters__apply[_ngcontent-%COMP%], .filters__clear[_ngcontent-%COMP%]{height:34px;padding:0 .75rem;border-radius:8px;border:1px solid var(--color-border, rgba(0, 0, 0, .12));background:var(--color-bg-secondary, rgba(255, 255, 255, .72));color:var(--color-text, #1d1d1f);cursor:pointer}.kpis[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem;margin:.75rem 0 1rem}@media(max-width:900px){.kpis[_ngcontent-%COMP%]{grid-template-columns:1fr}}.kpi[_ngcontent-%COMP%]{border-radius:14px;padding:.75rem 1rem;background:var(--glass-bg, rgba(255, 255, 255, .72));border:1px solid var(--glass-border, rgba(255, 255, 255, .18));box-shadow:var(--glass-shadow, 0 8px 24px rgba(0, 0, 0, .08))}.kpi__label[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-secondary, rgba(29, 29, 31, .7))}.kpi__value[_ngcontent-%COMP%]{margin-top:.25rem;font-size:1.2rem;font-weight:650;font-variant-numeric:tabular-nums}.filters__apply[_ngcontent-%COMP%]{border-color:var(--color-primary, #007aff);background:var(--color-primary, #007aff);color:var(--color-text-inverse, #ffffff)}.filters__apply[_ngcontent-%COMP%]:disabled, .filters__clear[_ngcontent-%COMP%]:disabled{opacity:.6;cursor:not-allowed}.grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:1.5fr 1fr;gap:1rem;align-items:start}@media(max-width:1100px){.grid[_ngcontent-%COMP%]{grid-template-columns:1fr}}.card[_ngcontent-%COMP%]{border-radius:14px;padding:1rem;background:var(--glass-bg, rgba(255, 255, 255, .72));border:1px solid var(--glass-border, rgba(255, 255, 255, .18));box-shadow:var(--glass-shadow, 0 8px 24px rgba(0, 0, 0, .08))}.card--error[_ngcontent-%COMP%]{border-color:var(--color-error, #ff3b30)}.card__title[_ngcontent-%COMP%]{font-weight:650;margin-bottom:.75rem}.muted[_ngcontent-%COMP%]{color:var(--color-text-secondary, rgba(29, 29, 31, .7))}.table[_ngcontent-%COMP%]{overflow-x:auto}.table__head[_ngcontent-%COMP%], .table__row[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr 2fr 1fr 1fr 1fr .7fr 1fr;gap:.5rem;align-items:center}.table__head[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-secondary, rgba(29, 29, 31, .7));padding:.25rem 0;border-bottom:1px solid var(--color-border-light, rgba(0, 0, 0, .08))}.table__row[_ngcontent-%COMP%]{padding:.5rem 0;border-bottom:1px solid var(--color-border-light, rgba(0, 0, 0, .08))}.table__row--total[_ngcontent-%COMP%]{font-weight:650;background:var(--color-bg-hover, rgba(0, 0, 0, .03));border-radius:10px;padding:.6rem .5rem;border-bottom:none;margin-top:.5rem}.table__cell[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.table__cell--num[_ngcontent-%COMP%]{text-align:right;font-variant-numeric:tabular-nums}.hint[_ngcontent-%COMP%]{margin:.25rem 0 1rem;color:var(--color-text-secondary, rgba(29, 29, 31, .7));font-size:.85rem}"],changeDetection:1})};export{Oe as TokenUsageComponent};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import {v}from'./chunk-D4_R7aqN.js';import {R,q,J}from'./chunk-BYg1TwUC.js';import {g,ao as V,G,C as Ce$1,W as Wi,F,T as TT,cd as Wf,b as U,z as z$1,a as P$1,j as jw,k as Cs,n as Lg,J as JC,m as hl,o as aC,u as sI,a8 as em,v as cC,a9 as vC,q as dC,a4 as lC,a3 as ZI,A as Ag,ac as CC,x as xg,a6 as QI,w as fC,a5 as Dl,cH as iC,aa as Sf,ab as _f,b$ as UC,N as Ng}from'./main-JTU33H5D.js';import'./chunk-C1RU8zia.js';import {k as _t,b as _e$1,o as z,n as ni,J as Jn,Q as Qn,e as ei,Y as Ye,A as At,m as mn,Z as Zn,l as Xn,C as Cn,E as En}from'./chunk-DuXr-yGB.js';import'./chunk-TkSR4UzV.js';import'./chunk-BK_05kmN.js';import'./chunk-DeXXr4BL.js';import'./chunk-DK1hp0WW.js';function se(i,t){i&1&&(Cs(0,"p",5),JC(1,"Loading\u2026"),hl());}function ce(i,t){if(i&1&&(Cs(0,"label",23),Ag(1,"input",24),ZI(),Cs(2,"span"),JC(3),hl()()),i&2){let e=t.$implicit,o=CC(3);sI(),xg("formControl",o.scopeControl)("value",e.value)("disabled",e.value==="namespace"&&!o.isAdmin()),QI(),sI(2),em(e.label);}}function de(i,t){if(i&1&&(Cs(0,"fieldset",8)(1,"legend",22),JC(2,"Configuration scope"),hl(),dC(3,ce,4,4,"label",23,iC().trackByScope,true),hl()),i&2){let e=CC(2);xg("disabled",e.isEditMode()),sI(3),fC(e.scopeOptions);}}function ue(i,t){if(i&1&&(Cs(0,"option",13),JC(1),hl()),i&2){let e=t.$implicit,o=CC(2);xg("value",e),sI(),em(o.authTypeLabel[e]);}}function pe(i,t){i&1&&JC(0," Leave a field unchanged to keep the stored credential. ");}function he(i,t){i&1&&(Cs(0,"span",11),JC(1,"*"),hl());}function me(i,t){if(i&1&&(Cs(0,"p",28),JC(1),hl()),i&2){let e=CC(2).$implicit;xg("id","as-hint-"+e.key),sI(),em(e.hint);}}function ge(i,t){if(i&1&&(Ag(0,"input",27),ZI(),aC(1,me,2,2,"p",28)),i&2){let e=CC().$implicit;UC("auth-setting-form__input"+(e.secret?" auth-setting-form__input--secret":"")),xg("id","as-cred-"+e.key)("type",e.secret?"password":"text")("placeholder",e.placeholder)("formControl",t)("autocomplete",e.secret?"new-password":"off"),Ng("aria-describedby",e.hint?"as-hint-"+e.key:null),QI(),sI(),cC(e.hint?1:-1);}}function Ce(i,t){if(i&1&&(Cs(0,"div",9)(1,"label",26),JC(2),aC(3,he,2,0,"span",11),hl(),aC(4,ge,2,9),hl()),i&2){let e,o=t.$implicit,l=CC(3);sI(),xg("for","as-cred-"+o.key),sI(),Dl(" ",o.label," "),sI(),cC(o.required?3:-1),sI(),cC((e=l.controlForField(o.key))?4:-1,e);}}function fe(i,t){if(i&1&&(Cs(0,"fieldset",18)(1,"legend",22),JC(2,"Credentials"),hl(),Cs(3,"p",25),JC(4," Values are stored encrypted and masked on read. "),aC(5,pe,1,0),hl(),dC(6,Ce,5,4,"div",9,iC().trackByField,true),hl()),i&2){let e=CC(2);sI(5),cC(e.isEditMode()?5:-1),sI(),fC(e.credentialFields());}}function ye(i,t){if(i&1){let e=vC();Cs(0,"form",7),Lg("ngSubmit",function(){Sf(e);let l=CC();return _f(l.submit())}),aC(1,de,5,1,"fieldset",8),Cs(2,"div",9)(3,"label",10),JC(4,"Auth type "),Cs(5,"span",11),JC(6,"*"),hl()(),Cs(7,"select",12),dC(8,ue,2,2,"option",13,lC),hl(),ZI(),hl(),Cs(10,"div",9)(11,"label",14),JC(12,"Name "),Cs(13,"span",11),JC(14,"*"),hl()(),Ag(15,"input",15),ZI(),hl(),Cs(16,"div",9)(17,"label",16),JC(18,"Description"),hl(),Ag(19,"input",17),ZI(),hl(),aC(20,fe,8,1,"fieldset",18),Cs(21,"div",19)(22,"button",20),JC(23),hl(),Cs(24,"button",21),Lg("click",function(){Sf(e);let l=CC();return _f(l.cancel())}),JC(25,"Cancel"),hl()()();}if(i&2){let e=CC();xg("formGroup",e.form),sI(),cC(e.isPlatformMode?-1:1),sI(6),xg("formControl",e.authTypeControl),QI(),sI(),fC(e.authTypeOptions),sI(7),xg("formControl",e.nameControl),QI(),sI(4),xg("formControl",e.descriptionControl),QI(),sI(),cC(e.credentialFields().length>0?20:-1),sI(2),xg("disabled",e.form.invalid||e.isSubmitting()),sI(),Dl(" ",e.isEditMode()?"Save changes":"Create"," ");}}var _e=new Set(["namespace","userOnNs","userGlobal"]),P=Object.freeze({platform:"Platform (read-only)",namespace:"Namespace configuration",userOnNs:"Personal \u2014 this namespace only",userGlobal:"Personal \u2014 all namespaces"}),Se={ApiKeyAuthSetting:[{key:"apiKey",label:"API Key",placeholder:"sk-\u2026",secret:true,required:false}],BasicAuthAuthSetting:[{key:"username",label:"Username",placeholder:"user@example.com",secret:false,required:false},{key:"password",label:"Password",placeholder:"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022",secret:true,required:false}],BearerTokenAuthSetting:[{key:"token",label:"Bearer token",placeholder:"eyJ\u2026",secret:true,required:false}],OAuthDiscoverableAuthSetting:[{key:"discoveryUrl",label:"Discovery URL",placeholder:"https://\u2026/.well-known/openid-configuration",secret:false,required:false},{key:"clientId",label:"Client ID",placeholder:"",secret:false,required:false},{key:"clientSecret",label:"Client secret",placeholder:"",secret:true,required:false},{key:"scopes",label:"Scopes",placeholder:"",hint:"Space-separated OAuth scopes to request (e.g. openid profile email). Check your provider's documentation for the exact values.",secret:false,required:false}],OAuthCustomAuthSetting:[{key:"authorizationUrl",label:"Authorization URL",placeholder:"https://\u2026/authorize",secret:false,required:false},{key:"tokenUrl",label:"Token URL",placeholder:"https://\u2026/token",secret:false,required:false},{key:"clientId",label:"Client ID",placeholder:"",secret:false,required:false},{key:"clientSecret",label:"Client secret",placeholder:"",secret:true,required:false},{key:"scopes",label:"Scopes",placeholder:"",hint:"Space-separated OAuth scopes to request (e.g. openid profile email). Check your provider's documentation for the exact values.",secret:false,required:false}],OAuthRegisteredAuthSetting:[{key:"authorizationUrl",label:"Authorization URL",placeholder:"https://\u2026/authorize",secret:false,required:false},{key:"tokenUrl",label:"Token URL",placeholder:"https://\u2026/token",secret:false,required:false},{key:"clientId",label:"Client ID",placeholder:"",secret:false,required:false},{key:"clientSecret",label:"Client secret",placeholder:"",secret:true,required:false},{key:"scopes",label:"Scopes",placeholder:"",hint:"Space-separated OAuth scopes to request (e.g. openid profile email). Check your provider's documentation for the exact values.",secret:false,required:false}],OAuthMcpDiscoverableAuthSetting:[{key:"resourceUrl",label:"Resource URL",placeholder:"https://mcp.example.com",hint:"Use the base URL exactly as documented by your provider \u2014 do not append a path suffix. Examples: https://mcp.hubspot.com (HubSpot), https://mcp.atlassian.com/v1/mcp (Atlassian).",secret:false,required:false},{key:"clientId",label:"Client ID",placeholder:"",hint:"Leave empty to let the server register an OAuth client automatically (RFC 7591 dynamic registration). Fill in only if you have a pre-registered client ID from your provider.",secret:false,required:false},{key:"clientSecret",label:"Client secret",placeholder:"",secret:true,required:false},{key:"scopes",label:"Scopes",placeholder:"",hint:"Leave empty in most cases \u2014 the MCP server declares the required scopes itself. Fill in only if your provider explicitly requires client-declared scopes.",secret:false,required:false}]},le=class i{route=g(V);router=g(G);destroyRef=g(Ce$1);state=g(R);namespaceRole=g(v);namespaceId=this.route.snapshot.params.namespaceId;isPlatformMode=this.namespaceId===void 0;isAdmin=this.isPlatformMode?Wi(true):F(this.namespaceRole.isAdminOfNamespace$(this.namespaceId),{initialValue:false});authTypeOptions=q;authTypeLabel=J;scopeOptions=[{value:"namespace",label:P.namespace},{value:"userOnNs",label:P.userOnNs},{value:"userGlobal",label:P.userGlobal}];nameControl=new _t("",{nonNullable:true,validators:[_e$1.required,_e$1.minLength(1)]});descriptionControl=new _t(null);authTypeControl=new _t("ApiKeyAuthSetting",{nonNullable:true,validators:[_e$1.required]});scopeControl=new _t("namespace",{nonNullable:true});form=new z({name:this.nameControl,description:this.descriptionControl,authType:this.authTypeControl,scope:this.scopeControl});apiKeyControl=new _t("",{nonNullable:true});usernameControl=new _t("",{nonNullable:true});passwordControl=new _t("",{nonNullable:true});tokenControl=new _t("",{nonNullable:true});discoveryUrlControl=new _t("",{nonNullable:true});authorizationUrlControl=new _t("",{nonNullable:true});tokenUrlControl=new _t("",{nonNullable:true});clientIdControl=new _t("",{nonNullable:true});clientSecretControl=new _t("",{nonNullable:true});scopesControl=new _t("",{nonNullable:true});resourceUrlControl=new _t("",{nonNullable:true});selectedAuthType=F(this.authTypeControl.valueChanges,{initialValue:this.authTypeControl.value});credentialFields=TT(()=>Se[this.selectedAuthType()]);isEditMode=Wi(false);isSubmitting=Wi(false);isLoading=Wi(false);existingConfig=null;initialCredentials={};constructor(){this.isPlatformMode||Wf(()=>{this.isAdmin()||this.isEditMode()||this.scopeControl.value==="namespace"&&this.scopeControl.setValue("userOnNs");});}ngOnInit(){this.namespaceId&&this.state.setNamespace(this.namespaceId);let t=this.route.snapshot.paramMap,e=this.route.snapshot.queryParamMap,o=t.get("authSettingId");if(o){this.isEditMode.set(true),this.scopeControl.disable(),this.authTypeControl.disable(),this.loadConfig(o);return}if(this.isPlatformMode){this.scopeControl.setValue("platform"),this.scopeControl.disable();return}let l=this.parseScope(e.get("scope"));this.scopeControl.setValue(l);let v=e.get("template");v&&this.hydrateFromTemplate(v);}parseScope(t){return t&&_e.has(t)?t:"namespace"}deriveScopeFromConfig(t){return !t.userId&&!t.namespaceId?"platform":t.userId?t.namespaceId?"userOnNs":"userGlobal":"namespace"}loadConfig(t){this.isLoading.set(true),this.state.getById(t).pipe(U(this.destroyRef)).subscribe({next:e=>{this.existingConfig=e,this.scopeControl.setValue(this.deriveScopeFromConfig(e)),this.applyConfigToForm(e),this.isLoading.set(false);},error:()=>{this.isLoading.set(false),console.warn(`[AuthSettingForm] Could not load auth setting '${t}' \u2014 navigating back`),this.navigateBack();}});}hydrateFromTemplate(t){this.isLoading.set(true),this.state.getById(t).pipe(U(this.destroyRef)).subscribe({next:e=>{this.nameControl.setValue(e.name),this.descriptionControl.setValue(e.description??null),this.authTypeControl.setValue(e.authType),this.clearCredentialControls(),this.initialCredentials={},this.isLoading.set(false),this.router.navigate([],{relativeTo:this.route,queryParams:{template:null,templateScope:null},queryParamsHandling:"merge",replaceUrl:true});},error:e=>{console.warn(`[AuthSettingForm] Could not hydrate from template ${t}:`,e),this.isLoading.set(false),this.router.navigate([],{relativeTo:this.route,queryParams:{template:null,templateScope:null},queryParamsHandling:"merge",replaceUrl:true});}});}applyConfigToForm(t){switch(this.nameControl.setValue(t.name),this.descriptionControl.setValue(t.description??null),this.authTypeControl.setValue(t.authType),this.clearCredentialControls(),this.initialCredentials={},t.authType){case "ApiKeyAuthSetting":{let e=t.apiKey??"";this.apiKeyControl.setValue(e),this.initialCredentials.apiKey=e;break}case "BasicAuthAuthSetting":{let e=t,o=e.username??"",l=e.password??"";this.usernameControl.setValue(o),this.passwordControl.setValue(l),this.initialCredentials.username=o,this.initialCredentials.password=l;break}case "BearerTokenAuthSetting":{let e=t.token??"";this.tokenControl.setValue(e),this.initialCredentials.token=e;break}case "OAuthDiscoverableAuthSetting":{let e=t;this.discoveryUrlControl.setValue(e.discoveryUrl??""),this.clientIdControl.setValue(e.clientId??""),this.clientSecretControl.setValue(e.clientSecret??""),this.scopesControl.setValue(e.scopes??""),this.initialCredentials.discoveryUrl=e.discoveryUrl??"",this.initialCredentials.clientId=e.clientId??"",this.initialCredentials.clientSecret=e.clientSecret??"",this.initialCredentials.scopes=e.scopes??"";break}case "OAuthCustomAuthSetting":{let e=t;this.authorizationUrlControl.setValue(e.authorizationUrl??""),this.tokenUrlControl.setValue(e.tokenUrl??""),this.clientIdControl.setValue(e.clientId??""),this.clientSecretControl.setValue(e.clientSecret??""),this.scopesControl.setValue(e.scopes??""),this.initialCredentials.authorizationUrl=e.authorizationUrl??"",this.initialCredentials.tokenUrl=e.tokenUrl??"",this.initialCredentials.clientId=e.clientId??"",this.initialCredentials.clientSecret=e.clientSecret??"",this.initialCredentials.scopes=e.scopes??"";break}case "OAuthRegisteredAuthSetting":{let e=t;this.authorizationUrlControl.setValue(e.authorizationUrl??""),this.tokenUrlControl.setValue(e.tokenUrl??""),this.clientIdControl.setValue(e.clientId??""),this.clientSecretControl.setValue(e.clientSecret??""),this.scopesControl.setValue(e.scopes??""),this.initialCredentials.authorizationUrl=e.authorizationUrl??"",this.initialCredentials.tokenUrl=e.tokenUrl??"",this.initialCredentials.clientId=e.clientId??"",this.initialCredentials.clientSecret=e.clientSecret??"",this.initialCredentials.scopes=e.scopes??"";break}case "OAuthMcpDiscoverableAuthSetting":{let e=t;this.resourceUrlControl.setValue(e.resourceUrl??""),this.clientIdControl.setValue(e.clientId??""),this.clientSecretControl.setValue(e.clientSecret??""),this.scopesControl.setValue(e.scopes??""),this.initialCredentials.resourceUrl=e.resourceUrl??"",this.initialCredentials.clientId=e.clientId??"",this.initialCredentials.clientSecret=e.clientSecret??"",this.initialCredentials.scopes=e.scopes??"";break}}}clearCredentialControls(){this.apiKeyControl.setValue(""),this.usernameControl.setValue(""),this.passwordControl.setValue(""),this.tokenControl.setValue(""),this.discoveryUrlControl.setValue(""),this.authorizationUrlControl.setValue(""),this.tokenUrlControl.setValue(""),this.clientIdControl.setValue(""),this.clientSecretControl.setValue(""),this.scopesControl.setValue(""),this.resourceUrlControl.setValue("");}credentialValue(t,e){if(!(this.isEditMode()&&e===this.initialCredentials[t]))return e||void 0}submit(){if(this.form.invalid||this.isSubmitting())return;if(this.isEditMode()&&!this.existingConfig?.id){this.navigateBack();return}this.isSubmitting.set(true);let t=this.nameControl.value.trim(),e=this.descriptionControl.value?.trim()||void 0,o=this.authTypeControl.value,l=this.form.getRawValue().scope,v=this.isPlatformMode?null:this.namespaceId??null,w=this.buildTypedPayload(o,t,e);(this.isEditMode()&&this.existingConfig?.id?this.state.update(this.existingConfig.id,w,this.existingConfig):this.state.create(w,l,v)).pipe(U(this.destroyRef)).subscribe({next:()=>this.navigateBack(),error:()=>this.isSubmitting.set(false)});}buildTypedPayload(t,e,o){let l={name:e,description:o};switch(t){case "ApiKeyAuthSetting":return z$1(P$1({},l),{authType:"ApiKeyAuthSetting",apiKey:this.credentialValue("apiKey",this.apiKeyControl.value)});case "BasicAuthAuthSetting":return z$1(P$1({},l),{authType:"BasicAuthAuthSetting",username:this.credentialValue("username",this.usernameControl.value),password:this.credentialValue("password",this.passwordControl.value)});case "BearerTokenAuthSetting":return z$1(P$1({},l),{authType:"BearerTokenAuthSetting",token:this.credentialValue("token",this.tokenControl.value)});case "OAuthDiscoverableAuthSetting":return z$1(P$1({},l),{authType:"OAuthDiscoverableAuthSetting",discoveryUrl:this.credentialValue("discoveryUrl",this.discoveryUrlControl.value),clientId:this.credentialValue("clientId",this.clientIdControl.value),clientSecret:this.credentialValue("clientSecret",this.clientSecretControl.value),scopes:this.credentialValue("scopes",this.scopesControl.value)});case "OAuthCustomAuthSetting":return z$1(P$1({},l),{authType:"OAuthCustomAuthSetting",authorizationUrl:this.credentialValue("authorizationUrl",this.authorizationUrlControl.value),tokenUrl:this.credentialValue("tokenUrl",this.tokenUrlControl.value),clientId:this.credentialValue("clientId",this.clientIdControl.value),clientSecret:this.credentialValue("clientSecret",this.clientSecretControl.value),scopes:this.credentialValue("scopes",this.scopesControl.value)});case "OAuthRegisteredAuthSetting":return z$1(P$1({},l),{authType:"OAuthRegisteredAuthSetting",authorizationUrl:this.credentialValue("authorizationUrl",this.authorizationUrlControl.value),tokenUrl:this.credentialValue("tokenUrl",this.tokenUrlControl.value),clientId:this.credentialValue("clientId",this.clientIdControl.value),clientSecret:this.credentialValue("clientSecret",this.clientSecretControl.value),scopes:this.credentialValue("scopes",this.scopesControl.value)});case "OAuthMcpDiscoverableAuthSetting":return z$1(P$1({},l),{authType:"OAuthMcpDiscoverableAuthSetting",resourceUrl:this.credentialValue("resourceUrl",this.resourceUrlControl.value),clientId:this.credentialValue("clientId",this.clientIdControl.value),clientSecret:this.credentialValue("clientSecret",this.clientSecretControl.value),scopes:this.credentialValue("scopes",this.scopesControl.value)})}}controlForField(t){return {apiKey:this.apiKeyControl,username:this.usernameControl,password:this.passwordControl,token:this.tokenControl,discoveryUrl:this.discoveryUrlControl,authorizationUrl:this.authorizationUrlControl,tokenUrl:this.tokenUrlControl,clientId:this.clientIdControl,clientSecret:this.clientSecretControl,scopes:this.scopesControl,resourceUrl:this.resourceUrlControl}[t]}cancel(){this.navigateBack();}navigateBack(){this.isPlatformMode?this.router.navigate(["/agentos","admin","auth-settings"]):this.router.navigate(["/agentos",this.namespaceId,"auth-settings"]);}trackByScope(t,e){return e.value}trackByField(t,e){return e.key}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=jw({type:i,selectors:[["agentos-auth-setting-form"]],decls:10,vars:2,consts:[[1,"auth-setting-form"],[1,"auth-setting-form__header"],["type","button","title","Back to auth settings",1,"auth-setting-form__back",3,"click"],[1,"auth-setting-form__back-icon"],[1,"auth-setting-form__title"],[1,"auth-setting-form__loading"],[1,"auth-setting-form__form",3,"formGroup"],[1,"auth-setting-form__form",3,"ngSubmit","formGroup"],[1,"auth-setting-form__scope",3,"disabled"],[1,"auth-setting-form__field"],["for","as-auth-type",1,"auth-setting-form__label"],["aria-hidden","true"],["id","as-auth-type",1,"auth-setting-form__select",3,"formControl"],[3,"value"],["for","as-name",1,"auth-setting-form__label"],["id","as-name","type","text","placeholder","e.g. GitHub OAuth App","autocomplete","off",1,"auth-setting-form__input",3,"formControl"],["for","as-description",1,"auth-setting-form__label"],["id","as-description","type","text","placeholder","Optional \u2014 short description of this auth setting","autocomplete","off",1,"auth-setting-form__input",3,"formControl"],[1,"auth-setting-form__credentials"],[1,"auth-setting-form__actions"],["type","submit",1,"auth-setting-form__btn","auth-setting-form__btn--primary",3,"disabled"],["type","button",1,"auth-setting-form__btn",3,"click"],[1,"auth-setting-form__label"],[1,"auth-setting-form__scope-option"],["type","radio",3,"formControl","value","disabled"],[1,"auth-setting-form__credentials-hint"],[1,"auth-setting-form__label",3,"for"],[3,"id","type","placeholder","formControl","autocomplete"],[1,"auth-setting-form__field-hint",3,"id"]],template:function(e,o){e&1&&(Cs(0,"div",0)(1,"header",1)(2,"button",2),Lg("click",function(){return o.cancel()}),Cs(3,"span",3),JC(4,"\u2190"),hl(),JC(5," Auth Settings "),hl(),Cs(6,"h1",4),JC(7),hl()(),aC(8,se,2,0,"p",5)(9,ye,26,8,"form",6),hl()),e&2&&(sI(7),em(o.isEditMode()?"Edit auth setting":"New auth setting"),sI(),cC(o.isLoading()?8:9));},dependencies:[ni,Jn,Qn,ei,Ye,At,mn,Zn,Xn,Cn,En],styles:[".auth-setting-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1.5rem;padding:1.5rem;max-width:640px}.auth-setting-form__header[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.auth-setting-form__back[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.4rem;background:none;border:none;cursor:pointer;color:var(--color-text-secondary);font-size:.85rem;padding:0}.auth-setting-form__back[_ngcontent-%COMP%]:hover{color:var(--color-primary)}.auth-setting-form__back-icon[_ngcontent-%COMP%]{font-size:1rem}.auth-setting-form__title[_ngcontent-%COMP%]{font-size:1.4rem;font-weight:600;color:var(--color-text);margin:0}.auth-setting-form__loading[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:.9rem}.auth-setting-form__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1.25rem}.auth-setting-form__scope[_ngcontent-%COMP%]{border:1px solid var(--color-border);border-radius:8px;padding:.75rem 1rem;display:flex;flex-direction:column;gap:.5rem}.auth-setting-form__scope[_ngcontent-%COMP%] legend[_ngcontent-%COMP%]{padding:0 .25rem}.auth-setting-form__scope-option[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;cursor:pointer;font-size:.9rem;color:var(--color-text)}.auth-setting-form__field[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.35rem}.auth-setting-form__field-hint[_ngcontent-%COMP%]{font-size:.75rem;color:var(--color-text-secondary);margin:0;line-height:1.4}.auth-setting-form__label[_ngcontent-%COMP%]{font-size:.85rem;font-weight:500;color:var(--color-text-secondary)}.auth-setting-form__input[_ngcontent-%COMP%]{border:1px solid var(--color-border);border-radius:6px;padding:.5rem .75rem;background:var(--color-bg-secondary);color:var(--color-text);font-size:.9rem;outline:none;transition:border-color .15s ease;width:100%;box-sizing:border-box}.auth-setting-form__input[_ngcontent-%COMP%]:focus{border-color:var(--color-primary)}.auth-setting-form__input--secret[_ngcontent-%COMP%]{font-family:monospace;letter-spacing:.05em}.auth-setting-form__select[_ngcontent-%COMP%]{border:1px solid var(--color-border);border-radius:6px;padding:.5rem .75rem;background:var(--color-bg-secondary);color:var(--color-text);font-size:.9rem;outline:none;cursor:pointer;transition:border-color .15s ease}.auth-setting-form__select[_ngcontent-%COMP%]:focus{border-color:var(--color-primary)}.auth-setting-form__credentials[_ngcontent-%COMP%]{border:1px solid var(--color-border);border-radius:8px;padding:.75rem 1rem 1rem;display:flex;flex-direction:column;gap:.75rem;margin:0}.auth-setting-form__credentials[_ngcontent-%COMP%] legend[_ngcontent-%COMP%]{padding:0 .25rem}.auth-setting-form__credentials-hint[_ngcontent-%COMP%]{font-size:.78rem;color:var(--color-text-secondary);margin:0}.auth-setting-form__actions[_ngcontent-%COMP%]{display:flex;gap:.75rem;align-items:center;padding-top:.5rem}.auth-setting-form__btn[_ngcontent-%COMP%]{border:1px solid var(--color-border);border-radius:6px;padding:.5rem 1.25rem;cursor:pointer;font-size:.9rem;font-weight:500;background:var(--color-bg-secondary);color:var(--color-text);transition:background .15s ease}.auth-setting-form__btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-bg-hover)}.auth-setting-form__btn[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.auth-setting-form__btn--primary[_ngcontent-%COMP%]{background:var(--color-primary);color:var(--color-on-primary, #fff);border-color:var(--color-primary)}.auth-setting-form__btn--primary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-primary-hover, var(--color-primary))}"]})};
|
|
2
|
-
export{le as AuthSettingFormComponent};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import {i}from'./chunk-TkSR4UzV.js';import {l}from'./chunk-C1RU8zia.js';import {g,d9 as F,dj as fe,aJ as Tr,aD as zy,bS as Da,a7 as va,X as br,r as re,cE as Pd,bU as jd,Y as x}from'./main-JTU33H5D.js';var y="none",O="me",N=class f{nsController=g(F);exportService=g(fe);userState=g(l);refresh$=new Tr(void 0);namespaceId$=new Tr(null);vm$=zy([this.namespaceId$,this.refresh$]).pipe(Da(([e])=>{let n=this.loadPlatformConfigs().pipe(va(()=>br([]))),t=this.loadUserConfigs("global").pipe(va(()=>br([])));return e?zy([n,this.loadNamespaceConfigs(e).pipe(va(()=>br([]))),this.loadUserConfigs(e).pipe(va(()=>br([]))),t]).pipe(re(([i,r,c,s])=>({platform:i,namespace:r,userOnNs:c,userGlobal:s}))):zy([n,t]).pipe(re(([i,r])=>({platform:i,namespace:[],userOnNs:[],userGlobal:r})))}),Pd({bufferSize:1,refCount:true}));setNamespace(e){this.namespaceId$.value!==e&&this.namespaceId$.next(e);}refresh(){this.refresh$.next();}loadPlatformConfigs(){return this.nsController.listIntegrationConfig(y)}loadUserConfigs(e){let n=e==="global"?y:e;return this.nsController.listIntegrationConfig(n,O)}userGlobal$=i(this.refresh$,()=>this.loadUserConfigs("global"),[]);loadNamespaceConfigs(e){return e?this.nsController.listIntegrationConfig(e):br([])}getById(e,n){return this.nsController.getByIdIntegrationConfig(e)}create(e,n,t){let r=this.userState.currentUser()?.id;if((n==="userOnNs"||n==="userGlobal")&&!r)throw new Error(`Cannot create ${n} config before UserStateService.loadMe() resolves \u2014 call loadMe() at app init`);if(n==="platform"){let s={name:e.name,integrationType:e.integrationType,description:e.description,parameters:e.parameters,authSettingName:e.authSettingName??void 0};return this.nsController.createIntegrationConfig(s).pipe(jd(()=>this.refresh()))}if(n==="namespace"){if(!t)throw new Error("Cannot create namespace-scoped config without a namespaceId");let s={name:e.name,integrationType:e.integrationType,description:e.description,namespaceId:t,parameters:e.parameters,authSettingName:e.authSettingName??void 0};return this.nsController.createIntegrationConfig(s).pipe(jd(()=>this.refresh()))}if(n==="userOnNs"&&!t)throw new Error("Cannot create userOnNs config without a namespaceId");let c={name:e.name,integrationType:e.integrationType,description:e.description,userId:r,namespaceId:n==="userOnNs"?t:void 0,parameters:e.parameters,authSettingName:e.authSettingName??void 0};return this.nsController.createIntegrationConfig(c).pipe(jd(()=>this.refresh()))}update(e,n,t,i){let r={name:n.name,integrationType:n.integrationType,description:n.description,userId:i.userId,namespaceId:i.namespaceId,parameters:n.parameters,authSettingName:n.authSettingName??void 0};return this.nsController.updateIntegrationConfig(e,r).pipe(jd(()=>this.refresh()))}delete(e,n){return this.nsController.deleteIntegrationConfig(e).pipe(jd(()=>this.refresh()))}exportAsYaml(e){return this.exportService.exportAsYaml(e)}static \u0275fac=function(n){return new(n||f)};static \u0275prov=x({token:f,factory:f.\u0275fac,providedIn:"root"})};export{N};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import {z}from'./chunk-CqM-2yCQ.js';import {s}from'./chunk-7-d3g3_Q.js';import {g as g$1,G,P,R as Re,C as Ce,F,T as TT,z as z$1,a as P$1,ae as kt,b as U,j as jw,i as Gn,s as si,k as Cs,n as Lg,A as Ag,m as hl,af as bg,ag as ET,t as AC,u as sI,x as xg,a9 as vC,aa as Sf,ac as CC,ab as _f,J as JC,ah as dT}from'./main-JTU33H5D.js';import'./chunk-DCx8SlS-.js';import {W as Wn,o as ot}from'./chunk-DeXXr4BL.js';import'./chunk-DK1hp0WW.js';import {y as yt,w as wt}from'./chunk-DuXr-yGB.js';var ee=()=>[];function te(u,t){if(u&1){let o=vC();Cs(0,"div",5)(1,"ds-entity-card",6),Lg("selected",function(r){Sf(o);let i=CC();return _f(i.onItemSelected(r))}),hl(),Cs(2,"button",7),Lg("click",function(r){let i=Sf(o).$implicit,f=CC();return r.stopPropagation(),_f(f.onDeleteRequested(i.id))}),Cs(3,"mat-icon"),JC(4,"close"),hl()()();}if(u&2){let o=t.$implicit;sI(),xg("id",o.id)("name",o.name)("description",o.description)("badges",o.badges??dT(4,ee));}}var g="__",Y=class u{router=g$1(G);projectStateService=g$1(P);dialog=g$1(Re);destroyRef=g$1(Ce);notification=g$1(s);projects=F(this.projectStateService.projectList$);forcedProject=F(this.projectStateService.forcedProject$,{initialValue:null});isLoading=F(this.projectStateService.isLoading$,{initialValue:false});projectItems=TT(()=>{let t=this.projects();if(!t)return [];let o=t.filter(e=>!e.name.includes(g)),n=t.filter(e=>e.name.includes(g)),r=new Set(o.map(e=>e.name)),i=e=>e.split(g)[0]??null,f=new Set(n.map(e=>i(e.name)).filter(e=>e!==null&&r.has(e))),l=[],G=[...f].sort((e,a)=>e.localeCompare(a));for(let e of G){let a=o.find(s=>s.name===e);l.push(z$1(P$1({},this.toEntityListItem(a)),{groupKey:e,groupLabel:e}));let Z=n.filter(s=>i(s.name)===e).sort((s,C)=>s.name.localeCompare(C.name));for(let s of Z){let C=s.name.slice(e.length+g.length);l.push(z$1(P$1({},this.toEntityListItem(s)),{name:C,description:s.name,groupKey:e,groupLabel:e}));}}let H=[...o].filter(e=>!f.has(e.name)&&!e.volatile).sort((e,a)=>e.name.localeCompare(a.name));for(let e of H)l.push(z$1(P$1({},this.toEntityListItem(e)),{groupKey:"__standalone__",groupLabel:"Projects"}));let Q=[...o].filter(e=>!f.has(e.name)&&e.volatile).sort((e,a)=>e.name.localeCompare(a.name));for(let e of Q)l.push(z$1(P$1({},this.toEntityListItem(e)),{groupKey:"__volatile__",groupLabel:"Temporary"}));let X=n.filter(e=>{let a=i(e.name);return a!==null&&!r.has(a)}).sort((e,a)=>e.name.localeCompare(a.name));for(let e of X)l.push(z$1(P$1({},this.toEntityListItem(e)),{groupKey:"__orphaned__",groupLabel:"Orphaned worktrees"}));return l});showCreateButton=TT(()=>!this.forcedProject());constructor(){}onItemSelected(t){this.projectStateService.selectProject(t),this.router.navigate(["project",t]);}onCreateRequested(){this.router.navigate(["project","new"]);}onDeleteRequested(t){let o=t.includes(g);this.dialog.open(z,{width:"400px",panelClass:"confirm-dialog-panel",data:P$1({title:"Delete project",message:`This will remove the project "${t}" from Coday and archive its configuration. The project source code on disk is not affected.`,confirmLabel:"Delete",cancelLabel:"Cancel",isDestructive:true},o?{checkboxLabel:"Also remove git worktree from disk"}:{})}).afterClosed().pipe(kt(r=>r?.confirmed===true),U(this.destroyRef)).subscribe(r=>{this.notification.info("Deleting project\u2026"),this.projectStateService.deleteProject(t,r.checkboxChecked).pipe(U(this.destroyRef)).subscribe({next:()=>{this.notification.success(`Project "${t}" deleted`),this.router.url.includes(`/project/${encodeURIComponent(t)}`)&&this.router.navigate(["/"]);},error:i=>{console.error("[PROJECT-LIST] Failed to delete project:",i),this.notification.error(i?.error?.error??"Failed to delete project");}});});}toEntityListItem(t){return {id:t.name,name:t.name,badges:t.volatile?[{label:"temp",variant:"warning"}]:[]}}static \u0275fac=function(o){return new(o||u)};static \u0275cmp=jw({type:u,selectors:[["app-project-selection"]],decls:6,vars:5,consts:[["projectCard",""],[1,"project-page-layout"],["title","Projects","contentMaxWidth","1400px","searchPlaceholder","Filter projects\u2026","emptyMessage","No projects found.",3,"itemSelected","createRequested","items","loading","itemTemplate","showCreate","autoFocusSearch"],["toolbar-start","","routerLink","/","title","Back to tasks",1,"project-list__logo"],["src","CODAY-Logo.png","alt","Coday"],[1,"project-card-wrapper"],[3,"selected","id","name","description","badges"],["mat-icon-button","","title","Delete project",1,"project-card-wrapper__delete",3,"click"]],template:function(o,n){if(o&1&&(Cs(0,"div",1)(1,"ds-entity-list",2),Lg("itemSelected",function(i){return n.onItemSelected(i)})("createRequested",function(){return n.onCreateRequested()}),Cs(2,"a",3),Ag(3,"img",4),hl()()(),bg(4,te,5,5,"ng-template",null,0,ET)),o&2){let r=AC(5);sI(),xg("items",n.projectItems())("loading",n.isLoading())("itemTemplate",r)("showCreate",n.showCreateButton())("autoFocusSearch",true);}},dependencies:[Wn,ot,yt,wt,Gn,si],styles:["[_nghost-%COMP%]{display:block;width:100%;min-height:100vh;background:var(--color-bg);overflow-y:auto}.project-page-layout[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:100%}.project-list__logo[_ngcontent-%COMP%]{display:flex;align-items:center;flex-shrink:0;border-radius:4px;opacity:.85;transition:opacity .15s ease;cursor:pointer}.project-list__logo[_ngcontent-%COMP%]:hover{opacity:1}.project-list__logo[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:40px;height:40px;object-fit:contain;border-radius:4px}.project-card-wrapper[_ngcontent-%COMP%]{position:relative}.project-card-wrapper__delete[_ngcontent-%COMP%]{position:absolute;top:4px;right:4px;width:28px;height:28px;line-height:28px;padding:0;opacity:0;transition:opacity .15s ease;color:var(--color-text-secondary, #6e6e73)}.project-card-wrapper__delete[_ngcontent-%COMP%] .mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px}.project-card-wrapper__delete[_ngcontent-%COMP%]:hover{color:var(--color-error, #ff3b30)}.project-card-wrapper[_ngcontent-%COMP%]:hover .project-card-wrapper__delete[_ngcontent-%COMP%]{opacity:1}"],changeDetection:1})};export{Y as ProjectListComponent};
|