@whoz-oss/coday-client 3.16.0 → 3.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/browser/{chunk-CjrWXBiR.js → chunk-0njD_aMa.js} +1 -1
- package/browser/{chunk-Dtu-PLbq.js → chunk-6WIaUDav.js} +1 -1
- package/browser/{chunk-CgqDTJ5-.js → chunk-B1OTuTxt.js} +1 -1
- package/browser/{chunk-Be1LOFvg.js → chunk-B3-4EW3s.js} +1 -1
- package/browser/{chunk-B0vRsgnD.js → chunk-B626-rya.js} +1 -1
- package/browser/{chunk-BHZY3TvC.js → chunk-B6BZBDSv.js} +1 -1
- package/browser/{chunk-jv0lz5Ah.js → chunk-B7kKWG4P.js} +1 -1
- package/browser/chunk-B7yga-a4.js +1 -0
- package/browser/{chunk-rwEyLSEP.js → chunk-BAWubWk8.js} +1 -1
- package/browser/chunk-BDaTUrH4.js +1 -0
- package/browser/{chunk-UzUd84Qf.js → chunk-BHvLB-pV.js} +1 -1
- package/browser/{chunk-Ci1jk71f.js → chunk-BJ5G7Y-a.js} +1 -1
- package/browser/{chunk-7jUQT_3F.js → chunk-BPfJALqU.js} +1 -1
- package/browser/{chunk-CFZbDe5T.js → chunk-BTX631I3.js} +1 -1
- package/browser/{chunk-CBNhmZDS.js → chunk-BVAD9f9s.js} +1 -1
- package/browser/{chunk-Dcftf7UY.js → chunk-BXkvjekT.js} +1 -1
- package/browser/{chunk-tTmeIHGS.js → chunk-BYyTBqh4.js} +1 -1
- package/browser/{chunk-CPBcDx4G.js → chunk-B_49KV6W.js} +1 -1
- package/browser/{chunk-CtkiOUdU.js → chunk-BaO2vi_O.js} +1 -1
- package/browser/{chunk-DDnWPYAA.js → chunk-BcT0wYqu.js} +1 -1
- package/browser/{chunk-YS-vAhPY.js → chunk-BdJzYh5V.js} +1 -1
- package/browser/{chunk-BTS5TBK0.js → chunk-Bgd8Jkga.js} +1 -1
- package/browser/chunk-BkN5jb4J.js +1 -0
- package/browser/{chunk-0OiZWE88.js → chunk-Brx_KbnM.js} +1 -1
- package/browser/{chunk-Bib1Seeu.js → chunk-BtEXE3Xz.js} +1 -1
- package/browser/{chunk-6gdeYlLc.js → chunk-Bu5Xq3QT.js} +1 -1
- package/browser/{chunk-C-aF2_1R.js → chunk-BwDJA6_r.js} +1 -1
- package/browser/{chunk-CGMAzvSo.js → chunk-C2VdQfMJ.js} +1 -1
- package/browser/{chunk-Dfujxxcr.js → chunk-C49BBPGm.js} +1 -1
- package/browser/{chunk-HjD5Rk4C.js → chunk-C5WD0UQE.js} +1 -1
- package/browser/{chunk-DzlrRiVM.js → chunk-CI760KmO.js} +1 -1
- package/browser/{chunk-Co81dkbz.js → chunk-CI7wYBKk.js} +1 -1
- package/browser/{chunk-BdpJ2ZCM.js → chunk-CKhGzoqa.js} +1 -1
- package/browser/{chunk-izARvh_2.js → chunk-CNAj5Eon.js} +1 -1
- package/browser/{chunk-BNS6Fgaw.js → chunk-CUz5MHdA.js} +1 -1
- package/browser/{chunk-axGY7UtD.js → chunk-CXTwGKdl.js} +1 -1
- package/browser/{chunk-SbH2L3h2.js → chunk-Ci9l-k84.js} +1 -1
- package/browser/{chunk-CbK5Lcu9.js → chunk-ClEmA_ih.js} +1 -1
- package/browser/{chunk-kvCfAm7Z.js → chunk-ClSDInQq.js} +1 -1
- package/browser/{chunk-BSSDDOqW.js → chunk-CpZK7G-Q.js} +1 -1
- package/browser/{chunk-CYulIMKp.js → chunk-CxUcyBb9.js} +1 -1
- package/browser/{chunk-BJYyjaQ6.js → chunk-D-jBfPIO.js} +1 -1
- package/browser/{chunk-CXLytVC3.js → chunk-D202v_ff.js} +1 -1
- package/browser/{chunk-BUJoEGsf.js → chunk-DCwEaE_b.js} +1 -1
- package/browser/{chunk-CtWMrBfw.js → chunk-DFQuWS_F.js} +1 -1
- package/browser/{chunk-pH1k_bet.js → chunk-DHb3-uKf.js} +1 -1
- package/browser/{chunk-IUvEtpfr.js → chunk-DKllQ3Ve.js} +1 -1
- package/browser/{chunk-DgrvmqY2.js → chunk-DMRb150M.js} +1 -1
- package/browser/{chunk-B_9LxHBv.js → chunk-DMtXGu5h.js} +1 -1
- package/browser/{chunk-swj7IkJA.js → chunk-DO3lSvop.js} +1 -1
- package/browser/{chunk-CTuHnJP4.js → chunk-DQtoh8wv.js} +1 -1
- package/browser/{chunk-S8F5_Te_.js → chunk-DjMtxVWg.js} +1 -1
- package/browser/{chunk-Bn3R3VC2.js → chunk-DjoW6kqa.js} +1 -1
- package/browser/{chunk-fhFxOLYS.js → chunk-DpHEu7EG.js} +1 -1
- package/browser/{chunk-Bhq5earA.js → chunk-DqC8XT4v.js} +1 -1
- package/browser/{chunk-gmPqDrDS.js → chunk-DqioJb1X.js} +1 -1
- package/browser/{chunk-fYErSEXN.js → chunk-DrzvCb86.js} +1 -1
- package/browser/{chunk-CwaAd8kk.js → chunk-DwFGK2iu.js} +1 -1
- package/browser/{chunk-iNIQR015.js → chunk-DxrynR3o.js} +1 -1
- package/browser/{chunk-BJeLQooO.js → chunk-DxvmpOv5.js} +1 -1
- package/browser/{chunk-C_s4Z3Dk.js → chunk-EBW8PloQ.js} +1 -1
- package/browser/{chunk-DOq0u21j.js → chunk-LVItL87L.js} +1 -1
- package/browser/{chunk-BEKR4Un_.js → chunk-P8B5rz7L.js} +1 -1
- package/browser/{chunk-BY7uKZAo.js → chunk-R-GmZrHu.js} +3 -3
- package/browser/{chunk-CiWu4t_i.js → chunk-b6g-uBR5.js} +1 -1
- package/browser/{chunk-YfG457Nc.js → chunk-bfpuueWC.js} +1 -1
- package/browser/{chunk-DQLU3kYb.js → chunk-mrKeqPKc.js} +1 -1
- package/browser/index.html +1 -1
- package/browser/{main-5PAOSHSM.js → main-LBRSRTYI.js} +14 -14
- package/package.json +1 -1
- package/browser/chunk-BEUXx3TO.js +0 -1
- package/browser/chunk-BdApeECy.js +0 -1
- package/browser/chunk-DoKoAMs6.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {ct as vi,h as Fw,T as Tg,A as Ug,aL as Eo,aM as qn,bE as vt,aO as wt,cZ as fn,cT as Wp,c_ as he$1,cV as vg,bA as wC,m as ws,bB as CC,n as hl,b5 as sT,ad as Hg,q as oC,x as iC,t as nI,aW as w,bv as Fg,D as bC,H as SC,g,az as Kt$1,c$ as kn,bw as St,bG as p,aP as G,aR as Fs,aU as Ue,aV as U,a as Gi,an as ce$1,al as yt,ae as Ot,u as ue,d0 as Ia,bL as pe,bs as bl,ap as Hy,bu as Ve$1,c2 as RE,aA as an,C as Pg,bt as Qn,aS as K,cO as us,bN as F,bR as Sd,cL as Cd,bP as Qy,a9 as gC,o as Rg,ac as EC,bV as Xy,aN as Nn,bD as ge,aQ as $a,bM as mr,d1 as lt,d2 as wt$1,d3 as I,b_ as xt,bX as Pt,b as P,aZ as js,aw as gl,cJ as Og,Q as QC,ax as ml,b$ as BC,a8 as Yg,c3 as kt,cD as Ce,cz as Jr,aa as wf,ab as Cf}from'./main-5PAOSHSM.js';var Xt=["tooltip"],Ut=20;var qt=new w("mat-tooltip-scroll-strategy",{providedIn:"root",factory:()=>{let n=g(pe);return ()=>kt(n,{scrollThrottle:Ut})}}),$t=new w("mat-tooltip-default-options",{providedIn:"root",factory:()=>({showDelay:0,hideDelay:0,touchendHideDelay:1500})});var Ht="tooltip-panel",Kt={passive:true},Jt=8,te=8,ee=24,ie=200,ne=(()=>{class n{_elementRef=g(Kt$1);_ngZone=g(G);_platform=g(p);_ariaDescriber=g($a);_focusMonitor=g(St);_dir=g(Qn);_injector=g(pe);_viewContainerRef=g(mr);_mediaMatcher=g(lt);_document=g(U);_renderer=g(Fs);_animationsDisabled=K();_defaultOptions=g($t,{optional:true});_overlayRef=null;_tooltipInstance=null;_overlayPanelClass;_portal;_position="below";_positionAtOrigin=false;_disabled=false;_tooltipClass;_viewInitialized=false;_pointerExitEventsInitialized=false;_tooltipComponent=Gt;_viewportMargin=8;_currentPosition;_cssClassPrefix="mat-mdc";_ariaDescriptionPending=false;_dirSubscribed=false;get position(){return this._position}set position(t){t!==this._position&&(this._position=t,this._overlayRef&&(this._updatePosition(this._overlayRef),this._tooltipInstance?.show(0),this._overlayRef.updatePosition()));}get positionAtOrigin(){return this._positionAtOrigin}set positionAtOrigin(t){this._positionAtOrigin=vi(t),this._detach(),this._overlayRef=null;}get disabled(){return this._disabled}set disabled(t){let e=vi(t);this._disabled!==e&&(this._disabled=e,e?this.hide(0):this._setupPointerEnterEventsIfNeeded(),this._syncAriaDescription(this.message));}get showDelay(){return this._showDelay}set showDelay(t){this._showDelay=fn(t);}_showDelay;get hideDelay(){return this._hideDelay}set hideDelay(t){this._hideDelay=fn(t),this._tooltipInstance&&(this._tooltipInstance._mouseLeaveHideDelay=this._hideDelay);}_hideDelay;touchGestures="auto";get message(){return this._message}set message(t){let e=this._message;this._message=t!=null?String(t).trim():"",!this._message&&this._isTooltipVisible()?this.hide(0):(this._setupPointerEnterEventsIfNeeded(),this._updateTooltipMessage()),this._syncAriaDescription(e);}_message="";get tooltipClass(){return this._tooltipClass}set tooltipClass(t){this._tooltipClass=t,this._tooltipInstance&&this._setTooltipClass(this._tooltipClass);}_eventCleanups=[];_touchstartTimeout=null;_destroyed=new ce$1;_isDestroyed=false;constructor(){let t=this._defaultOptions;t&&(this._showDelay=t.showDelay,this._hideDelay=t.hideDelay,t.position&&(this.position=t.position),t.positionAtOrigin&&(this.positionAtOrigin=t.positionAtOrigin),t.touchGestures&&(this.touchGestures=t.touchGestures),t.tooltipClass&&(this.tooltipClass=t.tooltipClass)),this._viewportMargin=Jt;}ngAfterViewInit(){this._viewInitialized=true,this._setupPointerEnterEventsIfNeeded(),this._focusMonitor.monitor(this._elementRef).pipe(Hy(this._destroyed)).subscribe(t=>{t?t==="keyboard"&&this._ngZone.run(()=>this.show()):this._ngZone.run(()=>this.hide(0));});}ngOnDestroy(){let t=this._elementRef.nativeElement;this._touchstartTimeout&&clearTimeout(this._touchstartTimeout),this._overlayRef&&(this._overlayRef.dispose(),this._tooltipInstance=null),this._eventCleanups.forEach(e=>e()),this._eventCleanups.length=0,this._destroyed.next(),this._destroyed.complete(),this._isDestroyed=true,this._ariaDescriber.removeDescription(t,this.message,"tooltip"),this._focusMonitor.stopMonitoring(t);}show(t=this.showDelay,e){if(this.disabled||!this.message||this._isTooltipVisible()){this._tooltipInstance?._cancelPendingAnimations();return}let i=this._createOverlay(e);this._detach(),this._portal=this._portal||new wt$1(this._tooltipComponent,this._viewContainerRef);let r=this._tooltipInstance=i.attach(this._portal).instance;r._triggerElement=this._elementRef.nativeElement,r._mouseLeaveHideDelay=this._hideDelay,r.afterHidden().pipe(Hy(this._destroyed)).subscribe(()=>this._detach()),this._setTooltipClass(this._tooltipClass),this._updateTooltipMessage(),r.show(t);}hide(t=this.hideDelay){let e=this._tooltipInstance;e&&(e.isVisible()?e.hide(t):(e._cancelPendingAnimations(),this._detach()));}toggle(t){this._isTooltipVisible()?this.hide():this.show(void 0,t);}_isTooltipVisible(){return !!this._tooltipInstance&&this._tooltipInstance.isVisible()}_createOverlay(t){if(this._overlayRef){let a=this._overlayRef.getConfig().positionStrategy;if((!this.positionAtOrigin||!t)&&a._origin instanceof Kt$1)return this._overlayRef;this._detach();}let e=this._injector.get(I).getAncestorScrollContainers(this._elementRef),i=`${this._cssClassPrefix}-${Ht}`,r=xt(this._injector,this.positionAtOrigin?t||this._elementRef:this._elementRef).withTransformOriginOn(`.${this._cssClassPrefix}-tooltip`).withFlexibleDimensions(false).withViewportMargin(this._viewportMargin).withScrollableContainers(e).withPopoverLocation("global");return r.positionChanges.pipe(Hy(this._destroyed)).subscribe(a=>{this._updateCurrentPositionClass(a.connectionPair),this._tooltipInstance&&a.scrollableViewProperties.isOverlayClipped&&this._tooltipInstance.isVisible()&&this._ngZone.run(()=>this.hide(0));}),this._overlayRef=Pt(this._injector,{direction:this._dir,positionStrategy:r,panelClass:this._overlayPanelClass?[...this._overlayPanelClass,i]:i,scrollStrategy:this._injector.get(qt)(),disableAnimations:this._animationsDisabled,eventPredicate:this._overlayEventPredicate}),this._updatePosition(this._overlayRef),this._overlayRef.detachments().pipe(Hy(this._destroyed)).subscribe(()=>this._detach()),this._overlayRef.outsidePointerEvents().pipe(Hy(this._destroyed)).subscribe(()=>this._tooltipInstance?._handleBodyInteraction()),this._overlayRef.keydownEvents().pipe(Hy(this._destroyed)).subscribe(a=>{a.preventDefault(),a.stopPropagation(),this._ngZone.run(()=>this.hide(0));}),this._defaultOptions?.disableTooltipInteractivity&&this._overlayRef.addPanelClass(`${this._cssClassPrefix}-tooltip-panel-non-interactive`),this._dirSubscribed||(this._dirSubscribed=true,this._dir.change.pipe(Hy(this._destroyed)).subscribe(()=>{this._overlayRef&&this._updatePosition(this._overlayRef);})),this._overlayRef}_detach(){this._overlayRef&&this._overlayRef.hasAttached()&&this._overlayRef.detach(),this._tooltipInstance=null;}_updatePosition(t){let e=t.getConfig().positionStrategy,i=this._getOrigin(),r=this._getOverlayPosition();e.withPositions([this._addOffset(P(P({},i.main),r.main)),this._addOffset(P(P({},i.fallback),r.fallback))]);}_addOffset(t){let e=te,i=!this._dir||this._dir.value=="ltr";return t.originY==="top"?t.offsetY=-e:t.originY==="bottom"?t.offsetY=e:t.originX==="start"?t.offsetX=i?-e:e:t.originX==="end"&&(t.offsetX=i?e:-e),t}_getOrigin(){let t=!this._dir||this._dir.value=="ltr",e=this.position,i;e=="above"||e=="below"?i={originX:"center",originY:e=="above"?"top":"bottom"}:e=="before"||e=="left"&&t||e=="right"&&!t?i={originX:"start",originY:"center"}:(e=="after"||e=="right"&&t||e=="left"&&!t)&&(i={originX:"end",originY:"center"});let{x:r,y:a}=this._invertPosition(i.originX,i.originY);return {main:i,fallback:{originX:r,originY:a}}}_getOverlayPosition(){let t=!this._dir||this._dir.value=="ltr",e=this.position,i;e=="above"?i={overlayX:"center",overlayY:"bottom"}:e=="below"?i={overlayX:"center",overlayY:"top"}:e=="before"||e=="left"&&t||e=="right"&&!t?i={overlayX:"end",overlayY:"center"}:(e=="after"||e=="right"&&t||e=="left"&&!t)&&(i={overlayX:"start",overlayY:"center"});let{x:r,y:a}=this._invertPosition(i.overlayX,i.overlayY);return {main:i,fallback:{overlayX:r,overlayY:a}}}_updateTooltipMessage(){this._tooltipInstance&&(this._tooltipInstance.message=this.message,this._tooltipInstance._markForCheck(),RE(()=>{this._tooltipInstance&&this._overlayRef.updatePosition();},{injector:this._injector}));}_setTooltipClass(t){this._tooltipInstance&&(this._tooltipInstance.tooltipClass=t instanceof Set?Array.from(t):t,this._tooltipInstance._markForCheck());}_invertPosition(t,e){return this.position==="above"||this.position==="below"?e==="top"?e="bottom":e==="bottom"&&(e="top"):t==="end"?t="start":t==="start"&&(t="end"),{x:t,y:e}}_updateCurrentPositionClass(t){let{overlayY:e,originX:i,originY:r}=t,a;if(e==="center"?this._dir&&this._dir.value==="rtl"?a=i==="end"?"left":"right":a=i==="start"?"left":"right":a=e==="bottom"&&r==="top"?"above":"below",a!==this._currentPosition){let A=this._overlayRef;if(A){let ut=`${this._cssClassPrefix}-${Ht}-`;A.removePanelClass(ut+this._currentPosition),A.addPanelClass(ut+a);}this._currentPosition=a;}}_setupPointerEnterEventsIfNeeded(){this._disabled||!this.message||!this._viewInitialized||this._eventCleanups.length||(this._isTouchPlatform()?this.touchGestures!=="off"&&(this._disableNativeGesturesIfNecessary(),this._addListener("touchstart",t=>{let e=t.targetTouches?.[0],i=e?{x:e.clientX,y:e.clientY}:void 0;this._setupPointerExitEventsIfNeeded(),this._touchstartTimeout&&clearTimeout(this._touchstartTimeout);let r=500;this._touchstartTimeout=setTimeout(()=>{this._touchstartTimeout=null,this.show(void 0,i);},this._defaultOptions?.touchLongPressShowDelay??r);})):this._addListener("mouseenter",t=>{this._setupPointerExitEventsIfNeeded();let e;t.x!==void 0&&t.y!==void 0&&(e=t),this.show(void 0,e);}));}_setupPointerExitEventsIfNeeded(){if(!this._pointerExitEventsInitialized){if(this._pointerExitEventsInitialized=true,!this._isTouchPlatform())this._addListener("mouseleave",t=>{let e=t.relatedTarget;(!e||!this._overlayRef?.overlayElement.contains(e))&&this.hide();}),this._addListener("wheel",t=>{if(this._isTooltipVisible()){let e=this._document.elementFromPoint(t.clientX,t.clientY),i=this._elementRef.nativeElement;e!==i&&!i.contains(e)&&this.hide();}});else if(this.touchGestures!=="off"){this._disableNativeGesturesIfNecessary();let t=()=>{this._touchstartTimeout&&clearTimeout(this._touchstartTimeout),this.hide(this._defaultOptions?.touchendHideDelay);};this._addListener("touchend",t),this._addListener("touchcancel",t);}}}_addListener(t,e){this._eventCleanups.push(this._renderer.listen(this._elementRef.nativeElement,t,e,Kt));}_isTouchPlatform(){let t=this._defaultOptions?.detectHoverCapability;return typeof t=="function"?!t():this._platform.IOS||this._platform.ANDROID?true:this._platform.isBrowser?!!t&&this._mediaMatcher.matchMedia("(any-hover: none)").matches:false}_disableNativeGesturesIfNecessary(){let t=this.touchGestures;if(t!=="off"){let e=this._elementRef.nativeElement,i=e.style;(t==="on"||e.nodeName!=="INPUT"&&e.nodeName!=="TEXTAREA")&&(i.userSelect=i.msUserSelect=i.webkitUserSelect=i.MozUserSelect="none"),(t==="on"||!e.draggable)&&(i.webkitUserDrag="none"),i.touchAction="none",i.webkitTapHighlightColor="transparent";}}_syncAriaDescription(t){this._ariaDescriptionPending||(this._ariaDescriptionPending=true,this._ariaDescriber.removeDescription(this._elementRef.nativeElement,t,"tooltip"),this._isDestroyed||RE({write:()=>{this._ariaDescriptionPending=false,this.message&&!this.disabled&&this._ariaDescriber.describe(this._elementRef.nativeElement,this.message,"tooltip");}},{injector:this._injector}));}_overlayEventPredicate=t=>t.type==="keydown"?this._isTooltipVisible()&&t.keyCode===27&&!Ve$1(t):true;static \u0275fac=function(e){return new(e||n)};static \u0275dir=js({type:n,selectors:[["","matTooltip",""]],hostAttrs:[1,"mat-mdc-tooltip-trigger"],hostVars:2,hostBindings:function(e,i){e&2&&Ug("mat-mdc-tooltip-disabled",i.disabled);},inputs:{position:[0,"matTooltipPosition","position"],positionAtOrigin:[0,"matTooltipPositionAtOrigin","positionAtOrigin"],disabled:[0,"matTooltipDisabled","disabled"],showDelay:[0,"matTooltipShowDelay","showDelay"],hideDelay:[0,"matTooltipHideDelay","hideDelay"],touchGestures:[0,"matTooltipTouchGestures","touchGestures"],message:[0,"matTooltip","message"],tooltipClass:[0,"matTooltipClass","tooltipClass"]},exportAs:["matTooltip"]})}return n})(),Gt=(()=>{class n{_changeDetectorRef=g(bl);_elementRef=g(Kt$1);_isMultiline=false;message;tooltipClass;_showTimeoutId;_hideTimeoutId;_triggerElement;_mouseLeaveHideDelay;_animationsDisabled=K();_tooltip;_closeOnInteraction=false;_isVisible=false;_onHide=new ce$1;_showAnimation="mat-mdc-tooltip-show";_hideAnimation="mat-mdc-tooltip-hide";show(t){this._hideTimeoutId!=null&&clearTimeout(this._hideTimeoutId),this._showTimeoutId=setTimeout(()=>{this._toggleVisibility(true),this._showTimeoutId=void 0;},t);}hide(t){this._showTimeoutId!=null&&clearTimeout(this._showTimeoutId),this._hideTimeoutId=setTimeout(()=>{this._toggleVisibility(false),this._hideTimeoutId=void 0;},t);}afterHidden(){return this._onHide}isVisible(){return this._isVisible}ngOnDestroy(){this._cancelPendingAnimations(),this._onHide.complete(),this._triggerElement=null;}_handleBodyInteraction(){this._closeOnInteraction&&this.hide(0);}_markForCheck(){this._changeDetectorRef.markForCheck();}_handleMouseLeave({relatedTarget:t}){(!t||!this._triggerElement.contains(t))&&(this.isVisible()?this.hide(this._mouseLeaveHideDelay):this._finalizeAnimation(false));}_onShow(){this._isMultiline=this._isTooltipMultiline(),this._markForCheck();}_isTooltipMultiline(){let t=this._elementRef.nativeElement.getBoundingClientRect();return t.height>ee&&t.width>=ie}_handleAnimationEnd({animationName:t}){(t===this._showAnimation||t===this._hideAnimation)&&this._finalizeAnimation(t===this._showAnimation);}_cancelPendingAnimations(){this._showTimeoutId!=null&&clearTimeout(this._showTimeoutId),this._hideTimeoutId!=null&&clearTimeout(this._hideTimeoutId),this._showTimeoutId=this._hideTimeoutId=void 0;}_finalizeAnimation(t){t?this._closeOnInteraction=true:this.isVisible()||this._onHide.next();}_toggleVisibility(t){let e=this._tooltip.nativeElement,i=this._showAnimation,r=this._hideAnimation;if(e.classList.remove(t?r:i),e.classList.add(t?i:r),this._isVisible!==t&&(this._isVisible=t,this._changeDetectorRef.markForCheck()),t&&!this._animationsDisabled&&typeof getComputedStyle=="function"){let a=getComputedStyle(e);(a.getPropertyValue("animation-duration")==="0s"||a.getPropertyValue("animation-name")==="none")&&(this._animationsDisabled=true);}t&&this._onShow(),this._animationsDisabled&&(e.classList.add("_mat-animation-noopable"),this._finalizeAnimation(t));}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=Fw({type:n,selectors:[["mat-tooltip-component"]],viewQuery:function(e,i){if(e&1&&Pg(Xt,7),e&2){let r;bC(r=SC())&&(i._tooltip=r.first);}},hostAttrs:["aria-hidden","true"],hostBindings:function(e,i){e&1&&Rg("mouseleave",function(a){return i._handleMouseLeave(a)});},decls:4,vars:5,consts:[["tooltip",""],[1,"mdc-tooltip","mat-mdc-tooltip",3,"animationend"],[1,"mat-mdc-tooltip-surface","mdc-tooltip__surface"]],template:function(e,i){e&1&&(gl(0,"div",1,0),Og("animationend",function(a){return i._handleAnimationEnd(a)}),gl(2,"div",2),QC(3),ml()()),e&2&&(BC(i.tooltipClass),Ug("mdc-tooltip--multiline",i._isMultiline),nI(3),Yg(i.message));},styles:[`.mat-mdc-tooltip {
|
|
1
|
+
import {ct as vi,h as Fw,T as Tg,A as Ug,aL as Eo,aM as qn,bE as vt,aO as wt,cZ as fn,cT as Wp,c_ as he$1,cV as vg,bA as wC,m as ws,bB as CC,n as hl,b5 as sT,ad as Hg,q as oC,x as iC,t as nI,aW as w,bv as Fg,D as bC,H as SC,g,az as Kt$1,c$ as kn,bw as St,bG as p,aP as G,aR as Fs,aU as Ue,aV as U,a as Gi,an as ce$1,al as yt,ae as Ot,u as ue,d0 as Ia,bL as pe,bs as bl,ap as Hy,bu as Ve$1,c2 as RE,aA as an,C as Pg,bt as Qn,aS as K,cO as us,bN as F,bR as Sd,cL as Cd,bP as Qy,a9 as gC,o as Rg,ac as EC,bV as Xy,aN as Nn,bD as ge,aQ as $a,bM as mr,d1 as lt,d2 as wt$1,d3 as I,b_ as xt,bX as Pt,b as P,aZ as js,aw as gl,cJ as Og,Q as QC,ax as ml,b$ as BC,a8 as Yg,c3 as kt,cD as Ce,cz as Jr,aa as wf,ab as Cf}from'./main-LBRSRTYI.js';var Xt=["tooltip"],Ut=20;var qt=new w("mat-tooltip-scroll-strategy",{providedIn:"root",factory:()=>{let n=g(pe);return ()=>kt(n,{scrollThrottle:Ut})}}),$t=new w("mat-tooltip-default-options",{providedIn:"root",factory:()=>({showDelay:0,hideDelay:0,touchendHideDelay:1500})});var Ht="tooltip-panel",Kt={passive:true},Jt=8,te=8,ee=24,ie=200,ne=(()=>{class n{_elementRef=g(Kt$1);_ngZone=g(G);_platform=g(p);_ariaDescriber=g($a);_focusMonitor=g(St);_dir=g(Qn);_injector=g(pe);_viewContainerRef=g(mr);_mediaMatcher=g(lt);_document=g(U);_renderer=g(Fs);_animationsDisabled=K();_defaultOptions=g($t,{optional:true});_overlayRef=null;_tooltipInstance=null;_overlayPanelClass;_portal;_position="below";_positionAtOrigin=false;_disabled=false;_tooltipClass;_viewInitialized=false;_pointerExitEventsInitialized=false;_tooltipComponent=Gt;_viewportMargin=8;_currentPosition;_cssClassPrefix="mat-mdc";_ariaDescriptionPending=false;_dirSubscribed=false;get position(){return this._position}set position(t){t!==this._position&&(this._position=t,this._overlayRef&&(this._updatePosition(this._overlayRef),this._tooltipInstance?.show(0),this._overlayRef.updatePosition()));}get positionAtOrigin(){return this._positionAtOrigin}set positionAtOrigin(t){this._positionAtOrigin=vi(t),this._detach(),this._overlayRef=null;}get disabled(){return this._disabled}set disabled(t){let e=vi(t);this._disabled!==e&&(this._disabled=e,e?this.hide(0):this._setupPointerEnterEventsIfNeeded(),this._syncAriaDescription(this.message));}get showDelay(){return this._showDelay}set showDelay(t){this._showDelay=fn(t);}_showDelay;get hideDelay(){return this._hideDelay}set hideDelay(t){this._hideDelay=fn(t),this._tooltipInstance&&(this._tooltipInstance._mouseLeaveHideDelay=this._hideDelay);}_hideDelay;touchGestures="auto";get message(){return this._message}set message(t){let e=this._message;this._message=t!=null?String(t).trim():"",!this._message&&this._isTooltipVisible()?this.hide(0):(this._setupPointerEnterEventsIfNeeded(),this._updateTooltipMessage()),this._syncAriaDescription(e);}_message="";get tooltipClass(){return this._tooltipClass}set tooltipClass(t){this._tooltipClass=t,this._tooltipInstance&&this._setTooltipClass(this._tooltipClass);}_eventCleanups=[];_touchstartTimeout=null;_destroyed=new ce$1;_isDestroyed=false;constructor(){let t=this._defaultOptions;t&&(this._showDelay=t.showDelay,this._hideDelay=t.hideDelay,t.position&&(this.position=t.position),t.positionAtOrigin&&(this.positionAtOrigin=t.positionAtOrigin),t.touchGestures&&(this.touchGestures=t.touchGestures),t.tooltipClass&&(this.tooltipClass=t.tooltipClass)),this._viewportMargin=Jt;}ngAfterViewInit(){this._viewInitialized=true,this._setupPointerEnterEventsIfNeeded(),this._focusMonitor.monitor(this._elementRef).pipe(Hy(this._destroyed)).subscribe(t=>{t?t==="keyboard"&&this._ngZone.run(()=>this.show()):this._ngZone.run(()=>this.hide(0));});}ngOnDestroy(){let t=this._elementRef.nativeElement;this._touchstartTimeout&&clearTimeout(this._touchstartTimeout),this._overlayRef&&(this._overlayRef.dispose(),this._tooltipInstance=null),this._eventCleanups.forEach(e=>e()),this._eventCleanups.length=0,this._destroyed.next(),this._destroyed.complete(),this._isDestroyed=true,this._ariaDescriber.removeDescription(t,this.message,"tooltip"),this._focusMonitor.stopMonitoring(t);}show(t=this.showDelay,e){if(this.disabled||!this.message||this._isTooltipVisible()){this._tooltipInstance?._cancelPendingAnimations();return}let i=this._createOverlay(e);this._detach(),this._portal=this._portal||new wt$1(this._tooltipComponent,this._viewContainerRef);let r=this._tooltipInstance=i.attach(this._portal).instance;r._triggerElement=this._elementRef.nativeElement,r._mouseLeaveHideDelay=this._hideDelay,r.afterHidden().pipe(Hy(this._destroyed)).subscribe(()=>this._detach()),this._setTooltipClass(this._tooltipClass),this._updateTooltipMessage(),r.show(t);}hide(t=this.hideDelay){let e=this._tooltipInstance;e&&(e.isVisible()?e.hide(t):(e._cancelPendingAnimations(),this._detach()));}toggle(t){this._isTooltipVisible()?this.hide():this.show(void 0,t);}_isTooltipVisible(){return !!this._tooltipInstance&&this._tooltipInstance.isVisible()}_createOverlay(t){if(this._overlayRef){let a=this._overlayRef.getConfig().positionStrategy;if((!this.positionAtOrigin||!t)&&a._origin instanceof Kt$1)return this._overlayRef;this._detach();}let e=this._injector.get(I).getAncestorScrollContainers(this._elementRef),i=`${this._cssClassPrefix}-${Ht}`,r=xt(this._injector,this.positionAtOrigin?t||this._elementRef:this._elementRef).withTransformOriginOn(`.${this._cssClassPrefix}-tooltip`).withFlexibleDimensions(false).withViewportMargin(this._viewportMargin).withScrollableContainers(e).withPopoverLocation("global");return r.positionChanges.pipe(Hy(this._destroyed)).subscribe(a=>{this._updateCurrentPositionClass(a.connectionPair),this._tooltipInstance&&a.scrollableViewProperties.isOverlayClipped&&this._tooltipInstance.isVisible()&&this._ngZone.run(()=>this.hide(0));}),this._overlayRef=Pt(this._injector,{direction:this._dir,positionStrategy:r,panelClass:this._overlayPanelClass?[...this._overlayPanelClass,i]:i,scrollStrategy:this._injector.get(qt)(),disableAnimations:this._animationsDisabled,eventPredicate:this._overlayEventPredicate}),this._updatePosition(this._overlayRef),this._overlayRef.detachments().pipe(Hy(this._destroyed)).subscribe(()=>this._detach()),this._overlayRef.outsidePointerEvents().pipe(Hy(this._destroyed)).subscribe(()=>this._tooltipInstance?._handleBodyInteraction()),this._overlayRef.keydownEvents().pipe(Hy(this._destroyed)).subscribe(a=>{a.preventDefault(),a.stopPropagation(),this._ngZone.run(()=>this.hide(0));}),this._defaultOptions?.disableTooltipInteractivity&&this._overlayRef.addPanelClass(`${this._cssClassPrefix}-tooltip-panel-non-interactive`),this._dirSubscribed||(this._dirSubscribed=true,this._dir.change.pipe(Hy(this._destroyed)).subscribe(()=>{this._overlayRef&&this._updatePosition(this._overlayRef);})),this._overlayRef}_detach(){this._overlayRef&&this._overlayRef.hasAttached()&&this._overlayRef.detach(),this._tooltipInstance=null;}_updatePosition(t){let e=t.getConfig().positionStrategy,i=this._getOrigin(),r=this._getOverlayPosition();e.withPositions([this._addOffset(P(P({},i.main),r.main)),this._addOffset(P(P({},i.fallback),r.fallback))]);}_addOffset(t){let e=te,i=!this._dir||this._dir.value=="ltr";return t.originY==="top"?t.offsetY=-e:t.originY==="bottom"?t.offsetY=e:t.originX==="start"?t.offsetX=i?-e:e:t.originX==="end"&&(t.offsetX=i?e:-e),t}_getOrigin(){let t=!this._dir||this._dir.value=="ltr",e=this.position,i;e=="above"||e=="below"?i={originX:"center",originY:e=="above"?"top":"bottom"}:e=="before"||e=="left"&&t||e=="right"&&!t?i={originX:"start",originY:"center"}:(e=="after"||e=="right"&&t||e=="left"&&!t)&&(i={originX:"end",originY:"center"});let{x:r,y:a}=this._invertPosition(i.originX,i.originY);return {main:i,fallback:{originX:r,originY:a}}}_getOverlayPosition(){let t=!this._dir||this._dir.value=="ltr",e=this.position,i;e=="above"?i={overlayX:"center",overlayY:"bottom"}:e=="below"?i={overlayX:"center",overlayY:"top"}:e=="before"||e=="left"&&t||e=="right"&&!t?i={overlayX:"end",overlayY:"center"}:(e=="after"||e=="right"&&t||e=="left"&&!t)&&(i={overlayX:"start",overlayY:"center"});let{x:r,y:a}=this._invertPosition(i.overlayX,i.overlayY);return {main:i,fallback:{overlayX:r,overlayY:a}}}_updateTooltipMessage(){this._tooltipInstance&&(this._tooltipInstance.message=this.message,this._tooltipInstance._markForCheck(),RE(()=>{this._tooltipInstance&&this._overlayRef.updatePosition();},{injector:this._injector}));}_setTooltipClass(t){this._tooltipInstance&&(this._tooltipInstance.tooltipClass=t instanceof Set?Array.from(t):t,this._tooltipInstance._markForCheck());}_invertPosition(t,e){return this.position==="above"||this.position==="below"?e==="top"?e="bottom":e==="bottom"&&(e="top"):t==="end"?t="start":t==="start"&&(t="end"),{x:t,y:e}}_updateCurrentPositionClass(t){let{overlayY:e,originX:i,originY:r}=t,a;if(e==="center"?this._dir&&this._dir.value==="rtl"?a=i==="end"?"left":"right":a=i==="start"?"left":"right":a=e==="bottom"&&r==="top"?"above":"below",a!==this._currentPosition){let A=this._overlayRef;if(A){let ut=`${this._cssClassPrefix}-${Ht}-`;A.removePanelClass(ut+this._currentPosition),A.addPanelClass(ut+a);}this._currentPosition=a;}}_setupPointerEnterEventsIfNeeded(){this._disabled||!this.message||!this._viewInitialized||this._eventCleanups.length||(this._isTouchPlatform()?this.touchGestures!=="off"&&(this._disableNativeGesturesIfNecessary(),this._addListener("touchstart",t=>{let e=t.targetTouches?.[0],i=e?{x:e.clientX,y:e.clientY}:void 0;this._setupPointerExitEventsIfNeeded(),this._touchstartTimeout&&clearTimeout(this._touchstartTimeout);let r=500;this._touchstartTimeout=setTimeout(()=>{this._touchstartTimeout=null,this.show(void 0,i);},this._defaultOptions?.touchLongPressShowDelay??r);})):this._addListener("mouseenter",t=>{this._setupPointerExitEventsIfNeeded();let e;t.x!==void 0&&t.y!==void 0&&(e=t),this.show(void 0,e);}));}_setupPointerExitEventsIfNeeded(){if(!this._pointerExitEventsInitialized){if(this._pointerExitEventsInitialized=true,!this._isTouchPlatform())this._addListener("mouseleave",t=>{let e=t.relatedTarget;(!e||!this._overlayRef?.overlayElement.contains(e))&&this.hide();}),this._addListener("wheel",t=>{if(this._isTooltipVisible()){let e=this._document.elementFromPoint(t.clientX,t.clientY),i=this._elementRef.nativeElement;e!==i&&!i.contains(e)&&this.hide();}});else if(this.touchGestures!=="off"){this._disableNativeGesturesIfNecessary();let t=()=>{this._touchstartTimeout&&clearTimeout(this._touchstartTimeout),this.hide(this._defaultOptions?.touchendHideDelay);};this._addListener("touchend",t),this._addListener("touchcancel",t);}}}_addListener(t,e){this._eventCleanups.push(this._renderer.listen(this._elementRef.nativeElement,t,e,Kt));}_isTouchPlatform(){let t=this._defaultOptions?.detectHoverCapability;return typeof t=="function"?!t():this._platform.IOS||this._platform.ANDROID?true:this._platform.isBrowser?!!t&&this._mediaMatcher.matchMedia("(any-hover: none)").matches:false}_disableNativeGesturesIfNecessary(){let t=this.touchGestures;if(t!=="off"){let e=this._elementRef.nativeElement,i=e.style;(t==="on"||e.nodeName!=="INPUT"&&e.nodeName!=="TEXTAREA")&&(i.userSelect=i.msUserSelect=i.webkitUserSelect=i.MozUserSelect="none"),(t==="on"||!e.draggable)&&(i.webkitUserDrag="none"),i.touchAction="none",i.webkitTapHighlightColor="transparent";}}_syncAriaDescription(t){this._ariaDescriptionPending||(this._ariaDescriptionPending=true,this._ariaDescriber.removeDescription(this._elementRef.nativeElement,t,"tooltip"),this._isDestroyed||RE({write:()=>{this._ariaDescriptionPending=false,this.message&&!this.disabled&&this._ariaDescriber.describe(this._elementRef.nativeElement,this.message,"tooltip");}},{injector:this._injector}));}_overlayEventPredicate=t=>t.type==="keydown"?this._isTooltipVisible()&&t.keyCode===27&&!Ve$1(t):true;static \u0275fac=function(e){return new(e||n)};static \u0275dir=js({type:n,selectors:[["","matTooltip",""]],hostAttrs:[1,"mat-mdc-tooltip-trigger"],hostVars:2,hostBindings:function(e,i){e&2&&Ug("mat-mdc-tooltip-disabled",i.disabled);},inputs:{position:[0,"matTooltipPosition","position"],positionAtOrigin:[0,"matTooltipPositionAtOrigin","positionAtOrigin"],disabled:[0,"matTooltipDisabled","disabled"],showDelay:[0,"matTooltipShowDelay","showDelay"],hideDelay:[0,"matTooltipHideDelay","hideDelay"],touchGestures:[0,"matTooltipTouchGestures","touchGestures"],message:[0,"matTooltip","message"],tooltipClass:[0,"matTooltipClass","tooltipClass"]},exportAs:["matTooltip"]})}return n})(),Gt=(()=>{class n{_changeDetectorRef=g(bl);_elementRef=g(Kt$1);_isMultiline=false;message;tooltipClass;_showTimeoutId;_hideTimeoutId;_triggerElement;_mouseLeaveHideDelay;_animationsDisabled=K();_tooltip;_closeOnInteraction=false;_isVisible=false;_onHide=new ce$1;_showAnimation="mat-mdc-tooltip-show";_hideAnimation="mat-mdc-tooltip-hide";show(t){this._hideTimeoutId!=null&&clearTimeout(this._hideTimeoutId),this._showTimeoutId=setTimeout(()=>{this._toggleVisibility(true),this._showTimeoutId=void 0;},t);}hide(t){this._showTimeoutId!=null&&clearTimeout(this._showTimeoutId),this._hideTimeoutId=setTimeout(()=>{this._toggleVisibility(false),this._hideTimeoutId=void 0;},t);}afterHidden(){return this._onHide}isVisible(){return this._isVisible}ngOnDestroy(){this._cancelPendingAnimations(),this._onHide.complete(),this._triggerElement=null;}_handleBodyInteraction(){this._closeOnInteraction&&this.hide(0);}_markForCheck(){this._changeDetectorRef.markForCheck();}_handleMouseLeave({relatedTarget:t}){(!t||!this._triggerElement.contains(t))&&(this.isVisible()?this.hide(this._mouseLeaveHideDelay):this._finalizeAnimation(false));}_onShow(){this._isMultiline=this._isTooltipMultiline(),this._markForCheck();}_isTooltipMultiline(){let t=this._elementRef.nativeElement.getBoundingClientRect();return t.height>ee&&t.width>=ie}_handleAnimationEnd({animationName:t}){(t===this._showAnimation||t===this._hideAnimation)&&this._finalizeAnimation(t===this._showAnimation);}_cancelPendingAnimations(){this._showTimeoutId!=null&&clearTimeout(this._showTimeoutId),this._hideTimeoutId!=null&&clearTimeout(this._hideTimeoutId),this._showTimeoutId=this._hideTimeoutId=void 0;}_finalizeAnimation(t){t?this._closeOnInteraction=true:this.isVisible()||this._onHide.next();}_toggleVisibility(t){let e=this._tooltip.nativeElement,i=this._showAnimation,r=this._hideAnimation;if(e.classList.remove(t?r:i),e.classList.add(t?i:r),this._isVisible!==t&&(this._isVisible=t,this._changeDetectorRef.markForCheck()),t&&!this._animationsDisabled&&typeof getComputedStyle=="function"){let a=getComputedStyle(e);(a.getPropertyValue("animation-duration")==="0s"||a.getPropertyValue("animation-name")==="none")&&(this._animationsDisabled=true);}t&&this._onShow(),this._animationsDisabled&&(e.classList.add("_mat-animation-noopable"),this._finalizeAnimation(t));}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=Fw({type:n,selectors:[["mat-tooltip-component"]],viewQuery:function(e,i){if(e&1&&Pg(Xt,7),e&2){let r;bC(r=SC())&&(i._tooltip=r.first);}},hostAttrs:["aria-hidden","true"],hostBindings:function(e,i){e&1&&Rg("mouseleave",function(a){return i._handleMouseLeave(a)});},decls:4,vars:5,consts:[["tooltip",""],[1,"mdc-tooltip","mat-mdc-tooltip",3,"animationend"],[1,"mat-mdc-tooltip-surface","mdc-tooltip__surface"]],template:function(e,i){e&1&&(gl(0,"div",1,0),Og("animationend",function(a){return i._handleAnimationEnd(a)}),gl(2,"div",2),QC(3),ml()()),e&2&&(BC(i.tooltipClass),Ug("mdc-tooltip--multiline",i._isMultiline),nI(3),Yg(i.message));},styles:[`.mat-mdc-tooltip {
|
|
2
2
|
position: relative;
|
|
3
3
|
transform: scale(0);
|
|
4
4
|
display: inline-flex;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {an as ce,g,L,ci as me,ap as Hy,av as dt$1,h as Fw,m as ws,Q as QC,n as hl,ai as em,aj as tT,o as Rg,a3 as GI,S as Sg,q as oC,r as cC,t as nI,ak as Jg,a6 as qI,v as bg,x as iC,y as uC,a5 as Dl,aL as Eo,aM as qn,aO as wt$1,az as Kt,aW as w,cj as Pn,ce as xb,c8 as eb,af as Eg,ag as mT,c9 as Ff,ck as Pf,ch as Ng,M as MC,T as Tg,ad as Hg,b$ as BC,A as Ug,C as Pg,D as bC,H as SC,aJ as Tr,aG as fe,cl as be,p as pe,l as le,bU as kd,b9 as T,b8 as B,be as A,b7 as u,bd as h,cm as M,e as O,ba as v,bb as m,d as b,cn as F,f,V,bc as R,co as H,cp as K,ca as _e,Y as x,Z as z$1,_ as Ue,am as Wm,k as Gn,j as pr,a0 as jt,a2 as Nt,a1 as Vt,b0 as Qg,ac as EC}from'./main-
|
|
1
|
+
import {an as ce,g,L,ci as me,ap as Hy,av as dt$1,h as Fw,m as ws,Q as QC,n as hl,ai as em,aj as tT,o as Rg,a3 as GI,S as Sg,q as oC,r as cC,t as nI,ak as Jg,a6 as qI,v as bg,x as iC,y as uC,a5 as Dl,aL as Eo,aM as qn,aO as wt$1,az as Kt,aW as w,cj as Pn,ce as xb,c8 as eb,af as Eg,ag as mT,c9 as Ff,ck as Pf,ch as Ng,M as MC,T as Tg,ad as Hg,b$ as BC,A as Ug,C as Pg,D as bC,H as SC,aJ as Tr,aG as fe,cl as be,p as pe,l as le,bU as kd,b9 as T,b8 as B,be as A,b7 as u,bd as h,cm as M,e as O,ba as v,bb as m,d as b,cn as F,f,V,bc as R,co as H,cp as K,ca as _e,Y as x,Z as z$1,_ as Ue,am as Wm,k as Gn,j as pr,a0 as jt,a2 as Nt,a1 as Vt,b0 as Qg,ac as EC}from'./main-LBRSRTYI.js';import {s as se}from'./chunk-CpZK7G-Q.js';import {t as ti,Q as Qn,e as ei,Y as Ye$1,h as _n,A as At,m as mn,Z as Zn,c as cn,w as wt}from'./chunk-BYyTBqh4.js';var Xe=["determinateSpinner"];function et(c,e){if(c&1&&(Ff(),ws(0,"svg",11),Sg(1,"circle",12),hl()),c&2){let t=EC();Tg("viewBox",t._viewBox()),nI(),Hg("stroke-dasharray",t._strokeCircumference(),"px")("stroke-dashoffset",t._strokeCircumference()/2,"px")("stroke-width",t._circleStrokeWidth(),"%"),Tg("r",t._circleRadius());}}var tt=new w("mat-progress-spinner-default-options",{providedIn:"root",factory:()=>({diameter:qe})}),qe=100,nt=10,yt=(()=>{class c{_elementRef=g(Kt);_noopAnimations;get color(){return this._color||this._defaultColor}set color(t){this._color=t;}_color;_defaultColor="primary";_determinateCircle;constructor(){let t=g(tt),n=Pn(),i=this._elementRef.nativeElement;this._noopAnimations=n==="di-disabled"&&!!t&&!t._forceAnimations,this.mode=i.nodeName.toLowerCase()==="mat-spinner"?"indeterminate":"determinate",!this._noopAnimations&&n==="reduced-motion"&&i.classList.add("mat-progress-spinner-reduced-motion"),t&&(t.color&&(this.color=this._defaultColor=t.color),t.diameter&&(this.diameter=t.diameter),t.strokeWidth&&(this.strokeWidth=t.strokeWidth));}mode;get value(){return this.mode==="determinate"?this._value:0}set value(t){this._value=Math.max(0,Math.min(100,t||0));}_value=0;get diameter(){return this._diameter}set diameter(t){this._diameter=t||0;}_diameter=qe;get strokeWidth(){return this._strokeWidth??this.diameter/10}set strokeWidth(t){this._strokeWidth=t||0;}_strokeWidth;_circleRadius(){return (this.diameter-nt)/2}_viewBox(){let t=this._circleRadius()*2+this.strokeWidth;return `0 0 ${t} ${t}`}_strokeCircumference(){return 2*Math.PI*this._circleRadius()}_strokeDashOffset(){return this.mode==="determinate"?this._strokeCircumference()*(100-this._value)/100:null}_circleStrokeWidth(){return this.strokeWidth/this.diameter*100}static \u0275fac=function(n){return new(n||c)};static \u0275cmp=Fw({type:c,selectors:[["mat-progress-spinner"],["mat-spinner"]],viewQuery:function(n,i){if(n&1&&Pg(Xe,5),n&2){let o;bC(o=SC())&&(i._determinateCircle=o.first);}},hostAttrs:["role","progressbar","tabindex","-1",1,"mat-mdc-progress-spinner","mdc-circular-progress"],hostVars:18,hostBindings:function(n,i){n&2&&(Tg("aria-valuemin",0)("aria-valuemax",100)("aria-valuenow",i.mode==="determinate"?i.value:null)("mode",i.mode),BC("mat-"+i.color),Hg("width",i.diameter,"px")("height",i.diameter,"px")("--mat-progress-spinner-size",i.diameter+"px")("--mat-progress-spinner-active-indicator-width",i.diameter+"px"),Ug("_mat-animation-noopable",i._noopAnimations)("mdc-circular-progress--indeterminate",i.mode==="indeterminate"));},inputs:{color:"color",mode:"mode",value:[2,"value","value",eb],diameter:[2,"diameter","diameter",eb],strokeWidth:[2,"strokeWidth","strokeWidth",eb]},exportAs:["matProgressSpinner"],decls:14,vars:11,consts:[["circle",""],["determinateSpinner",""],["aria-hidden","true",1,"mdc-circular-progress__determinate-container"],["xmlns","http://www.w3.org/2000/svg","focusable","false",1,"mdc-circular-progress__determinate-circle-graphic"],["cx","50%","cy","50%",1,"mdc-circular-progress__determinate-circle"],["aria-hidden","true",1,"mdc-circular-progress__indeterminate-container"],[1,"mdc-circular-progress__spinner-layer"],[1,"mdc-circular-progress__circle-clipper","mdc-circular-progress__circle-left"],[3,"ngTemplateOutlet"],[1,"mdc-circular-progress__gap-patch"],[1,"mdc-circular-progress__circle-clipper","mdc-circular-progress__circle-right"],["xmlns","http://www.w3.org/2000/svg","focusable","false",1,"mdc-circular-progress__indeterminate-circle-graphic"],["cx","50%","cy","50%"]],template:function(n,i){if(n&1&&(Eg(0,et,2,8,"ng-template",null,0,mT),ws(2,"div",2,1),Ff(),ws(4,"svg",3),Sg(5,"circle",4),hl()(),Pf(),ws(6,"div",5)(7,"div",6)(8,"div",7),Ng(9,8),hl(),ws(10,"div",9),Ng(11,8),hl(),ws(12,"div",10),Ng(13,8),hl()()()),n&2){let o=MC(1);nI(4),Tg("viewBox",i._viewBox()),nI(),Hg("stroke-dasharray",i._strokeCircumference(),"px")("stroke-dashoffset",i._strokeDashOffset(),"px")("stroke-width",i._circleStrokeWidth(),"%"),Tg("r",i._circleRadius()),nI(4),bg("ngTemplateOutlet",o),nI(2),bg("ngTemplateOutlet",o),nI(2),bg("ngTemplateOutlet",o);}},dependencies:[xb],styles:[`.mat-mdc-progress-spinner {
|
|
2
2
|
--mat-progress-spinner-animation-multiplier: 1;
|
|
3
3
|
display: block;
|
|
4
4
|
overflow: hidden;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import {p}from'./chunk-
|
|
1
|
+
import {p}from'./chunk-R-GmZrHu.js';import {g,ao as V,I as fy,d4 as y,h as Fw,aw as gl,Q as QC,ax as ml,t as nI,a8 as Yg}from'./main-LBRSRTYI.js';import'./chunk-ClSDInQq.js';import'./chunk-BaO2vi_O.js';import'./chunk-DjMtxVWg.js';import'./chunk-BYyTBqh4.js';var A=class r{route=g(V);http=g(fy);config=g(y);message="Authentication in progress\u2026";ngOnInit(){let e=this.route.snapshot.queryParamMap.get("code"),t=this.route.snapshot.queryParamMap.get("state"),o=this.route.snapshot.queryParamMap.get("error"),i=this.route.snapshot.queryParamMap.get("error_description");if(o){console.warn("[AgentOS OAuth Callback] OAuth error:",o,i),this.notifyParentAndClose({success:false,error:i||o});return}if(!e){console.error("[AgentOS OAuth Callback] Missing authorization code"),this.message="OAuth callback error: missing authorization code.",this.notifyParentAndClose({success:false,error:"Missing authorization code"});return}this.http.post(`${this.config.basePath}/api/oauth/callback`,{code:e,state:t}).subscribe({next:()=>{console.log("[AgentOS OAuth Callback] Backend callback resolved"),this.notifyParentAndClose({success:true});},error:a=>{console.error("[AgentOS OAuth Callback] Backend callback failed:",a),this.notifyParentAndClose({success:false,error:a?.error?.message||a?.message||"Token exchange failed"});}});}notifyParentAndClose(e){if(this.message=e.success?"Authentication complete. You can close this window.":`Authentication failed: ${e.error??"unknown error"}. You can close this window.`,window.opener)try{window.opener.postMessage(e,window.location.origin);}catch(t){console.error("[AgentOS OAuth Callback] postMessage failed:",t),localStorage.setItem(p,JSON.stringify(e));}else console.warn("[AgentOS OAuth Callback] No window.opener \u2014 localStorage fallback"),localStorage.setItem(p,JSON.stringify(e));setTimeout(()=>window.close(),1e3);}static \u0275fac=function(t){return new(t||r)};static \u0275cmp=Fw({type:r,selectors:[["agentos-oauth-callback"]],decls:2,vars:1,consts:[[2,"font-family","sans-serif","padding","2rem","text-align","center"]],template:function(t,o){t&1&&(gl(0,"p",0),QC(1),ml()),t&2&&(nI(),Yg(o.message));},encapsulation:2,changeDetection:1})};export{A as OAuthCallbackComponent};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import {g,G,cb as LB,cc as PB,a as Gi,h as Fw,m as ws,Q as QC,n as hl,q as oC,A as Ug,t as nI,a8 as Yg,x as iC,ac as EC,a9 as gC,o as Rg,v as bg,aa as wf,ab as Cf}from'./main-
|
|
1
|
+
import {g,G,cb as LB,cc as PB,a as Gi,h as Fw,m as ws,Q as QC,n as hl,q as oC,A as Ug,t as nI,a8 as Yg,x as iC,ac as EC,a9 as gC,o as Rg,v as bg,aa as wf,ab as Cf}from'./main-LBRSRTYI.js';import {Z as Zn,S as Se}from'./chunk-BaO2vi_O.js';function k(t,r){if(t&1&&(ws(0,"span",3),QC(1),hl()),t&2){let e=EC();nI(),Yg(e.prompt().description);}}function S(t,r){if(t&1){let e=gC();ws(0,"span",6),QC(1,"Delete?"),hl(),ws(2,"ds-icon-button",7),Rg("action",function(){wf(e);let m=EC();return Cf(m.onDeleteConfirmed())}),hl(),ws(3,"ds-icon-button",8),Rg("action",function(){wf(e);let m=EC();return Cf(m.onDeleteCancelled())}),hl();}}function E(t,r){if(t&1){let e=gC();ws(0,"ds-kebab-menu",9),Rg("itemSelected",function(m){wf(e);let O=EC();return Cf(O.onMenuAction(m))}),hl();}if(t&2){let e=EC();bg("items",e.menuItems);}}var I=class t{router=g(G);prompt=LB.required();namespaceId=LB(void 0);platformMode=LB(false);readOnly=LB(false);deleteRequested=PB();pendingDelete=Gi(false);menuItems=[{key:"edit",label:"Edit prompt",icon:"edit"},{key:"delete",label:"Delete prompt",icon:"delete",variant:"danger"}];onMenuAction(r){switch(r){case "edit":this.platformMode()?this.router.navigate(["/agentos","admin","prompts",this.prompt().id,"edit"]):this.router.navigate(["/agentos",this.namespaceId(),"prompts",this.prompt().id,"edit"]);break;case "delete":this.pendingDelete.set(true);break}}onDeleteConfirmed(){this.pendingDelete.set(false),this.deleteRequested.emit(this.prompt());}onDeleteCancelled(){this.pendingDelete.set(false);}static \u0275fac=function(e){return new(e||t)};static \u0275cmp=Fw({type:t,selectors:[["agentos-prompt-item"]],inputs:{prompt:[1,"prompt"],namespaceId:[1,"namespaceId"],platformMode:[1,"platformMode"],readOnly:[1,"readOnly"]},outputs:{deleteRequested:"deleteRequested"},decls:8,vars:5,consts:[["role","listitem",1,"prompt-item"],[1,"prompt-item__body"],[1,"prompt-item__name"],[1,"prompt-item__description"],[1,"prompt-item__actions"],[3,"items"],[1,"prompt-item__confirm-label"],["icon","check","variant","danger","title","Confirm deletion",3,"action"],["icon","close","title","Cancel deletion",3,"action"],[3,"itemSelected","items"]],template:function(e,o){e&1&&(ws(0,"div",0)(1,"div",1)(2,"span",2),QC(3),hl(),oC(4,k,2,1,"span",3),hl(),ws(5,"div",4),oC(6,S,4,0)(7,E,1,1,"ds-kebab-menu",5),hl()()),e&2&&(Ug("prompt-item--pending-delete",o.pendingDelete()),nI(3),Yg(o.prompt().name),nI(),iC(o.prompt().description?4:-1),nI(2),iC(o.pendingDelete()?6:o.readOnly()?-1:7));},dependencies:[Zn,Se],styles:[".prompt-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:.75rem 1rem;border-radius:10px;border:1px solid var(--color-border, rgba(0, 0, 0, .08));background:var(--glass-bg, rgba(255, 255, 255, .72));-webkit-backdrop-filter:var(--glass-backdrop-blur, blur(20px));backdrop-filter:var(--glass-backdrop-blur, blur(20px));transition:background .15s ease,border-color .15s ease}.prompt-item[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover, rgba(0, 0, 0, .04));border-color:var(--color-primary, #007aff)}.prompt-item__body[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;gap:.2rem;min-width:0}.prompt-item__name[_ngcontent-%COMP%]{font-size:.95rem;font-weight:500;color:var(--color-text, #1d1d1f);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.prompt-item__description[_ngcontent-%COMP%]{font-size:.75rem;color:var(--color-text-secondary, #6e6e73);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.prompt-item__actions[_ngcontent-%COMP%]{flex-shrink:0;display:flex;align-items:center;gap:.125rem;opacity:0;transition:opacity .15s ease}.prompt-item[_ngcontent-%COMP%]:hover .prompt-item__actions[_ngcontent-%COMP%], .prompt-item[_ngcontent-%COMP%]:focus-within .prompt-item__actions[_ngcontent-%COMP%], .prompt-item--pending-delete[_ngcontent-%COMP%] .prompt-item__actions[_ngcontent-%COMP%]{opacity:1}.prompt-item__confirm-label[_ngcontent-%COMP%]{font-size:.8rem;font-weight:500;color:var(--color-error, #ff3b30);margin-right:.25rem;white-space:nowrap}"]})};export{I};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import {m}from'./chunk-BY7uKZAo.js';import {g,ao as V,G,w as we,d8 as B,a as Gi,c as U,a7 as va,X as br,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,a5 as Dl,a8 as Yg,x as iC,a9 as gC,S as Sg,a3 as GI,r as cC,bo as sC,ac as EC,v as bg,A as Ug,a6 as qI,y as uC,aa as wf,ab as Cf}from'./main-5PAOSHSM.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,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-kvCfAm7Z.js';import'./chunk-CtkiOUdU.js';import'./chunk-S8F5_Te_.js';var ne=(i,t)=>t.id;function ie(i,t){i&1&&(ws(0,"p",5),QC(1,"Loading\u2026"),hl());}function ae(i,t){i&1&&(ws(0,"span",12),QC(1,"Name is required."),hl());}function le(i,t){if(i&1&&(ws(0,"p",32),QC(1),hl(),ws(2,"span",26),QC(3,"Agent Config cannot be changed after creation."),hl()),i&2){let e=EC(3);nI(),Yg(e.resolveAgentConfigName(e.agentConfigIdControl.value));}}function me(i,t){if(i&1&&(ws(0,"option",34),QC(1),hl()),i&2){let e=t.$implicit;bg("ngValue",e.id),nI(),Yg(e.name);}}function pe(i,t){if(i&1&&(ws(0,"select",33)(1,"option",34),QC(2,"\u2014 None \u2014"),hl(),cC(3,me,2,2,"option",34,ne),hl(),GI(),ws(5,"span",26),QC(6,"Optional. Links this prompt to an agent as a starter. Immutable after creation."),hl()),i&2){let e=EC(3);bg("formControl",e.agentConfigIdControl),qI(),nI(),bg("ngValue",null),nI(2),uC(e.availableAgentConfigs());}}function de(i,t){if(i&1&&(ws(0,"div",8)(1,"label",31),QC(2,"Agent Config"),hl(),oC(3,le,4,1)(4,pe,7,2),hl()),i&2){let e=EC(2);nI(3),iC(e.isEditMode()&&e.agentConfigIdControl.value?3:e.isEditMode()?-1:4);}}function ce(i,t){i&1&&(ws(0,"p",19),QC(1,"No parameters defined."),hl());}function se(i,t){i&1&&(ws(0,"span",12),QC(1,"Parameter name is required."),hl());}function _e(i,t){if(i&1){let e=gC();ws(0,"div",20)(1,"div",35)(2,"div",36)(3,"label",37),QC(4,"Name "),ws(5,"span",10),QC(6,"*"),hl()(),Sg(7,"input",38),GI(),oC(8,se,2,0,"span",12),hl(),ws(9,"div",36)(10,"label",37),QC(11,"Description"),hl(),Sg(12,"input",39),GI(),hl(),ws(13,"div",36)(14,"label",37),QC(15,"Default value"),hl(),Sg(16,"input",40),GI(),hl()(),ws(17,"button",41),Rg("click",function(){let m=wf(e).$index,d=EC(2);return Cf(d.removeParameter(m))}),QC(18," \xD7 "),hl()();}if(i&2){let e=t.$implicit,l=t.$index;bg("formGroupName",l),nI(3),bg("for","param-name-"+l),nI(4),Ug("prompt-form__input--invalid",e.controls.name.invalid&&e.controls.name.touched),bg("id","param-name-"+l),qI(),nI(),iC(e.controls.name.invalid&&e.controls.name.touched?8:-1),nI(2),bg("for","param-desc-"+l),nI(2),bg("id","param-desc-"+l),qI(),nI(2),bg("for","param-default-"+l),nI(2),bg("id","param-default-"+l),qI();}}function fe(i,t){i&1&&(ws(0,"span",12),QC(1,"Content entry must not be blank."),hl());}function ue(i,t){if(i&1){let e=gC();ws(0,"div",22)(1,"span",42),QC(2),hl(),ws(3,"div",43),Sg(4,"textarea",44),GI(),oC(5,fe,2,0,"span",12),hl(),ws(6,"button",45),Rg("click",function(){let m=wf(e).$index,d=EC(2);return Cf(d.removeContentEntry(m))}),QC(7," \xD7 "),hl()();}if(i&2){let e=t.$implicit,l=t.$index,m=EC(2);nI(2),Yg(l+1),nI(2),Ug("prompt-form__textarea--invalid",e.invalid&&e.touched),bg("formControlName",l),qI(),nI(),iC(e.invalid&&e.touched?5:-1),nI(),bg("disabled",m.contentArray.length===1);}}function ge(i,t){if(i&1&&(ws(0,"p",23),QC(1),hl()),i&2){let e=EC(2);nI(),Yg(e.errorMessage());}}function Ce(i,t){i&1&&(ws(0,"span",12),QC(1,"Invalid JSON."),hl());}function xe(i,t){if(i&1){let e=gC();ws(0,"button",46),Rg("click",function(){wf(e);let m=EC(2);return Cf(m.exportYaml())}),QC(1),hl();}if(i&2){let e=EC(2);bg("disabled",e.isExporting()),nI(),Dl(" ",e.isExporting()?"Exporting\u2026":"Export as YAML"," ");}}function ve(i,t){if(i&1){let e=gC();ws(0,"form",7),Rg("ngSubmit",function(){wf(e);let m=EC();return Cf(m.submit())}),ws(1,"div",8)(2,"label",9),QC(3,"Name "),ws(4,"span",10),QC(5,"*"),hl()(),Sg(6,"input",11),GI(),oC(7,ae,2,0,"span",12),hl(),ws(8,"div",8)(9,"label",13),QC(10,"Description"),hl(),Sg(11,"input",14),GI(),hl(),oC(12,de,5,1,"div",8),ws(13,"fieldset",15)(14,"legend",16),QC(15," Parameters "),ws(16,"span",17),QC(17,"Named placeholders used in content"),hl()(),ws(18,"p",18),QC(19," Each parameter must have a name and a default value. Use "),ws(20,"code"),QC(21),hl(),QC(22," in content entries to reference them. "),hl(),oC(23,ce,2,0,"p",19),cC(24,_e,19,10,"div",20,sC),ws(26,"button",21),Rg("click",function(){wf(e);let m=EC();return Cf(m.addParameter())}),QC(27,"+ Add parameter"),hl()(),ws(28,"fieldset",15)(29,"legend",16),QC(30," Content "),ws(31,"span",10),QC(32,"*"),hl(),ws(33,"span",17),QC(34,"Ordered list of text commands"),hl()(),ws(35,"p",18),QC(36," Each content entry is a command. Use "),ws(37,"code"),QC(38,"@AgentName"),hl(),QC(39," to target an agent, "),ws(40,"code"),QC(41,"/promptName param1 param2"),hl(),QC(42," to call another prompt, and "),ws(43,"code"),QC(44),hl(),QC(45," for parameter placeholders. "),hl(),cC(46,ue,8,6,"div",22,sC),ws(48,"button",21),Rg("click",function(){wf(e);let m=EC();return Cf(m.addContentEntry())}),QC(49,"+ Add content entry"),hl()(),oC(50,ge,2,1,"p",23),ws(51,"div",8)(52,"label",24),QC(53,"External Metadata"),hl(),Sg(54,"textarea",25),GI(),oC(55,Ce,2,0,"span",12),ws(56,"span",26),QC(57,"Optional. Opaque JSON object stored as-is. Leave empty to clear."),hl()(),ws(58,"div",27)(59,"button",28),QC(60),hl(),oC(61,xe,2,2,"button",29),ws(62,"button",30),Rg("click",function(){wf(e);let m=EC();return Cf(m.cancel())}),QC(63,"Cancel"),hl()()();}if(i&2){let e=EC();bg("formGroup",e.form),nI(6),Ug("prompt-form__input--invalid",e.nameControl.invalid&&e.nameControl.touched),bg("formControl",e.nameControl),qI(),nI(),iC(e.nameControl.invalid&&e.nameControl.touched?7:-1),nI(4),bg("formControl",e.descriptionControl),qI(),nI(),iC(e.availableAgentConfigs().length>0?12:-1),nI(),bg("formArrayName","parameters"),nI(8),Yg(e.paramPlaceholderSyntax),nI(2),iC(e.parametersArray.length===0?23:-1),nI(),uC(e.parametersArray.controls),nI(4),bg("formArrayName","content"),nI(16),Yg(e.paramPlaceholderSyntax),nI(2),uC(e.contentArray.controls),nI(4),iC(e.errorMessage()?50:-1),nI(4),bg("formControl",e.externalMetadataJsonControl),qI(),nI(),iC(e.externalMetadataJsonControl.invalid&&e.externalMetadataJsonControl.touched?55:-1),nI(4),bg("disabled",e.form.invalid||e.isSubmitting()),nI(),Dl(" ",e.isEditMode()?"Save changes":"Create"," "),nI(),iC(e.isEditMode()?61:-1);}}var re=class i{route=g(V);router=g(G);destroyRef=g(we);promptState=g(m);agentConfigController=g(B);namespaceId=this.route.snapshot.params.namespaceId;isPlatformMode=!this.namespaceId;form=new z({name:new _t("",{nonNullable:true,validators:[_e$1.required,_e$1.minLength(1)]}),description:new _t(null),agentConfigId:new _t(null),externalMetadataJson:new _t("",{nonNullable:true,validators:[be]}),content:new ze([this.createContentControl()],{validators:[_e$1.required]}),parameters:new ze([])});get nameControl(){return this.form.controls.name}get descriptionControl(){return this.form.controls.description}get agentConfigIdControl(){return this.form.controls.agentConfigId}get externalMetadataJsonControl(){return this.form.controls.externalMetadataJson}get contentArray(){return this.form.controls.content}get parametersArray(){return this.form.controls.parameters}isEditMode=Gi(false);isSubmitting=Gi(false);isLoading=Gi(false);isExporting=Gi(false);errorMessage=Gi(null);paramPlaceholderSyntax="{{paramName}}";agentConfigs=Gi([]);availableAgentConfigs=this.agentConfigs.asReadonly();existingPrompt=null;ngOnInit(){let t=this.route.snapshot.paramMap.get("promptId");t&&(this.isEditMode.set(true),this.loadPrompt(t)),this.isPlatformMode?this.loadPlatformAgentConfigs():this.namespaceId&&this.loadAgentConfigs(this.namespaceId);}loadPrompt(t){this.isLoading.set(true),this.promptState.getById(t).pipe(U(this.destroyRef)).subscribe({next:e=>{this.existingPrompt=e,this.hydrateForm(e),this.isLoading.set(false);},error:()=>{this.isLoading.set(false),this.navigateBack();}});}loadAgentConfigs(t){this.agentConfigController.listByParentAgentConfig(t).pipe(U(this.destroyRef),va(()=>br([]))).subscribe(e=>this.agentConfigs.set(e));}loadPlatformAgentConfigs(){this.agentConfigController.listPlatformAgentsAgentConfig().pipe(U(this.destroyRef),va(()=>br([]))).subscribe(t=>this.agentConfigs.set(t));}hydrateForm(t){this.nameControl.setValue(t.name),this.descriptionControl.setValue(t.description??null),this.agentConfigIdControl.setValue(t.agentConfigId??null),this.contentArray.clear(),(t.content.length>0?t.content:[""]).forEach(l=>this.contentArray.push(this.createContentControl(l))),this.parametersArray.clear(),(t.parameters??[]).forEach(l=>this.parametersArray.push(this.createParameterGroup(l))),this.externalMetadataJsonControl.setValue(t.externalMetadata?JSON.stringify(t.externalMetadata,null,2):"");}resolveAgentConfigName(t){return this.agentConfigs().find(e=>e.id===t)?.name??t}createContentControl(t=""){return new _t(t,{nonNullable:true,validators:[_e$1.required,_e$1.pattern(/\S/)]})}addContentEntry(){this.contentArray.push(this.createContentControl());}removeContentEntry(t){this.contentArray.length>1&&this.contentArray.removeAt(t);}createParameterGroup(t){return new z({name:new _t(t?.name??"",{nonNullable:true,validators:[_e$1.required,_e$1.minLength(1)]}),description:new _t(t?.description??null),defaultValue:new _t(t?.defaultValue??"",{nonNullable:true,validators:[_e$1.required]})})}addParameter(){this.parametersArray.push(this.createParameterGroup());}removeParameter(t){this.parametersArray.removeAt(t);}submit(){if(this.form.invalid||this.isSubmitting())return;this.isSubmitting.set(true);let t=this.isEditMode()&&!!this.existingPrompt?.id,e=z$1(P({},this.existingPrompt??{}),{namespaceId:this.namespaceId,sourceLanguage:this.existingPrompt?.sourceLanguage??"en",name:this.nameControl.value.trim(),description:this.descriptionControl.value?.trim()||void 0,content:this.contentArray.controls.map(d=>d.value.trim()),parameters:this.parametersArray.controls.map(d=>({name:d.controls.name.value.trim(),description:d.controls.description.value?.trim()||void 0,defaultValue:d.controls.defaultValue.value.trim()}))});t||(e.agentConfigId=this.agentConfigIdControl.value||null);let l=this.externalMetadataJsonControl.value.trim();e.externalMetadata=l?JSON.parse(l):null;let m=t?this.promptState.update(this.existingPrompt.id,e):this.promptState.create(e);this.errorMessage.set(null),m.pipe(U(this.destroyRef)).subscribe({next:()=>this.navigateBack(),error:d=>{this.isSubmitting.set(false),d.status===409?this.errorMessage.set(`A prompt named "${e.name}" already exists in this scope.`):d.status===400?this.errorMessage.set(d.error?.message??"Invalid prompt data."):this.errorMessage.set("An unexpected error occurred. Please try again.");}});}exportYaml(){let t=this.existingPrompt?.id;!t||this.isExporting()||(this.isExporting.set(true),this.promptState.exportAsYaml(t).pipe(U(this.destroyRef)).subscribe({next:e=>{let l=new Blob([e],{type:"application/yaml"}),m=URL.createObjectURL(l),d=document.createElement("a");d.href=m,d.download=`${this.existingPrompt?.name??"prompt"}.yaml`,d.click(),URL.revokeObjectURL(m),this.isExporting.set(false);},error:()=>this.isExporting.set(false)}));}cancel(){this.navigateBack();}navigateBack(){this.isPlatformMode?this.router.navigate(["/agentos","admin","prompts"]):this.router.navigate(["/agentos",this.namespaceId,"prompts"]);}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=Fw({type:i,selectors:[["agentos-prompt-form"]],decls:10,vars:3,consts:[[1,"prompt-form"],[1,"prompt-form__header"],["type","button","title","Back to prompts",1,"prompt-form__back",3,"click"],[1,"prompt-form__back-icon"],[1,"prompt-form__title"],[1,"prompt-form__loading"],[1,"prompt-form__form",3,"formGroup"],[1,"prompt-form__form",3,"ngSubmit","formGroup"],[1,"prompt-form__field"],["for","prompt-name",1,"prompt-form__label"],["aria-hidden","true"],["id","prompt-name","type","text","placeholder","e.g. Summarise meeting notes","autocomplete","off",1,"prompt-form__input",3,"formControl"],[1,"prompt-form__field-error"],["for","prompt-description",1,"prompt-form__label"],["id","prompt-description","type","text","placeholder","Optional \u2014 short description of this prompt","autocomplete","off",1,"prompt-form__input",3,"formControl"],[1,"prompt-form__section",3,"formArrayName"],[1,"prompt-form__label"],[1,"prompt-form__label-hint"],[1,"prompt-form__section-hint"],[1,"prompt-form__empty-hint"],[1,"prompt-form__param-row",3,"formGroupName"],["type","button",1,"prompt-form__add-btn",3,"click"],[1,"prompt-form__content-row"],[1,"prompt-form__error"],["for","prompt-external-metadata",1,"prompt-form__label"],["id","prompt-external-metadata","rows","6","placeholder",'{ "key": "value" }',"spellcheck","false","autocomplete","off",1,"prompt-form__textarea","prompt-form__textarea--code",3,"formControl"],[1,"prompt-form__field-hint"],[1,"prompt-form__actions"],["type","submit",1,"prompt-form__btn","prompt-form__btn--primary",3,"disabled"],["type","button",1,"prompt-form__btn","prompt-form__btn--export",3,"disabled"],["type","button",1,"prompt-form__btn",3,"click"],["for","prompt-agent-config",1,"prompt-form__label"],[1,"prompt-form__readonly-value"],["id","prompt-agent-config",1,"prompt-form__select",3,"formControl"],[3,"ngValue"],[1,"prompt-form__param-fields"],[1,"prompt-form__field","prompt-form__field--inline"],[1,"prompt-form__label",3,"for"],["type","text","placeholder","e.g. language","formControlName","name","autocomplete","off",1,"prompt-form__input",3,"id"],["type","text","placeholder","Optional","formControlName","description","autocomplete","off",1,"prompt-form__input",3,"id"],["type","text","placeholder","e.g. English","formControlName","defaultValue","autocomplete","off",1,"prompt-form__input",3,"id"],["type","button","title","Remove this parameter",1,"prompt-form__remove-btn",3,"click"],[1,"prompt-form__content-index"],[1,"prompt-form__content-field"],["rows","4","placeholder","Enter a command\u2026",1,"prompt-form__textarea",3,"formControlName"],["type","button","title","Remove this entry",1,"prompt-form__remove-btn",3,"click","disabled"],["type","button",1,"prompt-form__btn","prompt-form__btn--export",3,"click","disabled"]],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),hl(),ws(6,"h1",4),QC(7),hl()(),oC(8,ie,2,0,"p",5)(9,ve,64,18,"form",6),hl()),e&2&&(nI(5),Dl(" ",l.isPlatformMode?"Platform prompts":"Prompts"," "),nI(2),Yg(l.isEditMode()?"Edit prompt":"New prompt"),nI(),iC(l.isLoading()?8:9));},dependencies:[ni,Jn,Qn,ei,Ye,At,Zn,Xn,Cn,En,An,Ct,Vt],styles:[".prompt-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2rem;max-width:560px;margin:0 auto;padding:2rem 1rem}.prompt-form__header[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.prompt-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)}.prompt-form__back[_ngcontent-%COMP%]:hover{text-decoration:underline}.prompt-form__back-icon[_ngcontent-%COMP%]{font-size:1rem;line-height:1}.prompt-form__title[_ngcontent-%COMP%]{margin:0;font-size:1.5rem;font-weight:700;color:var(--color-text);letter-spacing:-.02em}.prompt-form__loading[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:.9rem;margin:0}.prompt-form__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1.25rem}.prompt-form__field[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.375rem}.prompt-form__field--inline[_ngcontent-%COMP%]{flex:1}.prompt-form__label[_ngcontent-%COMP%]{font-size:.875rem;font-weight:500;color:var(--color-text)}.prompt-form__label-hint[_ngcontent-%COMP%]{font-weight:400;color:var(--color-text-secondary);margin-left:.375rem}.prompt-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;cursor:pointer;appearance:auto;transition:border-color .15s ease}.prompt-form__select[_ngcontent-%COMP%]:focus{border-color:var(--color-accent)}.prompt-form__field-hint[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-secondary);line-height:1.4}.prompt-form__readonly-value[_ngcontent-%COMP%]{margin:0;padding:.5rem .875rem;border-radius:0;background:var(--color-bg-hover);border:1px solid var(--color-divider);color:var(--color-text);font-size:.9375rem}.prompt-form__input[_ngcontent-%COMP%], .prompt-form__textarea[_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}.prompt-form__input[_ngcontent-%COMP%]:focus, .prompt-form__textarea[_ngcontent-%COMP%]:focus{border-color:var(--color-accent)}.prompt-form__input[_ngcontent-%COMP%]::placeholder, .prompt-form__textarea[_ngcontent-%COMP%]::placeholder{color:var(--color-neutral-500)}.prompt-form__textarea[_ngcontent-%COMP%]{resize:vertical;min-height:100px;line-height:1.5}.prompt-form__textarea--code[_ngcontent-%COMP%]{font-family:monospace;font-size:.85rem;resize:vertical}.prompt-form__section[_ngcontent-%COMP%]{border:1px solid var(--color-divider);border-radius:0;padding:1rem;margin:0;display:flex;flex-direction:column;gap:.75rem}.prompt-form__section-hint[_ngcontent-%COMP%]{margin:0;font-size:.8rem;color:var(--color-text-secondary);line-height:1.4}.prompt-form__empty-hint[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-text-secondary);font-style:italic}.prompt-form__content-row[_ngcontent-%COMP%]{display:flex;gap:.5rem;align-items:flex-start}.prompt-form__content-field[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;gap:.25rem}.prompt-form__content-index[_ngcontent-%COMP%]{flex-shrink:0;width:1.5rem;padding-top:.6rem;font-size:.8rem;font-weight:600;color:var(--color-text-secondary);text-align:right;-webkit-user-select:none;user-select:none}.prompt-form__param-row[_ngcontent-%COMP%]{display:flex;gap:.5rem;align-items:flex-end;padding:.75rem;border-radius:0;background:var(--color-bg-hover)}.prompt-form__param-fields[_ngcontent-%COMP%]{flex:1;display:flex;gap:.75rem;flex-wrap:wrap}.prompt-form__add-btn[_ngcontent-%COMP%]{align-self:flex-start;padding:.4rem .875rem;border-radius:0;border:1px solid var(--color-divider);background:transparent;color:var(--color-accent);font-size:.875rem;font-family:inherit;cursor:pointer;transition:background .15s ease,border-color .15s ease}.prompt-form__add-btn[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover);border-color:var(--color-accent)}.prompt-form__remove-btn[_ngcontent-%COMP%]{flex-shrink:0;width:1.75rem;height:1.75rem;display:flex;align-items:center;justify-content:center;border-radius:0;border:1px solid transparent;background:transparent;color:var(--color-neutral-500);font-size:1rem;line-height:1;cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease}.prompt-form__remove-btn[_ngcontent-%COMP%]:hover:not(:disabled){background:color-mix(in srgb,var(--red) 10%,transparent);color:var(--red);border-color:var(--red)}.prompt-form__remove-btn[_ngcontent-%COMP%]:disabled{opacity:.3;cursor:not-allowed}.prompt-form__error[_ngcontent-%COMP%]{margin:0;padding:.625rem .875rem;border-radius:0;background:color-mix(in srgb,var(--red) 10%,transparent);border:1px solid var(--red);color:var(--red);font-size:.875rem;line-height:1.4}.prompt-form__field-error[_ngcontent-%COMP%]{font-size:.8rem;color:var(--red);line-height:1.3}.prompt-form__input--invalid[_ngcontent-%COMP%], .prompt-form__textarea--invalid[_ngcontent-%COMP%]{border-color:var(--red)}.prompt-form__input--invalid[_ngcontent-%COMP%]:focus, .prompt-form__textarea--invalid[_ngcontent-%COMP%]:focus{border-color:var(--red)}.prompt-form__actions[_ngcontent-%COMP%]{display:flex;gap:.75rem;padding-top:.5rem}.prompt-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}.prompt-form__btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-bg-hover);border-color:var(--color-neutral-500)}.prompt-form__btn[_ngcontent-%COMP%]:disabled{opacity:.45;cursor:not-allowed}.prompt-form__btn--primary[_ngcontent-%COMP%]{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.prompt-form__btn--primary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-700);border-color:var(--color-accent-700)}.prompt-form__btn--export[_ngcontent-%COMP%]{border-color:var(--color-divider);color:var(--color-text-secondary)}.prompt-form__btn--export[_ngcontent-%COMP%]:hover:not(:disabled){border-color:var(--color-accent);color:var(--color-accent)}"]})};function be(i){let t=i.value?.trim();if(!t)return null;try{return JSON.parse(t),null}catch(e){return {invalidJson:true}}}export{re as PromptFormComponent};
|
|
1
|
+
import {m}from'./chunk-R-GmZrHu.js';import {g,ao as V,G,w as we,d8 as M,a as Gi,c as U,a7 as va,X as br,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,a5 as Dl,a8 as Yg,x as iC,a9 as gC,S as Sg,a3 as GI,r as cC,bo as sC,ac as EC,v as bg,A as Ug,a6 as qI,y as uC,aa as wf,ab as Cf}from'./main-LBRSRTYI.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,Z as Zn,l as Xn,C as Cn,E as En,p as An,q as Ct,V as Vt}from'./chunk-BYyTBqh4.js';import'./chunk-ClSDInQq.js';import'./chunk-BaO2vi_O.js';import'./chunk-DjMtxVWg.js';var ne=(i,t)=>t.id;function ie(i,t){i&1&&(ws(0,"p",5),QC(1,"Loading\u2026"),hl());}function ae(i,t){i&1&&(ws(0,"span",12),QC(1,"Name is required."),hl());}function le(i,t){if(i&1&&(ws(0,"p",32),QC(1),hl(),ws(2,"span",26),QC(3,"Agent Config cannot be changed after creation."),hl()),i&2){let e=EC(3);nI(),Yg(e.resolveAgentConfigName(e.agentConfigIdControl.value));}}function me(i,t){if(i&1&&(ws(0,"option",34),QC(1),hl()),i&2){let e=t.$implicit;bg("ngValue",e.id),nI(),Yg(e.name);}}function pe(i,t){if(i&1&&(ws(0,"select",33)(1,"option",34),QC(2,"\u2014 None \u2014"),hl(),cC(3,me,2,2,"option",34,ne),hl(),GI(),ws(5,"span",26),QC(6,"Optional. Links this prompt to an agent as a starter. Immutable after creation."),hl()),i&2){let e=EC(3);bg("formControl",e.agentConfigIdControl),qI(),nI(),bg("ngValue",null),nI(2),uC(e.availableAgentConfigs());}}function de(i,t){if(i&1&&(ws(0,"div",8)(1,"label",31),QC(2,"Agent Config"),hl(),oC(3,le,4,1)(4,pe,7,2),hl()),i&2){let e=EC(2);nI(3),iC(e.isEditMode()&&e.agentConfigIdControl.value?3:e.isEditMode()?-1:4);}}function ce(i,t){i&1&&(ws(0,"p",19),QC(1,"No parameters defined."),hl());}function se(i,t){i&1&&(ws(0,"span",12),QC(1,"Parameter name is required."),hl());}function _e(i,t){if(i&1){let e=gC();ws(0,"div",20)(1,"div",35)(2,"div",36)(3,"label",37),QC(4,"Name "),ws(5,"span",10),QC(6,"*"),hl()(),Sg(7,"input",38),GI(),oC(8,se,2,0,"span",12),hl(),ws(9,"div",36)(10,"label",37),QC(11,"Description"),hl(),Sg(12,"input",39),GI(),hl(),ws(13,"div",36)(14,"label",37),QC(15,"Default value"),hl(),Sg(16,"input",40),GI(),hl()(),ws(17,"button",41),Rg("click",function(){let m=wf(e).$index,d=EC(2);return Cf(d.removeParameter(m))}),QC(18," \xD7 "),hl()();}if(i&2){let e=t.$implicit,l=t.$index;bg("formGroupName",l),nI(3),bg("for","param-name-"+l),nI(4),Ug("prompt-form__input--invalid",e.controls.name.invalid&&e.controls.name.touched),bg("id","param-name-"+l),qI(),nI(),iC(e.controls.name.invalid&&e.controls.name.touched?8:-1),nI(2),bg("for","param-desc-"+l),nI(2),bg("id","param-desc-"+l),qI(),nI(2),bg("for","param-default-"+l),nI(2),bg("id","param-default-"+l),qI();}}function fe(i,t){i&1&&(ws(0,"span",12),QC(1,"Content entry must not be blank."),hl());}function ue(i,t){if(i&1){let e=gC();ws(0,"div",22)(1,"span",42),QC(2),hl(),ws(3,"div",43),Sg(4,"textarea",44),GI(),oC(5,fe,2,0,"span",12),hl(),ws(6,"button",45),Rg("click",function(){let m=wf(e).$index,d=EC(2);return Cf(d.removeContentEntry(m))}),QC(7," \xD7 "),hl()();}if(i&2){let e=t.$implicit,l=t.$index,m=EC(2);nI(2),Yg(l+1),nI(2),Ug("prompt-form__textarea--invalid",e.invalid&&e.touched),bg("formControlName",l),qI(),nI(),iC(e.invalid&&e.touched?5:-1),nI(),bg("disabled",m.contentArray.length===1);}}function ge(i,t){if(i&1&&(ws(0,"p",23),QC(1),hl()),i&2){let e=EC(2);nI(),Yg(e.errorMessage());}}function Ce(i,t){i&1&&(ws(0,"span",12),QC(1,"Invalid JSON."),hl());}function xe(i,t){if(i&1){let e=gC();ws(0,"button",46),Rg("click",function(){wf(e);let m=EC(2);return Cf(m.exportYaml())}),QC(1),hl();}if(i&2){let e=EC(2);bg("disabled",e.isExporting()),nI(),Dl(" ",e.isExporting()?"Exporting\u2026":"Export as YAML"," ");}}function ve(i,t){if(i&1){let e=gC();ws(0,"form",7),Rg("ngSubmit",function(){wf(e);let m=EC();return Cf(m.submit())}),ws(1,"div",8)(2,"label",9),QC(3,"Name "),ws(4,"span",10),QC(5,"*"),hl()(),Sg(6,"input",11),GI(),oC(7,ae,2,0,"span",12),hl(),ws(8,"div",8)(9,"label",13),QC(10,"Description"),hl(),Sg(11,"input",14),GI(),hl(),oC(12,de,5,1,"div",8),ws(13,"fieldset",15)(14,"legend",16),QC(15," Parameters "),ws(16,"span",17),QC(17,"Named placeholders used in content"),hl()(),ws(18,"p",18),QC(19," Each parameter must have a name and a default value. Use "),ws(20,"code"),QC(21),hl(),QC(22," in content entries to reference them. "),hl(),oC(23,ce,2,0,"p",19),cC(24,_e,19,10,"div",20,sC),ws(26,"button",21),Rg("click",function(){wf(e);let m=EC();return Cf(m.addParameter())}),QC(27,"+ Add parameter"),hl()(),ws(28,"fieldset",15)(29,"legend",16),QC(30," Content "),ws(31,"span",10),QC(32,"*"),hl(),ws(33,"span",17),QC(34,"Ordered list of text commands"),hl()(),ws(35,"p",18),QC(36," Each content entry is a command. Use "),ws(37,"code"),QC(38,"@AgentName"),hl(),QC(39," to target an agent, "),ws(40,"code"),QC(41,"/promptName param1 param2"),hl(),QC(42," to call another prompt, and "),ws(43,"code"),QC(44),hl(),QC(45," for parameter placeholders. "),hl(),cC(46,ue,8,6,"div",22,sC),ws(48,"button",21),Rg("click",function(){wf(e);let m=EC();return Cf(m.addContentEntry())}),QC(49,"+ Add content entry"),hl()(),oC(50,ge,2,1,"p",23),ws(51,"div",8)(52,"label",24),QC(53,"External Metadata"),hl(),Sg(54,"textarea",25),GI(),oC(55,Ce,2,0,"span",12),ws(56,"span",26),QC(57,"Optional. Opaque JSON object stored as-is. Leave empty to clear."),hl()(),ws(58,"div",27)(59,"button",28),QC(60),hl(),oC(61,xe,2,2,"button",29),ws(62,"button",30),Rg("click",function(){wf(e);let m=EC();return Cf(m.cancel())}),QC(63,"Cancel"),hl()()();}if(i&2){let e=EC();bg("formGroup",e.form),nI(6),Ug("prompt-form__input--invalid",e.nameControl.invalid&&e.nameControl.touched),bg("formControl",e.nameControl),qI(),nI(),iC(e.nameControl.invalid&&e.nameControl.touched?7:-1),nI(4),bg("formControl",e.descriptionControl),qI(),nI(),iC(e.availableAgentConfigs().length>0?12:-1),nI(),bg("formArrayName","parameters"),nI(8),Yg(e.paramPlaceholderSyntax),nI(2),iC(e.parametersArray.length===0?23:-1),nI(),uC(e.parametersArray.controls),nI(4),bg("formArrayName","content"),nI(16),Yg(e.paramPlaceholderSyntax),nI(2),uC(e.contentArray.controls),nI(4),iC(e.errorMessage()?50:-1),nI(4),bg("formControl",e.externalMetadataJsonControl),qI(),nI(),iC(e.externalMetadataJsonControl.invalid&&e.externalMetadataJsonControl.touched?55:-1),nI(4),bg("disabled",e.form.invalid||e.isSubmitting()),nI(),Dl(" ",e.isEditMode()?"Save changes":"Create"," "),nI(),iC(e.isEditMode()?61:-1);}}var re=class i{route=g(V);router=g(G);destroyRef=g(we);promptState=g(m);agentConfigController=g(M);namespaceId=this.route.snapshot.params.namespaceId;isPlatformMode=!this.namespaceId;form=new z({name:new _t("",{nonNullable:true,validators:[_e$1.required,_e$1.minLength(1)]}),description:new _t(null),agentConfigId:new _t(null),externalMetadataJson:new _t("",{nonNullable:true,validators:[be]}),content:new ze([this.createContentControl()],{validators:[_e$1.required]}),parameters:new ze([])});get nameControl(){return this.form.controls.name}get descriptionControl(){return this.form.controls.description}get agentConfigIdControl(){return this.form.controls.agentConfigId}get externalMetadataJsonControl(){return this.form.controls.externalMetadataJson}get contentArray(){return this.form.controls.content}get parametersArray(){return this.form.controls.parameters}isEditMode=Gi(false);isSubmitting=Gi(false);isLoading=Gi(false);isExporting=Gi(false);errorMessage=Gi(null);paramPlaceholderSyntax="{{paramName}}";agentConfigs=Gi([]);availableAgentConfigs=this.agentConfigs.asReadonly();existingPrompt=null;ngOnInit(){let t=this.route.snapshot.paramMap.get("promptId");t&&(this.isEditMode.set(true),this.loadPrompt(t)),this.isPlatformMode?this.loadPlatformAgentConfigs():this.namespaceId&&this.loadAgentConfigs(this.namespaceId);}loadPrompt(t){this.isLoading.set(true),this.promptState.getById(t).pipe(U(this.destroyRef)).subscribe({next:e=>{this.existingPrompt=e,this.hydrateForm(e),this.isLoading.set(false);},error:()=>{this.isLoading.set(false),this.navigateBack();}});}loadAgentConfigs(t){this.agentConfigController.listByParentAgentConfig(t).pipe(U(this.destroyRef),va(()=>br([]))).subscribe(e=>this.agentConfigs.set(e));}loadPlatformAgentConfigs(){this.agentConfigController.listPlatformAgentsAgentConfig().pipe(U(this.destroyRef),va(()=>br([]))).subscribe(t=>this.agentConfigs.set(t));}hydrateForm(t){this.nameControl.setValue(t.name),this.descriptionControl.setValue(t.description??null),this.agentConfigIdControl.setValue(t.agentConfigId??null),this.contentArray.clear(),(t.content.length>0?t.content:[""]).forEach(l=>this.contentArray.push(this.createContentControl(l))),this.parametersArray.clear(),(t.parameters??[]).forEach(l=>this.parametersArray.push(this.createParameterGroup(l))),this.externalMetadataJsonControl.setValue(t.externalMetadata?JSON.stringify(t.externalMetadata,null,2):"");}resolveAgentConfigName(t){return this.agentConfigs().find(e=>e.id===t)?.name??t}createContentControl(t=""){return new _t(t,{nonNullable:true,validators:[_e$1.required,_e$1.pattern(/\S/)]})}addContentEntry(){this.contentArray.push(this.createContentControl());}removeContentEntry(t){this.contentArray.length>1&&this.contentArray.removeAt(t);}createParameterGroup(t){return new z({name:new _t(t?.name??"",{nonNullable:true,validators:[_e$1.required,_e$1.minLength(1)]}),description:new _t(t?.description??null),defaultValue:new _t(t?.defaultValue??"",{nonNullable:true,validators:[_e$1.required]})})}addParameter(){this.parametersArray.push(this.createParameterGroup());}removeParameter(t){this.parametersArray.removeAt(t);}submit(){if(this.form.invalid||this.isSubmitting())return;this.isSubmitting.set(true);let t=this.isEditMode()&&!!this.existingPrompt?.id,e=z$1(P({},this.existingPrompt??{}),{namespaceId:this.namespaceId,sourceLanguage:this.existingPrompt?.sourceLanguage??"en",name:this.nameControl.value.trim(),description:this.descriptionControl.value?.trim()||void 0,content:this.contentArray.controls.map(d=>d.value.trim()),parameters:this.parametersArray.controls.map(d=>({name:d.controls.name.value.trim(),description:d.controls.description.value?.trim()||void 0,defaultValue:d.controls.defaultValue.value.trim()}))});t||(e.agentConfigId=this.agentConfigIdControl.value||null);let l=this.externalMetadataJsonControl.value.trim();e.externalMetadata=l?JSON.parse(l):null;let m=t?this.promptState.update(this.existingPrompt.id,e):this.promptState.create(e);this.errorMessage.set(null),m.pipe(U(this.destroyRef)).subscribe({next:()=>this.navigateBack(),error:d=>{this.isSubmitting.set(false),d.status===409?this.errorMessage.set(`A prompt named "${e.name}" already exists in this scope.`):d.status===400?this.errorMessage.set(d.error?.message??"Invalid prompt data."):this.errorMessage.set("An unexpected error occurred. Please try again.");}});}exportYaml(){let t=this.existingPrompt?.id;!t||this.isExporting()||(this.isExporting.set(true),this.promptState.exportAsYaml(t).pipe(U(this.destroyRef)).subscribe({next:e=>{let l=new Blob([e],{type:"application/yaml"}),m=URL.createObjectURL(l),d=document.createElement("a");d.href=m,d.download=`${this.existingPrompt?.name??"prompt"}.yaml`,d.click(),URL.revokeObjectURL(m),this.isExporting.set(false);},error:()=>this.isExporting.set(false)}));}cancel(){this.navigateBack();}navigateBack(){this.isPlatformMode?this.router.navigate(["/agentos","admin","prompts"]):this.router.navigate(["/agentos",this.namespaceId,"prompts"]);}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=Fw({type:i,selectors:[["agentos-prompt-form"]],decls:10,vars:3,consts:[[1,"prompt-form"],[1,"prompt-form__header"],["type","button","title","Back to prompts",1,"prompt-form__back",3,"click"],[1,"prompt-form__back-icon"],[1,"prompt-form__title"],[1,"prompt-form__loading"],[1,"prompt-form__form",3,"formGroup"],[1,"prompt-form__form",3,"ngSubmit","formGroup"],[1,"prompt-form__field"],["for","prompt-name",1,"prompt-form__label"],["aria-hidden","true"],["id","prompt-name","type","text","placeholder","e.g. Summarise meeting notes","autocomplete","off",1,"prompt-form__input",3,"formControl"],[1,"prompt-form__field-error"],["for","prompt-description",1,"prompt-form__label"],["id","prompt-description","type","text","placeholder","Optional \u2014 short description of this prompt","autocomplete","off",1,"prompt-form__input",3,"formControl"],[1,"prompt-form__section",3,"formArrayName"],[1,"prompt-form__label"],[1,"prompt-form__label-hint"],[1,"prompt-form__section-hint"],[1,"prompt-form__empty-hint"],[1,"prompt-form__param-row",3,"formGroupName"],["type","button",1,"prompt-form__add-btn",3,"click"],[1,"prompt-form__content-row"],[1,"prompt-form__error"],["for","prompt-external-metadata",1,"prompt-form__label"],["id","prompt-external-metadata","rows","6","placeholder",'{ "key": "value" }',"spellcheck","false","autocomplete","off",1,"prompt-form__textarea","prompt-form__textarea--code",3,"formControl"],[1,"prompt-form__field-hint"],[1,"prompt-form__actions"],["type","submit",1,"prompt-form__btn","prompt-form__btn--primary",3,"disabled"],["type","button",1,"prompt-form__btn","prompt-form__btn--export",3,"disabled"],["type","button",1,"prompt-form__btn",3,"click"],["for","prompt-agent-config",1,"prompt-form__label"],[1,"prompt-form__readonly-value"],["id","prompt-agent-config",1,"prompt-form__select",3,"formControl"],[3,"ngValue"],[1,"prompt-form__param-fields"],[1,"prompt-form__field","prompt-form__field--inline"],[1,"prompt-form__label",3,"for"],["type","text","placeholder","e.g. language","formControlName","name","autocomplete","off",1,"prompt-form__input",3,"id"],["type","text","placeholder","Optional","formControlName","description","autocomplete","off",1,"prompt-form__input",3,"id"],["type","text","placeholder","e.g. English","formControlName","defaultValue","autocomplete","off",1,"prompt-form__input",3,"id"],["type","button","title","Remove this parameter",1,"prompt-form__remove-btn",3,"click"],[1,"prompt-form__content-index"],[1,"prompt-form__content-field"],["rows","4","placeholder","Enter a command\u2026",1,"prompt-form__textarea",3,"formControlName"],["type","button","title","Remove this entry",1,"prompt-form__remove-btn",3,"click","disabled"],["type","button",1,"prompt-form__btn","prompt-form__btn--export",3,"click","disabled"]],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),hl(),ws(6,"h1",4),QC(7),hl()(),oC(8,ie,2,0,"p",5)(9,ve,64,18,"form",6),hl()),e&2&&(nI(5),Dl(" ",l.isPlatformMode?"Platform prompts":"Prompts"," "),nI(2),Yg(l.isEditMode()?"Edit prompt":"New prompt"),nI(),iC(l.isLoading()?8:9));},dependencies:[ni,Jn,Qn,ei,Ye,At,Zn,Xn,Cn,En,An,Ct,Vt],styles:[".prompt-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2rem;max-width:560px;margin:0 auto;padding:2rem 1rem}.prompt-form__header[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.prompt-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)}.prompt-form__back[_ngcontent-%COMP%]:hover{text-decoration:underline}.prompt-form__back-icon[_ngcontent-%COMP%]{font-size:1rem;line-height:1}.prompt-form__title[_ngcontent-%COMP%]{margin:0;font-size:1.5rem;font-weight:700;color:var(--color-text);letter-spacing:-.02em}.prompt-form__loading[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:.9rem;margin:0}.prompt-form__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1.25rem}.prompt-form__field[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.375rem}.prompt-form__field--inline[_ngcontent-%COMP%]{flex:1}.prompt-form__label[_ngcontent-%COMP%]{font-size:.875rem;font-weight:500;color:var(--color-text)}.prompt-form__label-hint[_ngcontent-%COMP%]{font-weight:400;color:var(--color-text-secondary);margin-left:.375rem}.prompt-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;cursor:pointer;appearance:auto;transition:border-color .15s ease}.prompt-form__select[_ngcontent-%COMP%]:focus{border-color:var(--color-accent)}.prompt-form__field-hint[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-secondary);line-height:1.4}.prompt-form__readonly-value[_ngcontent-%COMP%]{margin:0;padding:.5rem .875rem;border-radius:0;background:var(--color-bg-hover);border:1px solid var(--color-divider);color:var(--color-text);font-size:.9375rem}.prompt-form__input[_ngcontent-%COMP%], .prompt-form__textarea[_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}.prompt-form__input[_ngcontent-%COMP%]:focus, .prompt-form__textarea[_ngcontent-%COMP%]:focus{border-color:var(--color-accent)}.prompt-form__input[_ngcontent-%COMP%]::placeholder, .prompt-form__textarea[_ngcontent-%COMP%]::placeholder{color:var(--color-neutral-500)}.prompt-form__textarea[_ngcontent-%COMP%]{resize:vertical;min-height:100px;line-height:1.5}.prompt-form__textarea--code[_ngcontent-%COMP%]{font-family:monospace;font-size:.85rem;resize:vertical}.prompt-form__section[_ngcontent-%COMP%]{border:1px solid var(--color-divider);border-radius:0;padding:1rem;margin:0;display:flex;flex-direction:column;gap:.75rem}.prompt-form__section-hint[_ngcontent-%COMP%]{margin:0;font-size:.8rem;color:var(--color-text-secondary);line-height:1.4}.prompt-form__empty-hint[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-text-secondary);font-style:italic}.prompt-form__content-row[_ngcontent-%COMP%]{display:flex;gap:.5rem;align-items:flex-start}.prompt-form__content-field[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;gap:.25rem}.prompt-form__content-index[_ngcontent-%COMP%]{flex-shrink:0;width:1.5rem;padding-top:.6rem;font-size:.8rem;font-weight:600;color:var(--color-text-secondary);text-align:right;-webkit-user-select:none;user-select:none}.prompt-form__param-row[_ngcontent-%COMP%]{display:flex;gap:.5rem;align-items:flex-end;padding:.75rem;border-radius:0;background:var(--color-bg-hover)}.prompt-form__param-fields[_ngcontent-%COMP%]{flex:1;display:flex;gap:.75rem;flex-wrap:wrap}.prompt-form__add-btn[_ngcontent-%COMP%]{align-self:flex-start;padding:.4rem .875rem;border-radius:0;border:1px solid var(--color-divider);background:transparent;color:var(--color-accent);font-size:.875rem;font-family:inherit;cursor:pointer;transition:background .15s ease,border-color .15s ease}.prompt-form__add-btn[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover);border-color:var(--color-accent)}.prompt-form__remove-btn[_ngcontent-%COMP%]{flex-shrink:0;width:1.75rem;height:1.75rem;display:flex;align-items:center;justify-content:center;border-radius:0;border:1px solid transparent;background:transparent;color:var(--color-neutral-500);font-size:1rem;line-height:1;cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease}.prompt-form__remove-btn[_ngcontent-%COMP%]:hover:not(:disabled){background:color-mix(in srgb,var(--red) 10%,transparent);color:var(--red);border-color:var(--red)}.prompt-form__remove-btn[_ngcontent-%COMP%]:disabled{opacity:.3;cursor:not-allowed}.prompt-form__error[_ngcontent-%COMP%]{margin:0;padding:.625rem .875rem;border-radius:0;background:color-mix(in srgb,var(--red) 10%,transparent);border:1px solid var(--red);color:var(--red);font-size:.875rem;line-height:1.4}.prompt-form__field-error[_ngcontent-%COMP%]{font-size:.8rem;color:var(--red);line-height:1.3}.prompt-form__input--invalid[_ngcontent-%COMP%], .prompt-form__textarea--invalid[_ngcontent-%COMP%]{border-color:var(--red)}.prompt-form__input--invalid[_ngcontent-%COMP%]:focus, .prompt-form__textarea--invalid[_ngcontent-%COMP%]:focus{border-color:var(--red)}.prompt-form__actions[_ngcontent-%COMP%]{display:flex;gap:.75rem;padding-top:.5rem}.prompt-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}.prompt-form__btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-bg-hover);border-color:var(--color-neutral-500)}.prompt-form__btn[_ngcontent-%COMP%]:disabled{opacity:.45;cursor:not-allowed}.prompt-form__btn--primary[_ngcontent-%COMP%]{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.prompt-form__btn--primary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-700);border-color:var(--color-accent-700)}.prompt-form__btn--export[_ngcontent-%COMP%]{border-color:var(--color-divider);color:var(--color-text-secondary)}.prompt-form__btn--export[_ngcontent-%COMP%]:hover:not(:disabled){border-color:var(--color-accent);color:var(--color-accent)}"]})};function be(i){let t=i.value?.trim();if(!t)return null;try{return JSON.parse(t),null}catch(e){return {invalidJson:true}}}export{re as PromptFormComponent};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import {I}from'./chunk-
|
|
1
|
+
import {I}from'./chunk-DqC8XT4v.js';import {m}from'./chunk-R-GmZrHu.js';import {g,G,w as we,aJ as Tr,a as Gi,bS as Da,u as ue,c as U,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,a9 as gC,aa as wf,ab as Cf,ag as mT}from'./main-LBRSRTYI.js';import {W as Wn,S as Se}from'./chunk-BaO2vi_O.js';import'./chunk-DjMtxVWg.js';import'./chunk-BYyTBqh4.js';import'./chunk-ClSDInQq.js';var F=()=>[];function N(o,e){if(o&1){let t=gC();ws(0,"agentos-prompt-item",4),Rg("deleteRequested",function(n){wf(t);let E=EC(2);return Cf(E.deletePrompt(n))}),hl();}o&2&&bg("prompt",e)("platformMode",true);}function V(o,e){if(o&1&&oC(0,N,1,2,"agentos-prompt-item",3),o&2){let t,r=e.$implicit,n=EC();iC((t=n.resolvePrompt(r.id))?0:-1,t);}}var q=class o{router=g(G);destroyRef=g(we);promptState=g(m);refresh$=new Tr(void 0);isLoading=Gi(true);prompts$=this.refresh$.pipe(Da(()=>(this.isLoading.set(true),this.promptState.listPlatform())));promptItems$=this.prompts$.pipe(ue(e=>e.map(t=>({id:t.id??"",name:t.name,description:t.description}))));promptsById=new Map;constructor(){this.prompts$.pipe(U(this.destroyRef)).subscribe({next:e=>{this.promptsById=new Map(e.map(t=>[t.id??"",t])),this.isLoading.set(false);},error:()=>this.isLoading.set(false)});}goBack(){this.router.navigate(["/agentos","admin"]);}openCreateForm(){this.router.navigate(["/agentos","admin","prompts","new"]);}deletePrompt(e){this.promptState.delete(e.id??"").pipe(U(this.destroyRef)).subscribe(()=>this.refresh$.next());}resolvePrompt(e){return this.promptsById.get(e)??null}static \u0275fac=function(t){return new(t||o)};static \u0275cmp=Fw({type:o,selectors:[["agentos-platform-prompts"]],decls:5,vars:7,consts:[["promptItemTpl",""],["title","Platform Prompts","emptyMessage","No platform prompts defined yet. Add one above.","cardMinWidth","400px",3,"createRequested","items","loading","showCreate","itemTemplate"],["toolbar-start","","icon","arrow_back","title","Back",3,"action"],[3,"prompt","platformMode"],[3,"deleteRequested","prompt","platformMode"]],template:function(t,r){if(t&1&&(ws(0,"ds-entity-list",1),dT(1,"async"),Rg("createRequested",function(){return r.openCreateForm()}),ws(2,"ds-icon-button",2),Rg("action",function(){return r.goBack()}),hl()(),Eg(3,V,1,1,"ng-template",null,0,mT)),t&2){let n=MC(4);bg("items",pT(1,4,r.promptItems$)??aT(6,F))("loading",r.isLoading())("showCreate",true)("itemTemplate",n);}},dependencies:[Wn,I,Se,Ob],styles:[".platform-prompts__back[_ngcontent-%COMP%]{background:none;border:none;padding:0;cursor:pointer;font-size:.875rem;color:var(--color-primary, #007aff);font-family:inherit}.platform-prompts__back[_ngcontent-%COMP%]:hover{text-decoration:underline}"]})};export{q as PlatformPromptsComponent};
|
|
@@ -1 +1 @@
|
|
|
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
|
+
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-LBRSRTYI.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-BYyTBqh4.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 +1 @@
|
|
|
1
|
-
import {f}from'./chunk-UzUd84Qf.js';import {g,bm as _m,R as Re,a as Gi,E as ET,h as Fw,i as hr,k as Gn,m as ws,o as Rg,Q as QC,n as hl,q as oC,af as Eg,ag as mT,M as MC,t as nI,v as bg,x as iC,I as fy,P,aF as A,Y as x,Z as z,_ as Ue,$ as zt,a0 as jt,a1 as Vt,a2 as Nt,j as pr,bn as Xt,ai as em,aj as tT,a3 as GI,r as cC,bo as sC,a8 as Yg,ak as Jg,a6 as qI,y as uC,a5 as Dl,ac as EC,a9 as gC,aa as wf,ab as Cf,bp as yl,bq as vl,ah as aT,b4 as cT,A as Ug,b0 as Qg,a4 as aC,T as Tg,S as Sg}from'./main-5PAOSHSM.js';import {P as Pt}from'./chunk-YS-vAhPY.js';import {T as Tn,S as Sn,n as nt$1,a as ae,l as le,c as ce}from'./chunk-YfG457Nc.js';import {W as Wn,o as ot$1,i as it$1,I as In,D as De,B as Be,y as ya,E as En}from'./chunk-CtkiOUdU.js';import'./chunk-S8F5_Te_.js';import {y as yt,w as wt,t as ti,Q as Qn,e as ei,Y as Ye$1,f as fn,m as mn,Z as Zn,g as gt,$ as $t,W as Wt,c as cn}from'./chunk-tTmeIHGS.js';var w=class s{http=g(fy);projectState=g(P);getBaseUrl(){return `/api/projects/${this.projectState.getSelectedProjectIdOrThrow()}/agents`}listEditableAgents(){return this.http.get(`${this.getBaseUrl()}/editable`)}getAgent(t){return this.http.get(`${this.getBaseUrl()}/${encodeURIComponent(t)}`)}createAgent(t,e){return this.http.post(this.getBaseUrl(),{location:e,definition:t})}updateAgent(t,e){return this.http.put(`${this.getBaseUrl()}/${encodeURIComponent(t)}`,{definition:e})}listDocuments(t){return this.http.get(`${this.getBaseUrl()}/documents`,{params:{location:t}})}uploadDocument(t,e){return new A(n=>{let a=new FileReader;a.onload=()=>{let r=a.result.split(",")[1];this.http.post(`${this.getBaseUrl()}/documents`,{filename:e.name,content:r,mimeType:e.type},{params:{location:t}}).subscribe(n);},a.onerror=()=>n.error(a.error),a.readAsDataURL(e);})}deleteAgent(t){return this.http.delete(`${this.getBaseUrl()}/${encodeURIComponent(t)}`)}static \u0275fac=function(e){return new(e||s)};static \u0275prov=x({token:s,factory:s.\u0275fac,providedIn:"root"})};function ze(s,t){s&1&&(ws(0,"p",15),QC(1,"No integrations defined \u2014 agent will have access to all tools."),hl());}function qe(s,t){if(s&1){let e=gC();ws(0,"div",16)(1,"mat-form-field",22)(2,"mat-label"),QC(3,"Integration"),hl(),ws(4,"input",23),em("ngModelChange",function(a){let r=wf(e).$implicit;return tT(r.integration,a)||(r.integration=a),Cf(a)}),hl(),GI(),hl(),ws(5,"mat-form-field",24)(6,"mat-label"),QC(7,"Tools (comma-separated)"),hl(),ws(8,"input",25),em("ngModelChange",function(a){let r=wf(e).$implicit;return tT(r.tools,a)||(r.tools=a),Cf(a)}),hl(),GI(),hl(),ws(9,"button",26),Rg("click",function(){let a=wf(e).$index,r=EC();return Cf(r.removeIntegrationRow(a))}),ws(10,"mat-icon"),QC(11,"delete"),hl()()();}if(s&2){let e=t.$implicit;nI(4),Jg("ngModel",e.integration),qI(),nI(4),Jg("ngModel",e.tools),qI();}}function He(s,t){if(s&1&&(ws(0,"p",30),QC(1),hl()),s&2){let e=EC(2);nI(),Yg(e.docUploadError);}}function Ge(s,t){s&1&&(ws(0,"p",15),QC(1,"No mandatory documents defined."),hl());}function Ze(s,t){if(s&1&&Sg(0,"option",35),s&2){let e=t.$implicit;bg("value","documents/"+e);}}function Ke(s,t){if(s&1){let e=gC();ws(0,"div",31)(1,"mat-form-field",32)(2,"mat-label"),QC(3,"Document path"),hl(),ws(4,"input",33),em("ngModelChange",function(a){let r=wf(e).$index,j=EC(2);return tT(j.mandatoryDocs[r],a)||(j.mandatoryDocs[r]=a),Cf(a)}),hl(),GI(),ws(5,"datalist",34),cC(6,Ze,1,1,"option",35,aC),hl()(),ws(8,"button",26),Rg("click",function(){let a=wf(e).$index,r=EC(2);return Cf(r.removeDocRow(a))}),ws(9,"mat-icon"),QC(10,"delete"),hl()()();}if(s&2){let e=t.$index,n=EC(2);nI(4),Jg("ngModel",n.mandatoryDocs[e]),Tg("list","docs-list-"+e),qI(),nI(),bg("id","docs-list-"+e),nI(),uC(n.availableDocuments);}}function Je(s,t){if(s&1){let e=gC();ws(0,"div",6)(1,"span"),QC(2,"Mandatory Documents"),hl(),ws(3,"button",27),Rg("click",function(){wf(e);let a=EC();return Cf(a.addDocRow())}),ws(4,"mat-icon"),QC(5,"add"),hl()(),ws(6,"label",28)(7,"mat-icon"),QC(8,"upload_file"),hl(),ws(9,"input",29),Rg("change",function(a){wf(e);let r=EC();return Cf(r.onDocFileSelected(a))}),hl()()(),oC(10,He,2,1,"p",30),oC(11,Ge,2,0,"p",15),cC(12,Ke,11,3,"div",31,sC);}if(s&2){let e=EC();nI(6),Ug("uploading",e.isUploadingDoc),nI(3),bg("disabled",e.isUploadingDoc),nI(),iC(e.docUploadError?10:-1),nI(),iC(e.mandatoryDocs.length===0?11:-1),nI(),uC(e.mandatoryDocs);}}function Qe(s,t){s&1&&(ws(0,"p",15),QC(1,"\u{1F4A1} Documents can be added after the agent is created."),hl());}function Xe(s,t){if(s&1){let e=gC();ws(0,"div",6),QC(1,"Save to"),hl(),ws(2,"div",36)(3,"label",37)(4,"input",38),em("ngModelChange",function(a){wf(e);let r=EC();return tT(r.location,a)||(r.location=a),Cf(a)}),hl(),GI(),ws(5,"div",39)(6,"div",40)(7,"span",41),QC(8,"\u{1F464}"),hl(),ws(9,"span",42),QC(10,"Project config"),hl()(),ws(11,"p",43),QC(12),hl()()(),ws(13,"label",37)(14,"input",44),em("ngModelChange",function(a){wf(e);let r=EC();return tT(r.location,a)||(r.location=a),Cf(a)}),hl(),GI(),ws(15,"div",39)(16,"div",40)(17,"span",41),QC(18,"\u{1F4E6}"),hl(),ws(19,"span",42),QC(20,"Colocated"),hl()(),ws(21,"p",43),QC(22,"Next to coday.yaml in ./agents/ (committable)"),hl()()()(),ws(23,"p",15),QC(24,"Storage location is permanent and cannot be changed after creation."),hl();}if(s&2){let e=EC();nI(3),Ug("selected",e.location==="project"),nI(),Jg("ngModel",e.location),qI(),nI(8),Qg("~/.coday/projects/","{","name","}","/agents/ (not committed)"),nI(),Ug("selected",e.location==="colocated"),nI(),Jg("ngModel",e.location),qI();}}function Ye(s,t){if(s&1&&(ws(0,"div",17)(1,"span",6),QC(2,"Storage Location"),hl(),ws(3,"span",45),QC(4),hl(),ws(5,"p",15),QC(6,"Cannot be changed after creation."),hl()()),s&2){let e=EC();nI(3),Ug("badge-project",e.location==="project")("badge-colocated",e.location==="colocated"),nI(),Dl(" ",e.location==="project"?"\u{1F464} Project config":"\u{1F4E6} Colocated"," ");}}function $e(s,t){if(s&1&&(ws(0,"div",18)(1,"mat-icon"),QC(2,"error"),hl(),ws(3,"span"),QC(4),hl()()),s&2){let e=EC();nI(4),Yg(e.errorMessage);}}var E=class s{agentCrudApi=g(w);agentApi=g(f);dialogRef=g(z);data=g(Ue);name="";description="";instructions="";aiProvider="";modelName="";temperature=null;maxOutputTokens=null;openaiAssistantId="";integrationRows=[];mandatoryDocs=[];availableDocuments=[];isUploadingDoc=false;docUploadError="";location="project";isSaving=false;errorMessage="";isEditMode=false;ngOnInit(){if(this.isEditMode=this.data.mode==="edit",this.isEditMode&&this.data.agent){let t=this.data.agent.definition;this.name=t.name,this.description=t.description,this.instructions=t.instructions??"",this.aiProvider=t.aiProvider??"",this.modelName=t.modelName??"",this.temperature=t.temperature??null,this.maxOutputTokens=t.maxOutputTokens??null,this.openaiAssistantId=t.openaiAssistantId??"",this.location=this.data.agent.source,t.integrations&&(this.integrationRows=Object.entries(t.integrations).map(([e,n])=>({integration:e,tools:n?.join(", ")??""}))),this.mandatoryDocs=[...t.mandatoryDocs??[]],this.loadAvailableDocuments();}}loadAvailableDocuments(){this.agentCrudApi.listDocuments(this.location).subscribe({next:t=>this.availableDocuments=t,error:()=>this.availableDocuments=[]});}addDocRow(){this.mandatoryDocs.push("");}removeDocRow(t){this.mandatoryDocs.splice(t,1);}onDocFileSelected(t){let e=t.target,n=e.files?.[0];n&&(this.isUploadingDoc=true,this.docUploadError="",this.agentCrudApi.uploadDocument(this.location,n).subscribe({next:a=>{this.isUploadingDoc=false,this.mandatoryDocs.push(a.relativePath),this.loadAvailableDocuments(),e.value="";},error:a=>{this.isUploadingDoc=false,this.docUploadError=a?.error?.error??a?.message??"Upload failed",e.value="";}}));}addIntegrationRow(){this.integrationRows.push({integration:"",tools:""});}removeIntegrationRow(t){this.integrationRows.splice(t,1);}trackByIndex(t){return t}validateForm(){if(!this.name.trim())return this.errorMessage="Name is required",false;if(!/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/.test(this.name.trim()))return this.errorMessage="Name must start with alphanumeric and contain only letters, digits, hyphens or underscores",false;if(!this.description.trim())return this.errorMessage="Description is required",false;for(let t of this.integrationRows)if(!t.integration.trim())return this.errorMessage="Integration name cannot be empty",false;return true}buildDefinition(){let t=this.mandatoryDocs.map(n=>n.trim()).filter(Boolean),e=this.integrationRows.length>0?Object.fromEntries(this.integrationRows.filter(n=>n.integration.trim()).map(n=>[n.integration.trim(),n.tools.split(",").map(a=>a.trim()).filter(Boolean)])):void 0;return {name:this.name.trim(),description:this.description.trim(),instructions:this.instructions.trim()||void 0,aiProvider:this.aiProvider.trim()||void 0,modelName:this.modelName.trim()||void 0,temperature:this.temperature??void 0,maxOutputTokens:this.maxOutputTokens??void 0,openaiAssistantId:this.openaiAssistantId.trim()||void 0,integrations:e,mandatoryDocs:t.length>0?t:void 0}}save(){if(this.errorMessage="",!this.validateForm())return;let t=this.buildDefinition();this.isSaving=true,(this.isEditMode?this.agentCrudApi.updateAgent(this.name.trim(),t):this.agentCrudApi.createAgent(t,this.location)).subscribe({next:()=>{this.isSaving=false,this.agentApi.clearAllCache(),this.dialogRef.close(true);},error:n=>{this.isSaving=false,this.errorMessage=n?.error?.error||n?.message||"Failed to save agent";}});}cancel(){this.dialogRef.close(false);}static \u0275fac=function(e){return new(e||s)};static \u0275cmp=Fw({type:s,selectors:[["app-agent-form"]],decls:69,vars:18,consts:[["mat-dialog-title",""],[1,"form-container"],["appearance","outline",1,"full-width"],["matInput","","placeholder","my-agent","required","",3,"ngModelChange","ngModel","readonly"],["matInput","","placeholder","What does this agent do?","rows","2","required","",3,"ngModelChange","ngModel"],["matInput","","placeholder","System instructions for the agent...","rows","6",3,"ngModelChange","ngModel"],[1,"section-title"],[1,"row-2col"],["appearance","outline"],["matInput","","placeholder","e.g. anthropic, openai",3,"ngModelChange","ngModel"],["matInput","","placeholder","e.g. claude-sonnet-4-5",3,"ngModelChange","ngModel"],["matInput","","type","number","min","0","max","2","step","0.1","placeholder","0.0 \u2013 2.0",3,"ngModelChange","ngModel"],["matInput","","type","number","min","1","placeholder","e.g. 4096",3,"ngModelChange","ngModel"],["matInput","","placeholder","asst_...",3,"ngModelChange","ngModel"],["mat-icon-button","","type","button","title","Add integration",3,"click"],[1,"hint"],[1,"integration-row"],[1,"source-display"],[1,"error-message"],["align","end"],["mat-button","",3,"click","disabled"],["mat-raised-button","","color","primary",3,"click","disabled"],["appearance","outline",1,"integration-name"],["matInput","","placeholder","e.g. GITHUB",3,"ngModelChange","ngModel"],["appearance","outline",1,"integration-tools"],["matInput","","placeholder","Leave empty for all tools",3,"ngModelChange","ngModel"],["mat-icon-button","","type","button","title","Remove",3,"click"],["mat-icon-button","","type","button","title","Add document path",3,"click"],["title","Upload a document to the pool",1,"upload-btn"],["type","file","hidden","",3,"change","disabled"],[1,"doc-upload-error"],[1,"doc-row"],["appearance","outline",1,"doc-field"],["matInput","","placeholder","documents/guide.md",3,"ngModelChange","ngModel"],[3,"id"],[3,"value"],[1,"source-options"],[1,"source-option"],["type","radio","name","location","value","project",3,"ngModelChange","ngModel"],[1,"source-content"],[1,"source-header"],[1,"source-icon"],[1,"source-label"],[1,"source-description"],["type","radio","name","location","value","colocated",3,"ngModelChange","ngModel"],[1,"source-badge"]],template:function(e,n){e&1&&(ws(0,"h2",0),QC(1),hl(),ws(2,"mat-dialog-content")(3,"div",1)(4,"mat-form-field",2)(5,"mat-label"),QC(6,"Name"),hl(),ws(7,"input",3),em("ngModelChange",function(r){return tT(n.name,r)||(n.name=r),r}),hl(),GI(),ws(8,"mat-hint"),QC(9,"Alphanumeric, hyphens and underscores only. Cannot be changed after creation."),hl()(),ws(10,"mat-form-field",2)(11,"mat-label"),QC(12,"Description"),hl(),ws(13,"textarea",4),em("ngModelChange",function(r){return tT(n.description,r)||(n.description=r),r}),hl(),GI(),hl(),ws(14,"mat-form-field",2)(15,"mat-label"),QC(16,"Instructions"),hl(),ws(17,"textarea",5),em("ngModelChange",function(r){return tT(n.instructions,r)||(n.instructions=r),r}),hl(),GI(),ws(18,"mat-hint"),QC(19,"System prompt / instructions sent to the AI model"),hl()(),ws(20,"div",6),QC(21,"AI Configuration"),hl(),ws(22,"div",7)(23,"mat-form-field",8)(24,"mat-label"),QC(25,"AI Provider"),hl(),ws(26,"input",9),em("ngModelChange",function(r){return tT(n.aiProvider,r)||(n.aiProvider=r),r}),hl(),GI(),hl(),ws(27,"mat-form-field",8)(28,"mat-label"),QC(29,"Model Name"),hl(),ws(30,"input",10),em("ngModelChange",function(r){return tT(n.modelName,r)||(n.modelName=r),r}),hl(),GI(),hl()(),ws(31,"div",7)(32,"mat-form-field",8)(33,"mat-label"),QC(34,"Temperature"),hl(),ws(35,"input",11),em("ngModelChange",function(r){return tT(n.temperature,r)||(n.temperature=r),r}),hl(),GI(),ws(36,"mat-hint"),QC(37,"Leave empty for model default"),hl()(),ws(38,"mat-form-field",8)(39,"mat-label"),QC(40,"Max Output Tokens"),hl(),ws(41,"input",12),em("ngModelChange",function(r){return tT(n.maxOutputTokens,r)||(n.maxOutputTokens=r),r}),hl(),GI(),ws(42,"mat-hint"),QC(43,"Leave empty for model default"),hl()()(),ws(44,"mat-form-field",2)(45,"mat-label"),QC(46,"OpenAI Assistant ID"),hl(),ws(47,"input",13),em("ngModelChange",function(r){return tT(n.openaiAssistantId,r)||(n.openaiAssistantId=r),r}),hl(),GI(),ws(48,"mat-hint"),QC(49,"If set, forces aiProvider to openai"),hl()(),ws(50,"div",6)(51,"span"),QC(52,"Integrations"),hl(),ws(53,"button",14),Rg("click",function(){return n.addIntegrationRow()}),ws(54,"mat-icon"),QC(55,"add"),hl()()(),oC(56,ze,2,0,"p",15),cC(57,qe,12,2,"div",16,sC),oC(59,Je,14,5)(60,Qe,2,0,"p",15),oC(61,Xe,25,8),oC(62,Ye,7,5,"div",17),oC(63,$e,5,1,"div",18),hl()(),ws(64,"mat-dialog-actions",19)(65,"button",20),Rg("click",function(){return n.cancel()}),QC(66,"Cancel"),hl(),ws(67,"button",21),Rg("click",function(){return n.save()}),QC(68),hl()()),e&2&&(nI(),Yg(n.isEditMode?"Edit Agent":"Create Agent"),nI(6),Jg("ngModel",n.name),bg("readonly",n.isEditMode),qI(),nI(6),Jg("ngModel",n.description),qI(),nI(4),Jg("ngModel",n.instructions),qI(),nI(9),Jg("ngModel",n.aiProvider),qI(),nI(4),Jg("ngModel",n.modelName),qI(),nI(5),Jg("ngModel",n.temperature),qI(),nI(6),Jg("ngModel",n.maxOutputTokens),qI(),nI(6),Jg("ngModel",n.openaiAssistantId),qI(),nI(9),iC(n.integrationRows.length===0?56:-1),nI(),uC(n.integrationRows),nI(2),iC(n.isEditMode?59:60),nI(2),iC(n.isEditMode?-1:61),nI(),iC(n.isEditMode?62:-1),nI(),iC(n.errorMessage?63:-1),nI(2),bg("disabled",n.isSaving),nI(2),bg("disabled",n.isSaving),nI(),Dl(" ",n.isSaving?"Saving...":"Save"," "));},dependencies:[ti,Qn,ei,Ye$1,fn,mn,Zn,gt,$t,Wt,cn,zt,jt,Vt,Nt,hr,pr,Gn,Tn,Sn,nt$1,ae,le,ce,yt,wt,Pt,Xt],styles:[".form-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1rem;padding:0;min-width:560px}@media(max-width:768px){.form-container[_ngcontent-%COMP%]{min-width:auto}}.full-width[_ngcontent-%COMP%]{width:100%}.section-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;font-size:1rem;font-weight:600;margin-top:.5rem;margin-bottom:-.25rem}.row-2col[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:1rem}@media(max-width:768px){.row-2col[_ngcontent-%COMP%]{grid-template-columns:1fr}}.integration-row[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.5rem}.integration-row[_ngcontent-%COMP%] .integration-name[_ngcontent-%COMP%]{flex:0 0 180px}.integration-row[_ngcontent-%COMP%] .integration-tools[_ngcontent-%COMP%]{flex:1}.hint[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-text-secondary);font-style:italic}.source-options[_ngcontent-%COMP%]{display:flex;gap:1rem;margin-bottom:.5rem}@media(max-width:768px){.source-options[_ngcontent-%COMP%]{flex-direction:column}}.source-option[_ngcontent-%COMP%]{flex:1;display:flex;align-items:flex-start;gap:.75rem;padding:1rem;background:var(--color-bg);border:2px solid var(--color-border);border-radius:8px;cursor:pointer;transition:all .2s ease}.source-option[_ngcontent-%COMP%]:hover{border-color:var(--color-primary);background:var(--color-bg-hover)}.source-option.selected[_ngcontent-%COMP%]{border-color:var(--color-primary);background:var(--color-bg-hover);box-shadow:0 0 0 1px var(--color-primary)}.source-option[_ngcontent-%COMP%] input[type=radio][_ngcontent-%COMP%]{margin-top:2px;cursor:pointer}.source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%]{flex:1}.source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%] .source-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;margin-bottom:.5rem}.source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%] .source-header[_ngcontent-%COMP%] .source-icon[_ngcontent-%COMP%]{font-size:1.25rem}.source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%] .source-header[_ngcontent-%COMP%] .source-label[_ngcontent-%COMP%]{font-weight:600;font-size:.95rem}.source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%] .source-description[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-text-secondary);font-family:monospace;line-height:1.4}.source-display[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.source-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem 1rem;border-radius:6px;font-size:.9rem;font-weight:500}.source-badge.badge-project[_ngcontent-%COMP%]{background:#2196f31a;color:#2196f3;border:1px solid rgba(33,150,243,.3)}.source-badge.badge-colocated[_ngcontent-%COMP%]{background:#4caf501a;color:#4caf50;border:1px solid rgba(76,175,80,.3)}.doc-row[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.5rem}.doc-row[_ngcontent-%COMP%] .doc-field[_ngcontent-%COMP%]{flex:1}.upload-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%;cursor:pointer;color:var(--color-text-secondary);transition:background .2s}.upload-btn[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover);color:var(--color-primary)}.upload-btn.uploading[_ngcontent-%COMP%]{opacity:.5;cursor:wait}.upload-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:1.25rem;width:1.25rem;height:1.25rem}.doc-upload-error[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-error)}.error-message[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:.75rem;background:#f443361a;border:1px solid var(--color-error);border-radius:4px;color:var(--color-error)}.error-message[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:1.25rem;width:1.25rem;height:1.25rem}.error-message[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{flex:1}"],changeDetection:1})};var et=()=>[],tt=s=>({id:s});function nt(s,t){if(s&1&&(ws(0,"div",5),QC(1),hl()),s&2){let e=EC();nI(),Yg(e.errorMessage());}}function it(s,t){if(s&1){let e=gC();ws(0,"ds-entity-card",7),Rg("selected",function(a){wf(e);let r=EC();return Cf(r.onEdit(a))}),yl(1,8),ws(2,"button",9),Rg("click",function(a){return a.stopPropagation()}),ws(3,"mat-icon"),QC(4,"more_vert"),hl()(),vl(),hl();}if(s&2){let e=t.$implicit;EC();let n=MC(9);bg("id",e.id)("name",e.name)("description",e.description)("badges",e.badges??aT(6,et)),nI(2),bg("matMenuTriggerFor",n)("matMenuTriggerData",cT(7,tt,e.id));}}function ot(s,t){if(s&1){let e=gC();ws(0,"button",10),Rg("click",function(){let a=wf(e).id,r=EC();return Cf(r.onEdit(a))}),ws(1,"mat-icon"),QC(2,"edit"),hl(),QC(3," Edit "),hl(),ws(4,"button",11),Rg("click",function(){let a=wf(e).id,r=EC();return Cf(r.onDelete(a))}),ws(5,"mat-icon"),QC(6,"delete"),hl(),QC(7," Delete "),hl();}}var Ve=class s{agentCrudApi=g(w);location=g(_m);dialog=g(Re);agents=Gi([]);isLoading=Gi(false);errorMessage=Gi(null);agentItems=ET(()=>this.agents().map(t=>({id:t.name,name:t.name,description:t.description,badges:this.buildBadges(t),groupKey:t.source,groupLabel:t.source==="project"?"Project (~/.coday/)":"Colocated (next to coday.yaml)"})));ngOnInit(){this.loadAgents();}loadAgents(){this.isLoading.set(true),this.errorMessage.set(null),this.agentCrudApi.listEditableAgents().subscribe({next:t=>{this.agents.set(t),this.isLoading.set(false);},error:t=>{this.errorMessage.set(t?.error?.error??"Failed to load agents"),this.isLoading.set(false);}});}onBack(){this.location.back();}onCreate(){this.dialog.open(E,{width:"700px",maxHeight:"90vh",data:{mode:"create"}}).afterClosed().subscribe(e=>{e&&this.loadAgents();});}onEdit(t){this.agentCrudApi.getAgent(t).subscribe({next:e=>{this.dialog.open(E,{width:"700px",maxHeight:"90vh",data:{mode:"edit",agent:e}}).afterClosed().subscribe(a=>{a&&this.loadAgents();});},error:e=>this.errorMessage.set(e?.error?.error??"Failed to load agent")});}onDelete(t){confirm(`Are you sure you want to delete agent "${t}"?`)&&this.agentCrudApi.deleteAgent(t).subscribe({next:()=>this.loadAgents(),error:e=>this.errorMessage.set(e?.error?.error??"Failed to delete agent")});}buildBadges(t){return [t.source==="project"?{label:"project",variant:"info"}:{label:"colocated",variant:"success"}]}static \u0275fac=function(e){return new(e||s)};static \u0275cmp=Fw({type:s,selectors:[["app-agent-list"]],decls:11,vars:5,consts:[["agentCard",""],["cardMenu","matMenu"],[1,"agent-list-page"],["title","Agents","cardMinWidth","260px","contentMaxWidth","1400px","searchPlaceholder","Filter agents\u2026","emptyMessage","No file-based agents found.",3,"createRequested","items","loading","showCreate","itemTemplate"],["toolbar-start","","mat-icon-button","","title","Back",3,"click"],[1,"agent-list__error"],["matMenuContent",""],[3,"selected","id","name","description","badges"],["dsCardActions",""],["mat-icon-button","",3,"click","matMenuTriggerFor","matMenuTriggerData"],["mat-menu-item","",3,"click"],["mat-menu-item","",1,"agent-list__delete-item",3,"click"]],template:function(e,n){if(e&1&&(ws(0,"div",2)(1,"ds-entity-list",3),Rg("createRequested",function(){return n.onCreate()}),ws(2,"button",4),Rg("click",function(){return n.onBack()}),ws(3,"mat-icon"),QC(4,"chevron_left"),hl()()(),oC(5,nt,2,1,"div",5),hl(),Eg(6,it,5,9,"ng-template",null,0,mT),ws(8,"mat-menu",null,1),Eg(10,ot,8,0,"ng-template",6),hl()),e&2){let a=MC(7);nI(),bg("items",n.agentItems())("loading",n.isLoading())("showCreate",true)("itemTemplate",a),nI(4),iC(n.errorMessage()?5:-1);}},dependencies:[Wn,ot$1,it$1,hr,Gn,yt,wt,In,De,Be,ya,En],styles:["[_nghost-%COMP%]{display:block;width:100%;min-height:100vh;background:var(--color-bg);overflow-y:auto}.agent-list__delete-item[_ngcontent-%COMP%]{color:var(--color-error, #ff3b30)}.agent-list__delete-item[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:inherit}.agent-list__error[_ngcontent-%COMP%]{margin:1rem auto;max-width:900px;padding:.75rem 1rem;background:#dc262614;border:1px solid rgba(220,38,38,.25);border-radius:8px;color:var(--color-error, #ff3b30);font-size:.875rem}"],changeDetection:1})};export{Ve as AgentListComponent};
|
|
1
|
+
import {f}from'./chunk-BHvLB-pV.js';import {g,bm as _m,R as Re,a as Gi,E as ET,h as Fw,i as hr,k as Gn,m as ws,o as Rg,Q as QC,n as hl,q as oC,af as Eg,ag as mT,M as MC,t as nI,v as bg,x as iC,I as fy,P,aF as A,Y as x,Z as z,_ as Ue,$ as zt,a0 as jt,a1 as Vt,a2 as Nt,j as pr,bn as Xt,ai as em,aj as tT,a3 as GI,r as cC,bo as sC,a8 as Yg,ak as Jg,a6 as qI,y as uC,a5 as Dl,ac as EC,a9 as gC,aa as wf,ab as Cf,bp as yl,bq as vl,ah as aT,b4 as cT,A as Ug,b0 as Qg,a4 as aC,T as Tg,S as Sg}from'./main-LBRSRTYI.js';import {P as Pt}from'./chunk-BdJzYh5V.js';import {T as Tn,S as Sn,n as nt$1,a as ae,l as le,c as ce}from'./chunk-bfpuueWC.js';import {W as Wn,o as ot$1,i as it$1,I as In,D as De,B as Be,y as ya,E as En}from'./chunk-BaO2vi_O.js';import'./chunk-DjMtxVWg.js';import {y as yt,w as wt,t as ti,Q as Qn,e as ei,Y as Ye$1,f as fn,m as mn,Z as Zn,g as gt,$ as $t,W as Wt,c as cn}from'./chunk-BYyTBqh4.js';var w=class s{http=g(fy);projectState=g(P);getBaseUrl(){return `/api/projects/${this.projectState.getSelectedProjectIdOrThrow()}/agents`}listEditableAgents(){return this.http.get(`${this.getBaseUrl()}/editable`)}getAgent(t){return this.http.get(`${this.getBaseUrl()}/${encodeURIComponent(t)}`)}createAgent(t,e){return this.http.post(this.getBaseUrl(),{location:e,definition:t})}updateAgent(t,e){return this.http.put(`${this.getBaseUrl()}/${encodeURIComponent(t)}`,{definition:e})}listDocuments(t){return this.http.get(`${this.getBaseUrl()}/documents`,{params:{location:t}})}uploadDocument(t,e){return new A(n=>{let a=new FileReader;a.onload=()=>{let r=a.result.split(",")[1];this.http.post(`${this.getBaseUrl()}/documents`,{filename:e.name,content:r,mimeType:e.type},{params:{location:t}}).subscribe(n);},a.onerror=()=>n.error(a.error),a.readAsDataURL(e);})}deleteAgent(t){return this.http.delete(`${this.getBaseUrl()}/${encodeURIComponent(t)}`)}static \u0275fac=function(e){return new(e||s)};static \u0275prov=x({token:s,factory:s.\u0275fac,providedIn:"root"})};function ze(s,t){s&1&&(ws(0,"p",15),QC(1,"No integrations defined \u2014 agent will have access to all tools."),hl());}function qe(s,t){if(s&1){let e=gC();ws(0,"div",16)(1,"mat-form-field",22)(2,"mat-label"),QC(3,"Integration"),hl(),ws(4,"input",23),em("ngModelChange",function(a){let r=wf(e).$implicit;return tT(r.integration,a)||(r.integration=a),Cf(a)}),hl(),GI(),hl(),ws(5,"mat-form-field",24)(6,"mat-label"),QC(7,"Tools (comma-separated)"),hl(),ws(8,"input",25),em("ngModelChange",function(a){let r=wf(e).$implicit;return tT(r.tools,a)||(r.tools=a),Cf(a)}),hl(),GI(),hl(),ws(9,"button",26),Rg("click",function(){let a=wf(e).$index,r=EC();return Cf(r.removeIntegrationRow(a))}),ws(10,"mat-icon"),QC(11,"delete"),hl()()();}if(s&2){let e=t.$implicit;nI(4),Jg("ngModel",e.integration),qI(),nI(4),Jg("ngModel",e.tools),qI();}}function He(s,t){if(s&1&&(ws(0,"p",30),QC(1),hl()),s&2){let e=EC(2);nI(),Yg(e.docUploadError);}}function Ge(s,t){s&1&&(ws(0,"p",15),QC(1,"No mandatory documents defined."),hl());}function Ze(s,t){if(s&1&&Sg(0,"option",35),s&2){let e=t.$implicit;bg("value","documents/"+e);}}function Ke(s,t){if(s&1){let e=gC();ws(0,"div",31)(1,"mat-form-field",32)(2,"mat-label"),QC(3,"Document path"),hl(),ws(4,"input",33),em("ngModelChange",function(a){let r=wf(e).$index,j=EC(2);return tT(j.mandatoryDocs[r],a)||(j.mandatoryDocs[r]=a),Cf(a)}),hl(),GI(),ws(5,"datalist",34),cC(6,Ze,1,1,"option",35,aC),hl()(),ws(8,"button",26),Rg("click",function(){let a=wf(e).$index,r=EC(2);return Cf(r.removeDocRow(a))}),ws(9,"mat-icon"),QC(10,"delete"),hl()()();}if(s&2){let e=t.$index,n=EC(2);nI(4),Jg("ngModel",n.mandatoryDocs[e]),Tg("list","docs-list-"+e),qI(),nI(),bg("id","docs-list-"+e),nI(),uC(n.availableDocuments);}}function Je(s,t){if(s&1){let e=gC();ws(0,"div",6)(1,"span"),QC(2,"Mandatory Documents"),hl(),ws(3,"button",27),Rg("click",function(){wf(e);let a=EC();return Cf(a.addDocRow())}),ws(4,"mat-icon"),QC(5,"add"),hl()(),ws(6,"label",28)(7,"mat-icon"),QC(8,"upload_file"),hl(),ws(9,"input",29),Rg("change",function(a){wf(e);let r=EC();return Cf(r.onDocFileSelected(a))}),hl()()(),oC(10,He,2,1,"p",30),oC(11,Ge,2,0,"p",15),cC(12,Ke,11,3,"div",31,sC);}if(s&2){let e=EC();nI(6),Ug("uploading",e.isUploadingDoc),nI(3),bg("disabled",e.isUploadingDoc),nI(),iC(e.docUploadError?10:-1),nI(),iC(e.mandatoryDocs.length===0?11:-1),nI(),uC(e.mandatoryDocs);}}function Qe(s,t){s&1&&(ws(0,"p",15),QC(1,"\u{1F4A1} Documents can be added after the agent is created."),hl());}function Xe(s,t){if(s&1){let e=gC();ws(0,"div",6),QC(1,"Save to"),hl(),ws(2,"div",36)(3,"label",37)(4,"input",38),em("ngModelChange",function(a){wf(e);let r=EC();return tT(r.location,a)||(r.location=a),Cf(a)}),hl(),GI(),ws(5,"div",39)(6,"div",40)(7,"span",41),QC(8,"\u{1F464}"),hl(),ws(9,"span",42),QC(10,"Project config"),hl()(),ws(11,"p",43),QC(12),hl()()(),ws(13,"label",37)(14,"input",44),em("ngModelChange",function(a){wf(e);let r=EC();return tT(r.location,a)||(r.location=a),Cf(a)}),hl(),GI(),ws(15,"div",39)(16,"div",40)(17,"span",41),QC(18,"\u{1F4E6}"),hl(),ws(19,"span",42),QC(20,"Colocated"),hl()(),ws(21,"p",43),QC(22,"Next to coday.yaml in ./agents/ (committable)"),hl()()()(),ws(23,"p",15),QC(24,"Storage location is permanent and cannot be changed after creation."),hl();}if(s&2){let e=EC();nI(3),Ug("selected",e.location==="project"),nI(),Jg("ngModel",e.location),qI(),nI(8),Qg("~/.coday/projects/","{","name","}","/agents/ (not committed)"),nI(),Ug("selected",e.location==="colocated"),nI(),Jg("ngModel",e.location),qI();}}function Ye(s,t){if(s&1&&(ws(0,"div",17)(1,"span",6),QC(2,"Storage Location"),hl(),ws(3,"span",45),QC(4),hl(),ws(5,"p",15),QC(6,"Cannot be changed after creation."),hl()()),s&2){let e=EC();nI(3),Ug("badge-project",e.location==="project")("badge-colocated",e.location==="colocated"),nI(),Dl(" ",e.location==="project"?"\u{1F464} Project config":"\u{1F4E6} Colocated"," ");}}function $e(s,t){if(s&1&&(ws(0,"div",18)(1,"mat-icon"),QC(2,"error"),hl(),ws(3,"span"),QC(4),hl()()),s&2){let e=EC();nI(4),Yg(e.errorMessage);}}var E=class s{agentCrudApi=g(w);agentApi=g(f);dialogRef=g(z);data=g(Ue);name="";description="";instructions="";aiProvider="";modelName="";temperature=null;maxOutputTokens=null;openaiAssistantId="";integrationRows=[];mandatoryDocs=[];availableDocuments=[];isUploadingDoc=false;docUploadError="";location="project";isSaving=false;errorMessage="";isEditMode=false;ngOnInit(){if(this.isEditMode=this.data.mode==="edit",this.isEditMode&&this.data.agent){let t=this.data.agent.definition;this.name=t.name,this.description=t.description,this.instructions=t.instructions??"",this.aiProvider=t.aiProvider??"",this.modelName=t.modelName??"",this.temperature=t.temperature??null,this.maxOutputTokens=t.maxOutputTokens??null,this.openaiAssistantId=t.openaiAssistantId??"",this.location=this.data.agent.source,t.integrations&&(this.integrationRows=Object.entries(t.integrations).map(([e,n])=>({integration:e,tools:n?.join(", ")??""}))),this.mandatoryDocs=[...t.mandatoryDocs??[]],this.loadAvailableDocuments();}}loadAvailableDocuments(){this.agentCrudApi.listDocuments(this.location).subscribe({next:t=>this.availableDocuments=t,error:()=>this.availableDocuments=[]});}addDocRow(){this.mandatoryDocs.push("");}removeDocRow(t){this.mandatoryDocs.splice(t,1);}onDocFileSelected(t){let e=t.target,n=e.files?.[0];n&&(this.isUploadingDoc=true,this.docUploadError="",this.agentCrudApi.uploadDocument(this.location,n).subscribe({next:a=>{this.isUploadingDoc=false,this.mandatoryDocs.push(a.relativePath),this.loadAvailableDocuments(),e.value="";},error:a=>{this.isUploadingDoc=false,this.docUploadError=a?.error?.error??a?.message??"Upload failed",e.value="";}}));}addIntegrationRow(){this.integrationRows.push({integration:"",tools:""});}removeIntegrationRow(t){this.integrationRows.splice(t,1);}trackByIndex(t){return t}validateForm(){if(!this.name.trim())return this.errorMessage="Name is required",false;if(!/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/.test(this.name.trim()))return this.errorMessage="Name must start with alphanumeric and contain only letters, digits, hyphens or underscores",false;if(!this.description.trim())return this.errorMessage="Description is required",false;for(let t of this.integrationRows)if(!t.integration.trim())return this.errorMessage="Integration name cannot be empty",false;return true}buildDefinition(){let t=this.mandatoryDocs.map(n=>n.trim()).filter(Boolean),e=this.integrationRows.length>0?Object.fromEntries(this.integrationRows.filter(n=>n.integration.trim()).map(n=>[n.integration.trim(),n.tools.split(",").map(a=>a.trim()).filter(Boolean)])):void 0;return {name:this.name.trim(),description:this.description.trim(),instructions:this.instructions.trim()||void 0,aiProvider:this.aiProvider.trim()||void 0,modelName:this.modelName.trim()||void 0,temperature:this.temperature??void 0,maxOutputTokens:this.maxOutputTokens??void 0,openaiAssistantId:this.openaiAssistantId.trim()||void 0,integrations:e,mandatoryDocs:t.length>0?t:void 0}}save(){if(this.errorMessage="",!this.validateForm())return;let t=this.buildDefinition();this.isSaving=true,(this.isEditMode?this.agentCrudApi.updateAgent(this.name.trim(),t):this.agentCrudApi.createAgent(t,this.location)).subscribe({next:()=>{this.isSaving=false,this.agentApi.clearAllCache(),this.dialogRef.close(true);},error:n=>{this.isSaving=false,this.errorMessage=n?.error?.error||n?.message||"Failed to save agent";}});}cancel(){this.dialogRef.close(false);}static \u0275fac=function(e){return new(e||s)};static \u0275cmp=Fw({type:s,selectors:[["app-agent-form"]],decls:69,vars:18,consts:[["mat-dialog-title",""],[1,"form-container"],["appearance","outline",1,"full-width"],["matInput","","placeholder","my-agent","required","",3,"ngModelChange","ngModel","readonly"],["matInput","","placeholder","What does this agent do?","rows","2","required","",3,"ngModelChange","ngModel"],["matInput","","placeholder","System instructions for the agent...","rows","6",3,"ngModelChange","ngModel"],[1,"section-title"],[1,"row-2col"],["appearance","outline"],["matInput","","placeholder","e.g. anthropic, openai",3,"ngModelChange","ngModel"],["matInput","","placeholder","e.g. claude-sonnet-4-5",3,"ngModelChange","ngModel"],["matInput","","type","number","min","0","max","2","step","0.1","placeholder","0.0 \u2013 2.0",3,"ngModelChange","ngModel"],["matInput","","type","number","min","1","placeholder","e.g. 4096",3,"ngModelChange","ngModel"],["matInput","","placeholder","asst_...",3,"ngModelChange","ngModel"],["mat-icon-button","","type","button","title","Add integration",3,"click"],[1,"hint"],[1,"integration-row"],[1,"source-display"],[1,"error-message"],["align","end"],["mat-button","",3,"click","disabled"],["mat-raised-button","","color","primary",3,"click","disabled"],["appearance","outline",1,"integration-name"],["matInput","","placeholder","e.g. GITHUB",3,"ngModelChange","ngModel"],["appearance","outline",1,"integration-tools"],["matInput","","placeholder","Leave empty for all tools",3,"ngModelChange","ngModel"],["mat-icon-button","","type","button","title","Remove",3,"click"],["mat-icon-button","","type","button","title","Add document path",3,"click"],["title","Upload a document to the pool",1,"upload-btn"],["type","file","hidden","",3,"change","disabled"],[1,"doc-upload-error"],[1,"doc-row"],["appearance","outline",1,"doc-field"],["matInput","","placeholder","documents/guide.md",3,"ngModelChange","ngModel"],[3,"id"],[3,"value"],[1,"source-options"],[1,"source-option"],["type","radio","name","location","value","project",3,"ngModelChange","ngModel"],[1,"source-content"],[1,"source-header"],[1,"source-icon"],[1,"source-label"],[1,"source-description"],["type","radio","name","location","value","colocated",3,"ngModelChange","ngModel"],[1,"source-badge"]],template:function(e,n){e&1&&(ws(0,"h2",0),QC(1),hl(),ws(2,"mat-dialog-content")(3,"div",1)(4,"mat-form-field",2)(5,"mat-label"),QC(6,"Name"),hl(),ws(7,"input",3),em("ngModelChange",function(r){return tT(n.name,r)||(n.name=r),r}),hl(),GI(),ws(8,"mat-hint"),QC(9,"Alphanumeric, hyphens and underscores only. Cannot be changed after creation."),hl()(),ws(10,"mat-form-field",2)(11,"mat-label"),QC(12,"Description"),hl(),ws(13,"textarea",4),em("ngModelChange",function(r){return tT(n.description,r)||(n.description=r),r}),hl(),GI(),hl(),ws(14,"mat-form-field",2)(15,"mat-label"),QC(16,"Instructions"),hl(),ws(17,"textarea",5),em("ngModelChange",function(r){return tT(n.instructions,r)||(n.instructions=r),r}),hl(),GI(),ws(18,"mat-hint"),QC(19,"System prompt / instructions sent to the AI model"),hl()(),ws(20,"div",6),QC(21,"AI Configuration"),hl(),ws(22,"div",7)(23,"mat-form-field",8)(24,"mat-label"),QC(25,"AI Provider"),hl(),ws(26,"input",9),em("ngModelChange",function(r){return tT(n.aiProvider,r)||(n.aiProvider=r),r}),hl(),GI(),hl(),ws(27,"mat-form-field",8)(28,"mat-label"),QC(29,"Model Name"),hl(),ws(30,"input",10),em("ngModelChange",function(r){return tT(n.modelName,r)||(n.modelName=r),r}),hl(),GI(),hl()(),ws(31,"div",7)(32,"mat-form-field",8)(33,"mat-label"),QC(34,"Temperature"),hl(),ws(35,"input",11),em("ngModelChange",function(r){return tT(n.temperature,r)||(n.temperature=r),r}),hl(),GI(),ws(36,"mat-hint"),QC(37,"Leave empty for model default"),hl()(),ws(38,"mat-form-field",8)(39,"mat-label"),QC(40,"Max Output Tokens"),hl(),ws(41,"input",12),em("ngModelChange",function(r){return tT(n.maxOutputTokens,r)||(n.maxOutputTokens=r),r}),hl(),GI(),ws(42,"mat-hint"),QC(43,"Leave empty for model default"),hl()()(),ws(44,"mat-form-field",2)(45,"mat-label"),QC(46,"OpenAI Assistant ID"),hl(),ws(47,"input",13),em("ngModelChange",function(r){return tT(n.openaiAssistantId,r)||(n.openaiAssistantId=r),r}),hl(),GI(),ws(48,"mat-hint"),QC(49,"If set, forces aiProvider to openai"),hl()(),ws(50,"div",6)(51,"span"),QC(52,"Integrations"),hl(),ws(53,"button",14),Rg("click",function(){return n.addIntegrationRow()}),ws(54,"mat-icon"),QC(55,"add"),hl()()(),oC(56,ze,2,0,"p",15),cC(57,qe,12,2,"div",16,sC),oC(59,Je,14,5)(60,Qe,2,0,"p",15),oC(61,Xe,25,8),oC(62,Ye,7,5,"div",17),oC(63,$e,5,1,"div",18),hl()(),ws(64,"mat-dialog-actions",19)(65,"button",20),Rg("click",function(){return n.cancel()}),QC(66,"Cancel"),hl(),ws(67,"button",21),Rg("click",function(){return n.save()}),QC(68),hl()()),e&2&&(nI(),Yg(n.isEditMode?"Edit Agent":"Create Agent"),nI(6),Jg("ngModel",n.name),bg("readonly",n.isEditMode),qI(),nI(6),Jg("ngModel",n.description),qI(),nI(4),Jg("ngModel",n.instructions),qI(),nI(9),Jg("ngModel",n.aiProvider),qI(),nI(4),Jg("ngModel",n.modelName),qI(),nI(5),Jg("ngModel",n.temperature),qI(),nI(6),Jg("ngModel",n.maxOutputTokens),qI(),nI(6),Jg("ngModel",n.openaiAssistantId),qI(),nI(9),iC(n.integrationRows.length===0?56:-1),nI(),uC(n.integrationRows),nI(2),iC(n.isEditMode?59:60),nI(2),iC(n.isEditMode?-1:61),nI(),iC(n.isEditMode?62:-1),nI(),iC(n.errorMessage?63:-1),nI(2),bg("disabled",n.isSaving),nI(2),bg("disabled",n.isSaving),nI(),Dl(" ",n.isSaving?"Saving...":"Save"," "));},dependencies:[ti,Qn,ei,Ye$1,fn,mn,Zn,gt,$t,Wt,cn,zt,jt,Vt,Nt,hr,pr,Gn,Tn,Sn,nt$1,ae,le,ce,yt,wt,Pt,Xt],styles:[".form-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1rem;padding:0;min-width:560px}@media(max-width:768px){.form-container[_ngcontent-%COMP%]{min-width:auto}}.full-width[_ngcontent-%COMP%]{width:100%}.section-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;font-size:1rem;font-weight:600;margin-top:.5rem;margin-bottom:-.25rem}.row-2col[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:1rem}@media(max-width:768px){.row-2col[_ngcontent-%COMP%]{grid-template-columns:1fr}}.integration-row[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.5rem}.integration-row[_ngcontent-%COMP%] .integration-name[_ngcontent-%COMP%]{flex:0 0 180px}.integration-row[_ngcontent-%COMP%] .integration-tools[_ngcontent-%COMP%]{flex:1}.hint[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-text-secondary);font-style:italic}.source-options[_ngcontent-%COMP%]{display:flex;gap:1rem;margin-bottom:.5rem}@media(max-width:768px){.source-options[_ngcontent-%COMP%]{flex-direction:column}}.source-option[_ngcontent-%COMP%]{flex:1;display:flex;align-items:flex-start;gap:.75rem;padding:1rem;background:var(--color-bg);border:2px solid var(--color-border);border-radius:8px;cursor:pointer;transition:all .2s ease}.source-option[_ngcontent-%COMP%]:hover{border-color:var(--color-primary);background:var(--color-bg-hover)}.source-option.selected[_ngcontent-%COMP%]{border-color:var(--color-primary);background:var(--color-bg-hover);box-shadow:0 0 0 1px var(--color-primary)}.source-option[_ngcontent-%COMP%] input[type=radio][_ngcontent-%COMP%]{margin-top:2px;cursor:pointer}.source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%]{flex:1}.source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%] .source-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;margin-bottom:.5rem}.source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%] .source-header[_ngcontent-%COMP%] .source-icon[_ngcontent-%COMP%]{font-size:1.25rem}.source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%] .source-header[_ngcontent-%COMP%] .source-label[_ngcontent-%COMP%]{font-weight:600;font-size:.95rem}.source-option[_ngcontent-%COMP%] .source-content[_ngcontent-%COMP%] .source-description[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-text-secondary);font-family:monospace;line-height:1.4}.source-display[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.source-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem 1rem;border-radius:6px;font-size:.9rem;font-weight:500}.source-badge.badge-project[_ngcontent-%COMP%]{background:#2196f31a;color:#2196f3;border:1px solid rgba(33,150,243,.3)}.source-badge.badge-colocated[_ngcontent-%COMP%]{background:#4caf501a;color:#4caf50;border:1px solid rgba(76,175,80,.3)}.doc-row[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.5rem}.doc-row[_ngcontent-%COMP%] .doc-field[_ngcontent-%COMP%]{flex:1}.upload-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%;cursor:pointer;color:var(--color-text-secondary);transition:background .2s}.upload-btn[_ngcontent-%COMP%]:hover{background:var(--color-bg-hover);color:var(--color-primary)}.upload-btn.uploading[_ngcontent-%COMP%]{opacity:.5;cursor:wait}.upload-btn[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:1.25rem;width:1.25rem;height:1.25rem}.doc-upload-error[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-error)}.error-message[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:.75rem;background:#f443361a;border:1px solid var(--color-error);border-radius:4px;color:var(--color-error)}.error-message[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:1.25rem;width:1.25rem;height:1.25rem}.error-message[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{flex:1}"],changeDetection:1})};var et=()=>[],tt=s=>({id:s});function nt(s,t){if(s&1&&(ws(0,"div",5),QC(1),hl()),s&2){let e=EC();nI(),Yg(e.errorMessage());}}function it(s,t){if(s&1){let e=gC();ws(0,"ds-entity-card",7),Rg("selected",function(a){wf(e);let r=EC();return Cf(r.onEdit(a))}),yl(1,8),ws(2,"button",9),Rg("click",function(a){return a.stopPropagation()}),ws(3,"mat-icon"),QC(4,"more_vert"),hl()(),vl(),hl();}if(s&2){let e=t.$implicit;EC();let n=MC(9);bg("id",e.id)("name",e.name)("description",e.description)("badges",e.badges??aT(6,et)),nI(2),bg("matMenuTriggerFor",n)("matMenuTriggerData",cT(7,tt,e.id));}}function ot(s,t){if(s&1){let e=gC();ws(0,"button",10),Rg("click",function(){let a=wf(e).id,r=EC();return Cf(r.onEdit(a))}),ws(1,"mat-icon"),QC(2,"edit"),hl(),QC(3," Edit "),hl(),ws(4,"button",11),Rg("click",function(){let a=wf(e).id,r=EC();return Cf(r.onDelete(a))}),ws(5,"mat-icon"),QC(6,"delete"),hl(),QC(7," Delete "),hl();}}var Ve=class s{agentCrudApi=g(w);location=g(_m);dialog=g(Re);agents=Gi([]);isLoading=Gi(false);errorMessage=Gi(null);agentItems=ET(()=>this.agents().map(t=>({id:t.name,name:t.name,description:t.description,badges:this.buildBadges(t),groupKey:t.source,groupLabel:t.source==="project"?"Project (~/.coday/)":"Colocated (next to coday.yaml)"})));ngOnInit(){this.loadAgents();}loadAgents(){this.isLoading.set(true),this.errorMessage.set(null),this.agentCrudApi.listEditableAgents().subscribe({next:t=>{this.agents.set(t),this.isLoading.set(false);},error:t=>{this.errorMessage.set(t?.error?.error??"Failed to load agents"),this.isLoading.set(false);}});}onBack(){this.location.back();}onCreate(){this.dialog.open(E,{width:"700px",maxHeight:"90vh",data:{mode:"create"}}).afterClosed().subscribe(e=>{e&&this.loadAgents();});}onEdit(t){this.agentCrudApi.getAgent(t).subscribe({next:e=>{this.dialog.open(E,{width:"700px",maxHeight:"90vh",data:{mode:"edit",agent:e}}).afterClosed().subscribe(a=>{a&&this.loadAgents();});},error:e=>this.errorMessage.set(e?.error?.error??"Failed to load agent")});}onDelete(t){confirm(`Are you sure you want to delete agent "${t}"?`)&&this.agentCrudApi.deleteAgent(t).subscribe({next:()=>this.loadAgents(),error:e=>this.errorMessage.set(e?.error?.error??"Failed to delete agent")});}buildBadges(t){return [t.source==="project"?{label:"project",variant:"info"}:{label:"colocated",variant:"success"}]}static \u0275fac=function(e){return new(e||s)};static \u0275cmp=Fw({type:s,selectors:[["app-agent-list"]],decls:11,vars:5,consts:[["agentCard",""],["cardMenu","matMenu"],[1,"agent-list-page"],["title","Agents","cardMinWidth","260px","contentMaxWidth","1400px","searchPlaceholder","Filter agents\u2026","emptyMessage","No file-based agents found.",3,"createRequested","items","loading","showCreate","itemTemplate"],["toolbar-start","","mat-icon-button","","title","Back",3,"click"],[1,"agent-list__error"],["matMenuContent",""],[3,"selected","id","name","description","badges"],["dsCardActions",""],["mat-icon-button","",3,"click","matMenuTriggerFor","matMenuTriggerData"],["mat-menu-item","",3,"click"],["mat-menu-item","",1,"agent-list__delete-item",3,"click"]],template:function(e,n){if(e&1&&(ws(0,"div",2)(1,"ds-entity-list",3),Rg("createRequested",function(){return n.onCreate()}),ws(2,"button",4),Rg("click",function(){return n.onBack()}),ws(3,"mat-icon"),QC(4,"chevron_left"),hl()()(),oC(5,nt,2,1,"div",5),hl(),Eg(6,it,5,9,"ng-template",null,0,mT),ws(8,"mat-menu",null,1),Eg(10,ot,8,0,"ng-template",6),hl()),e&2){let a=MC(7);nI(),bg("items",n.agentItems())("loading",n.isLoading())("showCreate",true)("itemTemplate",a),nI(4),iC(n.errorMessage()?5:-1);}},dependencies:[Wn,ot$1,it$1,hr,Gn,yt,wt,In,De,Be,ya,En],styles:["[_nghost-%COMP%]{display:block;width:100%;min-height:100vh;background:var(--color-bg);overflow-y:auto}.agent-list__delete-item[_ngcontent-%COMP%]{color:var(--color-error, #ff3b30)}.agent-list__delete-item[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{color:inherit}.agent-list__error[_ngcontent-%COMP%]{margin:1rem auto;max-width:900px;padding:.75rem 1rem;background:#dc262614;border:1px solid rgba(220,38,38,.25);border-radius:8px;color:var(--color-error, #ff3b30);font-size:.875rem}"],changeDetection:1})};export{Ve as AgentListComponent};
|