@aquera/data-visualizer-sdk 0.0.38 → 0.0.39
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/{chunk-4IC7KF7O.js → chunk-4XZFPFUO.js} +1 -1
- package/{chunk-3TJC52W7.js → chunk-7OZOFHA3.js} +1 -1
- package/{chunk-LO26PXZ5.js → chunk-CCS4AZTM.js} +1 -1
- package/{chunk-YZGNXTBA.js → chunk-ENDHTKIB.js} +564 -564
- package/{chunk-EXISUGMQ.js → chunk-L4VRPPAY.js} +3 -3
- package/chunk-MAL6O7D5.js +11 -0
- package/{chunk-P4LLVQ3Z.js → chunk-TSSIT4HP.js} +2 -2
- package/main.js +1 -1
- package/package.json +1 -1
- package/chunk-5S3JTQ6I.js +0 -11
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{$ as ue,$a as Ut,A as Mt,Aa as Lt,Ba as Ce,F as St,Fa as Ue,H as kt,Ha as $t,J as ie,K as Tt,N as Ot,P as Et,R as Ft,Ra as Gt,Sa as Bt,T as At,U as It,V as Rt,W as zt,X as Nt,Xa as Ie,Y as me,Ya as oe,_a as je,a as Je,ab as Re,b as Xe,ba as Be,bb as jt,c as Se,d as ut,e as bt,eb as O,f as ke,fa as Vt,fb as Kt,ga as Wt,i as Te,jb as Ke,kb as Zt,l as $,m as G,ma as Oe,n as ft,na as Ht,o as _t,ob as Yt,p as yt,pa as Ee,pb as Qt,q as Ct,qa as Fe,qb as Jt,rb as ze,s as vt,t as xt,u as wt,v as ne,vb as Xt,w as Pt,x as Dt,xb as en,ya as Ae,z as pe,za as qt}from"./chunk-YZGNXTBA.js";import{$ as ot,Ab as ce,Bb as De,Cb as _e,Db as N,Eb as M,Fb as ht,Ia as st,Ib as C,Ja as lt,Kb as d,Na as c,Nb as ge,O as z,Ob as X,Pb as ee,R as et,S as tt,Sb as H,T as u,Tb as pt,Ub as te,W as nt,Wb as D,Xb as L,Y as b,Yb as Ge,Z as f,Za as Pe,_ as it,ca as rt,d as $e,db as dt,ea as fe,eb as q,ec as Me,fa as we,fc as se,gc as he,ia as at,ja as m,jb as W,kc as ye,ma as Z,ob as ct,p as k,pb as ae,pc as T,qb as _,ra as de,rb as y,sb as J,sc as le,tb as gt,tc as Y,ub as A,vb as I,vc as mt,wb as x,xb as s,yb as l,zb as p}from"./chunk-BTA57TVR.js";import{a as P,b as E}from"./chunk-ZW5NV4UO.js";function dn(){return{dashboardsTitle:"Dashboards",loadingDashboards:"Loading dashboards\u2026",noDashboardsTitle:"No dashboards yet",noDashboardsSub:"Generate one from your data, or create it in the builder.",generateDashboardButton:"Generate dashboard",refreshButton:"Refresh",exportButton:"Export",editButton:"Edit",renamePlaceholder:"Dashboard name",askAqueraButton:"Ask Aquera",errors:{loadFailedFallback:"Could not load dashboards",saveFailedFallback:"Could not save the dashboard",refreshFailedFallback:"Could not refresh the dashboard",exportFailedFallback:"Could not export the dashboard"}}}function cn(){return{enabled:!0,ask:!0,changeChartType:!0,manageFilters:!0,customizeColors:!1,chartData:!0,setAlert:!0,forecast:!0,addToStory:!1,exportPng:!0,exportCsv:!0,print:!0}}function gn(){return{mcpGateway:pe.MCP_GATEWAY_ENABLED??!1,aiPrompt:!0,createDashboard:!0,autoGenerate:!0,export:!0,timeRangePicker:!0,rename:!0,refresh:!0,executiveSummary:!0,edit:!0,widgetMenu:cn()}}function Ze(){return{baseUrl:pe.baseUrl??"",mcpUrl:pe.MCP_URL??null,tokenizedOrigins:[pe.baseUrl].filter(o=>!!o),headers:{},customerId:null,productId:null,productName:null,authMode:"inherit",authToken:null,getToken:null,resolvedToken:null,onUnauthorized:null,ssoEnabled:pe.SSO_ENABLED??!1,features:gn(),ui:{theme:"light",density:"comfortable",header:!0,dashboardList:!0,canvasBackgroundColor:null,locale:"en",autoHeight:!1},copy:dn(),hrefs:{askAquera:"/ask-aquera",builder:"/manage-dashboards"},initialDashboard:null,initialWidgets:[],timeRange:null}}var tn=xt("dashboards",Ze),V=new et("DASHBOARDS_CONFIG",{factory:()=>hn}),nn=m(0),hn=T(()=>(nn(),tn.read()));function on(){let o=wt(tn,Ze());return{config:o.config,set:t=>{let e=o.set(t);return nn.update(n=>n+1),e}}}function rn(o){let t=Ze(),e=E(P(P({},t),ne(o)),{features:E(P(P({},t.features),ne(o.features??{})),{widgetMenu:P(P({},t.features.widgetMenu),ne(o.features?.widgetMenu??{}))}),ui:P(P({},t.ui),ne(o.ui??{})),hrefs:P(P({},t.hrefs),ne(o.hrefs??{})),copy:E(P(P({},t.copy),ne(o.copy??{})),{errors:P(P({},t.copy.errors),ne(o.copy?.errors??{}))}),headers:P(P({},t.headers),o.headers??{})});return o.tokenizedOrigins||(e.tokenizedOrigins=[e.baseUrl,e.mcpUrl].filter(n=>!!n)),e}var B=class o{config=u(V);requests$=new $e;requests=this.requests$.asObservable();timeRangeChanges$=new $e;timeRangeChanges=this.timeRangeChanges$.asObservable();toAskAquera(){this.requests$.next({to:this.config().hrefs.askAquera})}toAskAqueraDashboard(t,e){this.requests$.next({to:`${this.config().hrefs.askAquera}/dashboard/${t}`,queryParams:e})}toBuilder(t){this.requests$.next({to:`${this.config().hrefs.builder}/${t}`})}announceTimeRange(t){this.timeRangeChanges$.next(t)}static \u0275fac=function(e){return new(e||o)};static \u0275prov=z({token:o,factory:o.\u0275fac})};var F=class o{config=u(V);get baseUrl(){return this.config().baseUrl}get MCP_URL(){return this.config().mcpUrl??""}get MCP_GATEWAY_ENABLED(){return this.config().features.mcpGateway}get SSO_ENABLED(){return this.config().ssoEnabled}getCustomerId(){return this.config().customerId??""}getProductId(){return this.config().productId??""}static \u0275fac=function(e){return new(e||o)};static \u0275prov=z({token:o,factory:o.\u0275fac})};var re=class o{constructor(t){this.http=t}http;environment=u(F);tokenStore=u(ie);publishRepo=u(O);lastSentCustomerId=null;lastSentProductId=null;get customerId(){return this.tokenStore.tenantId()??""}mcpGatewayUrl(){return`${this.environment.baseUrl}/dviz-mcp`}async callMcpTool(t,e={}){let n=this.customerId,i=this.environment.getProductId(),r={};n!==this.lastSentCustomerId&&(r.customerId=n),i!==this.lastSentProductId&&(r.productId=i);let a;try{a=await k(this.http.post(this.mcpGatewayUrl(),{jsonrpc:"2.0",id:Date.now(),method:"tools/call",params:{name:t,arguments:e}},{headers:{Accept:"application/json, text/event-stream"},params:r})),this.lastSentCustomerId=n,this.lastSentProductId=i}catch(h){throw h instanceof $?new Error(h.error?.error?.message||h.error?.message||h.message):h}if(a.error)throw new Error(a.error.message);let g=a.result;if(g?.isError)throw new Error(g.structuredContent?.error?.message??g.content?.[0]?.text??`${t} failed`);return g?.structuredContent??{}}async loadDashboards(){return(await this.publishRepo.listDashboards({published:"true",limit:100})).filter(e=>e.isPublished===!0||e.version==="published").map(e=>({id:e.id,name:e.name??"Untitled",description:e.description,createdAt:e.createdAt??new Date().toISOString(),updatedAt:e.updatedAt,isAutoGenerated:e.isAutoGenerated===!0,category:e.category??null}))}async renameDashboard(t,e){if(!this.environment.MCP_GATEWAY_ENABLED){try{await k(this.http.put(`${this.environment.baseUrl}/api/customers/${this.customerId}/products/${this.environment.getProductId()}/workforce/dashboards/${t}?published=true`,{name:e}))}catch(n){throw n instanceof $?new Error(n.error?.error||n.message):n}return}await this.callMcpTool("updateDashboard",{dashboardId:t,name:e,published:!0})}async fetchDashboard(t){let e,n=!1;if(this.environment.MCP_GATEWAY_ENABLED){let i=await this.callMcpTool("getDashboard",{dashboardId:t,published:"true"});e=i?.dashboard??{},n=i?.canRefresh===!0}else{let i=await k(this.http.get(`${this.environment.baseUrl}/api/customers/${this.customerId}/products/${this.environment.getProductId()}/workforce/dashboards/${t}?published=true`));e=i?.data??i,n=i?.canRefresh===!0}return{id:e.id,name:e.name??"Untitled",widgets:await this.mapAndHydrateWidgets(e.widgets),connectionId:e.connectionId,isPipeline:e.isPipeline,adapterType:e.adapterType,category:e.category??null,canRefresh:n}}async refreshDashboard(t){if(!this.environment.MCP_GATEWAY_ENABLED){let n=await k(this.http.post(`${this.environment.baseUrl}/api/customers/${this.customerId}/products/${this.environment.getProductId()}/workforce/dashboards/${t}/refresh`,{})),i=n?.data??n;return{widgets:await this.mapAndHydrateWidgets(i?.widgets)}}let e=await this.callMcpTool("refreshDashboard",{dashboardId:t});return{widgets:await this.mapAndHydrateWidgets(e?.refresh?.widgets)}}async previewWidgetTemplateDetailPanel(t){return(await k(this.http.post(`${this.environment.baseUrl}/api/customers/${this.customerId}/products/${this.environment.getProductId()}/workforce/widget-templates/${t}/detail-panel`,{}))).data}async previewWidgetDetailPanelDefinition(t){return(await k(this.http.post(`${this.environment.baseUrl}/api/customers/${this.customerId}/products/${this.environment.getProductId()}/workforce/widget-templates/preview-detail-panel`,{detailPanel:t}))).data}async mapAndHydrateWidgets(t){let e=(t??[]).map(n=>({id:n.id,title:n.title,type:n.widgetType??"chart",layout:n.layout??{x:0,y:0,w:12,h:4},nileConfig:{chart:n.chart??n.config?.chart??{},aq:n.config?.aq??{},_meta:n.config?._meta},drilldownBy:Array.isArray(n.drilldownBy)?n.drilldownBy:void 0,dataSourceId:n.dataSourceId,queryMeta:n.queryMeta,category:n.category??null}));return await Promise.all(e.map(n=>oe(n.nileConfig))),e}static \u0275fac=function(e){return new(e||o)(tt(G))};static \u0275prov=z({token:o,factory:o.\u0275fac})};var j=class o{environment=u(F);http=u(G);tokenStore=u(ie);get customerId(){return this.tokenStore.tenantId()??""}async fetchGridPage(t,e,n,i,r,a,g,h){let w=`${this.environment.baseUrl}/api/customers/${this.customerId}/products/${this.environment.getProductId()}/workforce/data-grid/${t}?pageIndex=${e}&pageSize=${n}`,v=(i??[]).filter(S=>S&&S.value!=null&&String(S.value).trim()!=="");return v.length&&(w+=`&filters=${encodeURIComponent(JSON.stringify(v))}`),r&&Object.keys(r).length&&(w+=`&dashboardFilters=${encodeURIComponent(JSON.stringify(r))}`),g&&g.length&&(w+=`&resolvedFilters=${encodeURIComponent(JSON.stringify(g))}`),a&&(w+=`&dashboardId=${encodeURIComponent(a)}`),h&&(w+=`&conversationId=${encodeURIComponent(h)}`),k(this.http.get(w))}async generateWidget(t,e){let n=Ot()?{prompt:t}:{prompt:t,dataSourceId:e},i;try{i=await k(this.http.post(`${this.environment.baseUrl}/api/customers/${this.customerId}/products/${this.environment.getProductId()}/workforce/widget/generate`,n))}catch(g){if(g instanceof $){let h=g.error?.error||g.message;throw new Error(h)}throw g}if(i?.success===!1)throw new Error(i.error||"Request failed");let r=i?.data??i;if(!r?.config)throw new Error("Invalid response from widget generate API");let a=r;return await oe(a.config),a}async filterSuggest(t,e,n,i){let r=n.filter(h=>!!h.id).map(h=>({widgetId:h.id})),a;try{a=await k(this.http.post(`${this.environment.baseUrl}/api/customers/${this.customerId}/products/${this.environment.getProductId()}/workforce/dashboards/${t}/filter/suggest?status=${i??"draft"}`,{query:e,refreshCache:!1,widgets:r}))}catch(h){throw h instanceof $?new Error(h.error?.error||h.message):h}if(a?.success===!1)throw new Error(a.error||"Request failed");let g=a?.data??a??{};return{nextToken:g.nextToken,completions:Array.isArray(g.completions)?g.completions:[],suggestions:Array.isArray(g.suggestions)?g.suggestions:[]}}async applyFilters(t,e,n,i,r,a){let g=await new Promise((K,Q)=>{let Qe=this.http.post(`${this.environment.baseUrl}/api/customers/${this.customerId}/products/${this.environment.getProductId()}/workforce/dashboards/${n}/filter/apply?status=${i??"draft"}`,jt(t,e,a)).subscribe({next:R=>K(R),error:R=>{R instanceof $?Q(new Error(R.error?.error||R.message)):Q(R)}});if(r){if(r.aborted){Qe.unsubscribe();let R=new Error("Aborted");R.name="AbortError",Q(R);return}r.addEventListener("abort",()=>{Qe.unsubscribe();let R=new Error("Aborted");R.name="AbortError",Q(R)},{once:!0})}});if(g?.success===!1)throw new Error(g.error||"Request failed");let h=g?.data??g,w=Array.isArray(h)?h:h?.widgets;if(!Array.isArray(w))throw new Error("Invalid response from apply-filters API");let v=!Array.isArray(h)&&Array.isArray(h?.resolvedFilters)?h.resolvedFilters:[],S=!Array.isArray(h)&&Array.isArray(h?.filterGroups)?h.filterGroups:[];return await Promise.all(w.map(K=>oe(K.config))),{widgets:w,resolvedFilters:v,filterGroups:S}}static \u0275fac=function(e){return new(e||o)};static \u0275prov=z({token:o,factory:o.\u0275fac})};var mn=["grid"];function un(o,t){if(o&1&&D(0),o&2){let e=d(2);Ge(" ",e.widgetDetailPanelTitle," ")}}function bn(o,t){o&1&&p(0,"nile-skeleton-loader",6)}function fn(o,t){if(o&1&&p(0,"shared-dashboard-grid",8),o&2){let e=d(2);x("widgets",e.widgetDetailPanelWidgets)("widgetsLoading",e.widgetDetailPanelLoading)("editMode",!1)("canvasBackgroundColor",e.canvasBackgroundColor())("selectable",!1)("showWidgetMenu",e.widgetMenu().enabled)("canAsk",e.widgetMenu().ask)("canChangeChartType",e.widgetMenu().changeChartType)("canManageFilters",e.widgetMenu().manageFilters)("canCustomizeColors",e.widgetMenu().customizeColors)("canViewChartData",e.widgetMenu().chartData)("canSetAlert",e.widgetMenu().setAlert)("canForecast",e.widgetMenu().forecast)("canAddToStory",e.widgetMenu().addToStory)("canExportPng",e.widgetMenu().exportPng)("canExportCsv",e.widgetMenu().exportCsv)("canPrint",e.widgetMenu().print)}}function _n(o,t){o&1&&(s(0,"div",9)(1,"div",10),p(2,"nile-skeleton-loader",11)(3,"nile-skeleton-loader",11)(4,"nile-skeleton-loader",11),l(),p(5,"nile-skeleton-loader",12),l())}function yn(o,t){if(o&1){let e=M();s(0,"div",2)(1,"div",4)(2,"nile-breadcrumb",5),C("nile-click",function(){b(e);let i=d();return f(i.closeWidgetDetailPanel())}),s(3,"nile-breadcrumb-item"),D(4),l(),s(5,"nile-breadcrumb-item"),_(6,un,1,1)(7,bn,1,0,"nile-skeleton-loader",6),l()()(),s(8,"div",7),_(9,fn,1,17,"shared-dashboard-grid",8)(10,_n,6,0,"div",9),l()()}if(o&2){let e=d();c(4),Ge(" ",e.dashboardName," "),c(2),y(e.widgetDetailPanelTitle?6:7),c(3),y(e.widgetDetailPanelWidgets.length?9:e.widgetDetailPanelLoading?10:-1)}}var ve=class o{widgets=[];dashboardId=null;applyingFilters=!1;widgetDetailPanelOpen=!1;widgetDetailPanelLoading=!1;widgetDetailPanelTitle=null;widgetDetailPanelWidgets=[];dashboardName=null;widgetDetailPanelSkeletonSlots=[];widgetDetailPanelSkeletonHeight(){return this.widgetDetailPanelSkeletonSlots.length?Math.max(...this.widgetDetailPanelSkeletonSlots.map(t=>(t.y+t.h)*72)):0}async onKpiWidgetClicked(t){if(this.widgetDetailPanelLoading)return;let e=t.config?._meta,n=e?.templateId??null,i=e?.detailPanel??null;if(!(!n&&!i)){this.beginCardMorph(t.id),this.runViewTransition(()=>{this.widgetDetailPanelOpen=!0,this.widgetDetailPanelLoading=!0,this.widgetDetailPanelTitle=i?.title??t.title??null,this.widgetDetailPanelSkeletonSlots=(i?.widgets??[]).map(r=>r.layout).filter(r=>!!r),this.widgetDetailPanelWidgets=this.detailPanelPlaceholders(i),this.cdr.markForCheck()});try{let r=i?await this.dashboardsService.previewWidgetDetailPanelDefinition(i):await this.dashboardsService.previewWidgetTemplateDetailPanel(String(n));if(!r.widgets.length){this.widgetDetailPanelOpen=!1;return}this.widgetDetailPanelTitle=r.title??t.title??null;let a=r.widgets.map((g,h)=>E(P({},g),{id:`detail-panel-${h}`}));this.widgetDetailPanelWidgets=a.every(g=>g.layout)?a:Be(a)}catch{this.widgetDetailPanelOpen=!1}finally{this.widgetDetailPanelLoading=!1,this.cdr.markForCheck()}}}detailPanelPlaceholders(t){let e=t?.widgets??[];if(!e.length)return[];let n=e.map((i,r)=>E(P({},i),{id:`detail-panel-${r}`}));return n.every(i=>i.layout)?n:Be(n)}closeWidgetDetailPanel(){this.runViewTransition(()=>{this.widgetDetailPanelOpen=!1,this.widgetDetailPanelTitle=null,this.widgetDetailPanelWidgets=[],this.widgetDetailPanelSkeletonSlots=[],this.cdr.markForCheck()},"back")}currentTimeRange=null;lastMonitoredTotal=null;isRefreshingData=!1;activeDashboardFilters=null;activeResolvedFilters=null;activeFilterGroups=[];applySummary=null;alertDrawerOpen=!1;alertWidget=null;alertFilterPredicates=null;alertFilterHasOr=!1;alertAuthoringMode="widget";alertSource=null;gridRef;dashboardsConfig=u(V);environment=u(F);http=u(G);zone=u(we);navigator=u(B);openAiService=u(j);dashboardsService=u(re);forecastService=u(Wt);timeFilterPref=u(Kt);cdr=u(mt);appRef=u(ct);hostEl=u(de);static MORPH_NAME="dv-detail-morph";morphSourceEl=null;beginCardMorph(t){if(!t||typeof CSS>"u"||!CSS.escape)return!1;let e=this.hostEl.nativeElement.querySelector(`.widget-card[data-widget-id="${CSS.escape(String(t))}"]`);if(!e)return!1;let n=e.getBoundingClientRect();return n.height>0&&n.bottom>0&&n.top<window.innerHeight?(e.style.viewTransitionName=o.MORPH_NAME,this.morphSourceEl=e,this.hostEl.nativeElement.classList.add("dv-morphing"),!0):!1}endCardMorph(){this.morphSourceEl&&(this.morphSourceEl.style.removeProperty("view-transition-name"),this.morphSourceEl=null),this.hostEl.nativeElement.classList.remove("dv-morphing")}runViewTransition(t,e="forward"){let n=document,i=window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;if(typeof n.startViewTransition!="function"||i){t(),this.endCardMorph();return}let r=document.documentElement;e==="back"&&(r.dataset.vtDirection="back");let a=()=>{delete r.dataset.vtDirection,this.endCardMorph()};n.startViewTransition(()=>{t(),this.appRef.tick()})?.finished?.then(a,a)??a()}sessionMap=new Map;primedFilterWidgets=new Set;filterSuggestCache=new Map;filterSuggestInflight=new Set;applyFiltersSeq=0;applyFiltersAbort;viewInited=!1;openInBuilder(){!this.dashboardId||!this.dashboardsConfig().features.edit||this.navigator.toBuilder(this.dashboardId)}canvasBackgroundColor(){return this.dashboardsConfig().ui.canvasBackgroundColor}autoHeight(){return this.dashboardsConfig().ui.autoHeight}widgetMenu(){return this.dashboardsConfig().features.widgetMenu}set config(t){let e=t?.id??null,n=e!==this.dashboardId;if(n&&(this.primedFilterWidgets.clear(),this.filterSuggestCache.clear(),this.filterSuggestInflight.clear(),this.activeDashboardFilters=null,this.activeResolvedFilters=null,this.activeFilterGroups=[],this.applySummary=null,this.currentTimeRange=null,this.lastMonitoredTotal=null),!t){this.widgets=[],this.dashboardId=null,this.alertSource=null,this.dashboardName=null;return}this.dashboardId=e,this.dashboardName=t.name??null,this.alertSource={connectionId:t.connectionId,isPipeline:t.isPipeline,adapterType:t.adapterType},this.widgets=(t.widgets??[]).map(r=>({id:r.id,title:r.title??"",widgetType:r.type??"chart",layout:r.layout,config:r.nileConfig,drilldownBy:r.drilldownBy,dataSourceId:r.dataSourceId,queryMeta:r.queryMeta,category:r.category??null})),this.forecastable=t.forecastable??{};let i=this.collectInitialFilters(this.widgets);i?this.applyInitialFilters(i):n&&t.canRefresh&&this.refreshLoadedDashboardData(e),this.viewInited&&queueMicrotask(()=>this.primeFilterWidgets())}async refreshLoadedDashboardData(t){this.isRefreshingData=!0;try{let{widgets:e}=await this.dashboardsService.refreshDashboard(t);this.dashboardId===t&&!this.activeDashboardFilters&&(this.widgets=e.map(n=>({id:n.id,title:n.title??"",widgetType:n.type??"chart",layout:n.layout,config:n.nileConfig,drilldownBy:n.drilldownBy,dataSourceId:n.dataSourceId,queryMeta:n.queryMeta,category:n.category??null})))}catch(e){console.error("Failed to refresh dashboard data:",e)}finally{this.isRefreshingData=!1,this.cdr.markForCheck()}}collectInitialFilters(t){let e={};for(let n of t){let i=n.config?.chart;if(i?.type==="filter")for(let r of i.controls??[]){if(!r.id)continue;let a=r.value;a!=null&&(typeof a=="string"&&a.trim()===""||(e[r.id]=a))}}return Object.keys(e).length>0?e:null}async applyInitialFilters(t){let e=this.widgets.filter(r=>!ue(r));if(e.length===0||!this.dashboardId)return;this.applyFiltersAbort?.abort();let n=new AbortController;this.applyFiltersAbort=n;let i=++this.applyFiltersSeq;this.applyingFilters=!0;try{let{widgets:r,resolvedFilters:a,filterGroups:g}=await this.openAiService.applyFilters(e,t,this.dashboardId,"published",n.signal,{timeRange:this.currentTimeRange??void 0});if(i!==this.applyFiltersSeq)return;this.widgets=me(this.widgets,r),this.activeDashboardFilters=t,this.activeResolvedFilters=a,this.activeFilterGroups=g,this.applySummary=Re(r,this.buildActiveFilters(t))}catch(r){if(r?.name==="AbortError")return;console.error("Apply initial filters failed:",r)}finally{i===this.applyFiltersSeq&&(this.applyingFilters=!1),this.cdr.markForCheck()}}ngAfterViewInit(){this.viewInited=!0,queueMicrotask(()=>this.primeFilterWidgets())}alertTargetWidget(){let t=this.widgets.filter(n=>!ue(n)),e=t.filter(n=>!!n.config?.chart?.gridId);return e.length===1?e[0]:t.find(n=>!!n.queryMeta?.sql)??null}onWidgetPatchedByGrid(t){this.widgets=this.widgets.map(e=>e.id===t.id?t:e),this.cdr.markForCheck()}forecastable={};forecastBusy=new Set;forecastingWidgetId=null;async onForecast(t){let e=this.dashboardId,n=String(t.widget.id);if(!(!e||this.forecastBusy.has(n))){this.forecastBusy.add(n),this.forecastingWidgetId=n,this.cdr.markForCheck();try{let i=t.enable?await this.forecastService.addToWidget(e,n,t.settings??{}):await this.forecastService.removeFromWidget(e,n);if(t.enable&&i?.guardrails&&i.guardrails.passed===!1)return;i?.widget&&this.applyForecastedWidget(i.widget),Ce({variant:"success",title:t.enable?t.settings?"Forecast updated":"Forecast added":"Forecast removed",content:t.enable?"The projection is shown with its confidence range.":"The chart is back to its measured history."})}catch{}finally{this.forecastBusy.delete(n),this.forecastingWidgetId=null,this.cdr.markForCheck()}}}applyForecastedWidget(t){this.widgets=this.widgets.map(e=>String(e.id)===String(t.id)?E(P({},e),{config:t.config?.chart??t.nileConfig??e.config,queryMeta:t.queryMeta??e.queryMeta}):e)}onSetAlert(t){if(ue(t)){let e=this.alertTargetWidget();if(!e)return;this.alertWidget=e,this.alertFilterPredicates=this.activeResolvedFilters,this.alertFilterHasOr=this.activeFilterGroups.length>1,this.alertAuthoringMode="filter"}else this.alertWidget=t,this.alertFilterPredicates=null,this.alertFilterHasOr=!1,this.alertAuthoringMode="widget";this.alertDrawerOpen=!0,this.cdr.markForCheck()}onAlertClosed(){this.alertDrawerOpen=!1,this.cdr.markForCheck()}onAlertSaved(){this.alertDrawerOpen=!1,this.cdr.markForCheck()}onFilterChange(t){let e=t.widgetId,n=t.controlId;!e||!n||this.dashboardId&&this.fetchSuggestionsOnce(e,n,this.dashboardId)}fetchSuggestionsOnce(t,e,n){let i=this.filterSuggestCache.get(t);if(i){this.gridRef?.patchFilterSuggestions(t,e,i);return}this.filterSuggestInflight.has(t)||(this.filterSuggestInflight.add(t),(async()=>{try{let r=await this.openAiService.filterSuggest(n,"",this.widgets,"published");this.applyFilterSuggestions(t,e,r)}catch(r){console.warn("Filter suggest failed:",r)}finally{this.filterSuggestInflight.delete(t)}})())}async onFilterSubmit(t){if(this.isEmptyFilters(t.filters)){await this.reloadDashboard();return}let e=this.widgets.filter(r=>!ue(r));if(e.length===0||!this.dashboardId)return;this.applyFiltersAbort?.abort();let n=new AbortController;this.applyFiltersAbort=n;let i=++this.applyFiltersSeq;this.applyingFilters=!0;try{let{widgets:r,resolvedFilters:a,filterGroups:g}=await this.openAiService.applyFilters(e,t.filters,this.dashboardId,"published",n.signal,{mode:t.mode,prompt:t.prompt,timeRange:this.currentTimeRange??void 0});if(i!==this.applyFiltersSeq)return;this.widgets=me(this.widgets,r),this.activeDashboardFilters=t.filters,this.lastMonitoredTotal=null,this.activeResolvedFilters=a,this.activeFilterGroups=g,this.applySummary=Re(r,this.buildActiveFilters(t.filters))}catch(r){if(r?.name==="AbortError")return;console.error("Apply filters failed:",r)}finally{i===this.applyFiltersSeq&&(this.applyingFilters=!1),this.cdr.markForCheck()}}timeFilterShown(){return this.dashboardsConfig().features.timeRangePicker&&this.timeFilterPref.isEnabled(this.dashboardId)}onPickerTimeRange(t){this.applyTimeRange(t),this.navigator.announceTimeRange(t)}async applyTimeRange(t){if(this.currentTimeRange=t,t===null&&this.isEmptyFilters(this.activeDashboardFilters)){await this.reloadDashboard();return}let e=this.widgets.filter(r=>!ue(r));if(e.length===0||!this.dashboardId)return;this.applyFiltersAbort?.abort();let n=new AbortController;this.applyFiltersAbort=n;let i=++this.applyFiltersSeq;this.applyingFilters=!0;try{let r=this.activeDashboardFilters??{},{widgets:a,resolvedFilters:g,filterGroups:h}=await this.openAiService.applyFilters(e,r,this.dashboardId,"published",n.signal,{resolvedFilters:this.activeResolvedFilters??[],timeRange:t??void 0});if(i!==this.applyFiltersSeq)return;this.widgets=me(this.widgets,a),this.activeResolvedFilters=g,this.activeFilterGroups=h,this.applySummary=Re(a,this.buildActiveFilters(r)),t&&this.checkForNewSinceLastCheck(t)}catch(r){if(r?.name==="AbortError")return;console.error("Apply time range failed:",r)}finally{i===this.applyFiltersSeq&&(this.applyingFilters=!1),this.cdr.markForCheck()}}checkForNewSinceLastCheck(t){if(!(Math.abs(Date.now()-new Date(t.to).getTime())<6e4))return;let n=this.kpiTotal(this.widgets);n!=null&&(this.lastMonitoredTotal=n)}kpiTotal(t){let e=0,n=!1;for(let i of t){let r=i.config?.chart;if(r?.type!=="kpi")continue;let a=Number(r.value);Number.isFinite(a)&&(e+=a,n=!0)}return n?e:null}buildActiveFilters(t){return Bt(t,e=>this.filterFieldLabel(e))}filterFieldLabel(t){for(let e of this.filterSuggestCache.values()){let n=e.find(i=>i.type==="attribute"&&i.id===t);if(n)return n.label}return t}isEmptyFilters(t){if(!t)return!0;for(let e of Object.values(t))if(e!=null&&!(typeof e=="string"&&e.trim()==="")&&!(typeof e=="object"&&Object.keys(e).length===0))return!1;return!0}async reloadDashboard(){if(!this.dashboardId)return;this.applyFiltersAbort?.abort();let t=++this.applyFiltersSeq;this.applyingFilters=!0,this.activeDashboardFilters=null,this.lastMonitoredTotal=null,this.activeResolvedFilters=null,this.activeFilterGroups=[],this.applySummary=null;try{let e=await this.dashboardsService.fetchDashboard(this.dashboardId);if(t!==this.applyFiltersSeq)return;this.widgets=(e.widgets??[]).map(n=>({id:n.id,title:n.title??"",widgetType:n.type??"chart",layout:n.layout,config:Ut(n.nileConfig),drilldownBy:n.drilldownBy,dataSourceId:n.dataSourceId,queryMeta:n.queryMeta,category:n.category??null}))}catch(e){console.error("Reload dashboard failed:",e)}finally{t===this.applyFiltersSeq&&(this.applyingFilters=!1),this.cdr.markForCheck()}this.currentTimeRange&&t===this.applyFiltersSeq&&await this.applyTimeRange(this.currentTimeRange)}primeFilterWidgets(){if(this.dashboardId)for(let t of this.widgets){if(this.primedFilterWidgets.has(t.id))continue;let e=t.config?.chart;if(e?.type!=="filter")continue;let n=e.controls?.find(i=>i.variant==="prompt"||i.variant==="expression"||i.variant==="hybrid")??e.controls?.find(i=>i.id);n?.id&&(this.primedFilterWidgets.add(t.id),this.fetchSuggestionsOnce(t.id,n.id,this.dashboardId))}}applyFilterSuggestions(t,e,n){let i=Array.isArray(n.suggestions)?n.suggestions:[];if(!i.length){n.nextToken&&i.push({id:n.nextToken.value,label:n.nextToken.label,type:"attribute"});for(let r of n.completions)i.push({label:r,type:"suggestion"})}i.length!==0&&(this.filterSuggestCache.set(t,i),this.gridRef?.patchFilterSuggestions(t,e,i))}async onAiSend(t){if(!this.dashboardId)return;let e=this.sessionMap.get(t.widgetId)??t.sessionId;this.sessionMap.set(t.widgetId,e);try{let n=this.environment.getCustomerId(),i=await k(this.http.post(`${this.environment.baseUrl}/api/customers/${n}/products/${this.environment.getProductId()}/workforce/dashboards/${this.dashboardId}/widgets/${t.widgetId}/chat`,{message:t.message,sessionId:e})),r=i?.reply?.content;r&&(this.sessionMap.set(t.widgetId,i.sessionId??e),this.zone.run(()=>{t.chartEl?.addAiResponse?.(r)}))}catch(n){console.error("Chat request failed:",n),this.zone.run(()=>{t.chartEl?.addAiResponse?.("Sorry, I couldn't process your request. Please try again.")})}}static \u0275fac=function(e){return new(e||o)};static \u0275cmp=q({type:o,selectors:[["app-dashboard-viewer"]],viewQuery:function(e,n){if(e&1&&ge(mn,5),e&2){let i;X(i=ee())&&(n.gridRef=i.first)}},inputs:{config:"config"},features:[Me([{provide:It,useFactory:t=>t.fetchGridPage.bind(t),deps:[j]},{provide:zt,useFactory:t=>t.fetchFilterValues.bind(t),deps:[O]},Oe(O),Ht(),Ee(O),Fe(O),Ae(O)])],decls:4,vars:35,consts:[["grid",""],[3,"timeRangeApply","forecast","aiSend","openAiBuilder","filterSubmit","filterChange","widgetChartTypeChanged","widgetFiltersChanged","widgetColorChanged","setAlert","widgetClick","widgets","editMode","dashboardId","persistToPublished","canvasBackgroundColor","autoHeight","widgetsLoading","dashboardFilters","resolvedFilters","applySummary","showWidgetMenu","canAsk","canChangeChartType","canManageFilters","canCustomizeColors","canViewChartData","canSetAlert","canForecast","canAddToStory","canExportPng","canExportCsv","canPrint","forecastable","forecastingWidgetId","detailPanel","detailRootLabel","timeFilterEnabled"],[1,"aq-detail-overlay"],[3,"closed","saved","open","widget","dashboardId","source","filterPredicates","filterHasOr","authoringMode"],[1,"aq-detail-overlay__crumbs"],[3,"nile-click"],["variant","text","width","160","height","16"],[1,"aq-detail-overlay__body"],[3,"widgets","widgetsLoading","editMode","canvasBackgroundColor","selectable","showWidgetMenu","canAsk","canChangeChartType","canManageFilters","canCustomizeColors","canViewChartData","canSetAlert","canForecast","canAddToStory","canExportPng","canExportCsv","canPrint"],[1,"aq-detail-skeleton"],[1,"aq-detail-skeleton__row"],["variant","rectangular","width","100%","height","96","border-radius","12px"],["variant","rectangular","width","100%","height","280","border-radius","12px"]],template:function(e,n){e&1&&(s(0,"shared-dashboard-grid",1,0),C("timeRangeApply",function(r){return n.onPickerTimeRange(r)})("forecast",function(r){return n.onForecast(r)})("aiSend",function(r){return n.onAiSend(r)})("openAiBuilder",function(){return n.openInBuilder()})("filterSubmit",function(r){return n.onFilterSubmit(r)})("filterChange",function(r){return n.onFilterChange(r)})("widgetChartTypeChanged",function(r){return n.onWidgetPatchedByGrid(r)})("widgetFiltersChanged",function(r){return n.onWidgetPatchedByGrid(r)})("widgetColorChanged",function(r){return n.onWidgetPatchedByGrid(r)})("setAlert",function(r){return n.onSetAlert(r)})("widgetClick",function(r){return n.onKpiWidgetClicked(r)}),l(),_(2,yn,11,3,"div",2),s(3,"app-alert-drawer",3),C("closed",function(){return n.onAlertClosed()})("saved",function(){return n.onAlertSaved()}),l()),e&2&&(x("widgets",n.widgets)("editMode",!1)("dashboardId",n.dashboardId)("persistToPublished",!0)("canvasBackgroundColor",n.canvasBackgroundColor())("autoHeight",n.autoHeight())("widgetsLoading",n.applyingFilters||n.isRefreshingData)("dashboardFilters",n.activeDashboardFilters)("resolvedFilters",n.activeResolvedFilters)("applySummary",n.applySummary)("showWidgetMenu",n.widgetMenu().enabled)("canAsk",n.widgetMenu().ask)("canChangeChartType",n.widgetMenu().changeChartType)("canManageFilters",n.widgetMenu().manageFilters)("canCustomizeColors",n.widgetMenu().customizeColors)("canViewChartData",n.widgetMenu().chartData)("canSetAlert",n.widgetMenu().setAlert)("canForecast",n.widgetMenu().forecast)("canAddToStory",n.widgetMenu().addToStory)("canExportPng",n.widgetMenu().exportPng)("canExportCsv",n.widgetMenu().exportCsv)("canPrint",n.widgetMenu().print)("forecastable",n.forecastable)("forecastingWidgetId",n.forecastingWidgetId)("detailPanel",!0)("detailRootLabel","Dashboard")("timeFilterEnabled",n.timeFilterShown()),c(2),y(n.widgetDetailPanelOpen?2:-1),c(),x("open",n.alertDrawerOpen)("widget",n.alertWidget)("dashboardId",n.dashboardId)("source",n.alertSource)("filterPredicates",n.alertFilterPredicates)("filterHasOr",n.alertFilterHasOr)("authoringMode",n.alertAuthoringMode))},dependencies:[Te,Ie,ze],styles:['@charset "UTF-8";[_nghost-%COMP%]{display:block;position:relative;height:100%;view-transition-name:dv-viewer-pane}.aq-detail-overlay[_ngcontent-%COMP%]{position:absolute;inset:0;z-index:50;display:flex;flex-direction:column;background:var(--ng-colors-bg-primary);view-transition-name:dv-detail-morph}.dv-morphing[_nghost-%COMP%]{view-transition-name:none}.aq-detail-overlay__crumbs[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;box-sizing:border-box;min-height:56px;padding:10px 20px;border-bottom:1px solid var(--ng-colors-border-secondary);flex-shrink:0}.aq-detail-overlay__crumbs[_ngcontent-%COMP%] nile-breadcrumb[_ngcontent-%COMP%]{display:inline-flex;align-items:center}.aq-detail-overlay__body[_ngcontent-%COMP%]{flex:1 1 auto;min-height:0;overflow:auto;padding:20px;background:var(--nile-color-bg-subtle, #fbfbfd)}.aq-detail-skeleton[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px}.aq-detail-skeleton__row[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.aq-detail-skeleton-grid[_ngcontent-%COMP%]{position:relative;width:100%}.aq-detail-skeleton-slot[_ngcontent-%COMP%]{position:absolute}.dv-skel-card[_ngcontent-%COMP%]{height:100%;display:flex;flex-direction:column;box-sizing:border-box;background:var(--ng-colors-bg-primary, #fff);border-radius:var(--ng-radius-xl, 12px);box-shadow:var(--ng-shadow-sm);overflow:hidden}.dv-skel-card__head[_ngcontent-%COMP%]{padding:13px 14px;border-bottom:1px solid var(--ng-colors-border-tertiary);flex-shrink:0}.dv-skel-card__body[_ngcontent-%COMP%]{flex:1;min-height:0;padding:12px 14px}.dv-skel-card__body[_ngcontent-%COMP%] nile-skeleton-loader[_ngcontent-%COMP%], .dv-skel-card__body[_ngcontent-%COMP%] nile-skeleton-loader[_ngcontent-%COMP%]::part(base){height:100%}']})};var be=class o{environment=u(F);http=u(G);tokenStore=u(ie);get customerId(){return this.tokenStore.tenantId()??""}async chat(t,e,n,i){let r=await new Promise((a,g)=>{let h=this.http.post(`${this.environment.baseUrl}/api/customers/${this.customerId}/products/${this.environment.getProductId()}/workforce/dashboards/${e}/chat`,{message:t,sessionId:n}).subscribe({next:w=>a(w),error:w=>{w instanceof $?g(new Error(w.error?.error||w.message)):g(w)}});if(i){if(i.aborted){h.unsubscribe();let w=new Error("Aborted");w.name="AbortError",g(w);return}i.addEventListener("abort",()=>{h.unsubscribe();let w=new Error("Aborted");w.name="AbortError",g(w)},{once:!0})}});if(!r?.success)throw new Error("Chat request failed");return r}async getSuggestions(t){if(!t)return[];let e;try{e=await k(this.http.get(`${this.environment.baseUrl}/api/customers/${this.customerId}/products/${this.environment.getProductId()}/workforce/dashboards/${t}/chat/suggestions`))}catch(n){throw n instanceof $?new Error(n.error?.error||n.message):n}if(Array.isArray(e))return e;if(e.success===!1)throw new Error("Suggestions request failed");return e.suggestions??e.data??[]}static \u0275fac=function(e){return new(e||o)};static \u0275prov=z({token:o,factory:o.\u0275fac})};var vn=["sliderGrid"],xn=o=>({"recommend-window":o}),wn=()=>({variant:"welcome"}),Pn=()=>[1,2,3,4],Dn=o=>({"mic-listening":o}),Mn=o=>({disabled:o}),an=(o,t)=>t.title;function Sn(o,t){o&1&&N(0)}function kn(o,t){o&1&&(s(0,"div",18),p(1,"nile-skeleton-loader",19),l())}function Tn(o,t){o&1&&(s(0,"div",17),A(1,kn,2,0,"div",18,J),l()),o&2&&(c(),I(se(0,Pn)))}function On(o,t){if(o&1){let e=M();s(0,"button",23),C("click",function(){let i=b(e).$implicit,r=d(5);return f(r.runPrompt(i.title))}),s(1,"div",24),p(2,"nile-icon",25),l(),s(3,"span",26),D(4),l()()}if(o&2){let e=t.$implicit;c(4),L(e.title)}}function En(o,t){if(o&1){let e=M();s(0,"div",17),A(1,On,5,1,"button",20,an),l(),s(3,"button",21),C("click",function(){b(e);let i=d(4);return f(i.openPromptGallery())}),p(4,"nile-glyph",22),s(5,"span"),D(6,"View prompt gallery"),l()()}if(o&2){let e=d(4);c(),I(e.topRecommended())}}function Fn(o,t){if(o&1&&(s(0,"div",9)(1,"div",12),p(2,"nile-icon",13),l(),s(3,"h2",14),D(4,"What would you like to ask?"),l(),s(5,"p",15),D(6,"Ask anything about your dashboard."),l(),W(7,Sn,1,0,"ng-container",16),_(8,Tn,3,1,"div",17)(9,En,7,0),l()),o&2){let e=d(3),n=H(3);c(7),x("ngTemplateOutlet",n)("ngTemplateOutletContext",se(3,wn)),c(),y(e.loadingSuggestions()?8:e.recommended().length>0?9:-1)}}function An(o,t){o&1&&(s(0,"div",10),p(1,"nile-icon",27),s(2,"div",28),D(3,"Generating your answer..."),l()()),o&2&&(c(),x("name","loader")("size","20"))}function In(o,t){if(o&1&&(s(0,"div",29)(1,"div",30)(2,"span"),D(3),l()()()),o&2){let e=d().$implicit;c(3),L(e.content)}}function Rn(o,t){if(o&1&&(s(0,"div")(1,"div",31),p(2,"nile-glyph",32),l(),s(3,"div",33),p(4,"div",34),l()()),o&2){let e=d().$implicit;c(4),x("innerHTML",e.content,lt)}}function zn(o,t){if(o&1&&(_(0,In,4,1,"div",29),_(1,Rn,5,1,"div")),o&2){let e=t.$implicit;y(e.role==="user"?0:-1),c(),y(e.role==="assistant"?1:-1)}}function Nn(o,t){o&1&&N(0)}function Vn(o,t){if(o&1&&W(0,Nn,1,0,"ng-container",35),o&2){d(3);let e=H(3);x("ngTemplateOutlet",e)}}function Wn(o,t){if(o&1){let e=M();s(0,"button",23),C("click",function(){let i=b(e).$implicit,r=d(4);return f(r.onGalleryPromptClick(i.title))}),s(1,"div",24),p(2,"nile-icon",25),l(),s(3,"span",26),D(4),l()()}if(o&2){let e=t.$implicit;c(4),L(e.title)}}function Hn(o,t){if(o&1){let e=M();s(0,"div",11)(1,"div",36)(2,"span",37),D(3,"Prompt gallery"),l(),s(4,"button",38),C("click",function(){b(e);let i=d(3);return f(i.closePromptGallery())}),p(5,"nile-glyph",39),l()(),s(6,"div",40)(7,"p",41),D(8,"Pick a suggestion to get started."),l(),s(9,"div",42),A(10,Wn,5,1,"button",20,an),l()()()}if(o&2){let e=d(3);c(10),I(e.recommended())}}function qn(o,t){if(o&1){let e=M();s(0,"div",6)(1,"nile-glyph",7),C("click",function(){b(e);let i=d(2);return f(i.closePanel.emit())}),l()(),s(2,"div",8),_(3,Fn,10,4,"div",9),_(4,An,4,2,"div",10),A(5,zn,2,2,null,null,J),l(),_(7,Vn,1,1,"ng-container"),_(8,Hn,12,0,"div",11)}if(o&2){let e,n,i,r,a=d(2);c(2),x("ngClass",he(5,xn,!(!((e=a.chatsDetails())==null||e.message==null)&&e.message.length))),c(),y(!((n=a.chatsDetails())==null||n.message==null)&&n.message.length?-1:3),c(),y(a.isGenerating()?4:-1),c(),I((i=a.chatsDetails())==null?null:i.message),c(2),y(!((r=a.chatsDetails())==null||r.message==null)&&r.message.length?7:-1),c(),y(a.showPromptGallery()?8:-1)}}function Ln(o,t){if(o&1){let e=M();s(0,"div",43),C("pointerdown",function(i){b(e);let r=d(2);return f(r.onResizeStart(i))})("pointermove",function(i){b(e);let r=d(2);return f(r.onResizeMove(i))})("pointerup",function(i){b(e);let r=d(2);return f(r.onResizeEnd(i))})("pointercancel",function(i){b(e);let r=d(2);return f(r.onResizeEnd(i))}),l(),s(1,"div",44)(2,"div",45)(3,"shared-dashboard-grid",46,1),C("filterSubmit",function(i){b(e);let r=d(2);return f(r.onSliderFilterSubmit(i))})("filterChange",function(i){b(e);let r=d(2);return f(r.onSliderFilterChange(i))})("widgetChartTypeChanged",function(i){b(e);let r=d(2);return f(r.onSliderWidgetPatched(i))})("widgetFiltersChanged",function(i){b(e);let r=d(2);return f(r.onSliderWidgetPatched(i))})("setAlert",function(i){b(e);let r=d(2);return f(r.onSetAlert(i))}),l(),s(5,"app-alert-drawer",47),C("closed",function(){b(e);let i=d(2);return f(i.onAlertClosed())})("saved",function(){b(e);let i=d(2);return f(i.onAlertClosed())}),l()()()}if(o&2){let e=d(2);c(3),x("widgets",e.sliderWidgets())("editMode",!1)("outerMargin",!1)("dashboardId",e.dashboardId())("dashboardFilters",e.activeDashboardFilters())("resolvedFilters",e.activeResolvedFilters())("persistToPublished",!0)("canSetAlert",!0)("canAddToStory",e.widgetMenu().addToStory)("showWidgetMenu",e.widgetMenu().enabled)("canAsk",e.widgetMenu().ask)("canChangeChartType",e.widgetMenu().changeChartType)("canManageFilters",e.widgetMenu().manageFilters)("canCustomizeColors",e.widgetMenu().customizeColors)("canViewChartData",e.widgetMenu().chartData)("canExportPng",e.widgetMenu().exportPng)("canExportCsv",e.widgetMenu().exportCsv)("canPrint",e.widgetMenu().print),c(2),x("open",e.alertDrawerOpen())("widget",e.alertWidget())("dashboardId",e.dashboardId())("source",e.alertSource())}}function $n(o,t){if(o&1&&(s(0,"div",4)(1,"div",5),_(2,qn,9,7),l(),_(3,Ln,6,22),l()),o&2){let e=d();te("chat-layout--resizing",e.isResizing()),c(),pt("flex",e.chatColumnWidthPct()!==null?"0 0 "+e.chatColumnWidthPct()+"%":null),te("chat-column--split",!!e.dashboardConfig()&&!e.chatOnly()),c(),y(e.loadingChat()?-1:2),c(),y(e.dashboardConfig()&&!e.chatOnly()?3:-1)}}function Gn(o,t){if(o&1){let e=M();s(0,"div",48)(1,"label",49)(2,"input",50),C("input",function(i){b(e);let r=d();return f(r.queryString.set(i.target.value))})("keyup.enter",function(){b(e);let i=d();return f(i.postMessage())}),l(),s(3,"div",51)(4,"div",52)(5,"nile-glyph",53),C("click",function(){b(e);let i=d();return f(i.toggleMic())}),l(),s(6,"nile-glyph",54),C("click",function(){b(e);let i=d();return f(i.isGenerating()?i.cancelGenerate():i.postMessage())}),l()()()()()}if(o&2){let e=t.variant,n=d();te("input-query-container--welcome",e==="welcome"),c(2),x("value",n.queryString()),c(3),x("name",n.isMicListening()?"ng-mic":"ng-mic-off")("ngClass",he(8,Dn,n.isMicListening())),c(),x("name",n.isGenerating()?"ng-circle-stop":"ng-send")("size",n.isGenerating()?"18":"16")("ngClass",he(10,Mn,!n.isGenerating()&&!n.queryString()))}}var Ve=class o{constructor(t,e,n){this.chatService=t;this.openAiService=e;this.sanitizer=n;Z(()=>{let r=this.dashboardId();r&&this.loadSuggestions(r)});let i=null;Z(()=>{let r=this.dashboardConfig(),a=r?.id??null;a!==i&&(this.primedFilterWidgets.clear(),i=a);let g=(r?.widgets??[]).map(h=>({id:h.id,title:h.title??"",widgetType:h.type??"chart",layout:h.layout,config:h.nileConfig,drilldownBy:h.drilldownBy,queryMeta:h.queryMeta,dataSourceId:h.dataSourceId}));this.sliderWidgets.set(g),queueMicrotask(()=>this.primeFilterWidgets())})}chatService;openAiService;sanitizer;closePanel=new fe;dashboardId=Y("");dashboardName=Y("");dashboardConfig=Y(null);chatOnly=Y(!1);initialPrompt=Y("");allChats=m([]);chatsDetails=m(null);isGenerating=m(!1);queryString=m("");searchTerm=m("");selectedChatContextId=m("");loadingChat=m(!1);loadingAllChat=m(!1);isDeleting=m(!1);isMicListening=m(!1);recognition=null;micBaseText="";silenceTimer=null;micSilenceMs=5e3;recommended=m([]);topRecommended=T(()=>this.recommended().slice(0,4));loadingSuggestions=m(!1);showPromptGallery=m(!1);chatColumnWidthPct=m(null);isResizing=m(!1);resizeRect=null;resizePointerId=null;resizeRafPending=!1;sliderWidgets=m([]);activeDashboardFilters=m(null);activeResolvedFilters=m(null);alertDrawerOpen=m(!1);alertWidget=m(null);onSetAlert(t){this.alertWidget.set(t),this.alertDrawerOpen.set(!0)}onSliderWidgetPatched(t){this.sliderWidgets.update(e=>e.map(n=>n.id===t.id?t:n))}onAlertClosed(){this.alertDrawerOpen.set(!1)}widgetMenu(){return this.dashboardsConfig().features.widgetMenu}dashboardsConfig=u(V);alertSource=T(()=>{let t=this.dashboardConfig();return t?{connectionId:t.connectionId,isPipeline:t.isPipeline,adapterType:t.adapterType}:null});sliderGridRef;applyingFilters=m(!1);filterSuggestTimers=new Map;filterSuggestSeq=new Map;primedFilterWidgets=new Set;applyFiltersSeq=0;applyFiltersAbort;generateAbort;formattedChats=T(()=>this.buildFormattedChats(this.allChats()));filteredFormattedChats=T(()=>{let t=this.formattedChats(),e=this.searchTerm().toLowerCase().trim();if(!e)return t;let n=i=>i.filter(r=>r.displayName.toLowerCase().includes(e));return{today:n(t.today),yesterday:n(t.yesterday),older:n(t.older)}});ngOnInit(){this.createNewChat();let t=this.initialPrompt();t&&(this.queryString.set(t),this.postMessage())}async loadSuggestions(t){this.loadingSuggestions.set(!0);try{let e=await this.chatService.getSuggestions(t);this.recommended.set(e.map(n=>({title:n})))}catch(e){console.error("Failed to load chat suggestions:",e),this.recommended.set([])}finally{this.loadingSuggestions.set(!1)}}runPrompt(t){this.queryString.set(t),this.postMessage()}openPromptGallery(){this.showPromptGallery.set(!0)}closePromptGallery(){this.showPromptGallery.set(!1)}onGalleryPromptClick(t){this.closePromptGallery(),this.runPrompt(t)}isFilterWidget(t){return t?.config?.chart?.type==="filter"}onSliderFilterChange(t){let e=t.widgetId,n=t.controlId;if(!e||!n)return;let i=this.dashboardId();if(!i)return;let r=this.filterSuggestTimers.get(e);r&&clearTimeout(r);let a=(t.query??"").trim();if(!a)return;let g=(this.filterSuggestSeq.get(e)??0)+1;this.filterSuggestSeq.set(e,g);let h=setTimeout(async()=>{try{let w=this.sliderWidgets(),v=await this.openAiService.filterSuggest(i,a,w,"published");if(this.filterSuggestSeq.get(e)!==g)return;this.applyFilterSuggestions(e,n,v)}catch(w){console.warn("Filter suggest failed:",w)}},400);this.filterSuggestTimers.set(e,h)}async onSliderFilterSubmit(t){let e=this.sliderWidgets(),n=e.filter(a=>!this.isFilterWidget(a));if(n.length===0)return;this.applyFiltersAbort?.abort();let i=new AbortController;this.applyFiltersAbort=i;let r=++this.applyFiltersSeq;this.applyingFilters.set(!0);try{let{widgets:a,resolvedFilters:g}=await this.openAiService.applyFilters(n,t.filters,this.dashboardId(),"published",i.signal,{mode:t.mode,prompt:t.prompt});if(r!==this.applyFiltersSeq)return;this.sliderWidgets.set(me(e,a)),this.activeDashboardFilters.set(t.filters),this.activeResolvedFilters.set(g)}catch(a){if(a?.name==="AbortError"||r!==this.applyFiltersSeq)return;let g=a instanceof Error?a.message:"Failed to apply filters.";this.pushSystemMessage("error",`Apply filters failed: ${g}`)}finally{r===this.applyFiltersSeq&&this.applyingFilters.set(!1)}}primeFilterWidgets(){let t=this.dashboardId();if(!t)return;let e=this.sliderWidgets();for(let n of e){if(this.primedFilterWidgets.has(n.id))continue;let i=n.config?.chart;if(i?.type!=="filter")continue;let r=i.controls?.find(g=>g.variant==="expression"||g.variant==="hybrid");if(!r?.id)continue;this.primedFilterWidgets.add(n.id);let a=r.id;(async()=>{try{let g=await this.openAiService.filterSuggest(t,"",e,"published");this.applyFilterSuggestions(n.id,a,g)}catch(g){this.primedFilterWidgets.delete(n.id),console.warn("Filter suggest prime failed:",g)}})()}}applyFilterSuggestions(t,e,n){let i=Array.isArray(n.suggestions)?n.suggestions:[];if(!i.length){n.nextToken&&i.push({id:n.nextToken.value,label:n.nextToken.label,type:"attribute"});for(let r of n.completions)i.push({label:r,type:"suggestion"})}i.length!==0&&this.sliderGridRef?.patchFilterSuggestions(t,e,i)}onResizeStart(t){t.preventDefault();let e=t.currentTarget,n=e.parentElement;n&&(this.resizeRect=n.getBoundingClientRect(),e.setPointerCapture(t.pointerId),this.resizePointerId=t.pointerId,this.isResizing.set(!0))}onResizeMove(t){if(!this.isResizing()||!this.resizeRect)return;let n=(t.clientX-this.resizeRect.left)/this.resizeRect.width*100,i=Math.min(75,Math.max(20,n));this.chatColumnWidthPct.set(i),this.scheduleGridReflow()}onResizeEnd(t){let e=t.currentTarget;this.resizePointerId!==null&&e.hasPointerCapture?.(this.resizePointerId)&&e.releasePointerCapture(this.resizePointerId),this.isResizing.set(!1),this.resizeRect=null,this.resizePointerId=null,this.scheduleGridReflow()}scheduleGridReflow(){this.resizeRafPending||(this.resizeRafPending=!0,requestAnimationFrame(()=>{this.resizeRafPending=!1,window.dispatchEvent(new Event("resize"))}))}createNewChat(){let t={id:crypto.randomUUID(),displayName:"New Chat",createdOn:new Date().toISOString(),sessionId:crypto.randomUUID(),message:[]};this.allChats.update(e=>[t,...e]),this.getChatDetails(t.id)}getChatDetails(t){this.selectedChatContextId.set(t);let e=this.allChats().find(n=>n.id===t);e&&this.chatsDetails.set(e),this.loadingChat.set(!1)}deleteChat(t){if(this.isDeleting.set(!0),this.allChats.update(e=>e.filter(n=>n.id!==t)),this.isDeleting.set(!1),this.chatsDetails()?.id===t){let e=this.allChats();e.length?this.getChatDetails(e[0].id):this.createNewChat()}}onSearchChat(t){this.searchTerm.set(t)}async postMessage(){let t=this.queryString().trim();if(!t||this.isGenerating())return;this.chatsDetails()||this.createNewChat();let e=this.chatsDetails();e.message.unshift({role:"user",content:t}),e.displayName==="New Chat"&&(e.displayName=t.length>20?t.substring(0,20):t,this.allChats.update(i=>[...i])),this.chatsDetails.set(P({},e)),this.queryString.set(""),this.isGenerating.set(!0);let n=new AbortController;this.generateAbort=n;try{let i=await this.chatService.chat(t,this.dashboardId(),e.sessionId,n.signal);e.sessionId=i.sessionId,e.message.unshift({role:"assistant",content:this.sanitizeHtml(i.reply.content)})}catch(i){if(i instanceof Error&&i.name==="AbortError")e.message=e.message.filter((r,a)=>!(a===0&&r.role==="user"));else{let r=i instanceof Error?i.message:"Failed to get response.";this.pushSystemMessage("error",`Chat failed: ${r}`)}}finally{this.generateAbort===n&&(this.generateAbort=void 0),this.chatsDetails.set(P({},e)),this.isGenerating.set(!1)}}cancelGenerate(){this.generateAbort?.abort()}toggleMic(){this.isMicListening()?(this.clearSilenceTimer(),this.recognition?.stop()):this.startListening()}startListening(){let t=window,e=t.SpeechRecognition??t.webkitSpeechRecognition;e&&(this.micBaseText=this.queryString(),this.recognition=new e,this.recognition.continuous=!0,this.recognition.interimResults=!0,this.recognition.lang="en-US",this.recognition.onresult=n=>{let i="";for(let a=0;a<n.results.length;a++)i+=n.results[a][0].transcript;let r=this.micBaseText&&!this.micBaseText.endsWith(" ")?" ":"";this.queryString.set(this.micBaseText+r+i),this.resetSilenceTimer()},this.recognition.onend=()=>{this.clearSilenceTimer(),this.isMicListening.set(!1),this.recognition=null},this.recognition.start(),this.isMicListening.set(!0),this.resetSilenceTimer())}resetSilenceTimer(){this.clearSilenceTimer(),this.silenceTimer=setTimeout(()=>{this.silenceTimer=null,this.recognition?.stop(),this.queryString().trim()&&this.postMessage()},this.micSilenceMs)}clearSilenceTimer(){this.silenceTimer!==null&&(clearTimeout(this.silenceTimer),this.silenceTimer=null)}pushSystemMessage(t,e){let n=this.chatsDetails();if(!n){t==="success"&&this.showToast("Done",e);return}let i=String(e).trim().replace(/[.!?]+$/,"").replace(/[<>&]/g,a=>a==="<"?"<":a===">"?">":"&"),r=t==="error"?`ERROR: ${i}!`:i;n.message.unshift({role:"assistant",content:this.sanitizeHtml(`<p class="chat-system chat-system--${t}">${r}</p>`)}),this.chatsDetails.set(P({},n))}showToast(t,e){let n=document.createElement("nile-toast");n.variant="success",n.title=t,n.content=e,n.duration=5e3,n.closable=!0,n.toast(),Lt()}sanitizeHtml(t){return this.sanitizer.sanitize(st.HTML,t)??""}buildFormattedChats(t){let e=[...t].sort((i,r)=>new Date(r.createdOn).getTime()-new Date(i.createdOn).getTime()),n={today:[],yesterday:[],older:[]};return e.forEach(i=>{this.isToday(i.createdOn)?n.today.push(i):this.isYesterday(i.createdOn)?n.yesterday.push(i):n.older.push(i)}),n}isToday(t){let e=new Date(t),n=new Date;return e.getDate()===n.getDate()&&e.getMonth()===n.getMonth()&&e.getFullYear()===n.getFullYear()}isYesterday(t){let e=new Date(t),n=new Date;return n.setDate(n.getDate()-1),e.getDate()===n.getDate()&&e.getMonth()===n.getMonth()&&e.getFullYear()===n.getFullYear()}static \u0275fac=function(e){return new(e||o)(Pe(be),Pe(j),Pe(yt))};static \u0275cmp=q({type:o,selectors:[["db-ai-prompt-panel"]],viewQuery:function(e,n){if(e&1&&ge(vn,5),e&2){let i;X(i=ee())&&(n.sliderGridRef=i.first)}},inputs:{dashboardId:[1,"dashboardId"],dashboardName:[1,"dashboardName"],dashboardConfig:[1,"dashboardConfig"],chatOnly:[1,"chatOnly"],initialPrompt:[1,"initialPrompt"]},outputs:{closePanel:"closePanel"},features:[Me([])],decls:4,vars:1,consts:[["promptInput",""],["sliderGrid",""],[1,"qna-panel"],[1,"chat-layout",3,"chat-layout--resizing"],[1,"chat-layout"],[1,"chat-column"],[1,"chat-header"],["name","close","size","16",1,"close-panel-icon",3,"click"],[1,"chat-message-container",3,"ngClass"],[1,"welcome-section"],[1,"generating-loader"],[1,"contained-panel","prompt-gallery-panel"],[1,"ai-badge","ai-badge--md","welcome-icon-wrap"],["color","var(--ng-colors-border-brand)","name","smartcode","size","20"],[1,"welcome-title"],[1,"welcome-subtitle"],[4,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"recommended"],[1,"recommended-box","skeleton-box"],[2,"width","100%","height","64px","border-radius","12px"],["type","button",1,"recommended-box"],["type","button",1,"browse-more",3,"click"],["name","ng-lightbulb-05","method","stroke","size","14"],["type","button",1,"recommended-box",3,"click"],[1,"ai-badge","ai-badge--sm","rec-icon-wrap"],["color","var(--ng-colors-border-brand)","name","ng-lightbulb-05","size","16","method","stroke"],[1,"rec-title"],[3,"name","size"],[1,"generating-text"],[1,"user-row"],[1,"user"],[1,"ai-badge","ai-badge--sm","assistant-icon"],["name","ng-stars-02","method","stroke","size","16","color","var(--ng-colors-border-brand)"],[1,"assistant"],[1,"assistant-body",3,"innerHTML"],[4,"ngTemplateOutlet"],[1,"contained-panel__header"],[1,"contained-panel__title"],["type","button","aria-label","Close",1,"contained-panel__close",3,"click"],["name","close","size","16"],[1,"contained-panel__body"],[1,"prompt-gallery-subtitle"],[1,"prompt-gallery"],["role","separator","aria-orientation","vertical","aria-label","Resize chat column",1,"chat-layout__resizer",3,"pointerdown","pointermove","pointerup","pointercancel"],[1,"dashboard-slider"],[1,"dashboard-slider__body"],[3,"filterSubmit","filterChange","widgetChartTypeChanged","widgetFiltersChanged","setAlert","widgets","editMode","outerMargin","dashboardId","dashboardFilters","resolvedFilters","persistToPublished","canSetAlert","canAddToStory","showWidgetMenu","canAsk","canChangeChartType","canManageFilters","canCustomizeColors","canViewChartData","canExportPng","canExportCsv","canPrint"],[3,"closed","saved","open","widget","dashboardId","source"],[1,"input-query-container"],[1,"chat-input-pill"],["type","text","placeholder","Enter your query",1,"input-query",3,"input","keyup.enter","value"],[1,"pill-toolbar"],[1,"pill-toolbar__right"],["method","stroke",1,"mic-icon",3,"click","name","ngClass"],["method","stroke",1,"send-icon",3,"click","name","size","ngClass"]],template:function(e,n){e&1&&(s(0,"div",2),_(1,$n,4,8,"div",3),l(),W(2,Gn,7,12,"ng-template",null,0,ye)),e&2&&(c(),y(n.loadingAllChat()?-1:1))},dependencies:[Te,ut,ke,Gt,Ie,ze],styles:['@charset "UTF-8";[_nghost-%COMP%]{display:block;height:100%;min-height:0}.qna-panel[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;background:var(--ng-colors-bg-secondary);font-family:var(--ng-font-family-body)}.chat-layout[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:row;overflow:hidden;min-height:0;container-type:inline-size}.chat-layout.chat-layout--resizing[_ngcontent-%COMP%]{cursor:col-resize;-webkit-user-select:none;user-select:none}.chat-layout.chat-layout--resizing[_ngcontent-%COMP%] .chat-column[_ngcontent-%COMP%]{transition:none!important}.chat-layout.chat-layout--resizing[_ngcontent-%COMP%] .chat-layout__resizer[_ngcontent-%COMP%]:after{opacity:1}.chat-layout__resizer[_ngcontent-%COMP%]{flex:0 0 1px;align-self:stretch;cursor:col-resize;touch-action:none;-webkit-user-select:none;user-select:none;position:relative;background:transparent}.chat-layout__resizer[_ngcontent-%COMP%]:before{content:"";position:absolute;top:0;bottom:0;left:50%;transform:translate(-50%);width:1px;background:var(--ng-colors-border-secondary);transition:background .15s}.chat-layout__resizer[_ngcontent-%COMP%]:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:4px;height:36px;border-radius:999px;background:var(--ng-colors-border-brand);opacity:0;transition:opacity .15s;pointer-events:none}.chat-layout__resizer[_ngcontent-%COMP%]:hover:before{background:var(--ng-colors-border-brand);opacity:0;transition:opacity .15s;pointer-events:none}.chat-layout__resizer[_ngcontent-%COMP%]:hover:after{opacity:1}.dashboard-slider[_ngcontent-%COMP%]{flex:1 1 auto;display:flex;flex-direction:column;overflow:hidden;min-width:0;min-height:0;background:var(--ng-colors-bg-secondary);animation:_ngcontent-%COMP%_slider-in .25s ease-out}.dashboard-slider__header[_ngcontent-%COMP%]{height:56px;padding:0 16px;border-bottom:1px solid var(--ng-colors-border-secondary);flex-shrink:0;background:var(--ng-colors-bg-primary);display:flex;align-items:center;justify-content:space-between;box-sizing:border-box}.dashboard-slider__title[_ngcontent-%COMP%]{font-size:13px;font-weight:600;color:var(--ng-colors-text-primary-900)}.dashboard-slider__body[_ngcontent-%COMP%]{flex:1;min-height:0;min-width:0;overflow:auto;padding:8px}.dashboard-slider__body[_ngcontent-%COMP%] > shared-dashboard-grid[_ngcontent-%COMP%]{display:block;min-width:calc(66.6667cqw - 32px)}@keyframes _ngcontent-%COMP%_slider-in{0%{transform:translate(24px);opacity:0}to{transform:translate(0);opacity:1}}.chat-column[_ngcontent-%COMP%]{flex:1 1 auto;display:flex;flex-direction:column;overflow:hidden;min-width:0;position:relative;background:var(--ng-colors-bg-primary);container-type:inline-size;transition:flex-basis .3s ease,flex .3s ease}.chat-column.chat-column--split[_ngcontent-%COMP%]{flex:0 0 33.333%}.chat-column[_ngcontent-%COMP%] .chat-header[_ngcontent-%COMP%]{padding:16px 16px 8px;flex-shrink:0;background:var(--ng-colors-bg-primary);display:flex;align-items:center;justify-content:flex-end}.chat-column[_ngcontent-%COMP%] .chat-header[_ngcontent-%COMP%] .close-panel-icon[_ngcontent-%COMP%]{cursor:pointer;color:var(--ng-colors-text-tertiary-600);transition:color .15s}.chat-column[_ngcontent-%COMP%] .chat-header[_ngcontent-%COMP%] .close-panel-icon[_ngcontent-%COMP%]:hover{color:var(--ng-colors-text-primary-900)}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%]{flex:1;overflow:auto;padding:20px 24px;display:flex;flex-direction:column-reverse}.chat-column[_ngcontent-%COMP%] .chat-message-container.recommend-window[_ngcontent-%COMP%]{justify-content:center;align-items:center;padding:32px 40px}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .user-row[_ngcontent-%COMP%]{display:flex;flex-direction:row-reverse;justify-content:flex-start;align-items:flex-start;gap:8px;margin-bottom:20px;margin-top:8px}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .user[_ngcontent-%COMP%]{flex:0 1 auto;min-width:0}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .user[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{background:var(--ng-colors-bg-brand-primary);color:var(--ng-colors-text-primary-900);padding:9px 14px;border-radius:14px 14px 2px;font-size:14px;display:inline-block;max-width:100%;text-align:left}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .user-icon[_ngcontent-%COMP%]{flex-shrink:0;width:28px;height:28px;border-radius:50%;background:var(--ng-colors-bg-brand-primary);color:var(--ng-colors-border-brand);display:inline-flex;align-items:center;justify-content:center}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .assistant-icon[_ngcontent-%COMP%]{margin-bottom:6px}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .assistant[_ngcontent-%COMP%]{padding:14px 16px;background:var(--ng-colors-bg-secondary);border:1px solid var(--ng-colors-border-secondary);border-radius:2px 14px 14px;margin-bottom:14px;font-size:14px;line-height:1.65;color:var(--ng-colors-text-primary-900)}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .generating-loader[_ngcontent-%COMP%]{padding:10px 14px;height:40px;display:flex;gap:8px;align-items:center;background:var(--ng-colors-bg-secondary);border:1px solid var(--ng-colors-border-secondary);border-radius:8px;font-size:13px;color:var(--ng-colors-text-tertiary-600);width:fit-content}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .welcome-section[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:12px;width:100%;max-width:820px;text-align:center}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .welcome-section[_ngcontent-%COMP%] .welcome-icon-wrap[_ngcontent-%COMP%]{margin-bottom:4px}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .welcome-section[_ngcontent-%COMP%] .welcome-title[_ngcontent-%COMP%]{margin:0;font-size:22px;font-weight:700;color:var(--ng-colors-text-primary-900);letter-spacing:-.02em}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .welcome-section[_ngcontent-%COMP%] .welcome-subtitle[_ngcontent-%COMP%]{margin:0 0 8px;font-size:14px;color:var(--ng-colors-text-tertiary-600);max-width:440px;line-height:1.6}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .browse-more[_ngcontent-%COMP%]{margin-top:4px;align-self:flex-end;display:inline-flex;align-items:center;gap:6px;padding:6px 4px;background:transparent;border:0;cursor:pointer;font-size:12px;font-weight:500;color:var(--ng-colors-text-tertiary-600);transition:color .15s}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .browse-more[_ngcontent-%COMP%]:hover{color:var(--ng-colors-border-brand)}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .recommended[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;width:100%}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .recommended[_ngcontent-%COMP%] .recommended-box[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;font:inherit;color:inherit;border:1px solid var(--ng-colors-border-secondary);border-radius:14px;padding:18px;cursor:pointer;transition:border-color .18s,box-shadow .18s,transform .15s;background:var(--ng-colors-bg-primary);text-align:left}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .recommended[_ngcontent-%COMP%] .recommended-box[_ngcontent-%COMP%]:hover{border-color:var(--ng-colors-border-brand);box-shadow:0 6px 24px #2970ff1a;transform:translateY(-2px)}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .recommended[_ngcontent-%COMP%] .recommended-box[_ngcontent-%COMP%] .rec-title[_ngcontent-%COMP%]{font-size:13px;font-weight:600;color:var(--ng-colors-text-primary-900);text-transform:capitalize;line-height:1.4}.chat-column[_ngcontent-%COMP%] .input-query-container[_ngcontent-%COMP%]{padding:14px 24px 18px;display:flex;justify-content:center;flex-shrink:0;background:var(--ng-colors-bg-primary)}.chat-column[_ngcontent-%COMP%] .input-query-container[_ngcontent-%COMP%] .chat-input-pill[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px;width:100%;max-width:760px;padding:14px 16px 12px;background:var(--ng-colors-bg-primary);border:1px solid var(--ng-colors-border-secondary);border-radius:24px;box-shadow:0 1px 2px #1018280a,0 8px 24px #1018280f;cursor:text;transition:border-color .15s,box-shadow .15s}.chat-column[_ngcontent-%COMP%] .input-query-container[_ngcontent-%COMP%] .chat-input-pill[_ngcontent-%COMP%]:focus-within{border-color:var(--ng-colors-border-brand);box-shadow:0 0 0 3px #2970ff1f}.chat-column[_ngcontent-%COMP%] .input-query-container[_ngcontent-%COMP%] .input-query[_ngcontent-%COMP%]{width:100%;min-width:0;border:0;outline:0;background:transparent;padding:6px 2px;font:inherit;font-size:15px;color:var(--ng-colors-text-primary-900);text-overflow:ellipsis}.chat-column[_ngcontent-%COMP%] .input-query-container[_ngcontent-%COMP%] .input-query[_ngcontent-%COMP%]::placeholder{color:var(--ng-colors-text-tertiary-600);overflow:hidden;text-overflow:ellipsis}.chat-column[_ngcontent-%COMP%] .input-query-container[_ngcontent-%COMP%] .pill-toolbar[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:flex-end;gap:8px}.chat-column[_ngcontent-%COMP%] .input-query-container[_ngcontent-%COMP%] .pill-toolbar__right[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}.chat-column[_ngcontent-%COMP%] .input-query-container[_ngcontent-%COMP%] .send-icon[_ngcontent-%COMP%]{cursor:pointer;flex-shrink:0;transition:opacity .15s,transform .15s}.chat-column[_ngcontent-%COMP%] .input-query-container[_ngcontent-%COMP%] .send-icon[_ngcontent-%COMP%]:hover{transform:translate(2px)}.chat-column[_ngcontent-%COMP%] .input-query-container[_ngcontent-%COMP%] .send-icon.disabled[_ngcontent-%COMP%]{opacity:.2;pointer-events:none}.chat-column[_ngcontent-%COMP%] .input-query-container[_ngcontent-%COMP%] .mic-icon[_ngcontent-%COMP%]{cursor:pointer;color:var(--ng-colors-text-tertiary-600);transition:color .15s}.chat-column[_ngcontent-%COMP%] .input-query-container[_ngcontent-%COMP%] .mic-icon[_ngcontent-%COMP%]:hover{color:var(--ng-colors-border-brand)}.chat-column[_ngcontent-%COMP%] .input-query-container[_ngcontent-%COMP%] .mic-icon.mic-listening[_ngcontent-%COMP%]{color:var(--ng-colors-fg-error-primary);animation:_ngcontent-%COMP%_mic-pulse 1.2s ease-in-out infinite}.chat-column[_ngcontent-%COMP%] .input-query-container.input-query-container--welcome[_ngcontent-%COMP%]{border-top:0;background:transparent;padding:4px 0 12px;width:100%;max-width:680px}@keyframes _ngcontent-%COMP%_mic-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.55;transform:scale(1.3)}}.dashboard-slider__body[_ngcontent-%COMP%]{padding:unset}.contained-panel[_ngcontent-%COMP%]{position:absolute;inset:0;display:flex;flex-direction:column;background:var(--ng-colors-bg-primary);border-left:1px solid var(--ng-colors-border-secondary);box-shadow:-8px 0 24px #10182814;z-index:var(--z-floating);animation:_ngcontent-%COMP%_contained-slide .25s ease-out}.contained-panel__header[_ngcontent-%COMP%]{height:56px;padding:0 16px;border-bottom:1px solid var(--ng-colors-border-secondary);flex-shrink:0;background:var(--ng-colors-bg-primary);display:flex;align-items:center;justify-content:space-between;gap:8px;box-sizing:border-box}.contained-panel__close[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;padding:4px;border:0;outline:0;background:transparent;color:var(--ng-colors-text-tertiary-600);cursor:pointer;transition:color .15s;flex-shrink:0}.contained-panel__close[_ngcontent-%COMP%]:hover{color:var(--ng-colors-text-primary-900)}.contained-panel__title[_ngcontent-%COMP%]{font-size:14px;font-weight:600;color:var(--ng-colors-text-primary-900);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.contained-panel__body[_ngcontent-%COMP%]{flex:1;min-height:0;overflow:auto;padding:16px 20px 20px}.prompt-gallery-subtitle[_ngcontent-%COMP%]{margin:0 0 24px;font-size:13px;color:var(--ng-colors-text-tertiary-600)}.prompt-gallery[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr;gap:12px;padding:6px 6px 8px}.prompt-gallery[_ngcontent-%COMP%] .recommended-box[_ngcontent-%COMP%]{display:flex;flex-direction:row;align-items:center;gap:10px;border:1px solid var(--ng-colors-border-secondary);border-radius:12px;padding:12px 16px;cursor:pointer;background:var(--ng-colors-bg-primary);text-align:left;font:inherit;color:inherit;transition:border-color .18s,box-shadow .18s,transform .15s}.prompt-gallery[_ngcontent-%COMP%] .recommended-box[_ngcontent-%COMP%]:hover{border-color:var(--ng-colors-border-brand);box-shadow:0 6px 24px #2970ff1a;transform:translateY(-2px)}.prompt-gallery[_ngcontent-%COMP%] .recommended-box[_ngcontent-%COMP%] .rec-title[_ngcontent-%COMP%]{font-size:13px;font-weight:500;color:var(--ng-colors-text-secondary-700);line-height:1.45}@keyframes _ngcontent-%COMP%_contained-slide{0%{transform:translate(8px);opacity:0}to{transform:translate(0);opacity:1}}.chat-system[_ngcontent-%COMP%]{margin:4px 0;font-size:13px;line-height:1.4;color:var(--ng-colors-text-tertiary-600)}.chat-system--error[_ngcontent-%COMP%]{color:var(--ng-colors-fg-error-primary);font-weight:500}']})};var Bn=o=>[o];function Un(o,t){if(o&1&&_e(0,"nile-progress-bar",4),o&2){let e=d();ht("value",e.percent())}}var We=class o{streamId;done=new fe;failed=new fe;streamService=u(Jt);totalCharts=m(0);widgetPhases=m([]);phaseLabel=m("Connecting to your data\u2026");dashboardNumber=m(0);barKey=m(0);pendingNewDashboard=!0;readyCount=T(()=>this.widgetPhases().filter(t=>t==="building"||t==="saving").length);percent=T(()=>{let t=this.totalCharts();if(!t)return 0;let e=this.widgetPhases(),n=0;for(let i=0;i<t;i++){let r=e[i];n+=r==="building"||r==="saving"?1:r==="querying"?.66:r==="analyzing"?.33:0}return Math.round(Math.min(1,n/t)*100)});countLabel=T(()=>{let t=this.totalCharts(),e=this.dashboardNumber();return!t||!e?"":`Dashboard ${e} \xB7 ${this.readyCount()} of ${t} charts`});finished=!1;dispose=null;ngOnInit(){if(!this.streamId){this.failed.emit();return}this.dispose=this.streamService.stream(this.streamId,t=>this.onEvent(t))}ngOnDestroy(){this.teardown()}onEvent(t){switch(t.kind){case"progress":{this.pendingNewDashboard&&(this.dashboardNumber.update(e=>e+1),this.pendingNewDashboard=!1),this.totalCharts.set(t.totalWidgets),this.widgetPhases.update(e=>{let n=[...e];return n[t.widgetIndex]=Qt(n[t.widgetIndex],t.phase),n}),this.phaseLabel.set(t.label);break}case"dashboard-start":{this.resetForNextDashboard(t.dashboardName?`Setting up ${t.dashboardName}\u2026`:"Preparing the next dashboard\u2026");break}case"saved":{this.resetForNextDashboard("Preparing the next dashboard\u2026");break}case"complete":{t.dashboardIds.length>0?this.finish(()=>this.done.emit(t.dashboardIds)):this.finish(()=>this.failed.emit());break}case"error":{t.dashboardIds.length>0?this.finish(()=>this.done.emit(t.dashboardIds)):this.finish(()=>this.failed.emit());break}}}resetForNextDashboard(t){this.barKey.update(e=>e+1),this.pendingNewDashboard=!0,this.totalCharts.set(0),this.widgetPhases.set([]),this.phaseLabel.set(t)}finish(t){this.finished||(this.finished=!0,this.teardown(),t())}teardown(){this.dispose?.(),this.dispose=null}static \u0275fac=function(e){return new(e||o)};static \u0275cmp=q({type:o,selectors:[["app-dashboard-generating"]],inputs:{streamId:"streamId"},outputs:{done:"done",failed:"failed"},decls:13,vars:4,consts:[["role","status","aria-live","polite",1,"genbar"],["variant","informative","size","medium","pulse","",1,"genbar__light"],[1,"genbar__title"],["aria-hidden","true",1,"genbar__divider"],[1,"genbar__bar",3,"value"],[1,"genbar__count"],[1,"genbar__live"],["aria-hidden","true",1,"genbar__spinner"],[1,"genbar__status"]],template:function(e,n){e&1&&(ce(0,"div",0),_e(1,"nile-status-light",1),ce(2,"span",2),D(3,"Generating your dashboards"),De(),_e(4,"span",3),A(5,Un,1,1,"nile-progress-bar",4,gt),ce(7,"span",5),D(8),De(),ce(9,"div",6),_e(10,"nile-spinner",7),ce(11,"span",8),D(12),De()()()),e&2&&(c(5),I(he(2,Bn,n.barKey())),c(3),L(n.countLabel()),c(4),L(n.phaseLabel()))},styles:["[_nghost-%COMP%]{display:block;width:100%}.genbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--ng-spacing-md, 12px);width:100%;min-width:0;padding-inline-start:var(--ng-spacing-lg, 16px)}.genbar__light[_ngcontent-%COMP%]{flex:none}.genbar__title[_ngcontent-%COMP%]{font-size:var(--ng-font-size-text-sm, 14px);font-weight:var(--ng-font-weight-semibold, 600);line-height:var(--ng-line-height-text-sm, 1.4);color:var(--ng-colors-text-primary-900, #181d27);white-space:nowrap}.genbar__divider[_ngcontent-%COMP%]{width:1px;height:20px;background:var(--ng-colors-border-secondary, #e9eaeb);flex:none}.genbar__bar[_ngcontent-%COMP%]{width:160px;flex:none}.genbar__count[_ngcontent-%COMP%]{font-size:var(--ng-font-size-text-sm, 14px);line-height:var(--ng-line-height-text-sm, 1.4);color:var(--ng-colors-text-tertiary-600, #535862);white-space:nowrap}.genbar__live[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;margin-left:auto;flex:none;min-width:0}.genbar__spinner[_ngcontent-%COMP%]{font-size:14px;--indicator-color: var(--ng-colors-border-brand);--track-color: rgba(41, 112, 255, .2);flex:none}.genbar__status[_ngcontent-%COMP%]{font-size:var(--ng-font-size-text-sm, 14px);line-height:var(--ng-line-height-text-sm, 1.4);color:var(--ng-colors-text-tertiary-600, #535862);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:260px}@media(max-width:760px){.genbar__divider[_ngcontent-%COMP%], .genbar__bar[_ngcontent-%COMP%], .genbar__count[_ngcontent-%COMP%]{display:none}}"]})};var jn=["tabsScroller"],Kn=["aiExecutiveSummary"],sn=()=>({subtitle:"Explore your dashboards or ask your data a question"}),Zn=()=>({subtitle:"Setting up your initial dashboards \u2014 crafting a starter set from your data."}),Yn=(o,t)=>t.id;function Qn(o,t){if(o&1&&(s(0,"header",9),N(1,12),l()),o&2){d(2);let e=H(5);c(),x("ngTemplateOutlet",e)("ngTemplateOutletContext",se(2,sn))}}function Jn(o,t){if(o&1&&p(0,"nile-skeleton-loader",14),o&2){let e=t.$implicit;ae("width",e)}}function Xn(o,t){o&1&&p(0,"nile-skeleton-loader",17)}function ei(o,t){if(o&1&&(s(0,"div",10)(1,"div",13),A(2,Jn,1,1,"nile-skeleton-loader",14,J),l(),p(4,"span",15)(5,"nile-skeleton-loader",16),A(6,Xn,1,0,"nile-skeleton-loader",17,J),l()),o&2){let e=d(2);c(2),I(e.skeletonTabWidths),c(4),I(e.skeletonActionBtns)}}function ti(o,t){o&1&&N(0)}function ni(o,t){if(o&1&&(s(0,"div",6)(1,"div",8),_(2,Qn,2,3,"header",9),_(3,ei,8,0,"div",10),W(4,ti,1,0,"ng-container",11),l()()),o&2){let e=d(),n=H(7);c(2),y(e.showHeader()?2:-1),c(),y(e.showDashboardList()?3:-1),c(),x("ngTemplateOutlet",n)}}function ii(o,t){if(o&1&&(s(0,"header",9),N(1,12),l()),o&2){d(2);let e=H(5);c(),x("ngTemplateOutlet",e)("ngTemplateOutletContext",se(2,Zn))}}function oi(o,t){if(o&1){let e=M();s(0,"app-dashboard-generating",19),C("done",function(i){b(e);let r=d(2);return f(r.onGenerationDone(i))})("failed",function(){b(e);let i=d(2);return f(i.onGenerationFailed())}),l()}if(o&2){let e=d(2);x("streamId",e.generationStreamId())}}function ri(o,t){o&1&&N(0)}function ai(o,t){if(o&1&&(s(0,"div",7)(1,"div",8),_(2,ii,2,3,"header",9),s(3,"div",10),_(4,oi,1,1,"app-dashboard-generating",18),l()(),W(5,ri,1,0,"ng-container",11),l()),o&2){let e=d(),n=H(7);c(2),y(e.showHeader()?2:-1),c(2),y(e.features().autoGenerate?4:-1),c(),x("ngTemplateOutlet",n)}}function si(o,t){if(o&1&&(s(0,"header",9),N(1,12),l()),o&2){d(2);let e=H(5);c(),x("ngTemplateOutlet",e)("ngTemplateOutletContext",se(2,sn))}}function li(o,t){o&1&&p(0,"nile-glyph",46)}function di(o,t){if(o&1){let e=M();s(0,"span",48),C("click",function(i){return i.stopPropagation()}),s(1,"input",49,3),C("input",function(){b(e);let i=H(2),r=d(5);return f(r.onRenameInputChange(i.value))})("keydown",function(i){b(e);let r=d().$implicit,a=d(4);return f(a.onRenameInputKeydown(i,r))})("click",function(i){return i.stopPropagation()}),l(),s(3,"button",50),C("click",function(i){b(e);let r=d().$implicit,a=d(4);return f(a.commitRenameDashboard(r,i))}),p(4,"nile-glyph",51),l()()}if(o&2){let e=d().$implicit,n=d(4);c(),x("value",n.renamingValue())("disabled",n.isRenamingDashboard()),ae("data-dashboard-id",e.id),c(2),x("disabled",n.isRenamingDashboard())}}function ci(o,t){if(o&1){let e=M();s(0,"button",54),C("click",function(i){b(e);let r=d(2).$implicit,a=d(4);return f(a.startRenameDashboard(r,i))}),p(1,"nile-glyph",55),l()}}function gi(o,t){if(o&1&&(s(0,"span",52),D(1),l(),_(2,ci,2,0,"button",53)),o&2){let e=d().$implicit,n=d(4);c(),L(e.name),c(),y(n.features().rename?2:-1)}}function hi(o,t){if(o&1){let e=M();s(0,"nile-nav-tab",45),C("click",function(){let i=b(e).$implicit,r=d(4);return f(r.setActiveTab(i.id))}),_(1,li,1,0,"nile-glyph",46),_(2,di,5,4,"span",47)(3,gi,3,2),l()}if(o&2){let e=t.$implicit,n=d(4);ae("panel",e.id),c(),y(e.isAutoGenerated?1:-1),c(),y(n.renamingDashboardId()===e.id?2:3)}}function pi(o,t){o&1&&p(0,"span",43)}function mi(o,t){if(o&1){let e=M();s(0,"button",31),C("click",function(){b(e);let i=d(3);return f(i.scrollTabs(-1))}),p(1,"nile-glyph",32),l(),s(2,"div",33,2),C("scroll",function(){b(e);let i=d(3);return f(i.onTabsScroll())}),s(4,"nile-nav-tab-group",34),p(5,"nile-nav-tab",35),A(6,hi,4,3,"nile-nav-tab",36,Yn),l()(),s(8,"button",37),C("click",function(){b(e);let i=d(3);return f(i.scrollTabs(1))}),p(9,"nile-glyph",38),l(),p(10,"span",15),s(11,"nile-dropdown",39),C("nile-hide",function(){b(e);let i=d(3);return f(i.categoryFilterOpen.set(!1))}),s(12,"nile-lite-tooltip",40)(13,"button",41),C("click",function(){b(e);let i=d(3);return f(i.categoryFilterOpen.set(!i.categoryFilterOpen()))}),p(14,"nile-glyph",42),_(15,pi,1,0,"span",43),l()(),s(16,"shared-category-filter-row",44),C("mousedown",function(i){return i.stopPropagation()})("selectionChange",function(i){b(e);let r=d(3);return f(r.onCategoryFilterChange(i))}),l()()}if(o&2){let e=d(3);x("disabled",!e.canScrollLeft()),c(4),ae("value",e.activeTabId()||"__sentinel__"),c(2),I(e.visibleDashboards()),c(2),x("disabled",!e.canScrollRight()),c(3),x("open",e.categoryFilterOpen()),c(4),y(e.selectedCategory()?15:-1),c(),x("selected",e.selectedCategory())}}function ui(o,t){if(o&1){let e=M();s(0,"nile-lite-tooltip",26)(1,"button",56),C("click",function(){b(e);let i=d(3);return f(i.goToCreateDashboard())}),p(2,"nile-glyph",57),l()()}if(o&2){let e=d(3);c(),x("disabled",e.creatingDashboard())}}function bi(o,t){if(o&1){let e=M();s(0,"nile-lite-tooltip",27)(1,"button",58),C("click",function(){b(e);let i=d(3);return f(i.refreshActiveDashboard())}),p(2,"nile-glyph",59),l()()}if(o&2){let e=d(3);c(),x("disabled",!e.activeTabId()||e.refreshingDashboard()),c(),te("home-refresh-glyph--spinning",e.refreshingDashboard())}}function fi(o,t){if(o&1){let e=M();s(0,"nile-lite-tooltip",29)(1,"button",60),C("click",function(){b(e);let i=d(3);return f(i.selectHomeMenuItem("executiveSummary"))}),p(2,"nile-glyph",61),l()()}if(o&2){let e=d(3);c(),x("disabled",!e.activeTabId())}}function _i(o,t){if(o&1){let e=M();s(0,"nile-dropdown",62),C("nile-hide",function(){b(e);let i=d(3);return f(i.downloadMenuOpen.set(!1))}),s(1,"nile-lite-tooltip",63)(2,"button",64),C("click",function(){b(e);let i=d(3);return f(i.downloadMenuOpen.set(!i.downloadMenuOpen()))}),p(3,"nile-glyph",65),l()(),s(4,"nile-menu")(5,"nile-menu-item",66),C("click",function(){b(e);let i=d(3);return i.downloadMenuOpen.set(!1),f(i.selectHomeMenuItem("exportPdf"))}),p(6,"nile-glyph",67),D(7," Download as PDF "),l(),s(8,"nile-menu-item",66),C("click",function(){b(e);let i=d(3);return i.downloadMenuOpen.set(!1),f(i.selectHomeMenuItem("exportPng"))}),p(9,"nile-glyph",68),D(10," Download as PNG "),l()()()}if(o&2){let e=d(3);x("open",e.downloadMenuOpen())}}function yi(o,t){if(o&1&&(s(0,"div",25),_(1,mi,17,6),_(2,ui,3,1,"nile-lite-tooltip",26),_(3,bi,3,3,"nile-lite-tooltip",27),s(4,"div",28),_(5,fi,3,1,"nile-lite-tooltip",29),_(6,_i,11,1,"nile-dropdown",30),l()()),o&2){let e=d(2);te("is-scrollable",e.canScrollLeft()||e.canScrollRight())("tabs-bar__nav--minimal",!e.showDashboardList()),c(),y(e.showDashboardList()?1:-1),c(),y(e.features().createDashboard?2:-1),c(),y(e.features().refresh?3:-1),c(2),y(e.features().executiveSummary?5:-1),c(),y(e.features().export?6:-1)}}function Ci(o,t){if(o&1&&(s(0,"nile-nav-tab-panel",69),p(1,"app-dashboard-viewer",71),l()),o&2){let e=d(3);ae("name",e.activeTabId()),c(),x("config",e.loadedDashboards().get(e.activeTabId()))}}function vi(o,t){o&1&&N(0)}function xi(o,t){if(o&1&&(s(0,"div",70),W(1,vi,1,0,"ng-container",11),l()),o&2){d(3);let e=H(7);c(),x("ngTemplateOutlet",e)}}function wi(o,t){if(o&1&&_(0,Ci,2,2,"nile-nav-tab-panel",69)(1,xi,2,1,"div",70),o&2){let e=d(2);y(e.loadedDashboards().has(e.activeTabId())?0:e.isTabLoading()||e.refreshingDashboard()?1:-1)}}function Pi(o,t){if(o&1){let e=M();s(0,"div",21)(1,"h2",72),D(2,"No dashboards in this category"),l(),s(3,"p",73),D(4,"Try a different category, or clear the filter to see everything."),l(),s(5,"nile-button",74),C("click",function(){b(e);let i=d(2);return f(i.onCategoryFilterChange(null))}),D(6," Clear filter "),l()()}}function Di(o,t){if(o&1){let e=M();s(0,"nile-button",107),C("click",function(){b(e);let i=d(3);return f(i.goToCreateDashboard())}),p(1,"nile-glyph",108),D(2," Create dashboard "),l()}if(o&2){let e=d(3);ae("disabled",e.creatingDashboard()?"":null)}}function Mi(o,t){if(o&1&&(s(0,"div",21)(1,"div",75),it(),s(2,"svg",76),p(3,"rect",77)(4,"rect",78)(5,"rect",79),s(6,"rect",80),p(7,"animate",81)(8,"animate",82),l(),s(9,"rect",83),p(10,"animate",84)(11,"animate",85),l(),s(12,"rect",86),p(13,"animate",87)(14,"animate",88),l(),s(15,"rect",89),p(16,"animate",90)(17,"animate",91),l(),s(18,"rect",92),p(19,"animate",93)(20,"animate",94),l(),p(21,"rect",95)(22,"rect",96)(23,"circle",97),s(24,"circle",98),p(25,"animate",99),l(),p(26,"rect",100)(27,"rect",101),s(28,"path",102),p(29,"animate",103),l(),s(30,"circle",104),p(31,"animate",105),l()()(),ot(),s(32,"h2",72),D(33,"Build your dashboard"),l(),s(34,"p",73),D(35," Tap the below button to generate dashboard. "),l(),_(36,Di,3,1,"nile-button",106),l()),o&2){let e=d(2);c(36),y(e.features().createDashboard?36:-1)}}function Si(o,t){if(o&1){let e=M();s(0,"db-ai-prompt-panel",109),C("closePanel",function(){b(e);let i=d(2);return f(i.showAiPanel.set(!1))}),l()}if(o&2){let e=d(2);x("dashboardId",e.activeTabId())("dashboardName",e.activeDashboardName())("dashboardConfig",e.loadedDashboards().get(e.activeTabId())??null)("chatOnly",e.aiChatOnly())("initialPrompt",e.aiInitialPrompt())}}function ki(o,t){o&1&&p(0,"nile-executive-summary",24,4)}function Ti(o,t){if(o&1){let e=M();s(0,"div",7)(1,"div",8),_(2,si,2,3,"header",9),_(3,yi,7,9,"div",20),_(4,wi,2,1)(5,Pi,7,0,"div",21)(6,Mi,37,1,"div",21),s(7,"nile-drawer",22),C("nile-request-close",function(){b(e);let i=d();return f(i.showAiPanel.set(!1))}),_(8,Si,1,5,"db-ai-prompt-panel",23),l(),_(9,ki,2,0,"nile-executive-summary",24),l()()}if(o&2){let e=d();c(2),y(e.showHeader()?2:-1),c(),y(e.allDashboards().length>0&&e.hasToolbarActions()?3:-1),c(),y(e.activeTabId()?4:e.allDashboards().length>0?5:e.allDashboards().length===0?6:-1),c(3),x("open",e.showAiPanel()),c(),y(e.features().aiPrompt&&e.showAiPanel()?8:-1),c(),y(e.features().executiveSummary?9:-1)}}function Oi(o,t){if(o&1&&(s(0,"div",110)(1,"h1",111),D(2,"Dashboards"),l(),s(3,"p",112),D(4),l()()),o&2){let e=t.subtitle;c(4),L(e)}}function Ei(o,t){o&1&&(s(0,"div",115)(1,"div",118),p(2,"nile-skeleton-loader",119)(3,"nile-skeleton-loader",120),l(),p(4,"nile-skeleton-loader",121),s(5,"div",122),p(6,"nile-skeleton-loader",123)(7,"nile-skeleton-loader",124),l(),p(8,"nile-skeleton-loader",125),l())}function Fi(o,t){o&1&&(s(0,"div",117)(1,"div",126)(2,"div",127),p(3,"nile-skeleton-loader",128)(4,"nile-skeleton-loader",129),l(),p(5,"nile-skeleton-loader",130),l(),p(6,"nile-skeleton-loader",131),l())}function Ai(o,t){if(o&1&&(s(0,"div",113)(1,"div",114),A(2,Ei,9,0,"div",115,J),l(),s(4,"div",116),A(5,Fi,7,0,"div",117,J),l()()),o&2){let e=d();c(2),I(e.skeletonKpis),c(3),I(e.skeletonWidgets)}}var Ye=4,xe="__dvz-widget-selection__";function Ii(o){let e=0,n=0,i=0;return o.map(r=>{let a=Math.min(r.layout.w,12);e>0&&e+a>12&&(e=0,n+=i,i=0);let g=E(P({},r),{layout:E(P({},r.layout),{x:e,y:n})});return e+=a,i=Math.max(i,r.layout.h),g})}function Ri(o){let t=o.indexOf("/");if(t<=0||t===o.length-1)return null;let e=o.slice(0,t).trim(),n=o.slice(t+1).trim();return e&&n?{dashboardKey:e,widgetKey:n}:null}var He=class o{MAX_TABS=Ye;tabsScrollerEl;dashboardViewerRef;aiExecutiveSummaryEl;appliedHostTimeRange=null;appliedHostTimeRangeViewer=null;syncHostTimeRange(){let t=this.dashboardsConfig().timeRange??null,e=this.dashboardViewerRef??null;if(!e)return;let n=t!==this.appliedHostTimeRange,i=e!==this.appliedHostTimeRangeViewer;!n&&!i||(this.appliedHostTimeRangeViewer=e,!(t===null&&this.appliedHostTimeRange===null)&&(this.appliedHostTimeRange=t,e.applyTimeRange(t)))}tabsScrollLeft=m(0);tabsClientWidth=m(0);tabsScrollWidth=m(0);canScrollLeft=T(()=>this.tabsScrollLeft()>0);canScrollRight=T(()=>this.tabsScrollLeft()+this.tabsClientWidth()<this.tabsScrollWidth()-1);onTabsScroll(){this.updateTabsScrollState()}updateTabsScrollState(){let t=this.tabsScrollerEl?.nativeElement;t&&(this.tabsScrollLeft.set(t.scrollLeft),this.tabsClientWidth.set(t.clientWidth),this.tabsScrollWidth.set(t.scrollWidth))}scrollTabs(t){let e=this.tabsScrollerEl?.nativeElement;e&&e.scrollBy({left:t*e.clientWidth*.8,behavior:"smooth"})}scrollActiveTabIntoView(){let t=this.tabsScrollerEl?.nativeElement;if(!t)return;let e=this.activeTabId();if(!e)return;let n=window.CSS&&CSS.escape?CSS.escape(e):e.replace(/"/g,'\\"'),i=t.querySelector(`nile-nav-tab[panel="${n}"]`);if(!i)return;let r=i.getBoundingClientRect(),a=t.getBoundingClientRect(),g=16;r.right>a.right?t.scrollBy({left:r.right-a.right+g,behavior:"smooth"}):r.left<a.left&&t.scrollBy({left:r.left-a.left-g,behavior:"smooth"})}onWindowResize=()=>this.ngZone.run(()=>this.updateTabsScrollState());showAiPanel=m(!1);aiChatOnly=m(!1);aiInitialPrompt=m("");allDashboards=m([]);selectedCategory=m(null);dashboardCategories=Xt;categoryFilterOpen=m(!1);visibleDashboards=T(()=>{let t=this.selectedCategory(),e=this.allDashboards();return t?e.filter(n=>n.category?.includes(t)):e});activeTabs=m([]);activeTabId=m("");loadedDashboards=m(new Map);singleDashboardMode=!1;isLoading=m(!0);isTabLoading=m(!1);skeletonTabWidths=[72,220,140];skeletonKpis=Array.from({length:4});skeletonWidgets=Array.from({length:4});skeletonActionBtns=Array.from({length:4});showMore=T(()=>this.allDashboards().length>0);activeDashboardName=T(()=>this.allDashboards().find(t=>t.id===this.activeTabId())?.name??"");activeConfig=T(()=>this.loadedDashboards().get(this.activeTabId())??null);isExporting=m(!1);showExportDropdown=m(!1);downloadMenuOpen=m(!1);creatingDashboard=m(!1);generationStreamId=m("");isGenerating=T(()=>this.generationStreamId()!=="");generationSettled=!1;showHeader(){return this.dashboardsConfig().ui.header}showDashboardList(){return!this.singleDashboardMode&&this.dashboardsConfig().ui.dashboardList}autoHeight(){return this.dashboardsConfig().ui.autoHeight}features(){return this.dashboardsConfig().features}hasToolbarActions(){let t=this.features();return this.showDashboardList()||t.createDashboard||t.refresh||t.executiveSummary||t.export}copy(){return this.dashboardsConfig().copy}dashboardsConfig=u(V);service=u(re);ngZone=u(we);el=u(de);navigator=u(B);routeProgress=u($t);autoDashboard=u(Yt);publishRepo=u(O);goToCreateDashboard(){this.creatingDashboard()||(this.creatingDashboard.set(!0),this.navigator.toAskAquera())}constructor(){Z(()=>{this.activeTabId(),this.allDashboards(),queueMicrotask(()=>this.scrollActiveTabIntoView())})}ngAfterViewChecked(){this.updateTabsScrollState(),this.syncHostTimeRange()}async runExecutiveSummary(){let t=this.activeTabId();if(!t)return;let e=this.activeDashboardName(),n=this.aiExecutiveSummaryEl?.nativeElement;n&&(n.config={summary:"",buttonLabel:"Executive Summary",buttonVariant:"secondary",drawerLabel:e?`${e} Summary`:"Dashboard Summary",typingSpeed:5,closeOnEscape:!0},n.loading=!0,n.show?.());try{let i=await this.publishRepo.fetchDashboardSummary(t),r=this.aiExecutiveSummaryEl?.nativeElement;r&&(r.config=E(P({},r.config??{}),{summary:i}),r.loading=!1,r.open&&r.startTyping?.())}catch(i){let r=this.aiExecutiveSummaryEl?.nativeElement,a=i instanceof Error?i.message:"Failed to generate summary.";r&&(r.config=E(P({},r.config??{}),{summary:`<p><strong>Couldn't generate an executive summary.</strong> ${a}</p>`}),r.loading=!1,r.open&&r.startTyping?.())}}onExportTriggerClick(){this.showExportDropdown.set(!this.showExportDropdown())}selectHomeMenuItem(t){t==="askAi"?(this.aiChatOnly.set(!0),this.aiInitialPrompt.set(""),this.showAiPanel.set(!0)):t==="executiveSummary"?this.runExecutiveSummary():t==="exportPdf"?this.exportDashboardPdf():t==="exportPng"&&this.exportDashboardPng()}getDashboardTarget(){let t=this.activeTabId();return this.el.nativeElement.querySelector(`nile-nav-tab-panel[name="${t}"] app-dashboard-viewer gridster`)}async exportDashboardPdf(){if(this.isExporting())return;let t=this.getDashboardTarget();if(t){this.showExportDropdown.set(!1),this.isExporting.set(!0),await new Promise(e=>requestAnimationFrame(()=>requestAnimationFrame(e)));try{let e=t.scrollWidth,n=t.scrollHeight,i=await Ke(t,{quality:1,width:e,height:n,cacheBust:!0,backgroundColor:"#ffffff",style:{height:`${n}px`,maxHeight:"none",overflow:"visible"}}),r=this.activeDashboardName()||"Dashboard",a=90,g=new Zt({orientation:e>n?"landscape":"portrait",unit:"px",format:[e,n+a]});g.setFillColor(245,245,248),g.rect(0,0,e,a,"F"),g.setFont("helvetica","bold"),g.setFontSize(28),g.setTextColor(50,50,60),g.text(r,e/2,a/2+7,{align:"center"}),g.addImage(i,"JPEG",0,a,e,n),g.save(`${r}.pdf`)}finally{this.isExporting.set(!1)}}}async exportDashboardPng(){if(this.isExporting())return;let t=this.getDashboardTarget();if(t){this.showExportDropdown.set(!1),this.isExporting.set(!0),await new Promise(e=>requestAnimationFrame(()=>requestAnimationFrame(e)));try{let e=t.scrollWidth,n=t.scrollHeight,i=await Ke(t,{quality:1,width:e,height:n,cacheBust:!0,backgroundColor:"#ffffff",style:{height:`${n}px`,maxHeight:"none",overflow:"visible"}}),r=this.activeDashboardName()||"Dashboard",a=90,g=document.createElement("canvas");g.width=e,g.height=n+a;let h=g.getContext("2d");h.fillStyle="#f5f5f8",h.fillRect(0,0,e,a),h.fillStyle="#32323c",h.font="bold 28px helvetica",h.textAlign="center",h.textBaseline="middle",h.fillText(r,e/2,a/2+7);let w=new Image;w.src=i,await new Promise(S=>{w.onload=()=>S()}),h.drawImage(w,0,a,e,n);let v=document.createElement("a");v.href=g.toDataURL("image/png"),v.download=`${r}.png`,v.click()}finally{this.isExporting.set(!1)}}}toggleAiPanel(){this.showAiPanel.update(t=>!t)}onToggleAiPanel=()=>this.ngZone.run(()=>this.showAiPanel.update(t=>!t));ngOnInit(){this.loadList(),window.addEventListener("dv:toggle-ai-panel",this.onToggleAiPanel),window.addEventListener("resize",this.onWindowResize)}ngOnDestroy(){window.removeEventListener("dv:toggle-ai-panel",this.onToggleAiPanel),window.removeEventListener("resize",this.onWindowResize)}async loadList(){this.isLoading.set(!0);try{let t=await this.routeProgress.track(this.service.loadDashboards());this.ngZone.run(()=>this.allDashboards.set(t));let e=this.dashboardsConfig();e.initialWidgets.length>0&&await this.loadWidgetSelection(t,e.initialWidgets),this.activeTabId()||this.ngZone.run(()=>{let n=e.initialDashboard,i=n?t.find(a=>a.id===n)??t.find(a=>a.name===n):void 0;this.singleDashboardMode=!!i;let r=i?[i]:t.slice(0,Ye);if(this.activeTabs.set(r),r.length>0){let a=i?.id??r[0].id;this.activeTabId.set(a),this.loadTab(a)}}),t.length===0&&await this.checkAutoDashboard()}catch(t){console.error("Failed to load dashboards list:",t)}finally{this.ngZone.run(()=>this.isLoading.set(!1))}}async loadWidgetSelection(t,e){let n=v=>t.find(S=>S.id===v)??t.find(S=>S.name===v),i=e.map(v=>{let S=Ri(v);if(!S)return console.warn(`[dvz-dashboards] config.initial.widgets entry "${v}" is not "<dashboard>/<widget>" \u2014 skipped.`),null;let K=n(S.dashboardKey);return K?{raw:v,widgetKey:S.widgetKey,dashboardId:K.id}:(console.warn(`[dvz-dashboards] config.initial.widgets entry "${v}" \u2014 no dashboard matches "${S.dashboardKey}", skipped.`),null)}).filter(v=>!!v);if(!i.length)return;let r=[...new Set(i.map(v=>v.dashboardId))],a=await this.routeProgress.track(Promise.all(r.map(v=>this.service.fetchDashboard(v)))),g=new Map(r.map((v,S)=>[v,a[S]])),h=[];for(let v of i){let S=g.get(v.dashboardId),K=S?.widgets.find(Q=>Q.id===v.widgetKey)??S?.widgets.find(Q=>Q.title===v.widgetKey);if(!K){console.warn(`[dvz-dashboards] config.initial.widgets entry "${v.raw}" \u2014 no widget matches "${v.widgetKey}" on dashboard "${v.dashboardId}", skipped.`);continue}h.push(K)}if(!h.length)return;let w={id:xe,name:"Selected widgets",widgets:Ii(h),canRefresh:a.some(v=>v.canRefresh)};this.ngZone.run(()=>{this.singleDashboardMode=!0,this.activeTabs.set([{id:xe,name:w.name,createdAt:new Date().toISOString()}]),this.activeTabId.set(xe);let v=new Map(this.loadedDashboards());v.set(xe,w),this.loadedDashboards.set(v)})}async checkAutoDashboard(){if(!(this.generationSettled||this.isGenerating()))try{let t=await this.autoDashboard.trigger();t?.success&&!t.skipped&&t.streamId&&this.ngZone.run(()=>{this.generationStreamId.set(t.streamId)})}catch{}}onGenerationDone(t){this.generationSettled=!0,this.generationStreamId.set("");let e=t.length;this.loadList().then(()=>{this.showReadyToast(e>1?`${e} dashboards are ready`:"Your dashboard is ready")})}onGenerationFailed(){this.generationSettled=!0,this.generationStreamId.set("")}showReadyToast(t){Ce({variant:"success",title:"All set",content:t})}async loadTab(t){if(!this.loadedDashboards().has(t)){this.isTabLoading.set(!0);try{let e=await this.routeProgress.track(this.service.fetchDashboard(t));this.ngZone.run(()=>{let n=new Map(this.loadedDashboards());n.set(t,e),this.loadedDashboards.set(n)})}catch(e){console.error(`Failed to load dashboard ${t}:`,e)}finally{this.ngZone.run(()=>this.isTabLoading.set(!1))}}}refreshingDashboard=m(!1);async refreshActiveDashboard(){let t=this.activeTabId();if(!t||this.refreshingDashboard())return;if(t===xe){this.refreshingDashboard.set(!0),this.ngZone.run(()=>{let n=new Map(this.loadedDashboards());n.delete(t),this.loadedDashboards.set(n)});try{await this.loadWidgetSelection(this.allDashboards(),this.dashboardsConfig().initialWidgets)}finally{this.ngZone.run(()=>this.refreshingDashboard.set(!1))}return}let e=this.loadedDashboards().get(t);this.refreshingDashboard.set(!0),this.ngZone.run(()=>{let n=new Map(this.loadedDashboards());n.delete(t),this.loadedDashboards.set(n)});try{let n=await this.routeProgress.track(this.service.fetchDashboard(t));this.ngZone.run(()=>{let i=new Map(this.loadedDashboards());i.set(t,n),this.loadedDashboards.set(i)})}catch(n){console.error(`Failed to refresh dashboard ${t}:`,n),e&&this.ngZone.run(()=>{let i=new Map(this.loadedDashboards());i.set(t,e),this.loadedDashboards.set(i)})}finally{this.ngZone.run(()=>{this.refreshingDashboard.set(!1)})}}onTabChange(t){let e=t.detail.value;e!==this.activeTabId()&&this.setActiveTab(e)}onCategoryFilterChange(t){this.selectedCategory.set(t),this.categoryFilterOpen.set(!1);let e=this.visibleDashboards();e.some(n=>n.id===this.activeTabId())||(e.length>0?this.setActiveTab(e[0].id):this.activeTabId.set(""))}setActiveTab(t){this.showAiPanel.set(!1),this.activeTabId.set(t),this.loadTab(t)}isInActiveTabs(t){return this.activeTabs().some(e=>e.id===t)}canAdd(){return this.activeTabs().length<Ye}isLastActiveDashboard(t){return this.activeTabs().length===1&&this.isInActiveTabs(t)}renamingDashboardId=m(null);renamingValue=m("");isRenamingDashboard=m(!1);startRenameDashboard(t,e){e.stopPropagation(),this.renamingDashboardId.set(t.id),this.renamingValue.set(t.name),queueMicrotask(()=>{let n=this.el.nativeElement.querySelector(`.tab-rename-input[data-dashboard-id="${t.id}"]`);n?.focus(),n?.select()})}onRenameInputChange(t){this.renamingValue.set(t)}onRenameInputKeydown(t,e){t.key==="Enter"?(t.preventDefault(),this.commitRenameDashboard(e)):t.key==="Escape"&&(t.preventDefault(),this.cancelRenameDashboard(t))}cancelRenameDashboard(t){t?.stopPropagation(),this.renamingDashboardId.set(null),this.renamingValue.set("")}async commitRenameDashboard(t,e){e?.stopPropagation();let n=this.renamingValue().trim();if(!n||n===t.name){this.cancelRenameDashboard();return}this.isRenamingDashboard.set(!0);try{await this.service.renameDashboard(t.id,n),this.ngZone.run(()=>{let i=r=>r.map(a=>a.id===t.id?E(P({},a),{name:n}):a);this.allDashboards.update(i),this.activeTabs.update(i),this.renamingDashboardId.set(null),this.renamingValue.set("")}),Ce({variant:"success",title:"Renamed",content:"Dashboard renamed."})}catch{}finally{this.ngZone.run(()=>this.isRenamingDashboard.set(!1))}}onDashboardToggle(t,e){if(e){if(!this.canAdd())return;this.activeTabs.update(n=>[...n,t]),this.setActiveTab(t.id)}else{let n=this.activeTabId()===t.id;if(this.activeTabs.update(i=>i.filter(r=>r.id!==t.id)),n){let i=this.activeTabs();i.length>0?this.setActiveTab(i[0].id):this.activeTabId.set("")}}}static \u0275fac=function(e){return new(e||o)};static \u0275cmp=q({type:o,selectors:[["dvz-dashboards-page"]],viewQuery:function(e,n){if(e&1&&ge(jn,5)(ve,5)(Kn,5),e&2){let i;X(i=ee())&&(n.tabsScrollerEl=i.first),X(i=ee())&&(n.dashboardViewerRef=i.first),X(i=ee())&&(n.aiExecutiveSummaryEl=i.first)}},hostVars:2,hostBindings:function(e,n){e&2&&te("auto-height",n.autoHeight())},decls:8,vars:3,consts:[["pageTitleBlock",""],["dashboardSkeleton",""],["tabsScroller",""],["renameInput",""],["aiExecutiveSummary",""],[1,"home-page"],["aria-hidden","true",1,"tabs-wrapper","home-skeleton"],[1,"tabs-wrapper"],[1,"tabs-bar"],[1,"home-nav"],[1,"tabs-bar__nav","home-skeleton__tabs-row"],[4,"ngTemplateOutlet"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"home-skeleton__tab-pills"],["variant","rounded","height","28",1,"home-skeleton__tab"],["aria-hidden","true",1,"home-menu-divider"],["variant","rounded","width","32","height","28","border-radius","8px"],["variant","circular","width","28","height","28"],[3,"streamId"],[3,"done","failed","streamId"],[1,"tabs-bar__nav",3,"is-scrollable","tabs-bar__nav--minimal"],[1,"home-empty-state"],["contained","","no-header","","placement","end","label","Ask",1,"home-ai-drawer",3,"nile-request-close","open"],[3,"dashboardId","dashboardName","dashboardConfig","chatOnly","initialPrompt"],[1,"ai-executive-summary"],[1,"tabs-bar__nav"],["content","Create dashboard"],["content","Refresh dashboard"],[1,"home-actions"],["content","Executive Summary"],["placement","bottom-end",1,"home-download",3,"open"],["type","button","aria-label","Scroll tabs left",1,"tabs-scroll-btn","tabs-scroll-btn--left",3,"click","disabled"],["name","ng-chevron-left","method","stroke","size","16"],[1,"tabs-scroller",3,"scroll"],["variant","filled",1,"dashboard-tab-group"],["slot","nav","panel","__sentinel__",1,"tab-sentinel"],["slot","nav"],["type","button","aria-label","Scroll tabs right",1,"tabs-scroll-btn","tabs-scroll-btn--right",3,"click","disabled"],["name","ng-chevron-right","method","stroke","size","16"],["hoist","","placement","bottom-end",1,"home-category-filter",3,"nile-hide","open"],["slot","trigger","content","Filter by category"],["type","button","aria-label","Filter by category",1,"home-action-btn",3,"click"],["name","ng-filter-lines","method","stroke","size","18"],["aria-hidden","true",1,"home-category-filter__dot"],["variant","menu",1,"home-category-filter__panel",3,"mousedown","selectionChange","selected"],["slot","nav",3,"click"],["name","ng-stars-02","method","stroke","size","14","color","#7a5af8","aria-label","Auto-generated dashboard",1,"tab-auto-badge"],[1,"tab-rename"],[1,"tab-rename",3,"click"],["type","text",1,"tab-rename-input",3,"input","keydown","click","value","disabled"],["type","button","aria-label","Save dashboard name",1,"tab-rename-save",3,"click","disabled"],["name","ng-check","method","stroke","size","14","color","var(--ng-colors-border-brand)"],[1,"tab-label"],["type","button","aria-label","Rename dashboard",1,"tab-edit-btn"],["type","button","aria-label","Rename dashboard",1,"tab-edit-btn",3,"click"],["name","ng-edit-02","method","stroke","size","12"],["type","button","aria-label","Create dashboard",1,"home-action-btn",3,"click","disabled"],["name","ng-plus","method","stroke","size","18"],["type","button","aria-label","Refresh dashboard",1,"home-action-btn",3,"click","disabled"],["name","ng-refresh-ccw","method","stroke","size","18",1,"home-refresh-glyph"],["type","button","aria-label","Executive Summary",1,"home-action-btn",3,"click","disabled"],["name","ng-file-02","method","stroke","size","18"],["placement","bottom-end",1,"home-download",3,"nile-hide","open"],["slot","trigger","content","Download"],["type","button","aria-label","Download",1,"home-action-btn",3,"click"],["name","ng-download-01","method","stroke","size","18"],[3,"click"],["slot","prefix","name","ng-file-06","method","stroke","size","14"],["slot","prefix","name","ng-image-03","method","stroke","size","14"],["active","",1,"viewer-scroll-container"],["aria-hidden","true",1,"home-skeleton"],[3,"config"],[1,"home-empty-state__title"],[1,"home-empty-state__desc"],["variant","tertiary",3,"click"],[1,"home-empty-state__graphic"],["viewBox","0 0 380 140","aria-hidden","true","preserveAspectRatio","xMidYMid meet"],["x","40","y","20","width","300","height","100","rx","8","fill","#fff","stroke","#80AED3","stroke-width","1.5","stroke-dasharray","4 4"],["x","56","y","36","width","84","height","68","rx","6","fill","#F7FAFC","stroke","#E6E9EB"],["x","64","y","44","width","40","height","3","rx","1.5","fill","#80AED3"],["x","64","y","80","width","6","height","20","rx","1","fill","#005EA6","opacity","0.7"],["attributeName","height","values","20;14;20","dur","2s","repeatCount","indefinite"],["attributeName","y","values","80;86;80","dur","2s","repeatCount","indefinite"],["x","76","y","74","width","6","height","26","rx","1","fill","#005EA6"],["attributeName","height","values","26;18;26","dur","2s","begin","0.2s","repeatCount","indefinite"],["attributeName","y","values","74;82;74","dur","2s","begin","0.2s","repeatCount","indefinite"],["x","88","y","68","width","6","height","32","rx","1","fill","#005EA6","opacity","0.85"],["attributeName","height","values","32;24;32","dur","2s","begin","0.4s","repeatCount","indefinite"],["attributeName","y","values","68;76;68","dur","2s","begin","0.4s","repeatCount","indefinite"],["x","100","y","78","width","6","height","22","rx","1","fill","#005EA6","opacity","0.6"],["attributeName","height","values","22;16;22","dur","2s","begin","0.6s","repeatCount","indefinite"],["attributeName","y","values","78;84;78","dur","2s","begin","0.6s","repeatCount","indefinite"],["x","112","y","66","width","6","height","34","rx","1","fill","#005EA6","opacity","0.85"],["attributeName","height","values","34;26;34","dur","2s","begin","0.8s","repeatCount","indefinite"],["attributeName","y","values","66;74;66","dur","2s","begin","0.8s","repeatCount","indefinite"],["x","148","y","36","width","84","height","68","rx","6","fill","#F7FAFC","stroke","#E6E9EB"],["x","156","y","44","width","40","height","3","rx","1.5","fill","#80AED3"],["cx","190","cy","78","r","14","fill","none","stroke","#E6EFF6","stroke-width","5"],["cx","190","cy","78","r","14","fill","none","stroke","#005EA6","stroke-width","5","stroke-linecap","round","stroke-dasharray","88","stroke-dashoffset","88","transform","rotate(-90 190 78)"],["attributeName","stroke-dashoffset","values","88;22;22;88","keyTimes","0;0.5;0.85;1","dur","2.6s","repeatCount","indefinite"],["x","240","y","36","width","84","height","68","rx","6","fill","#F7FAFC","stroke","#E6E9EB"],["x","248","y","44","width","40","height","3","rx","1.5","fill","#80AED3"],["d","M 250 92 L 264 80 L 278 86 L 292 72 L 306 78 L 320 64","fill","none","stroke","#005EA6","stroke-width","1.5","stroke-linecap","round","stroke-linejoin","round","stroke-dasharray","200","stroke-dashoffset","200"],["attributeName","stroke-dashoffset","values","200;0;0;200","keyTimes","0;0.5;0.85;1","dur","2.6s","repeatCount","indefinite"],["cx","320","cy","64","r","2.5","fill","#005EA6"],["attributeName","opacity","values","0;0;1;1;0","keyTimes","0;0.45;0.55;0.85;1","dur","2.6s","repeatCount","indefinite"],["variant","primary","aria-label","Create dashboard",1,"home-empty-state__cta"],["variant","primary","aria-label","Create dashboard",1,"home-empty-state__cta",3,"click"],["slot","prefix","name","ng-plus","size","16"],[3,"closePanel","dashboardId","dashboardName","dashboardConfig","chatOnly","initialPrompt"],[1,"home-nav__title-block"],[1,"home-nav__title"],[1,"home-nav__sub"],[1,"home-skeleton__panel"],[1,"home-skeleton__kpis"],[1,"home-skeleton__kpi"],[1,"home-skeleton__widgets"],[1,"home-skeleton__widget"],[1,"home-skeleton__kpi-head"],["variant","text","width","56%","height","14"],["variant","rounded","width","32","height","32","border-radius","8px"],["variant","text","width","48%","height","30"],[1,"home-skeleton__kpi-row"],["variant","rounded","width","72","height","20","border-radius","999px"],["variant","text","width","38%","height","11"],["variant","rounded","width","100%","height","44","border-radius","8px",1,"home-skeleton__kpi-spark"],[1,"home-skeleton__widget-head"],[1,"home-skeleton__widget-titles"],["variant","text","width","42%","height","16"],["variant","text","width","64%","height","11"],["variant","circular","width","20","height","20"],["variant","rounded","width","100%","height","100%","border-radius","10px",1,"home-skeleton__widget-chart"]],template:function(e,n){e&1&&(s(0,"div",5),_(1,ni,5,3,"div",6),_(2,ai,6,3,"div",7),_(3,Ti,10,6,"div",7),l(),W(4,Oi,5,1,"ng-template",null,0,ye)(6,Ai,7,0,"ng-template",null,1,ye)),e&2&&(c(),y(n.isLoading()?1:-1),c(),y(!n.isLoading()&&n.isGenerating()?2:-1),c(),y(!n.isLoading()&&!n.isGenerating()?3:-1))},dependencies:[ke,ve,Ve,We,en],styles:['@charset "UTF-8";[_nghost-%COMP%]{display:block;height:100%;min-height:0}.home-page[_ngcontent-%COMP%]{height:100%;min-height:0;display:flex;flex-direction:column;background:var(--ng-colors-bg-active);overflow:visible;position:relative}.auto-height[_nghost-%COMP%]{height:auto}.auto-height[_nghost-%COMP%] .home-page[_ngcontent-%COMP%]{height:auto}.auto-height[_nghost-%COMP%] .tabs-wrapper[_ngcontent-%COMP%], .auto-height[_nghost-%COMP%] .tabs-bar[_ngcontent-%COMP%]{flex:0 0 auto}.loading-state[_ngcontent-%COMP%], .empty-state[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;height:200px;color:var(--ng-colors-text-tertiary-600)}.home-empty-state[_ngcontent-%COMP%]{margin:24px;padding:56px 32px;display:flex;flex-direction:column;align-items:center;text-align:center;background:var(--ng-colors-bg-primary);border:1px solid var(--ng-colors-border-secondary);border-radius:12px}.home-empty-state__graphic[_ngcontent-%COMP%]{width:380px;max-width:100%;height:140px;margin-bottom:24px;display:block}.home-empty-state__graphic[_ngcontent-%COMP%] svg[_ngcontent-%COMP%]{display:block;width:100%;height:100%}.home-empty-state__title[_ngcontent-%COMP%]{margin:0 0 8px;font-size:16px;font-weight:600;color:var(--ng-colors-text-primary-900);letter-spacing:-.01em}.home-empty-state__desc[_ngcontent-%COMP%]{margin:0;max-width:480px;font-size:14px;line-height:1.5;color:var(--ng-colors-text-tertiary-600)}.home-empty-state__cta[_ngcontent-%COMP%]{margin-top:24px}.toolbar[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:flex-end;height:64px;padding:0 38px;background:var(--ng-colors-bg-primary);border-bottom:1px solid var(--ng-componentcolors-alpha-black-10);position:fixed;top:var(--nav-height, 56px);left:0;right:0;z-index:var(--z-header)}.toolbar__right[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--ng-spacing-3, 12px)}.tabs-wrapper[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;min-height:0}.tabs-bar[_ngcontent-%COMP%]{position:relative;flex:1 1 auto;min-height:0;display:flex;flex-direction:column}.tabs-bar[_ngcontent-%COMP%] .home-nav[_ngcontent-%COMP%]{position:relative;top:auto;z-index:var(--z-sticky-row);display:flex;align-items:center;justify-content:space-between;gap:16px;height:76px;margin:0;padding:0 22px;background:var(--ng-colors-bg-primary);border-bottom:1px solid var(--ng-colors-border-secondary);flex-shrink:0}.tabs-bar[_ngcontent-%COMP%] .home-nav__title-block[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2px;min-width:0}.tabs-bar[_ngcontent-%COMP%] .home-nav__title[_ngcontent-%COMP%]{margin:0;font-size:16px;font-weight:600;color:var(--ng-colors-text-primary-900);line-height:1.2;letter-spacing:-.01em}.tabs-bar[_ngcontent-%COMP%] .home-nav__sub[_ngcontent-%COMP%]{margin:0;font-size:13px;font-weight:400;color:var(--ng-colors-text-tertiary-600);line-height:1.3}.tabs-bar[_ngcontent-%COMP%] .tabs-bar__nav[_ngcontent-%COMP%]{position:relative;top:auto;min-height:56px;display:flex;align-items:center;justify-content:flex-end;gap:4px;z-index:var(--z-sticky-row);min-width:0;margin:0;background:var(--ng-colors-bg-primary);border-bottom:1px solid var(--ng-colors-border-secondary)}.tabs-bar[_ngcontent-%COMP%] .tabs-bar__nav.tabs-bar__nav--minimal[_ngcontent-%COMP%]{background:transparent;border-bottom:none}.tabs-bar[_ngcontent-%COMP%] .home-menu-divider[_ngcontent-%COMP%]{width:1px;height:20px;background:var(--ng-colors-border-secondary);margin:0 6px 0 8px;flex-shrink:0}.tabs-bar[_ngcontent-%COMP%] .tabs-scroller[_ngcontent-%COMP%]{flex:1;min-width:0;overflow-x:auto;overflow-y:hidden;position:relative;scrollbar-width:none}.tabs-bar[_ngcontent-%COMP%] .tabs-scroller[_ngcontent-%COMP%]::-webkit-scrollbar{display:none}.tabs-bar[_ngcontent-%COMP%] .dashboard-tab-group[_ngcontent-%COMP%]{display:block;width:max-content;min-width:100%}.tabs-bar[_ngcontent-%COMP%] .tab-sentinel[_ngcontent-%COMP%]{display:none!important}.tabs-bar[_ngcontent-%COMP%] .tab-auto-badge[_ngcontent-%COMP%]{display:inline-flex;vertical-align:text-bottom;margin-right:4px;flex:0 0 auto}.tabs-bar[_ngcontent-%COMP%] .tab-label[_ngcontent-%COMP%]{white-space:nowrap}.tabs-bar[_ngcontent-%COMP%] .tab-edit-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;margin-left:4px;padding:0;border:0;background:transparent;border-radius:4px;color:var(--ng-colors-text-tertiary-600);cursor:pointer;opacity:0;pointer-events:none;flex:0 0 auto;transition:background .15s,opacity .15s,color .15s}.tabs-bar[_ngcontent-%COMP%] .tab-edit-btn[_ngcontent-%COMP%]:hover, .tabs-bar[_ngcontent-%COMP%] .tab-edit-btn[_ngcontent-%COMP%]:focus-visible{background:var(--ng-colors-bg-active);color:var(--ng-colors-text-primary-900)}.tabs-bar[_ngcontent-%COMP%] nile-nav-tab[_ngcontent-%COMP%]:hover .tab-edit-btn[_ngcontent-%COMP%], .tabs-bar[_ngcontent-%COMP%] .tab-edit-btn[_ngcontent-%COMP%]:focus-visible{opacity:1;pointer-events:auto}.tabs-bar[_ngcontent-%COMP%] .tab-rename[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px}.tabs-bar[_ngcontent-%COMP%] .tab-rename-input[_ngcontent-%COMP%]{width:140px;height:24px;padding:0 6px;font-size:13px;font-weight:600;color:var(--ng-colors-text-primary-900);background:var(--ng-colors-bg-primary);border:1px solid var(--ng-colors-border-secondary);border-radius:6px;outline:none}.tabs-bar[_ngcontent-%COMP%] .tab-rename-input[_ngcontent-%COMP%]:focus{border-color:var(--ng-colors-border-brand);box-shadow:0 0 0 3px #2970ff29}.tabs-bar[_ngcontent-%COMP%] .tab-rename-save[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;padding:0;border:0;background:transparent;border-radius:4px;cursor:pointer;flex:0 0 auto}.tabs-bar[_ngcontent-%COMP%] .tab-rename-save[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--ng-colors-bg-quaternary)}.tabs-bar[_ngcontent-%COMP%] .tab-rename-save[_ngcontent-%COMP%]:disabled{cursor:default;opacity:.5}.tabs-bar[_ngcontent-%COMP%] .tabs-scroll-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:0;outline:0;background:transparent;color:var(--ng-colors-text-tertiary-600);cursor:pointer;border-radius:6px;flex-shrink:0;opacity:0;pointer-events:none;transition:opacity .15s,background .15s,color .15s}.tabs-bar[_ngcontent-%COMP%] .tabs-scroll-btn[_ngcontent-%COMP%]:hover, .tabs-bar[_ngcontent-%COMP%] .tabs-scroll-btn[_ngcontent-%COMP%]:focus, .tabs-bar[_ngcontent-%COMP%] .tabs-scroll-btn[_ngcontent-%COMP%]:focus-visible{outline:0;background:var(--ng-colors-bg-active);color:var(--ng-colors-text-primary-900)}.tabs-bar[_ngcontent-%COMP%] .tabs-scroll-btn[disabled][_ngcontent-%COMP%]{cursor:default;color:var(--ng-colors-text-disabled);background:transparent}.tabs-bar[_ngcontent-%COMP%] .tabs-bar__nav.is-scrollable[_ngcontent-%COMP%]:hover .tabs-scroll-btn[_ngcontent-%COMP%], .tabs-bar[_ngcontent-%COMP%] .tabs-bar__nav.is-scrollable[_ngcontent-%COMP%]:focus-within .tabs-scroll-btn[_ngcontent-%COMP%]{opacity:1;pointer-events:auto}.more-menu[_ngcontent-%COMP%]{width:260px;max-height:320px;overflow-y:auto;padding:var(--ng-spacing-xs) 0}.more-menu-item[_ngcontent-%COMP%]{padding:var(--ng-spacing-xs) var(--ng-spacing-md);display:flex;align-items:center;cursor:pointer}.more-menu-item[_ngcontent-%COMP%]:hover{background:var(--ng-colors-bg-secondary)}.more-menu-item[_ngcontent-%COMP%] nile-checkbox[_ngcontent-%COMP%]{width:100%}nile-tab-panel[_ngcontent-%COMP%], nile-nav-tab-panel[_ngcontent-%COMP%]{display:block;height:100%}.panel-loading[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;height:200px}.home-skeleton__tabs-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px}.home-skeleton__tab-pills[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;flex-shrink:0}.home-skeleton__tab[_ngcontent-%COMP%]{flex:0 0 auto}.home-skeleton__panel[_ngcontent-%COMP%]{flex:1;min-height:0;padding:18px 24px 32px;display:flex;flex-direction:column;gap:16px;overflow:auto}.home-skeleton__kpis[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}@media(max-width:1100px){.home-skeleton__kpis[_ngcontent-%COMP%]{grid-template-columns:repeat(2,1fr)}}.home-skeleton__kpi[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px;padding:18px 20px;border:1px solid var(--ng-colors-border-secondary);border-radius:12px;background:var(--ng-colors-bg-primary)}.home-skeleton__kpi-head[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:12px}.home-skeleton__kpi-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;margin-top:4px}.home-skeleton__kpi-spark[_ngcontent-%COMP%]{margin-top:6px}.home-skeleton__widgets[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}@media(max-width:900px){.home-skeleton__widgets[_ngcontent-%COMP%]{grid-template-columns:1fr}}.home-skeleton__widget[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:18px;padding:20px 22px;border:1px solid var(--ng-colors-border-secondary);border-radius:12px;background:var(--ng-colors-bg-primary);min-height:320px}.home-skeleton__widget-head[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.home-skeleton__widget-titles[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:6px;flex:1;min-width:0}.home-skeleton__widget-chart[_ngcontent-%COMP%]{display:block;flex:1;min-height:0}.viewer-scroll-container[_ngcontent-%COMP%]{display:block;flex:1;min-height:0;overflow:auto}.viewer-scroll-container[_ngcontent-%COMP%]::part(base){padding:unset;height:100%;min-height:100%}.auto-height[_nghost-%COMP%] .viewer-scroll-container[_ngcontent-%COMP%]{flex:0 0 auto;overflow:visible;height:auto}.auto-height[_nghost-%COMP%] .viewer-scroll-container[_ngcontent-%COMP%]::part(base){height:auto;min-height:0}[_nghost-%COMP%] .viewer-scroll-container:has(.aq-detail-overlay){overflow:hidden}app-dashboard-viewer[_ngcontent-%COMP%], nile-dashboard-viewer[_ngcontent-%COMP%]{display:block;width:100%;height:100%}.export-menu[_ngcontent-%COMP%] nile-menu-item[_ngcontent-%COMP%]{font-size:var(--ng-font-size-text-sm, 14px);font-weight:var(--ng-font-weight-medium, 500)}.home-actions[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:2px;flex-shrink:0}.home-action-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:0;outline:0;background:transparent;color:var(--ng-colors-text-tertiary-600);cursor:pointer;border-radius:6px;flex-shrink:0}.home-action-btn[_ngcontent-%COMP%]:hover, .home-action-btn[_ngcontent-%COMP%]:focus, .home-action-btn[_ngcontent-%COMP%]:focus-visible{outline:0;background:var(--ng-colors-bg-active);color:var(--ng-colors-text-primary-900)}.home-category-filter[_ngcontent-%COMP%] .home-action-btn[_ngcontent-%COMP%]{position:relative}.home-category-filter__dot[_ngcontent-%COMP%]{position:absolute;top:3px;right:3px;width:6px;height:6px;border-radius:50%;background:var(--ng-colors-fg-brand-primary-600)}.home-category-filter[_ngcontent-%COMP%]::part(panel){background:transparent;box-shadow:none;border-radius:0}.home-category-filter__panel[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1px;min-width:200px;max-height:320px;overflow-y:auto}.home-refresh-glyph[_ngcontent-%COMP%]{display:inline-flex;transform-origin:50% 50%}.home-refresh-glyph--spinning[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_home-refresh-spin .9s linear infinite}@keyframes _ngcontent-%COMP%_home-refresh-spin{to{transform:rotate(360deg)}}.home-ai-drawer[_ngcontent-%COMP%]::part(base){z-index:var(--z-drawer, 900)}.home-ai-drawer[_ngcontent-%COMP%]::part(panel){width:100%;max-width:100%}.home-ai-drawer[_ngcontent-%COMP%]::part(body){padding:0;overflow:hidden}.home-ai-drawer[_ngcontent-%COMP%] db-ai-prompt-panel[_ngcontent-%COMP%]{display:block;height:100%;min-height:0}.home-category-filter__heading[_ngcontent-%COMP%]{display:block;padding:6px 10px 4px;font-size:10.5px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--ng-colors-text-tertiary-600)}.home-category-filter__item[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;padding:7px 10px;border:0;border-radius:7px;background:transparent;font:inherit;font-size:13px;color:var(--ng-colors-text-secondary-700);text-align:left;white-space:nowrap;cursor:pointer}.home-category-filter__item[_ngcontent-%COMP%]:hover{background:var(--ng-colors-bg-secondary)}.home-category-filter__item.is-active[_ngcontent-%COMP%]{color:var(--ng-colors-fg-brand-primary-600);font-weight:600;background:var(--ng-colors-bg-secondary)}.home-category-filter__label[_ngcontent-%COMP%]{min-width:0;overflow:hidden;text-overflow:ellipsis}.ai-executive-summary[_ngcontent-%COMP%]::part(trigger){display:none}.ai-executive-summary[_ngcontent-%COMP%]::part(header){height:56px;padding:0 20px;box-sizing:border-box;flex-direction:row-reverse;justify-content:flex-end;gap:8px}.ai-executive-summary[_ngcontent-%COMP%]::part(title){font-size:14px;font-weight:600}.ai-executive-summary[_ngcontent-%COMP%]::part(close){position:relative;color:transparent;margin-left:0;margin-right:4px}.ai-executive-summary[_ngcontent-%COMP%]::part(close):before{content:"\\2190";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--ng-colors-text-tertiary-600);font-size:22px;line-height:1;font-weight:400}.ai-executive-summary[_ngcontent-%COMP%]::part(close):hover:before{color:var(--ng-colors-text-primary-900)}']})};var qe=class o{environment=u(F);http=u(G);tokenStore=u(ie);get customerId(){return this.tokenStore.tenantId()??""}widgetsUrl(t){return`${this.environment.baseUrl}/api/customers/${this.customerId}/products/${this.environment.getProductId()}/workforce/dashboards/${t}/global-widgets`}async getAll(t,e="",n=""){let i=new URLSearchParams;e&&i.set("widgetType",e),n&&i.set("tag",n);let r=i.toString(),a=`${this.widgetsUrl(t)}${r?"?"+r:""}`,g=await k(this.http.get(a)),h=g?.data??g??[];return await Promise.all(h.map(w=>oe(w.config))),h}async getById(t,e){let n=await k(this.http.get(`${this.widgetsUrl(t)}/${e}`)),i=n?.data??n;return await oe(i?.config),i}async add(t,e){let n={title:e.title,summary:e.summary,widgetType:e.widgetType,componentName:e.componentName,layout:e.layout,config:je(e.config)},i=await k(this.http.post(this.widgetsUrl(t),n));return i?.data??i}async update(t,e,n){let i={};n.title&&(i.title=n.title),n.summary&&(i.summary=n.summary),n.widgetType&&(i.widgetType=n.widgetType),n.componentName&&(i.componentName=n.componentName),n.layout&&(i.layout=n.layout),n.config&&(i.config=je(n.config));let r=await k(this.http.put(`${this.widgetsUrl(t)}/${e}`,i));return r?.data??r}async remove(t,e){await k(this.http.delete(`${this.widgetsUrl(t)}/${e}`))}static \u0275fac=function(e){return new(e||o)};static \u0275prov=z({token:o,factory:o.\u0275fac})};function ln(o){return[{provide:V,useValue:o},F,{provide:At,useFactory:()=>o().baseUrl},B,re,be,j,qe,Se,Rt(j),Nt(O),Vt(O),Oe(O),Ee(O),Fe(O),Ae(O),qt(O)]}function zi(o,t){o&1&&N(0)}function Ni(o,t){if(o&1&&W(0,zi,1,0,"ng-container",0),o&2){let e=d();x("ngComponentOutlet",e.page)("ngComponentOutletInjector",e.elementInjector)("ngComponentOutletEnvironmentInjector",e.elementInjector)}}var Le=class o{config=Y(void 0);theme=Y(void 0);ready=le({alias:"dvz-ready"});error=le({alias:"dvz-error"});unauthorized=le({alias:"dvz-unauthorized"});navigate=le({alias:"dvz-navigate"});host=u(de);destroyRef=u(rt);instance=on();elementInjector=dt(ln(this.instance.config),u(nt),"dvz-dashboards");page=He;navigator=this.elementInjector.get(B);stopAdopting=null;stopTokenRefresh=null;stopUi=null;themeChanged=le({alias:"dvz-theme-changed"});timeRangeChanged=le({alias:"dvz-time-range-changed"});themeStore=this.elementInjector.get(Se);syncThemeInput=Z(()=>{let t=this.theme();t&&this.themeStore.set(t)});lastAnnouncedTheme=null;announceTheme=Z(()=>{let t=this.themeStore.resolved();if(t===this.lastAnnouncedTheme)return;let e=this.lastAnnouncedTheme===null;this.lastAnnouncedTheme=t,e||this.themeChanged.emit({theme:t,choice:this.themeStore.choice()})});configured=!1;constructor(){Z(()=>{let t=this.config();t&&this.apply(t)}),this.navigator.requests.pipe(Ue(this.destroyRef)).subscribe(t=>this.navigate.emit(t)),this.navigator.timeRangeChanges.pipe(Ue(this.destroyRef)).subscribe(t=>this.timeRangeChanged.emit(t)),queueMicrotask(()=>{let t=this.host.nativeElement.shadowRoot;t&&(this.stopAdopting=Je(t))})}async apply(t){let e=t.auth;Tt(t.api.baseUrl),Mt(t.api,e);let n=this.instance.set(rn({baseUrl:t.api.baseUrl,mcpUrl:t.api.mcpUrl,tokenizedOrigins:t.api.tokenizedOrigins,headers:t.api.headers,customerId:t.tenant.customerId??null,productId:t.tenant.productId,productName:t.tenant.productName??null,authMode:e.mode,authToken:e.mode==="token"?e.token:null,getToken:e.mode==="callback"?e.getToken:null,onUnauthorized:()=>this.unauthorized.emit(),features:t.features,ui:t.ui,copy:t.copy,hrefs:t.hrefs,initialDashboard:t.initial?.dashboard??null,initialWidgets:t.initial?.widgets??[],timeRange:t.timeRange??null}));this.stopUi?.(),this.stopUi=Xe(this.host.nativeElement,t.ui),this.themeStore.attach(this.host.nativeElement),this.theme()||this.themeStore.set(t.ui?.theme??"light"),Et({productId:t.tenant.productId,name:t.tenant.productName}),kt(()=>this.unauthorized.emit());let i=n;await Pt(i),this.stopTokenRefresh??=Dt(i),this.configured||(this.configured=!0,this.ready.emit({customerId:n.customerId??"",productId:n.productId??""}))}ngOnDestroy(){this.stopAdopting?.(),this.stopTokenRefresh?.(),this.stopUi?.(),this.elementInjector.destroy()}static \u0275fac=function(e){return new(e||o)};static \u0275cmp=q({type:o,selectors:[["dvz-dashboards-root"]],inputs:{config:[1,"config"],theme:[1,"theme"]},outputs:{ready:"dvz-ready",error:"dvz-error",unauthorized:"dvz-unauthorized",navigate:"dvz-navigate",themeChanged:"dvz-theme-changed",timeRangeChanged:"dvz-time-range-changed"},decls:1,vars:1,consts:[[4,"ngComponentOutlet","ngComponentOutletInjector","ngComponentOutletEnvironmentInjector"]],template:function(e,n){e&1&&_(0,Ni,1,3,"ng-container"),e&2&&y(n.config()?0:-1)},dependencies:[bt],styles:[`:host{display:block;height:100%;min-height:0}
|
|
2
|
-
`],encapsulation:3,changeDetection:0})};vt();var Vi="dvz-dashboards";function Wi(o={}){return Ct(Le,Vi,[at(),St(),ft(
|
|
1
|
+
import{$ as ue,$a as Ut,A as Mt,Aa as Lt,Ba as Ce,F as St,Fa as Ue,H as kt,Ha as $t,J as ie,K as Tt,N as Ot,P as Et,R as Ft,Ra as Gt,Sa as Bt,T as At,U as It,V as Rt,W as zt,X as Nt,Xa as Ie,Y as me,Ya as oe,_a as je,a as Je,ab as Re,b as Xe,ba as Be,bb as jt,c as Se,d as ut,e as bt,eb as O,f as ke,fa as Vt,fb as Kt,ga as Wt,i as Te,jb as Ke,kb as Zt,l as $,m as G,ma as Oe,n as _t,na as Ht,o as ft,ob as Yt,p as yt,pa as Ee,pb as Qt,q as Ct,qa as Fe,qb as Jt,rb as ze,s as vt,t as xt,u as wt,v as ne,vb as Xt,w as Pt,x as Dt,xb as en,ya as Ae,z as pe,za as qt}from"./chunk-ENDHTKIB.js";import{$ as ot,Ab as ce,Bb as De,Cb as fe,Db as N,Eb as M,Fb as ht,Ia as st,Ib as C,Ja as lt,Kb as d,Na as c,Nb as ge,O as z,Ob as X,Pb as ee,R as et,S as tt,Sb as H,T as u,Tb as pt,Ub as te,W as nt,Wb as D,Xb as L,Y as b,Yb as Ge,Z as _,Za as Pe,_ as it,ca as rt,d as $e,db as dt,ea as _e,eb as q,ec as Me,fa as we,fc as se,gc as he,ia as at,ja as m,jb as W,kc as ye,ma as Z,ob as ct,p as k,pb as ae,pc as T,qb as f,ra as de,rb as y,sb as J,sc as le,tb as gt,tc as Y,ub as A,vb as I,vc as mt,wb as x,xb as s,yb as l,zb as p}from"./chunk-BTA57TVR.js";import{a as P,b as E}from"./chunk-ZW5NV4UO.js";function dn(){return{dashboardsTitle:"Dashboards",loadingDashboards:"Loading dashboards\u2026",noDashboardsTitle:"No dashboards yet",noDashboardsSub:"Generate one from your data, or create it in the builder.",generateDashboardButton:"Generate dashboard",refreshButton:"Refresh",exportButton:"Export",editButton:"Edit",renamePlaceholder:"Dashboard name",askAqueraButton:"Ask Aquera",errors:{loadFailedFallback:"Could not load dashboards",saveFailedFallback:"Could not save the dashboard",refreshFailedFallback:"Could not refresh the dashboard",exportFailedFallback:"Could not export the dashboard"}}}function cn(){return{enabled:!0,ask:!0,changeChartType:!0,manageFilters:!0,customizeColors:!1,chartData:!0,setAlert:!0,forecast:!0,addToStory:!1,exportPng:!0,exportCsv:!0,print:!0}}function gn(){return{mcpGateway:pe.MCP_GATEWAY_ENABLED??!1,aiPrompt:!0,createDashboard:!0,autoGenerate:!0,export:!0,timeRangePicker:!0,rename:!0,refresh:!0,executiveSummary:!0,edit:!0,widgetMenu:cn()}}function Ze(){return{baseUrl:pe.baseUrl??"",mcpUrl:pe.MCP_URL??null,tokenizedOrigins:[pe.baseUrl].filter(o=>!!o),headers:{},customerId:null,productId:null,productName:null,authMode:"inherit",authToken:null,getToken:null,resolvedToken:null,onUnauthorized:null,ssoEnabled:pe.SSO_ENABLED??!1,features:gn(),ui:{theme:"light",density:"comfortable",header:!0,dashboardList:!0,canvasBackgroundColor:null,locale:"en",autoHeight:!1},copy:dn(),hrefs:{askAquera:"/ask-aquera",builder:"/manage-dashboards"},initialDashboard:null,initialWidgets:[],timeRange:null}}var tn=xt("dashboards",Ze),V=new et("DASHBOARDS_CONFIG",{factory:()=>hn}),nn=m(0),hn=T(()=>(nn(),tn.read()));function on(){let o=wt(tn,Ze());return{config:o.config,set:t=>{let e=o.set(t);return nn.update(n=>n+1),e}}}function rn(o){let t=Ze(),e=E(P(P({},t),ne(o)),{features:E(P(P({},t.features),ne(o.features??{})),{widgetMenu:P(P({},t.features.widgetMenu),ne(o.features?.widgetMenu??{}))}),ui:P(P({},t.ui),ne(o.ui??{})),hrefs:P(P({},t.hrefs),ne(o.hrefs??{})),copy:E(P(P({},t.copy),ne(o.copy??{})),{errors:P(P({},t.copy.errors),ne(o.copy?.errors??{}))}),headers:P(P({},t.headers),o.headers??{})});return o.tokenizedOrigins||(e.tokenizedOrigins=[e.baseUrl,e.mcpUrl].filter(n=>!!n)),e}var B=class o{config=u(V);requests$=new $e;requests=this.requests$.asObservable();timeRangeChanges$=new $e;timeRangeChanges=this.timeRangeChanges$.asObservable();toAskAquera(){this.requests$.next({to:this.config().hrefs.askAquera})}toAskAqueraDashboard(t,e){this.requests$.next({to:`${this.config().hrefs.askAquera}/dashboard/${t}`,queryParams:e})}toBuilder(t){this.requests$.next({to:`${this.config().hrefs.builder}/${t}`})}announceTimeRange(t){this.timeRangeChanges$.next(t)}static \u0275fac=function(e){return new(e||o)};static \u0275prov=z({token:o,factory:o.\u0275fac})};var F=class o{config=u(V);get baseUrl(){return this.config().baseUrl}get MCP_URL(){return this.config().mcpUrl??""}get MCP_GATEWAY_ENABLED(){return this.config().features.mcpGateway}get SSO_ENABLED(){return this.config().ssoEnabled}getCustomerId(){return this.config().customerId??""}getProductId(){return this.config().productId??""}static \u0275fac=function(e){return new(e||o)};static \u0275prov=z({token:o,factory:o.\u0275fac})};var re=class o{constructor(t){this.http=t}http;environment=u(F);tokenStore=u(ie);publishRepo=u(O);lastSentCustomerId=null;lastSentProductId=null;get customerId(){return this.tokenStore.tenantId()??""}mcpGatewayUrl(){return`${this.environment.baseUrl}/dviz-mcp`}async callMcpTool(t,e={}){let n=this.customerId,i=this.environment.getProductId(),r={};n!==this.lastSentCustomerId&&(r.customerId=n),i!==this.lastSentProductId&&(r.productId=i);let a;try{a=await k(this.http.post(this.mcpGatewayUrl(),{jsonrpc:"2.0",id:Date.now(),method:"tools/call",params:{name:t,arguments:e}},{headers:{Accept:"application/json, text/event-stream"},params:r})),this.lastSentCustomerId=n,this.lastSentProductId=i}catch(h){throw h instanceof $?new Error(h.error?.error?.message||h.error?.message||h.message):h}if(a.error)throw new Error(a.error.message);let g=a.result;if(g?.isError)throw new Error(g.structuredContent?.error?.message??g.content?.[0]?.text??`${t} failed`);return g?.structuredContent??{}}async loadDashboards(){return(await this.publishRepo.listDashboards({published:"true",limit:100})).filter(e=>e.isPublished===!0||e.version==="published").map(e=>({id:e.id,name:e.name??"Untitled",description:e.description,createdAt:e.createdAt??new Date().toISOString(),updatedAt:e.updatedAt,isAutoGenerated:e.isAutoGenerated===!0,category:e.category??null}))}async renameDashboard(t,e){if(!this.environment.MCP_GATEWAY_ENABLED){try{await k(this.http.put(`${this.environment.baseUrl}/api/customers/${this.customerId}/products/${this.environment.getProductId()}/workforce/dashboards/${t}?published=true`,{name:e}))}catch(n){throw n instanceof $?new Error(n.error?.error||n.message):n}return}await this.callMcpTool("updateDashboard",{dashboardId:t,name:e,published:!0})}async fetchDashboard(t){let e,n=!1;if(this.environment.MCP_GATEWAY_ENABLED){let i=await this.callMcpTool("getDashboard",{dashboardId:t,published:"true"});e=i?.dashboard??{},n=i?.canRefresh===!0}else{let i=await k(this.http.get(`${this.environment.baseUrl}/api/customers/${this.customerId}/products/${this.environment.getProductId()}/workforce/dashboards/${t}?published=true`));e=i?.data??i,n=i?.canRefresh===!0}return{id:e.id,name:e.name??"Untitled",widgets:await this.mapAndHydrateWidgets(e.widgets),connectionId:e.connectionId,isPipeline:e.isPipeline,adapterType:e.adapterType,category:e.category??null,canRefresh:n}}async refreshDashboard(t){if(!this.environment.MCP_GATEWAY_ENABLED){let n=await k(this.http.post(`${this.environment.baseUrl}/api/customers/${this.customerId}/products/${this.environment.getProductId()}/workforce/dashboards/${t}/refresh`,{})),i=n?.data??n;return{widgets:await this.mapAndHydrateWidgets(i?.widgets)}}let e=await this.callMcpTool("refreshDashboard",{dashboardId:t});return{widgets:await this.mapAndHydrateWidgets(e?.refresh?.widgets)}}async previewWidgetTemplateDetailPanel(t){return(await k(this.http.post(`${this.environment.baseUrl}/api/customers/${this.customerId}/products/${this.environment.getProductId()}/workforce/widget-templates/${t}/detail-panel`,{}))).data}async previewWidgetDetailPanelDefinition(t){return(await k(this.http.post(`${this.environment.baseUrl}/api/customers/${this.customerId}/products/${this.environment.getProductId()}/workforce/widget-templates/preview-detail-panel`,{detailPanel:t}))).data}async mapAndHydrateWidgets(t){let e=(t??[]).map(n=>({id:n.id,title:n.title,type:n.widgetType??"chart",layout:n.layout??{x:0,y:0,w:12,h:4},nileConfig:{chart:n.chart??n.config?.chart??{},aq:n.config?.aq??{},_meta:n.config?._meta},drilldownBy:Array.isArray(n.drilldownBy)?n.drilldownBy:void 0,dataSourceId:n.dataSourceId,queryMeta:n.queryMeta,category:n.category??null}));return await Promise.all(e.map(n=>oe(n.nileConfig))),e}static \u0275fac=function(e){return new(e||o)(tt(G))};static \u0275prov=z({token:o,factory:o.\u0275fac})};var j=class o{environment=u(F);http=u(G);tokenStore=u(ie);get customerId(){return this.tokenStore.tenantId()??""}async fetchGridPage(t,e,n,i,r,a,g,h){let w=`${this.environment.baseUrl}/api/customers/${this.customerId}/products/${this.environment.getProductId()}/workforce/data-grid/${t}?pageIndex=${e}&pageSize=${n}`,v=(i??[]).filter(S=>S&&S.value!=null&&String(S.value).trim()!=="");return v.length&&(w+=`&filters=${encodeURIComponent(JSON.stringify(v))}`),r&&Object.keys(r).length&&(w+=`&dashboardFilters=${encodeURIComponent(JSON.stringify(r))}`),g&&g.length&&(w+=`&resolvedFilters=${encodeURIComponent(JSON.stringify(g))}`),a&&(w+=`&dashboardId=${encodeURIComponent(a)}`),h&&(w+=`&conversationId=${encodeURIComponent(h)}`),k(this.http.get(w))}async generateWidget(t,e){let n=Ot()?{prompt:t}:{prompt:t,dataSourceId:e},i;try{i=await k(this.http.post(`${this.environment.baseUrl}/api/customers/${this.customerId}/products/${this.environment.getProductId()}/workforce/widget/generate`,n))}catch(g){if(g instanceof $){let h=g.error?.error||g.message;throw new Error(h)}throw g}if(i?.success===!1)throw new Error(i.error||"Request failed");let r=i?.data??i;if(!r?.config)throw new Error("Invalid response from widget generate API");let a=r;return await oe(a.config),a}async filterSuggest(t,e,n,i){let r=n.filter(h=>!!h.id).map(h=>({widgetId:h.id})),a;try{a=await k(this.http.post(`${this.environment.baseUrl}/api/customers/${this.customerId}/products/${this.environment.getProductId()}/workforce/dashboards/${t}/filter/suggest?status=${i??"draft"}`,{query:e,refreshCache:!1,widgets:r}))}catch(h){throw h instanceof $?new Error(h.error?.error||h.message):h}if(a?.success===!1)throw new Error(a.error||"Request failed");let g=a?.data??a??{};return{nextToken:g.nextToken,completions:Array.isArray(g.completions)?g.completions:[],suggestions:Array.isArray(g.suggestions)?g.suggestions:[]}}async applyFilters(t,e,n,i,r,a){let g=await new Promise((K,Q)=>{let Qe=this.http.post(`${this.environment.baseUrl}/api/customers/${this.customerId}/products/${this.environment.getProductId()}/workforce/dashboards/${n}/filter/apply?status=${i??"draft"}`,jt(t,e,a)).subscribe({next:R=>K(R),error:R=>{R instanceof $?Q(new Error(R.error?.error||R.message)):Q(R)}});if(r){if(r.aborted){Qe.unsubscribe();let R=new Error("Aborted");R.name="AbortError",Q(R);return}r.addEventListener("abort",()=>{Qe.unsubscribe();let R=new Error("Aborted");R.name="AbortError",Q(R)},{once:!0})}});if(g?.success===!1)throw new Error(g.error||"Request failed");let h=g?.data??g,w=Array.isArray(h)?h:h?.widgets;if(!Array.isArray(w))throw new Error("Invalid response from apply-filters API");let v=!Array.isArray(h)&&Array.isArray(h?.resolvedFilters)?h.resolvedFilters:[],S=!Array.isArray(h)&&Array.isArray(h?.filterGroups)?h.filterGroups:[];return await Promise.all(w.map(K=>oe(K.config))),{widgets:w,resolvedFilters:v,filterGroups:S}}static \u0275fac=function(e){return new(e||o)};static \u0275prov=z({token:o,factory:o.\u0275fac})};var mn=["grid"];function un(o,t){if(o&1&&D(0),o&2){let e=d(2);Ge(" ",e.widgetDetailPanelTitle," ")}}function bn(o,t){o&1&&p(0,"nile-skeleton-loader",6)}function _n(o,t){if(o&1&&p(0,"shared-dashboard-grid",8),o&2){let e=d(2);x("widgets",e.widgetDetailPanelWidgets)("widgetsLoading",e.widgetDetailPanelLoading)("editMode",!1)("canvasBackgroundColor",e.canvasBackgroundColor())("selectable",!1)("showWidgetMenu",e.widgetMenu().enabled)("canAsk",e.widgetMenu().ask)("canChangeChartType",e.widgetMenu().changeChartType)("canManageFilters",e.widgetMenu().manageFilters)("canCustomizeColors",e.widgetMenu().customizeColors)("canViewChartData",e.widgetMenu().chartData)("canSetAlert",e.widgetMenu().setAlert)("canForecast",e.widgetMenu().forecast)("canAddToStory",e.widgetMenu().addToStory)("canExportPng",e.widgetMenu().exportPng)("canExportCsv",e.widgetMenu().exportCsv)("canPrint",e.widgetMenu().print)}}function fn(o,t){o&1&&(s(0,"div",9)(1,"div",10),p(2,"nile-skeleton-loader",11)(3,"nile-skeleton-loader",11)(4,"nile-skeleton-loader",11),l(),p(5,"nile-skeleton-loader",12),l())}function yn(o,t){if(o&1){let e=M();s(0,"div",2)(1,"div",4)(2,"nile-breadcrumb",5),C("nile-click",function(){b(e);let i=d();return _(i.closeWidgetDetailPanel())}),s(3,"nile-breadcrumb-item"),D(4),l(),s(5,"nile-breadcrumb-item"),f(6,un,1,1)(7,bn,1,0,"nile-skeleton-loader",6),l()()(),s(8,"div",7),f(9,_n,1,17,"shared-dashboard-grid",8)(10,fn,6,0,"div",9),l()()}if(o&2){let e=d();c(4),Ge(" ",e.dashboardName," "),c(2),y(e.widgetDetailPanelTitle?6:7),c(3),y(e.widgetDetailPanelWidgets.length?9:e.widgetDetailPanelLoading?10:-1)}}var ve=class o{widgets=[];dashboardId=null;applyingFilters=!1;widgetDetailPanelOpen=!1;widgetDetailPanelLoading=!1;widgetDetailPanelTitle=null;widgetDetailPanelWidgets=[];dashboardName=null;widgetDetailPanelSkeletonSlots=[];widgetDetailPanelSkeletonHeight(){return this.widgetDetailPanelSkeletonSlots.length?Math.max(...this.widgetDetailPanelSkeletonSlots.map(t=>(t.y+t.h)*72)):0}async onKpiWidgetClicked(t){if(this.widgetDetailPanelLoading)return;let e=t.config?._meta,n=e?.templateId??null,i=e?.detailPanel??null;if(!(!n&&!i)){this.beginCardMorph(t.id),this.runViewTransition(()=>{this.widgetDetailPanelOpen=!0,this.widgetDetailPanelLoading=!0,this.widgetDetailPanelTitle=i?.title??t.title??null,this.widgetDetailPanelSkeletonSlots=(i?.widgets??[]).map(r=>r.layout).filter(r=>!!r),this.widgetDetailPanelWidgets=this.detailPanelPlaceholders(i),this.cdr.markForCheck()});try{let r=i?await this.dashboardsService.previewWidgetDetailPanelDefinition(i):await this.dashboardsService.previewWidgetTemplateDetailPanel(String(n));if(!r.widgets.length){this.widgetDetailPanelOpen=!1;return}this.widgetDetailPanelTitle=r.title??t.title??null;let a=r.widgets.map((g,h)=>E(P({},g),{id:`detail-panel-${h}`}));this.widgetDetailPanelWidgets=a.every(g=>g.layout)?a:Be(a)}catch{this.widgetDetailPanelOpen=!1}finally{this.widgetDetailPanelLoading=!1,this.cdr.markForCheck()}}}detailPanelPlaceholders(t){let e=t?.widgets??[];if(!e.length)return[];let n=e.map((i,r)=>E(P({},i),{id:`detail-panel-${r}`}));return n.every(i=>i.layout)?n:Be(n)}closeWidgetDetailPanel(){this.runViewTransition(()=>{this.widgetDetailPanelOpen=!1,this.widgetDetailPanelTitle=null,this.widgetDetailPanelWidgets=[],this.widgetDetailPanelSkeletonSlots=[],this.cdr.markForCheck()},"back")}currentTimeRange=null;lastMonitoredTotal=null;isRefreshingData=!1;activeDashboardFilters=null;activeResolvedFilters=null;activeFilterGroups=[];applySummary=null;alertDrawerOpen=!1;alertWidget=null;alertFilterPredicates=null;alertFilterHasOr=!1;alertAuthoringMode="widget";alertSource=null;gridRef;dashboardsConfig=u(V);environment=u(F);http=u(G);zone=u(we);navigator=u(B);openAiService=u(j);dashboardsService=u(re);forecastService=u(Wt);timeFilterPref=u(Kt);cdr=u(mt);appRef=u(ct);hostEl=u(de);static MORPH_NAME="dv-detail-morph";morphSourceEl=null;beginCardMorph(t){if(!t||typeof CSS>"u"||!CSS.escape)return!1;let e=this.hostEl.nativeElement.querySelector(`.widget-card[data-widget-id="${CSS.escape(String(t))}"]`);if(!e)return!1;let n=e.getBoundingClientRect();return n.height>0&&n.bottom>0&&n.top<window.innerHeight?(e.style.viewTransitionName=o.MORPH_NAME,this.morphSourceEl=e,this.hostEl.nativeElement.classList.add("dv-morphing"),!0):!1}endCardMorph(){this.morphSourceEl&&(this.morphSourceEl.style.removeProperty("view-transition-name"),this.morphSourceEl=null),this.hostEl.nativeElement.classList.remove("dv-morphing")}runViewTransition(t,e="forward"){let n=document,i=window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;if(typeof n.startViewTransition!="function"||i){t(),this.endCardMorph();return}let r=document.documentElement;e==="back"&&(r.dataset.vtDirection="back");let a=()=>{delete r.dataset.vtDirection,this.endCardMorph()};n.startViewTransition(()=>{t(),this.appRef.tick()})?.finished?.then(a,a)??a()}sessionMap=new Map;primedFilterWidgets=new Set;filterSuggestCache=new Map;filterSuggestInflight=new Set;applyFiltersSeq=0;applyFiltersAbort;viewInited=!1;openInBuilder(){!this.dashboardId||!this.dashboardsConfig().features.edit||this.navigator.toBuilder(this.dashboardId)}canvasBackgroundColor(){return this.dashboardsConfig().ui.canvasBackgroundColor}autoHeight(){return this.dashboardsConfig().ui.autoHeight}widgetMenu(){return this.dashboardsConfig().features.widgetMenu}set config(t){let e=t?.id??null,n=e!==this.dashboardId;if(n&&(this.primedFilterWidgets.clear(),this.filterSuggestCache.clear(),this.filterSuggestInflight.clear(),this.activeDashboardFilters=null,this.activeResolvedFilters=null,this.activeFilterGroups=[],this.applySummary=null,this.currentTimeRange=null,this.lastMonitoredTotal=null),!t){this.widgets=[],this.dashboardId=null,this.alertSource=null,this.dashboardName=null;return}this.dashboardId=e,this.dashboardName=t.name??null,this.alertSource={connectionId:t.connectionId,isPipeline:t.isPipeline,adapterType:t.adapterType},this.widgets=(t.widgets??[]).map(r=>({id:r.id,title:r.title??"",widgetType:r.type??"chart",layout:r.layout,config:r.nileConfig,drilldownBy:r.drilldownBy,dataSourceId:r.dataSourceId,queryMeta:r.queryMeta,category:r.category??null})),this.forecastable=t.forecastable??{};let i=this.collectInitialFilters(this.widgets);i?this.applyInitialFilters(i):n&&t.canRefresh&&this.refreshLoadedDashboardData(e),this.viewInited&&queueMicrotask(()=>this.primeFilterWidgets())}async refreshLoadedDashboardData(t){this.isRefreshingData=!0;try{let{widgets:e}=await this.dashboardsService.refreshDashboard(t);this.dashboardId===t&&!this.activeDashboardFilters&&(this.widgets=e.map(n=>({id:n.id,title:n.title??"",widgetType:n.type??"chart",layout:n.layout,config:n.nileConfig,drilldownBy:n.drilldownBy,dataSourceId:n.dataSourceId,queryMeta:n.queryMeta,category:n.category??null})))}catch(e){console.error("Failed to refresh dashboard data:",e)}finally{this.isRefreshingData=!1,this.cdr.markForCheck()}}collectInitialFilters(t){let e={};for(let n of t){let i=n.config?.chart;if(i?.type==="filter")for(let r of i.controls??[]){if(!r.id)continue;let a=r.value;a!=null&&(typeof a=="string"&&a.trim()===""||(e[r.id]=a))}}return Object.keys(e).length>0?e:null}async applyInitialFilters(t){let e=this.widgets.filter(r=>!ue(r));if(e.length===0||!this.dashboardId)return;this.applyFiltersAbort?.abort();let n=new AbortController;this.applyFiltersAbort=n;let i=++this.applyFiltersSeq;this.applyingFilters=!0;try{let{widgets:r,resolvedFilters:a,filterGroups:g}=await this.openAiService.applyFilters(e,t,this.dashboardId,"published",n.signal,{timeRange:this.currentTimeRange??void 0});if(i!==this.applyFiltersSeq)return;this.widgets=me(this.widgets,r),this.activeDashboardFilters=t,this.activeResolvedFilters=a,this.activeFilterGroups=g,this.applySummary=Re(r,this.buildActiveFilters(t))}catch(r){if(r?.name==="AbortError")return;console.error("Apply initial filters failed:",r)}finally{i===this.applyFiltersSeq&&(this.applyingFilters=!1),this.cdr.markForCheck()}}ngAfterViewInit(){this.viewInited=!0,queueMicrotask(()=>this.primeFilterWidgets())}alertTargetWidget(){let t=this.widgets.filter(n=>!ue(n)),e=t.filter(n=>!!n.config?.chart?.gridId);return e.length===1?e[0]:t.find(n=>!!n.queryMeta?.sql)??null}onWidgetPatchedByGrid(t){this.widgets=this.widgets.map(e=>e.id===t.id?t:e),this.cdr.markForCheck()}forecastable={};forecastBusy=new Set;forecastingWidgetId=null;async onForecast(t){let e=this.dashboardId,n=String(t.widget.id);if(!(!e||this.forecastBusy.has(n))){this.forecastBusy.add(n),this.forecastingWidgetId=n,this.cdr.markForCheck();try{let i=t.enable?await this.forecastService.addToWidget(e,n,t.settings??{}):await this.forecastService.removeFromWidget(e,n);if(t.enable&&i?.guardrails&&i.guardrails.passed===!1)return;i?.widget&&this.applyForecastedWidget(i.widget),Ce({variant:"success",title:t.enable?t.settings?"Forecast updated":"Forecast added":"Forecast removed",content:t.enable?"The projection is shown with its confidence range.":"The chart is back to its measured history."})}catch{}finally{this.forecastBusy.delete(n),this.forecastingWidgetId=null,this.cdr.markForCheck()}}}applyForecastedWidget(t){this.widgets=this.widgets.map(e=>String(e.id)===String(t.id)?E(P({},e),{config:t.config?.chart??t.nileConfig??e.config,queryMeta:t.queryMeta??e.queryMeta}):e)}onSetAlert(t){if(ue(t)){let e=this.alertTargetWidget();if(!e)return;this.alertWidget=e,this.alertFilterPredicates=this.activeResolvedFilters,this.alertFilterHasOr=this.activeFilterGroups.length>1,this.alertAuthoringMode="filter"}else this.alertWidget=t,this.alertFilterPredicates=null,this.alertFilterHasOr=!1,this.alertAuthoringMode="widget";this.alertDrawerOpen=!0,this.cdr.markForCheck()}onAlertClosed(){this.alertDrawerOpen=!1,this.cdr.markForCheck()}onAlertSaved(){this.alertDrawerOpen=!1,this.cdr.markForCheck()}onFilterChange(t){let e=t.widgetId,n=t.controlId;!e||!n||this.dashboardId&&this.fetchSuggestionsOnce(e,n,this.dashboardId)}fetchSuggestionsOnce(t,e,n){let i=this.filterSuggestCache.get(t);if(i){this.gridRef?.patchFilterSuggestions(t,e,i);return}this.filterSuggestInflight.has(t)||(this.filterSuggestInflight.add(t),(async()=>{try{let r=await this.openAiService.filterSuggest(n,"",this.widgets,"published");this.applyFilterSuggestions(t,e,r)}catch(r){console.warn("Filter suggest failed:",r)}finally{this.filterSuggestInflight.delete(t)}})())}async onFilterSubmit(t){if(this.isEmptyFilters(t.filters)){await this.reloadDashboard();return}let e=this.widgets.filter(r=>!ue(r));if(e.length===0||!this.dashboardId)return;this.applyFiltersAbort?.abort();let n=new AbortController;this.applyFiltersAbort=n;let i=++this.applyFiltersSeq;this.applyingFilters=!0;try{let{widgets:r,resolvedFilters:a,filterGroups:g}=await this.openAiService.applyFilters(e,t.filters,this.dashboardId,"published",n.signal,{mode:t.mode,prompt:t.prompt,timeRange:this.currentTimeRange??void 0});if(i!==this.applyFiltersSeq)return;this.widgets=me(this.widgets,r),this.activeDashboardFilters=t.filters,this.lastMonitoredTotal=null,this.activeResolvedFilters=a,this.activeFilterGroups=g,this.applySummary=Re(r,this.buildActiveFilters(t.filters))}catch(r){if(r?.name==="AbortError")return;console.error("Apply filters failed:",r)}finally{i===this.applyFiltersSeq&&(this.applyingFilters=!1),this.cdr.markForCheck()}}timeFilterShown(){return this.dashboardsConfig().features.timeRangePicker&&this.timeFilterPref.isEnabled(this.dashboardId)}onPickerTimeRange(t){this.applyTimeRange(t),this.navigator.announceTimeRange(t)}async applyTimeRange(t){if(this.currentTimeRange=t,t===null&&this.isEmptyFilters(this.activeDashboardFilters)){await this.reloadDashboard();return}let e=this.widgets.filter(r=>!ue(r));if(e.length===0||!this.dashboardId)return;this.applyFiltersAbort?.abort();let n=new AbortController;this.applyFiltersAbort=n;let i=++this.applyFiltersSeq;this.applyingFilters=!0;try{let r=this.activeDashboardFilters??{},{widgets:a,resolvedFilters:g,filterGroups:h}=await this.openAiService.applyFilters(e,r,this.dashboardId,"published",n.signal,{resolvedFilters:this.activeResolvedFilters??[],timeRange:t??void 0});if(i!==this.applyFiltersSeq)return;this.widgets=me(this.widgets,a),this.activeResolvedFilters=g,this.activeFilterGroups=h,this.applySummary=Re(a,this.buildActiveFilters(r)),t&&this.checkForNewSinceLastCheck(t)}catch(r){if(r?.name==="AbortError")return;console.error("Apply time range failed:",r)}finally{i===this.applyFiltersSeq&&(this.applyingFilters=!1),this.cdr.markForCheck()}}checkForNewSinceLastCheck(t){if(!(Math.abs(Date.now()-new Date(t.to).getTime())<6e4))return;let n=this.kpiTotal(this.widgets);n!=null&&(this.lastMonitoredTotal=n)}kpiTotal(t){let e=0,n=!1;for(let i of t){let r=i.config?.chart;if(r?.type!=="kpi")continue;let a=Number(r.value);Number.isFinite(a)&&(e+=a,n=!0)}return n?e:null}buildActiveFilters(t){return Bt(t,e=>this.filterFieldLabel(e))}filterFieldLabel(t){for(let e of this.filterSuggestCache.values()){let n=e.find(i=>i.type==="attribute"&&i.id===t);if(n)return n.label}return t}isEmptyFilters(t){if(!t)return!0;for(let e of Object.values(t))if(e!=null&&!(typeof e=="string"&&e.trim()==="")&&!(typeof e=="object"&&Object.keys(e).length===0))return!1;return!0}async reloadDashboard(){if(!this.dashboardId)return;this.applyFiltersAbort?.abort();let t=++this.applyFiltersSeq;this.applyingFilters=!0,this.activeDashboardFilters=null,this.lastMonitoredTotal=null,this.activeResolvedFilters=null,this.activeFilterGroups=[],this.applySummary=null;try{let e=await this.dashboardsService.fetchDashboard(this.dashboardId);if(t!==this.applyFiltersSeq)return;this.widgets=(e.widgets??[]).map(n=>({id:n.id,title:n.title??"",widgetType:n.type??"chart",layout:n.layout,config:Ut(n.nileConfig),drilldownBy:n.drilldownBy,dataSourceId:n.dataSourceId,queryMeta:n.queryMeta,category:n.category??null}))}catch(e){console.error("Reload dashboard failed:",e)}finally{t===this.applyFiltersSeq&&(this.applyingFilters=!1),this.cdr.markForCheck()}this.currentTimeRange&&t===this.applyFiltersSeq&&await this.applyTimeRange(this.currentTimeRange)}primeFilterWidgets(){if(this.dashboardId)for(let t of this.widgets){if(this.primedFilterWidgets.has(t.id))continue;let e=t.config?.chart;if(e?.type!=="filter")continue;let n=e.controls?.find(i=>i.variant==="prompt"||i.variant==="expression"||i.variant==="hybrid")??e.controls?.find(i=>i.id);n?.id&&(this.primedFilterWidgets.add(t.id),this.fetchSuggestionsOnce(t.id,n.id,this.dashboardId))}}applyFilterSuggestions(t,e,n){let i=Array.isArray(n.suggestions)?n.suggestions:[];if(!i.length){n.nextToken&&i.push({id:n.nextToken.value,label:n.nextToken.label,type:"attribute"});for(let r of n.completions)i.push({label:r,type:"suggestion"})}i.length!==0&&(this.filterSuggestCache.set(t,i),this.gridRef?.patchFilterSuggestions(t,e,i))}async onAiSend(t){if(!this.dashboardId)return;let e=this.sessionMap.get(t.widgetId)??t.sessionId;this.sessionMap.set(t.widgetId,e);try{let n=this.environment.getCustomerId(),i=await k(this.http.post(`${this.environment.baseUrl}/api/customers/${n}/products/${this.environment.getProductId()}/workforce/dashboards/${this.dashboardId}/widgets/${t.widgetId}/chat`,{message:t.message,sessionId:e})),r=i?.reply?.content;r&&(this.sessionMap.set(t.widgetId,i.sessionId??e),this.zone.run(()=>{t.chartEl?.addAiResponse?.(r)}))}catch(n){console.error("Chat request failed:",n),this.zone.run(()=>{t.chartEl?.addAiResponse?.("Sorry, I couldn't process your request. Please try again.")})}}static \u0275fac=function(e){return new(e||o)};static \u0275cmp=q({type:o,selectors:[["app-dashboard-viewer"]],viewQuery:function(e,n){if(e&1&&ge(mn,5),e&2){let i;X(i=ee())&&(n.gridRef=i.first)}},inputs:{config:"config"},features:[Me([{provide:It,useFactory:t=>t.fetchGridPage.bind(t),deps:[j]},{provide:zt,useFactory:t=>t.fetchFilterValues.bind(t),deps:[O]},Oe(O),Ht(),Ee(O),Fe(O),Ae(O)])],decls:4,vars:35,consts:[["grid",""],[3,"timeRangeApply","forecast","aiSend","openAiBuilder","filterSubmit","filterChange","widgetChartTypeChanged","widgetFiltersChanged","widgetColorChanged","setAlert","widgetClick","widgets","editMode","dashboardId","persistToPublished","canvasBackgroundColor","autoHeight","widgetsLoading","dashboardFilters","resolvedFilters","applySummary","showWidgetMenu","canAsk","canChangeChartType","canManageFilters","canCustomizeColors","canViewChartData","canSetAlert","canForecast","canAddToStory","canExportPng","canExportCsv","canPrint","forecastable","forecastingWidgetId","detailPanel","detailRootLabel","timeFilterEnabled"],[1,"aq-detail-overlay"],[3,"closed","saved","open","widget","dashboardId","source","filterPredicates","filterHasOr","authoringMode"],[1,"aq-detail-overlay__crumbs"],[3,"nile-click"],["variant","text","width","160","height","16"],[1,"aq-detail-overlay__body"],[3,"widgets","widgetsLoading","editMode","canvasBackgroundColor","selectable","showWidgetMenu","canAsk","canChangeChartType","canManageFilters","canCustomizeColors","canViewChartData","canSetAlert","canForecast","canAddToStory","canExportPng","canExportCsv","canPrint"],[1,"aq-detail-skeleton"],[1,"aq-detail-skeleton__row"],["variant","rectangular","width","100%","height","96","border-radius","12px"],["variant","rectangular","width","100%","height","280","border-radius","12px"]],template:function(e,n){e&1&&(s(0,"shared-dashboard-grid",1,0),C("timeRangeApply",function(r){return n.onPickerTimeRange(r)})("forecast",function(r){return n.onForecast(r)})("aiSend",function(r){return n.onAiSend(r)})("openAiBuilder",function(){return n.openInBuilder()})("filterSubmit",function(r){return n.onFilterSubmit(r)})("filterChange",function(r){return n.onFilterChange(r)})("widgetChartTypeChanged",function(r){return n.onWidgetPatchedByGrid(r)})("widgetFiltersChanged",function(r){return n.onWidgetPatchedByGrid(r)})("widgetColorChanged",function(r){return n.onWidgetPatchedByGrid(r)})("setAlert",function(r){return n.onSetAlert(r)})("widgetClick",function(r){return n.onKpiWidgetClicked(r)}),l(),f(2,yn,11,3,"div",2),s(3,"app-alert-drawer",3),C("closed",function(){return n.onAlertClosed()})("saved",function(){return n.onAlertSaved()}),l()),e&2&&(x("widgets",n.widgets)("editMode",!1)("dashboardId",n.dashboardId)("persistToPublished",!0)("canvasBackgroundColor",n.canvasBackgroundColor())("autoHeight",n.autoHeight())("widgetsLoading",n.applyingFilters||n.isRefreshingData)("dashboardFilters",n.activeDashboardFilters)("resolvedFilters",n.activeResolvedFilters)("applySummary",n.applySummary)("showWidgetMenu",n.widgetMenu().enabled)("canAsk",n.widgetMenu().ask)("canChangeChartType",n.widgetMenu().changeChartType)("canManageFilters",n.widgetMenu().manageFilters)("canCustomizeColors",n.widgetMenu().customizeColors)("canViewChartData",n.widgetMenu().chartData)("canSetAlert",n.widgetMenu().setAlert)("canForecast",n.widgetMenu().forecast)("canAddToStory",n.widgetMenu().addToStory)("canExportPng",n.widgetMenu().exportPng)("canExportCsv",n.widgetMenu().exportCsv)("canPrint",n.widgetMenu().print)("forecastable",n.forecastable)("forecastingWidgetId",n.forecastingWidgetId)("detailPanel",!0)("detailRootLabel","Dashboard")("timeFilterEnabled",n.timeFilterShown()),c(2),y(n.widgetDetailPanelOpen?2:-1),c(),x("open",n.alertDrawerOpen)("widget",n.alertWidget)("dashboardId",n.dashboardId)("source",n.alertSource)("filterPredicates",n.alertFilterPredicates)("filterHasOr",n.alertFilterHasOr)("authoringMode",n.alertAuthoringMode))},dependencies:[Te,Ie,ze],styles:['@charset "UTF-8";[_nghost-%COMP%]{display:block;position:relative;height:100%;view-transition-name:dv-viewer-pane}.aq-detail-overlay[_ngcontent-%COMP%]{position:absolute;inset:0;z-index:50;display:flex;flex-direction:column;background:var(--ng-colors-bg-primary);view-transition-name:dv-detail-morph}.dv-morphing[_nghost-%COMP%]{view-transition-name:none}.aq-detail-overlay__crumbs[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;box-sizing:border-box;min-height:56px;padding:10px 20px;border-bottom:1px solid var(--ng-colors-border-secondary);flex-shrink:0}.aq-detail-overlay__crumbs[_ngcontent-%COMP%] nile-breadcrumb[_ngcontent-%COMP%]{display:inline-flex;align-items:center}.aq-detail-overlay__body[_ngcontent-%COMP%]{flex:1 1 auto;min-height:0;overflow:auto;padding:20px;background:var(--nile-color-bg-subtle, #fbfbfd)}.aq-detail-skeleton[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px}.aq-detail-skeleton__row[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.aq-detail-skeleton-grid[_ngcontent-%COMP%]{position:relative;width:100%}.aq-detail-skeleton-slot[_ngcontent-%COMP%]{position:absolute}.dv-skel-card[_ngcontent-%COMP%]{height:100%;display:flex;flex-direction:column;box-sizing:border-box;background:var(--ng-colors-bg-primary, #fff);border-radius:var(--ng-radius-xl, 12px);box-shadow:var(--ng-shadow-sm);overflow:hidden}.dv-skel-card__head[_ngcontent-%COMP%]{padding:13px 14px;border-bottom:1px solid var(--ng-colors-border-tertiary);flex-shrink:0}.dv-skel-card__body[_ngcontent-%COMP%]{flex:1;min-height:0;padding:12px 14px}.dv-skel-card__body[_ngcontent-%COMP%] nile-skeleton-loader[_ngcontent-%COMP%], .dv-skel-card__body[_ngcontent-%COMP%] nile-skeleton-loader[_ngcontent-%COMP%]::part(base){height:100%}']})};var be=class o{environment=u(F);http=u(G);tokenStore=u(ie);get customerId(){return this.tokenStore.tenantId()??""}async chat(t,e,n,i){let r=await new Promise((a,g)=>{let h=this.http.post(`${this.environment.baseUrl}/api/customers/${this.customerId}/products/${this.environment.getProductId()}/workforce/dashboards/${e}/chat`,{message:t,sessionId:n}).subscribe({next:w=>a(w),error:w=>{w instanceof $?g(new Error(w.error?.error||w.message)):g(w)}});if(i){if(i.aborted){h.unsubscribe();let w=new Error("Aborted");w.name="AbortError",g(w);return}i.addEventListener("abort",()=>{h.unsubscribe();let w=new Error("Aborted");w.name="AbortError",g(w)},{once:!0})}});if(!r?.success)throw new Error("Chat request failed");return r}async getSuggestions(t){if(!t)return[];let e;try{e=await k(this.http.get(`${this.environment.baseUrl}/api/customers/${this.customerId}/products/${this.environment.getProductId()}/workforce/dashboards/${t}/chat/suggestions`))}catch(n){throw n instanceof $?new Error(n.error?.error||n.message):n}if(Array.isArray(e))return e;if(e.success===!1)throw new Error("Suggestions request failed");return e.suggestions??e.data??[]}static \u0275fac=function(e){return new(e||o)};static \u0275prov=z({token:o,factory:o.\u0275fac})};var vn=["sliderGrid"],xn=o=>({"recommend-window":o}),wn=()=>({variant:"welcome"}),Pn=()=>[1,2,3,4],Dn=o=>({"mic-listening":o}),Mn=o=>({disabled:o}),an=(o,t)=>t.title;function Sn(o,t){o&1&&N(0)}function kn(o,t){o&1&&(s(0,"div",18),p(1,"nile-skeleton-loader",19),l())}function Tn(o,t){o&1&&(s(0,"div",17),A(1,kn,2,0,"div",18,J),l()),o&2&&(c(),I(se(0,Pn)))}function On(o,t){if(o&1){let e=M();s(0,"button",23),C("click",function(){let i=b(e).$implicit,r=d(5);return _(r.runPrompt(i.title))}),s(1,"div",24),p(2,"nile-icon",25),l(),s(3,"span",26),D(4),l()()}if(o&2){let e=t.$implicit;c(4),L(e.title)}}function En(o,t){if(o&1){let e=M();s(0,"div",17),A(1,On,5,1,"button",20,an),l(),s(3,"button",21),C("click",function(){b(e);let i=d(4);return _(i.openPromptGallery())}),p(4,"nile-glyph",22),s(5,"span"),D(6,"View prompt gallery"),l()()}if(o&2){let e=d(4);c(),I(e.topRecommended())}}function Fn(o,t){if(o&1&&(s(0,"div",9)(1,"div",12),p(2,"nile-icon",13),l(),s(3,"h2",14),D(4,"What would you like to ask?"),l(),s(5,"p",15),D(6,"Ask anything about your dashboard."),l(),W(7,Sn,1,0,"ng-container",16),f(8,Tn,3,1,"div",17)(9,En,7,0),l()),o&2){let e=d(3),n=H(3);c(7),x("ngTemplateOutlet",n)("ngTemplateOutletContext",se(3,wn)),c(),y(e.loadingSuggestions()?8:e.recommended().length>0?9:-1)}}function An(o,t){o&1&&(s(0,"div",10),p(1,"nile-icon",27),s(2,"div",28),D(3,"Generating your answer..."),l()()),o&2&&(c(),x("name","loader")("size","20"))}function In(o,t){if(o&1&&(s(0,"div",29)(1,"div",30)(2,"span"),D(3),l()()()),o&2){let e=d().$implicit;c(3),L(e.content)}}function Rn(o,t){if(o&1&&(s(0,"div")(1,"div",31),p(2,"nile-glyph",32),l(),s(3,"div",33),p(4,"div",34),l()()),o&2){let e=d().$implicit;c(4),x("innerHTML",e.content,lt)}}function zn(o,t){if(o&1&&(f(0,In,4,1,"div",29),f(1,Rn,5,1,"div")),o&2){let e=t.$implicit;y(e.role==="user"?0:-1),c(),y(e.role==="assistant"?1:-1)}}function Nn(o,t){o&1&&N(0)}function Vn(o,t){if(o&1&&W(0,Nn,1,0,"ng-container",35),o&2){d(3);let e=H(3);x("ngTemplateOutlet",e)}}function Wn(o,t){if(o&1){let e=M();s(0,"button",23),C("click",function(){let i=b(e).$implicit,r=d(4);return _(r.onGalleryPromptClick(i.title))}),s(1,"div",24),p(2,"nile-icon",25),l(),s(3,"span",26),D(4),l()()}if(o&2){let e=t.$implicit;c(4),L(e.title)}}function Hn(o,t){if(o&1){let e=M();s(0,"div",11)(1,"div",36)(2,"span",37),D(3,"Prompt gallery"),l(),s(4,"button",38),C("click",function(){b(e);let i=d(3);return _(i.closePromptGallery())}),p(5,"nile-glyph",39),l()(),s(6,"div",40)(7,"p",41),D(8,"Pick a suggestion to get started."),l(),s(9,"div",42),A(10,Wn,5,1,"button",20,an),l()()()}if(o&2){let e=d(3);c(10),I(e.recommended())}}function qn(o,t){if(o&1){let e=M();s(0,"div",6)(1,"nile-glyph",7),C("click",function(){b(e);let i=d(2);return _(i.closePanel.emit())}),l()(),s(2,"div",8),f(3,Fn,10,4,"div",9),f(4,An,4,2,"div",10),A(5,zn,2,2,null,null,J),l(),f(7,Vn,1,1,"ng-container"),f(8,Hn,12,0,"div",11)}if(o&2){let e,n,i,r,a=d(2);c(2),x("ngClass",he(5,xn,!(!((e=a.chatsDetails())==null||e.message==null)&&e.message.length))),c(),y(!((n=a.chatsDetails())==null||n.message==null)&&n.message.length?-1:3),c(),y(a.isGenerating()?4:-1),c(),I((i=a.chatsDetails())==null?null:i.message),c(2),y(!((r=a.chatsDetails())==null||r.message==null)&&r.message.length?7:-1),c(),y(a.showPromptGallery()?8:-1)}}function Ln(o,t){if(o&1){let e=M();s(0,"div",43),C("pointerdown",function(i){b(e);let r=d(2);return _(r.onResizeStart(i))})("pointermove",function(i){b(e);let r=d(2);return _(r.onResizeMove(i))})("pointerup",function(i){b(e);let r=d(2);return _(r.onResizeEnd(i))})("pointercancel",function(i){b(e);let r=d(2);return _(r.onResizeEnd(i))}),l(),s(1,"div",44)(2,"div",45)(3,"shared-dashboard-grid",46,1),C("filterSubmit",function(i){b(e);let r=d(2);return _(r.onSliderFilterSubmit(i))})("filterChange",function(i){b(e);let r=d(2);return _(r.onSliderFilterChange(i))})("widgetChartTypeChanged",function(i){b(e);let r=d(2);return _(r.onSliderWidgetPatched(i))})("widgetFiltersChanged",function(i){b(e);let r=d(2);return _(r.onSliderWidgetPatched(i))})("setAlert",function(i){b(e);let r=d(2);return _(r.onSetAlert(i))}),l(),s(5,"app-alert-drawer",47),C("closed",function(){b(e);let i=d(2);return _(i.onAlertClosed())})("saved",function(){b(e);let i=d(2);return _(i.onAlertClosed())}),l()()()}if(o&2){let e=d(2);c(3),x("widgets",e.sliderWidgets())("editMode",!1)("outerMargin",!1)("dashboardId",e.dashboardId())("dashboardFilters",e.activeDashboardFilters())("resolvedFilters",e.activeResolvedFilters())("persistToPublished",!0)("canSetAlert",!0)("canAddToStory",e.widgetMenu().addToStory)("showWidgetMenu",e.widgetMenu().enabled)("canAsk",e.widgetMenu().ask)("canChangeChartType",e.widgetMenu().changeChartType)("canManageFilters",e.widgetMenu().manageFilters)("canCustomizeColors",e.widgetMenu().customizeColors)("canViewChartData",e.widgetMenu().chartData)("canExportPng",e.widgetMenu().exportPng)("canExportCsv",e.widgetMenu().exportCsv)("canPrint",e.widgetMenu().print),c(2),x("open",e.alertDrawerOpen())("widget",e.alertWidget())("dashboardId",e.dashboardId())("source",e.alertSource())}}function $n(o,t){if(o&1&&(s(0,"div",4)(1,"div",5),f(2,qn,9,7),l(),f(3,Ln,6,22),l()),o&2){let e=d();te("chat-layout--resizing",e.isResizing()),c(),pt("flex",e.chatColumnWidthPct()!==null?"0 0 "+e.chatColumnWidthPct()+"%":null),te("chat-column--split",!!e.dashboardConfig()&&!e.chatOnly()),c(),y(e.loadingChat()?-1:2),c(),y(e.dashboardConfig()&&!e.chatOnly()?3:-1)}}function Gn(o,t){if(o&1){let e=M();s(0,"div",48)(1,"label",49)(2,"input",50),C("input",function(i){b(e);let r=d();return _(r.queryString.set(i.target.value))})("keyup.enter",function(){b(e);let i=d();return _(i.postMessage())}),l(),s(3,"div",51)(4,"div",52)(5,"nile-glyph",53),C("click",function(){b(e);let i=d();return _(i.toggleMic())}),l(),s(6,"nile-glyph",54),C("click",function(){b(e);let i=d();return _(i.isGenerating()?i.cancelGenerate():i.postMessage())}),l()()()()()}if(o&2){let e=t.variant,n=d();te("input-query-container--welcome",e==="welcome"),c(2),x("value",n.queryString()),c(3),x("name",n.isMicListening()?"ng-mic":"ng-mic-off")("ngClass",he(8,Dn,n.isMicListening())),c(),x("name",n.isGenerating()?"ng-circle-stop":"ng-send")("size",n.isGenerating()?"18":"16")("ngClass",he(10,Mn,!n.isGenerating()&&!n.queryString()))}}var Ve=class o{constructor(t,e,n){this.chatService=t;this.openAiService=e;this.sanitizer=n;Z(()=>{let r=this.dashboardId();r&&this.loadSuggestions(r)});let i=null;Z(()=>{let r=this.dashboardConfig(),a=r?.id??null;a!==i&&(this.primedFilterWidgets.clear(),i=a);let g=(r?.widgets??[]).map(h=>({id:h.id,title:h.title??"",widgetType:h.type??"chart",layout:h.layout,config:h.nileConfig,drilldownBy:h.drilldownBy,queryMeta:h.queryMeta,dataSourceId:h.dataSourceId}));this.sliderWidgets.set(g),queueMicrotask(()=>this.primeFilterWidgets())})}chatService;openAiService;sanitizer;closePanel=new _e;dashboardId=Y("");dashboardName=Y("");dashboardConfig=Y(null);chatOnly=Y(!1);initialPrompt=Y("");allChats=m([]);chatsDetails=m(null);isGenerating=m(!1);queryString=m("");searchTerm=m("");selectedChatContextId=m("");loadingChat=m(!1);loadingAllChat=m(!1);isDeleting=m(!1);isMicListening=m(!1);recognition=null;micBaseText="";silenceTimer=null;micSilenceMs=5e3;recommended=m([]);topRecommended=T(()=>this.recommended().slice(0,4));loadingSuggestions=m(!1);showPromptGallery=m(!1);chatColumnWidthPct=m(null);isResizing=m(!1);resizeRect=null;resizePointerId=null;resizeRafPending=!1;sliderWidgets=m([]);activeDashboardFilters=m(null);activeResolvedFilters=m(null);alertDrawerOpen=m(!1);alertWidget=m(null);onSetAlert(t){this.alertWidget.set(t),this.alertDrawerOpen.set(!0)}onSliderWidgetPatched(t){this.sliderWidgets.update(e=>e.map(n=>n.id===t.id?t:n))}onAlertClosed(){this.alertDrawerOpen.set(!1)}widgetMenu(){return this.dashboardsConfig().features.widgetMenu}dashboardsConfig=u(V);alertSource=T(()=>{let t=this.dashboardConfig();return t?{connectionId:t.connectionId,isPipeline:t.isPipeline,adapterType:t.adapterType}:null});sliderGridRef;applyingFilters=m(!1);filterSuggestTimers=new Map;filterSuggestSeq=new Map;primedFilterWidgets=new Set;applyFiltersSeq=0;applyFiltersAbort;generateAbort;formattedChats=T(()=>this.buildFormattedChats(this.allChats()));filteredFormattedChats=T(()=>{let t=this.formattedChats(),e=this.searchTerm().toLowerCase().trim();if(!e)return t;let n=i=>i.filter(r=>r.displayName.toLowerCase().includes(e));return{today:n(t.today),yesterday:n(t.yesterday),older:n(t.older)}});ngOnInit(){this.createNewChat();let t=this.initialPrompt();t&&(this.queryString.set(t),this.postMessage())}async loadSuggestions(t){this.loadingSuggestions.set(!0);try{let e=await this.chatService.getSuggestions(t);this.recommended.set(e.map(n=>({title:n})))}catch(e){console.error("Failed to load chat suggestions:",e),this.recommended.set([])}finally{this.loadingSuggestions.set(!1)}}runPrompt(t){this.queryString.set(t),this.postMessage()}openPromptGallery(){this.showPromptGallery.set(!0)}closePromptGallery(){this.showPromptGallery.set(!1)}onGalleryPromptClick(t){this.closePromptGallery(),this.runPrompt(t)}isFilterWidget(t){return t?.config?.chart?.type==="filter"}onSliderFilterChange(t){let e=t.widgetId,n=t.controlId;if(!e||!n)return;let i=this.dashboardId();if(!i)return;let r=this.filterSuggestTimers.get(e);r&&clearTimeout(r);let a=(t.query??"").trim();if(!a)return;let g=(this.filterSuggestSeq.get(e)??0)+1;this.filterSuggestSeq.set(e,g);let h=setTimeout(async()=>{try{let w=this.sliderWidgets(),v=await this.openAiService.filterSuggest(i,a,w,"published");if(this.filterSuggestSeq.get(e)!==g)return;this.applyFilterSuggestions(e,n,v)}catch(w){console.warn("Filter suggest failed:",w)}},400);this.filterSuggestTimers.set(e,h)}async onSliderFilterSubmit(t){let e=this.sliderWidgets(),n=e.filter(a=>!this.isFilterWidget(a));if(n.length===0)return;this.applyFiltersAbort?.abort();let i=new AbortController;this.applyFiltersAbort=i;let r=++this.applyFiltersSeq;this.applyingFilters.set(!0);try{let{widgets:a,resolvedFilters:g}=await this.openAiService.applyFilters(n,t.filters,this.dashboardId(),"published",i.signal,{mode:t.mode,prompt:t.prompt});if(r!==this.applyFiltersSeq)return;this.sliderWidgets.set(me(e,a)),this.activeDashboardFilters.set(t.filters),this.activeResolvedFilters.set(g)}catch(a){if(a?.name==="AbortError"||r!==this.applyFiltersSeq)return;let g=a instanceof Error?a.message:"Failed to apply filters.";this.pushSystemMessage("error",`Apply filters failed: ${g}`)}finally{r===this.applyFiltersSeq&&this.applyingFilters.set(!1)}}primeFilterWidgets(){let t=this.dashboardId();if(!t)return;let e=this.sliderWidgets();for(let n of e){if(this.primedFilterWidgets.has(n.id))continue;let i=n.config?.chart;if(i?.type!=="filter")continue;let r=i.controls?.find(g=>g.variant==="expression"||g.variant==="hybrid");if(!r?.id)continue;this.primedFilterWidgets.add(n.id);let a=r.id;(async()=>{try{let g=await this.openAiService.filterSuggest(t,"",e,"published");this.applyFilterSuggestions(n.id,a,g)}catch(g){this.primedFilterWidgets.delete(n.id),console.warn("Filter suggest prime failed:",g)}})()}}applyFilterSuggestions(t,e,n){let i=Array.isArray(n.suggestions)?n.suggestions:[];if(!i.length){n.nextToken&&i.push({id:n.nextToken.value,label:n.nextToken.label,type:"attribute"});for(let r of n.completions)i.push({label:r,type:"suggestion"})}i.length!==0&&this.sliderGridRef?.patchFilterSuggestions(t,e,i)}onResizeStart(t){t.preventDefault();let e=t.currentTarget,n=e.parentElement;n&&(this.resizeRect=n.getBoundingClientRect(),e.setPointerCapture(t.pointerId),this.resizePointerId=t.pointerId,this.isResizing.set(!0))}onResizeMove(t){if(!this.isResizing()||!this.resizeRect)return;let n=(t.clientX-this.resizeRect.left)/this.resizeRect.width*100,i=Math.min(75,Math.max(20,n));this.chatColumnWidthPct.set(i),this.scheduleGridReflow()}onResizeEnd(t){let e=t.currentTarget;this.resizePointerId!==null&&e.hasPointerCapture?.(this.resizePointerId)&&e.releasePointerCapture(this.resizePointerId),this.isResizing.set(!1),this.resizeRect=null,this.resizePointerId=null,this.scheduleGridReflow()}scheduleGridReflow(){this.resizeRafPending||(this.resizeRafPending=!0,requestAnimationFrame(()=>{this.resizeRafPending=!1,window.dispatchEvent(new Event("resize"))}))}createNewChat(){let t={id:crypto.randomUUID(),displayName:"New Chat",createdOn:new Date().toISOString(),sessionId:crypto.randomUUID(),message:[]};this.allChats.update(e=>[t,...e]),this.getChatDetails(t.id)}getChatDetails(t){this.selectedChatContextId.set(t);let e=this.allChats().find(n=>n.id===t);e&&this.chatsDetails.set(e),this.loadingChat.set(!1)}deleteChat(t){if(this.isDeleting.set(!0),this.allChats.update(e=>e.filter(n=>n.id!==t)),this.isDeleting.set(!1),this.chatsDetails()?.id===t){let e=this.allChats();e.length?this.getChatDetails(e[0].id):this.createNewChat()}}onSearchChat(t){this.searchTerm.set(t)}async postMessage(){let t=this.queryString().trim();if(!t||this.isGenerating())return;this.chatsDetails()||this.createNewChat();let e=this.chatsDetails();e.message.unshift({role:"user",content:t}),e.displayName==="New Chat"&&(e.displayName=t.length>20?t.substring(0,20):t,this.allChats.update(i=>[...i])),this.chatsDetails.set(P({},e)),this.queryString.set(""),this.isGenerating.set(!0);let n=new AbortController;this.generateAbort=n;try{let i=await this.chatService.chat(t,this.dashboardId(),e.sessionId,n.signal);e.sessionId=i.sessionId,e.message.unshift({role:"assistant",content:this.sanitizeHtml(i.reply.content)})}catch(i){if(i instanceof Error&&i.name==="AbortError")e.message=e.message.filter((r,a)=>!(a===0&&r.role==="user"));else{let r=i instanceof Error?i.message:"Failed to get response.";this.pushSystemMessage("error",`Chat failed: ${r}`)}}finally{this.generateAbort===n&&(this.generateAbort=void 0),this.chatsDetails.set(P({},e)),this.isGenerating.set(!1)}}cancelGenerate(){this.generateAbort?.abort()}toggleMic(){this.isMicListening()?(this.clearSilenceTimer(),this.recognition?.stop()):this.startListening()}startListening(){let t=window,e=t.SpeechRecognition??t.webkitSpeechRecognition;e&&(this.micBaseText=this.queryString(),this.recognition=new e,this.recognition.continuous=!0,this.recognition.interimResults=!0,this.recognition.lang="en-US",this.recognition.onresult=n=>{let i="";for(let a=0;a<n.results.length;a++)i+=n.results[a][0].transcript;let r=this.micBaseText&&!this.micBaseText.endsWith(" ")?" ":"";this.queryString.set(this.micBaseText+r+i),this.resetSilenceTimer()},this.recognition.onend=()=>{this.clearSilenceTimer(),this.isMicListening.set(!1),this.recognition=null},this.recognition.start(),this.isMicListening.set(!0),this.resetSilenceTimer())}resetSilenceTimer(){this.clearSilenceTimer(),this.silenceTimer=setTimeout(()=>{this.silenceTimer=null,this.recognition?.stop(),this.queryString().trim()&&this.postMessage()},this.micSilenceMs)}clearSilenceTimer(){this.silenceTimer!==null&&(clearTimeout(this.silenceTimer),this.silenceTimer=null)}pushSystemMessage(t,e){let n=this.chatsDetails();if(!n){t==="success"&&this.showToast("Done",e);return}let i=String(e).trim().replace(/[.!?]+$/,"").replace(/[<>&]/g,a=>a==="<"?"<":a===">"?">":"&"),r=t==="error"?`ERROR: ${i}!`:i;n.message.unshift({role:"assistant",content:this.sanitizeHtml(`<p class="chat-system chat-system--${t}">${r}</p>`)}),this.chatsDetails.set(P({},n))}showToast(t,e){let n=document.createElement("nile-toast");n.variant="success",n.title=t,n.content=e,n.duration=5e3,n.closable=!0,n.toast(),Lt()}sanitizeHtml(t){return this.sanitizer.sanitize(st.HTML,t)??""}buildFormattedChats(t){let e=[...t].sort((i,r)=>new Date(r.createdOn).getTime()-new Date(i.createdOn).getTime()),n={today:[],yesterday:[],older:[]};return e.forEach(i=>{this.isToday(i.createdOn)?n.today.push(i):this.isYesterday(i.createdOn)?n.yesterday.push(i):n.older.push(i)}),n}isToday(t){let e=new Date(t),n=new Date;return e.getDate()===n.getDate()&&e.getMonth()===n.getMonth()&&e.getFullYear()===n.getFullYear()}isYesterday(t){let e=new Date(t),n=new Date;return n.setDate(n.getDate()-1),e.getDate()===n.getDate()&&e.getMonth()===n.getMonth()&&e.getFullYear()===n.getFullYear()}static \u0275fac=function(e){return new(e||o)(Pe(be),Pe(j),Pe(yt))};static \u0275cmp=q({type:o,selectors:[["db-ai-prompt-panel"]],viewQuery:function(e,n){if(e&1&&ge(vn,5),e&2){let i;X(i=ee())&&(n.sliderGridRef=i.first)}},inputs:{dashboardId:[1,"dashboardId"],dashboardName:[1,"dashboardName"],dashboardConfig:[1,"dashboardConfig"],chatOnly:[1,"chatOnly"],initialPrompt:[1,"initialPrompt"]},outputs:{closePanel:"closePanel"},features:[Me([])],decls:4,vars:1,consts:[["promptInput",""],["sliderGrid",""],[1,"qna-panel"],[1,"chat-layout",3,"chat-layout--resizing"],[1,"chat-layout"],[1,"chat-column"],[1,"chat-header"],["name","close","size","16",1,"close-panel-icon",3,"click"],[1,"chat-message-container",3,"ngClass"],[1,"welcome-section"],[1,"generating-loader"],[1,"contained-panel","prompt-gallery-panel"],[1,"ai-badge","ai-badge--md","welcome-icon-wrap"],["color","var(--ng-colors-border-brand)","name","smartcode","size","20"],[1,"welcome-title"],[1,"welcome-subtitle"],[4,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"recommended"],[1,"recommended-box","skeleton-box"],[2,"width","100%","height","64px","border-radius","12px"],["type","button",1,"recommended-box"],["type","button",1,"browse-more",3,"click"],["name","ng-lightbulb-05","method","stroke","size","14"],["type","button",1,"recommended-box",3,"click"],[1,"ai-badge","ai-badge--sm","rec-icon-wrap"],["color","var(--ng-colors-border-brand)","name","ng-lightbulb-05","size","16","method","stroke"],[1,"rec-title"],[3,"name","size"],[1,"generating-text"],[1,"user-row"],[1,"user"],[1,"ai-badge","ai-badge--sm","assistant-icon"],["name","ng-stars-02","method","stroke","size","16","color","var(--ng-colors-border-brand)"],[1,"assistant"],[1,"assistant-body",3,"innerHTML"],[4,"ngTemplateOutlet"],[1,"contained-panel__header"],[1,"contained-panel__title"],["type","button","aria-label","Close",1,"contained-panel__close",3,"click"],["name","close","size","16"],[1,"contained-panel__body"],[1,"prompt-gallery-subtitle"],[1,"prompt-gallery"],["role","separator","aria-orientation","vertical","aria-label","Resize chat column",1,"chat-layout__resizer",3,"pointerdown","pointermove","pointerup","pointercancel"],[1,"dashboard-slider"],[1,"dashboard-slider__body"],[3,"filterSubmit","filterChange","widgetChartTypeChanged","widgetFiltersChanged","setAlert","widgets","editMode","outerMargin","dashboardId","dashboardFilters","resolvedFilters","persistToPublished","canSetAlert","canAddToStory","showWidgetMenu","canAsk","canChangeChartType","canManageFilters","canCustomizeColors","canViewChartData","canExportPng","canExportCsv","canPrint"],[3,"closed","saved","open","widget","dashboardId","source"],[1,"input-query-container"],[1,"chat-input-pill"],["type","text","placeholder","Enter your query",1,"input-query",3,"input","keyup.enter","value"],[1,"pill-toolbar"],[1,"pill-toolbar__right"],["method","stroke",1,"mic-icon",3,"click","name","ngClass"],["method","stroke",1,"send-icon",3,"click","name","size","ngClass"]],template:function(e,n){e&1&&(s(0,"div",2),f(1,$n,4,8,"div",3),l(),W(2,Gn,7,12,"ng-template",null,0,ye)),e&2&&(c(),y(n.loadingAllChat()?-1:1))},dependencies:[Te,ut,ke,Gt,Ie,ze],styles:['@charset "UTF-8";[_nghost-%COMP%]{display:block;height:100%;min-height:0}.qna-panel[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;background:var(--ng-colors-bg-secondary);font-family:var(--ng-font-family-body)}.chat-layout[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:row;overflow:hidden;min-height:0;container-type:inline-size}.chat-layout.chat-layout--resizing[_ngcontent-%COMP%]{cursor:col-resize;-webkit-user-select:none;user-select:none}.chat-layout.chat-layout--resizing[_ngcontent-%COMP%] .chat-column[_ngcontent-%COMP%]{transition:none!important}.chat-layout.chat-layout--resizing[_ngcontent-%COMP%] .chat-layout__resizer[_ngcontent-%COMP%]:after{opacity:1}.chat-layout__resizer[_ngcontent-%COMP%]{flex:0 0 1px;align-self:stretch;cursor:col-resize;touch-action:none;-webkit-user-select:none;user-select:none;position:relative;background:transparent}.chat-layout__resizer[_ngcontent-%COMP%]:before{content:"";position:absolute;top:0;bottom:0;left:50%;transform:translate(-50%);width:1px;background:var(--ng-colors-border-secondary);transition:background .15s}.chat-layout__resizer[_ngcontent-%COMP%]:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:4px;height:36px;border-radius:999px;background:var(--ng-colors-border-brand);opacity:0;transition:opacity .15s;pointer-events:none}.chat-layout__resizer[_ngcontent-%COMP%]:hover:before{background:var(--ng-colors-border-brand);opacity:0;transition:opacity .15s;pointer-events:none}.chat-layout__resizer[_ngcontent-%COMP%]:hover:after{opacity:1}.dashboard-slider[_ngcontent-%COMP%]{flex:1 1 auto;display:flex;flex-direction:column;overflow:hidden;min-width:0;min-height:0;background:var(--ng-colors-bg-secondary);animation:_ngcontent-%COMP%_slider-in .25s ease-out}.dashboard-slider__header[_ngcontent-%COMP%]{height:56px;padding:0 16px;border-bottom:1px solid var(--ng-colors-border-secondary);flex-shrink:0;background:var(--ng-colors-bg-primary);display:flex;align-items:center;justify-content:space-between;box-sizing:border-box}.dashboard-slider__title[_ngcontent-%COMP%]{font-size:13px;font-weight:600;color:var(--ng-colors-text-primary-900)}.dashboard-slider__body[_ngcontent-%COMP%]{flex:1;min-height:0;min-width:0;overflow:auto;padding:8px}.dashboard-slider__body[_ngcontent-%COMP%] > shared-dashboard-grid[_ngcontent-%COMP%]{display:block;min-width:calc(66.6667cqw - 32px)}@keyframes _ngcontent-%COMP%_slider-in{0%{transform:translate(24px);opacity:0}to{transform:translate(0);opacity:1}}.chat-column[_ngcontent-%COMP%]{flex:1 1 auto;display:flex;flex-direction:column;overflow:hidden;min-width:0;position:relative;background:var(--ng-colors-bg-primary);container-type:inline-size;transition:flex-basis .3s ease,flex .3s ease}.chat-column.chat-column--split[_ngcontent-%COMP%]{flex:0 0 33.333%}.chat-column[_ngcontent-%COMP%] .chat-header[_ngcontent-%COMP%]{padding:16px 16px 8px;flex-shrink:0;background:var(--ng-colors-bg-primary);display:flex;align-items:center;justify-content:flex-end}.chat-column[_ngcontent-%COMP%] .chat-header[_ngcontent-%COMP%] .close-panel-icon[_ngcontent-%COMP%]{cursor:pointer;color:var(--ng-colors-text-tertiary-600);transition:color .15s}.chat-column[_ngcontent-%COMP%] .chat-header[_ngcontent-%COMP%] .close-panel-icon[_ngcontent-%COMP%]:hover{color:var(--ng-colors-text-primary-900)}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%]{flex:1;overflow:auto;padding:20px 24px;display:flex;flex-direction:column-reverse}.chat-column[_ngcontent-%COMP%] .chat-message-container.recommend-window[_ngcontent-%COMP%]{justify-content:center;align-items:center;padding:32px 40px}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .user-row[_ngcontent-%COMP%]{display:flex;flex-direction:row-reverse;justify-content:flex-start;align-items:flex-start;gap:8px;margin-bottom:20px;margin-top:8px}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .user[_ngcontent-%COMP%]{flex:0 1 auto;min-width:0}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .user[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{background:var(--ng-colors-bg-brand-primary);color:var(--ng-colors-text-primary-900);padding:9px 14px;border-radius:14px 14px 2px;font-size:14px;display:inline-block;max-width:100%;text-align:left}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .user-icon[_ngcontent-%COMP%]{flex-shrink:0;width:28px;height:28px;border-radius:50%;background:var(--ng-colors-bg-brand-primary);color:var(--ng-colors-border-brand);display:inline-flex;align-items:center;justify-content:center}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .assistant-icon[_ngcontent-%COMP%]{margin-bottom:6px}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .assistant[_ngcontent-%COMP%]{padding:14px 16px;background:var(--ng-colors-bg-secondary);border:1px solid var(--ng-colors-border-secondary);border-radius:2px 14px 14px;margin-bottom:14px;font-size:14px;line-height:1.65;color:var(--ng-colors-text-primary-900)}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .generating-loader[_ngcontent-%COMP%]{padding:10px 14px;height:40px;display:flex;gap:8px;align-items:center;background:var(--ng-colors-bg-secondary);border:1px solid var(--ng-colors-border-secondary);border-radius:8px;font-size:13px;color:var(--ng-colors-text-tertiary-600);width:fit-content}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .welcome-section[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:12px;width:100%;max-width:820px;text-align:center}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .welcome-section[_ngcontent-%COMP%] .welcome-icon-wrap[_ngcontent-%COMP%]{margin-bottom:4px}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .welcome-section[_ngcontent-%COMP%] .welcome-title[_ngcontent-%COMP%]{margin:0;font-size:22px;font-weight:700;color:var(--ng-colors-text-primary-900);letter-spacing:-.02em}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .welcome-section[_ngcontent-%COMP%] .welcome-subtitle[_ngcontent-%COMP%]{margin:0 0 8px;font-size:14px;color:var(--ng-colors-text-tertiary-600);max-width:440px;line-height:1.6}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .browse-more[_ngcontent-%COMP%]{margin-top:4px;align-self:flex-end;display:inline-flex;align-items:center;gap:6px;padding:6px 4px;background:transparent;border:0;cursor:pointer;font-size:12px;font-weight:500;color:var(--ng-colors-text-tertiary-600);transition:color .15s}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .browse-more[_ngcontent-%COMP%]:hover{color:var(--ng-colors-border-brand)}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .recommended[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;width:100%}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .recommended[_ngcontent-%COMP%] .recommended-box[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;font:inherit;color:inherit;border:1px solid var(--ng-colors-border-secondary);border-radius:14px;padding:18px;cursor:pointer;transition:border-color .18s,box-shadow .18s,transform .15s;background:var(--ng-colors-bg-primary);text-align:left}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .recommended[_ngcontent-%COMP%] .recommended-box[_ngcontent-%COMP%]:hover{border-color:var(--ng-colors-border-brand);box-shadow:0 6px 24px #2970ff1a;transform:translateY(-2px)}.chat-column[_ngcontent-%COMP%] .chat-message-container[_ngcontent-%COMP%] .recommended[_ngcontent-%COMP%] .recommended-box[_ngcontent-%COMP%] .rec-title[_ngcontent-%COMP%]{font-size:13px;font-weight:600;color:var(--ng-colors-text-primary-900);text-transform:capitalize;line-height:1.4}.chat-column[_ngcontent-%COMP%] .input-query-container[_ngcontent-%COMP%]{padding:14px 24px 18px;display:flex;justify-content:center;flex-shrink:0;background:var(--ng-colors-bg-primary)}.chat-column[_ngcontent-%COMP%] .input-query-container[_ngcontent-%COMP%] .chat-input-pill[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px;width:100%;max-width:760px;padding:14px 16px 12px;background:var(--ng-colors-bg-primary);border:1px solid var(--ng-colors-border-secondary);border-radius:24px;box-shadow:0 1px 2px #1018280a,0 8px 24px #1018280f;cursor:text;transition:border-color .15s,box-shadow .15s}.chat-column[_ngcontent-%COMP%] .input-query-container[_ngcontent-%COMP%] .chat-input-pill[_ngcontent-%COMP%]:focus-within{border-color:var(--ng-colors-border-brand);box-shadow:0 0 0 3px #2970ff1f}.chat-column[_ngcontent-%COMP%] .input-query-container[_ngcontent-%COMP%] .input-query[_ngcontent-%COMP%]{width:100%;min-width:0;border:0;outline:0;background:transparent;padding:6px 2px;font:inherit;font-size:15px;color:var(--ng-colors-text-primary-900);text-overflow:ellipsis}.chat-column[_ngcontent-%COMP%] .input-query-container[_ngcontent-%COMP%] .input-query[_ngcontent-%COMP%]::placeholder{color:var(--ng-colors-text-tertiary-600);overflow:hidden;text-overflow:ellipsis}.chat-column[_ngcontent-%COMP%] .input-query-container[_ngcontent-%COMP%] .pill-toolbar[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:flex-end;gap:8px}.chat-column[_ngcontent-%COMP%] .input-query-container[_ngcontent-%COMP%] .pill-toolbar__right[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}.chat-column[_ngcontent-%COMP%] .input-query-container[_ngcontent-%COMP%] .send-icon[_ngcontent-%COMP%]{cursor:pointer;flex-shrink:0;transition:opacity .15s,transform .15s}.chat-column[_ngcontent-%COMP%] .input-query-container[_ngcontent-%COMP%] .send-icon[_ngcontent-%COMP%]:hover{transform:translate(2px)}.chat-column[_ngcontent-%COMP%] .input-query-container[_ngcontent-%COMP%] .send-icon.disabled[_ngcontent-%COMP%]{opacity:.2;pointer-events:none}.chat-column[_ngcontent-%COMP%] .input-query-container[_ngcontent-%COMP%] .mic-icon[_ngcontent-%COMP%]{cursor:pointer;color:var(--ng-colors-text-tertiary-600);transition:color .15s}.chat-column[_ngcontent-%COMP%] .input-query-container[_ngcontent-%COMP%] .mic-icon[_ngcontent-%COMP%]:hover{color:var(--ng-colors-border-brand)}.chat-column[_ngcontent-%COMP%] .input-query-container[_ngcontent-%COMP%] .mic-icon.mic-listening[_ngcontent-%COMP%]{color:var(--ng-colors-fg-error-primary);animation:_ngcontent-%COMP%_mic-pulse 1.2s ease-in-out infinite}.chat-column[_ngcontent-%COMP%] .input-query-container.input-query-container--welcome[_ngcontent-%COMP%]{border-top:0;background:transparent;padding:4px 0 12px;width:100%;max-width:680px}@keyframes _ngcontent-%COMP%_mic-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.55;transform:scale(1.3)}}.dashboard-slider__body[_ngcontent-%COMP%]{padding:unset}.contained-panel[_ngcontent-%COMP%]{position:absolute;inset:0;display:flex;flex-direction:column;background:var(--ng-colors-bg-primary);border-left:1px solid var(--ng-colors-border-secondary);box-shadow:-8px 0 24px #10182814;z-index:var(--z-floating);animation:_ngcontent-%COMP%_contained-slide .25s ease-out}.contained-panel__header[_ngcontent-%COMP%]{height:56px;padding:0 16px;border-bottom:1px solid var(--ng-colors-border-secondary);flex-shrink:0;background:var(--ng-colors-bg-primary);display:flex;align-items:center;justify-content:space-between;gap:8px;box-sizing:border-box}.contained-panel__close[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;padding:4px;border:0;outline:0;background:transparent;color:var(--ng-colors-text-tertiary-600);cursor:pointer;transition:color .15s;flex-shrink:0}.contained-panel__close[_ngcontent-%COMP%]:hover{color:var(--ng-colors-text-primary-900)}.contained-panel__title[_ngcontent-%COMP%]{font-size:14px;font-weight:600;color:var(--ng-colors-text-primary-900);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.contained-panel__body[_ngcontent-%COMP%]{flex:1;min-height:0;overflow:auto;padding:16px 20px 20px}.prompt-gallery-subtitle[_ngcontent-%COMP%]{margin:0 0 24px;font-size:13px;color:var(--ng-colors-text-tertiary-600)}.prompt-gallery[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr;gap:12px;padding:6px 6px 8px}.prompt-gallery[_ngcontent-%COMP%] .recommended-box[_ngcontent-%COMP%]{display:flex;flex-direction:row;align-items:center;gap:10px;border:1px solid var(--ng-colors-border-secondary);border-radius:12px;padding:12px 16px;cursor:pointer;background:var(--ng-colors-bg-primary);text-align:left;font:inherit;color:inherit;transition:border-color .18s,box-shadow .18s,transform .15s}.prompt-gallery[_ngcontent-%COMP%] .recommended-box[_ngcontent-%COMP%]:hover{border-color:var(--ng-colors-border-brand);box-shadow:0 6px 24px #2970ff1a;transform:translateY(-2px)}.prompt-gallery[_ngcontent-%COMP%] .recommended-box[_ngcontent-%COMP%] .rec-title[_ngcontent-%COMP%]{font-size:13px;font-weight:500;color:var(--ng-colors-text-secondary-700);line-height:1.45}@keyframes _ngcontent-%COMP%_contained-slide{0%{transform:translate(8px);opacity:0}to{transform:translate(0);opacity:1}}.chat-system[_ngcontent-%COMP%]{margin:4px 0;font-size:13px;line-height:1.4;color:var(--ng-colors-text-tertiary-600)}.chat-system--error[_ngcontent-%COMP%]{color:var(--ng-colors-fg-error-primary);font-weight:500}']})};var Bn=o=>[o];function Un(o,t){if(o&1&&fe(0,"nile-progress-bar",4),o&2){let e=d();ht("value",e.percent())}}var We=class o{streamId;done=new _e;failed=new _e;streamService=u(Jt);totalCharts=m(0);widgetPhases=m([]);phaseLabel=m("Connecting to your data\u2026");dashboardNumber=m(0);barKey=m(0);pendingNewDashboard=!0;readyCount=T(()=>this.widgetPhases().filter(t=>t==="building"||t==="saving").length);percent=T(()=>{let t=this.totalCharts();if(!t)return 0;let e=this.widgetPhases(),n=0;for(let i=0;i<t;i++){let r=e[i];n+=r==="building"||r==="saving"?1:r==="querying"?.66:r==="analyzing"?.33:0}return Math.round(Math.min(1,n/t)*100)});countLabel=T(()=>{let t=this.totalCharts(),e=this.dashboardNumber();return!t||!e?"":`Dashboard ${e} \xB7 ${this.readyCount()} of ${t} charts`});finished=!1;dispose=null;ngOnInit(){if(!this.streamId){this.failed.emit();return}this.dispose=this.streamService.stream(this.streamId,t=>this.onEvent(t))}ngOnDestroy(){this.teardown()}onEvent(t){switch(t.kind){case"progress":{this.pendingNewDashboard&&(this.dashboardNumber.update(e=>e+1),this.pendingNewDashboard=!1),this.totalCharts.set(t.totalWidgets),this.widgetPhases.update(e=>{let n=[...e];return n[t.widgetIndex]=Qt(n[t.widgetIndex],t.phase),n}),this.phaseLabel.set(t.label);break}case"dashboard-start":{this.resetForNextDashboard(t.dashboardName?`Setting up ${t.dashboardName}\u2026`:"Preparing the next dashboard\u2026");break}case"saved":{this.resetForNextDashboard("Preparing the next dashboard\u2026");break}case"complete":{t.dashboardIds.length>0?this.finish(()=>this.done.emit(t.dashboardIds)):this.finish(()=>this.failed.emit());break}case"error":{t.dashboardIds.length>0?this.finish(()=>this.done.emit(t.dashboardIds)):this.finish(()=>this.failed.emit());break}}}resetForNextDashboard(t){this.barKey.update(e=>e+1),this.pendingNewDashboard=!0,this.totalCharts.set(0),this.widgetPhases.set([]),this.phaseLabel.set(t)}finish(t){this.finished||(this.finished=!0,this.teardown(),t())}teardown(){this.dispose?.(),this.dispose=null}static \u0275fac=function(e){return new(e||o)};static \u0275cmp=q({type:o,selectors:[["app-dashboard-generating"]],inputs:{streamId:"streamId"},outputs:{done:"done",failed:"failed"},decls:13,vars:4,consts:[["role","status","aria-live","polite",1,"genbar"],["variant","informative","size","medium","pulse","",1,"genbar__light"],[1,"genbar__title"],["aria-hidden","true",1,"genbar__divider"],[1,"genbar__bar",3,"value"],[1,"genbar__count"],[1,"genbar__live"],["aria-hidden","true",1,"genbar__spinner"],[1,"genbar__status"]],template:function(e,n){e&1&&(ce(0,"div",0),fe(1,"nile-status-light",1),ce(2,"span",2),D(3,"Generating your dashboards"),De(),fe(4,"span",3),A(5,Un,1,1,"nile-progress-bar",4,gt),ce(7,"span",5),D(8),De(),ce(9,"div",6),fe(10,"nile-spinner",7),ce(11,"span",8),D(12),De()()()),e&2&&(c(5),I(he(2,Bn,n.barKey())),c(3),L(n.countLabel()),c(4),L(n.phaseLabel()))},styles:["[_nghost-%COMP%]{display:block;width:100%}.genbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--ng-spacing-md, 12px);width:100%;min-width:0;padding-inline-start:var(--ng-spacing-lg, 16px)}.genbar__light[_ngcontent-%COMP%]{flex:none}.genbar__title[_ngcontent-%COMP%]{font-size:var(--ng-font-size-text-sm, 14px);font-weight:var(--ng-font-weight-semibold, 600);line-height:var(--ng-line-height-text-sm, 1.4);color:var(--ng-colors-text-primary-900, #181d27);white-space:nowrap}.genbar__divider[_ngcontent-%COMP%]{width:1px;height:20px;background:var(--ng-colors-border-secondary, #e9eaeb);flex:none}.genbar__bar[_ngcontent-%COMP%]{width:160px;flex:none}.genbar__count[_ngcontent-%COMP%]{font-size:var(--ng-font-size-text-sm, 14px);line-height:var(--ng-line-height-text-sm, 1.4);color:var(--ng-colors-text-tertiary-600, #535862);white-space:nowrap}.genbar__live[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;margin-left:auto;flex:none;min-width:0}.genbar__spinner[_ngcontent-%COMP%]{font-size:14px;--indicator-color: var(--ng-colors-border-brand);--track-color: rgba(41, 112, 255, .2);flex:none}.genbar__status[_ngcontent-%COMP%]{font-size:var(--ng-font-size-text-sm, 14px);line-height:var(--ng-line-height-text-sm, 1.4);color:var(--ng-colors-text-tertiary-600, #535862);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:260px}@media(max-width:760px){.genbar__divider[_ngcontent-%COMP%], .genbar__bar[_ngcontent-%COMP%], .genbar__count[_ngcontent-%COMP%]{display:none}}"]})};var jn=["tabsScroller"],Kn=["aiExecutiveSummary"],sn=()=>({subtitle:"Explore your dashboards or ask your data a question"}),Zn=()=>({subtitle:"Setting up your initial dashboards \u2014 crafting a starter set from your data."}),Yn=(o,t)=>t.id;function Qn(o,t){if(o&1&&(s(0,"header",9),N(1,12),l()),o&2){d(2);let e=H(5);c(),x("ngTemplateOutlet",e)("ngTemplateOutletContext",se(2,sn))}}function Jn(o,t){if(o&1&&p(0,"nile-skeleton-loader",14),o&2){let e=t.$implicit;ae("width",e)}}function Xn(o,t){o&1&&p(0,"nile-skeleton-loader",17)}function ei(o,t){if(o&1&&(s(0,"div",10)(1,"div",13),A(2,Jn,1,1,"nile-skeleton-loader",14,J),l(),p(4,"span",15)(5,"nile-skeleton-loader",16),A(6,Xn,1,0,"nile-skeleton-loader",17,J),l()),o&2){let e=d(2);c(2),I(e.skeletonTabWidths),c(4),I(e.skeletonActionBtns)}}function ti(o,t){o&1&&N(0)}function ni(o,t){if(o&1&&(s(0,"div",6)(1,"div",8),f(2,Qn,2,3,"header",9),f(3,ei,8,0,"div",10),W(4,ti,1,0,"ng-container",11),l()()),o&2){let e=d(),n=H(7);c(2),y(e.showHeader()?2:-1),c(),y(e.showDashboardList()?3:-1),c(),x("ngTemplateOutlet",n)}}function ii(o,t){if(o&1&&(s(0,"header",9),N(1,12),l()),o&2){d(2);let e=H(5);c(),x("ngTemplateOutlet",e)("ngTemplateOutletContext",se(2,Zn))}}function oi(o,t){if(o&1){let e=M();s(0,"app-dashboard-generating",19),C("done",function(i){b(e);let r=d(2);return _(r.onGenerationDone(i))})("failed",function(){b(e);let i=d(2);return _(i.onGenerationFailed())}),l()}if(o&2){let e=d(2);x("streamId",e.generationStreamId())}}function ri(o,t){o&1&&N(0)}function ai(o,t){if(o&1&&(s(0,"div",7)(1,"div",8),f(2,ii,2,3,"header",9),s(3,"div",10),f(4,oi,1,1,"app-dashboard-generating",18),l()(),W(5,ri,1,0,"ng-container",11),l()),o&2){let e=d(),n=H(7);c(2),y(e.showHeader()?2:-1),c(2),y(e.features().autoGenerate?4:-1),c(),x("ngTemplateOutlet",n)}}function si(o,t){if(o&1&&(s(0,"header",9),N(1,12),l()),o&2){d(2);let e=H(5);c(),x("ngTemplateOutlet",e)("ngTemplateOutletContext",se(2,sn))}}function li(o,t){o&1&&p(0,"nile-glyph",46)}function di(o,t){if(o&1){let e=M();s(0,"span",48),C("click",function(i){return i.stopPropagation()}),s(1,"input",49,3),C("input",function(){b(e);let i=H(2),r=d(5);return _(r.onRenameInputChange(i.value))})("keydown",function(i){b(e);let r=d().$implicit,a=d(4);return _(a.onRenameInputKeydown(i,r))})("click",function(i){return i.stopPropagation()}),l(),s(3,"button",50),C("click",function(i){b(e);let r=d().$implicit,a=d(4);return _(a.commitRenameDashboard(r,i))}),p(4,"nile-glyph",51),l()()}if(o&2){let e=d().$implicit,n=d(4);c(),x("value",n.renamingValue())("disabled",n.isRenamingDashboard()),ae("data-dashboard-id",e.id),c(2),x("disabled",n.isRenamingDashboard())}}function ci(o,t){if(o&1){let e=M();s(0,"button",54),C("click",function(i){b(e);let r=d(2).$implicit,a=d(4);return _(a.startRenameDashboard(r,i))}),p(1,"nile-glyph",55),l()}}function gi(o,t){if(o&1&&(s(0,"span",52),D(1),l(),f(2,ci,2,0,"button",53)),o&2){let e=d().$implicit,n=d(4);c(),L(e.name),c(),y(n.features().rename?2:-1)}}function hi(o,t){if(o&1){let e=M();s(0,"nile-nav-tab",45),C("click",function(){let i=b(e).$implicit,r=d(4);return _(r.setActiveTab(i.id))}),f(1,li,1,0,"nile-glyph",46),f(2,di,5,4,"span",47)(3,gi,3,2),l()}if(o&2){let e=t.$implicit,n=d(4);ae("panel",e.id),c(),y(e.isAutoGenerated?1:-1),c(),y(n.renamingDashboardId()===e.id?2:3)}}function pi(o,t){o&1&&p(0,"span",43)}function mi(o,t){if(o&1){let e=M();s(0,"button",31),C("click",function(){b(e);let i=d(3);return _(i.scrollTabs(-1))}),p(1,"nile-glyph",32),l(),s(2,"div",33,2),C("scroll",function(){b(e);let i=d(3);return _(i.onTabsScroll())}),s(4,"nile-nav-tab-group",34),p(5,"nile-nav-tab",35),A(6,hi,4,3,"nile-nav-tab",36,Yn),l()(),s(8,"button",37),C("click",function(){b(e);let i=d(3);return _(i.scrollTabs(1))}),p(9,"nile-glyph",38),l(),p(10,"span",15),s(11,"nile-dropdown",39),C("nile-hide",function(){b(e);let i=d(3);return _(i.categoryFilterOpen.set(!1))}),s(12,"nile-lite-tooltip",40)(13,"button",41),C("click",function(){b(e);let i=d(3);return _(i.categoryFilterOpen.set(!i.categoryFilterOpen()))}),p(14,"nile-glyph",42),f(15,pi,1,0,"span",43),l()(),s(16,"shared-category-filter-row",44),C("mousedown",function(i){return i.stopPropagation()})("selectionChange",function(i){b(e);let r=d(3);return _(r.onCategoryFilterChange(i))}),l()()}if(o&2){let e=d(3);x("disabled",!e.canScrollLeft()),c(4),ae("value",e.activeTabId()||"__sentinel__"),c(2),I(e.visibleDashboards()),c(2),x("disabled",!e.canScrollRight()),c(3),x("open",e.categoryFilterOpen()),c(4),y(e.selectedCategory()?15:-1),c(),x("selected",e.selectedCategory())}}function ui(o,t){if(o&1){let e=M();s(0,"nile-lite-tooltip",26)(1,"button",56),C("click",function(){b(e);let i=d(3);return _(i.goToCreateDashboard())}),p(2,"nile-glyph",57),l()()}if(o&2){let e=d(3);c(),x("disabled",e.creatingDashboard())}}function bi(o,t){if(o&1){let e=M();s(0,"nile-lite-tooltip",27)(1,"button",58),C("click",function(){b(e);let i=d(3);return _(i.refreshActiveDashboard())}),p(2,"nile-glyph",59),l()()}if(o&2){let e=d(3);c(),x("disabled",!e.activeTabId()||e.refreshingDashboard()),c(),te("home-refresh-glyph--spinning",e.refreshingDashboard())}}function _i(o,t){if(o&1){let e=M();s(0,"nile-lite-tooltip",29)(1,"button",60),C("click",function(){b(e);let i=d(3);return _(i.selectHomeMenuItem("executiveSummary"))}),p(2,"nile-glyph",61),l()()}if(o&2){let e=d(3);c(),x("disabled",!e.activeTabId())}}function fi(o,t){if(o&1){let e=M();s(0,"nile-dropdown",62),C("nile-hide",function(){b(e);let i=d(3);return _(i.downloadMenuOpen.set(!1))}),s(1,"nile-lite-tooltip",63)(2,"button",64),C("click",function(){b(e);let i=d(3);return _(i.downloadMenuOpen.set(!i.downloadMenuOpen()))}),p(3,"nile-glyph",65),l()(),s(4,"nile-menu")(5,"nile-menu-item",66),C("click",function(){b(e);let i=d(3);return i.downloadMenuOpen.set(!1),_(i.selectHomeMenuItem("exportPdf"))}),p(6,"nile-glyph",67),D(7," Download as PDF "),l(),s(8,"nile-menu-item",66),C("click",function(){b(e);let i=d(3);return i.downloadMenuOpen.set(!1),_(i.selectHomeMenuItem("exportPng"))}),p(9,"nile-glyph",68),D(10," Download as PNG "),l()()()}if(o&2){let e=d(3);x("open",e.downloadMenuOpen())}}function yi(o,t){if(o&1&&(s(0,"div",25),f(1,mi,17,6),f(2,ui,3,1,"nile-lite-tooltip",26),f(3,bi,3,3,"nile-lite-tooltip",27),s(4,"div",28),f(5,_i,3,1,"nile-lite-tooltip",29),f(6,fi,11,1,"nile-dropdown",30),l()()),o&2){let e=d(2);te("is-scrollable",e.canScrollLeft()||e.canScrollRight())("tabs-bar__nav--minimal",!e.showDashboardList()),c(),y(e.showDashboardList()?1:-1),c(),y(e.features().createDashboard?2:-1),c(),y(e.features().refresh?3:-1),c(2),y(e.features().executiveSummary?5:-1),c(),y(e.features().export?6:-1)}}function Ci(o,t){if(o&1&&(s(0,"nile-nav-tab-panel",69),p(1,"app-dashboard-viewer",71),l()),o&2){let e=d(3);ae("name",e.activeTabId()),c(),x("config",e.loadedDashboards().get(e.activeTabId()))}}function vi(o,t){o&1&&N(0)}function xi(o,t){if(o&1&&(s(0,"div",70),W(1,vi,1,0,"ng-container",11),l()),o&2){d(3);let e=H(7);c(),x("ngTemplateOutlet",e)}}function wi(o,t){if(o&1&&f(0,Ci,2,2,"nile-nav-tab-panel",69)(1,xi,2,1,"div",70),o&2){let e=d(2);y(e.loadedDashboards().has(e.activeTabId())?0:e.isTabLoading()||e.refreshingDashboard()?1:-1)}}function Pi(o,t){if(o&1){let e=M();s(0,"div",21)(1,"h2",72),D(2,"No dashboards in this category"),l(),s(3,"p",73),D(4,"Try a different category, or clear the filter to see everything."),l(),s(5,"nile-button",74),C("click",function(){b(e);let i=d(2);return _(i.onCategoryFilterChange(null))}),D(6," Clear filter "),l()()}}function Di(o,t){if(o&1){let e=M();s(0,"nile-button",107),C("click",function(){b(e);let i=d(3);return _(i.goToCreateDashboard())}),p(1,"nile-glyph",108),D(2," Create dashboard "),l()}if(o&2){let e=d(3);ae("disabled",e.creatingDashboard()?"":null)}}function Mi(o,t){if(o&1&&(s(0,"div",21)(1,"div",75),it(),s(2,"svg",76),p(3,"rect",77)(4,"rect",78)(5,"rect",79),s(6,"rect",80),p(7,"animate",81)(8,"animate",82),l(),s(9,"rect",83),p(10,"animate",84)(11,"animate",85),l(),s(12,"rect",86),p(13,"animate",87)(14,"animate",88),l(),s(15,"rect",89),p(16,"animate",90)(17,"animate",91),l(),s(18,"rect",92),p(19,"animate",93)(20,"animate",94),l(),p(21,"rect",95)(22,"rect",96)(23,"circle",97),s(24,"circle",98),p(25,"animate",99),l(),p(26,"rect",100)(27,"rect",101),s(28,"path",102),p(29,"animate",103),l(),s(30,"circle",104),p(31,"animate",105),l()()(),ot(),s(32,"h2",72),D(33,"Build your dashboard"),l(),s(34,"p",73),D(35," Tap the below button to generate dashboard. "),l(),f(36,Di,3,1,"nile-button",106),l()),o&2){let e=d(2);c(36),y(e.features().createDashboard?36:-1)}}function Si(o,t){if(o&1){let e=M();s(0,"db-ai-prompt-panel",109),C("closePanel",function(){b(e);let i=d(2);return _(i.showAiPanel.set(!1))}),l()}if(o&2){let e=d(2);x("dashboardId",e.activeTabId())("dashboardName",e.activeDashboardName())("dashboardConfig",e.loadedDashboards().get(e.activeTabId())??null)("chatOnly",e.aiChatOnly())("initialPrompt",e.aiInitialPrompt())}}function ki(o,t){o&1&&p(0,"nile-executive-summary",24,4)}function Ti(o,t){if(o&1){let e=M();s(0,"div",7)(1,"div",8),f(2,si,2,3,"header",9),f(3,yi,7,9,"div",20),f(4,wi,2,1)(5,Pi,7,0,"div",21)(6,Mi,37,1,"div",21),s(7,"nile-drawer",22),C("nile-request-close",function(){b(e);let i=d();return _(i.showAiPanel.set(!1))}),f(8,Si,1,5,"db-ai-prompt-panel",23),l(),f(9,ki,2,0,"nile-executive-summary",24),l()()}if(o&2){let e=d();c(2),y(e.showHeader()?2:-1),c(),y(e.allDashboards().length>0&&e.hasToolbarActions()?3:-1),c(),y(e.activeTabId()?4:e.allDashboards().length>0?5:e.allDashboards().length===0?6:-1),c(3),x("open",e.showAiPanel()),c(),y(e.features().aiPrompt&&e.showAiPanel()?8:-1),c(),y(e.features().executiveSummary?9:-1)}}function Oi(o,t){if(o&1&&(s(0,"div",110)(1,"h1",111),D(2,"Dashboards"),l(),s(3,"p",112),D(4),l()()),o&2){let e=t.subtitle;c(4),L(e)}}function Ei(o,t){o&1&&(s(0,"div",115)(1,"div",118),p(2,"nile-skeleton-loader",119)(3,"nile-skeleton-loader",120),l(),p(4,"nile-skeleton-loader",121),s(5,"div",122),p(6,"nile-skeleton-loader",123)(7,"nile-skeleton-loader",124),l(),p(8,"nile-skeleton-loader",125),l())}function Fi(o,t){o&1&&(s(0,"div",117)(1,"div",126)(2,"div",127),p(3,"nile-skeleton-loader",128)(4,"nile-skeleton-loader",129),l(),p(5,"nile-skeleton-loader",130),l(),p(6,"nile-skeleton-loader",131),l())}function Ai(o,t){if(o&1&&(s(0,"div",113)(1,"div",114),A(2,Ei,9,0,"div",115,J),l(),s(4,"div",116),A(5,Fi,7,0,"div",117,J),l()()),o&2){let e=d();c(2),I(e.skeletonKpis),c(3),I(e.skeletonWidgets)}}var Ye=4,xe="__dvz-widget-selection__";function Ii(o){let e=0,n=0,i=0;return o.map(r=>{let a=Math.min(r.layout.w,12);e>0&&e+a>12&&(e=0,n+=i,i=0);let g=E(P({},r),{layout:E(P({},r.layout),{x:e,y:n})});return e+=a,i=Math.max(i,r.layout.h),g})}function Ri(o){let t=o.indexOf("/");if(t<=0||t===o.length-1)return null;let e=o.slice(0,t).trim(),n=o.slice(t+1).trim();return e&&n?{dashboardKey:e,widgetKey:n}:null}var He=class o{MAX_TABS=Ye;tabsScrollerEl;dashboardViewerRef;aiExecutiveSummaryEl;appliedHostTimeRange=null;appliedHostTimeRangeViewer=null;syncHostTimeRange(){let t=this.dashboardsConfig().timeRange??null,e=this.dashboardViewerRef??null;if(!e)return;let n=t!==this.appliedHostTimeRange,i=e!==this.appliedHostTimeRangeViewer;!n&&!i||(this.appliedHostTimeRangeViewer=e,!(t===null&&this.appliedHostTimeRange===null)&&(this.appliedHostTimeRange=t,e.applyTimeRange(t)))}tabsScrollLeft=m(0);tabsClientWidth=m(0);tabsScrollWidth=m(0);canScrollLeft=T(()=>this.tabsScrollLeft()>0);canScrollRight=T(()=>this.tabsScrollLeft()+this.tabsClientWidth()<this.tabsScrollWidth()-1);onTabsScroll(){this.updateTabsScrollState()}updateTabsScrollState(){let t=this.tabsScrollerEl?.nativeElement;t&&(this.tabsScrollLeft.set(t.scrollLeft),this.tabsClientWidth.set(t.clientWidth),this.tabsScrollWidth.set(t.scrollWidth))}scrollTabs(t){let e=this.tabsScrollerEl?.nativeElement;e&&e.scrollBy({left:t*e.clientWidth*.8,behavior:"smooth"})}scrollActiveTabIntoView(){let t=this.tabsScrollerEl?.nativeElement;if(!t)return;let e=this.activeTabId();if(!e)return;let n=window.CSS&&CSS.escape?CSS.escape(e):e.replace(/"/g,'\\"'),i=t.querySelector(`nile-nav-tab[panel="${n}"]`);if(!i)return;let r=i.getBoundingClientRect(),a=t.getBoundingClientRect(),g=16;r.right>a.right?t.scrollBy({left:r.right-a.right+g,behavior:"smooth"}):r.left<a.left&&t.scrollBy({left:r.left-a.left-g,behavior:"smooth"})}onWindowResize=()=>this.ngZone.run(()=>this.updateTabsScrollState());showAiPanel=m(!1);aiChatOnly=m(!1);aiInitialPrompt=m("");allDashboards=m([]);selectedCategory=m(null);dashboardCategories=Xt;categoryFilterOpen=m(!1);visibleDashboards=T(()=>{let t=this.selectedCategory(),e=this.allDashboards();return t?e.filter(n=>n.category?.includes(t)):e});activeTabs=m([]);activeTabId=m("");loadedDashboards=m(new Map);singleDashboardMode=!1;isLoading=m(!0);isTabLoading=m(!1);skeletonTabWidths=[72,220,140];skeletonKpis=Array.from({length:4});skeletonWidgets=Array.from({length:4});skeletonActionBtns=Array.from({length:4});showMore=T(()=>this.allDashboards().length>0);activeDashboardName=T(()=>this.allDashboards().find(t=>t.id===this.activeTabId())?.name??"");activeConfig=T(()=>this.loadedDashboards().get(this.activeTabId())??null);isExporting=m(!1);showExportDropdown=m(!1);downloadMenuOpen=m(!1);creatingDashboard=m(!1);generationStreamId=m("");isGenerating=T(()=>this.generationStreamId()!=="");generationSettled=!1;showHeader(){return this.dashboardsConfig().ui.header}showDashboardList(){return!this.singleDashboardMode&&this.dashboardsConfig().ui.dashboardList}autoHeight(){return this.dashboardsConfig().ui.autoHeight}features(){return this.dashboardsConfig().features}hasToolbarActions(){let t=this.features();return this.showDashboardList()||t.createDashboard||t.refresh||t.executiveSummary||t.export}copy(){return this.dashboardsConfig().copy}dashboardsConfig=u(V);service=u(re);ngZone=u(we);el=u(de);navigator=u(B);routeProgress=u($t);autoDashboard=u(Yt);publishRepo=u(O);goToCreateDashboard(){this.creatingDashboard()||(this.creatingDashboard.set(!0),this.navigator.toAskAquera())}constructor(){Z(()=>{this.activeTabId(),this.allDashboards(),queueMicrotask(()=>this.scrollActiveTabIntoView())})}ngAfterViewChecked(){this.updateTabsScrollState(),this.syncHostTimeRange()}async runExecutiveSummary(){let t=this.activeTabId();if(!t)return;let e=this.activeDashboardName(),n=this.aiExecutiveSummaryEl?.nativeElement;n&&(n.config={summary:"",buttonLabel:"Executive Summary",buttonVariant:"secondary",drawerLabel:e?`${e} Summary`:"Dashboard Summary",typingSpeed:5,closeOnEscape:!0},n.loading=!0,n.show?.());try{let i=await this.publishRepo.fetchDashboardSummary(t),r=this.aiExecutiveSummaryEl?.nativeElement;r&&(r.config=E(P({},r.config??{}),{summary:i}),r.loading=!1,r.open&&r.startTyping?.())}catch(i){let r=this.aiExecutiveSummaryEl?.nativeElement,a=i instanceof Error?i.message:"Failed to generate summary.";r&&(r.config=E(P({},r.config??{}),{summary:`<p><strong>Couldn't generate an executive summary.</strong> ${a}</p>`}),r.loading=!1,r.open&&r.startTyping?.())}}onExportTriggerClick(){this.showExportDropdown.set(!this.showExportDropdown())}selectHomeMenuItem(t){t==="askAi"?(this.aiChatOnly.set(!0),this.aiInitialPrompt.set(""),this.showAiPanel.set(!0)):t==="executiveSummary"?this.runExecutiveSummary():t==="exportPdf"?this.exportDashboardPdf():t==="exportPng"&&this.exportDashboardPng()}getDashboardTarget(){let t=this.activeTabId();return this.el.nativeElement.querySelector(`nile-nav-tab-panel[name="${t}"] app-dashboard-viewer gridster`)}async exportDashboardPdf(){if(this.isExporting())return;let t=this.getDashboardTarget();if(t){this.showExportDropdown.set(!1),this.isExporting.set(!0),await new Promise(e=>requestAnimationFrame(()=>requestAnimationFrame(e)));try{let e=t.scrollWidth,n=t.scrollHeight,i=await Ke(t,{quality:1,width:e,height:n,cacheBust:!0,backgroundColor:"#ffffff",style:{height:`${n}px`,maxHeight:"none",overflow:"visible"}}),r=this.activeDashboardName()||"Dashboard",a=90,g=new Zt({orientation:e>n?"landscape":"portrait",unit:"px",format:[e,n+a]});g.setFillColor(245,245,248),g.rect(0,0,e,a,"F"),g.setFont("helvetica","bold"),g.setFontSize(28),g.setTextColor(50,50,60),g.text(r,e/2,a/2+7,{align:"center"}),g.addImage(i,"JPEG",0,a,e,n),g.save(`${r}.pdf`)}finally{this.isExporting.set(!1)}}}async exportDashboardPng(){if(this.isExporting())return;let t=this.getDashboardTarget();if(t){this.showExportDropdown.set(!1),this.isExporting.set(!0),await new Promise(e=>requestAnimationFrame(()=>requestAnimationFrame(e)));try{let e=t.scrollWidth,n=t.scrollHeight,i=await Ke(t,{quality:1,width:e,height:n,cacheBust:!0,backgroundColor:"#ffffff",style:{height:`${n}px`,maxHeight:"none",overflow:"visible"}}),r=this.activeDashboardName()||"Dashboard",a=90,g=document.createElement("canvas");g.width=e,g.height=n+a;let h=g.getContext("2d");h.fillStyle="#f5f5f8",h.fillRect(0,0,e,a),h.fillStyle="#32323c",h.font="bold 28px helvetica",h.textAlign="center",h.textBaseline="middle",h.fillText(r,e/2,a/2+7);let w=new Image;w.src=i,await new Promise(S=>{w.onload=()=>S()}),h.drawImage(w,0,a,e,n);let v=document.createElement("a");v.href=g.toDataURL("image/png"),v.download=`${r}.png`,v.click()}finally{this.isExporting.set(!1)}}}toggleAiPanel(){this.showAiPanel.update(t=>!t)}onToggleAiPanel=()=>this.ngZone.run(()=>this.showAiPanel.update(t=>!t));ngOnInit(){this.loadList(),window.addEventListener("dv:toggle-ai-panel",this.onToggleAiPanel),window.addEventListener("resize",this.onWindowResize)}ngOnDestroy(){window.removeEventListener("dv:toggle-ai-panel",this.onToggleAiPanel),window.removeEventListener("resize",this.onWindowResize)}async loadList(){this.isLoading.set(!0);try{let t=await this.routeProgress.track(this.service.loadDashboards());this.ngZone.run(()=>this.allDashboards.set(t));let e=this.dashboardsConfig();e.initialWidgets.length>0&&await this.loadWidgetSelection(t,e.initialWidgets),this.activeTabId()||this.ngZone.run(()=>{let n=e.initialDashboard,i=n?t.find(a=>a.id===n)??t.find(a=>a.name===n):void 0;this.singleDashboardMode=!!i;let r=i?[i]:t.slice(0,Ye);if(this.activeTabs.set(r),r.length>0){let a=i?.id??r[0].id;this.activeTabId.set(a),this.loadTab(a)}}),t.length===0&&await this.checkAutoDashboard()}catch(t){console.error("Failed to load dashboards list:",t)}finally{this.ngZone.run(()=>this.isLoading.set(!1))}}async loadWidgetSelection(t,e){let n=v=>t.find(S=>S.id===v)??t.find(S=>S.name===v),i=e.map(v=>{let S=Ri(v);if(!S)return console.warn(`[dvz-dashboards] config.initial.widgets entry "${v}" is not "<dashboard>/<widget>" \u2014 skipped.`),null;let K=n(S.dashboardKey);return K?{raw:v,widgetKey:S.widgetKey,dashboardId:K.id}:(console.warn(`[dvz-dashboards] config.initial.widgets entry "${v}" \u2014 no dashboard matches "${S.dashboardKey}", skipped.`),null)}).filter(v=>!!v);if(!i.length)return;let r=[...new Set(i.map(v=>v.dashboardId))],a=await this.routeProgress.track(Promise.all(r.map(v=>this.service.fetchDashboard(v)))),g=new Map(r.map((v,S)=>[v,a[S]])),h=[];for(let v of i){let S=g.get(v.dashboardId),K=S?.widgets.find(Q=>Q.id===v.widgetKey)??S?.widgets.find(Q=>Q.title===v.widgetKey);if(!K){console.warn(`[dvz-dashboards] config.initial.widgets entry "${v.raw}" \u2014 no widget matches "${v.widgetKey}" on dashboard "${v.dashboardId}", skipped.`);continue}h.push(K)}if(!h.length)return;let w={id:xe,name:"Selected widgets",widgets:Ii(h),canRefresh:a.some(v=>v.canRefresh)};this.ngZone.run(()=>{this.singleDashboardMode=!0,this.activeTabs.set([{id:xe,name:w.name,createdAt:new Date().toISOString()}]),this.activeTabId.set(xe);let v=new Map(this.loadedDashboards());v.set(xe,w),this.loadedDashboards.set(v)})}async checkAutoDashboard(){if(!(this.generationSettled||this.isGenerating()))try{let t=await this.autoDashboard.trigger();t?.success&&!t.skipped&&t.streamId&&this.ngZone.run(()=>{this.generationStreamId.set(t.streamId)})}catch{}}onGenerationDone(t){this.generationSettled=!0,this.generationStreamId.set("");let e=t.length;this.loadList().then(()=>{this.showReadyToast(e>1?`${e} dashboards are ready`:"Your dashboard is ready")})}onGenerationFailed(){this.generationSettled=!0,this.generationStreamId.set("")}showReadyToast(t){Ce({variant:"success",title:"All set",content:t})}async loadTab(t){if(!this.loadedDashboards().has(t)){this.isTabLoading.set(!0);try{let e=await this.routeProgress.track(this.service.fetchDashboard(t));this.ngZone.run(()=>{let n=new Map(this.loadedDashboards());n.set(t,e),this.loadedDashboards.set(n)})}catch(e){console.error(`Failed to load dashboard ${t}:`,e)}finally{this.ngZone.run(()=>this.isTabLoading.set(!1))}}}refreshingDashboard=m(!1);async refreshActiveDashboard(){let t=this.activeTabId();if(!t||this.refreshingDashboard())return;if(t===xe){this.refreshingDashboard.set(!0),this.ngZone.run(()=>{let n=new Map(this.loadedDashboards());n.delete(t),this.loadedDashboards.set(n)});try{await this.loadWidgetSelection(this.allDashboards(),this.dashboardsConfig().initialWidgets)}finally{this.ngZone.run(()=>this.refreshingDashboard.set(!1))}return}let e=this.loadedDashboards().get(t);this.refreshingDashboard.set(!0),this.ngZone.run(()=>{let n=new Map(this.loadedDashboards());n.delete(t),this.loadedDashboards.set(n)});try{let n=await this.routeProgress.track(this.service.fetchDashboard(t));this.ngZone.run(()=>{let i=new Map(this.loadedDashboards());i.set(t,n),this.loadedDashboards.set(i)})}catch(n){console.error(`Failed to refresh dashboard ${t}:`,n),e&&this.ngZone.run(()=>{let i=new Map(this.loadedDashboards());i.set(t,e),this.loadedDashboards.set(i)})}finally{this.ngZone.run(()=>{this.refreshingDashboard.set(!1)})}}onTabChange(t){let e=t.detail.value;e!==this.activeTabId()&&this.setActiveTab(e)}onCategoryFilterChange(t){this.selectedCategory.set(t),this.categoryFilterOpen.set(!1);let e=this.visibleDashboards();e.some(n=>n.id===this.activeTabId())||(e.length>0?this.setActiveTab(e[0].id):this.activeTabId.set(""))}setActiveTab(t){this.showAiPanel.set(!1),this.activeTabId.set(t),this.loadTab(t)}isInActiveTabs(t){return this.activeTabs().some(e=>e.id===t)}canAdd(){return this.activeTabs().length<Ye}isLastActiveDashboard(t){return this.activeTabs().length===1&&this.isInActiveTabs(t)}renamingDashboardId=m(null);renamingValue=m("");isRenamingDashboard=m(!1);startRenameDashboard(t,e){e.stopPropagation(),this.renamingDashboardId.set(t.id),this.renamingValue.set(t.name),queueMicrotask(()=>{let n=this.el.nativeElement.querySelector(`.tab-rename-input[data-dashboard-id="${t.id}"]`);n?.focus(),n?.select()})}onRenameInputChange(t){this.renamingValue.set(t)}onRenameInputKeydown(t,e){t.key==="Enter"?(t.preventDefault(),this.commitRenameDashboard(e)):t.key==="Escape"&&(t.preventDefault(),this.cancelRenameDashboard(t))}cancelRenameDashboard(t){t?.stopPropagation(),this.renamingDashboardId.set(null),this.renamingValue.set("")}async commitRenameDashboard(t,e){e?.stopPropagation();let n=this.renamingValue().trim();if(!n||n===t.name){this.cancelRenameDashboard();return}this.isRenamingDashboard.set(!0);try{await this.service.renameDashboard(t.id,n),this.ngZone.run(()=>{let i=r=>r.map(a=>a.id===t.id?E(P({},a),{name:n}):a);this.allDashboards.update(i),this.activeTabs.update(i),this.renamingDashboardId.set(null),this.renamingValue.set("")}),Ce({variant:"success",title:"Renamed",content:"Dashboard renamed."})}catch{}finally{this.ngZone.run(()=>this.isRenamingDashboard.set(!1))}}onDashboardToggle(t,e){if(e){if(!this.canAdd())return;this.activeTabs.update(n=>[...n,t]),this.setActiveTab(t.id)}else{let n=this.activeTabId()===t.id;if(this.activeTabs.update(i=>i.filter(r=>r.id!==t.id)),n){let i=this.activeTabs();i.length>0?this.setActiveTab(i[0].id):this.activeTabId.set("")}}}static \u0275fac=function(e){return new(e||o)};static \u0275cmp=q({type:o,selectors:[["dvz-dashboards-page"]],viewQuery:function(e,n){if(e&1&&ge(jn,5)(ve,5)(Kn,5),e&2){let i;X(i=ee())&&(n.tabsScrollerEl=i.first),X(i=ee())&&(n.dashboardViewerRef=i.first),X(i=ee())&&(n.aiExecutiveSummaryEl=i.first)}},hostVars:2,hostBindings:function(e,n){e&2&&te("auto-height",n.autoHeight())},decls:8,vars:3,consts:[["pageTitleBlock",""],["dashboardSkeleton",""],["tabsScroller",""],["renameInput",""],["aiExecutiveSummary",""],[1,"home-page"],["aria-hidden","true",1,"tabs-wrapper","home-skeleton"],[1,"tabs-wrapper"],[1,"tabs-bar"],[1,"home-nav"],[1,"tabs-bar__nav","home-skeleton__tabs-row"],[4,"ngTemplateOutlet"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"home-skeleton__tab-pills"],["variant","rounded","height","28",1,"home-skeleton__tab"],["aria-hidden","true",1,"home-menu-divider"],["variant","rounded","width","32","height","28","border-radius","8px"],["variant","circular","width","28","height","28"],[3,"streamId"],[3,"done","failed","streamId"],[1,"tabs-bar__nav",3,"is-scrollable","tabs-bar__nav--minimal"],[1,"home-empty-state"],["contained","","no-header","","placement","end","label","Ask",1,"home-ai-drawer",3,"nile-request-close","open"],[3,"dashboardId","dashboardName","dashboardConfig","chatOnly","initialPrompt"],[1,"ai-executive-summary"],[1,"tabs-bar__nav"],["content","Create dashboard"],["content","Refresh dashboard"],[1,"home-actions"],["content","Executive Summary"],["placement","bottom-end",1,"home-download",3,"open"],["type","button","aria-label","Scroll tabs left",1,"tabs-scroll-btn","tabs-scroll-btn--left",3,"click","disabled"],["name","ng-chevron-left","method","stroke","size","16"],[1,"tabs-scroller",3,"scroll"],["variant","filled",1,"dashboard-tab-group"],["slot","nav","panel","__sentinel__",1,"tab-sentinel"],["slot","nav"],["type","button","aria-label","Scroll tabs right",1,"tabs-scroll-btn","tabs-scroll-btn--right",3,"click","disabled"],["name","ng-chevron-right","method","stroke","size","16"],["hoist","","placement","bottom-end",1,"home-category-filter",3,"nile-hide","open"],["slot","trigger","content","Filter by category"],["type","button","aria-label","Filter by category",1,"home-action-btn",3,"click"],["name","ng-filter-lines","method","stroke","size","18"],["aria-hidden","true",1,"home-category-filter__dot"],["variant","menu",1,"home-category-filter__panel",3,"mousedown","selectionChange","selected"],["slot","nav",3,"click"],["name","ng-stars-02","method","stroke","size","14","color","#7a5af8","aria-label","Auto-generated dashboard",1,"tab-auto-badge"],[1,"tab-rename"],[1,"tab-rename",3,"click"],["type","text",1,"tab-rename-input",3,"input","keydown","click","value","disabled"],["type","button","aria-label","Save dashboard name",1,"tab-rename-save",3,"click","disabled"],["name","ng-check","method","stroke","size","14","color","var(--ng-colors-border-brand)"],[1,"tab-label"],["type","button","aria-label","Rename dashboard",1,"tab-edit-btn"],["type","button","aria-label","Rename dashboard",1,"tab-edit-btn",3,"click"],["name","ng-edit-02","method","stroke","size","12"],["type","button","aria-label","Create dashboard",1,"home-action-btn",3,"click","disabled"],["name","ng-plus","method","stroke","size","18"],["type","button","aria-label","Refresh dashboard",1,"home-action-btn",3,"click","disabled"],["name","ng-refresh-ccw","method","stroke","size","18",1,"home-refresh-glyph"],["type","button","aria-label","Executive Summary",1,"home-action-btn",3,"click","disabled"],["name","ng-file-02","method","stroke","size","18"],["placement","bottom-end",1,"home-download",3,"nile-hide","open"],["slot","trigger","content","Download"],["type","button","aria-label","Download",1,"home-action-btn",3,"click"],["name","ng-download-01","method","stroke","size","18"],[3,"click"],["slot","prefix","name","ng-file-06","method","stroke","size","14"],["slot","prefix","name","ng-image-03","method","stroke","size","14"],["active","",1,"viewer-scroll-container"],["aria-hidden","true",1,"home-skeleton"],[3,"config"],[1,"home-empty-state__title"],[1,"home-empty-state__desc"],["variant","secondary",1,"home-empty-state__cta",3,"click"],[1,"home-empty-state__graphic"],["viewBox","0 0 380 140","aria-hidden","true","preserveAspectRatio","xMidYMid meet"],["x","40","y","20","width","300","height","100","rx","8","fill","#fff","stroke","#80AED3","stroke-width","1.5","stroke-dasharray","4 4"],["x","56","y","36","width","84","height","68","rx","6","fill","#F7FAFC","stroke","#E6E9EB"],["x","64","y","44","width","40","height","3","rx","1.5","fill","#80AED3"],["x","64","y","80","width","6","height","20","rx","1","fill","#005EA6","opacity","0.7"],["attributeName","height","values","20;14;20","dur","2s","repeatCount","indefinite"],["attributeName","y","values","80;86;80","dur","2s","repeatCount","indefinite"],["x","76","y","74","width","6","height","26","rx","1","fill","#005EA6"],["attributeName","height","values","26;18;26","dur","2s","begin","0.2s","repeatCount","indefinite"],["attributeName","y","values","74;82;74","dur","2s","begin","0.2s","repeatCount","indefinite"],["x","88","y","68","width","6","height","32","rx","1","fill","#005EA6","opacity","0.85"],["attributeName","height","values","32;24;32","dur","2s","begin","0.4s","repeatCount","indefinite"],["attributeName","y","values","68;76;68","dur","2s","begin","0.4s","repeatCount","indefinite"],["x","100","y","78","width","6","height","22","rx","1","fill","#005EA6","opacity","0.6"],["attributeName","height","values","22;16;22","dur","2s","begin","0.6s","repeatCount","indefinite"],["attributeName","y","values","78;84;78","dur","2s","begin","0.6s","repeatCount","indefinite"],["x","112","y","66","width","6","height","34","rx","1","fill","#005EA6","opacity","0.85"],["attributeName","height","values","34;26;34","dur","2s","begin","0.8s","repeatCount","indefinite"],["attributeName","y","values","66;74;66","dur","2s","begin","0.8s","repeatCount","indefinite"],["x","148","y","36","width","84","height","68","rx","6","fill","#F7FAFC","stroke","#E6E9EB"],["x","156","y","44","width","40","height","3","rx","1.5","fill","#80AED3"],["cx","190","cy","78","r","14","fill","none","stroke","#E6EFF6","stroke-width","5"],["cx","190","cy","78","r","14","fill","none","stroke","#005EA6","stroke-width","5","stroke-linecap","round","stroke-dasharray","88","stroke-dashoffset","88","transform","rotate(-90 190 78)"],["attributeName","stroke-dashoffset","values","88;22;22;88","keyTimes","0;0.5;0.85;1","dur","2.6s","repeatCount","indefinite"],["x","240","y","36","width","84","height","68","rx","6","fill","#F7FAFC","stroke","#E6E9EB"],["x","248","y","44","width","40","height","3","rx","1.5","fill","#80AED3"],["d","M 250 92 L 264 80 L 278 86 L 292 72 L 306 78 L 320 64","fill","none","stroke","#005EA6","stroke-width","1.5","stroke-linecap","round","stroke-linejoin","round","stroke-dasharray","200","stroke-dashoffset","200"],["attributeName","stroke-dashoffset","values","200;0;0;200","keyTimes","0;0.5;0.85;1","dur","2.6s","repeatCount","indefinite"],["cx","320","cy","64","r","2.5","fill","#005EA6"],["attributeName","opacity","values","0;0;1;1;0","keyTimes","0;0.45;0.55;0.85;1","dur","2.6s","repeatCount","indefinite"],["variant","primary","aria-label","Create dashboard",1,"home-empty-state__cta"],["variant","primary","aria-label","Create dashboard",1,"home-empty-state__cta",3,"click"],["slot","prefix","name","ng-plus","size","16"],[3,"closePanel","dashboardId","dashboardName","dashboardConfig","chatOnly","initialPrompt"],[1,"home-nav__title-block"],[1,"home-nav__title"],[1,"home-nav__sub"],[1,"home-skeleton__panel"],[1,"home-skeleton__kpis"],[1,"home-skeleton__kpi"],[1,"home-skeleton__widgets"],[1,"home-skeleton__widget"],[1,"home-skeleton__kpi-head"],["variant","text","width","56%","height","14"],["variant","rounded","width","32","height","32","border-radius","8px"],["variant","text","width","48%","height","30"],[1,"home-skeleton__kpi-row"],["variant","rounded","width","72","height","20","border-radius","999px"],["variant","text","width","38%","height","11"],["variant","rounded","width","100%","height","44","border-radius","8px",1,"home-skeleton__kpi-spark"],[1,"home-skeleton__widget-head"],[1,"home-skeleton__widget-titles"],["variant","text","width","42%","height","16"],["variant","text","width","64%","height","11"],["variant","circular","width","20","height","20"],["variant","rounded","width","100%","height","100%","border-radius","10px",1,"home-skeleton__widget-chart"]],template:function(e,n){e&1&&(s(0,"div",5),f(1,ni,5,3,"div",6),f(2,ai,6,3,"div",7),f(3,Ti,10,6,"div",7),l(),W(4,Oi,5,1,"ng-template",null,0,ye)(6,Ai,7,0,"ng-template",null,1,ye)),e&2&&(c(),y(n.isLoading()?1:-1),c(),y(!n.isLoading()&&n.isGenerating()?2:-1),c(),y(!n.isLoading()&&!n.isGenerating()?3:-1))},dependencies:[ke,ve,Ve,We,en],styles:['@charset "UTF-8";[_nghost-%COMP%]{display:block;height:100%;min-height:0}.home-page[_ngcontent-%COMP%]{height:100%;min-height:0;display:flex;flex-direction:column;background:var(--ng-colors-bg-active);overflow:visible;position:relative}.auto-height[_nghost-%COMP%]{height:auto}.auto-height[_nghost-%COMP%] .home-page[_ngcontent-%COMP%]{height:auto}.auto-height[_nghost-%COMP%] .tabs-wrapper[_ngcontent-%COMP%], .auto-height[_nghost-%COMP%] .tabs-bar[_ngcontent-%COMP%]{flex:0 0 auto}.loading-state[_ngcontent-%COMP%], .empty-state[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;height:200px;color:var(--ng-colors-text-tertiary-600)}.home-empty-state[_ngcontent-%COMP%]{margin:24px;padding:56px 32px;display:flex;flex-direction:column;align-items:center;text-align:center;background:var(--ng-colors-bg-primary);border:1px solid var(--ng-colors-border-secondary);border-radius:12px}.home-empty-state__graphic[_ngcontent-%COMP%]{width:380px;max-width:100%;height:140px;margin-bottom:24px;display:block}.home-empty-state__graphic[_ngcontent-%COMP%] svg[_ngcontent-%COMP%]{display:block;width:100%;height:100%}.home-empty-state__title[_ngcontent-%COMP%]{margin:0 0 8px;font-size:16px;font-weight:600;color:var(--ng-colors-text-primary-900);letter-spacing:-.01em}.home-empty-state__desc[_ngcontent-%COMP%]{margin:0;max-width:480px;font-size:14px;line-height:1.5;color:var(--ng-colors-text-tertiary-600)}.home-empty-state__cta[_ngcontent-%COMP%]{margin-top:24px}.toolbar[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:flex-end;height:64px;padding:0 38px;background:var(--ng-colors-bg-primary);border-bottom:1px solid var(--ng-componentcolors-alpha-black-10);position:fixed;top:var(--nav-height, 56px);left:0;right:0;z-index:var(--z-header)}.toolbar__right[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--ng-spacing-3, 12px)}.tabs-wrapper[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;min-height:0}.tabs-bar[_ngcontent-%COMP%]{position:relative;flex:1 1 auto;min-height:0;display:flex;flex-direction:column}.tabs-bar[_ngcontent-%COMP%] .home-nav[_ngcontent-%COMP%]{position:relative;top:auto;z-index:var(--z-sticky-row);display:flex;align-items:center;justify-content:space-between;gap:16px;height:76px;margin:0;padding:0 22px;background:var(--ng-colors-bg-primary);border-bottom:1px solid var(--ng-colors-border-secondary);flex-shrink:0}.tabs-bar[_ngcontent-%COMP%] .home-nav__title-block[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2px;min-width:0}.tabs-bar[_ngcontent-%COMP%] .home-nav__title[_ngcontent-%COMP%]{margin:0;font-size:16px;font-weight:600;color:var(--ng-colors-text-primary-900);line-height:1.2;letter-spacing:-.01em}.tabs-bar[_ngcontent-%COMP%] .home-nav__sub[_ngcontent-%COMP%]{margin:0;font-size:13px;font-weight:400;color:var(--ng-colors-text-tertiary-600);line-height:1.3}.tabs-bar[_ngcontent-%COMP%] .tabs-bar__nav[_ngcontent-%COMP%]{position:relative;top:auto;min-height:56px;display:flex;align-items:center;justify-content:flex-end;gap:4px;z-index:var(--z-sticky-row);min-width:0;margin:0;background:var(--ng-colors-bg-primary);border-bottom:1px solid var(--ng-colors-border-secondary)}.tabs-bar[_ngcontent-%COMP%] .tabs-bar__nav.tabs-bar__nav--minimal[_ngcontent-%COMP%]{background:transparent;border-bottom:none}.tabs-bar[_ngcontent-%COMP%] .home-menu-divider[_ngcontent-%COMP%]{width:1px;height:20px;background:var(--ng-colors-border-secondary);margin:0 6px 0 8px;flex-shrink:0}.tabs-bar[_ngcontent-%COMP%] .tabs-scroller[_ngcontent-%COMP%]{flex:1;min-width:0;overflow-x:auto;overflow-y:hidden;position:relative;scrollbar-width:none}.tabs-bar[_ngcontent-%COMP%] .tabs-scroller[_ngcontent-%COMP%]::-webkit-scrollbar{display:none}.tabs-bar[_ngcontent-%COMP%] .dashboard-tab-group[_ngcontent-%COMP%]{display:block;width:max-content;min-width:100%}.tabs-bar[_ngcontent-%COMP%] .tab-sentinel[_ngcontent-%COMP%]{display:none!important}.tabs-bar[_ngcontent-%COMP%] .tab-auto-badge[_ngcontent-%COMP%]{display:inline-flex;vertical-align:text-bottom;margin-right:4px;flex:0 0 auto}.tabs-bar[_ngcontent-%COMP%] .tab-label[_ngcontent-%COMP%]{white-space:nowrap}.tabs-bar[_ngcontent-%COMP%] .tab-edit-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;margin-left:4px;padding:0;border:0;background:transparent;border-radius:4px;color:var(--ng-colors-text-tertiary-600);cursor:pointer;opacity:0;pointer-events:none;flex:0 0 auto;transition:background .15s,opacity .15s,color .15s}.tabs-bar[_ngcontent-%COMP%] .tab-edit-btn[_ngcontent-%COMP%]:hover, .tabs-bar[_ngcontent-%COMP%] .tab-edit-btn[_ngcontent-%COMP%]:focus-visible{background:var(--ng-colors-bg-active);color:var(--ng-colors-text-primary-900)}.tabs-bar[_ngcontent-%COMP%] nile-nav-tab[_ngcontent-%COMP%]:hover .tab-edit-btn[_ngcontent-%COMP%], .tabs-bar[_ngcontent-%COMP%] .tab-edit-btn[_ngcontent-%COMP%]:focus-visible{opacity:1;pointer-events:auto}.tabs-bar[_ngcontent-%COMP%] .tab-rename[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px}.tabs-bar[_ngcontent-%COMP%] .tab-rename-input[_ngcontent-%COMP%]{width:140px;height:24px;padding:0 6px;font-size:13px;font-weight:600;color:var(--ng-colors-text-primary-900);background:var(--ng-colors-bg-primary);border:1px solid var(--ng-colors-border-secondary);border-radius:6px;outline:none}.tabs-bar[_ngcontent-%COMP%] .tab-rename-input[_ngcontent-%COMP%]:focus{border-color:var(--ng-colors-border-brand);box-shadow:0 0 0 3px #2970ff29}.tabs-bar[_ngcontent-%COMP%] .tab-rename-save[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;padding:0;border:0;background:transparent;border-radius:4px;cursor:pointer;flex:0 0 auto}.tabs-bar[_ngcontent-%COMP%] .tab-rename-save[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--ng-colors-bg-quaternary)}.tabs-bar[_ngcontent-%COMP%] .tab-rename-save[_ngcontent-%COMP%]:disabled{cursor:default;opacity:.5}.tabs-bar[_ngcontent-%COMP%] .tabs-scroll-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:0;outline:0;background:transparent;color:var(--ng-colors-text-tertiary-600);cursor:pointer;border-radius:6px;flex-shrink:0;opacity:0;pointer-events:none;transition:opacity .15s,background .15s,color .15s}.tabs-bar[_ngcontent-%COMP%] .tabs-scroll-btn[_ngcontent-%COMP%]:hover, .tabs-bar[_ngcontent-%COMP%] .tabs-scroll-btn[_ngcontent-%COMP%]:focus, .tabs-bar[_ngcontent-%COMP%] .tabs-scroll-btn[_ngcontent-%COMP%]:focus-visible{outline:0;background:var(--ng-colors-bg-active);color:var(--ng-colors-text-primary-900)}.tabs-bar[_ngcontent-%COMP%] .tabs-scroll-btn[disabled][_ngcontent-%COMP%]{cursor:default;color:var(--ng-colors-text-disabled);background:transparent}.tabs-bar[_ngcontent-%COMP%] .tabs-bar__nav.is-scrollable[_ngcontent-%COMP%]:hover .tabs-scroll-btn[_ngcontent-%COMP%], .tabs-bar[_ngcontent-%COMP%] .tabs-bar__nav.is-scrollable[_ngcontent-%COMP%]:focus-within .tabs-scroll-btn[_ngcontent-%COMP%]{opacity:1;pointer-events:auto}.more-menu[_ngcontent-%COMP%]{width:260px;max-height:320px;overflow-y:auto;padding:var(--ng-spacing-xs) 0}.more-menu-item[_ngcontent-%COMP%]{padding:var(--ng-spacing-xs) var(--ng-spacing-md);display:flex;align-items:center;cursor:pointer}.more-menu-item[_ngcontent-%COMP%]:hover{background:var(--ng-colors-bg-secondary)}.more-menu-item[_ngcontent-%COMP%] nile-checkbox[_ngcontent-%COMP%]{width:100%}nile-tab-panel[_ngcontent-%COMP%], nile-nav-tab-panel[_ngcontent-%COMP%]{display:block;height:100%}.panel-loading[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;height:200px}.home-skeleton__tabs-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px}.home-skeleton__tab-pills[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;flex-shrink:0}.home-skeleton__tab[_ngcontent-%COMP%]{flex:0 0 auto}.home-skeleton__panel[_ngcontent-%COMP%]{flex:1;min-height:0;padding:18px 24px 32px;display:flex;flex-direction:column;gap:16px;overflow:auto}.home-skeleton__kpis[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}@media(max-width:1100px){.home-skeleton__kpis[_ngcontent-%COMP%]{grid-template-columns:repeat(2,1fr)}}.home-skeleton__kpi[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px;padding:18px 20px;border:1px solid var(--ng-colors-border-secondary);border-radius:12px;background:var(--ng-colors-bg-primary)}.home-skeleton__kpi-head[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:12px}.home-skeleton__kpi-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;margin-top:4px}.home-skeleton__kpi-spark[_ngcontent-%COMP%]{margin-top:6px}.home-skeleton__widgets[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}@media(max-width:900px){.home-skeleton__widgets[_ngcontent-%COMP%]{grid-template-columns:1fr}}.home-skeleton__widget[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:18px;padding:20px 22px;border:1px solid var(--ng-colors-border-secondary);border-radius:12px;background:var(--ng-colors-bg-primary);min-height:320px}.home-skeleton__widget-head[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.home-skeleton__widget-titles[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:6px;flex:1;min-width:0}.home-skeleton__widget-chart[_ngcontent-%COMP%]{display:block;flex:1;min-height:0}.viewer-scroll-container[_ngcontent-%COMP%]{display:block;flex:1;min-height:0;overflow:auto}.viewer-scroll-container[_ngcontent-%COMP%]::part(base){padding:unset;height:100%;min-height:100%}.auto-height[_nghost-%COMP%] .viewer-scroll-container[_ngcontent-%COMP%]{flex:0 0 auto;overflow:visible;height:auto}.auto-height[_nghost-%COMP%] .viewer-scroll-container[_ngcontent-%COMP%]::part(base){height:auto;min-height:0}[_nghost-%COMP%] .viewer-scroll-container:has(.aq-detail-overlay){overflow:hidden}app-dashboard-viewer[_ngcontent-%COMP%], nile-dashboard-viewer[_ngcontent-%COMP%]{display:block;width:100%;height:100%}.export-menu[_ngcontent-%COMP%] nile-menu-item[_ngcontent-%COMP%]{font-size:var(--ng-font-size-text-sm, 14px);font-weight:var(--ng-font-weight-medium, 500)}.home-actions[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:2px;flex-shrink:0}.home-action-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:0;outline:0;background:transparent;color:var(--ng-colors-text-tertiary-600);cursor:pointer;border-radius:6px;flex-shrink:0}.home-action-btn[_ngcontent-%COMP%]:hover, .home-action-btn[_ngcontent-%COMP%]:focus, .home-action-btn[_ngcontent-%COMP%]:focus-visible{outline:0;background:var(--ng-colors-bg-active);color:var(--ng-colors-text-primary-900)}.home-category-filter[_ngcontent-%COMP%] .home-action-btn[_ngcontent-%COMP%]{position:relative}.home-category-filter__dot[_ngcontent-%COMP%]{position:absolute;top:3px;right:3px;width:6px;height:6px;border-radius:50%;background:var(--ng-colors-fg-brand-primary-600)}.home-category-filter[_ngcontent-%COMP%]::part(panel){background:transparent;box-shadow:none;border-radius:0}.home-category-filter__panel[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1px;min-width:200px;max-height:320px;overflow-y:auto}.home-refresh-glyph[_ngcontent-%COMP%]{display:inline-flex;transform-origin:50% 50%}.home-refresh-glyph--spinning[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_home-refresh-spin .9s linear infinite}@keyframes _ngcontent-%COMP%_home-refresh-spin{to{transform:rotate(360deg)}}.home-ai-drawer[_ngcontent-%COMP%]::part(base){z-index:var(--z-drawer, 900)}.home-ai-drawer[_ngcontent-%COMP%]::part(panel){width:100%;max-width:100%}.home-ai-drawer[_ngcontent-%COMP%]::part(body){padding:0;overflow:hidden}.home-ai-drawer[_ngcontent-%COMP%] db-ai-prompt-panel[_ngcontent-%COMP%]{display:block;height:100%;min-height:0}.home-category-filter__heading[_ngcontent-%COMP%]{display:block;padding:6px 10px 4px;font-size:10.5px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--ng-colors-text-tertiary-600)}.home-category-filter__item[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;padding:7px 10px;border:0;border-radius:7px;background:transparent;font:inherit;font-size:13px;color:var(--ng-colors-text-secondary-700);text-align:left;white-space:nowrap;cursor:pointer}.home-category-filter__item[_ngcontent-%COMP%]:hover{background:var(--ng-colors-bg-secondary)}.home-category-filter__item.is-active[_ngcontent-%COMP%]{color:var(--ng-colors-fg-brand-primary-600);font-weight:600;background:var(--ng-colors-bg-secondary)}.home-category-filter__label[_ngcontent-%COMP%]{min-width:0;overflow:hidden;text-overflow:ellipsis}.ai-executive-summary[_ngcontent-%COMP%]::part(trigger){display:none}.ai-executive-summary[_ngcontent-%COMP%]::part(header){height:56px;padding:0 20px;box-sizing:border-box;flex-direction:row-reverse;justify-content:flex-end;gap:8px}.ai-executive-summary[_ngcontent-%COMP%]::part(title){font-size:14px;font-weight:600}.ai-executive-summary[_ngcontent-%COMP%]::part(close){position:relative;color:transparent;margin-left:0;margin-right:4px}.ai-executive-summary[_ngcontent-%COMP%]::part(close):before{content:"\\2190";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--ng-colors-text-tertiary-600);font-size:22px;line-height:1;font-weight:400}.ai-executive-summary[_ngcontent-%COMP%]::part(close):hover:before{color:var(--ng-colors-text-primary-900)}']})};var qe=class o{environment=u(F);http=u(G);tokenStore=u(ie);get customerId(){return this.tokenStore.tenantId()??""}widgetsUrl(t){return`${this.environment.baseUrl}/api/customers/${this.customerId}/products/${this.environment.getProductId()}/workforce/dashboards/${t}/global-widgets`}async getAll(t,e="",n=""){let i=new URLSearchParams;e&&i.set("widgetType",e),n&&i.set("tag",n);let r=i.toString(),a=`${this.widgetsUrl(t)}${r?"?"+r:""}`,g=await k(this.http.get(a)),h=g?.data??g??[];return await Promise.all(h.map(w=>oe(w.config))),h}async getById(t,e){let n=await k(this.http.get(`${this.widgetsUrl(t)}/${e}`)),i=n?.data??n;return await oe(i?.config),i}async add(t,e){let n={title:e.title,summary:e.summary,widgetType:e.widgetType,componentName:e.componentName,layout:e.layout,config:je(e.config)},i=await k(this.http.post(this.widgetsUrl(t),n));return i?.data??i}async update(t,e,n){let i={};n.title&&(i.title=n.title),n.summary&&(i.summary=n.summary),n.widgetType&&(i.widgetType=n.widgetType),n.componentName&&(i.componentName=n.componentName),n.layout&&(i.layout=n.layout),n.config&&(i.config=je(n.config));let r=await k(this.http.put(`${this.widgetsUrl(t)}/${e}`,i));return r?.data??r}async remove(t,e){await k(this.http.delete(`${this.widgetsUrl(t)}/${e}`))}static \u0275fac=function(e){return new(e||o)};static \u0275prov=z({token:o,factory:o.\u0275fac})};function ln(o){return[{provide:V,useValue:o},F,{provide:At,useFactory:()=>o().baseUrl},B,re,be,j,qe,Se,Rt(j),Nt(O),Vt(O),Oe(O),Ee(O),Fe(O),Ae(O),qt(O)]}function zi(o,t){o&1&&N(0)}function Ni(o,t){if(o&1&&W(0,zi,1,0,"ng-container",0),o&2){let e=d();x("ngComponentOutlet",e.page)("ngComponentOutletInjector",e.elementInjector)("ngComponentOutletEnvironmentInjector",e.elementInjector)}}var Le=class o{config=Y(void 0);theme=Y(void 0);ready=le({alias:"dvz-ready"});error=le({alias:"dvz-error"});unauthorized=le({alias:"dvz-unauthorized"});navigate=le({alias:"dvz-navigate"});host=u(de);destroyRef=u(rt);instance=on();elementInjector=dt(ln(this.instance.config),u(nt),"dvz-dashboards");page=He;navigator=this.elementInjector.get(B);stopAdopting=null;stopTokenRefresh=null;stopUi=null;themeChanged=le({alias:"dvz-theme-changed"});timeRangeChanged=le({alias:"dvz-time-range-changed"});themeStore=this.elementInjector.get(Se);syncThemeInput=Z(()=>{let t=this.theme();t&&this.themeStore.set(t)});lastAnnouncedTheme=null;announceTheme=Z(()=>{let t=this.themeStore.resolved();if(t===this.lastAnnouncedTheme)return;let e=this.lastAnnouncedTheme===null;this.lastAnnouncedTheme=t,e||this.themeChanged.emit({theme:t,choice:this.themeStore.choice()})});configured=!1;constructor(){Z(()=>{let t=this.config();t&&this.apply(t)}),this.navigator.requests.pipe(Ue(this.destroyRef)).subscribe(t=>this.navigate.emit(t)),this.navigator.timeRangeChanges.pipe(Ue(this.destroyRef)).subscribe(t=>this.timeRangeChanged.emit(t)),queueMicrotask(()=>{let t=this.host.nativeElement.shadowRoot;t&&(this.stopAdopting=Je(t))})}async apply(t){let e=t.auth;Tt(t.api.baseUrl),Mt(t.api,e);let n=this.instance.set(rn({baseUrl:t.api.baseUrl,mcpUrl:t.api.mcpUrl,tokenizedOrigins:t.api.tokenizedOrigins,headers:t.api.headers,customerId:t.tenant.customerId??null,productId:t.tenant.productId,productName:t.tenant.productName??null,authMode:e.mode,authToken:e.mode==="token"?e.token:null,getToken:e.mode==="callback"?e.getToken:null,onUnauthorized:()=>this.unauthorized.emit(),features:t.features,ui:t.ui,copy:t.copy,hrefs:t.hrefs,initialDashboard:t.initial?.dashboard??null,initialWidgets:t.initial?.widgets??[],timeRange:t.timeRange??null}));this.stopUi?.(),this.stopUi=Xe(this.host.nativeElement,t.ui),this.themeStore.attach(this.host.nativeElement),this.theme()||this.themeStore.set(t.ui?.theme??"light"),Et({productId:t.tenant.productId,name:t.tenant.productName}),kt(()=>this.unauthorized.emit());let i=n;await Pt(i),this.stopTokenRefresh??=Dt(i),this.configured||(this.configured=!0,this.ready.emit({customerId:n.customerId??"",productId:n.productId??""}))}ngOnDestroy(){this.stopAdopting?.(),this.stopTokenRefresh?.(),this.stopUi?.(),this.elementInjector.destroy()}static \u0275fac=function(e){return new(e||o)};static \u0275cmp=q({type:o,selectors:[["dvz-dashboards-root"]],inputs:{config:[1,"config"],theme:[1,"theme"]},outputs:{ready:"dvz-ready",error:"dvz-error",unauthorized:"dvz-unauthorized",navigate:"dvz-navigate",themeChanged:"dvz-theme-changed",timeRangeChanged:"dvz-time-range-changed"},decls:1,vars:1,consts:[[4,"ngComponentOutlet","ngComponentOutletInjector","ngComponentOutletEnvironmentInjector"]],template:function(e,n){e&1&&f(0,Ni,1,3,"ng-container"),e&2&&y(n.config()?0:-1)},dependencies:[bt],styles:[`:host{display:block;height:100%;min-height:0}
|
|
2
|
+
`],encapsulation:3,changeDetection:0})};vt();var Vi="dvz-dashboards";function Wi(o={}){return Ct(Le,Vi,[at(),St(),_t(ft([Ft]))],o)}Wi();export{Vi as a,Wi as b};
|