@whoz-oss/coday-client 3.15.1 → 3.16.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.
Files changed (78) hide show
  1. package/browser/{chunk-CysW_ro-.js → chunk-0OiZWE88.js} +1 -1
  2. package/browser/{chunk-BhfpLr7-.js → chunk-6gdeYlLc.js} +1 -1
  3. package/browser/{chunk-B5_o_qhk.js → chunk-7jUQT_3F.js} +1 -1
  4. package/browser/{chunk-K-fhwl_z.js → chunk-B0vRsgnD.js} +1 -1
  5. package/browser/{chunk-RxHlNJ_t.js → chunk-BEKR4Un_.js} +1 -1
  6. package/browser/chunk-BEUXx3TO.js +1 -0
  7. package/browser/{chunk-Bnic_hdt.js → chunk-BHZY3TvC.js} +5 -5
  8. package/browser/{chunk-C6RPhP4t.js → chunk-BJYyjaQ6.js} +1 -1
  9. package/browser/chunk-BJeLQooO.js +1 -0
  10. package/browser/{chunk-BIMT-HvS.js → chunk-BNS6Fgaw.js} +1 -1
  11. package/browser/{chunk-BVCQOGLR.js → chunk-BSSDDOqW.js} +2 -2
  12. package/browser/{chunk-Dd2dq7xg.js → chunk-BTS5TBK0.js} +1 -1
  13. package/browser/{chunk-B11WEBEl.js → chunk-BUJoEGsf.js} +1 -1
  14. package/browser/chunk-BY7uKZAo.js +9 -0
  15. package/browser/{chunk-5t7zJzqM.js → chunk-B_9LxHBv.js} +1 -1
  16. package/browser/{chunk-DTZ7N3wC.js → chunk-BdApeECy.js} +1 -1
  17. package/browser/{chunk-BhM0bmJW.js → chunk-BdpJ2ZCM.js} +1 -1
  18. package/browser/{chunk-CyUmCedx.js → chunk-Be1LOFvg.js} +1 -1
  19. package/browser/{chunk-CYMQSJz6.js → chunk-Bhq5earA.js} +1 -1
  20. package/browser/{chunk-C5wr-vqf.js → chunk-Bib1Seeu.js} +1 -1
  21. package/browser/{chunk-C7MXO6BQ.js → chunk-Bn3R3VC2.js} +5 -5
  22. package/browser/{chunk-DxxECdrg.js → chunk-C-aF2_1R.js} +2 -2
  23. package/browser/{chunk-Jv7RGmnK.js → chunk-CBNhmZDS.js} +1 -1
  24. package/browser/{chunk-DzicJow4.js → chunk-CFZbDe5T.js} +3 -3
  25. package/browser/{chunk-mHtuxvLs.js → chunk-CGMAzvSo.js} +1 -1
  26. package/browser/chunk-CPBcDx4G.js +1 -0
  27. package/browser/{chunk-DYUMiAN8.js → chunk-CTuHnJP4.js} +1 -1
  28. package/browser/{chunk-n1eKIk8H.js → chunk-CXLytVC3.js} +1 -1
  29. package/browser/{chunk-5LRyprMF.js → chunk-CYulIMKp.js} +1 -1
  30. package/browser/{chunk-CyxhAtE7.js → chunk-C_s4Z3Dk.js} +1 -1
  31. package/browser/{chunk-D_vvo2qx.js → chunk-CbK5Lcu9.js} +1 -1
  32. package/browser/{chunk-9CSRlx74.js → chunk-CgqDTJ5-.js} +1 -1
  33. package/browser/{chunk-Dg6QAZUw.js → chunk-Ci1jk71f.js} +2 -2
  34. package/browser/{chunk-Bh1p6jDj.js → chunk-CiWu4t_i.js} +1 -1
  35. package/browser/{chunk-CUmS2-ak.js → chunk-CjrWXBiR.js} +1 -1
  36. package/browser/{chunk-BqKdrvcS.js → chunk-Co81dkbz.js} +1 -1
  37. package/browser/{chunk-Ce03Ba0V.js → chunk-CtWMrBfw.js} +1 -1
  38. package/browser/{chunk-l0HLnBLv.js → chunk-CtkiOUdU.js} +6 -6
  39. package/browser/{chunk-BlWlE-Cq.js → chunk-CwaAd8kk.js} +1 -1
  40. package/browser/{chunk-Bgy3uCgK.js → chunk-DDnWPYAA.js} +1 -1
  41. package/browser/{chunk-CHrmSvQM.js → chunk-DOq0u21j.js} +1 -1
  42. package/browser/{chunk-DX2ZzvT5.js → chunk-DQLU3kYb.js} +1 -1
  43. package/browser/{chunk-fP29MqaN.js → chunk-Dcftf7UY.js} +1 -1
  44. package/browser/{chunk-BZMAEe_X.js → chunk-Dfujxxcr.js} +1 -1
  45. package/browser/chunk-DgrvmqY2.js +2 -0
  46. package/browser/{chunk-CebS4RAf.js → chunk-DoKoAMs6.js} +1 -1
  47. package/browser/{chunk-CNIfOUla.js → chunk-Dtu-PLbq.js} +1 -1
  48. package/browser/{chunk-C4U0w8cP.js → chunk-DzlrRiVM.js} +1 -1
  49. package/browser/{chunk-BfD1F12k.js → chunk-HjD5Rk4C.js} +3 -3
  50. package/browser/{chunk-CcLheUaL.js → chunk-IUvEtpfr.js} +1 -1
  51. package/browser/{chunk-DTIhOEG_.js → chunk-S8F5_Te_.js} +6 -6
  52. package/browser/{chunk-HSc9fwVS.js → chunk-SbH2L3h2.js} +1 -1
  53. package/browser/{chunk-BKlwFrFB.js → chunk-UzUd84Qf.js} +1 -1
  54. package/browser/chunk-YS-vAhPY.js +190 -0
  55. package/browser/{chunk-BUEM7g7F.js → chunk-YfG457Nc.js} +3 -3
  56. package/browser/{chunk-DG2FCeMu.js → chunk-axGY7UtD.js} +1 -1
  57. package/browser/chunk-fYErSEXN.js +1 -0
  58. package/browser/{chunk-BgHTiTG2.js → chunk-fhFxOLYS.js} +1 -1
  59. package/browser/{chunk-qARg6ese.js → chunk-gmPqDrDS.js} +1 -1
  60. package/browser/{chunk-DvzNS1Bs.js → chunk-iNIQR015.js} +1 -1
  61. package/browser/{chunk-Dj9y_5pr.js → chunk-izARvh_2.js} +1 -1
  62. package/browser/{chunk-Cf3l2UgA.js → chunk-jv0lz5Ah.js} +1 -1
  63. package/browser/{chunk-nWqZHM4o.js → chunk-kvCfAm7Z.js} +1 -1
  64. package/browser/{chunk-ZvcyZV3G.js → chunk-pH1k_bet.js} +1 -1
  65. package/browser/{chunk-DYE131qf.js → chunk-rwEyLSEP.js} +1 -1
  66. package/browser/{chunk-XgEfnfT0.js → chunk-swj7IkJA.js} +1 -1
  67. package/browser/chunk-tTmeIHGS.js +37 -0
  68. package/browser/index.html +1 -1
  69. package/browser/{main-6K2UFGD2.js → main-5PAOSHSM.js} +19 -19
  70. package/package.json +1 -1
  71. package/browser/chunk-BC0acSZF.js +0 -1
  72. package/browser/chunk-BLa2Gx7h.js +0 -190
  73. package/browser/chunk-B_2kLXvG.js +0 -1
  74. package/browser/chunk-C9tuHQmZ.js +0 -37
  75. package/browser/chunk-CnnGSYzi.js +0 -2
  76. package/browser/chunk-DEsz0fzs.js +0 -1
  77. package/browser/chunk-DXDohTwX.js +0 -1
  78. package/browser/chunk-uPxETzZs.js +0 -9
@@ -1 +1 @@
1
- import {g,bm as Sm,z as zi,y as yT,cF as Pb,h as Rw,i as hr,k as Gn,I as Is,A as Ag,q as qC,m as pl,a3 as UI,t as tC,J as JE,T as Tg,a6 as zI,v as nC,w as we$1,a as z$1,b as P,S as By,c as U,Y as x,b1 as Rn,bf as cT,ac as yC,a8 as Zg,bi as dT,cG as fT,o as iC,cH as Jw,n as bg,x as sC,M as dy,cI as Nt,aw as hl,ax as gl,c9 as kf,b6 as Sg,ck as Ff,C as Cg,a5 as vl,a9 as fC,cJ as Rg,aa as If,ab as wf,ad as Vg}from'./main-6K2UFGD2.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-C9tuHQmZ.js';var Ae=(o,t)=>t.date,He=(o,t)=>t.x,$e=(o,t)=>t.label;function Ve(o,t){o&1&&(hl(0,"div",0),qC(1,"No daily data points for this period."),gl());}function Le(o,t){if(o&1&&(kf(),Sg(0,"rect",18)),o&2){let e=yC().$implicit,n=yC(2);Cg("x",e.w+6)("y",n.yBase-e.tokensStubH)("width",e.w)("height",e.tokensStubH);}}function Ge(o,t){if(o&1&&(kf(),Sg(0,"rect",19)(1,"rect",20)),o&2){let e=yC().$implicit,n=yC(2);Cg("x",e.w+6)("y",n.yBase-(e.promptH??0))("width",e.w)("height",e.promptH??0),JE(),Cg("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=fC();kf(),hl(0,"g",15),Rg("mouseenter",function(i){let d=If(e).$implicit,u=yC(2);return wf(u.showTooltip(i,d.point))})("mousemove",function(i){let d=If(e).$implicit,u=yC(2);return wf(u.showTooltip(i,d.point))})("mouseleave",function(){If(e);let i=yC(2);return wf(i.hideTooltip())}),Sg(1,"rect",16)(2,"rect",17),tC(3,Le,1,4,":svg:rect",18)(4,Ge,2,8),gl();}if(o&2){let e=t.$implicit,n=yC(2);Cg("transform","translate("+e.xGroup+",0)"),JE(),Cg("y",n.yTop)("width",e.groupW)("height",n.yBase-n.yTop),JE(),Cg("y",n.yBase-e.costH)("width",e.w)("height",e.costH),JE(),nC(e.tokensStubH!==null?3:4);}}function We(o,t){if(o&1&&(kf(),hl(0,"text",5),qC(1),gl()),o&2){let e=t.$implicit,n=yC(2);Cg("x",e.x)("y",n.yAxis),JE(),Zg(e.label);}}function je(o,t){if(o&1&&(hl(0,"div",24),qC(1),gl(),hl(2,"div",25),qC(3),gl()),o&2){let e=t.$implicit;JE(),Zg(e.label),JE(2),Zg(e.value);}}function ze(o,t){if(o&1&&(hl(0,"div",21)(1,"div",22),qC(2),gl(),hl(3,"div",23),iC(4,je,4,2,null,null,$e),gl()()),o&2){let e=yC(2);Vg("left",e.tooltip().x+12,"px")("top",e.tooltip().y+12,"px"),JE(2),Zg(e.tooltip().data.date),JE(2),sC(e.tooltipLines());}}function Xe(o,t){if(o&1&&(hl(0,"div",8)(1,"span",10),qC(2),gl()()),o&2){let e=yC(2);JE(2),Zg(e.tokenCoverageLabel());}}function Je(o,t){if(o&1&&(hl(0,"div",1),kf(),hl(1,"svg",2),Sg(2,"line",3)(3,"line",3),iC(4,Ye,5,8,":svg:g",4,Ae),iC(6,We,2,3,":svg:text",5,He),gl(),tC(8,ze,6,5,"div",6),Ff(),hl(9,"div",7)(10,"div",8),Sg(11,"span",9),hl(12,"span",10),qC(13,"Cost (per day)"),gl(),hl(14,"span",11),qC(15),gl()(),hl(16,"div",8),Sg(17,"span",12),hl(18,"span",10),qC(19,"Prompt tokens"),gl()(),hl(20,"div",8),Sg(21,"span",13),hl(22,"span",10),qC(23,"Completion tokens"),gl()(),hl(24,"div",8),Sg(25,"span",14),hl(26,"span",10),qC(27,"Tokens missing"),gl()(),hl(28,"div",8)(29,"span",10),qC(30,"Tokens scale"),gl(),hl(31,"span",11),qC(32),gl()(),tC(33,Xe,3,1,"div",8),gl()()),o&2){let e=yC();JE(),Cg("viewBox",e.viewBox),JE(),Cg("y1",e.yTop)("x2",720)("y2",e.yTop),JE(),Cg("y1",e.yBase)("x2",720)("y2",e.yBase),JE(),sC(e.bars()),JE(2),sC(e.axisLabels()),JE(2),nC(e.tooltip().visible&&e.tooltip().data?8:-1),JE(7),vl("max ",e.maxCostLabel()),JE(17),vl("max ",e.maxTokensLabel()),JE(),nC(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=yT(()=>(this.points??[]).filter(t=>!!t.date));maxCost=yT(()=>Math.max(0,...this.safePoints().map(t=>t.cost??0)));maxTokens=yT(()=>{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=yT(()=>{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=yT(()=>"$"+(new Pb("en-US").transform(this.maxCost(),"1.2-2")??"0.00"));maxTokensLabel=yT(()=>new Pb("en-US").transform(this.maxTokens(),"1.0-2")??"0");tooltip=zi({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 Pb("en-US").transform(t,"1.0-2")??"0"}formatCost(t){return "$"+(new Pb("en-US").transform(t??0,"1.2-2")??"0.00")}tooltipLines=yT(()=>{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=yT(()=>{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=yT(()=>{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=Rw({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&&tC(0,Ve,2,0,"div",0)(1,Je,34,11,"div",1),e&2&&nC(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(dy);getTokenUsage(t){let e=new Nt;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 Nt;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(we$1);defaultFrom=we(qe());defaultTo=we(Ke());draftFilters=zi({from:this.defaultFrom,to:this.defaultTo});appliedFilters=zi({from:this.defaultFrom,to:this.defaultTo});loading=zi(false);error=zi(null);aggregation=zi(null);seriesResponse=zi(null);series=zi(null);tokenDataPartial=zi(false);aggregationByModelId=zi(null);seriesByModelId=zi(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),By({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=Rn({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=Rn({name:"apply",type:o,pure:true})};function Qe(o,t){o&1&&(Is(0,"div",23),qC(1," Partial data \u2014 token counts may not cover the full period "),pl());}function Ze(o,t){o&1&&(Is(0,"div",24),qC(1," No token data collected for this period "),pl());}function et(o,t){if(o&1&&(Is(0,"div",19)(1,"div",20)(2,"div",21),qC(3,"Total tokens"),pl(),Is(4,"div",22),qC(5),cT(6,"call"),pl()(),Is(7,"div",20)(8,"div",21),qC(9,"Total calls"),pl(),Is(10,"div",22),qC(11),pl()(),Is(12,"div",20)(13,"div",21),qC(14,"Total cost"),pl(),Is(15,"div",22),qC(16),cT(17,"apply"),pl()()(),tC(18,Qe,2,0,"div",23),tC(19,Ze,2,0,"div",24)),o&2){let e=yC();JE(5),Zg(dT(6,5,e.totalRow().totalTokens,e.formatTokenValue)),JE(6),Zg(e.totalRow().callCount),JE(5),Zg(fT(17,8,e.formatCostValue,e.isMissingPeriod(),e.totalRow().cost)),JE(2),nC(e.isPartialPeriod()?18:-1),JE(),nC(e.isMissingPeriod()?19:-1);}}function tt(o,t){o&1&&(Is(0,"div",16)(1,"div",25),qC(2,"Loading token usage\u2026"),pl()());}function nt(o,t){if(o&1&&(Is(0,"div",17)(1,"div",26),qC(2,"Failed to load"),pl(),Is(3,"div",25),qC(4),pl()()),o&2){let e=yC();JE(4),Zg(e.state.error());}}function ot(o,t){o&1&&(Is(0,"div",16)(1,"div",26),qC(2,"No data"),pl(),Is(3,"div",25),qC(4,"No token usage recorded yet for this period."),pl()());}function at(o,t){if(o&1&&(Is(0,"div",32)(1,"div",29),qC(2),pl(),Is(3,"div",29),qC(4),pl(),Is(5,"div",29),qC(6),pl(),Is(7,"div",30),qC(8),cT(9,"call"),pl(),Is(10,"div",30),qC(11),cT(12,"call"),pl(),Is(13,"div",30),qC(14),cT(15,"call"),pl(),Is(16,"div",30),qC(17),pl(),Is(18,"div",30),qC(19),cT(20,"apply"),pl()()),o&2){let e=t.$implicit,n=yC(2);JE(2),Zg(e.agentName),JE(2),Zg(e.providerName),JE(2),Zg(e.modelId),JE(2),Zg(dT(9,8,e.promptTokens,n.formatTokenValue)),JE(3),Zg(dT(12,11,e.completionTokens,n.formatTokenValue)),JE(3),Zg(dT(15,14,e.totalTokens,n.formatTokenValue)),JE(3),Zg(e.callCount),JE(2),vl(" ",fT(20,17,n.formatCostValue,n.isMissingPeriod(),e.cost)," ");}}function it(o,t){if(o&1&&(Is(0,"div",33)(1,"div",29),qC(2),pl(),Is(3,"div",29),qC(4),pl(),Is(5,"div",29),qC(6),pl(),Is(7,"div",30),qC(8),cT(9,"call"),pl(),Is(10,"div",30),qC(11),cT(12,"call"),pl(),Is(13,"div",30),qC(14),cT(15,"call"),pl(),Is(16,"div",30),qC(17),pl(),Is(18,"div",30),qC(19),cT(20,"apply"),pl()()),o&2){let e=yC(2);JE(2),Zg(e.totalRow().agentName),JE(2),Zg(e.totalRow().providerName),JE(2),Zg(e.totalRow().modelId),JE(2),Zg(dT(9,8,e.totalRow().promptTokens,e.formatTokenValue)),JE(3),vl(" ",dT(12,11,e.totalRow().completionTokens,e.formatTokenValue)," "),JE(3),Zg(dT(15,14,e.totalRow().totalTokens,e.formatTokenValue)),JE(3),Zg(e.totalRow().callCount),JE(2),vl(" ",fT(20,17,e.formatCostValue,e.isMissingPeriod(),e.totalRow().cost)," ");}}function rt(o,t){if(o&1&&(Is(0,"div",18)(1,"section",16)(2,"div",26),qC(3,"Summary"),pl(),Is(4,"div",27)(5,"div",28)(6,"div",29),qC(7,"agentName"),pl(),Is(8,"div",29),qC(9,"providerName"),pl(),Is(10,"div",29),qC(11,"modelId"),pl(),Is(12,"div",30),qC(13,"promptTokens"),pl(),Is(14,"div",30),qC(15,"completionTokens"),pl(),Is(16,"div",30),qC(17,"totalTokens"),pl(),Is(18,"div",30),qC(19,"callCount"),pl(),Is(20,"div",30),qC(21,"cost"),pl()(),Is(22,"div",31),iC(23,at,21,21,"div",32,Jw().trackRow,true),tC(25,it,21,21,"div",33),pl()()(),Is(26,"section",16)(27,"div",26),qC(28,"Daily series"),pl(),bg(29,"app-daily-series-chart",34),pl()()),o&2){let e=yC();JE(23),sC(e.rows()),JE(2),nC(e.totalRow()?25:-1),JE(4),Tg("points",e.chartPoints());}}var Ee="\u2014",Oe=class o{location=g(Sm);state=g(J);view=zi("byModel");rowsByAgent=yT(()=>this.state.aggregation()?.models??[]);totalRow=yT(()=>this.state.aggregation()?.total??null);rowsByModel=yT(()=>this.state.aggregationByModelId()??[]);chartPointsByAgent=yT(()=>{let t=this.state.series()??[];return this.aggregateDailyPoints(t)});chartPointsByModel=yT(()=>{let t=this.state.seriesByModelId()??[];return this.aggregateDailyPoints(t)});chartPoints=yT(()=>this.view()==="byAgent"?this.chartPointsByAgent():this.chartPointsByModel());rows=yT(()=>this.view()==="byAgent"?this.rowsByAgent():this.rowsByModel());isEmpty=yT(()=>{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=yT(()=>{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=yT(()=>!this.isMissingPeriod()&&this.state.tokenDataPartial());navigateBack(){this.location.back();}formatTokenValue(t){return t===null?Ee:new Pb("en-US").transform(t,"1.0-2")??"0"}formatCostValue(t,e){return t?Ee:"$"+(new Pb("en-US").transform(e??0,"1.2-2")??"0.00")}static \u0275fac=function(e){return new(e||o)};static \u0275cmp=Rw({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&&(Is(0,"section",0)(1,"header",1)(2,"div",2)(3,"button",3),Ag("click",function(){return n.navigateBack()}),Is(4,"mat-icon"),qC(5,"chevron_left"),pl()(),Is(6,"div")(7,"h1",4),qC(8,"Token Usage"),pl(),Is(9,"p",5),qC(10,"Track prompt and completion token usage by agent and model."),pl()()(),Is(11,"div",6)(12,"label",7)(13,"span",8),qC(14,"From"),pl(),Is(15,"div",9)(16,"input",10),Ag("ngModelChange",function(d){return n.onFromChange(d)}),pl(),UI(),Is(17,"button",11),Ag("click",function(){return n.clearFrom()}),qC(18," Clear "),pl()()(),Is(19,"label",7)(20,"span",8),qC(21,"To"),pl(),Is(22,"div",9)(23,"input",10),Ag("ngModelChange",function(d){return n.onToChange(d)}),pl(),UI(),Is(24,"button",11),Ag("click",function(){return n.clearTo()}),qC(25," Clear "),pl()()(),Is(26,"label",7)(27,"span",8),qC(28,"View"),pl(),Is(29,"select",12),Ag("ngModelChange",function(d){return n.view.set(d)}),Is(30,"option",13),qC(31,"By model"),pl(),Is(32,"option",14),qC(33,"By agent"),pl()(),UI(),pl(),Is(34,"button",15),Ag("click",function(){return n.apply()}),qC(35,"Apply"),pl()()(),tC(36,et,20,12),tC(37,tt,3,0,"div",16)(38,nt,5,1,"div",17)(39,ot,5,0,"div",16)(40,rt,30,2,"div",18),pl()),e&2&&(JE(16),Tg("ngModel",n.state.draftFilters().from),zI(),JE(),Tg("disabled",!n.state.draftFilters().from),JE(6),Tg("ngModel",n.state.draftFilters().to),zI(),JE(),Tg("disabled",!n.state.draftFilters().to),JE(5),Tg("ngModel",n.view()),zI(),JE(5),Tg("disabled",n.state.loading()),JE(2),nC(n.totalRow()?36:-1),JE(),nC(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
+ import {g,bm as _m,a as Gi,E as ET,cF as Bb,h as Fw,i as hr,k as Gn,m as ws,o as Rg,Q as QC,n as hl,a3 as GI,q as oC,t as nI,v as bg,a6 as qI,x as iC,w as we$1,z as z$1,b as P,W as Vy,c as U,Y as x,b1 as Rn,bf as dT,ac as EC,a8 as Yg,bi as hT,cG as gT,r as cC,cH as nC,S as Sg,y as uC,I as fy,cI as Nt,aw as gl,ax as ml,c9 as Ff,b6 as _g,ck as Pf,T as Tg,a5 as Dl,a9 as gC,cJ as Og,aa as wf,ab as Cf,ad as Hg}from'./main-5PAOSHSM.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-tTmeIHGS.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),QC(1,"No daily data points for this period."),ml());}function Le(o,t){if(o&1&&(Ff(),_g(0,"rect",18)),o&2){let e=EC().$implicit,n=EC(2);Tg("x",e.w+6)("y",n.yBase-e.tokensStubH)("width",e.w)("height",e.tokensStubH);}}function Ge(o,t){if(o&1&&(Ff(),_g(0,"rect",19)(1,"rect",20)),o&2){let e=EC().$implicit,n=EC(2);Tg("x",e.w+6)("y",n.yBase-(e.promptH??0))("width",e.w)("height",e.promptH??0),nI(),Tg("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=gC();Ff(),gl(0,"g",15),Og("mouseenter",function(i){let d=wf(e).$implicit,u=EC(2);return Cf(u.showTooltip(i,d.point))})("mousemove",function(i){let d=wf(e).$implicit,u=EC(2);return Cf(u.showTooltip(i,d.point))})("mouseleave",function(){wf(e);let i=EC(2);return Cf(i.hideTooltip())}),_g(1,"rect",16)(2,"rect",17),oC(3,Le,1,4,":svg:rect",18)(4,Ge,2,8),ml();}if(o&2){let e=t.$implicit,n=EC(2);Tg("transform","translate("+e.xGroup+",0)"),nI(),Tg("y",n.yTop)("width",e.groupW)("height",n.yBase-n.yTop),nI(),Tg("y",n.yBase-e.costH)("width",e.w)("height",e.costH),nI(),iC(e.tokensStubH!==null?3:4);}}function We(o,t){if(o&1&&(Ff(),gl(0,"text",5),QC(1),ml()),o&2){let e=t.$implicit,n=EC(2);Tg("x",e.x)("y",n.yAxis),nI(),Yg(e.label);}}function je(o,t){if(o&1&&(gl(0,"div",24),QC(1),ml(),gl(2,"div",25),QC(3),ml()),o&2){let e=t.$implicit;nI(),Yg(e.label),nI(2),Yg(e.value);}}function ze(o,t){if(o&1&&(gl(0,"div",21)(1,"div",22),QC(2),ml(),gl(3,"div",23),cC(4,je,4,2,null,null,$e),ml()()),o&2){let e=EC(2);Hg("left",e.tooltip().x+12,"px")("top",e.tooltip().y+12,"px"),nI(2),Yg(e.tooltip().data.date),nI(2),uC(e.tooltipLines());}}function Xe(o,t){if(o&1&&(gl(0,"div",8)(1,"span",10),QC(2),ml()()),o&2){let e=EC(2);nI(2),Yg(e.tokenCoverageLabel());}}function Je(o,t){if(o&1&&(gl(0,"div",1),Ff(),gl(1,"svg",2),_g(2,"line",3)(3,"line",3),cC(4,Ye,5,8,":svg:g",4,Ae),cC(6,We,2,3,":svg:text",5,He),ml(),oC(8,ze,6,5,"div",6),Pf(),gl(9,"div",7)(10,"div",8),_g(11,"span",9),gl(12,"span",10),QC(13,"Cost (per day)"),ml(),gl(14,"span",11),QC(15),ml()(),gl(16,"div",8),_g(17,"span",12),gl(18,"span",10),QC(19,"Prompt tokens"),ml()(),gl(20,"div",8),_g(21,"span",13),gl(22,"span",10),QC(23,"Completion tokens"),ml()(),gl(24,"div",8),_g(25,"span",14),gl(26,"span",10),QC(27,"Tokens missing"),ml()(),gl(28,"div",8)(29,"span",10),QC(30,"Tokens scale"),ml(),gl(31,"span",11),QC(32),ml()(),oC(33,Xe,3,1,"div",8),ml()()),o&2){let e=EC();nI(),Tg("viewBox",e.viewBox),nI(),Tg("y1",e.yTop)("x2",720)("y2",e.yTop),nI(),Tg("y1",e.yBase)("x2",720)("y2",e.yBase),nI(),uC(e.bars()),nI(2),uC(e.axisLabels()),nI(2),iC(e.tooltip().visible&&e.tooltip().data?8:-1),nI(7),Dl("max ",e.maxCostLabel()),nI(17),Dl("max ",e.maxTokensLabel()),nI(),iC(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=ET(()=>(this.points??[]).filter(t=>!!t.date));maxCost=ET(()=>Math.max(0,...this.safePoints().map(t=>t.cost??0)));maxTokens=ET(()=>{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=ET(()=>{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=ET(()=>"$"+(new Bb("en-US").transform(this.maxCost(),"1.2-2")??"0.00"));maxTokensLabel=ET(()=>new Bb("en-US").transform(this.maxTokens(),"1.0-2")??"0");tooltip=Gi({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 Bb("en-US").transform(t,"1.0-2")??"0"}formatCost(t){return "$"+(new Bb("en-US").transform(t??0,"1.2-2")??"0.00")}tooltipLines=ET(()=>{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=ET(()=>{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=ET(()=>{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=Fw({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&&oC(0,Ve,2,0,"div",0)(1,Je,34,11,"div",1),e&2&&iC(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(fy);getTokenUsage(t){let e=new Nt;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 Nt;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(we$1);defaultFrom=we(qe());defaultTo=we(Ke());draftFilters=Gi({from:this.defaultFrom,to:this.defaultTo});appliedFilters=Gi({from:this.defaultFrom,to:this.defaultTo});loading=Gi(false);error=Gi(null);aggregation=Gi(null);seriesResponse=Gi(null);series=Gi(null);tokenDataPartial=Gi(false);aggregationByModelId=Gi(null);seriesByModelId=Gi(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),Vy({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=Rn({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=Rn({name:"apply",type:o,pure:true})};function Qe(o,t){o&1&&(ws(0,"div",23),QC(1," Partial data \u2014 token counts may not cover the full period "),hl());}function Ze(o,t){o&1&&(ws(0,"div",24),QC(1," No token data collected for this period "),hl());}function et(o,t){if(o&1&&(ws(0,"div",19)(1,"div",20)(2,"div",21),QC(3,"Total tokens"),hl(),ws(4,"div",22),QC(5),dT(6,"call"),hl()(),ws(7,"div",20)(8,"div",21),QC(9,"Total calls"),hl(),ws(10,"div",22),QC(11),hl()(),ws(12,"div",20)(13,"div",21),QC(14,"Total cost"),hl(),ws(15,"div",22),QC(16),dT(17,"apply"),hl()()(),oC(18,Qe,2,0,"div",23),oC(19,Ze,2,0,"div",24)),o&2){let e=EC();nI(5),Yg(hT(6,5,e.totalRow().totalTokens,e.formatTokenValue)),nI(6),Yg(e.totalRow().callCount),nI(5),Yg(gT(17,8,e.formatCostValue,e.isMissingPeriod(),e.totalRow().cost)),nI(2),iC(e.isPartialPeriod()?18:-1),nI(),iC(e.isMissingPeriod()?19:-1);}}function tt(o,t){o&1&&(ws(0,"div",16)(1,"div",25),QC(2,"Loading token usage\u2026"),hl()());}function nt(o,t){if(o&1&&(ws(0,"div",17)(1,"div",26),QC(2,"Failed to load"),hl(),ws(3,"div",25),QC(4),hl()()),o&2){let e=EC();nI(4),Yg(e.state.error());}}function ot(o,t){o&1&&(ws(0,"div",16)(1,"div",26),QC(2,"No data"),hl(),ws(3,"div",25),QC(4,"No token usage recorded yet for this period."),hl()());}function at(o,t){if(o&1&&(ws(0,"div",32)(1,"div",29),QC(2),hl(),ws(3,"div",29),QC(4),hl(),ws(5,"div",29),QC(6),hl(),ws(7,"div",30),QC(8),dT(9,"call"),hl(),ws(10,"div",30),QC(11),dT(12,"call"),hl(),ws(13,"div",30),QC(14),dT(15,"call"),hl(),ws(16,"div",30),QC(17),hl(),ws(18,"div",30),QC(19),dT(20,"apply"),hl()()),o&2){let e=t.$implicit,n=EC(2);nI(2),Yg(e.agentName),nI(2),Yg(e.providerName),nI(2),Yg(e.modelId),nI(2),Yg(hT(9,8,e.promptTokens,n.formatTokenValue)),nI(3),Yg(hT(12,11,e.completionTokens,n.formatTokenValue)),nI(3),Yg(hT(15,14,e.totalTokens,n.formatTokenValue)),nI(3),Yg(e.callCount),nI(2),Dl(" ",gT(20,17,n.formatCostValue,n.isMissingPeriod(),e.cost)," ");}}function it(o,t){if(o&1&&(ws(0,"div",33)(1,"div",29),QC(2),hl(),ws(3,"div",29),QC(4),hl(),ws(5,"div",29),QC(6),hl(),ws(7,"div",30),QC(8),dT(9,"call"),hl(),ws(10,"div",30),QC(11),dT(12,"call"),hl(),ws(13,"div",30),QC(14),dT(15,"call"),hl(),ws(16,"div",30),QC(17),hl(),ws(18,"div",30),QC(19),dT(20,"apply"),hl()()),o&2){let e=EC(2);nI(2),Yg(e.totalRow().agentName),nI(2),Yg(e.totalRow().providerName),nI(2),Yg(e.totalRow().modelId),nI(2),Yg(hT(9,8,e.totalRow().promptTokens,e.formatTokenValue)),nI(3),Dl(" ",hT(12,11,e.totalRow().completionTokens,e.formatTokenValue)," "),nI(3),Yg(hT(15,14,e.totalRow().totalTokens,e.formatTokenValue)),nI(3),Yg(e.totalRow().callCount),nI(2),Dl(" ",gT(20,17,e.formatCostValue,e.isMissingPeriod(),e.totalRow().cost)," ");}}function rt(o,t){if(o&1&&(ws(0,"div",18)(1,"section",16)(2,"div",26),QC(3,"Summary"),hl(),ws(4,"div",27)(5,"div",28)(6,"div",29),QC(7,"agentName"),hl(),ws(8,"div",29),QC(9,"providerName"),hl(),ws(10,"div",29),QC(11,"modelId"),hl(),ws(12,"div",30),QC(13,"promptTokens"),hl(),ws(14,"div",30),QC(15,"completionTokens"),hl(),ws(16,"div",30),QC(17,"totalTokens"),hl(),ws(18,"div",30),QC(19,"callCount"),hl(),ws(20,"div",30),QC(21,"cost"),hl()(),ws(22,"div",31),cC(23,at,21,21,"div",32,nC().trackRow,true),oC(25,it,21,21,"div",33),hl()()(),ws(26,"section",16)(27,"div",26),QC(28,"Daily series"),hl(),Sg(29,"app-daily-series-chart",34),hl()()),o&2){let e=EC();nI(23),uC(e.rows()),nI(2),iC(e.totalRow()?25:-1),nI(4),bg("points",e.chartPoints());}}var Ee="\u2014",Oe=class o{location=g(_m);state=g(J);view=Gi("byModel");rowsByAgent=ET(()=>this.state.aggregation()?.models??[]);totalRow=ET(()=>this.state.aggregation()?.total??null);rowsByModel=ET(()=>this.state.aggregationByModelId()??[]);chartPointsByAgent=ET(()=>{let t=this.state.series()??[];return this.aggregateDailyPoints(t)});chartPointsByModel=ET(()=>{let t=this.state.seriesByModelId()??[];return this.aggregateDailyPoints(t)});chartPoints=ET(()=>this.view()==="byAgent"?this.chartPointsByAgent():this.chartPointsByModel());rows=ET(()=>this.view()==="byAgent"?this.rowsByAgent():this.rowsByModel());isEmpty=ET(()=>{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=ET(()=>{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=ET(()=>!this.isMissingPeriod()&&this.state.tokenDataPartial());navigateBack(){this.location.back();}formatTokenValue(t){return t===null?Ee:new Bb("en-US").transform(t,"1.0-2")??"0"}formatCostValue(t,e){return t?Ee:"$"+(new Bb("en-US").transform(e??0,"1.2-2")??"0.00")}static \u0275fac=function(e){return new(e||o)};static \u0275cmp=Fw({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&&(ws(0,"section",0)(1,"header",1)(2,"div",2)(3,"button",3),Rg("click",function(){return n.navigateBack()}),ws(4,"mat-icon"),QC(5,"chevron_left"),hl()(),ws(6,"div")(7,"h1",4),QC(8,"Token Usage"),hl(),ws(9,"p",5),QC(10,"Track prompt and completion token usage by agent and model."),hl()()(),ws(11,"div",6)(12,"label",7)(13,"span",8),QC(14,"From"),hl(),ws(15,"div",9)(16,"input",10),Rg("ngModelChange",function(d){return n.onFromChange(d)}),hl(),GI(),ws(17,"button",11),Rg("click",function(){return n.clearFrom()}),QC(18," Clear "),hl()()(),ws(19,"label",7)(20,"span",8),QC(21,"To"),hl(),ws(22,"div",9)(23,"input",10),Rg("ngModelChange",function(d){return n.onToChange(d)}),hl(),GI(),ws(24,"button",11),Rg("click",function(){return n.clearTo()}),QC(25," Clear "),hl()()(),ws(26,"label",7)(27,"span",8),QC(28,"View"),hl(),ws(29,"select",12),Rg("ngModelChange",function(d){return n.view.set(d)}),ws(30,"option",13),QC(31,"By model"),hl(),ws(32,"option",14),QC(33,"By agent"),hl()(),GI(),hl(),ws(34,"button",15),Rg("click",function(){return n.apply()}),QC(35,"Apply"),hl()()(),oC(36,et,20,12),oC(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&&(nI(16),bg("ngModel",n.state.draftFilters().from),qI(),nI(),bg("disabled",!n.state.draftFilters().from),nI(6),bg("ngModel",n.state.draftFilters().to),qI(),nI(),bg("disabled",!n.state.draftFilters().to),nI(5),bg("ngModel",n.view()),qI(),nI(5),bg("disabled",n.state.loading()),nI(2),iC(n.totalRow()?36:-1),nI(),iC(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 +1,2 @@
1
- import {O}from'./chunk-BIMT-HvS.js';import {R}from'./chunk-DYE131qf.js';import {N}from'./chunk-CyUmCedx.js';import {g,G,bm as Sm,w as we$1,z as zi,y as yT,F,aD as Ly,u as ue$1,c as U,h as Rw,I as Is,A as Ag,m as pl,q as qC,t as tC,J as JE,v as nC,o as iC,ac as yC,x as sC,a9 as fC,H as Hg,C as Cg,a8 as Zg,a5 as vl,n as bg,a3 as UI,T as Tg,a6 as zI,aa as If,ab as wf,cH as Jw}from'./main-6K2UFGD2.js';import {l,I,f}from'./chunk-uPxETzZs.js';import {S as Se$1}from'./chunk-l0HLnBLv.js';import'./chunk-DTIhOEG_.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-C9tuHQmZ.js';import'./chunk-DXDohTwX.js';import'./chunk-nWqZHM4o.js';var D=(r,i)=>i.value;function se(r,i){r&1&&(Is(0,"p",4),qC(1,"Loading\u2026"),pl());}function de(r,i){if(r&1){let e=fC();Is(0,"button",18),Ag("click",function(){let d=If(e).$implicit,_=yC(2);return wf(_.setThemeVariant(d.value))}),Is(1,"span",19),qC(2),pl(),Is(3,"span",20),qC(4),pl()();}if(r&2){let e=i.$implicit,a=yC(2);Hg("user-profile__theme-variant--active",a.themeVariant()===e.value),Cg("aria-pressed",a.themeVariant()===e.value),JE(2),Zg(e.label),JE(2),Zg(e.description);}}function _e(r,i){if(r&1){let e=fC();Is(0,"button",21),Ag("click",function(){let d=If(e).$implicit,_=yC(2);return wf(_.setTheme(d.value))}),qC(1),pl();}if(r&2){let e=i.$implicit,a=yC(2);Hg("user-profile__segmented-option--active",a.themeMode()===e.value),Cg("aria-pressed",a.themeMode()===e.value),JE(),vl(" ",e.label," ");}}function ce(r,i){if(r&1){let e=fC();Is(0,"button",21),Ag("click",function(){let d=If(e).$implicit,_=yC(2);return wf(_.setEnterKeyBehavior(d.value))}),qC(1),pl();}if(r&2){let e=i.$implicit,a=yC(2);Hg("user-profile__segmented-option--active",a.enterKeyBehavior()===e.value),Cg("aria-pressed",a.enterKeyBehavior()===e.value),JE(),vl(" ",e.label," ");}}function pe(r,i){if(r&1&&(Is(0,"option",32),qC(1),pl()),r&2){let e=i.$implicit;Tg("value",e.value),JE(),Zg(e.label);}}function me(r,i){if(r&1){let e=fC();Is(0,"form",22),Ag("ngSubmit",function(){If(e);let d=yC(2);return wf(d.save())}),Is(1,"div",5)(2,"h2",6),qC(3,"Identity"),pl(),Is(4,"div",7)(5,"span",8),qC(6,"Email"),pl(),Is(7,"span",23),qC(8),pl()(),Is(9,"div",7)(10,"span",8),qC(11,"External ID"),pl(),Is(12,"span",23),qC(13),pl()()(),Is(14,"div",5)(15,"h2",6),qC(16,"Profile"),pl(),Is(17,"div",7)(18,"label",24),qC(19,"First name"),pl(),bg(20,"input",25),UI(),pl(),Is(21,"div",7)(22,"label",26),qC(23,"Last name"),pl(),bg(24,"input",27),UI(),pl(),Is(25,"div",7)(26,"label",28),qC(27,"Bio"),pl(),bg(28,"textarea",29),UI(),pl(),Is(29,"div",7)(30,"label",30),qC(31,"Language"),pl(),Is(32,"select",31),iC(33,pe,2,2,"option",32,D),pl(),UI(),pl()(),Is(35,"div",33)(36,"button",34),qC(37),pl(),Is(38,"button",35),Ag("click",function(){If(e);let d=yC(2);return wf(d.cancelEditing())}),qC(39,"Cancel"),pl()()();}if(r&2){let e=yC(),a=yC();Tg("formGroup",a.form),JE(8),Zg(e.email),JE(5),Zg(e.externalId),JE(7),zI(),JE(4),zI(),JE(4),zI(),JE(4),zI(),JE(),sC(a.languageOptions),JE(3),Tg("disabled",a.isSaving()),JE(),vl(" ",a.isSaving()?"Saving\u2026":"Save changes"," ");}}function ue(r,i){r&1&&(Is(0,"p",43),qC(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=fC();Is(0,"span",50),qC(1,"Delete?"),pl(),Is(2,"button",51),Ag("click",function(){If(e);let d=yC().$implicit,_=yC(6);return wf(_.confirmDelete(d))}),qC(3," Confirm "),pl(),Is(4,"button",52),Ag("click",function(){If(e);let d=yC(7);return wf(d.cancelDelete())}),qC(5," Cancel "),pl();}}function ge(r,i){if(r&1){let e=fC();Is(0,"button",52),Ag("click",function(){If(e);let d=yC().$implicit,_=yC(6);return wf(_.armDelete(d))}),qC(1," Delete "),pl();}}function Ce(r,i){if(r&1&&(Is(0,"li",46)(1,"span",47),qC(2),pl(),Is(3,"span",48),qC(4),pl(),tC(5,fe,6,0)(6,ge,2,0,"button",49),pl()),r&2){let e=i.$implicit,a=yC(6);JE(2),Zg(e.name),JE(2),Zg(e.subtitle),JE(),nC(a.isPendingDelete(e)?5:6);}}function ve(r,i){if(r&1&&(Is(0,"h3",44),qC(1,"Integrations"),pl(),Is(2,"ul",45),iC(3,Ce,7,3,"li",46,Jw().trackEntry,true),pl()),r&2){let e=yC(5);JE(3),sC(e.recap().integrations);}}function xe(r,i){if(r&1){let e=fC();Is(0,"span",50),qC(1,"Delete?"),pl(),Is(2,"button",51),Ag("click",function(){If(e);let d=yC().$implicit,_=yC(6);return wf(_.confirmDelete(d))}),qC(3," Confirm "),pl(),Is(4,"button",52),Ag("click",function(){If(e);let d=yC(7);return wf(d.cancelDelete())}),qC(5," Cancel "),pl();}}function be(r,i){if(r&1){let e=fC();Is(0,"button",52),Ag("click",function(){If(e);let d=yC().$implicit,_=yC(6);return wf(_.armDelete(d))}),qC(1," Delete "),pl();}}function ye(r,i){if(r&1&&(Is(0,"li",46)(1,"span",47),qC(2),pl(),Is(3,"span",48),qC(4),pl(),tC(5,xe,6,0)(6,be,2,0,"button",49),pl()),r&2){let e=i.$implicit,a=yC(6);JE(2),Zg(e.name),JE(2),Zg(e.subtitle),JE(),nC(a.isPendingDelete(e)?5:6);}}function he(r,i){if(r&1&&(Is(0,"h3",44),qC(1,"AI Providers"),pl(),Is(2,"ul",45),iC(3,ye,7,3,"li",46,Jw().trackEntry,true),pl()),r&2){let e=yC(5);JE(3),sC(e.recap().aiProviders);}}function Ee(r,i){if(r&1){let e=fC();Is(0,"span",50),qC(1,"Delete?"),pl(),Is(2,"button",51),Ag("click",function(){If(e);let d=yC().$implicit,_=yC(6);return wf(_.confirmDelete(d))}),qC(3," Confirm "),pl(),Is(4,"button",52),Ag("click",function(){If(e);let d=yC(7);return wf(d.cancelDelete())}),qC(5," Cancel "),pl();}}function Pe(r,i){if(r&1){let e=fC();Is(0,"button",52),Ag("click",function(){If(e);let d=yC().$implicit,_=yC(6);return wf(_.armDelete(d))}),qC(1," Delete "),pl();}}function Se(r,i){if(r&1&&(Is(0,"li",46)(1,"span",47),qC(2),pl(),Is(3,"span",48),qC(4),pl(),tC(5,Ee,6,0)(6,Pe,2,0,"button",49),pl()),r&2){let e=i.$implicit,a=yC(6);JE(2),Zg(e.name),JE(2),Zg(e.subtitle),JE(),nC(a.isPendingDelete(e)?5:6);}}function we(r,i){if(r&1&&(Is(0,"h3",44),qC(1,"My global auth settings"),pl(),Is(2,"ul",45),iC(3,Se,7,3,"li",46,Jw().trackEntry,true),pl()),r&2){let e=yC(5);JE(3),sC(e.recap().authSettings);}}function ke(r,i){if(r&1&&(tC(0,ve,5,0),tC(1,he,5,0),tC(2,we,5,0)),r&2){let e=yC(4);nC(e.recap().integrations.length>0?0:-1),JE(),nC(e.recap().aiProviders.length>0?1:-1),JE(),nC(e.recap().authSettings.length>0?2:-1);}}function Me(r,i){if(r&1&&tC(0,ue,2,0,"p",43)(1,ke,3,3),r&2){let e=yC(3);nC(e.recap().total===0?0:1);}}function Oe(r,i){if(r&1){let e=fC();Is(0,"div",17)(1,"div",5)(2,"h2",6),qC(3,"Identity"),pl(),Is(4,"div",7)(5,"span",8),qC(6,"Email"),pl(),Is(7,"span",36),qC(8),pl()(),Is(9,"div",7)(10,"span",8),qC(11,"External ID"),pl(),Is(12,"span",36),qC(13),pl()()(),Is(14,"div",5)(15,"h2",6),qC(16,"Profile"),pl(),Is(17,"div",7)(18,"span",8),qC(19,"First name"),pl(),Is(20,"span",36),qC(21),pl()(),Is(22,"div",7)(23,"span",8),qC(24,"Last name"),pl(),Is(25,"span",36),qC(26),pl()(),Is(27,"div",37)(28,"span",8),qC(29,"Bio"),pl(),Is(30,"span",36),qC(31),pl()(),Is(32,"div",7)(33,"span",8),qC(34,"Language"),pl(),Is(35,"span",36),qC(36),pl()()(),Is(37,"div",33)(38,"button",38),Ag("click",function(){If(e);let d=yC(2);return wf(d.startEditing())}),qC(39," Edit profile "),pl()(),Is(40,"div",39)(41,"button",40),Ag("click",function(){If(e);let d=yC(2);return wf(d.toggleOverrides())}),Is(42,"span",41),qC(43,"\u25B6"),pl(),qC(44," My global user configurations "),Is(45,"span",42),qC(46),pl()(),tC(47,Me,2,1),pl()();}if(r&2){let e=yC(),a=yC();JE(8),Zg(e.email),JE(5),Zg(e.externalId),JE(8),Zg(e.firstname||"\u2014"),JE(5),Zg(e.lastname||"\u2014"),JE(5),Zg(e.bio||"\u2014"),JE(5),Zg(e.preferredLanguage||"\u2014"),JE(5),Cg("aria-expanded",a.isOverridesExpanded()),JE(),Hg("user-profile__overrides-arrow--open",a.isOverridesExpanded()),JE(4),vl("(",a.recap().total,")"),JE(),nC(a.isOverridesExpanded()?47:-1);}}function Ue(r,i){if(r&1&&(Is(0,"div",5)(1,"h2",6),qC(2,"Appearance"),pl(),Is(3,"div",7)(4,"span",8),qC(5,"Skin"),pl(),Is(6,"div",9),iC(7,de,5,5,"button",10,D),pl()(),Is(9,"div",7)(10,"span",8),qC(11,"Mode"),pl(),Is(12,"div",11),iC(13,_e,2,4,"button",12,D),pl()()(),Is(15,"div",5)(16,"h2",6),qC(17,"Composer"),pl(),Is(18,"div",7)(19,"span",8),qC(20,"Enter key"),pl(),Is(21,"div",13)(22,"div",14),iC(23,ce,2,4,"button",12,D),pl(),Is(25,"p",15),qC(26,'In "New line" mode, press Ctrl or Cmd + Enter to send.'),pl()()()(),tC(27,me,40,5,"form",16)(28,Oe,48,11,"div",17)),r&2){let e=yC();JE(7),sC(e.themeVariantOptions),JE(6),sC(e.themeOptions),JE(10),sC(e.enterKeyOptions),JE(4),nC(e.isEditing()?27:28);}}function Te(r,i){r&1&&(Is(0,"p",4),qC(1,"Unable to load profile."),pl());}var le=class r{userState=g(l);router=g(G);location=g(Sm);destroyRef=g(we$1);integrationState=g(N);providerState=g(O);authSettingState=g(R);themePort=g(I);preferencesPort=g(f);isEditing=zi(false);isLoading=zi(false);isSaving=zi(false);isOverridesExpanded=zi(false);currentUser=this.userState.currentUser;theme=this.themePort.theme;themeMode=yT(()=>this.themePort.theme().mode);themeOptions=[{value:"light",label:"Light"},{value:"dark",label:"Dark"},{value:"system",label:"System"}];themeVariant=yT(()=>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(ue$1(([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=zi(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=Rw({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&&(Is(0,"div",0)(1,"header",1)(2,"ds-icon-button",2),Ag("action",function(){return a.goBack()}),pl(),Is(3,"h1",3),qC(4,"My profile"),pl()(),tC(5,se,2,0,"p",4)(6,Ue,29,1)(7,Te,2,0,"p",4),pl()),e&2){let d;JE(5),nC(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-BNS6Fgaw.js';import {R}from'./chunk-rwEyLSEP.js';import {N}from'./chunk-Be1LOFvg.js';import {g,G,bm as _m,w as we$1,a as Gi,E as ET,F,aD as jy,u as ue$1,c as U,h as Fw,m as ws,o as Rg,n as hl,Q as QC,q as oC,t as nI,x as iC,r as cC,ac as EC,y as uC,a9 as gC,A as Ug,T as Tg,a8 as Yg,a5 as Dl,S as Sg,a3 as GI,v as bg,a6 as qI,aa as wf,ab as Cf,cH as nC}from'./main-5PAOSHSM.js';import {l,I,f}from'./chunk-BY7uKZAo.js';import {S as Se$1}from'./chunk-CtkiOUdU.js';import'./chunk-S8F5_Te_.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-tTmeIHGS.js';import'./chunk-BEUXx3TO.js';import'./chunk-kvCfAm7Z.js';var D=(r,i)=>i.value;function se(r,i){r&1&&(ws(0,"p",4),QC(1,"Loading\u2026"),hl());}function de(r,i){if(r&1){let e=gC();ws(0,"button",18),Rg("click",function(){let d=wf(e).$implicit,_=EC(2);return Cf(_.setThemeVariant(d.value))}),ws(1,"span",19),QC(2),hl(),ws(3,"span",20),QC(4),hl()();}if(r&2){let e=i.$implicit,a=EC(2);Ug("user-profile__theme-variant--active",a.themeVariant()===e.value),Tg("aria-pressed",a.themeVariant()===e.value),nI(2),Yg(e.label),nI(2),Yg(e.description);}}function _e(r,i){if(r&1){let e=gC();ws(0,"button",21),Rg("click",function(){let d=wf(e).$implicit,_=EC(2);return Cf(_.setTheme(d.value))}),QC(1),hl();}if(r&2){let e=i.$implicit,a=EC(2);Ug("user-profile__segmented-option--active",a.themeMode()===e.value),Tg("aria-pressed",a.themeMode()===e.value),nI(),Dl(" ",e.label," ");}}function ce(r,i){if(r&1){let e=gC();ws(0,"button",21),Rg("click",function(){let d=wf(e).$implicit,_=EC(2);return Cf(_.setEnterKeyBehavior(d.value))}),QC(1),hl();}if(r&2){let e=i.$implicit,a=EC(2);Ug("user-profile__segmented-option--active",a.enterKeyBehavior()===e.value),Tg("aria-pressed",a.enterKeyBehavior()===e.value),nI(),Dl(" ",e.label," ");}}function pe(r,i){if(r&1&&(ws(0,"option",32),QC(1),hl()),r&2){let e=i.$implicit;bg("value",e.value),nI(),Yg(e.label);}}function me(r,i){if(r&1){let e=gC();ws(0,"form",22),Rg("ngSubmit",function(){wf(e);let d=EC(2);return Cf(d.save())}),ws(1,"div",5)(2,"h2",6),QC(3,"Identity"),hl(),ws(4,"div",7)(5,"span",8),QC(6,"Email"),hl(),ws(7,"span",23),QC(8),hl()(),ws(9,"div",7)(10,"span",8),QC(11,"External ID"),hl(),ws(12,"span",23),QC(13),hl()()(),ws(14,"div",5)(15,"h2",6),QC(16,"Profile"),hl(),ws(17,"div",7)(18,"label",24),QC(19,"First name"),hl(),Sg(20,"input",25),GI(),hl(),ws(21,"div",7)(22,"label",26),QC(23,"Last name"),hl(),Sg(24,"input",27),GI(),hl(),ws(25,"div",7)(26,"label",28),QC(27,"Bio"),hl(),Sg(28,"textarea",29),GI(),hl(),ws(29,"div",7)(30,"label",30),QC(31,"Language"),hl(),ws(32,"select",31),cC(33,pe,2,2,"option",32,D),hl(),GI(),hl()(),ws(35,"div",33)(36,"button",34),QC(37),hl(),ws(38,"button",35),Rg("click",function(){wf(e);let d=EC(2);return Cf(d.cancelEditing())}),QC(39,"Cancel"),hl()()();}if(r&2){let e=EC(),a=EC();bg("formGroup",a.form),nI(8),Yg(e.email),nI(5),Yg(e.externalId),nI(7),qI(),nI(4),qI(),nI(4),qI(),nI(4),qI(),nI(),uC(a.languageOptions),nI(3),bg("disabled",a.isSaving()),nI(),Dl(" ",a.isSaving()?"Saving\u2026":"Save changes"," ");}}function ue(r,i){r&1&&(ws(0,"p",43),QC(1," No global configuration yet. Create one from the Integrations / AI Providers / Auth Settings pages of your namespaces. "),hl());}function fe(r,i){if(r&1){let e=gC();ws(0,"span",50),QC(1,"Delete?"),hl(),ws(2,"button",51),Rg("click",function(){wf(e);let d=EC().$implicit,_=EC(6);return Cf(_.confirmDelete(d))}),QC(3," Confirm "),hl(),ws(4,"button",52),Rg("click",function(){wf(e);let d=EC(7);return Cf(d.cancelDelete())}),QC(5," Cancel "),hl();}}function ge(r,i){if(r&1){let e=gC();ws(0,"button",52),Rg("click",function(){wf(e);let d=EC().$implicit,_=EC(6);return Cf(_.armDelete(d))}),QC(1," Delete "),hl();}}function Ce(r,i){if(r&1&&(ws(0,"li",46)(1,"span",47),QC(2),hl(),ws(3,"span",48),QC(4),hl(),oC(5,fe,6,0)(6,ge,2,0,"button",49),hl()),r&2){let e=i.$implicit,a=EC(6);nI(2),Yg(e.name),nI(2),Yg(e.subtitle),nI(),iC(a.isPendingDelete(e)?5:6);}}function ve(r,i){if(r&1&&(ws(0,"h3",44),QC(1,"Integrations"),hl(),ws(2,"ul",45),cC(3,Ce,7,3,"li",46,nC().trackEntry,true),hl()),r&2){let e=EC(5);nI(3),uC(e.recap().integrations);}}function xe(r,i){if(r&1){let e=gC();ws(0,"span",50),QC(1,"Delete?"),hl(),ws(2,"button",51),Rg("click",function(){wf(e);let d=EC().$implicit,_=EC(6);return Cf(_.confirmDelete(d))}),QC(3," Confirm "),hl(),ws(4,"button",52),Rg("click",function(){wf(e);let d=EC(7);return Cf(d.cancelDelete())}),QC(5," Cancel "),hl();}}function be(r,i){if(r&1){let e=gC();ws(0,"button",52),Rg("click",function(){wf(e);let d=EC().$implicit,_=EC(6);return Cf(_.armDelete(d))}),QC(1," Delete "),hl();}}function ye(r,i){if(r&1&&(ws(0,"li",46)(1,"span",47),QC(2),hl(),ws(3,"span",48),QC(4),hl(),oC(5,xe,6,0)(6,be,2,0,"button",49),hl()),r&2){let e=i.$implicit,a=EC(6);nI(2),Yg(e.name),nI(2),Yg(e.subtitle),nI(),iC(a.isPendingDelete(e)?5:6);}}function he(r,i){if(r&1&&(ws(0,"h3",44),QC(1,"AI Providers"),hl(),ws(2,"ul",45),cC(3,ye,7,3,"li",46,nC().trackEntry,true),hl()),r&2){let e=EC(5);nI(3),uC(e.recap().aiProviders);}}function Ee(r,i){if(r&1){let e=gC();ws(0,"span",50),QC(1,"Delete?"),hl(),ws(2,"button",51),Rg("click",function(){wf(e);let d=EC().$implicit,_=EC(6);return Cf(_.confirmDelete(d))}),QC(3," Confirm "),hl(),ws(4,"button",52),Rg("click",function(){wf(e);let d=EC(7);return Cf(d.cancelDelete())}),QC(5," Cancel "),hl();}}function Pe(r,i){if(r&1){let e=gC();ws(0,"button",52),Rg("click",function(){wf(e);let d=EC().$implicit,_=EC(6);return Cf(_.armDelete(d))}),QC(1," Delete "),hl();}}function Se(r,i){if(r&1&&(ws(0,"li",46)(1,"span",47),QC(2),hl(),ws(3,"span",48),QC(4),hl(),oC(5,Ee,6,0)(6,Pe,2,0,"button",49),hl()),r&2){let e=i.$implicit,a=EC(6);nI(2),Yg(e.name),nI(2),Yg(e.subtitle),nI(),iC(a.isPendingDelete(e)?5:6);}}function we(r,i){if(r&1&&(ws(0,"h3",44),QC(1,"My global auth settings"),hl(),ws(2,"ul",45),cC(3,Se,7,3,"li",46,nC().trackEntry,true),hl()),r&2){let e=EC(5);nI(3),uC(e.recap().authSettings);}}function ke(r,i){if(r&1&&(oC(0,ve,5,0),oC(1,he,5,0),oC(2,we,5,0)),r&2){let e=EC(4);iC(e.recap().integrations.length>0?0:-1),nI(),iC(e.recap().aiProviders.length>0?1:-1),nI(),iC(e.recap().authSettings.length>0?2:-1);}}function Me(r,i){if(r&1&&oC(0,ue,2,0,"p",43)(1,ke,3,3),r&2){let e=EC(3);iC(e.recap().total===0?0:1);}}function Oe(r,i){if(r&1){let e=gC();ws(0,"div",17)(1,"div",5)(2,"h2",6),QC(3,"Identity"),hl(),ws(4,"div",7)(5,"span",8),QC(6,"Email"),hl(),ws(7,"span",36),QC(8),hl()(),ws(9,"div",7)(10,"span",8),QC(11,"External ID"),hl(),ws(12,"span",36),QC(13),hl()()(),ws(14,"div",5)(15,"h2",6),QC(16,"Profile"),hl(),ws(17,"div",7)(18,"span",8),QC(19,"First name"),hl(),ws(20,"span",36),QC(21),hl()(),ws(22,"div",7)(23,"span",8),QC(24,"Last name"),hl(),ws(25,"span",36),QC(26),hl()(),ws(27,"div",37)(28,"span",8),QC(29,"Bio"),hl(),ws(30,"span",36),QC(31),hl()(),ws(32,"div",7)(33,"span",8),QC(34,"Language"),hl(),ws(35,"span",36),QC(36),hl()()(),ws(37,"div",33)(38,"button",38),Rg("click",function(){wf(e);let d=EC(2);return Cf(d.startEditing())}),QC(39," Edit profile "),hl()(),ws(40,"div",39)(41,"button",40),Rg("click",function(){wf(e);let d=EC(2);return Cf(d.toggleOverrides())}),ws(42,"span",41),QC(43,"\u25B6"),hl(),QC(44," My global user configurations "),ws(45,"span",42),QC(46),hl()(),oC(47,Me,2,1),hl()();}if(r&2){let e=EC(),a=EC();nI(8),Yg(e.email),nI(5),Yg(e.externalId),nI(8),Yg(e.firstname||"\u2014"),nI(5),Yg(e.lastname||"\u2014"),nI(5),Yg(e.bio||"\u2014"),nI(5),Yg(e.preferredLanguage||"\u2014"),nI(5),Tg("aria-expanded",a.isOverridesExpanded()),nI(),Ug("user-profile__overrides-arrow--open",a.isOverridesExpanded()),nI(4),Dl("(",a.recap().total,")"),nI(),iC(a.isOverridesExpanded()?47:-1);}}function Ue(r,i){if(r&1&&(ws(0,"div",5)(1,"h2",6),QC(2,"Appearance"),hl(),ws(3,"div",7)(4,"span",8),QC(5,"Skin"),hl(),ws(6,"div",9),cC(7,de,5,5,"button",10,D),hl()(),ws(9,"div",7)(10,"span",8),QC(11,"Mode"),hl(),ws(12,"div",11),cC(13,_e,2,4,"button",12,D),hl()()(),ws(15,"div",5)(16,"h2",6),QC(17,"Composer"),hl(),ws(18,"div",7)(19,"span",8),QC(20,"Enter key"),hl(),ws(21,"div",13)(22,"div",14),cC(23,ce,2,4,"button",12,D),hl(),ws(25,"p",15),QC(26,'In "New line" mode, press Ctrl or Cmd + Enter to send.'),hl()()()(),oC(27,me,40,5,"form",16)(28,Oe,48,11,"div",17)),r&2){let e=EC();nI(7),uC(e.themeVariantOptions),nI(6),uC(e.themeOptions),nI(10),uC(e.enterKeyOptions),nI(4),iC(e.isEditing()?27:28);}}function Te(r,i){r&1&&(ws(0,"p",4),QC(1,"Unable to load profile."),hl());}var le=class r{userState=g(l);router=g(G);location=g(_m);destroyRef=g(we$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=ET(()=>this.themePort.theme().mode);themeOptions=[{value:"light",label:"Light"},{value:"dark",label:"Dark"},{value:"system",label:"System"}];themeVariant=ET(()=>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(jy([this.integrationState.userGlobal$,this.providerState.userGlobal$,this.authSettingState.userGlobal$]).pipe(ue$1(([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=Fw({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()}),hl(),ws(3,"h1",3),QC(4,"My profile"),hl()(),oC(5,se,2,0,"p",4)(6,Ue,29,1)(7,Te,2,0,"p",4),hl()),e&2){let d;nI(5),iC(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 +1 @@
1
- import {n}from'./chunk-CfgXrte_.js';import {O}from'./chunk-CcLheUaL.js';import {v}from'./chunk-DEsz0fzs.js';import {R}from'./chunk-DYE131qf.js';import {g,ao as V,G,w as we,z as zi,u as ue,c as U$1,bS as va,X as br,h as Rw,aK as xb,I as Is,bf as cT,A as Ag,m as pl,af as Dg,r as bC,T as Tg,bg as lT,ah as oT,t as tC,ac as yC,v as nC,q as qC,J as JE,a8 as Zg,a9 as fC,aa as If,ab as wf,ag as pT}from'./main-6K2UFGD2.js';import'./chunk-uPxETzZs.js';import {W as Wn,S as Se}from'./chunk-l0HLnBLv.js';import'./chunk-DTIhOEG_.js';import'./chunk-C9tuHQmZ.js';import'./chunk-DXDohTwX.js';import'./chunk-nWqZHM4o.js';var W=()=>[];function z(s,e){if(s&1&&(Is(0,"p",3),qC(1),pl()),s&2){let t=yC().$implicit;JE(),Zg(t.name);}}function U(s,e){if(s&1){let t=fC();Is(0,"agentos-auth-setting-item",5),Ag("editRequested",function(){let i=If(t),r=yC(2);return wf(r.onEdit(i))})("deleteRequested",function(){let i=If(t),r=yC(2);return wf(r.onDelete(i))})("duplicateRequested",function(){let i=If(t),r=yC(2);return wf(r.onDuplicate(i))}),pl();}if(s&2){let t=e,n=yC(2);Tg("config",t.config)("scope",t.scope)("readOnly",t.scope==="platform"||t.scope==="namespace"&&!n.isAdmin());}}function X(s,e){if(s&1&&tC(0,z,2,1,"p",3)(1,U,1,3,"agentos-auth-setting-item",4),s&2){let t,n=e.$implicit,i=yC();nC(i.isEmptyPlaceholder(n.id)?0:(t=i.resolve(n.id))?1:-1,t);}}var k=Object.freeze({platform:"Platform (read-only)",namespace:"Auth Settings du namespace",userOnNs:"Mes overrides sur ce namespace",userGlobal:"Mes overrides globaux"}),F="__empty__",j=class s{route=g(V);router=g(G);destroyRef=g(we);state=g(R);namespaceRole=g(v);namespaceId=this.route.snapshot.params.namespaceId;isAdmin=zi(false);listItems$=this.state.vm$.pipe(ue(e=>this.toListItems(e)));isLoading=zi(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(ue(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,"auth-settings","new"],{queryParams:{scope:n(this.isAdmin())}});}onEdit(e){let t=e.config.id;t&&this.router.navigate(["/agentos",this.namespaceId,"auth-settings",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(`[AuthSettingsAllScopes] Delete failed for ${e.scope}:${t}:`,n);}});}onDuplicate(e){if(!e.config.id)return;let t=e.scope==="platform"||e.scope==="namespace"&&!this.isAdmin()?"userOnNs":e.scope;this.router.navigate(["/agentos",this.namespaceId,"auth-settings","new"],{queryParams:{scope:t,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:"Aucun Auth Setting",groupKey:e,groupLabel:k[e]}]:t.filter(n=>!!n.id).map(n=>({id:this.itemKey(e,n.id),name:n.name,description:n.authType,groupKey:e,groupLabel:k[e]}))}static \u0275fac=function(t){return new(t||s)};static \u0275cmp=Rw({type:s,selectors:[["agentos-auth-settings-all-scopes"]],decls:5,vars:7,consts:[["authSettingItemTpl",""],["title","Auth Settings","emptyMessage","No auth settings available.","cardMinWidth","400px",3,"createRequested","items","loading","showCreate","itemTemplate"],["toolbar-start","","icon","arrow_back","title","Back",3,"action"],[1,"auth-settings-all-scopes__empty"],[3,"config","scope","readOnly"],[3,"editRequested","deleteRequested","duplicateRequested","config","scope","readOnly"]],template:function(t,n){if(t&1&&(Is(0,"ds-entity-list",1),cT(1,"async"),Ag("createRequested",function(){return n.openCreateForm()}),Is(2,"ds-icon-button",2),Ag("action",function(){return n.goBack()}),pl()(),Dg(3,X,2,1,"ng-template",null,0,pT)),t&2){let i=bC(4);Tg("items",lT(1,4,n.listItems$)??oT(6,W))("loading",n.isLoading())("showCreate",true)("itemTemplate",i);}},dependencies:[Wn,O,Se,xb],encapsulation:2})};export{j as AuthSettingsAllScopesComponent};
1
+ import {n}from'./chunk-CfgXrte_.js';import {O}from'./chunk-IUvEtpfr.js';import {v}from'./chunk-CPBcDx4G.js';import {R}from'./chunk-rwEyLSEP.js';import {g,ao as V,G,w as we,a as Gi,u as ue,c as U$1,bS as Da,X as br,h as Fw,aK as Ob,m as ws,bf as dT,o as Rg,n as hl,af as Eg,M as MC,v as bg,bg as pT,ah as aT,q as oC,ac as EC,x as iC,Q as QC,t as nI,a8 as Yg,a9 as gC,aa as wf,ab as Cf,ag as mT}from'./main-5PAOSHSM.js';import'./chunk-BY7uKZAo.js';import {W as Wn,S as Se}from'./chunk-CtkiOUdU.js';import'./chunk-S8F5_Te_.js';import'./chunk-tTmeIHGS.js';import'./chunk-BEUXx3TO.js';import'./chunk-kvCfAm7Z.js';var W=()=>[];function z(s,e){if(s&1&&(ws(0,"p",3),QC(1),hl()),s&2){let t=EC().$implicit;nI(),Yg(t.name);}}function U(s,e){if(s&1){let t=gC();ws(0,"agentos-auth-setting-item",5),Rg("editRequested",function(){let i=wf(t),r=EC(2);return Cf(r.onEdit(i))})("deleteRequested",function(){let i=wf(t),r=EC(2);return Cf(r.onDelete(i))})("duplicateRequested",function(){let i=wf(t),r=EC(2);return Cf(r.onDuplicate(i))}),hl();}if(s&2){let t=e,n=EC(2);bg("config",t.config)("scope",t.scope)("readOnly",t.scope==="platform"||t.scope==="namespace"&&!n.isAdmin());}}function X(s,e){if(s&1&&oC(0,z,2,1,"p",3)(1,U,1,3,"agentos-auth-setting-item",4),s&2){let t,n=e.$implicit,i=EC();iC(i.isEmptyPlaceholder(n.id)?0:(t=i.resolve(n.id))?1:-1,t);}}var k=Object.freeze({platform:"Platform (read-only)",namespace:"Auth Settings du namespace",userOnNs:"Mes overrides sur ce namespace",userGlobal:"Mes overrides globaux"}),F="__empty__",j=class s{route=g(V);router=g(G);destroyRef=g(we);state=g(R);namespaceRole=g(v);namespaceId=this.route.snapshot.params.namespaceId;isAdmin=Gi(false);listItems$=this.state.vm$.pipe(ue(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(ue(e=>e.get("namespaceId")??""),Da(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,"auth-settings","new"],{queryParams:{scope:n(this.isAdmin())}});}onEdit(e){let t=e.config.id;t&&this.router.navigate(["/agentos",this.namespaceId,"auth-settings",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(`[AuthSettingsAllScopes] Delete failed for ${e.scope}:${t}:`,n);}});}onDuplicate(e){if(!e.config.id)return;let t=e.scope==="platform"||e.scope==="namespace"&&!this.isAdmin()?"userOnNs":e.scope;this.router.navigate(["/agentos",this.namespaceId,"auth-settings","new"],{queryParams:{scope:t,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:"Aucun Auth Setting",groupKey:e,groupLabel:k[e]}]:t.filter(n=>!!n.id).map(n=>({id:this.itemKey(e,n.id),name:n.name,description:n.authType,groupKey:e,groupLabel:k[e]}))}static \u0275fac=function(t){return new(t||s)};static \u0275cmp=Fw({type:s,selectors:[["agentos-auth-settings-all-scopes"]],decls:5,vars:7,consts:[["authSettingItemTpl",""],["title","Auth Settings","emptyMessage","No auth settings available.","cardMinWidth","400px",3,"createRequested","items","loading","showCreate","itemTemplate"],["toolbar-start","","icon","arrow_back","title","Back",3,"action"],[1,"auth-settings-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),dT(1,"async"),Rg("createRequested",function(){return n.openCreateForm()}),ws(2,"ds-icon-button",2),Rg("action",function(){return n.goBack()}),hl()(),Eg(3,X,2,1,"ng-template",null,0,mT)),t&2){let i=MC(4);bg("items",pT(1,4,n.listItems$)??aT(6,W))("loading",n.isLoading())("showCreate",true)("itemTemplate",i);}},dependencies:[Wn,O,Se,Ob],encapsulation:2})};export{j as AuthSettingsAllScopesComponent};
@@ -1 +1 @@
1
- import {g,ao as V,G,w as we,de as M,dd as $,F,a7 as ya,X as br,z as zi,y as yT,c as U,a as z$1,b as P,h as Rw,I as Is,A as Ag,q as qC,m as pl,t as tC,J as JE,a8 as Zg,v as nC,a9 as fC,n as bg,a3 as UI,ac as yC,T as Tg,a6 as zI,a5 as vl,o as iC,cH as Jw,x as sC,b0 as Yg,aa as If,ab as wf}from'./main-6K2UFGD2.js';import {o as z,k as _t,b as _e,n as ni,J as Jn,Q as Qn,e as ei,Y as Ye,f as fn,A as At,Z as Zn,l as Xn,$ as $t,W as Wt,C as Cn,E as En,p as An}from'./chunk-C9tuHQmZ.js';function le(l,t){l&1&&(Is(0,"p",5),qC(1,"Loading\u2026"),pl());}function ae(l,t){if(l&1&&bg(0,"input",11),l&2){let e=yC(2);Tg("value",e.selectedProviderLabel());}}function de(l,t){if(l&1&&(Is(0,"option",43),qC(1),pl()),l&2){let e=t.$implicit;Tg("value",e.id),JE(),Yg("",e.name," (",e.apiType,")");}}function me(l,t){if(l&1&&(Is(0,"select",12)(1,"option",42),qC(2,"Select provider"),pl(),iC(3,de,2,3,"option",43,Jw().trackByProvider,true),pl(),UI()),l&2){let e=yC(2);Tg("formControl",e.aiProviderIdControl),zI(),JE(3),sC(e.providers());}}function ce(l,t){if(l&1){let e=fC();Is(0,"form",7),Ag("ngSubmit",function(){If(e);let u=yC();return wf(u.submit())}),Is(1,"div",8)(2,"label",9),qC(3," Provider "),Is(4,"span",10),qC(5,"*"),pl()(),tC(6,ae,1,1,"input",11)(7,me,5,1,"select",12),pl(),Is(8,"div",8)(9,"label",13),qC(10," API name "),Is(11,"span",10),qC(12,"*"),pl()(),bg(13,"input",14),UI(),pl(),Is(14,"div",8)(15,"label",15),qC(16,"Description"),pl(),bg(17,"input",16),UI(),pl(),Is(18,"div",8)(19,"label",17),qC(20,"Alias"),pl(),bg(21,"input",18),UI(),pl(),Is(22,"div",8)(23,"label",19),qC(24,"Priority"),pl(),bg(25,"input",20),UI(),pl(),Is(26,"div",21)(27,"div",8)(28,"label",22),qC(29,"Temperature"),pl(),bg(30,"input",23),UI(),pl(),Is(31,"div",8)(32,"label",24),qC(33,"Context window"),pl(),bg(34,"input",25),UI(),pl()(),Is(35,"div",8)(36,"label",26),qC(37,"Max completion tokens"),pl(),bg(38,"input",27),UI(),pl(),Is(39,"fieldset",28)(40,"legend",29),qC(41," Pricing "),Is(42,"span",30),qC(43,"(per million tokens \u2014 leave blank to skip cost monitoring)"),pl()(),Is(44,"div",21)(45,"div",8)(46,"label",31),qC(47,"Input"),pl(),bg(48,"input",32),UI(),pl(),Is(49,"div",8)(50,"label",33),qC(51,"Output"),pl(),bg(52,"input",34),UI(),pl()(),Is(53,"div",21)(54,"div",8)(55,"label",35),qC(56,"Cache write"),pl(),bg(57,"input",36),UI(),pl(),Is(58,"div",8)(59,"label",37),qC(60,"Cache read"),pl(),bg(61,"input",38),UI(),pl()()(),Is(62,"div",39)(63,"button",40),qC(64),pl(),Is(65,"button",41),Ag("click",function(){If(e);let u=yC();return wf(u.cancel())}),qC(66,"Cancel"),pl()()();}if(l&2){let e=yC();Tg("formGroup",e.form),JE(6),nC(e.isEditMode()?6:7),JE(7),Tg("formControl",e.apiModelNameControl),zI(),JE(4),Tg("formControl",e.descriptionControl),zI(),JE(4),Tg("formControl",e.aliasControl),zI(),JE(4),Tg("formControl",e.priorityControl),zI(),JE(5),Tg("formControl",e.temperatureControl),zI(),JE(4),Tg("formControl",e.contextWindowControl),zI(),JE(4),Tg("formControl",e.maxCompletionTokensControl),zI(),JE(),Tg("formGroup",e.pricingGroup),JE(9),zI(),JE(4),zI(),JE(5),zI(),JE(4),zI(),JE(2),Tg("disabled",e.form.invalid||e.isSubmitting()),JE(),vl(" ",e.isEditMode()?"Save changes":"Create"," ");}}var re=class l{route=g(V);router=g(G);destroyRef=g(we);aiModelController=g(M);aiProviderController=g($);namespaceId=this.route.snapshot.params.namespaceId;isPlatformMode=this.namespaceId===void 0;providers=F(this.aiProviderController.listAiProvider(this.isPlatformMode?"none":this.namespaceId).pipe(ya(()=>br([]))),{initialValue:[]});form=new z({aiProviderId:new _t("",{nonNullable:true,validators:[_e.required]}),apiModelName:new _t("",{nonNullable:true,validators:[_e.required,_e.minLength(1)]}),description:new _t(null),alias:new _t("",{nonNullable:true}),priority:new _t(0,{nonNullable:true}),temperature:new _t(null),contextWindow:new _t(null),maxCompletionTokens:new _t(null),pricing:new z({inputMTokens:new _t(null),outputMTokens:new _t(null),cacheWrite:new _t(null),cacheRead:new _t(null)})});get aiProviderIdControl(){return this.form.controls.aiProviderId}get apiModelNameControl(){return this.form.controls.apiModelName}get descriptionControl(){return this.form.controls.description}get aliasControl(){return this.form.controls.alias}get priorityControl(){return this.form.controls.priority}get temperatureControl(){return this.form.controls.temperature}get contextWindowControl(){return this.form.controls.contextWindow}get maxCompletionTokensControl(){return this.form.controls.maxCompletionTokens}get pricingGroup(){return this.form.controls.pricing}isEditMode=zi(false);isSubmitting=zi(false);isLoading=zi(false);selectedProviderLabel=yT(()=>{let t=this.aiProviderIdControl.value,e=this.providers().find(p=>p.id===t);return e?`${e.name} (${e.apiType})`:t});existingModel=null;ngOnInit(){let t=this.route.snapshot.paramMap.get("modelId");t&&(this.isEditMode.set(true),this.loadModel(t));}loadModel(t){this.isLoading.set(true),this.aiModelController.getByIdAiModel(t).pipe(U(this.destroyRef)).subscribe({next:e=>{this.existingModel=e,this.aiProviderIdControl.setValue(e.aiProviderId),this.aiProviderIdControl.disable(),this.apiModelNameControl.setValue(e.apiModelName),this.descriptionControl.setValue(e.description??null),this.aliasControl.setValue(e.alias??""),this.priorityControl.setValue(e.priority??0),this.temperatureControl.setValue(e.temperature??null),this.contextWindowControl.setValue(e.contextWindow??null),this.maxCompletionTokensControl.setValue(e.maxCompletionTokens??null),this.pricingGroup.setValue({inputMTokens:e.pricing?.inputMTokens??null,outputMTokens:e.pricing?.outputMTokens??null,cacheWrite:e.pricing?.cacheWrite??null,cacheRead:e.pricing?.cacheRead??null}),this.isLoading.set(false);},error:()=>{this.isLoading.set(false),this.navigateBack();}});}submit(){if(this.form.invalid||this.isSubmitting())return;this.isSubmitting.set(true);let t=this.form.getRawValue(),e=t.pricing,u=e.inputMTokens!=null||e.outputMTokens!=null||e.cacheWrite!=null||e.cacheRead!=null?{isEmpty:false,inputMTokens:e.inputMTokens??void 0,outputMTokens:e.outputMTokens??void 0,cacheWrite:e.cacheWrite??void 0,cacheRead:e.cacheRead??void 0}:void 0,k=z$1(P({},this.existingModel??{}),{aiProviderId:t.aiProviderId,namespaceId:this.isPlatformMode?void 0:this.existingModel?.namespaceId??this.namespaceId,apiModelName:t.apiModelName.trim(),description:t.description?.trim()||void 0,alias:t.alias.trim()||void 0,priority:t.priority,temperature:t.temperature??void 0,contextWindow:t.contextWindow??void 0,maxCompletionTokens:t.maxCompletionTokens??void 0,pricing:u});(this.isEditMode()?this.aiModelController.updateAiModel(this.existingModel.id??"",k):this.aiModelController.createAiModel(k)).pipe(U(this.destroyRef)).subscribe({next:()=>this.navigateBack(),error:()=>this.isSubmitting.set(false)});}cancel(){this.navigateBack();}navigateBack(){this.isPlatformMode?this.router.navigate(["/agentos","admin","ai-models"]):this.router.navigate(["/agentos",this.namespaceId,"ai-models"]);}trackByProvider(t,e){return e.id??""}static \u0275fac=function(e){return new(e||l)};static \u0275cmp=Rw({type:l,selectors:[["agentos-ai-model-form"]],decls:10,vars:2,consts:[[1,"ai-model-form"],[1,"ai-model-form__header"],["type","button","title","Back to AI models",1,"ai-model-form__back",3,"click"],[1,"ai-model-form__back-icon"],[1,"ai-model-form__title"],[1,"ai-model-form__loading"],[1,"ai-model-form__form",3,"formGroup"],[1,"ai-model-form__form",3,"ngSubmit","formGroup"],[1,"ai-model-form__field"],["for","model-provider",1,"ai-model-form__label"],["aria-hidden","true"],["id","model-provider","type","text","readonly","","tabindex","-1",1,"ai-model-form__input","ai-model-form__input--readonly",3,"value"],["id","model-provider",1,"ai-model-form__select",3,"formControl"],["for","model-api-name",1,"ai-model-form__label"],["id","model-api-name","type","text","placeholder","e.g. gpt-4o, claude-3-5-sonnet-20241022","autocomplete","off",1,"ai-model-form__input","ai-model-form__input--mono",3,"formControl"],["for","model-description",1,"ai-model-form__label"],["id","model-description","type","text","placeholder","Optional \u2014 short description of this model config","autocomplete","off",1,"ai-model-form__input",3,"formControl"],["for","model-alias",1,"ai-model-form__label"],["id","model-alias","type","text","placeholder","e.g. fast, smart \u2014 short identifier used internally","autocomplete","off",1,"ai-model-form__input",3,"formControl"],["for","model-priority",1,"ai-model-form__label"],["id","model-priority","type","number","placeholder","0 \u2014 higher wins when multiple configs share the same alias","min","0","step","1",1,"ai-model-form__input",3,"formControl"],[1,"ai-model-form__row"],["for","model-temperature",1,"ai-model-form__label"],["id","model-temperature","type","number","placeholder","0 \u2013 2","min","0","max","2","step","0.1",1,"ai-model-form__input",3,"formControl"],["for","model-context-window",1,"ai-model-form__label"],["id","model-context-window","type","number","placeholder","e.g. 128000","min","1","step","1",1,"ai-model-form__input",3,"formControl"],["for","model-max-completion-tokens",1,"ai-model-form__label"],["id","model-max-completion-tokens","type","number","placeholder","e.g. 4096","min","1","step","1",1,"ai-model-form__input",3,"formControl"],[1,"ai-model-form__section",3,"formGroup"],[1,"ai-model-form__section-title"],[1,"ai-model-form__section-hint"],["for","pricing-input",1,"ai-model-form__label"],["id","pricing-input","type","number","placeholder","e.g. 2.50","min","0","step","0.01","formControlName","inputMTokens",1,"ai-model-form__input"],["for","pricing-output",1,"ai-model-form__label"],["id","pricing-output","type","number","placeholder","e.g. 10.00","min","0","step","0.01","formControlName","outputMTokens",1,"ai-model-form__input"],["for","pricing-cache-write",1,"ai-model-form__label"],["id","pricing-cache-write","type","number","placeholder","e.g. 3.75","min","0","step","0.01","formControlName","cacheWrite",1,"ai-model-form__input"],["for","pricing-cache-read",1,"ai-model-form__label"],["id","pricing-cache-read","type","number","placeholder","e.g. 0.30","min","0","step","0.01","formControlName","cacheRead",1,"ai-model-form__input"],[1,"ai-model-form__actions"],["type","submit",1,"ai-model-form__btn","ai-model-form__btn--primary",3,"disabled"],["type","button",1,"ai-model-form__btn",3,"click"],["value","","disabled",""],[3,"value"]],template:function(e,p){e&1&&(Is(0,"div",0)(1,"header",1)(2,"button",2),Ag("click",function(){return p.cancel()}),Is(3,"span",3),qC(4,"\u2190"),pl(),qC(5," AI models "),pl(),Is(6,"h1",4),qC(7),pl()(),tC(8,le,2,0,"p",5)(9,ce,67,12,"form",6),pl()),e&2&&(JE(7),Zg(p.isEditMode()?"Edit AI model":"New AI model"),JE(),nC(p.isLoading()?8:9));},dependencies:[ni,Jn,Qn,ei,Ye,fn,At,Zn,Xn,$t,Wt,Cn,En,An],styles:[".ai-model-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2rem;max-width:480px;margin:0 auto;padding:2rem 1rem}.ai-model-form__header[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.ai-model-form__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)}.ai-model-form__back[_ngcontent-%COMP%]:hover{text-decoration:underline}.ai-model-form__back-icon[_ngcontent-%COMP%]{font-size:1rem;line-height:1}.ai-model-form__title[_ngcontent-%COMP%]{margin:0;font-size:1.5rem;font-weight:700;color:var(--color-text);letter-spacing:-.02em}.ai-model-form__loading[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:.9rem;margin:0}.ai-model-form__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1.25rem}.ai-model-form__row[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.ai-model-form__field[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.375rem}.ai-model-form__label[_ngcontent-%COMP%]{font-size:.875rem;font-weight:500;color:var(--color-text)}.ai-model-form__input[_ngcontent-%COMP%], .ai-model-form__select[_ngcontent-%COMP%]{width:100%;padding:.625rem .875rem;border-radius:0;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;transition:border-color .15s ease}.ai-model-form__input[_ngcontent-%COMP%]:focus, .ai-model-form__select[_ngcontent-%COMP%]:focus{border-color:var(--color-accent)}.ai-model-form__input[_ngcontent-%COMP%]::placeholder, .ai-model-form__select[_ngcontent-%COMP%]::placeholder{color:var(--color-neutral-500)}.ai-model-form__input--mono[_ngcontent-%COMP%]{font-family:monospace}.ai-model-form__section[_ngcontent-%COMP%]{border:1px solid var(--color-divider);border-radius:0;padding:1rem;margin:0;display:flex;flex-direction:column;gap:1rem}.ai-model-form__section-title[_ngcontent-%COMP%]{font-size:.875rem;font-weight:600;color:var(--color-text);padding:0 .25rem}.ai-model-form__section-hint[_ngcontent-%COMP%]{font-weight:400;color:var(--color-text-secondary);font-size:.8125rem}.ai-model-form__input--readonly[_ngcontent-%COMP%]{color:var(--color-text-secondary);cursor:default;background:var(--color-surface-muted, rgba(0, 0, 0, .03))}.ai-model-form__actions[_ngcontent-%COMP%]{display:flex;gap:.75rem;padding-top:.5rem}.ai-model-form__btn[_ngcontent-%COMP%]{padding:.6rem 1.25rem;border-radius:0;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;transition:background .15s ease,border-color .15s ease}.ai-model-form__btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-bg-hover);border-color:var(--color-neutral-500)}.ai-model-form__btn[_ngcontent-%COMP%]:disabled{opacity:.45;cursor:not-allowed}.ai-model-form__btn--primary[_ngcontent-%COMP%]{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.ai-model-form__btn--primary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-700);border-color:var(--color-accent-700)}"]})};export{re as AiModelFormComponent};
1
+ import {g,ao as V,G,w as we,de as M,dd as $,F,a7 as va,X as br,a as Gi,E as ET,c as U,z as z$1,b as P,h as Fw,m as ws,o as Rg,Q as QC,n as hl,q as oC,t as nI,a8 as Yg,x as iC,a9 as gC,S as Sg,a3 as GI,ac as EC,v as bg,a6 as qI,a5 as Dl,r as cC,cH as nC,y as uC,b0 as Qg,aa as wf,ab as Cf}from'./main-5PAOSHSM.js';import {o as z,k as _t,b as _e,n as ni,J as Jn,Q as Qn,e as ei,Y as Ye,f as fn,A as At,Z as Zn,l as Xn,$ as $t,W as Wt,C as Cn,E as En,p as An}from'./chunk-tTmeIHGS.js';function le(l,t){l&1&&(ws(0,"p",5),QC(1,"Loading\u2026"),hl());}function ae(l,t){if(l&1&&Sg(0,"input",11),l&2){let e=EC(2);bg("value",e.selectedProviderLabel());}}function de(l,t){if(l&1&&(ws(0,"option",43),QC(1),hl()),l&2){let e=t.$implicit;bg("value",e.id),nI(),Qg("",e.name," (",e.apiType,")");}}function me(l,t){if(l&1&&(ws(0,"select",12)(1,"option",42),QC(2,"Select provider"),hl(),cC(3,de,2,3,"option",43,nC().trackByProvider,true),hl(),GI()),l&2){let e=EC(2);bg("formControl",e.aiProviderIdControl),qI(),nI(3),uC(e.providers());}}function ce(l,t){if(l&1){let e=gC();ws(0,"form",7),Rg("ngSubmit",function(){wf(e);let u=EC();return Cf(u.submit())}),ws(1,"div",8)(2,"label",9),QC(3," Provider "),ws(4,"span",10),QC(5,"*"),hl()(),oC(6,ae,1,1,"input",11)(7,me,5,1,"select",12),hl(),ws(8,"div",8)(9,"label",13),QC(10," API name "),ws(11,"span",10),QC(12,"*"),hl()(),Sg(13,"input",14),GI(),hl(),ws(14,"div",8)(15,"label",15),QC(16,"Description"),hl(),Sg(17,"input",16),GI(),hl(),ws(18,"div",8)(19,"label",17),QC(20,"Alias"),hl(),Sg(21,"input",18),GI(),hl(),ws(22,"div",8)(23,"label",19),QC(24,"Priority"),hl(),Sg(25,"input",20),GI(),hl(),ws(26,"div",21)(27,"div",8)(28,"label",22),QC(29,"Temperature"),hl(),Sg(30,"input",23),GI(),hl(),ws(31,"div",8)(32,"label",24),QC(33,"Context window"),hl(),Sg(34,"input",25),GI(),hl()(),ws(35,"div",8)(36,"label",26),QC(37,"Max completion tokens"),hl(),Sg(38,"input",27),GI(),hl(),ws(39,"fieldset",28)(40,"legend",29),QC(41," Pricing "),ws(42,"span",30),QC(43,"(per million tokens \u2014 leave blank to skip cost monitoring)"),hl()(),ws(44,"div",21)(45,"div",8)(46,"label",31),QC(47,"Input"),hl(),Sg(48,"input",32),GI(),hl(),ws(49,"div",8)(50,"label",33),QC(51,"Output"),hl(),Sg(52,"input",34),GI(),hl()(),ws(53,"div",21)(54,"div",8)(55,"label",35),QC(56,"Cache write"),hl(),Sg(57,"input",36),GI(),hl(),ws(58,"div",8)(59,"label",37),QC(60,"Cache read"),hl(),Sg(61,"input",38),GI(),hl()()(),ws(62,"div",39)(63,"button",40),QC(64),hl(),ws(65,"button",41),Rg("click",function(){wf(e);let u=EC();return Cf(u.cancel())}),QC(66,"Cancel"),hl()()();}if(l&2){let e=EC();bg("formGroup",e.form),nI(6),iC(e.isEditMode()?6:7),nI(7),bg("formControl",e.apiModelNameControl),qI(),nI(4),bg("formControl",e.descriptionControl),qI(),nI(4),bg("formControl",e.aliasControl),qI(),nI(4),bg("formControl",e.priorityControl),qI(),nI(5),bg("formControl",e.temperatureControl),qI(),nI(4),bg("formControl",e.contextWindowControl),qI(),nI(4),bg("formControl",e.maxCompletionTokensControl),qI(),nI(),bg("formGroup",e.pricingGroup),nI(9),qI(),nI(4),qI(),nI(5),qI(),nI(4),qI(),nI(2),bg("disabled",e.form.invalid||e.isSubmitting()),nI(),Dl(" ",e.isEditMode()?"Save changes":"Create"," ");}}var re=class l{route=g(V);router=g(G);destroyRef=g(we);aiModelController=g(M);aiProviderController=g($);namespaceId=this.route.snapshot.params.namespaceId;isPlatformMode=this.namespaceId===void 0;providers=F(this.aiProviderController.listAiProvider(this.isPlatformMode?"none":this.namespaceId).pipe(va(()=>br([]))),{initialValue:[]});form=new z({aiProviderId:new _t("",{nonNullable:true,validators:[_e.required]}),apiModelName:new _t("",{nonNullable:true,validators:[_e.required,_e.minLength(1)]}),description:new _t(null),alias:new _t("",{nonNullable:true}),priority:new _t(0,{nonNullable:true}),temperature:new _t(null),contextWindow:new _t(null),maxCompletionTokens:new _t(null),pricing:new z({inputMTokens:new _t(null),outputMTokens:new _t(null),cacheWrite:new _t(null),cacheRead:new _t(null)})});get aiProviderIdControl(){return this.form.controls.aiProviderId}get apiModelNameControl(){return this.form.controls.apiModelName}get descriptionControl(){return this.form.controls.description}get aliasControl(){return this.form.controls.alias}get priorityControl(){return this.form.controls.priority}get temperatureControl(){return this.form.controls.temperature}get contextWindowControl(){return this.form.controls.contextWindow}get maxCompletionTokensControl(){return this.form.controls.maxCompletionTokens}get pricingGroup(){return this.form.controls.pricing}isEditMode=Gi(false);isSubmitting=Gi(false);isLoading=Gi(false);selectedProviderLabel=ET(()=>{let t=this.aiProviderIdControl.value,e=this.providers().find(p=>p.id===t);return e?`${e.name} (${e.apiType})`:t});existingModel=null;ngOnInit(){let t=this.route.snapshot.paramMap.get("modelId");t&&(this.isEditMode.set(true),this.loadModel(t));}loadModel(t){this.isLoading.set(true),this.aiModelController.getByIdAiModel(t).pipe(U(this.destroyRef)).subscribe({next:e=>{this.existingModel=e,this.aiProviderIdControl.setValue(e.aiProviderId),this.aiProviderIdControl.disable(),this.apiModelNameControl.setValue(e.apiModelName),this.descriptionControl.setValue(e.description??null),this.aliasControl.setValue(e.alias??""),this.priorityControl.setValue(e.priority??0),this.temperatureControl.setValue(e.temperature??null),this.contextWindowControl.setValue(e.contextWindow??null),this.maxCompletionTokensControl.setValue(e.maxCompletionTokens??null),this.pricingGroup.setValue({inputMTokens:e.pricing?.inputMTokens??null,outputMTokens:e.pricing?.outputMTokens??null,cacheWrite:e.pricing?.cacheWrite??null,cacheRead:e.pricing?.cacheRead??null}),this.isLoading.set(false);},error:()=>{this.isLoading.set(false),this.navigateBack();}});}submit(){if(this.form.invalid||this.isSubmitting())return;this.isSubmitting.set(true);let t=this.form.getRawValue(),e=t.pricing,u=e.inputMTokens!=null||e.outputMTokens!=null||e.cacheWrite!=null||e.cacheRead!=null?{isEmpty:false,inputMTokens:e.inputMTokens??void 0,outputMTokens:e.outputMTokens??void 0,cacheWrite:e.cacheWrite??void 0,cacheRead:e.cacheRead??void 0}:void 0,k=z$1(P({},this.existingModel??{}),{aiProviderId:t.aiProviderId,namespaceId:this.isPlatformMode?void 0:this.existingModel?.namespaceId??this.namespaceId,apiModelName:t.apiModelName.trim(),description:t.description?.trim()||void 0,alias:t.alias.trim()||void 0,priority:t.priority,temperature:t.temperature??void 0,contextWindow:t.contextWindow??void 0,maxCompletionTokens:t.maxCompletionTokens??void 0,pricing:u});(this.isEditMode()?this.aiModelController.updateAiModel(this.existingModel.id??"",k):this.aiModelController.createAiModel(k)).pipe(U(this.destroyRef)).subscribe({next:()=>this.navigateBack(),error:()=>this.isSubmitting.set(false)});}cancel(){this.navigateBack();}navigateBack(){this.isPlatformMode?this.router.navigate(["/agentos","admin","ai-models"]):this.router.navigate(["/agentos",this.namespaceId,"ai-models"]);}trackByProvider(t,e){return e.id??""}static \u0275fac=function(e){return new(e||l)};static \u0275cmp=Fw({type:l,selectors:[["agentos-ai-model-form"]],decls:10,vars:2,consts:[[1,"ai-model-form"],[1,"ai-model-form__header"],["type","button","title","Back to AI models",1,"ai-model-form__back",3,"click"],[1,"ai-model-form__back-icon"],[1,"ai-model-form__title"],[1,"ai-model-form__loading"],[1,"ai-model-form__form",3,"formGroup"],[1,"ai-model-form__form",3,"ngSubmit","formGroup"],[1,"ai-model-form__field"],["for","model-provider",1,"ai-model-form__label"],["aria-hidden","true"],["id","model-provider","type","text","readonly","","tabindex","-1",1,"ai-model-form__input","ai-model-form__input--readonly",3,"value"],["id","model-provider",1,"ai-model-form__select",3,"formControl"],["for","model-api-name",1,"ai-model-form__label"],["id","model-api-name","type","text","placeholder","e.g. gpt-4o, claude-3-5-sonnet-20241022","autocomplete","off",1,"ai-model-form__input","ai-model-form__input--mono",3,"formControl"],["for","model-description",1,"ai-model-form__label"],["id","model-description","type","text","placeholder","Optional \u2014 short description of this model config","autocomplete","off",1,"ai-model-form__input",3,"formControl"],["for","model-alias",1,"ai-model-form__label"],["id","model-alias","type","text","placeholder","e.g. fast, smart \u2014 short identifier used internally","autocomplete","off",1,"ai-model-form__input",3,"formControl"],["for","model-priority",1,"ai-model-form__label"],["id","model-priority","type","number","placeholder","0 \u2014 higher wins when multiple configs share the same alias","min","0","step","1",1,"ai-model-form__input",3,"formControl"],[1,"ai-model-form__row"],["for","model-temperature",1,"ai-model-form__label"],["id","model-temperature","type","number","placeholder","0 \u2013 2","min","0","max","2","step","0.1",1,"ai-model-form__input",3,"formControl"],["for","model-context-window",1,"ai-model-form__label"],["id","model-context-window","type","number","placeholder","e.g. 128000","min","1","step","1",1,"ai-model-form__input",3,"formControl"],["for","model-max-completion-tokens",1,"ai-model-form__label"],["id","model-max-completion-tokens","type","number","placeholder","e.g. 4096","min","1","step","1",1,"ai-model-form__input",3,"formControl"],[1,"ai-model-form__section",3,"formGroup"],[1,"ai-model-form__section-title"],[1,"ai-model-form__section-hint"],["for","pricing-input",1,"ai-model-form__label"],["id","pricing-input","type","number","placeholder","e.g. 2.50","min","0","step","0.01","formControlName","inputMTokens",1,"ai-model-form__input"],["for","pricing-output",1,"ai-model-form__label"],["id","pricing-output","type","number","placeholder","e.g. 10.00","min","0","step","0.01","formControlName","outputMTokens",1,"ai-model-form__input"],["for","pricing-cache-write",1,"ai-model-form__label"],["id","pricing-cache-write","type","number","placeholder","e.g. 3.75","min","0","step","0.01","formControlName","cacheWrite",1,"ai-model-form__input"],["for","pricing-cache-read",1,"ai-model-form__label"],["id","pricing-cache-read","type","number","placeholder","e.g. 0.30","min","0","step","0.01","formControlName","cacheRead",1,"ai-model-form__input"],[1,"ai-model-form__actions"],["type","submit",1,"ai-model-form__btn","ai-model-form__btn--primary",3,"disabled"],["type","button",1,"ai-model-form__btn",3,"click"],["value","","disabled",""],[3,"value"]],template:function(e,p){e&1&&(ws(0,"div",0)(1,"header",1)(2,"button",2),Rg("click",function(){return p.cancel()}),ws(3,"span",3),QC(4,"\u2190"),hl(),QC(5," AI models "),hl(),ws(6,"h1",4),QC(7),hl()(),oC(8,le,2,0,"p",5)(9,ce,67,12,"form",6),hl()),e&2&&(nI(7),Yg(p.isEditMode()?"Edit AI model":"New AI model"),nI(),iC(p.isLoading()?8:9));},dependencies:[ni,Jn,Qn,ei,Ye,fn,At,Zn,Xn,$t,Wt,Cn,En,An],styles:[".ai-model-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2rem;max-width:480px;margin:0 auto;padding:2rem 1rem}.ai-model-form__header[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.ai-model-form__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)}.ai-model-form__back[_ngcontent-%COMP%]:hover{text-decoration:underline}.ai-model-form__back-icon[_ngcontent-%COMP%]{font-size:1rem;line-height:1}.ai-model-form__title[_ngcontent-%COMP%]{margin:0;font-size:1.5rem;font-weight:700;color:var(--color-text);letter-spacing:-.02em}.ai-model-form__loading[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:.9rem;margin:0}.ai-model-form__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1.25rem}.ai-model-form__row[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.ai-model-form__field[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.375rem}.ai-model-form__label[_ngcontent-%COMP%]{font-size:.875rem;font-weight:500;color:var(--color-text)}.ai-model-form__input[_ngcontent-%COMP%], .ai-model-form__select[_ngcontent-%COMP%]{width:100%;padding:.625rem .875rem;border-radius:0;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;transition:border-color .15s ease}.ai-model-form__input[_ngcontent-%COMP%]:focus, .ai-model-form__select[_ngcontent-%COMP%]:focus{border-color:var(--color-accent)}.ai-model-form__input[_ngcontent-%COMP%]::placeholder, .ai-model-form__select[_ngcontent-%COMP%]::placeholder{color:var(--color-neutral-500)}.ai-model-form__input--mono[_ngcontent-%COMP%]{font-family:monospace}.ai-model-form__section[_ngcontent-%COMP%]{border:1px solid var(--color-divider);border-radius:0;padding:1rem;margin:0;display:flex;flex-direction:column;gap:1rem}.ai-model-form__section-title[_ngcontent-%COMP%]{font-size:.875rem;font-weight:600;color:var(--color-text);padding:0 .25rem}.ai-model-form__section-hint[_ngcontent-%COMP%]{font-weight:400;color:var(--color-text-secondary);font-size:.8125rem}.ai-model-form__input--readonly[_ngcontent-%COMP%]{color:var(--color-text-secondary);cursor:default;background:var(--color-surface-muted, rgba(0, 0, 0, .03))}.ai-model-form__actions[_ngcontent-%COMP%]{display:flex;gap:.75rem;padding-top:.5rem}.ai-model-form__btn[_ngcontent-%COMP%]{padding:.6rem 1.25rem;border-radius:0;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;transition:background .15s ease,border-color .15s ease}.ai-model-form__btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-bg-hover);border-color:var(--color-neutral-500)}.ai-model-form__btn[_ngcontent-%COMP%]:disabled{opacity:.45;cursor:not-allowed}.ai-model-form__btn--primary[_ngcontent-%COMP%]{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.ai-model-form__btn--primary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-700);border-color:var(--color-accent-700)}"]})};export{re as AiModelFormComponent};
@@ -1,4 +1,4 @@
1
- import {b as Qe}from'./chunk-DTIhOEG_.js';import {D as D$1,i as y}from'./chunk-C9tuHQmZ.js';import {aL as Eo,aM as qn,aO as wt,g as g$1,az as Kt,bs as Tl,aP as G,aS as K,aW as w,al as yt,aX as D,bx as on,by as am,aT as Ut,z as zi,h as Rw,bz as Oi,aC as Tu,a_ as QT,bA as DC,I as Is,A as Ag,m as pl,n as bg,c9 as kf,ck as Ff,bB as EC,r as bC,T as Tg,J as JE,H as Hg,C as Cg,b5 as rT,bC as Ti,c8 as KT,c0 as Ng,b$ as PC,D as Fg,E as wC,K as CC}from'./main-6K2UFGD2.js';var W=["input"],Y=["label"],ee=["*"],f={color:"accent",clickAction:"check-indeterminate",disabledInteractive:false},ce=new w("mat-checkbox-default-options",{providedIn:"root",factory:()=>f}),a=(function(t){return t[t.Init=0]="Init",t[t.Checked=1]="Checked",t[t.Unchecked=2]="Unchecked",t[t.Indeterminate=3]="Indeterminate",t})(a||{}),g=class{source;checked},ne=(()=>{class t{_elementRef=g$1(Kt);_changeDetectorRef=g$1(Tl);_ngZone=g$1(G);_animationsDisabled=K();_options=g$1(ce,{optional:true});focus(){this._inputElement.nativeElement.focus();}_createChangeEvent(e){let n=new g;return n.source=this,n.checked=e,n}_getAnimationTargetElement(){return this._inputElement?.nativeElement}_animationClasses={uncheckedToChecked:"mdc-checkbox--anim-unchecked-checked",uncheckedToIndeterminate:"mdc-checkbox--anim-unchecked-indeterminate",checkedToUnchecked:"mdc-checkbox--anim-checked-unchecked",checkedToIndeterminate:"mdc-checkbox--anim-checked-indeterminate",indeterminateToChecked:"mdc-checkbox--anim-indeterminate-checked",indeterminateToUnchecked:"mdc-checkbox--anim-indeterminate-unchecked"};ariaLabel="";ariaLabelledby=null;ariaDescribedby;ariaExpanded;ariaControls;ariaOwns;_uniqueId;id;get inputId(){return `${this.id||this._uniqueId}-input`}required=false;labelPosition="after";name=null;change=new yt;indeterminateChange=new yt;value;disableRipple=false;_inputElement;_labelElement;tabIndex;color;disabledInteractive;_onTouched=()=>{};_currentAnimationClass="";_currentCheckState=a.Init;_controlValueAccessorChangeFn=()=>{};_validatorChangeFn=()=>{};constructor(){g$1(D).load(on);let e=g$1(new am("tabindex"),{optional:true});this._options=this._options||f,this.color=this._options.color||f.color,this.tabIndex=e==null?0:parseInt(e)||0,this.id=this._uniqueId=g$1(Ut).getId("mat-mdc-checkbox-"),this.disabledInteractive=this._options?.disabledInteractive??false;}ngOnChanges(e){e.required&&this._validatorChangeFn();}ngAfterViewInit(){this._syncIndeterminate(this.indeterminate);}get checked(){return this._checked}set checked(e){e!=this.checked&&(this._checked=e,this._changeDetectorRef.markForCheck());}_checked=false;get disabled(){return this._disabled}set disabled(e){e!==this.disabled&&(this._disabled=e,this._changeDetectorRef.markForCheck());}_disabled=false;get indeterminate(){return this._indeterminate()}set indeterminate(e){let n=e!=this._indeterminate();this._indeterminate.set(e),n&&(e?this._transitionCheckState(a.Indeterminate):this._transitionCheckState(this.checked?a.Checked:a.Unchecked),this.indeterminateChange.emit(e)),this._syncIndeterminate(e);}_indeterminate=zi(false);_isRippleDisabled(){return this.disableRipple||this.disabled}_onLabelTextChange(){this._changeDetectorRef.detectChanges();}writeValue(e){this.checked=!!e;}registerOnChange(e){this._controlValueAccessorChangeFn=e;}registerOnTouched(e){this._onTouched=e;}setDisabledState(e){this.disabled=e;}validate(e){return this.required&&e.value!==true?{required:true}:null}registerOnValidatorChange(e){this._validatorChangeFn=e;}_transitionCheckState(e){let n=this._currentCheckState,c=this._getAnimationTargetElement();if(!(n===e||!c)&&(this._currentAnimationClass&&c.classList.remove(this._currentAnimationClass),this._currentAnimationClass=this._getAnimationClassForCheckStateTransition(n,e),this._currentCheckState=e,this._currentAnimationClass.length>0)){c.classList.add(this._currentAnimationClass);let o=this._currentAnimationClass;this._ngZone.runOutsideAngular(()=>{setTimeout(()=>{c.classList.remove(o);},1e3);});}}_emitChangeEvent(){this._controlValueAccessorChangeFn(this.checked),this.change.emit(this._createChangeEvent(this.checked)),this._inputElement&&(this._inputElement.nativeElement.checked=this.checked);}toggle(){this.checked=!this.checked,this._controlValueAccessorChangeFn(this.checked);}_handleInputClick(){let e=this._options?.clickAction;!this.disabled&&e!=="noop"?(this.indeterminate&&e!=="check"&&Promise.resolve().then(()=>{this._indeterminate.set(false),this.indeterminateChange.emit(false);}),this._checked=!this._checked,this._transitionCheckState(this._checked?a.Checked:a.Unchecked),this._emitChangeEvent()):(this.disabled&&this.disabledInteractive||!this.disabled&&e==="noop")&&(this._inputElement.nativeElement.checked=this.checked,this._inputElement.nativeElement.indeterminate=this.indeterminate);}_onInteractionEvent(e){e.stopPropagation();}_onBlur(){Promise.resolve().then(()=>{this._onTouched(),this._changeDetectorRef.markForCheck();});}_getAnimationClassForCheckStateTransition(e,n){if(this._animationsDisabled)return "";switch(e){case a.Init:if(n===a.Checked)return this._animationClasses.uncheckedToChecked;if(n==a.Indeterminate)return this._checked?this._animationClasses.checkedToIndeterminate:this._animationClasses.uncheckedToIndeterminate;break;case a.Unchecked:return n===a.Checked?this._animationClasses.uncheckedToChecked:this._animationClasses.uncheckedToIndeterminate;case a.Checked:return n===a.Unchecked?this._animationClasses.checkedToUnchecked:this._animationClasses.checkedToIndeterminate;case a.Indeterminate:return n===a.Checked?this._animationClasses.indeterminateToChecked:this._animationClasses.indeterminateToUnchecked}return ""}_syncIndeterminate(e){let n=this._inputElement;n&&(n.nativeElement.indeterminate=e);}_onInputClick(){this._handleInputClick();}_onTouchTargetClick(){this._handleInputClick(),this.disabled||this._inputElement.nativeElement.focus();}_preventBubblingFromLabel(e){e.target&&this._labelElement.nativeElement.contains(e.target)&&e.stopPropagation();}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=Rw({type:t,selectors:[["mat-checkbox"]],viewQuery:function(n,c){if(n&1&&Fg(W,5)(Y,5),n&2){let o;wC(o=CC())&&(c._inputElement=o.first),wC(o=CC())&&(c._labelElement=o.first);}},hostAttrs:[1,"mat-mdc-checkbox"],hostVars:16,hostBindings:function(n,c){n&2&&(Ng("id",c.id),Cg("tabindex",null)("aria-label",null)("aria-labelledby",null),PC(c.color?"mat-"+c.color:"mat-accent"),Hg("_mat-animation-noopable",c._animationsDisabled)("mdc-checkbox--disabled",c.disabled)("mat-mdc-checkbox-disabled",c.disabled)("mat-mdc-checkbox-checked",c.checked)("mat-mdc-checkbox-disabled-interactive",c.disabledInteractive));},inputs:{ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],ariaDescribedby:[0,"aria-describedby","ariaDescribedby"],ariaExpanded:[2,"aria-expanded","ariaExpanded",QT],ariaControls:[0,"aria-controls","ariaControls"],ariaOwns:[0,"aria-owns","ariaOwns"],id:"id",required:[2,"required","required",QT],labelPosition:"labelPosition",name:"name",value:"value",disableRipple:[2,"disableRipple","disableRipple",QT],tabIndex:[2,"tabIndex","tabIndex",e=>e==null?void 0:KT(e)],color:"color",disabledInteractive:[2,"disabledInteractive","disabledInteractive",QT],checked:[2,"checked","checked",QT],disabled:[2,"disabled","disabled",QT],indeterminate:[2,"indeterminate","indeterminate",QT]},outputs:{change:"change",indeterminateChange:"indeterminateChange"},exportAs:["matCheckbox"],features:[rT([{provide:D$1,useExisting:Ti(()=>t),multi:true},{provide:y,useExisting:t,multi:true}]),Tu],ngContentSelectors:ee,decls:15,vars:23,consts:[["checkbox",""],["input",""],["label",""],["mat-internal-form-field","",3,"click","labelPosition"],[1,"mdc-checkbox"],["aria-hidden","true",1,"mat-mdc-checkbox-touch-target",3,"click"],["type","checkbox",1,"mdc-checkbox__native-control",3,"blur","click","change","checked","indeterminate","disabled","id","required","tabIndex"],["aria-hidden","true",1,"mdc-checkbox__ripple"],["aria-hidden","true",1,"mdc-checkbox__background"],["focusable","false","viewBox","0 0 24 24",1,"mdc-checkbox__checkmark"],["fill","none","d","M1.73,12.91 8.1,19.28 22.79,4.59",1,"mdc-checkbox__checkmark-path"],[1,"mdc-checkbox__mixedmark"],["mat-ripple","","aria-hidden","true",1,"mat-mdc-checkbox-ripple","mat-focus-indicator",3,"matRippleTrigger","matRippleDisabled","matRippleCentered"],[1,"mdc-label",3,"for"]],template:function(n,c){if(n&1&&(DC(),Is(0,"div",3),Ag("click",function(k){return c._preventBubblingFromLabel(k)}),Is(1,"div",4,0)(3,"div",5),Ag("click",function(){return c._onTouchTargetClick()}),pl(),Is(4,"input",6,1),Ag("blur",function(){return c._onBlur()})("click",function(){return c._onInputClick()})("change",function(k){return c._onInteractionEvent(k)}),pl(),bg(6,"div",7),Is(7,"div",8),kf(),Is(8,"svg",9),bg(9,"path",10),pl(),Ff(),bg(10,"div",11),pl(),bg(11,"div",12),pl(),Is(12,"label",13,2),EC(14),pl()()),n&2){let o=bC(2);Tg("labelPosition",c.labelPosition),JE(4),Hg("mdc-checkbox--selected",c.checked),Tg("checked",c.checked)("indeterminate",c.indeterminate)("disabled",c.disabled&&!c.disabledInteractive)("id",c.inputId)("required",c.required)("tabIndex",c.disabled&&!c.disabledInteractive?-1:c.tabIndex),Cg("aria-label",c.ariaLabel||null)("aria-labelledby",c.ariaLabelledby)("aria-describedby",c.ariaDescribedby)("aria-checked",c.indeterminate?"mixed":null)("aria-controls",c.ariaControls)("aria-disabled",c.disabled&&c.disabledInteractive?true:null)("aria-expanded",c.ariaExpanded)("aria-owns",c.ariaOwns)("name",c.name)("value",c.value),JE(7),Tg("matRippleTrigger",o)("matRippleDisabled",c.disableRipple||c.disabled)("matRippleCentered",true),JE(),Tg("for",c.inputId);}},dependencies:[Oi,Qe],styles:[`.mdc-checkbox {
1
+ import {b as Qe}from'./chunk-S8F5_Te_.js';import {D as D$1,i as y}from'./chunk-tTmeIHGS.js';import {aL as Eo,aM as qn,aO as wt,g as g$1,az as Kt,bs as bl,aP as G,aS as K,aW as w,al as yt,aX as D,bx as on,by as cm,aT as Ut,a as Gi,h as Fw,bz as Oi,aC as bu,a_ as JT,bA as wC,m as ws,o as Rg,n as hl,S as Sg,c9 as Ff,ck as Pf,bB as CC,M as MC,v as bg,t as nI,A as Ug,T as Tg,b5 as sT,bC as bi,c8 as eb,c0 as xg,b$ as BC,C as Pg,D as bC,H as SC}from'./main-5PAOSHSM.js';var W=["input"],Y=["label"],ee=["*"],f={color:"accent",clickAction:"check-indeterminate",disabledInteractive:false},ce=new w("mat-checkbox-default-options",{providedIn:"root",factory:()=>f}),a=(function(t){return t[t.Init=0]="Init",t[t.Checked=1]="Checked",t[t.Unchecked=2]="Unchecked",t[t.Indeterminate=3]="Indeterminate",t})(a||{}),g=class{source;checked},ne=(()=>{class t{_elementRef=g$1(Kt);_changeDetectorRef=g$1(bl);_ngZone=g$1(G);_animationsDisabled=K();_options=g$1(ce,{optional:true});focus(){this._inputElement.nativeElement.focus();}_createChangeEvent(e){let n=new g;return n.source=this,n.checked=e,n}_getAnimationTargetElement(){return this._inputElement?.nativeElement}_animationClasses={uncheckedToChecked:"mdc-checkbox--anim-unchecked-checked",uncheckedToIndeterminate:"mdc-checkbox--anim-unchecked-indeterminate",checkedToUnchecked:"mdc-checkbox--anim-checked-unchecked",checkedToIndeterminate:"mdc-checkbox--anim-checked-indeterminate",indeterminateToChecked:"mdc-checkbox--anim-indeterminate-checked",indeterminateToUnchecked:"mdc-checkbox--anim-indeterminate-unchecked"};ariaLabel="";ariaLabelledby=null;ariaDescribedby;ariaExpanded;ariaControls;ariaOwns;_uniqueId;id;get inputId(){return `${this.id||this._uniqueId}-input`}required=false;labelPosition="after";name=null;change=new yt;indeterminateChange=new yt;value;disableRipple=false;_inputElement;_labelElement;tabIndex;color;disabledInteractive;_onTouched=()=>{};_currentAnimationClass="";_currentCheckState=a.Init;_controlValueAccessorChangeFn=()=>{};_validatorChangeFn=()=>{};constructor(){g$1(D).load(on);let e=g$1(new cm("tabindex"),{optional:true});this._options=this._options||f,this.color=this._options.color||f.color,this.tabIndex=e==null?0:parseInt(e)||0,this.id=this._uniqueId=g$1(Ut).getId("mat-mdc-checkbox-"),this.disabledInteractive=this._options?.disabledInteractive??false;}ngOnChanges(e){e.required&&this._validatorChangeFn();}ngAfterViewInit(){this._syncIndeterminate(this.indeterminate);}get checked(){return this._checked}set checked(e){e!=this.checked&&(this._checked=e,this._changeDetectorRef.markForCheck());}_checked=false;get disabled(){return this._disabled}set disabled(e){e!==this.disabled&&(this._disabled=e,this._changeDetectorRef.markForCheck());}_disabled=false;get indeterminate(){return this._indeterminate()}set indeterminate(e){let n=e!=this._indeterminate();this._indeterminate.set(e),n&&(e?this._transitionCheckState(a.Indeterminate):this._transitionCheckState(this.checked?a.Checked:a.Unchecked),this.indeterminateChange.emit(e)),this._syncIndeterminate(e);}_indeterminate=Gi(false);_isRippleDisabled(){return this.disableRipple||this.disabled}_onLabelTextChange(){this._changeDetectorRef.detectChanges();}writeValue(e){this.checked=!!e;}registerOnChange(e){this._controlValueAccessorChangeFn=e;}registerOnTouched(e){this._onTouched=e;}setDisabledState(e){this.disabled=e;}validate(e){return this.required&&e.value!==true?{required:true}:null}registerOnValidatorChange(e){this._validatorChangeFn=e;}_transitionCheckState(e){let n=this._currentCheckState,c=this._getAnimationTargetElement();if(!(n===e||!c)&&(this._currentAnimationClass&&c.classList.remove(this._currentAnimationClass),this._currentAnimationClass=this._getAnimationClassForCheckStateTransition(n,e),this._currentCheckState=e,this._currentAnimationClass.length>0)){c.classList.add(this._currentAnimationClass);let o=this._currentAnimationClass;this._ngZone.runOutsideAngular(()=>{setTimeout(()=>{c.classList.remove(o);},1e3);});}}_emitChangeEvent(){this._controlValueAccessorChangeFn(this.checked),this.change.emit(this._createChangeEvent(this.checked)),this._inputElement&&(this._inputElement.nativeElement.checked=this.checked);}toggle(){this.checked=!this.checked,this._controlValueAccessorChangeFn(this.checked);}_handleInputClick(){let e=this._options?.clickAction;!this.disabled&&e!=="noop"?(this.indeterminate&&e!=="check"&&Promise.resolve().then(()=>{this._indeterminate.set(false),this.indeterminateChange.emit(false);}),this._checked=!this._checked,this._transitionCheckState(this._checked?a.Checked:a.Unchecked),this._emitChangeEvent()):(this.disabled&&this.disabledInteractive||!this.disabled&&e==="noop")&&(this._inputElement.nativeElement.checked=this.checked,this._inputElement.nativeElement.indeterminate=this.indeterminate);}_onInteractionEvent(e){e.stopPropagation();}_onBlur(){Promise.resolve().then(()=>{this._onTouched(),this._changeDetectorRef.markForCheck();});}_getAnimationClassForCheckStateTransition(e,n){if(this._animationsDisabled)return "";switch(e){case a.Init:if(n===a.Checked)return this._animationClasses.uncheckedToChecked;if(n==a.Indeterminate)return this._checked?this._animationClasses.checkedToIndeterminate:this._animationClasses.uncheckedToIndeterminate;break;case a.Unchecked:return n===a.Checked?this._animationClasses.uncheckedToChecked:this._animationClasses.uncheckedToIndeterminate;case a.Checked:return n===a.Unchecked?this._animationClasses.checkedToUnchecked:this._animationClasses.checkedToIndeterminate;case a.Indeterminate:return n===a.Checked?this._animationClasses.indeterminateToChecked:this._animationClasses.indeterminateToUnchecked}return ""}_syncIndeterminate(e){let n=this._inputElement;n&&(n.nativeElement.indeterminate=e);}_onInputClick(){this._handleInputClick();}_onTouchTargetClick(){this._handleInputClick(),this.disabled||this._inputElement.nativeElement.focus();}_preventBubblingFromLabel(e){e.target&&this._labelElement.nativeElement.contains(e.target)&&e.stopPropagation();}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=Fw({type:t,selectors:[["mat-checkbox"]],viewQuery:function(n,c){if(n&1&&Pg(W,5)(Y,5),n&2){let o;bC(o=SC())&&(c._inputElement=o.first),bC(o=SC())&&(c._labelElement=o.first);}},hostAttrs:[1,"mat-mdc-checkbox"],hostVars:16,hostBindings:function(n,c){n&2&&(xg("id",c.id),Tg("tabindex",null)("aria-label",null)("aria-labelledby",null),BC(c.color?"mat-"+c.color:"mat-accent"),Ug("_mat-animation-noopable",c._animationsDisabled)("mdc-checkbox--disabled",c.disabled)("mat-mdc-checkbox-disabled",c.disabled)("mat-mdc-checkbox-checked",c.checked)("mat-mdc-checkbox-disabled-interactive",c.disabledInteractive));},inputs:{ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],ariaDescribedby:[0,"aria-describedby","ariaDescribedby"],ariaExpanded:[2,"aria-expanded","ariaExpanded",JT],ariaControls:[0,"aria-controls","ariaControls"],ariaOwns:[0,"aria-owns","ariaOwns"],id:"id",required:[2,"required","required",JT],labelPosition:"labelPosition",name:"name",value:"value",disableRipple:[2,"disableRipple","disableRipple",JT],tabIndex:[2,"tabIndex","tabIndex",e=>e==null?void 0:eb(e)],color:"color",disabledInteractive:[2,"disabledInteractive","disabledInteractive",JT],checked:[2,"checked","checked",JT],disabled:[2,"disabled","disabled",JT],indeterminate:[2,"indeterminate","indeterminate",JT]},outputs:{change:"change",indeterminateChange:"indeterminateChange"},exportAs:["matCheckbox"],features:[sT([{provide:D$1,useExisting:bi(()=>t),multi:true},{provide:y,useExisting:t,multi:true}]),bu],ngContentSelectors:ee,decls:15,vars:23,consts:[["checkbox",""],["input",""],["label",""],["mat-internal-form-field","",3,"click","labelPosition"],[1,"mdc-checkbox"],["aria-hidden","true",1,"mat-mdc-checkbox-touch-target",3,"click"],["type","checkbox",1,"mdc-checkbox__native-control",3,"blur","click","change","checked","indeterminate","disabled","id","required","tabIndex"],["aria-hidden","true",1,"mdc-checkbox__ripple"],["aria-hidden","true",1,"mdc-checkbox__background"],["focusable","false","viewBox","0 0 24 24",1,"mdc-checkbox__checkmark"],["fill","none","d","M1.73,12.91 8.1,19.28 22.79,4.59",1,"mdc-checkbox__checkmark-path"],[1,"mdc-checkbox__mixedmark"],["mat-ripple","","aria-hidden","true",1,"mat-mdc-checkbox-ripple","mat-focus-indicator",3,"matRippleTrigger","matRippleDisabled","matRippleCentered"],[1,"mdc-label",3,"for"]],template:function(n,c){if(n&1&&(wC(),ws(0,"div",3),Rg("click",function(k){return c._preventBubblingFromLabel(k)}),ws(1,"div",4,0)(3,"div",5),Rg("click",function(){return c._onTouchTargetClick()}),hl(),ws(4,"input",6,1),Rg("blur",function(){return c._onBlur()})("click",function(){return c._onInputClick()})("change",function(k){return c._onInteractionEvent(k)}),hl(),Sg(6,"div",7),ws(7,"div",8),Ff(),ws(8,"svg",9),Sg(9,"path",10),hl(),Pf(),Sg(10,"div",11),hl(),Sg(11,"div",12),hl(),ws(12,"label",13,2),CC(14),hl()()),n&2){let o=MC(2);bg("labelPosition",c.labelPosition),nI(4),Ug("mdc-checkbox--selected",c.checked),bg("checked",c.checked)("indeterminate",c.indeterminate)("disabled",c.disabled&&!c.disabledInteractive)("id",c.inputId)("required",c.required)("tabIndex",c.disabled&&!c.disabledInteractive?-1:c.tabIndex),Tg("aria-label",c.ariaLabel||null)("aria-labelledby",c.ariaLabelledby)("aria-describedby",c.ariaDescribedby)("aria-checked",c.indeterminate?"mixed":null)("aria-controls",c.ariaControls)("aria-disabled",c.disabled&&c.disabledInteractive?true:null)("aria-expanded",c.ariaExpanded)("aria-owns",c.ariaOwns)("name",c.name)("value",c.value),nI(7),bg("matRippleTrigger",o)("matRippleDisabled",c.disableRipple||c.disabled)("matRippleCentered",true),nI(),bg("for",c.inputId);}},dependencies:[Oi,Qe],styles:[`.mdc-checkbox {
2
2
  display: inline-block;
3
3
  position: relative;
4
4
  flex: 0 0 18px;
@@ -1 +1 @@
1
- import {O}from'./chunk-BIMT-HvS.js';import {v}from'./chunk-DEsz0fzs.js';import {g,ao as V,G,w as we,z as zi,F as F$1,dc as ge$1,cd as Hf,c as U,h as Rw,I as Is,A as Ag,q as qC,m as pl,t as tC,J as JE,a8 as Zg,v as nC,a9 as fC,o as iC,a4 as oC,a3 as UI,n as bg,bo as rC,ac as yC,T as Tg,a6 as zI,x as sC,a5 as vl,cH as Jw,aa as If,ab as wf}from'./main-6K2UFGD2.js';import'./chunk-uPxETzZs.js';import {o as z,z as ze,k as _t,b as _e$1,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,p as An,q as Ct,V as Vt}from'./chunk-C9tuHQmZ.js';import'./chunk-DXDohTwX.js';import'./chunk-nWqZHM4o.js';import'./chunk-l0HLnBLv.js';import'./chunk-DTIhOEG_.js';function ce(a,r){a&1&&(Is(0,"p",5),qC(1,"Loading\u2026"),pl());}function me(a,r){if(a&1&&(Is(0,"label",30),bg(1,"input",31),UI(),Is(2,"span"),qC(3),pl()()),a&2){let e=r.$implicit,l=yC(3);JE(),Tg("formControl",l.scopeControl)("value",e.value)("disabled",e.value==="namespace"&&!l.isAdmin()),zI(),JE(2),Zg(e.label);}}function ue(a,r){if(a&1&&(Is(0,"fieldset",8)(1,"legend",24),qC(2,"Port\xE9e de la configuration"),pl(),iC(3,me,4,4,"label",30,Jw().trackByScope,true),pl()),a&2){let e=yC(2);Tg("disabled",e.isEditMode()),JE(3),sC(e.scopeOptions);}}function ve(a,r){if(a&1&&(Is(0,"option",13),qC(1),pl()),a&2){let e=r.$implicit;Tg("value",e),JE(),Zg(e);}}function fe(a,r){if(a&1){let e=fC();Is(0,"div",26),bg(1,"input",32),UI(),bg(2,"input",33),UI(),Is(3,"button",34),Ag("click",function(){let s=If(e).$index,f=yC(2);return wf(f.removeHeader(s))}),qC(4," \xD7 "),pl()();}if(a&2){let e=r.$index;Tg("formGroupName",e),JE(),zI(),JE(),zI();}}function _e(a,r){if(a&1){let e=fC();Is(0,"form",7),Ag("ngSubmit",function(){If(e);let s=yC();return wf(s.submit())}),tC(1,ue,5,1,"fieldset",8),Is(2,"div",9)(3,"label",10),qC(4,"API type "),Is(5,"span",11),qC(6,"*"),pl()(),Is(7,"select",12),iC(8,ve,2,2,"option",13,oC),pl(),UI(),pl(),Is(10,"div",9)(11,"label",14),qC(12,"Name "),Is(13,"span",11),qC(14,"*"),pl()(),bg(15,"input",15),UI(),pl(),Is(16,"div",9)(17,"label",16),qC(18,"Description"),pl(),bg(19,"input",17),UI(),pl(),Is(20,"div",9)(21,"label",18),qC(22,"Base URL"),pl(),bg(23,"input",19),UI(),pl(),Is(24,"div",9)(25,"label",20),qC(26,"API key"),pl(),bg(27,"input",21),UI(),pl(),Is(28,"div",22)(29,"div",23)(30,"span",24),qC(31,"Custom headers"),pl(),Is(32,"button",25),Ag("click",function(){If(e);let s=yC();return wf(s.addHeader())}),qC(33,"+ Add header"),pl()(),iC(34,fe,5,1,"div",26,rC),pl(),Is(36,"div",27)(37,"button",28),qC(38),pl(),Is(39,"button",29),Ag("click",function(){If(e);let s=yC();return wf(s.cancel())}),qC(40,"Cancel"),pl()()();}if(a&2){let e=yC();Tg("formGroup",e.form),JE(),nC(e.isPlatformMode?-1:1),JE(6),Tg("formControl",e.apiTypeControl),zI(),JE(),sC(e.apiTypeOptions),JE(7),Tg("formControl",e.nameControl),zI(),JE(4),Tg("formControl",e.descriptionControl),zI(),JE(4),Tg("formControl",e.baseUrlControl),zI(),JE(4),Tg("formControl",e.apiKeyControl),zI(),JE(),Tg("formArrayName","headers"),JE(6),sC(e.headersArray.controls),JE(3),Tg("disabled",e.form.invalid||e.isSubmitting()),JE(),vl(" ",e.isEditMode()?"Save changes":"Create"," ");}}var ge=new Set(["namespace","userOnNs","userGlobal"]),F=Object.freeze({platform:"Configuration de niveau plateforme",namespace:"Configuration du namespace",userOnNs:"Pour moi sur ce namespace",userGlobal:"Pour moi globalement"}),se=class a{route=g(V);router=g(G);destroyRef=g(we);state=g(O);namespaceRole=g(v);namespaceId=this.route.snapshot.params.namespaceId;isPlatformMode=this.namespaceId===void 0;isAdmin=this.isPlatformMode?zi(true):F$1(this.namespaceRole.isAdminOfNamespace$(this.namespaceId),{initialValue:false});apiTypeOptions=Object.values(ge$1);scopeOptions=[{value:"namespace",label:F.namespace},{value:"userOnNs",label:F.userOnNs},{value:"userGlobal",label:F.userGlobal}];form=new z({name:new _t("",{nonNullable:true,validators:[_e$1.required,_e$1.minLength(1)]}),description:new _t(null),apiType:new _t("OpenAI",{nonNullable:true,validators:[_e$1.required]}),baseUrl:new _t("",{nonNullable:true}),apiKey:new _t("",{nonNullable:true}),scope:new _t("namespace",{nonNullable:true}),headers:new ze([],{validators:[]})});get nameControl(){return this.form.controls.name}get descriptionControl(){return this.form.controls.description}get apiTypeControl(){return this.form.controls.apiType}get baseUrlControl(){return this.form.controls.baseUrl}get apiKeyControl(){return this.form.controls.apiKey}get scopeControl(){return this.form.controls.scope}get headersArray(){return this.form.controls.headers}addHeader(){this.headersArray.push(new z({key:new _t("",{nonNullable:true,validators:[_e$1.required]}),value:new _t("",{nonNullable:true})}));}removeHeader(r){this.headersArray.removeAt(r);}isEditMode=zi(false);isSubmitting=zi(false);isLoading=zi(false);existingConfig=null;initialApiKey="";constructor(){this.isPlatformMode||Hf(()=>{this.isAdmin()||this.isEditMode()||this.scopeControl.value==="namespace"&&this.scopeControl.setValue("userOnNs");});}ngOnInit(){this.namespaceId&&this.state.setNamespace(this.namespaceId);let r=this.route.snapshot.paramMap,e=this.route.snapshot.queryParamMap,l=r.get("aiProviderId"),s=this.isPlatformMode?"namespace":this.parseScope(e.get("scope"));if(l){this.isEditMode.set(true),this.scopeControl.disable(),this.apiTypeControl.disable(),this.loadConfig(l);return}this.scopeControl.setValue(s);let f=e.get("template");f&&this.hydrateFromTemplate(f);}parseScope(r){return r&&ge.has(r)?r:"namespace"}deriveScopeFromConfig(r){return !r.userId?"namespace":r.namespaceId?"userOnNs":"userGlobal"}loadConfig(r){this.isLoading.set(true),this.state.getById(r).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(`[AiProviderForm] Could not load provider '${r}' \u2014 navigating back`),this.navigateBack();}});}hydrateFromTemplate(r){this.isLoading.set(true),this.state.getById(r).pipe(U(this.destroyRef)).subscribe({next:e=>{this.nameControl.setValue(e.name),this.descriptionControl.setValue(e.description??null),this.apiTypeControl.setValue(e.apiType),this.baseUrlControl.setValue(e.baseUrl??""),this.apiKeyControl.setValue(""),this.initialApiKey="",this.apiKeyControl.markAsTouched(),this.isLoading.set(false),this.router.navigate([],{relativeTo:this.route,queryParams:{template:null,templateScope:null},queryParamsHandling:"merge",replaceUrl:true});},error:e=>{console.warn(`[AiProviderForm] Could not hydrate from template ${r}:`,e),this.isLoading.set(false),this.router.navigate([],{relativeTo:this.route,queryParams:{template:null,templateScope:null},queryParamsHandling:"merge",replaceUrl:true});}});}applyConfigToForm(r){this.nameControl.setValue(r.name),this.descriptionControl.setValue(r.description??null),this.apiTypeControl.setValue(r.apiType),this.baseUrlControl.setValue(r.baseUrl??"");let e=r.apiKey??"";this.apiKeyControl.setValue(e),this.initialApiKey=e,this.headersArray.clear();for(let[l,s]of Object.entries(r.headers??{}))this.headersArray.push(new z({key:new _t(l,{nonNullable:true,validators:[_e$1.required]}),value:new _t(s,{nonNullable:true})}));}submit(){if(this.form.invalid||this.isSubmitting())return;if(this.isEditMode()&&!this.existingConfig?.id){this.navigateBack();return}this.isSubmitting.set(true);let r=this.descriptionControl.value?.trim(),e=this.baseUrlControl.value.trim(),l=this.apiKeyControl.value,s=this.isEditMode()&&l===this.initialApiKey?null:l,f=this.headersArray.controls.filter(x=>x.controls.key.value.trim()).map(x=>[x.controls.key.value.trim(),x.controls.value.value]),de=f.length>0?Object.fromEntries(f):null,N={name:this.nameControl.value.trim(),apiType:this.apiTypeControl.value,description:r||null,baseUrl:e||null,apiKey:s,headers:de},T=this.form.getRawValue().scope,pe=this.isPlatformMode?null:this.namespaceId??null;(this.isEditMode()&&this.existingConfig?.id?this.state.update(this.existingConfig.id,N,T,this.existingConfig):this.state.create(N,T,pe)).pipe(U(this.destroyRef)).subscribe({next:()=>this.navigateBack(),error:()=>this.isSubmitting.set(false)});}cancel(){this.navigateBack();}navigateBack(){this.isPlatformMode?this.router.navigate(["/agentos","admin","ai-providers"]):this.router.navigate(["/agentos",this.namespaceId,"ai-providers"]);}trackByScope(r,e){return e.value}static \u0275fac=function(e){return new(e||a)};static \u0275cmp=Rw({type:a,selectors:[["agentos-ai-provider-form"]],decls:10,vars:2,consts:[[1,"ai-provider-form"],[1,"ai-provider-form__header"],["type","button","title","Back to AI providers",1,"ai-provider-form__back",3,"click"],[1,"ai-provider-form__back-icon"],[1,"ai-provider-form__title"],[1,"ai-provider-form__loading"],[1,"ai-provider-form__form",3,"formGroup"],[1,"ai-provider-form__form",3,"ngSubmit","formGroup"],[1,"ai-provider-form__scope",3,"disabled"],[1,"ai-provider-form__field"],["for","llm-api-type",1,"ai-provider-form__label"],["aria-hidden","true"],["id","llm-api-type",1,"ai-provider-form__select",3,"formControl"],[3,"value"],["for","llm-name",1,"ai-provider-form__label"],["id","llm-name","type","text","placeholder","e.g. OpenAI prod","autocomplete","off",1,"ai-provider-form__input",3,"formControl"],["for","llm-description",1,"ai-provider-form__label"],["id","llm-description","type","text","placeholder","Optional \u2014 short description of this provider","autocomplete","off",1,"ai-provider-form__input",3,"formControl"],["for","llm-base-url",1,"ai-provider-form__label"],["id","llm-base-url","type","url","placeholder","Optional \u2014 leave empty for default endpoint","autocomplete","off",1,"ai-provider-form__input",3,"formControl"],["for","llm-api-key",1,"ai-provider-form__label"],["id","llm-api-key","type","password","placeholder","sk-\u2026","autocomplete","new-password",1,"ai-provider-form__input","ai-provider-form__input--secret",3,"formControl"],[1,"ai-provider-form__headers",3,"formArrayName"],[1,"ai-provider-form__headers-title"],[1,"ai-provider-form__label"],["type","button",1,"ai-provider-form__headers-add",3,"click"],[1,"ai-provider-form__header-row",3,"formGroupName"],[1,"ai-provider-form__actions"],["type","submit",1,"ai-provider-form__btn","ai-provider-form__btn--primary",3,"disabled"],["type","button",1,"ai-provider-form__btn",3,"click"],[1,"ai-provider-form__scope-option"],["type","radio",3,"formControl","value","disabled"],["type","text","placeholder","Header name","formControlName","key","autocomplete","off",1,"ai-provider-form__input"],["type","text","placeholder","Value","formControlName","value","autocomplete","off",1,"ai-provider-form__input"],["type","button","title","Remove header","aria-label","Remove header",1,"ai-provider-form__header-remove",3,"click"]],template:function(e,l){e&1&&(Is(0,"div",0)(1,"header",1)(2,"button",2),Ag("click",function(){return l.cancel()}),Is(3,"span",3),qC(4,"\u2190"),pl(),qC(5," AI Providers "),pl(),Is(6,"h1",4),qC(7),pl()(),tC(8,ce,2,0,"p",5)(9,_e,41,10,"form",6),pl()),e&2&&(JE(7),Zg(l.isEditMode()?"Edit AI provider":"New AI provider"),JE(),nC(l.isLoading()?8:9));},dependencies:[ni,Jn,Qn,ei,Ye,At,mn,Zn,Xn,Cn,En,An,Ct,Vt],styles:[".ai-provider-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2rem;max-width:480px;margin:0 auto;padding:2rem 1rem}.ai-provider-form__scope[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.4rem;border:1px solid var(--color-divider);border-radius:0;padding:.75rem 1rem;margin:0}.ai-provider-form__scope[disabled][_ngcontent-%COMP%]{opacity:.6}.ai-provider-form__scope-option[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;font-size:.85rem;color:var(--color-text);cursor:pointer}.ai-provider-form__header[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.ai-provider-form__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)}.ai-provider-form__back[_ngcontent-%COMP%]:hover{text-decoration:underline}.ai-provider-form__back-icon[_ngcontent-%COMP%]{font-size:1rem;line-height:1}.ai-provider-form__title[_ngcontent-%COMP%]{margin:0;font-size:1.5rem;font-weight:700;color:var(--color-text);letter-spacing:-.02em}.ai-provider-form__loading[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:.9rem;margin:0}.ai-provider-form__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1.25rem}.ai-provider-form__field[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.375rem}.ai-provider-form__label[_ngcontent-%COMP%]{font-size:.875rem;font-weight:500;color:var(--color-text)}.ai-provider-form__input[_ngcontent-%COMP%], .ai-provider-form__select[_ngcontent-%COMP%]{width:100%;padding:.625rem .875rem;border-radius:0;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;transition:border-color .15s ease}.ai-provider-form__input[_ngcontent-%COMP%]:focus, .ai-provider-form__select[_ngcontent-%COMP%]:focus{border-color:var(--color-accent)}.ai-provider-form__input[_ngcontent-%COMP%]::placeholder, .ai-provider-form__select[_ngcontent-%COMP%]::placeholder{color:var(--color-neutral-500)}.ai-provider-form__input--secret[_ngcontent-%COMP%]{font-family:monospace;letter-spacing:.05em}.ai-provider-form__headers[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.ai-provider-form__headers-title[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between}.ai-provider-form__headers-add[_ngcontent-%COMP%]{background:none;border:none;padding:0;cursor:pointer;font-size:.8125rem;color:var(--color-accent)}.ai-provider-form__headers-add[_ngcontent-%COMP%]:hover{text-decoration:underline}.ai-provider-form__header-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr auto;gap:.5rem;align-items:center}.ai-provider-form__header-remove[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;background:none;border:1px solid transparent;border-radius:0;cursor:pointer;font-size:1rem;color:var(--color-neutral-500);transition:background .15s ease,color .15s ease,border-color .15s ease;flex-shrink:0}.ai-provider-form__header-remove[_ngcontent-%COMP%]:hover{color:var(--red);background:color-mix(in srgb,var(--red) 10%,transparent);border-color:var(--red)}.ai-provider-form__actions[_ngcontent-%COMP%]{display:flex;gap:.75rem;padding-top:.5rem}.ai-provider-form__btn[_ngcontent-%COMP%]{padding:.6rem 1.25rem;border-radius:0;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;transition:background .15s ease,border-color .15s ease}.ai-provider-form__btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-bg-hover);border-color:var(--color-neutral-500)}.ai-provider-form__btn[_ngcontent-%COMP%]:disabled{opacity:.45;cursor:not-allowed}.ai-provider-form__btn--primary[_ngcontent-%COMP%]{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.ai-provider-form__btn--primary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-700);border-color:var(--color-accent-700)}"]})};export{se as AiProviderFormComponent};
1
+ import {O}from'./chunk-BNS6Fgaw.js';import {v}from'./chunk-CPBcDx4G.js';import {g,ao as V,G,w as we,a as Gi,F as F$1,dc as ge$1,cd as Uf,c as U,h as Fw,m as ws,o as Rg,Q as QC,n as hl,q as oC,t as nI,a8 as Yg,x as iC,a9 as gC,r as cC,a4 as aC,a3 as GI,S as Sg,bo as sC,ac as EC,v as bg,a6 as qI,y as uC,a5 as Dl,cH as nC,aa as wf,ab as Cf}from'./main-5PAOSHSM.js';import'./chunk-BY7uKZAo.js';import {o as z,z as ze,k as _t,b as _e$1,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,p as An,q as Ct,V as Vt}from'./chunk-tTmeIHGS.js';import'./chunk-BEUXx3TO.js';import'./chunk-kvCfAm7Z.js';import'./chunk-CtkiOUdU.js';import'./chunk-S8F5_Te_.js';function ce(a,r){a&1&&(ws(0,"p",5),QC(1,"Loading\u2026"),hl());}function me(a,r){if(a&1&&(ws(0,"label",30),Sg(1,"input",31),GI(),ws(2,"span"),QC(3),hl()()),a&2){let e=r.$implicit,l=EC(3);nI(),bg("formControl",l.scopeControl)("value",e.value)("disabled",e.value==="namespace"&&!l.isAdmin()),qI(),nI(2),Yg(e.label);}}function ue(a,r){if(a&1&&(ws(0,"fieldset",8)(1,"legend",24),QC(2,"Port\xE9e de la configuration"),hl(),cC(3,me,4,4,"label",30,nC().trackByScope,true),hl()),a&2){let e=EC(2);bg("disabled",e.isEditMode()),nI(3),uC(e.scopeOptions);}}function ve(a,r){if(a&1&&(ws(0,"option",13),QC(1),hl()),a&2){let e=r.$implicit;bg("value",e),nI(),Yg(e);}}function fe(a,r){if(a&1){let e=gC();ws(0,"div",26),Sg(1,"input",32),GI(),Sg(2,"input",33),GI(),ws(3,"button",34),Rg("click",function(){let s=wf(e).$index,f=EC(2);return Cf(f.removeHeader(s))}),QC(4," \xD7 "),hl()();}if(a&2){let e=r.$index;bg("formGroupName",e),nI(),qI(),nI(),qI();}}function _e(a,r){if(a&1){let e=gC();ws(0,"form",7),Rg("ngSubmit",function(){wf(e);let s=EC();return Cf(s.submit())}),oC(1,ue,5,1,"fieldset",8),ws(2,"div",9)(3,"label",10),QC(4,"API type "),ws(5,"span",11),QC(6,"*"),hl()(),ws(7,"select",12),cC(8,ve,2,2,"option",13,aC),hl(),GI(),hl(),ws(10,"div",9)(11,"label",14),QC(12,"Name "),ws(13,"span",11),QC(14,"*"),hl()(),Sg(15,"input",15),GI(),hl(),ws(16,"div",9)(17,"label",16),QC(18,"Description"),hl(),Sg(19,"input",17),GI(),hl(),ws(20,"div",9)(21,"label",18),QC(22,"Base URL"),hl(),Sg(23,"input",19),GI(),hl(),ws(24,"div",9)(25,"label",20),QC(26,"API key"),hl(),Sg(27,"input",21),GI(),hl(),ws(28,"div",22)(29,"div",23)(30,"span",24),QC(31,"Custom headers"),hl(),ws(32,"button",25),Rg("click",function(){wf(e);let s=EC();return Cf(s.addHeader())}),QC(33,"+ Add header"),hl()(),cC(34,fe,5,1,"div",26,sC),hl(),ws(36,"div",27)(37,"button",28),QC(38),hl(),ws(39,"button",29),Rg("click",function(){wf(e);let s=EC();return Cf(s.cancel())}),QC(40,"Cancel"),hl()()();}if(a&2){let e=EC();bg("formGroup",e.form),nI(),iC(e.isPlatformMode?-1:1),nI(6),bg("formControl",e.apiTypeControl),qI(),nI(),uC(e.apiTypeOptions),nI(7),bg("formControl",e.nameControl),qI(),nI(4),bg("formControl",e.descriptionControl),qI(),nI(4),bg("formControl",e.baseUrlControl),qI(),nI(4),bg("formControl",e.apiKeyControl),qI(),nI(),bg("formArrayName","headers"),nI(6),uC(e.headersArray.controls),nI(3),bg("disabled",e.form.invalid||e.isSubmitting()),nI(),Dl(" ",e.isEditMode()?"Save changes":"Create"," ");}}var ge=new Set(["namespace","userOnNs","userGlobal"]),F=Object.freeze({platform:"Configuration de niveau plateforme",namespace:"Configuration du namespace",userOnNs:"Pour moi sur ce namespace",userGlobal:"Pour moi globalement"}),se=class a{route=g(V);router=g(G);destroyRef=g(we);state=g(O);namespaceRole=g(v);namespaceId=this.route.snapshot.params.namespaceId;isPlatformMode=this.namespaceId===void 0;isAdmin=this.isPlatformMode?Gi(true):F$1(this.namespaceRole.isAdminOfNamespace$(this.namespaceId),{initialValue:false});apiTypeOptions=Object.values(ge$1);scopeOptions=[{value:"namespace",label:F.namespace},{value:"userOnNs",label:F.userOnNs},{value:"userGlobal",label:F.userGlobal}];form=new z({name:new _t("",{nonNullable:true,validators:[_e$1.required,_e$1.minLength(1)]}),description:new _t(null),apiType:new _t("OpenAI",{nonNullable:true,validators:[_e$1.required]}),baseUrl:new _t("",{nonNullable:true}),apiKey:new _t("",{nonNullable:true}),scope:new _t("namespace",{nonNullable:true}),headers:new ze([],{validators:[]})});get nameControl(){return this.form.controls.name}get descriptionControl(){return this.form.controls.description}get apiTypeControl(){return this.form.controls.apiType}get baseUrlControl(){return this.form.controls.baseUrl}get apiKeyControl(){return this.form.controls.apiKey}get scopeControl(){return this.form.controls.scope}get headersArray(){return this.form.controls.headers}addHeader(){this.headersArray.push(new z({key:new _t("",{nonNullable:true,validators:[_e$1.required]}),value:new _t("",{nonNullable:true})}));}removeHeader(r){this.headersArray.removeAt(r);}isEditMode=Gi(false);isSubmitting=Gi(false);isLoading=Gi(false);existingConfig=null;initialApiKey="";constructor(){this.isPlatformMode||Uf(()=>{this.isAdmin()||this.isEditMode()||this.scopeControl.value==="namespace"&&this.scopeControl.setValue("userOnNs");});}ngOnInit(){this.namespaceId&&this.state.setNamespace(this.namespaceId);let r=this.route.snapshot.paramMap,e=this.route.snapshot.queryParamMap,l=r.get("aiProviderId"),s=this.isPlatformMode?"namespace":this.parseScope(e.get("scope"));if(l){this.isEditMode.set(true),this.scopeControl.disable(),this.apiTypeControl.disable(),this.loadConfig(l);return}this.scopeControl.setValue(s);let f=e.get("template");f&&this.hydrateFromTemplate(f);}parseScope(r){return r&&ge.has(r)?r:"namespace"}deriveScopeFromConfig(r){return !r.userId?"namespace":r.namespaceId?"userOnNs":"userGlobal"}loadConfig(r){this.isLoading.set(true),this.state.getById(r).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(`[AiProviderForm] Could not load provider '${r}' \u2014 navigating back`),this.navigateBack();}});}hydrateFromTemplate(r){this.isLoading.set(true),this.state.getById(r).pipe(U(this.destroyRef)).subscribe({next:e=>{this.nameControl.setValue(e.name),this.descriptionControl.setValue(e.description??null),this.apiTypeControl.setValue(e.apiType),this.baseUrlControl.setValue(e.baseUrl??""),this.apiKeyControl.setValue(""),this.initialApiKey="",this.apiKeyControl.markAsTouched(),this.isLoading.set(false),this.router.navigate([],{relativeTo:this.route,queryParams:{template:null,templateScope:null},queryParamsHandling:"merge",replaceUrl:true});},error:e=>{console.warn(`[AiProviderForm] Could not hydrate from template ${r}:`,e),this.isLoading.set(false),this.router.navigate([],{relativeTo:this.route,queryParams:{template:null,templateScope:null},queryParamsHandling:"merge",replaceUrl:true});}});}applyConfigToForm(r){this.nameControl.setValue(r.name),this.descriptionControl.setValue(r.description??null),this.apiTypeControl.setValue(r.apiType),this.baseUrlControl.setValue(r.baseUrl??"");let e=r.apiKey??"";this.apiKeyControl.setValue(e),this.initialApiKey=e,this.headersArray.clear();for(let[l,s]of Object.entries(r.headers??{}))this.headersArray.push(new z({key:new _t(l,{nonNullable:true,validators:[_e$1.required]}),value:new _t(s,{nonNullable:true})}));}submit(){if(this.form.invalid||this.isSubmitting())return;if(this.isEditMode()&&!this.existingConfig?.id){this.navigateBack();return}this.isSubmitting.set(true);let r=this.descriptionControl.value?.trim(),e=this.baseUrlControl.value.trim(),l=this.apiKeyControl.value,s=this.isEditMode()&&l===this.initialApiKey?null:l,f=this.headersArray.controls.filter(x=>x.controls.key.value.trim()).map(x=>[x.controls.key.value.trim(),x.controls.value.value]),de=f.length>0?Object.fromEntries(f):null,N={name:this.nameControl.value.trim(),apiType:this.apiTypeControl.value,description:r||null,baseUrl:e||null,apiKey:s,headers:de},T=this.form.getRawValue().scope,pe=this.isPlatformMode?null:this.namespaceId??null;(this.isEditMode()&&this.existingConfig?.id?this.state.update(this.existingConfig.id,N,T,this.existingConfig):this.state.create(N,T,pe)).pipe(U(this.destroyRef)).subscribe({next:()=>this.navigateBack(),error:()=>this.isSubmitting.set(false)});}cancel(){this.navigateBack();}navigateBack(){this.isPlatformMode?this.router.navigate(["/agentos","admin","ai-providers"]):this.router.navigate(["/agentos",this.namespaceId,"ai-providers"]);}trackByScope(r,e){return e.value}static \u0275fac=function(e){return new(e||a)};static \u0275cmp=Fw({type:a,selectors:[["agentos-ai-provider-form"]],decls:10,vars:2,consts:[[1,"ai-provider-form"],[1,"ai-provider-form__header"],["type","button","title","Back to AI providers",1,"ai-provider-form__back",3,"click"],[1,"ai-provider-form__back-icon"],[1,"ai-provider-form__title"],[1,"ai-provider-form__loading"],[1,"ai-provider-form__form",3,"formGroup"],[1,"ai-provider-form__form",3,"ngSubmit","formGroup"],[1,"ai-provider-form__scope",3,"disabled"],[1,"ai-provider-form__field"],["for","llm-api-type",1,"ai-provider-form__label"],["aria-hidden","true"],["id","llm-api-type",1,"ai-provider-form__select",3,"formControl"],[3,"value"],["for","llm-name",1,"ai-provider-form__label"],["id","llm-name","type","text","placeholder","e.g. OpenAI prod","autocomplete","off",1,"ai-provider-form__input",3,"formControl"],["for","llm-description",1,"ai-provider-form__label"],["id","llm-description","type","text","placeholder","Optional \u2014 short description of this provider","autocomplete","off",1,"ai-provider-form__input",3,"formControl"],["for","llm-base-url",1,"ai-provider-form__label"],["id","llm-base-url","type","url","placeholder","Optional \u2014 leave empty for default endpoint","autocomplete","off",1,"ai-provider-form__input",3,"formControl"],["for","llm-api-key",1,"ai-provider-form__label"],["id","llm-api-key","type","password","placeholder","sk-\u2026","autocomplete","new-password",1,"ai-provider-form__input","ai-provider-form__input--secret",3,"formControl"],[1,"ai-provider-form__headers",3,"formArrayName"],[1,"ai-provider-form__headers-title"],[1,"ai-provider-form__label"],["type","button",1,"ai-provider-form__headers-add",3,"click"],[1,"ai-provider-form__header-row",3,"formGroupName"],[1,"ai-provider-form__actions"],["type","submit",1,"ai-provider-form__btn","ai-provider-form__btn--primary",3,"disabled"],["type","button",1,"ai-provider-form__btn",3,"click"],[1,"ai-provider-form__scope-option"],["type","radio",3,"formControl","value","disabled"],["type","text","placeholder","Header name","formControlName","key","autocomplete","off",1,"ai-provider-form__input"],["type","text","placeholder","Value","formControlName","value","autocomplete","off",1,"ai-provider-form__input"],["type","button","title","Remove header","aria-label","Remove header",1,"ai-provider-form__header-remove",3,"click"]],template:function(e,l){e&1&&(ws(0,"div",0)(1,"header",1)(2,"button",2),Rg("click",function(){return l.cancel()}),ws(3,"span",3),QC(4,"\u2190"),hl(),QC(5," AI Providers "),hl(),ws(6,"h1",4),QC(7),hl()(),oC(8,ce,2,0,"p",5)(9,_e,41,10,"form",6),hl()),e&2&&(nI(7),Yg(l.isEditMode()?"Edit AI provider":"New AI provider"),nI(),iC(l.isLoading()?8:9));},dependencies:[ni,Jn,Qn,ei,Ye,At,mn,Zn,Xn,Cn,En,An,Ct,Vt],styles:[".ai-provider-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2rem;max-width:480px;margin:0 auto;padding:2rem 1rem}.ai-provider-form__scope[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.4rem;border:1px solid var(--color-divider);border-radius:0;padding:.75rem 1rem;margin:0}.ai-provider-form__scope[disabled][_ngcontent-%COMP%]{opacity:.6}.ai-provider-form__scope-option[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;font-size:.85rem;color:var(--color-text);cursor:pointer}.ai-provider-form__header[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.ai-provider-form__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)}.ai-provider-form__back[_ngcontent-%COMP%]:hover{text-decoration:underline}.ai-provider-form__back-icon[_ngcontent-%COMP%]{font-size:1rem;line-height:1}.ai-provider-form__title[_ngcontent-%COMP%]{margin:0;font-size:1.5rem;font-weight:700;color:var(--color-text);letter-spacing:-.02em}.ai-provider-form__loading[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:.9rem;margin:0}.ai-provider-form__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1.25rem}.ai-provider-form__field[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.375rem}.ai-provider-form__label[_ngcontent-%COMP%]{font-size:.875rem;font-weight:500;color:var(--color-text)}.ai-provider-form__input[_ngcontent-%COMP%], .ai-provider-form__select[_ngcontent-%COMP%]{width:100%;padding:.625rem .875rem;border-radius:0;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;transition:border-color .15s ease}.ai-provider-form__input[_ngcontent-%COMP%]:focus, .ai-provider-form__select[_ngcontent-%COMP%]:focus{border-color:var(--color-accent)}.ai-provider-form__input[_ngcontent-%COMP%]::placeholder, .ai-provider-form__select[_ngcontent-%COMP%]::placeholder{color:var(--color-neutral-500)}.ai-provider-form__input--secret[_ngcontent-%COMP%]{font-family:monospace;letter-spacing:.05em}.ai-provider-form__headers[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.ai-provider-form__headers-title[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between}.ai-provider-form__headers-add[_ngcontent-%COMP%]{background:none;border:none;padding:0;cursor:pointer;font-size:.8125rem;color:var(--color-accent)}.ai-provider-form__headers-add[_ngcontent-%COMP%]:hover{text-decoration:underline}.ai-provider-form__header-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr auto;gap:.5rem;align-items:center}.ai-provider-form__header-remove[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;background:none;border:1px solid transparent;border-radius:0;cursor:pointer;font-size:1rem;color:var(--color-neutral-500);transition:background .15s ease,color .15s ease,border-color .15s ease;flex-shrink:0}.ai-provider-form__header-remove[_ngcontent-%COMP%]:hover{color:var(--red);background:color-mix(in srgb,var(--red) 10%,transparent);border-color:var(--red)}.ai-provider-form__actions[_ngcontent-%COMP%]{display:flex;gap:.75rem;padding-top:.5rem}.ai-provider-form__btn[_ngcontent-%COMP%]{padding:.6rem 1.25rem;border-radius:0;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;transition:background .15s ease,border-color .15s ease}.ai-provider-form__btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-bg-hover);border-color:var(--color-neutral-500)}.ai-provider-form__btn[_ngcontent-%COMP%]:disabled{opacity:.45;cursor:not-allowed}.ai-provider-form__btn--primary[_ngcontent-%COMP%]{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.ai-provider-form__btn--primary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-700);border-color:var(--color-accent-700)}"]})};export{se as AiProviderFormComponent};
@@ -0,0 +1,2 @@
1
+ import {n as ne}from'./chunk-Dcftf7UY.js';import {g,Z as z$1,_ as Ue,h as Fw,$ as zt,a0 as jt,a1 as Vt,a2 as Nt,i as hr,j as pr,m as ws,Q as QC,n as hl,q as oC,o as Rg,t as nI,A as Ug,a5 as Dl,a8 as Yg,x as iC,v as bg,a9 as gC,ai as em,aa as wf,ac as EC,aj as tT,ab as Cf,a3 as GI,ak as Jg,a6 as qI}from'./main-5PAOSHSM.js';import {y as yt,w as wt,t as ti,Z as Zn,c as cn}from'./chunk-tTmeIHGS.js';function G(c,p){if(c&1){let t=gC();ws(0,"mat-checkbox",5),em("ngModelChange",function(l){wf(t);let f=EC();return tT(f.checkboxChecked,l)||(f.checkboxChecked=l),Cf(l)}),QC(1),hl(),GI();}if(c&2){let t=EC();Jg("ngModel",t.checkboxChecked),qI(),nI(),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=Fw({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"),QC(2,"warning"),hl(),QC(3),hl(),ws(4,"mat-dialog-content")(5,"p"),QC(6),hl(),oC(7,G,2,2,"mat-checkbox",1),hl(),ws(8,"mat-dialog-actions",2)(9,"button",3),Rg("click",function(){return e.cancel()}),QC(10),hl(),ws(11,"button",4),Rg("click",function(){return e.confirm()}),QC(12),hl()()),t&2&&(nI(),Ug("destructive",!!e.data.isDestructive),nI(2),Dl(" ",e.data.title,`
2
+ `),nI(3),Yg(e.data.message),nI(),iC(e.data.checkboxLabel?7:-1),nI(3),Yg(e.data.cancelLabel??"Cancel"),nI(),bg("color",e.data.isDestructive?"warn":"primary"),nI(),Dl(" ",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};