@mxtommy/kip 4.8.4 → 4.8.5
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/CHANGELOG.md +5 -0
- package/package.json +1 -1
- package/plugin/history-series.service.js +637 -0
- package/plugin/index.js +1322 -0
- package/plugin/kip-series-contract.js +31 -0
- package/plugin/openApi.json +855 -0
- package/plugin/sqlite-history-storage.service.js +1124 -0
- package/public/assets/help-docs/ais-radar.md +261 -0
- package/public/assets/help-docs/dashboards.md +1 -1
- package/public/assets/help-docs/menu.json +17 -2
- package/public/{chunk-Co2wVrD6.js → chunk-0ijGpqkR.js} +1 -1
- package/public/{chunk-JhFkJS7i.js → chunk-6MiGh2Ts.js} +1 -1
- package/public/{chunk-DIl1k00y.js → chunk-7QXXQf2h.js} +1 -1
- package/public/{chunk-CYYBxjrc.js → chunk-B4Wxwb2y.js} +1 -1
- package/public/{chunk-q9NoPvcx.js → chunk-BAVmyVwG.js} +1 -1
- package/public/{chunk-BfiyH3nV.js → chunk-BOlUTHo6.js} +1 -1
- package/public/{chunk-x7L6DXVK.js → chunk-BTv5PhTr.js} +1 -1
- package/public/{chunk-BeM64etA.js → chunk-BZG04c3j.js} +1 -1
- package/public/{chunk-0z3nIRXw.js → chunk-BaGEtCmz.js} +1 -1
- package/public/{chunk-otzyItXL.js → chunk-Bbyk4dOu.js} +1 -1
- package/public/{chunk-CCfhzpE8.js → chunk-Be5KcT7R.js} +1 -1
- package/public/{chunk-BFpzxIIT.js → chunk-Bp1YVCJL.js} +1 -1
- package/public/{chunk-CLs_NL1y.js → chunk-BwYOFdBA.js} +1 -1
- package/public/{chunk-D-_-GUVr.js → chunk-Bx77STup.js} +1 -1
- package/public/{chunk-COI6IBXH.js → chunk-ByC_hFSP.js} +1 -1
- package/public/{chunk-CIGP2YJm.js → chunk-ByFzHU1s.js} +1 -1
- package/public/{chunk-CXvWM_vF.js → chunk-BzH86te1.js} +1 -1
- package/public/{chunk-CxPx4NZv.js → chunk-C7ax8Sqz.js} +1 -1
- package/public/{chunk-CoCQ3DW2.js → chunk-C89yhdsn.js} +1 -1
- package/public/{chunk-BTOTKeBo.js → chunk-CJhkckXA.js} +1 -1
- package/public/{chunk-BUguZ7cK.js → chunk-CLIWxVhS.js} +1 -1
- package/public/{chunk-eQ1pa34Q.js → chunk-CQtqkz1Y.js} +1 -1
- package/public/{chunk-BIb-xYiS.js → chunk-CRy9Da7a.js} +1 -1
- package/public/{chunk-Do8wqING.js → chunk-CcaPRVAZ.js} +1 -1
- package/public/{chunk-BjINKQ03.js → chunk-CdNfAZ0G.js} +1 -1
- package/public/{chunk-CLTHuhlN.js → chunk-Cj0AJQ8U.js} +1 -1
- package/public/{chunk-B9nVBlGj.js → chunk-CkFpNfxN.js} +1 -1
- package/public/{chunk-B09jfNia.js → chunk-Cn9j0-tJ.js} +1 -1
- package/public/{chunk-_zRMMvCu.js → chunk-Co8V0LUu.js} +1 -1
- package/public/{chunk-ibauGmSP.js → chunk-CteyWXZ_.js} +1 -1
- package/public/{chunk-C6b8CVno.js → chunk-CuPmfpgh.js} +1 -1
- package/public/{chunk-DmkAKXR1.js → chunk-CwGTKplC.js} +1 -1
- package/public/{chunk-DPnbM-aB.js → chunk-CzEDfe2A.js} +1 -1
- package/public/{chunk-DUEKoZhd.js → chunk-D1Yncgg5.js} +1 -1
- package/public/{chunk-DTN-sa1K.js → chunk-D63LEt5t.js} +1 -1
- package/public/{chunk-BpcNrtxJ.js → chunk-DN39qO63.js} +1 -1
- package/public/{chunk-szQs8fiq.js → chunk-DNbLx4NZ.js} +1 -1
- package/public/{chunk-D1HYfaL_.js → chunk-DRPjASjZ.js} +1 -1
- package/public/{chunk-CyVRpGoJ.js → chunk-Dddd8rAh.js} +1 -1
- package/public/{chunk-C_OZJltF.js → chunk-DiDkZnhZ.js} +1 -1
- package/public/{chunk-CHAFm_nM.js → chunk-DonRL_4T.js} +1 -1
- package/public/{chunk-BJ-wyixK.js → chunk-DufX2AHa.js} +1 -1
- package/public/{chunk-07zHjmg-.js → chunk-DxS7HN4G.js} +1 -1
- package/public/{chunk-BLEZOsfR.js → chunk-Fy40z1B2.js} +1 -1
- package/public/{chunk-OeQDZKFO.js → chunk-MO2v041V.js} +1 -1
- package/public/{chunk-BuvyF0y5.js → chunk-MakCt36b.js} +1 -1
- package/public/{chunk-BZx964-p.js → chunk-TdI_E-cf.js} +1 -1
- package/public/{chunk-B0D54iJs.js → chunk-TneLdWrI.js} +1 -1
- package/public/{chunk-BN7A4g6c.js → chunk-YZWhRxa9.js} +1 -1
- package/public/{chunk-CQMVIDcp.js → chunk-_toW-rHA.js} +1 -1
- package/public/{chunk-B0eE4udE.js → chunk-tbyiK3Ur.js} +1 -1
- package/public/{chunk-D2953Rfp.js → chunk-urAQA4U_.js} +1 -1
- package/public/index.html +1 -1
- package/public/{main-YKDNK5VZ.js → main-F7NMHHV4.js} +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
import {w as w$1,dl as E,dm as G,N,aY as xe,bu as ut,dd as $e,$ as $j,W as Wp,v as vt,bG as Bj,D as Dt,F as Fa,dn as ge,a$ as Zr,dp as n,cw as z,cv as G$1,b0 as Wl,J as JD,dq as Ht,di as jt,de as Nt,df as Vt,dr as Ot,ds as bt,dt as nt,O as Op,o as eu,y as yt,b as wt,b2 as Ln,b5 as Pn,b9 as rn,P as Pi,T as TT,u as ul,bi as Eg,k as Qh,bk as cD,_ as _w,e as EE,aA as gg,B as Bh,bm as Ig,bo as lD,M as Mw,f as eg,K as Kw,g as qw,bp as gl,c as $h,bj as ST}from'./main-YKDNK5VZ.js';import'./chunk-BTOTKeBo.js';var y={"widget-bms":{expansionMode:"bms-battery-tree",metricOrder:["soc","current"],metrics:{soc:{metric:"soc",axisId:"ySoc",pathSuffixes:[".capacity.stateOfCharge",".stateOfCharge"],transform:a=>a*100},current:{metric:"current",axisId:"yCurrent",pathSuffixes:[".current"],transform:a=>a}},axes:{ySoc:{axisId:"ySoc",position:"left",title:"SoC (%)",tickSuffix:"%",min:0,max:100},yCurrent:{axisId:"yCurrent",position:"right",title:"Current (A)",tickSuffix:"A",drawOnChartArea:false}},pathRules:[{metric:"soc",axisId:"ySoc",regex:/^electrical\.batteries\.([^.]+)\.(?:capacity\.)?stateOfCharge$/i},{metric:"current",axisId:"yCurrent",regex:/^electrical\.batteries\.([^.]+)\.current$/i}]},"widget-solar-charger":{expansionMode:"solar-tree",metricOrder:["panelPower","current"],metrics:{panelPower:{metric:"panelPower",axisId:"yPower",pathSuffixes:[".panelPower"],transform:a=>a/1e3},current:{metric:"current",axisId:"yCurrent",pathSuffixes:[".current"],transform:a=>a}},axes:{yPower:{axisId:"yPower",position:"left",title:"Power (kW)",tickSuffix:"kW"},yCurrent:{axisId:"yCurrent",position:"right",title:"Current (A)",tickSuffix:"A",drawOnChartArea:false}},pathRules:[{metric:"current",axisId:"yCurrent",regex:/^electrical\.solar\.([^.]+)\.current$/i},{metric:"panelPower",axisId:"yPower",regex:/^electrical\.solar\.([^.]+)\.panelPower$/i}]},"widget-charger":{expansionMode:"charger-tree",metricOrder:["voltage","current"],metrics:{voltage:{metric:"voltage",axisId:"yVoltage",pathSuffixes:[".voltage"],transform:a=>a},current:{metric:"current",axisId:"yCurrent",pathSuffixes:[".current"],transform:a=>a}},axes:{yVoltage:{axisId:"yVoltage",position:"left",title:"Voltage (V)",tickSuffix:"V"},yCurrent:{axisId:"yCurrent",position:"right",title:"Current (A)",tickSuffix:"A",drawOnChartArea:false}},pathRules:[{metric:"voltage",axisId:"yVoltage",regex:/^electrical\.chargers\.([^.]+)\.voltage$/i},{metric:"current",axisId:"yCurrent",regex:/^electrical\.chargers\.([^.]+)\.current$/i}]},"widget-inverter":{expansionMode:"inverter-tree",metricOrder:["voltage","current"],metrics:{voltage:{metric:"voltage",axisId:"yVoltage",pathSuffixes:[".voltage"],transform:a=>a},current:{metric:"current",axisId:"yCurrent",pathSuffixes:[".current"],transform:a=>a}},axes:{yVoltage:{axisId:"yVoltage",position:"left",title:"Voltage (V)",tickSuffix:"V"},yCurrent:{axisId:"yCurrent",position:"right",title:"Current (A)",tickSuffix:"A",drawOnChartArea:false}},pathRules:[{metric:"voltage",axisId:"yVoltage",regex:/^electrical\.inverters\.([^.]+)\.voltage$/i},{metric:"current",axisId:"yCurrent",regex:/^electrical\.inverters\.([^.]+)\.current$/i}]},"widget-alternator":{expansionMode:"alternator-tree",metricOrder:["voltage","current"],metrics:{voltage:{metric:"voltage",axisId:"yVoltage",pathSuffixes:[".voltage"],transform:a=>a},current:{metric:"current",axisId:"yCurrent",pathSuffixes:[".current"],transform:a=>a}},axes:{yVoltage:{axisId:"yVoltage",position:"left",title:"Voltage (V)",tickSuffix:"V"},yCurrent:{axisId:"yCurrent",position:"right",title:"Current (A)",tickSuffix:"A",drawOnChartArea:false}},pathRules:[{metric:"voltage",axisId:"yVoltage",regex:/^electrical\.alternators\.([^.]+)\.voltage$/i},{metric:"current",axisId:"yCurrent",regex:/^electrical\.alternators\.([^.]+)\.current$/i}]},"widget-ac":{expansionMode:"ac-tree",metricOrder:["voltage","current","frequency"],metrics:{voltage:{metric:"voltage",axisId:"yVoltage",pathSuffixes:[".line1.voltage",".line2.voltage",".line3.voltage"],transform:a=>a},current:{metric:"current",axisId:"yCurrent",pathSuffixes:[".line1.current",".line2.current",".line3.current"],transform:a=>a},frequency:{metric:"frequency",axisId:"yFrequency",pathSuffixes:[".line1.frequency",".line2.frequency",".line3.frequency"],transform:a=>a}},axes:{yVoltage:{axisId:"yVoltage",position:"left",title:"Voltage (V)",tickSuffix:"V"},yCurrent:{axisId:"yCurrent",position:"right",title:"Current (A)",tickSuffix:"A",drawOnChartArea:false},yFrequency:{axisId:"yFrequency",position:"left",title:"Frequency (Hz)",tickSuffix:"Hz",drawOnChartArea:false}},pathRules:[{metric:"voltage",axisId:"yVoltage",regex:/^electrical\.ac\.([^.]+)\.line[123]\.voltage$/i},{metric:"current",axisId:"yCurrent",regex:/^electrical\.ac\.([^.]+)\.line[123]\.current$/i},{metric:"frequency",axisId:"yFrequency",regex:/^electrical\.ac\.([^.]+)\.line[123]\.frequency$/i}]}},Ie={"bms-battery-tree":"widget-bms","solar-tree":"widget-solar-charger","charger-tree":"widget-charger","inverter-tree":"widget-inverter","alternator-tree":"widget-alternator","ac-tree":"widget-ac"};function Me(a){return !!a&&a in y}function D(a){return y[a]}function w(a){let l=Ie[a],e=y[l],t=[];return e.metricOrder.forEach(r=>{let i=e.metrics[r];i&&i.pathSuffixes.forEach(n=>{t.includes(n)||t.push(n);});}),t}function ve(a,l){let e=y[a.widgetType].metrics[a.metric];return e?e.transform(l):l}function P(a){let l=y[a],e=[];return l.metricOrder.forEach(t=>{let r=l.metrics[t]?.axisId;!r||e.includes(r)||e.push(r);}),e.map(t=>l.axes[t]).filter(t=>!!t)}function De(a,l){if(!Me(a))return null;let e=P(a),t=new Set(e.map(i=>i.axisId));return t.size===0?null:l.some(i=>!!i&&t.has(i))?a:null}function Se(a){for(let[l,e]of Object.entries(y))for(let t of e.pathRules){let r=t.regex.exec(a);if(r)return {widgetType:l,entityId:r[1],metric:t.metric,axisId:t.axisId}}return null}var Ae=["historyCanvas"];function we(a,l){a&1&&(Pi(0,"p",12),TT(1,"Loading historical data\u2026"),ul());}function Pe(a,l){if(a&1&&(Pi(0,"p",13),TT(1),ul()),a&2){let e=qw();EE(),gl("503: ",e.error());}}function Te(a,l){a&1&&(Pi(0,"p",12),TT(1,"No historical data is available for this widget. If you are not using the built-in KIP History API provider, validate your plugin configuration supports the widget's path and try again."),ul());}function _e(a,l){a&1&&(Pi(0,"div",14),$h(1,"canvas",null,0),ul());}var rt=(()=>{class a{historyApiClient=w$1(E);historyMapper=w$1(G);app=w$1(N);destroyRef=w$1(xe);units=w$1(ut);data=w$1($e);chartCanvas=$j("historyCanvas");theme=Wp(this.app.cssThemeColorRoles$,{requireSync:true});loading=vt(true);error=vt(null);datasetCount=vt(0);selectedPeriod=Bj("PT1H");hasNoData=Dt(()=>!this.loading()&&!this.error()&&this.datasetCount()===0);chart=null;viewReady=false;pendingDatasets=[];dualAxisDescriptorCache=new Map;constructor(){Fa(()=>{let e=this.chartCanvas(),t=this.loading(),r=this.datasetCount();!e||t||r<=0||ge(()=>{this.tryRenderChart();});});}loadHistoryDatasets(){return Zr(this,null,function*(){this.loading.set(true),this.error.set(null),this.dualAxisDescriptorCache.clear();try{let e=yield this.resolveQueryableSeriesDefinitions(),t=yield Promise.all(e.map((r,i)=>this.buildDatasetForSeries(r,i)));this.pendingDatasets=t.filter(r=>!!r),this.datasetCount.set(this.pendingDatasets.length),this.tryRenderChart();}catch(e){console.error("[WidgetHistoryChartDialogComponent] Failed to load widget history datasets:",e),this.error.set("Unable to load historical data for this widget."),this.pendingDatasets=[],this.datasetCount.set(0);}finally{this.loading.set(false),queueMicrotask(()=>{this.tryRenderChart();});}})}ngOnInit(){this.loadHistoryDatasets(),this.destroyRef.onDestroy(()=>{this.chart?.destroy(),this.chart=null;});}ngAfterViewInit(){this.onCanvasReady();}ngOnDestroy(){this.chart?.destroy(),this.chart=null;}onCanvasReady(){this.viewReady=true,this.tryRenderChart();}buildDatasetForSeries(e,t){return Zr(this,null,function*(){let r=e.path;if(!r)return null;let i=this.resolveDuration(e),n=this.resolveResolutionSeconds(i),o=this.buildHistoryRequestCandidates(r,e.context),s=this.describeDualAxisSeries(r),u=[],x=this.normalizeHistoryPath(r),T=this.resolveConvertUnitTo(r);for(let I of o){let k=yield this.historyApiClient.getValues({paths:I.paths,context:I.context,duration:i,resolution:n});if(!k?.data?.length)continue;if(u=this.historyMapper.mapValuesToChartDatapoints(k,{unit:"number",domain:"scalar"}).map(O=>{let m=O.data.value;return typeof m=="number"&&Number.isFinite(m)&&(s?m=ve(s,m):T&&(m=this.units.convertToUnit(T,m)??m)),{x:O.timestamp,y:m}}),u.length){x=I.labelPath;break}}if(!u.length)return null;let _=this.resolveSeriesColor(t,s),be=e.source?` (${e.source})`:"";return {label:`${x}${be}`,data:u,borderColor:_,backgroundColor:_,pointRadius:0,borderWidth:2,tension:.25,yAxisID:s?.axisId??"y",borderDash:this.isDualAxisDashedSeries(s)?[6,4]:void 0,fill:false}})}describeDualAxisSeries(e){let t=this.normalizeHistoryPath(e??"");if(!t.length)return null;if(this.dualAxisDescriptorCache.has(t))return this.dualAxisDescriptorCache.get(t)??null;let r=Se(t);return this.dualAxisDescriptorCache.set(t,r),r}resolveSeriesColor(e,t){let r=this.getSeriesPalette();return t?this.getDualAxisMetricColor(t.widgetType,t.metric):r[e%r.length]}getSeriesPalette(){let e=this.data.widget?.config?.color||"blue",t=this.resolveThemeColor(e),r=[this.theme().green,this.theme().orange,this.theme().pink,this.theme().purple,this.theme().yellow,this.theme().grey,this.theme().blue,this.theme().contrast],i=r.findIndex(n=>n?.toLowerCase()===t.toLowerCase());return i!==-1?r=[r[i],...r.slice(0,i),...r.slice(i+1)]:r=[t,...r],r}resolveThemeColor(e){let t=this.theme()[e];return typeof t=="string"&&t.length>0?t:e}isDualAxisDashedSeries(e){return e?this.getDualAxisEntityOrderIndex(e.entityId,e.widgetType)%2===1:false}getDualAxisEntityOrderIndex(e,t){let r=[];this.data.seriesDefinitions.forEach(n=>{let o=this.describeDualAxisSeries(n.path);!o||o.widgetType!==t||r.includes(o.entityId)||r.push(o.entityId);});let i=r.indexOf(e);return i>=0?i:0}getDualAxisMetricColor(e,t){let r=this.getSeriesPalette(),n=D(e).metricOrder.indexOf(t),o=n>=0?n:0;return r[o%r.length]}buildHistoryRequestCandidates(e,t){let r=this.normalizeHistoryPath(e),i=this.resolveHistoryContext(e,t),n=[r].filter(s=>s.length>0),o=[];return n.forEach(s=>{o.push({paths:`${s}:avg`,context:i,labelPath:this.normalizeHistoryPath(s)});}),o}resolveQueryableSeriesDefinitions(){return Zr(this,null,function*(){let e=[];for(let t of this.data.seriesDefinitions){let r=yield this.expandTemplateSeries(t);e.push(...r);}return this.sortExpandedSeries(e)})}sortExpandedSeries(e){return e.some(r=>this.describeDualAxisSeries(r.path)!==null)?[...e].sort((r,i)=>{let n=this.describeDualAxisSeries(r.path),o=this.describeDualAxisSeries(i.path);if(!n&&!o)return 0;if(!n)return 1;if(!o)return -1;if(n.entityId!==o.entityId)return n.entityId.localeCompare(o.entityId);let s=D(n.widgetType).metricOrder.indexOf(n.metric),u=D(o.widgetType).metricOrder.indexOf(o.metric);return s-u}):e}expandTemplateSeries(e){return Zr(this,null,function*(){let t=this.normalizeHistoryPath(e.path??""),r=t.endsWith(".*");if(!n(e)&&!r)return [e];let i=t.replace(/\.\*$/,"");if(!i.length)return [e];let n$1=this.resolveDuration(e),o=yield this.historyApiClient.getPaths({duration:n$1});if(!o?.length)return [e];let s=this.findConcreteTemplatePaths(e,i,o);return s.length===0?[e]:s.map((u,x)=>z(G$1({},e),{seriesId:`${e.seriesId}:resolved:${x}`,datasetUuid:`${e.datasetUuid}:resolved:${x}`,path:u,expansionMode:null,familyKey:null,allowedIds:null,trackedDevices:void 0}))})}findConcreteTemplatePaths(e,t,r){let i=Array.from(new Set(r.map(o=>this.normalizeHistoryPath(o)).filter(o=>o.startsWith(`${t}.`))));return i.length===0?[]:n(e)?i.filter(o=>this.matchesTemplateMetric(o,t,e)).filter(o=>this.matchesTemplateAllowedIds(o,t,e)):i}matchesTemplateMetric(e,t,r){let i=e.slice(t.length+1);return w(r.expansionMode).some(o=>i.endsWith(o))}matchesTemplateAllowedIds(e,t,r){let i=Array.isArray(r.allowedIds)?r.allowedIds.map(o=>String(o).trim()).filter(o=>o.length>0):[];if(i.length===0)return true;let n=this.extractEntityId(e,t,r);return !!n&&i.includes(n)}extractEntityId(e,t,r){let i=e.slice(t.length+1);if(!i.length)return null;let o=w(r.expansionMode).find(u=>i.endsWith(u));if(!o)return null;let s=i.slice(0,-o.length).replace(/\.$/,"").trim();return s.length?s:null}normalizeHistoryPath(e){let t=e.trim();return t.length?t.replace(/^(vessels\.)?self\./,""):""}resolveHistoryContext(e,t){let r=this.normalizeContext(t);if(r)return r;if(/^(vessels\.)?self\./.test(e))return "vessels.self"}tryRenderChart(){if(!this.viewReady)return;if(!this.pendingDatasets.length){this.chart?.destroy(),this.chart=null;return}let e=this.chartCanvas();if(!e)return;this.chart?.destroy();let t=this.getPrimaryAxisUnitLabel(),r={type:"line",data:{datasets:this.pendingDatasets},options:{responsive:true,maintainAspectRatio:false,parsing:false,interaction:{mode:"nearest",intersect:false,axis:"x"},scales:G$1({x:{type:"time",time:{tooltipFormat:"PPpp",displayFormats:{second:"HH:mm:ss",minute:"HH:mm",hour:"HH:mm",day:"MMM d",week:"MMM d",month:"MMM yyyy"},unit:"minute",minUnit:"second"},ticks:{color:this.theme().contrastDim},grid:{color:this.theme().contrastDimmer}}},this.buildYScales(t)),plugins:{legend:{labels:{color:this.theme().contrastDim,generateLabels:i=>this.buildLegendLabels(i)}},tooltip:{boxWidth:15,boxHeight:15,bodyFont:{size:14},multiKeyBackground:"rgba(0, 0, 0, 0)",callbacks:{labelColor:i=>{let n=this.getLegendItemForDataset(i.chart,i.datasetIndex),o=Array.isArray(n?.lineDash)&&n.lineDash.length>=2?[n.lineDash[0],n.lineDash[1]]:void 0;return {borderColor:n?.strokeStyle??this.theme().contrast,backgroundColor:"rgba(0, 0, 0, 0)",borderWidth:2,borderRadius:0,borderDash:o}}}}}}};this.chart=new Wl(e.nativeElement.getContext("2d"),r);}getPrimaryAxisUnitLabel(){let e=this.resolveConvertUnitTo();return this.getUnitsLabel(e)}getWidgetPathConfig(e,t){let r=e?.config?.paths;if(!(!r||Array.isArray(r)))return r[t]}resolveConvertUnitTo(e){let t=this.data.widget?.config;if(!t)return null;if(t.paths&&!Array.isArray(t.paths)){if(e)for(let n of Object.keys(t.paths)){let o=this.getWidgetPathConfig(this.data.widget,n);if(o?.path===e&&o.convertUnitTo)return o.convertUnitTo}let r=Object.keys(t.paths)[0],i=r?this.getWidgetPathConfig(this.data.widget,r):void 0;if(i?.convertUnitTo)return i.convertUnitTo}return t.convertUnitTo??null}buildYScales(e){let t=this.resolveDualAxisWidgetType();if(!t)return {y:{ticks:{color:this.theme().contrastDim},grid:{color:this.theme().contrastDimmer},title:{display:!!e,text:e?`${e}`:"",color:this.theme().contrastDim}}};let r=P(t),i={};return r.forEach(n=>{let o=this.resolvePrimaryMetricForAxis(t,n.axisId),s=o?this.getDualAxisMetricColor(t,o):this.theme().contrastDim;i[n.axisId]=z(G$1(G$1({type:"linear",position:n.position},n.min!=null?{min:n.min}:{}),n.max!=null?{max:n.max}:{}),{ticks:{color:this.theme().contrastDim,callback:u=>this.formatAxisTick(u,n.tickSuffix)},grid:G$1({color:this.theme().contrastDimmer},n.drawOnChartArea===false?{drawOnChartArea:false}:{}),title:{display:true,text:n.title,color:s}});}),i}resolvePrimaryMetricForAxis(e,t){let r=D(e);return r.metricOrder.find(n=>r.metrics[n]?.axisId===t)??null}formatAxisTick(e,t){return t==="%"?`${e}%`:`${e} ${t}`}buildLegendLabels(e){return Wl.defaults.plugins.legend.labels.generateLabels(e).map(t=>{let r=t.datasetIndex!=null?e.data.datasets[t.datasetIndex]:null,i=Array.isArray(r?.borderDash)?r.borderDash.filter(n=>typeof n=="number"):[];return z(G$1({},t),{fillStyle:"transparent",lineDash:i})})}getLegendItemForDataset(e,t){return this.buildLegendLabels(e).find(r=>r.datasetIndex===t)??null}resolveDualAxisWidgetType(){return De(this.data.widget?.type,this.pendingDatasets.map(e=>typeof e.yAxisID=="string"?e.yAxisID:null))}setPeriod(e){this.selectedPeriod.set(e),this.loadHistoryDatasets();}resolveDuration(e){return e.timeScale&&e.period&&Number.isFinite(e.period)?this.durationFromScaleAndPeriod(e.timeScale,e.period):this.selectedPeriod()}durationFromScaleAndPeriod(e,t){let r=Math.max(1,Math.round(t)),i=e.trim().toLowerCase(),n=i.match(/^last\s+(\d+)\s+([a-z]+)/i);if(n){let o=Number(n[1]),s=n[2];if(Number.isFinite(o)&&o>0)return this.durationFromToken(s,o)}return this.durationFromToken(i,r)}durationFromToken(e,t){let r=e.toLowerCase();return r.startsWith("second")?`PT${t}S`:r.startsWith("minute")?`PT${t}M`:r.startsWith("hour")?`PT${t}H`:r.startsWith("day")?`P${t}D`:r.startsWith("week")?`P${t*7}D`:r.startsWith("month")?`P${t}M`:"PT24H"}resolveResolutionSeconds(e){let t=this.parseDurationToSeconds(e);return !Number.isFinite(t)||t<=0?1:Math.max(1,Math.round(t/120))}parseDurationToSeconds(e){let r=/^P(?:(\d+)D)?(?:T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+)S)?)?$/i.exec(e.trim());if(!r)return NaN;let i=Number(r[1]??0),n=Number(r[2]??0),o=Number(r[3]??0),s=Number(r[4]??0);return i*86400+n*3600+o*60+s}normalizeContext(e){let t=typeof e=="string"?e.trim():"";return t.length?t:void 0}getUnitsLabel(e){if(!e)return "";switch(e){case "percent":case "percentraw":return "%";case "latitudeMin":return "latitude in minutes";case "latitudeSec":return "latitude in secondes";case "longitudeMin":return "longitude in minutes";case "longitudeSec":return "longitude in secondes";default:return e}}static \u0275fac=function(t){return new(t||a)};static \u0275cmp=JD({type:a,selectors:[["widget-history-chart-dialog"]],viewQuery:function(t,r){t&1&&eg(r.chartCanvas,Ae,5),t&2&&Kw();},inputs:{selectedPeriod:[1,"selectedPeriod"]},outputs:{selectedPeriod:"selectedPeriodChange"},decls:22,vars:4,consts:[["historyCanvas",""],[1,"dialogue-header"],["mat-dialog-title",""],["mat-icon-button","",1,"dialog-close-icon",3,"mat-dialog-close"],[1,"history-dialog-content"],[1,"time-select"],["hideSingleSelectionIndicator","true","aria-label","Chart Time Span Selection",3,"ngModelChange","ngModel"],["value","PT15M",3,"click"],["value","PT1H",3,"click"],["value","PT8H",3,"click"],["value","PT24H",3,"click"],[1,"chart-area"],[1,"history-message"],[1,"history-message","error"],[1,"chart-wrapper"]],template:function(t,r){t&1&&(Pi(0,"div",1)(1,"h5",2),TT(2),ul(),Pi(3,"button",3)(4,"mat-icon"),TT(5,"close"),ul()()(),Pi(6,"mat-dialog-content",4)(7,"div",5)(8,"mat-button-toggle-group",6),Eg("ngModelChange",function(n){return ST(r.selectedPeriod,n)||(r.selectedPeriod=n),n}),Pi(9,"mat-button-toggle",7),Qh("click",function(){return r.setPeriod("PT15M")}),TT(10,"15 Minutes"),ul(),Pi(11,"mat-button-toggle",8),Qh("click",function(){return r.setPeriod("PT1H")}),TT(12,"1 Hour"),ul(),Pi(13,"mat-button-toggle",9),Qh("click",function(){return r.setPeriod("PT8H")}),TT(14,"8 Hours"),ul(),Pi(15,"mat-button-toggle",10),Qh("click",function(){return r.setPeriod("PT24H")}),TT(16,"24 Hours"),ul()(),cD(),ul(),Pi(17,"div",11),_w(18,we,2,0,"p",12)(19,Pe,2,1,"p",13)(20,Te,2,0,"p",12)(21,_e,3,0,"div",14),ul()()),t&2&&(EE(2),gg(r.data.title),EE(),Bh("mat-dialog-close",false),EE(5),Ig("ngModel",r.selectedPeriod),lD(),EE(10),Mw(r.loading()?18:r.error()?19:r.hasNoData()?20:21));},dependencies:[Ht,jt,Nt,Vt,Ot,bt,nt,Op,eu,yt,wt,Ln,Pn,rn],styles:["[_nghost-%COMP%]{display:block;height:100%;width:100%}.dialogue-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:baseline}.dialog-close-icon[_ngcontent-%COMP%]{margin-right:15px}mat-dialog-content.history-dialog-content[_ngcontent-%COMP%]{padding:0 24px 20px;display:flex;flex-direction:column;width:100%;height:100%;min-width:70vw;min-height:55vh;justify-content:flex-start;align-items:stretch}.time-select[_ngcontent-%COMP%]{flex-grow:0;text-align:center;width:100%}.chart-area[_ngcontent-%COMP%], .chart-wrapper[_ngcontent-%COMP%]{display:flex;flex-direction:column;flex:1 1 0;min-height:0;width:100%}.chart-wrapper[_ngcontent-%COMP%] canvas[_ngcontent-%COMP%]{flex:1 1 0;min-height:0}.history-message[_ngcontent-%COMP%]{margin:0;padding:1rem 0}.error[_ngcontent-%COMP%]{color:var(--mat-sys-error)}"]})}return a})();export{rt as WidgetHistoryChartDialogComponent};
|
|
1
|
+
import {w as w$1,dl as E,dm as G,N,aY as xe,bu as ut,dd as $e,$ as $j,W as Wp,v as vt,bG as Bj,D as Dt,F as Fa,dn as ge,a$ as Zr,dp as n,cw as z,cv as G$1,b0 as Wl,J as JD,dq as Ht,di as jt,de as Nt,df as Vt,dr as Ot,ds as bt,dt as nt,O as Op,o as eu,y as yt,b as wt,b2 as Ln,b5 as Pn,b9 as rn,P as Pi,T as TT,u as ul,bi as Eg,k as Qh,bk as cD,_ as _w,e as EE,aA as gg,B as Bh,bm as Ig,bo as lD,M as Mw,f as eg,K as Kw,g as qw,bp as gl,c as $h,bj as ST}from'./main-F7NMHHV4.js';import'./chunk-CJhkckXA.js';var y={"widget-bms":{expansionMode:"bms-battery-tree",metricOrder:["soc","current"],metrics:{soc:{metric:"soc",axisId:"ySoc",pathSuffixes:[".capacity.stateOfCharge",".stateOfCharge"],transform:a=>a*100},current:{metric:"current",axisId:"yCurrent",pathSuffixes:[".current"],transform:a=>a}},axes:{ySoc:{axisId:"ySoc",position:"left",title:"SoC (%)",tickSuffix:"%",min:0,max:100},yCurrent:{axisId:"yCurrent",position:"right",title:"Current (A)",tickSuffix:"A",drawOnChartArea:false}},pathRules:[{metric:"soc",axisId:"ySoc",regex:/^electrical\.batteries\.([^.]+)\.(?:capacity\.)?stateOfCharge$/i},{metric:"current",axisId:"yCurrent",regex:/^electrical\.batteries\.([^.]+)\.current$/i}]},"widget-solar-charger":{expansionMode:"solar-tree",metricOrder:["panelPower","current"],metrics:{panelPower:{metric:"panelPower",axisId:"yPower",pathSuffixes:[".panelPower"],transform:a=>a/1e3},current:{metric:"current",axisId:"yCurrent",pathSuffixes:[".current"],transform:a=>a}},axes:{yPower:{axisId:"yPower",position:"left",title:"Power (kW)",tickSuffix:"kW"},yCurrent:{axisId:"yCurrent",position:"right",title:"Current (A)",tickSuffix:"A",drawOnChartArea:false}},pathRules:[{metric:"current",axisId:"yCurrent",regex:/^electrical\.solar\.([^.]+)\.current$/i},{metric:"panelPower",axisId:"yPower",regex:/^electrical\.solar\.([^.]+)\.panelPower$/i}]},"widget-charger":{expansionMode:"charger-tree",metricOrder:["voltage","current"],metrics:{voltage:{metric:"voltage",axisId:"yVoltage",pathSuffixes:[".voltage"],transform:a=>a},current:{metric:"current",axisId:"yCurrent",pathSuffixes:[".current"],transform:a=>a}},axes:{yVoltage:{axisId:"yVoltage",position:"left",title:"Voltage (V)",tickSuffix:"V"},yCurrent:{axisId:"yCurrent",position:"right",title:"Current (A)",tickSuffix:"A",drawOnChartArea:false}},pathRules:[{metric:"voltage",axisId:"yVoltage",regex:/^electrical\.chargers\.([^.]+)\.voltage$/i},{metric:"current",axisId:"yCurrent",regex:/^electrical\.chargers\.([^.]+)\.current$/i}]},"widget-inverter":{expansionMode:"inverter-tree",metricOrder:["voltage","current"],metrics:{voltage:{metric:"voltage",axisId:"yVoltage",pathSuffixes:[".voltage"],transform:a=>a},current:{metric:"current",axisId:"yCurrent",pathSuffixes:[".current"],transform:a=>a}},axes:{yVoltage:{axisId:"yVoltage",position:"left",title:"Voltage (V)",tickSuffix:"V"},yCurrent:{axisId:"yCurrent",position:"right",title:"Current (A)",tickSuffix:"A",drawOnChartArea:false}},pathRules:[{metric:"voltage",axisId:"yVoltage",regex:/^electrical\.inverters\.([^.]+)\.voltage$/i},{metric:"current",axisId:"yCurrent",regex:/^electrical\.inverters\.([^.]+)\.current$/i}]},"widget-alternator":{expansionMode:"alternator-tree",metricOrder:["voltage","current"],metrics:{voltage:{metric:"voltage",axisId:"yVoltage",pathSuffixes:[".voltage"],transform:a=>a},current:{metric:"current",axisId:"yCurrent",pathSuffixes:[".current"],transform:a=>a}},axes:{yVoltage:{axisId:"yVoltage",position:"left",title:"Voltage (V)",tickSuffix:"V"},yCurrent:{axisId:"yCurrent",position:"right",title:"Current (A)",tickSuffix:"A",drawOnChartArea:false}},pathRules:[{metric:"voltage",axisId:"yVoltage",regex:/^electrical\.alternators\.([^.]+)\.voltage$/i},{metric:"current",axisId:"yCurrent",regex:/^electrical\.alternators\.([^.]+)\.current$/i}]},"widget-ac":{expansionMode:"ac-tree",metricOrder:["voltage","current","frequency"],metrics:{voltage:{metric:"voltage",axisId:"yVoltage",pathSuffixes:[".line1.voltage",".line2.voltage",".line3.voltage"],transform:a=>a},current:{metric:"current",axisId:"yCurrent",pathSuffixes:[".line1.current",".line2.current",".line3.current"],transform:a=>a},frequency:{metric:"frequency",axisId:"yFrequency",pathSuffixes:[".line1.frequency",".line2.frequency",".line3.frequency"],transform:a=>a}},axes:{yVoltage:{axisId:"yVoltage",position:"left",title:"Voltage (V)",tickSuffix:"V"},yCurrent:{axisId:"yCurrent",position:"right",title:"Current (A)",tickSuffix:"A",drawOnChartArea:false},yFrequency:{axisId:"yFrequency",position:"left",title:"Frequency (Hz)",tickSuffix:"Hz",drawOnChartArea:false}},pathRules:[{metric:"voltage",axisId:"yVoltage",regex:/^electrical\.ac\.([^.]+)\.line[123]\.voltage$/i},{metric:"current",axisId:"yCurrent",regex:/^electrical\.ac\.([^.]+)\.line[123]\.current$/i},{metric:"frequency",axisId:"yFrequency",regex:/^electrical\.ac\.([^.]+)\.line[123]\.frequency$/i}]}},Ie={"bms-battery-tree":"widget-bms","solar-tree":"widget-solar-charger","charger-tree":"widget-charger","inverter-tree":"widget-inverter","alternator-tree":"widget-alternator","ac-tree":"widget-ac"};function Me(a){return !!a&&a in y}function D(a){return y[a]}function w(a){let l=Ie[a],e=y[l],t=[];return e.metricOrder.forEach(r=>{let i=e.metrics[r];i&&i.pathSuffixes.forEach(n=>{t.includes(n)||t.push(n);});}),t}function ve(a,l){let e=y[a.widgetType].metrics[a.metric];return e?e.transform(l):l}function P(a){let l=y[a],e=[];return l.metricOrder.forEach(t=>{let r=l.metrics[t]?.axisId;!r||e.includes(r)||e.push(r);}),e.map(t=>l.axes[t]).filter(t=>!!t)}function De(a,l){if(!Me(a))return null;let e=P(a),t=new Set(e.map(i=>i.axisId));return t.size===0?null:l.some(i=>!!i&&t.has(i))?a:null}function Se(a){for(let[l,e]of Object.entries(y))for(let t of e.pathRules){let r=t.regex.exec(a);if(r)return {widgetType:l,entityId:r[1],metric:t.metric,axisId:t.axisId}}return null}var Ae=["historyCanvas"];function we(a,l){a&1&&(Pi(0,"p",12),TT(1,"Loading historical data\u2026"),ul());}function Pe(a,l){if(a&1&&(Pi(0,"p",13),TT(1),ul()),a&2){let e=qw();EE(),gl("503: ",e.error());}}function Te(a,l){a&1&&(Pi(0,"p",12),TT(1,"No historical data is available for this widget. If you are not using the built-in KIP History API provider, validate your plugin configuration supports the widget's path and try again."),ul());}function _e(a,l){a&1&&(Pi(0,"div",14),$h(1,"canvas",null,0),ul());}var rt=(()=>{class a{historyApiClient=w$1(E);historyMapper=w$1(G);app=w$1(N);destroyRef=w$1(xe);units=w$1(ut);data=w$1($e);chartCanvas=$j("historyCanvas");theme=Wp(this.app.cssThemeColorRoles$,{requireSync:true});loading=vt(true);error=vt(null);datasetCount=vt(0);selectedPeriod=Bj("PT1H");hasNoData=Dt(()=>!this.loading()&&!this.error()&&this.datasetCount()===0);chart=null;viewReady=false;pendingDatasets=[];dualAxisDescriptorCache=new Map;constructor(){Fa(()=>{let e=this.chartCanvas(),t=this.loading(),r=this.datasetCount();!e||t||r<=0||ge(()=>{this.tryRenderChart();});});}loadHistoryDatasets(){return Zr(this,null,function*(){this.loading.set(true),this.error.set(null),this.dualAxisDescriptorCache.clear();try{let e=yield this.resolveQueryableSeriesDefinitions(),t=yield Promise.all(e.map((r,i)=>this.buildDatasetForSeries(r,i)));this.pendingDatasets=t.filter(r=>!!r),this.datasetCount.set(this.pendingDatasets.length),this.tryRenderChart();}catch(e){console.error("[WidgetHistoryChartDialogComponent] Failed to load widget history datasets:",e),this.error.set("Unable to load historical data for this widget."),this.pendingDatasets=[],this.datasetCount.set(0);}finally{this.loading.set(false),queueMicrotask(()=>{this.tryRenderChart();});}})}ngOnInit(){this.loadHistoryDatasets(),this.destroyRef.onDestroy(()=>{this.chart?.destroy(),this.chart=null;});}ngAfterViewInit(){this.onCanvasReady();}ngOnDestroy(){this.chart?.destroy(),this.chart=null;}onCanvasReady(){this.viewReady=true,this.tryRenderChart();}buildDatasetForSeries(e,t){return Zr(this,null,function*(){let r=e.path;if(!r)return null;let i=this.resolveDuration(e),n=this.resolveResolutionSeconds(i),o=this.buildHistoryRequestCandidates(r,e.context),s=this.describeDualAxisSeries(r),u=[],x=this.normalizeHistoryPath(r),T=this.resolveConvertUnitTo(r);for(let I of o){let k=yield this.historyApiClient.getValues({paths:I.paths,context:I.context,duration:i,resolution:n});if(!k?.data?.length)continue;if(u=this.historyMapper.mapValuesToChartDatapoints(k,{unit:"number",domain:"scalar"}).map(O=>{let m=O.data.value;return typeof m=="number"&&Number.isFinite(m)&&(s?m=ve(s,m):T&&(m=this.units.convertToUnit(T,m)??m)),{x:O.timestamp,y:m}}),u.length){x=I.labelPath;break}}if(!u.length)return null;let _=this.resolveSeriesColor(t,s),be=e.source?` (${e.source})`:"";return {label:`${x}${be}`,data:u,borderColor:_,backgroundColor:_,pointRadius:0,borderWidth:2,tension:.25,yAxisID:s?.axisId??"y",borderDash:this.isDualAxisDashedSeries(s)?[6,4]:void 0,fill:false}})}describeDualAxisSeries(e){let t=this.normalizeHistoryPath(e??"");if(!t.length)return null;if(this.dualAxisDescriptorCache.has(t))return this.dualAxisDescriptorCache.get(t)??null;let r=Se(t);return this.dualAxisDescriptorCache.set(t,r),r}resolveSeriesColor(e,t){let r=this.getSeriesPalette();return t?this.getDualAxisMetricColor(t.widgetType,t.metric):r[e%r.length]}getSeriesPalette(){let e=this.data.widget?.config?.color||"blue",t=this.resolveThemeColor(e),r=[this.theme().green,this.theme().orange,this.theme().pink,this.theme().purple,this.theme().yellow,this.theme().grey,this.theme().blue,this.theme().contrast],i=r.findIndex(n=>n?.toLowerCase()===t.toLowerCase());return i!==-1?r=[r[i],...r.slice(0,i),...r.slice(i+1)]:r=[t,...r],r}resolveThemeColor(e){let t=this.theme()[e];return typeof t=="string"&&t.length>0?t:e}isDualAxisDashedSeries(e){return e?this.getDualAxisEntityOrderIndex(e.entityId,e.widgetType)%2===1:false}getDualAxisEntityOrderIndex(e,t){let r=[];this.data.seriesDefinitions.forEach(n=>{let o=this.describeDualAxisSeries(n.path);!o||o.widgetType!==t||r.includes(o.entityId)||r.push(o.entityId);});let i=r.indexOf(e);return i>=0?i:0}getDualAxisMetricColor(e,t){let r=this.getSeriesPalette(),n=D(e).metricOrder.indexOf(t),o=n>=0?n:0;return r[o%r.length]}buildHistoryRequestCandidates(e,t){let r=this.normalizeHistoryPath(e),i=this.resolveHistoryContext(e,t),n=[r].filter(s=>s.length>0),o=[];return n.forEach(s=>{o.push({paths:`${s}:avg`,context:i,labelPath:this.normalizeHistoryPath(s)});}),o}resolveQueryableSeriesDefinitions(){return Zr(this,null,function*(){let e=[];for(let t of this.data.seriesDefinitions){let r=yield this.expandTemplateSeries(t);e.push(...r);}return this.sortExpandedSeries(e)})}sortExpandedSeries(e){return e.some(r=>this.describeDualAxisSeries(r.path)!==null)?[...e].sort((r,i)=>{let n=this.describeDualAxisSeries(r.path),o=this.describeDualAxisSeries(i.path);if(!n&&!o)return 0;if(!n)return 1;if(!o)return -1;if(n.entityId!==o.entityId)return n.entityId.localeCompare(o.entityId);let s=D(n.widgetType).metricOrder.indexOf(n.metric),u=D(o.widgetType).metricOrder.indexOf(o.metric);return s-u}):e}expandTemplateSeries(e){return Zr(this,null,function*(){let t=this.normalizeHistoryPath(e.path??""),r=t.endsWith(".*");if(!n(e)&&!r)return [e];let i=t.replace(/\.\*$/,"");if(!i.length)return [e];let n$1=this.resolveDuration(e),o=yield this.historyApiClient.getPaths({duration:n$1});if(!o?.length)return [e];let s=this.findConcreteTemplatePaths(e,i,o);return s.length===0?[e]:s.map((u,x)=>z(G$1({},e),{seriesId:`${e.seriesId}:resolved:${x}`,datasetUuid:`${e.datasetUuid}:resolved:${x}`,path:u,expansionMode:null,familyKey:null,allowedIds:null,trackedDevices:void 0}))})}findConcreteTemplatePaths(e,t,r){let i=Array.from(new Set(r.map(o=>this.normalizeHistoryPath(o)).filter(o=>o.startsWith(`${t}.`))));return i.length===0?[]:n(e)?i.filter(o=>this.matchesTemplateMetric(o,t,e)).filter(o=>this.matchesTemplateAllowedIds(o,t,e)):i}matchesTemplateMetric(e,t,r){let i=e.slice(t.length+1);return w(r.expansionMode).some(o=>i.endsWith(o))}matchesTemplateAllowedIds(e,t,r){let i=Array.isArray(r.allowedIds)?r.allowedIds.map(o=>String(o).trim()).filter(o=>o.length>0):[];if(i.length===0)return true;let n=this.extractEntityId(e,t,r);return !!n&&i.includes(n)}extractEntityId(e,t,r){let i=e.slice(t.length+1);if(!i.length)return null;let o=w(r.expansionMode).find(u=>i.endsWith(u));if(!o)return null;let s=i.slice(0,-o.length).replace(/\.$/,"").trim();return s.length?s:null}normalizeHistoryPath(e){let t=e.trim();return t.length?t.replace(/^(vessels\.)?self\./,""):""}resolveHistoryContext(e,t){let r=this.normalizeContext(t);if(r)return r;if(/^(vessels\.)?self\./.test(e))return "vessels.self"}tryRenderChart(){if(!this.viewReady)return;if(!this.pendingDatasets.length){this.chart?.destroy(),this.chart=null;return}let e=this.chartCanvas();if(!e)return;this.chart?.destroy();let t=this.getPrimaryAxisUnitLabel(),r={type:"line",data:{datasets:this.pendingDatasets},options:{responsive:true,maintainAspectRatio:false,parsing:false,interaction:{mode:"nearest",intersect:false,axis:"x"},scales:G$1({x:{type:"time",time:{tooltipFormat:"PPpp",displayFormats:{second:"HH:mm:ss",minute:"HH:mm",hour:"HH:mm",day:"MMM d",week:"MMM d",month:"MMM yyyy"},unit:"minute",minUnit:"second"},ticks:{color:this.theme().contrastDim},grid:{color:this.theme().contrastDimmer}}},this.buildYScales(t)),plugins:{legend:{labels:{color:this.theme().contrastDim,generateLabels:i=>this.buildLegendLabels(i)}},tooltip:{boxWidth:15,boxHeight:15,bodyFont:{size:14},multiKeyBackground:"rgba(0, 0, 0, 0)",callbacks:{labelColor:i=>{let n=this.getLegendItemForDataset(i.chart,i.datasetIndex),o=Array.isArray(n?.lineDash)&&n.lineDash.length>=2?[n.lineDash[0],n.lineDash[1]]:void 0;return {borderColor:n?.strokeStyle??this.theme().contrast,backgroundColor:"rgba(0, 0, 0, 0)",borderWidth:2,borderRadius:0,borderDash:o}}}}}}};this.chart=new Wl(e.nativeElement.getContext("2d"),r);}getPrimaryAxisUnitLabel(){let e=this.resolveConvertUnitTo();return this.getUnitsLabel(e)}getWidgetPathConfig(e,t){let r=e?.config?.paths;if(!(!r||Array.isArray(r)))return r[t]}resolveConvertUnitTo(e){let t=this.data.widget?.config;if(!t)return null;if(t.paths&&!Array.isArray(t.paths)){if(e)for(let n of Object.keys(t.paths)){let o=this.getWidgetPathConfig(this.data.widget,n);if(o?.path===e&&o.convertUnitTo)return o.convertUnitTo}let r=Object.keys(t.paths)[0],i=r?this.getWidgetPathConfig(this.data.widget,r):void 0;if(i?.convertUnitTo)return i.convertUnitTo}return t.convertUnitTo??null}buildYScales(e){let t=this.resolveDualAxisWidgetType();if(!t)return {y:{ticks:{color:this.theme().contrastDim},grid:{color:this.theme().contrastDimmer},title:{display:!!e,text:e?`${e}`:"",color:this.theme().contrastDim}}};let r=P(t),i={};return r.forEach(n=>{let o=this.resolvePrimaryMetricForAxis(t,n.axisId),s=o?this.getDualAxisMetricColor(t,o):this.theme().contrastDim;i[n.axisId]=z(G$1(G$1({type:"linear",position:n.position},n.min!=null?{min:n.min}:{}),n.max!=null?{max:n.max}:{}),{ticks:{color:this.theme().contrastDim,callback:u=>this.formatAxisTick(u,n.tickSuffix)},grid:G$1({color:this.theme().contrastDimmer},n.drawOnChartArea===false?{drawOnChartArea:false}:{}),title:{display:true,text:n.title,color:s}});}),i}resolvePrimaryMetricForAxis(e,t){let r=D(e);return r.metricOrder.find(n=>r.metrics[n]?.axisId===t)??null}formatAxisTick(e,t){return t==="%"?`${e}%`:`${e} ${t}`}buildLegendLabels(e){return Wl.defaults.plugins.legend.labels.generateLabels(e).map(t=>{let r=t.datasetIndex!=null?e.data.datasets[t.datasetIndex]:null,i=Array.isArray(r?.borderDash)?r.borderDash.filter(n=>typeof n=="number"):[];return z(G$1({},t),{fillStyle:"transparent",lineDash:i})})}getLegendItemForDataset(e,t){return this.buildLegendLabels(e).find(r=>r.datasetIndex===t)??null}resolveDualAxisWidgetType(){return De(this.data.widget?.type,this.pendingDatasets.map(e=>typeof e.yAxisID=="string"?e.yAxisID:null))}setPeriod(e){this.selectedPeriod.set(e),this.loadHistoryDatasets();}resolveDuration(e){return e.timeScale&&e.period&&Number.isFinite(e.period)?this.durationFromScaleAndPeriod(e.timeScale,e.period):this.selectedPeriod()}durationFromScaleAndPeriod(e,t){let r=Math.max(1,Math.round(t)),i=e.trim().toLowerCase(),n=i.match(/^last\s+(\d+)\s+([a-z]+)/i);if(n){let o=Number(n[1]),s=n[2];if(Number.isFinite(o)&&o>0)return this.durationFromToken(s,o)}return this.durationFromToken(i,r)}durationFromToken(e,t){let r=e.toLowerCase();return r.startsWith("second")?`PT${t}S`:r.startsWith("minute")?`PT${t}M`:r.startsWith("hour")?`PT${t}H`:r.startsWith("day")?`P${t}D`:r.startsWith("week")?`P${t*7}D`:r.startsWith("month")?`P${t}M`:"PT24H"}resolveResolutionSeconds(e){let t=this.parseDurationToSeconds(e);return !Number.isFinite(t)||t<=0?1:Math.max(1,Math.round(t/120))}parseDurationToSeconds(e){let r=/^P(?:(\d+)D)?(?:T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+)S)?)?$/i.exec(e.trim());if(!r)return NaN;let i=Number(r[1]??0),n=Number(r[2]??0),o=Number(r[3]??0),s=Number(r[4]??0);return i*86400+n*3600+o*60+s}normalizeContext(e){let t=typeof e=="string"?e.trim():"";return t.length?t:void 0}getUnitsLabel(e){if(!e)return "";switch(e){case "percent":case "percentraw":return "%";case "latitudeMin":return "latitude in minutes";case "latitudeSec":return "latitude in secondes";case "longitudeMin":return "longitude in minutes";case "longitudeSec":return "longitude in secondes";default:return e}}static \u0275fac=function(t){return new(t||a)};static \u0275cmp=JD({type:a,selectors:[["widget-history-chart-dialog"]],viewQuery:function(t,r){t&1&&eg(r.chartCanvas,Ae,5),t&2&&Kw();},inputs:{selectedPeriod:[1,"selectedPeriod"]},outputs:{selectedPeriod:"selectedPeriodChange"},decls:22,vars:4,consts:[["historyCanvas",""],[1,"dialogue-header"],["mat-dialog-title",""],["mat-icon-button","",1,"dialog-close-icon",3,"mat-dialog-close"],[1,"history-dialog-content"],[1,"time-select"],["hideSingleSelectionIndicator","true","aria-label","Chart Time Span Selection",3,"ngModelChange","ngModel"],["value","PT15M",3,"click"],["value","PT1H",3,"click"],["value","PT8H",3,"click"],["value","PT24H",3,"click"],[1,"chart-area"],[1,"history-message"],[1,"history-message","error"],[1,"chart-wrapper"]],template:function(t,r){t&1&&(Pi(0,"div",1)(1,"h5",2),TT(2),ul(),Pi(3,"button",3)(4,"mat-icon"),TT(5,"close"),ul()()(),Pi(6,"mat-dialog-content",4)(7,"div",5)(8,"mat-button-toggle-group",6),Eg("ngModelChange",function(n){return ST(r.selectedPeriod,n)||(r.selectedPeriod=n),n}),Pi(9,"mat-button-toggle",7),Qh("click",function(){return r.setPeriod("PT15M")}),TT(10,"15 Minutes"),ul(),Pi(11,"mat-button-toggle",8),Qh("click",function(){return r.setPeriod("PT1H")}),TT(12,"1 Hour"),ul(),Pi(13,"mat-button-toggle",9),Qh("click",function(){return r.setPeriod("PT8H")}),TT(14,"8 Hours"),ul(),Pi(15,"mat-button-toggle",10),Qh("click",function(){return r.setPeriod("PT24H")}),TT(16,"24 Hours"),ul()(),cD(),ul(),Pi(17,"div",11),_w(18,we,2,0,"p",12)(19,Pe,2,1,"p",13)(20,Te,2,0,"p",12)(21,_e,3,0,"div",14),ul()()),t&2&&(EE(2),gg(r.data.title),EE(),Bh("mat-dialog-close",false),EE(5),Ig("ngModel",r.selectedPeriod),lD(),EE(10),Mw(r.loading()?18:r.error()?19:r.hasNoData()?20:21));},dependencies:[Ht,jt,Nt,Vt,Ot,bt,nt,Op,eu,yt,wt,Ln,Pn,rn],styles:["[_nghost-%COMP%]{display:block;height:100%;width:100%}.dialogue-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:baseline}.dialog-close-icon[_ngcontent-%COMP%]{margin-right:15px}mat-dialog-content.history-dialog-content[_ngcontent-%COMP%]{padding:0 24px 20px;display:flex;flex-direction:column;width:100%;height:100%;min-width:70vw;min-height:55vh;justify-content:flex-start;align-items:stretch}.time-select[_ngcontent-%COMP%]{flex-grow:0;text-align:center;width:100%}.chart-area[_ngcontent-%COMP%], .chart-wrapper[_ngcontent-%COMP%]{display:flex;flex-direction:column;flex:1 1 0;min-height:0;width:100%}.chart-wrapper[_ngcontent-%COMP%] canvas[_ngcontent-%COMP%]{flex:1 1 0;min-height:0}.history-message[_ngcontent-%COMP%]{margin:0;padding:1rem 0}.error[_ngcontent-%COMP%]{color:var(--mat-sys-error)}"]})}return a})();export{rt as WidgetHistoryChartDialogComponent};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import {d1 as Hj,w,du as p,dv as rt,D as Dt,$ as $j,ao as ue,F as Fa,dn as ge,J as JD,ci as dl,T as TT,cj as fl,d as ig,e as EE,b_ as Gh,f as eg,K as Kw}from'./main-
|
|
1
|
+
import {d1 as Hj,w,du as p,dv as rt,D as Dt,$ as $j,ao as ue,F as Fa,dn as ge,J as JD,ci as dl,T as TT,cj as fl,d as ig,e as EE,b_ as Gh,f as eg,K as Kw}from'./main-F7NMHHV4.js';var T=["hWrapper"];function P(i){return {Red:i.ColorDef.RED,Green:i.ColorDef.GREEN,Blue:i.ColorDef.BLUE,Orange:i.ColorDef.ORANGE,Yellow:i.ColorDef.YELLOW,Cyan:i.ColorDef.CYAN,Magenta:i.ColorDef.MAGENTA,White:i.ColorDef.WHITE,Gray:i.ColorDef.GRAY,Black:i.ColorDef.BLACK,Raith:i.ColorDef.RAITH,"Green LCD":i.ColorDef.GREEN_LCD,"JUG Green":i.ColorDef.JUG_GREEN}}function A(i){return {blackMetal:i.FrameDesign.BLACK_METAL,metal:i.FrameDesign.METAL,shinyMetal:i.FrameDesign.SHINY_METAL,brass:i.FrameDesign.BRASS,steel:i.FrameDesign.STEEL,chrome:i.FrameDesign.CHROME,gold:i.FrameDesign.GOLD,anthracite:i.FrameDesign.ANTHRACITE,tiltedGray:i.FrameDesign.TILTED_GRAY,tiltedBlack:i.FrameDesign.TILTED_BLACK,glossyMetal:i.FrameDesign.GLOSSY_METAL}}var I=(()=>{class i{id=Hj.required();type=Hj.required();theme=Hj.required();runtime=w(p);streams=w(rt);normalizedConfig=Dt(()=>this.runtime.options()??i.DEFAULT_CONFIG);horizonPaths=Dt(()=>this.normalizedConfig().paths??{});static DEFAULT_CONFIG={supportAutomaticHistoricalSeries:true,displayName:"Horizon",filterSelfPaths:true,paths:{gaugePitchPath:{description:"Attitude Pitch Data",path:"self.navigation.attitude.pitch",source:"default",pathType:"number",pathRequired:false,isPathConfigurable:true,showPathSkUnitsFilter:false,pathSkUnitsFilter:"rad",convertUnitTo:"deg",sampleTime:1e3},gaugeRollPath:{description:"Attitude Roll Data",path:"self.navigation.attitude.roll",source:"default",pathType:"number",pathRequired:false,isPathConfigurable:true,showPathSkUnitsFilter:false,pathSkUnitsFilter:"rad",convertUnitTo:"deg",sampleTime:1e3}},gauge:{type:"horizon",noFrameVisible:false,faceColor:"anthracite",invertPitch:false,invertRoll:false},enableTimeout:false,dataTimeout:5};wrapperRef=$j("hWrapper");resizeObserver=null;currentSize=0;structuralKey="";pendingSize=null;sizeCommitTimer=null;SIZE_STABLE_MS=180;ngZone=w(ue);gaugeOptions={};frameVisibleView=Dt(()=>!(this.runtime.options()?.gauge?.noFrameVisible??false));gauge=null;latestPitch=0;latestRoll=0;constructor(){Fa(()=>{let t=this.normalizedConfig();this.horizonPaths().gaugePitchPath?.path&&ge(()=>this.streams.observe("gaugePitchPath",n=>{let a=n?.data?.value??0;if(this.latestPitch=a,this.gauge){let r=t.gauge?.invertPitch?-a:a;try{this.gauge.setPitchAnimated(r);}catch(s){}}}));}),Fa(()=>{let t=this.normalizedConfig();this.horizonPaths().gaugeRollPath?.path&&ge(()=>this.streams.observe("gaugeRollPath",n=>{let a=n?.data?.value??0;if(this.latestRoll=a,this.gauge){let r=t.gauge?.invertRoll?-a:a;try{this.gauge.setRollAnimated(r);}catch(s){}}}));}),Fa(()=>{let t=this.runtime.options();if(!t)return;let e=`${t.gauge?.noFrameVisible??false}|${t.gauge?.faceColor??"anthracite"}`;if(e===this.structuralKey){this.applyInversions(t);return}this.structuralKey=e,this.currentSize>=50&&(this.buildOptions(t,this.currentSize),this.rebuildGauge());});}ngAfterViewInit(){let t=this.wrapperRef()?.nativeElement;if(!t)return;let e=()=>{if(this.pendingSize==null||this.pendingSize===this.currentSize||this.pendingSize<50)return;let r=this.pendingSize,s=this.runtime.options();if(!s)return;this.currentSize=r;let o=document.getElementById(this.id()+"-canvas");o&&((o.width!==r||o.height!==r)&&(o.width=r,o.height=r),o.style.width=r+"px",o.style.height=r+"px"),this.buildOptions(s,r),this.rebuildGauge(),this.pendingSize=null;},n=()=>{this.sizeCommitTimer&&clearTimeout(this.sizeCommitTimer),this.sizeCommitTimer=window.setTimeout(()=>{e(),this.sizeCommitTimer=null;},this.SIZE_STABLE_MS);},a=()=>{let r=t.getBoundingClientRect(),s=Math.round(Math.min(r.width,r.height)),o=this.pendingSize??this.currentSize;if(!s||s<50||o&&Math.abs(o-s)<4)return;if(this.currentSize===0&&this.pendingSize===null){this.pendingSize=s,e();return}this.pendingSize=s;let u=document.getElementById(this.id()+"-canvas");u&&(u.style.width=s+"px",u.style.height=s+"px"),n();};this.ngZone.runOutsideAngular(()=>{this.resizeObserver=new ResizeObserver(()=>a()),this.resizeObserver.observe(t),a();});}buildOptions(t,e){if(typeof steelseries>"u")return;let n=A(steelseries),a=P(steelseries),r=t.gauge?.faceColor??"anthracite";this.gaugeOptions={pointerColor:a.Red,frameVisible:!(t.gauge?.noFrameVisible??false),frameDesign:n[r],foregroundVisible:false,size:e};}rebuildGauge(){let t=this.id()+"-canvas";if(this.gauge)try{this.gauge=null;}catch(n){}let e=document.getElementById(t);if(e){this.currentSize&&(e.width!==this.currentSize||e.height!==this.currentSize)&&(e.width=this.currentSize,e.height=this.currentSize);let n=e.getContext("2d");n&&n.clearRect(0,0,e.width,e.height);}try{this.gauge=new steelseries.Horizon(t,this.gaugeOptions);let n=this.runtime.options();n&&this.gauge&&this.applyInversions(n);}catch(n){}}applyInversions(t){if(this.gauge){try{this.gauge.setPitchAnimated(t.gauge?.invertPitch?-this.latestPitch:this.latestPitch);}catch(e){}try{this.gauge.setRollAnimated(t.gauge?.invertRoll?-this.latestRoll:this.latestRoll);}catch(e){}}}ngOnDestroy(){if(this.resizeObserver){try{this.resizeObserver.disconnect();}catch(e){}this.resizeObserver=null;}this.sizeCommitTimer&&(clearTimeout(this.sizeCommitTimer),this.sizeCommitTimer=null);let t=document.getElementById(this.id()+"-canvas");if(t)try{let e=t.getContext("2d");e&&e.clearRect(0,0,t.width,t.height),t.width=0,t.height=0;}catch(e){}this.gauge=null;}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=JD({type:i,selectors:[["widget-horizon"]],viewQuery:function(e,n){e&1&&eg(n.wrapperRef,T,5),e&2&&Kw();},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:4,vars:3,consts:[["hWrapper",""],[1,"canvas-wrap"],[2,"z-index","inherit",3,"id"]],template:function(e,n){e&1&&(dl(0,"div",1,0)(2,"canvas",2),TT(3," Browser does not support canvas element. "),fl()()),e&2&&(ig("padding",n.frameVisibleView()?"10px":"0px"),EE(2),Gh("id",n.id()+"-canvas"));},styles:["[_nghost-%COMP%]{display:block;width:100%;height:100%}.canvas-wrap[_ngcontent-%COMP%]{position:relative;display:flex;align-items:center;justify-content:center;width:100%;height:100%;padding:0}.canvas-wrap[_ngcontent-%COMP%] > canvas[_ngcontent-%COMP%]{display:block;position:static;transform:none}"]})}return i})();export{I as WidgetHorizonComponent};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import {u}from'./chunk-
|
|
1
|
+
import {u}from'./chunk-Be5KcT7R.js';import {d1 as Hj,w,du as p,dv as rt,$ as $j,a as G,cu as T,aR as lt,v as vt,D as Dt,cw as z,cv as G$1,ab as te,F as Fa,dn as ge,as as ke,cN as Wl,dB as Gl,J as JD,dC as x,c as $h,P as Pi,k as Qh,cn as wd,u as ul,_ as _w,B as Bh,e as EE,an as Hh,M as Mw,f as eg,K as Kw}from'./main-F7NMHHV4.js';var H=["svgSlider"];function q(o,e){o&1&&$h(0,"div",10);}var O=class o{id=Hj.required();type=Hj.required();theme=Hj.required();static DEFAULT_CONFIG={supportAutomaticHistoricalSeries:false,displayName:"Slider Label",filterSelfPaths:true,paths:{gaugePath:{description:"PUT Supported Numeric Path. IMPORTANT: Format must be set to (base)",path:null,source:null,pathType:"number",isPathConfigurable:true,showPathSkUnitsFilter:false,pathSkUnitsFilter:null,showConvertUnitTo:false,convertUnitTo:void 0,supportsPut:true,sampleTime:500}},displayScale:{lower:0,upper:1,type:"linear"},enableTimeout:false,dataTimeout:5,color:"contrast"};runtime=w(p);streams=w(rt);svgElement=$j.required("svgSlider");dashboard=w(G);signalkRequestsService=w(T);toast=w(lt);labelColor=vt("");barColor=vt("");lineStartPx=0;lineWidthPx=0;lineEndPx=0;resizeTimeout=null;handlePositionView=vt(20);lineWidthView=Dt(()=>`${Math.max(0,this.handlePositionView()-this.LINE_START)}px`);pathValue=0;lineStart=20;isDragStarted=false;VIEWBOX_WIDTH=200;LINE_START=20;LINE_WIDTH=160;colorMap=null;cfg=Dt(()=>this.runtime.options()??o.DEFAULT_CONFIG);gaugePathConfig=Dt(()=>this.cfg().paths?.gaugePath);displayNameSafe=Dt(()=>this.cfg().displayName??"Slider Label");displayScale=Dt(()=>{let e=this.cfg().displayScale??o.DEFAULT_CONFIG.displayScale;return z(G$1({},e),{lower:e.lower??0,upper:e.upper??1})});valueChange$=new te;constructor(){Fa(()=>{let e=this.theme(),t=this.cfg();!t||!e||ge(()=>{this.ensureColorMap(),this.getColors(t.color??"contrast");});}),Fa(()=>{this.cfg();this.gaugePathConfig()?.path&&ge(()=>{this.calculateLineBounds(),this.streams.observe("gaugePath",i=>{if(!i||!i.data){queueMicrotask(()=>this.updateHandlePosition(this.mapValueToPosition(this.displayScale().lower)));return}queueMicrotask(()=>this.updateHandlePosition(this.mapValueToPosition(i.data.value)));});});});}ngOnInit(){this.getColors(this.cfg().color??"contrast"),this.valueChange$.pipe(ke(e=>{let t=this.displayScale();return this.isWithinMargin(e,t.lower)?t.lower:this.isWithinMargin(e,t.upper)?t.upper:parseFloat(e.toFixed(2))}),Wl(200),Gl()).subscribe(e=>{this.sendValue(e);});}mapValueToPosition(e){let t=this.displayScale(),i=t.upper-t.lower,n=this.LINE_WIDTH;return (e-t.lower)/i*n+this.LINE_START}mapPositionToValue(e){let t=this.displayScale(),i=t.upper-t.lower,n=this.LINE_WIDTH;return (e-this.LINE_START)/n*i+t.lower}isWithinMargin(e,t){let i=this.displayScale(),n=(i.upper-i.lower)*.01;return Math.abs(e-t)<=n}sendValue(e){let t=this.gaugePathConfig()?.path;t&&this.signalkRequestsService.putRequest(t,e,this.id());}onResized(){this.resizeTimeout&&clearTimeout(this.resizeTimeout),this.resizeTimeout=setTimeout(()=>{this.calculateLineBounds();},200);}calculateLineBounds(){if(!this.svgElement()?.nativeElement){console.warn("[Slider Widget] SVG element is not initialized yet.");return}let e=this.svgElement().nativeElement.getBoundingClientRect(),t=this.LINE_START/this.VIEWBOX_WIDTH*e.width,i=this.LINE_WIDTH/this.VIEWBOX_WIDTH*e.width;this.lineStartPx=t,this.lineWidthPx=i,this.lineEndPx=this.lineStartPx+this.lineWidthPx;}updateHandlePosition(e){let t=Math.max(this.LINE_START,Math.min(this.LINE_START+this.LINE_WIDTH,e));this.handlePositionView.set(t);}getPointerX(e){return e.clientX-this.svgElement().nativeElement.getBoundingClientRect().left}onPointerDown(e){this.isDragStarted=true,this.onPointerMove(e),e.stopPropagation(),e.preventDefault();}onPointerMove(e){if(this.isDragStarted){let t=this.getPointerX(e);if(t>=this.lineStartPx&&t<=this.lineEndPx){let i=(t-this.lineStartPx)/this.lineWidthPx*this.LINE_WIDTH+this.LINE_START;this.updateHandlePosition(i);let n=this.handlePositionView(),r=this.displayScale();n<=this.LINE_START?this.pathValue=r.lower:n>=this.LINE_START+this.LINE_WIDTH?this.pathValue=r.upper:this.pathValue=this.mapPositionToValue(n),this.valueChange$.next(this.pathValue);}}}onPointerUp(){this.isDragStarted=false,this.valueChange$.next(this.pathValue);}onPointerLeave(){this.isDragStarted&&(this.isDragStarted=false,this.valueChange$.next(this.pathValue));}getColors(e){if(this.ensureColorMap(),!this.colorMap)return;let t=this.colorMap.get(e)||this.colorMap.get("contrast");t&&(this.labelColor.set(t.label),this.barColor.set(t.bar));}ensureColorMap(){let e=this.theme();e&&(this.colorMap=new Map([["contrast",{label:e.contrastDim,bar:e.contrast}],["blue",{label:e.blueDim,bar:e.blue}],["green",{label:e.greenDim,bar:e.green}],["pink",{label:e.pinkDim,bar:e.pink}],["orange",{label:e.orangeDim,bar:e.orange}],["purple",{label:e.purpleDim,bar:e.purple}],["grey",{label:e.greyDim,bar:e.grey}],["yellow",{label:e.yellowDim,bar:e.yellow}]]));}ngOnDestroy(){this.valueChange$.complete(),this.resizeTimeout&&clearTimeout(this.resizeTimeout);}static \u0275fac=function(t){return new(t||o)};static \u0275cmp=JD({type:o,selectors:[["widget-slider"]],viewQuery:function(t,i){t&1&&eg(i.svgElement,H,5),t&2&&Kw();},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:11,vars:7,consts:[["svgSlider",""],[3,"text","color"],["kipResizeObserver","",1,"widgets-container",3,"resizeChange"],["width","100%","height","100%","viewBox","0 40 200 40"],["width","160","height","8","rx","4.5","id","rect3","x","20","y","56",1,"slider-bg-bar",2,"display","inline","stroke-width","1.57144"],["height","8","rx","4.5","id","rect3","x","20","y","56",2,"display","inline","stroke-width","1.57144"],["id","g22"],["cy","60","fill","#ffffff","id","circle3","r","19.549999",2,"display","inline","fill","#4d4d4d","fill-opacity","1","stroke","#8c8c8c","stroke-width","0.9","stroke-dasharray","none","stroke-opacity","1"],["cy","60","fill","#ffffff","id","circle3-3","r","17.950001",2,"display","inline","fill","#ffffff","fill-opacity","1","stroke","#e6e6e6","stroke-width","1.8","stroke-dasharray","none","stroke-opacity","0.97"],["cursor","pointer","width","200","height","40","x","0","y","40",2,"display","inline","fill","rgba(0, 0, 0, 0)","stroke","none","stroke-width","0.3","stroke-linecap","square","stroke-linejoin","round","stroke-miterlimit","0",3,"pointerdown","pointerup","pointermove","pointerleave"],[1,"widgetOverlay"]],template:function(t,i){t&1&&($h(0,"widget-title",1),Pi(1,"div",2),Qh("resizeChange",function(){return i.onResized()}),wd(),Pi(2,"svg",3),$h(3,"rect",4)(4,"rect",5),Pi(5,"g",6),$h(6,"circle",7)(7,"circle",8),ul(),Pi(8,"rect",9,0),Qh("pointerdown",function(r){return i.onPointerDown(r)})("pointerup",function(){return i.onPointerUp()})("pointermove",function(r){return i.onPointerMove(r)})("pointerleave",function(){return i.onPointerLeave()}),ul()(),_w(10,q,1,0,"div",10),ul()),t&2&&(Bh("text",i.displayNameSafe())("color",i.labelColor()),EE(4),Hh("width",i.lineWidthView())("fill",i.barColor()),EE(2),Hh("cx",i.handlePositionView()),EE(),Hh("cx",i.handlePositionView()),EE(3),Mw(i.dashboard.isDashboardStatic()?-1:10));},dependencies:[u,x],styles:[".widgets-container[_ngcontent-%COMP%]{display:block;position:absolute;left:0;right:0;top:15%;height:85%;width:100%;overflow:hidden;z-index:20;padding:0 20px}.widgetOverlay[_ngcontent-%COMP%]{position:absolute;width:100%;height:100%;right:0;bottom:0;color:transparent;z-index:21}.slider-bg-bar[_ngcontent-%COMP%]{fill:var(--mat-sys-inverse-on-surface)}"]})};export{O as WidgetSliderComponent};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import {m as me}from'./chunk-
|
|
1
|
+
import {m as me}from'./chunk-DxS7HN4G.js';import {w as w$1,aQ as ee,aX as He,aR as lt,G as Gi,J as JD}from'./main-F7NMHHV4.js';var w=(()=>{class o{dialog=w$1(ee);auth=w$1(He);toast=w$1(lt);settings=w$1(Gi);connectionConfig=null;ngOnInit(){this.connectionConfig=this.settings.getConnectionConfig(),this.openUserCredentialModal("Sign in failed: Incorrect user/password. Enter valide credentials or access the Confifuration/Settings menu, validate the server URL or/and disable the user Sign in option");}openUserCredentialModal(t){let n=this.connectionConfig;if(!n)return;this.dialog.open(me,{disableClose:true,data:{user:n.loginName,password:n.loginPassword,error:t}}).afterClosed().subscribe(s=>{s===void 0||!s||(n.loginName=s.user,n.loginPassword=s.password,this.settings.setConnectionConfig(n),this.serverLogin());});}serverLogin(t){let n=this.connectionConfig;n&&this.auth.login({usr:n.loginName,pwd:n.loginPassword,newUrl:t}).then(()=>{this.settings.reloadApp();}).catch(e=>{e.status==401?(this.openUserCredentialModal("Sign in failed: Invalide user/password. Enter valide credentials"),console.log("[Setting-SignalK Component] Sign in failed: "+e.error.message)):e.status==404?(this.toast.show("Login API not found at URL. See connection detail status in Configuration/Settings",5e3,false,"error"),console.log("[Setting-SignalK Component] Sign in failed: "+e.error.message)):e.status==0?(this.toast.show("Cannot reach server at Signal K URL. See connection detail status in Configuration/Settings",5e3,false,"error"),console.log("[Setting-SignalK Component] Sign in failed: Cannot reach server at Signal K URL:"+e.message)):(this.toast.show("Unknown authentication failure: "+JSON.stringify(e),5e3,false,"error"),console.log("[Setting-SignalK Component] Unknown login error response: "+JSON.stringify(e)));});}static \u0275fac=function(n){return new(n||o)};static \u0275cmp=JD({type:o,selectors:[["app-widget-login"]],decls:0,vars:0,template:function(n,e){},encapsulation:2})}return o})();export{w as WidgetLoginComponent};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {f}from'./chunk-H9_eqTYx.js';import {u}from'./chunk-CCfhzpE8.js';import {d1 as Hj,w,du as p,dv as rt,a as G,cu as T,aR as lt$1,aZ as R,v as vt,D as Dt,aH as j,F as Fa,dn as ge$1,cw as z,cv as G$1,J as JD,dC as x,dT as wg,_ as _w,P as Pi,k as Qh,X as xw,cs as Sw,u as ul,dU as NT,e as EE,M as Mw,t as pT,Y as Aw,dV as Vj,cn as wd,ci as dl,dW as Zh,cp as Uh,cj as fl,cV as Td,T as TT,an as Hh,d as ig,bp as gl,bs as dp,c as $h,g as qw,dX as xT,B as Bh,cS as pl,cT as hl,h as Fw,l as ud,m as dd}from'./main-YKDNK5VZ.js';import {c}from'./chunk-BIb-xYiS.js';function ye(i){return Math.max(i,1)/35}function v(i,u,o){let e=Math.max(u,0),t=ye(o),n=i==="2"?0:48*t,l=i==="2"?12*t:6*t,d=i==="2"?12*t:n,C=Math.max(0,e-d-l);return {labelX:d,labelWidth:C,labelFontSize:14*t,shapeLaneWidth:n,switchTrackX:6*t,switchTrackY:6*t,switchTrackWidth:37.714306*t,switchTrackHeight:22*t,switchTrackRadius:11*t,switchKnobOffX:17.5*t,switchKnobOnX:32.5*t,switchKnobY:17*t,switchKnobRadius:10*t,switchStrokeWidth:1.5*t,lightCenterX:24.5*t,lightCenterY:17.5*t,lightRadius:13.5*t,lightStrokeWidth:3*t,buttonX:6*t,buttonY:5*t,buttonWidth:Math.max(0,e-12*t),buttonHeight:25.025183*t,buttonRadius:3.6672263*t}}function ge(i,u,o,e){if(o.length===0)return 0;let t=Math.max(1,Math.floor(u/o.length)),n=1,l=t,d=1;for(;n<=l;){let C=Math.floor((n+l)/2);if(o.every(w=>{let L=v(w.type,i,C);return e(w.ctrlLabel??"",L.labelFontSize)<=L.labelWidth})){d=C,n=C+1;continue}l=C-1;}return Math.min(d,t)}var fe=(()=>{class i{data=Hj(null,{alias:"controlData"});theme=Hj(null);dimensions=Hj.required();toggleClick=Vj();ctrlState=null;ctrlColor="";oldTheme=null;offColor=null;labelColor=null;valueColor=null;constructor(){}ngDoCheck(){let o=this.data();if(!o)return;o.value!=this.ctrlState&&(this.ctrlState=o.value),o.color!=this.ctrlColor&&(this.ctrlColor=o.color,this.getColors(o.color));let e=this.theme();this.oldTheme!=e&&(this.oldTheme=e,this.getColors(o.color));}toggle(o){let e=this.data();e&&(e.value=o,this.toggleClick.emit(e));}get layout(){let o=this.dimensions();return v("3",o.width,o.height)}get isEnabled(){return !!this.ctrlState}getColors(o){let e=this.theme();if(e)switch(o){case "contrast":this.offColor=e.contrastDimmer,this.labelColor=e.contrastDim,this.valueColor=e.contrast;break;case "blue":this.offColor=e.blueDimmer,this.labelColor=e.blueDim,this.valueColor=e.blue;break;case "green":this.offColor=e.greenDimmer,this.labelColor=e.greenDim,this.valueColor=e.green;break;case "pink":this.offColor=e.pinkDimmer,this.labelColor=e.pinkDim,this.valueColor=e.pink;break;case "orange":this.offColor=e.orangeDimmer,this.labelColor=e.orangeDim,this.valueColor=e.orange;break;case "purple":this.offColor=e.purpleDimmer,this.labelColor=e.purpleDim,this.valueColor=e.purple;break;case "grey":this.offColor=e.greyDimmer,this.labelColor=e.greyDim,this.valueColor=e.grey;break;case "yellow":this.offColor=e.yellowDimmer,this.labelColor=e.yellowDim,this.valueColor=e.yellow;break;default:this.offColor=e.contrastDimmer,this.labelColor=e.contrastDim,this.valueColor=e.contrast;break}}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=JD({type:i,selectors:[["app-svg-boolean-light"]],inputs:{data:[1,"controlData","data"],theme:[1,"theme"],dimensions:[1,"dimensions"]},outputs:{toggleClick:"toggleClick"},decls:21,vars:33,consts:[["version","1.1","id","svg9","xmlns","http://www.w3.org/2000/svg",0,"xmlns","svg","http://www.w3.org/2000/svg"],["id","defs1"],["id","lightSpecular","cx","36%","cy","32%","r","68%"],["offset","0","stop-color","#ffffff","stop-opacity","0.5"],["offset","0.55","stop-color","#ffffff","stop-opacity","0.16"],["offset","1","stop-color","#ffffff","stop-opacity","0"],["id","lightDepth","cx","68%","cy","70%","r","68%"],["offset","0","stop-color","#000000","stop-opacity","0"],["offset","0.62","stop-color","#000000","stop-opacity","0.05"],["offset","1","stop-color","#000000","stop-opacity","0.22"],["id","lightRim","x1","0","y1","0","x2","1","y2","1"],["offset","0","stop-color","#ffffff","stop-opacity","0.36"],["offset","0.45","stop-color","#ffffff","stop-opacity","0.09"],["offset","1","stop-color","#000000","stop-opacity","0.3"],["y","0"],["xmlns","http://www.w3.org/1999/xhtml",2,"width","100%","height","100%","display","flex","align-items","center","justify-content","flex-start","font-family","Roboto,sans-serif","font-weight","700","line-height","1","white-space","nowrap","overflow","hidden","text-overflow","clip"],[2,"stroke","url(#lightRim)","stroke-opacity","0.4","stroke-dasharray","none"],["fill","url(#lightSpecular)"],["fill","url(#lightDepth)"],["fill","#ffffff"]],template:function(e,t){e&1&&(wd(),dl(0,"svg",0)(1,"defs",1)(2,"radialGradient",2),Uh(3,"stop",3)(4,"stop",4)(5,"stop",5),fl(),dl(6,"radialGradient",6),Uh(7,"stop",7)(8,"stop",8)(9,"stop",9),fl(),dl(10,"linearGradient",10),Uh(11,"stop",11)(12,"stop",12)(13,"stop",13),fl()(),dl(14,"foreignObject",14),Td(),dl(15,"div",15),TT(16),fl()(),wd(),Uh(17,"circle",16)(18,"circle",17)(19,"circle",18)(20,"ellipse",19),fl()),e&2&&(Hh("height",t.dimensions().height)("width",t.dimensions().width)("viewBox","0 0 "+t.dimensions().width+" "+t.dimensions().height),EE(14),Hh("x",t.layout.labelX)("width",t.layout.labelWidth)("height",t.dimensions().height),EE(),ig("color",t.isEnabled?t.valueColor:t.labelColor)("opacity",t.isEnabled?1:.6)("font-size",t.layout.labelFontSize,"px")("text-shadow",t.isEnabled?"0 0 4px currentColor, 0 0 4px currentColor":"none"),EE(),gl(" ",t.data()?.ctrlLabel," "),EE(),Hh("cx",t.layout.lightCenterX)("cy",t.layout.lightCenterY)("r",t.layout.lightRadius)("fill",t.isEnabled?t.valueColor:t.offColor)("stroke-width",t.layout.lightStrokeWidth),EE(),Hh("cx",t.layout.lightCenterX)("cy",t.layout.lightCenterY)("r",t.layout.lightRadius)("opacity",t.isEnabled?.62:.42),EE(),Hh("cx",t.layout.lightCenterX)("cy",t.layout.lightCenterY)("r",t.layout.lightRadius)("opacity",t.isEnabled?.62:.48),EE(),Hh("cx",t.layout.lightCenterX-t.layout.lightRadius*.32)("cy",t.layout.lightCenterY-t.layout.lightRadius*.34)("rx",t.layout.lightRadius*.34)("ry",t.layout.lightRadius*.2)("opacity",t.isEnabled?.2:.12));},encapsulation:2})}return i})();var Ce=(()=>{class i{data=Hj(null,{alias:"controlData"});theme=Hj(null);dimensions=Hj.required();toggleClick=Vj();oldTheme=null;emitIntervalId=null;pressed=false;isSwiping=false;pointerStartX=0;pointerStartY=0;labelColorEnabled=null;labelColorDisabled=null;valueColor=null;ctrlColor="";ngDoCheck(){let o=this.data();if(!o)return;o.color!=this.ctrlColor&&(this.ctrlColor=o.color,this.getColors(o.color));let e=this.theme();this.oldTheme!=e&&(this.oldTheme=e,this.getColors(o.color));}handleClickDown(o){let e=this.data();if(!e)return;this.isSwiping=false,this.pointerStartX=o.clientX,this.pointerStartY=o.clientY,this.clearTimers(),this.pressed=true;let t=dp(e);t.value=this.pressed,this.toggleClick.emit(t),this.emitIntervalId=setInterval(()=>{this.toggleClick.emit(t);},100);}handlePointerMove(o){let e=Math.abs(o.clientX-this.pointerStartX),t=Math.abs(o.clientY-this.pointerStartY);(e>30||t>30)&&(this.isSwiping=true,this.pressed=false,this.clearTimers());}handleClickUp(){this.isSwiping&&(this.isSwiping=false),this.pressed=false,this.clearTimers();}handlePointerCancel(){this.isSwiping=false,this.pressed=false,this.clearTimers();}get layout(){let o=this.dimensions();return v("2",o.width,o.height)}get isPressed(){return this.pressed}getColors(o){let e=this.theme();if(e)switch(o){case "contrast":this.labelColorEnabled="black",this.labelColorDisabled=e.contrastDim,this.valueColor=e.contrast;break;case "blue":this.labelColorEnabled=e.contrast,this.labelColorDisabled=e.blueDim,this.valueColor=e.blue;break;case "green":this.labelColorEnabled=e.contrast,this.labelColorDisabled=e.greenDim,this.valueColor=e.green;break;case "pink":this.labelColorEnabled=e.contrast,this.labelColorDisabled=e.pinkDim,this.valueColor=e.pink;break;case "orange":this.labelColorEnabled=e.contrast,this.labelColorDisabled=e.orangeDim,this.valueColor=e.orange;break;case "purple":this.labelColorEnabled=e.contrast,this.labelColorDisabled=e.purpleDim,this.valueColor=e.purple;break;case "grey":this.labelColorEnabled=e.contrast,this.labelColorDisabled=e.greyDim,this.valueColor=e.grey;break;case "yellow":this.labelColorEnabled=e.contrast,this.labelColorDisabled=e.yellowDim,this.valueColor=e.yellow;break;default:this.labelColorEnabled="black",this.labelColorDisabled=e.contrastDim,this.valueColor=e.contrast;break}}clearTimers(){this.emitIntervalId&&(clearInterval(this.emitIntervalId),this.emitIntervalId=null);}ngOnDestroy(){this.clearTimers();}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=JD({type:i,selectors:[["app-svg-boolean-button"]],inputs:{data:[1,"controlData","data"],theme:[1,"theme"],dimensions:[1,"dimensions"]},outputs:{toggleClick:"toggleClick"},decls:6,vars:19,consts:[["version","1.1","id","svg9","xmlns","http://www.w3.org/2000/svg",0,"xmlns","svg","http://www.w3.org/2000/svg",3,"pointerup","pointerleave","pointerdown","pointermove","pointercancel"],["x","0","y","0","pointer-events","all",2,"display","inline","opacity","1","fill","transparent","fill-opacity","1","stroke","none","stroke-width","0"],[2,"display","inline","mix-blend-mode","normal","stroke","black","stroke-width","1.5","stroke-opacity","0.2"],["y","0",2,"pointer-events","none"],["xmlns","http://www.w3.org/1999/xhtml",2,"width","100%","height","100%","display","flex","align-items","center","justify-content","center","font-family","Roboto,sans-serif","font-weight","700","line-height","1","white-space","nowrap","overflow","hidden","text-overflow","clip"]],template:function(e,t){e&1&&(wd(),dl(0,"svg",0),Zh("pointerup",function(){return t.handleClickUp()})("pointerleave",function(){return t.handleClickUp()})("pointerdown",function(l){return t.handleClickDown(l)})("pointermove",function(l){return t.handlePointerMove(l)})("pointercancel",function(){return t.handlePointerCancel()}),Uh(1,"rect",1)(2,"rect",2),dl(3,"foreignObject",3),Td(),dl(4,"div",4),TT(5),fl()()()),e&2&&(Hh("height",t.dimensions().height)("width",t.dimensions().width)("viewBox","0 0 "+t.dimensions().width+" "+t.dimensions().height),EE(),Hh("width",t.dimensions().width)("height",t.dimensions().height),EE(),Hh("x",t.layout.buttonX)("y",t.layout.buttonY)("width",t.layout.buttonWidth)("height",t.layout.buttonHeight)("rx",t.layout.buttonRadius)("fill",t.isPressed?t.valueColor:t.labelColorDisabled),EE(),Hh("x",t.layout.labelX)("width",t.layout.labelWidth)("height",t.dimensions().height),EE(),ig("color",t.isPressed?t.labelColorEnabled:t.labelColorDisabled)("font-size",t.layout.labelFontSize,"px"),EE(),gl(" ",t.data()?.ctrlLabel," "));},encapsulation:2})}return i})();var be=(()=>{class i{data=Hj(null,{alias:"controlData"});theme=Hj(null);dimensions=Hj.required();toggleClick=Vj();ctrlState=null;oldTheme=null;swipeGuard=f();offColor=null;labelColor=null;valueColor=null;ctrlColor="";constructor(){}ngDoCheck(){let o=this.data();if(!o)return;o.value!=this.ctrlState&&(this.ctrlState=o.value),o.color!=this.ctrlColor&&(this.ctrlColor=o.color,this.getColors(o.color));let e=this.theme();this.oldTheme!=e&&(this.oldTheme=e,this.getColors(o.color));}onPointerDown(o){this.swipeGuard.onPointerDown(o);}onPointerMove(o){this.swipeGuard.onPointerMove(o);}onPointerUp(o,e){this.swipeGuard.onPointerUp(o)&&this.toggle(e);}onPointerCancel(o){this.swipeGuard.onPointerCancel(o);}get layout(){let o=this.dimensions();return v("1",o.width,o.height)}get isEnabled(){return !!this.ctrlState}get nextState(){return !this.isEnabled}toggle(o){let e=this.data();e&&(e.value=o,this.toggleClick.emit(e));}getColors(o){let e=this.theme();if(e)switch(o){case "contrast":this.offColor=e.contrastDimmer,this.labelColor=e.contrastDim,this.valueColor=e.contrast;break;case "blue":this.offColor=e.blueDimmer,this.labelColor=e.blueDim,this.valueColor=e.blue;break;case "green":this.offColor=e.greenDimmer,this.labelColor=e.greenDim,this.valueColor=e.green;break;case "pink":this.offColor=e.pinkDimmer,this.labelColor=e.pinkDim,this.valueColor=e.pink;break;case "orange":this.offColor=e.orangeDimmer,this.labelColor=e.orangeDim,this.valueColor=e.orange;break;case "purple":this.offColor=e.purpleDimmer,this.labelColor=e.purpleDim,this.valueColor=e.purple;break;case "grey":this.offColor=e.greyDimmer,this.labelColor=e.greyDim,this.valueColor=e.grey;break;case "yellow":this.offColor=e.yellowDimmer,this.labelColor=e.yellowDim,this.valueColor=e.yellow;break;default:this.offColor=e.contrastDimmer,this.labelColor=e.contrastDim,this.valueColor=e.contrast;break}}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=JD({type:i,selectors:[["app-svg-boolean-switch"]],inputs:{data:[1,"controlData","data"],theme:[1,"theme"],dimensions:[1,"dimensions"]},outputs:{toggleClick:"toggleClick"},decls:12,vars:28,consts:[["version","1.1","id","svg9","xmlns","http://www.w3.org/2000/svg",0,"xmlns","svg","http://www.w3.org/2000/svg",3,"pointerdown","pointermove","pointerup","pointercancel"],["id","defs1"],["id","linearGradient32"],["offset","0",2,"stop-color","#000000","stop-opacity","0.88486844"],["offset","1",2,"stop-color","#f7f7f7","stop-opacity","0.17763157"],[0,"xlink","href","#linearGradient32","id","linearGradient33","x1","0","y1","0","x2","1","y2","1"],["x","0","y","0","pointer-events","all",2,"display","inline","opacity","0.001","fill","black","fill-opacity","0.001","stroke","none","stroke-width","0"],["y","0",2,"pointer-events","none"],[2,"width","100%","height","100%","display","flex","align-items","center","justify-content","flex-start","font-family","Roboto,sans-serif","font-weight","700","line-height","1","white-space","nowrap","overflow","hidden","text-overflow","clip"],[2,"stroke-width","1.5","stroke","black","stroke-opacity","0.12"],[2,"stroke","url(#linearGradient33)","stroke-opacity","0.4","stroke-dasharray","none"]],template:function(e,t){e&1&&(wd(),dl(0,"svg",0),Zh("pointerdown",function(l){return t.onPointerDown(l)})("pointermove",function(l){return t.onPointerMove(l)})("pointerup",function(l){return t.onPointerUp(l,t.nextState)})("pointercancel",function(l){return t.onPointerCancel(l)}),dl(1,"defs",1)(2,"linearGradient",2),Uh(3,"stop",3)(4,"stop",4),fl(),Uh(5,"linearGradient",5),fl(),Uh(6,"rect",6),dl(7,"foreignObject",7),Td(),dl(8,"div",8),TT(9),fl()(),wd(),Uh(10,"rect",9)(11,"circle",10),fl()),e&2&&(Hh("height",t.dimensions().height)("width",t.dimensions().width)("viewBox","0 0 "+t.dimensions().width+" "+t.dimensions().height),EE(6),Hh("width",t.dimensions().width)("height",t.dimensions().height),EE(),Hh("x",t.layout.labelX)("width",t.layout.labelWidth)("height",t.dimensions().height),EE(),ig("color",t.isEnabled?t.valueColor:t.labelColor)("opacity",t.isEnabled?1:.6)("font-size",t.layout.labelFontSize,"px")("text-shadow",t.isEnabled?"0 0 4px currentColor, 0 0 4px currentColor":"none"),EE(),gl(" ",t.data()?.ctrlLabel," "),EE(),Hh("x",t.layout.switchTrackX)("y",t.layout.switchTrackY)("width",t.layout.switchTrackWidth)("height",t.layout.switchTrackHeight)("rx",t.layout.switchTrackRadius)("fill",t.isEnabled?t.labelColor:t.offColor),EE(),Hh("cx",t.isEnabled?t.layout.switchKnobOnX:t.layout.switchKnobOffX)("cy",t.layout.switchKnobY)("r",t.layout.switchKnobRadius)("fill",t.isEnabled?t.valueColor:t.offColor)("stroke-width",t.layout.switchStrokeWidth));},encapsulation:2})}return i})();function _e(i,u){if(i&1&&$h(0,"widget-title",1),i&2){let o=qw(),e=xT(0);Bh("text",(e==null?null:e.displayName)??"")("color",o.labelColor());}}function De(i,u){if(i&1){let o=Fw();Pi(0,"app-svg-boolean-switch",5),Qh("toggleClick",function(t){ud(o);let n=qw(2);return dd(n.toggle(t))}),ul();}if(i&2){let o=qw().$implicit,e=qw();Bh("controlData",o)("theme",e.theme())("dimensions",e.ctrlDimensions);}}function Se(i,u){if(i&1){let o=Fw();Pi(0,"app-svg-boolean-button",5),Qh("toggleClick",function(t){ud(o);let n=qw(2);return dd(n.toggle(t))}),ul();}if(i&2){let o=qw().$implicit,e=qw();Bh("controlData",o)("theme",e.theme())("dimensions",e.ctrlDimensions);}}function ke(i,u){if(i&1){let o=Fw();Pi(0,"app-svg-boolean-light",5),Qh("toggleClick",function(t){ud(o);let n=qw(2);return dd(n.toggle(t))}),ul();}if(i&2){let o=qw().$implicit,e=qw();Bh("controlData",o)("theme",e.theme())("dimensions",e.ctrlDimensions);}}function Ee(i,u){if(i&1&&(pl(0),_w(1,De,1,3,"app-svg-boolean-switch",4)(2,Se,1,3,"app-svg-boolean-button",4)(3,ke,1,3,"app-svg-boolean-light",4),hl()),i&2){let o,e=u.$implicit;EE(),Mw((o=e.type)==="1"?1:o==="2"?2:o==="3"?3:-1);}}function Te(i,u){i&1&&$h(0,"div",3);}var lt=(()=>{class i{id=Hj.required();type=Hj.required();theme=Hj.required();static DEFAULT_CONFIG={displayName:"Switch Panel Label",showLabel:true,filterSelfPaths:true,paths:[],enableTimeout:false,dataTimeout:5,color:"contrast",zonesOnlyPaths:false,putEnable:true,putMomentary:false,multiChildCtrls:[]};runtime=w(p,{optional:true});streams=w(rt,{optional:true});dashboard=w(G);signalkRequestsService=w(T);toast=w(lt$1);canvas=w(R);switchControls=vt([]);labelColor=vt("");noTitleClass=Dt(()=>this.runtime?.options()?.showLabel===false?"widgets-container-no-title":"widgets-container");nbCtrl=null;ctrlDimensions={width:0,height:0};hostSize={width:0,height:0};skRequestSub=new j;measureCtx=typeof document<"u"?document.createElement("canvas").getContext("2d"):null;constructor(){Fa(()=>{let o=this.theme(),e=this.runtime?.options();!o||!e||ge$1(()=>{this.labelColor.set(c(e.color??"contrast",o).dim);});}),Fa(()=>{let o=this.runtime?.options();if(!o)return;let e=(o.multiChildCtrls||[]).map(t=>z(G$1({},t),{isNumeric:t.isNumeric??false}));this.nbCtrl=e.length,ge$1(()=>{this.switchControls.set(e),this.updateCtrlDimensions();let t=this.streams;t&&e.forEach(n=>{let l=o.paths;if(!l?.length)return;let d=l.findIndex(R=>R.pathID===n.pathID);d<0||!l[d]?.path||t.observe(String(d),R=>{let w=R?.data?.value,L=n.isNumeric?[0,1,null].includes(w)?!!w:n.value:w;this.switchControls.update(E=>{let N=E.findIndex(we=>we.pathID===n.pathID);if(N===-1)return E;let ve=z(G$1({},E[N]),{value:L});return [...E.slice(0,N),ve,...E.slice(N+1)]});});});});});}onResized(o){this.hostSize={width:o.contentRect.width,height:o.contentRect.height},this.updateCtrlDimensions();}updateCtrlDimensions(){let o=this.hostSize.width,e=this.hostSize.height,t=this.switchControls();if(!o||!e||!t.length){this.ctrlDimensions={width:o,height:0};return}let n=this.measureCtx?ge(o,e,t,(l,d)=>(this.measureCtx.font=`700 ${d}px ${this.canvas.DEFAULT_FONT}`,this.measureCtx.measureText(l).width)):Math.max(1,Math.floor(e/t.length));this.ctrlDimensions={width:o,height:n};}toggle(o){let e=this.runtime?.options();if(!e?.putEnable)return;let t=e.paths;if(!t)return;let n=t.findIndex(d=>d.pathID===o.pathID);if(n<0)return;let l=t[n].path;l&&(o.isNumeric?this.signalkRequestsService.putRequest(l,o.value?1:0,this.id()):this.signalkRequestsService.putRequest(l,o.value,this.id()));}ngOnDestroy(){this.skRequestSub?.unsubscribe();}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=JD({type:i,selectors:[["widget-boolean-switch"]],inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:7,vars:5,consts:[["widgetContainer",""],[3,"text","color"],["kipResizeObserver","",3,"resizeChange"],[1,"widgetOverlay"],[1,"svg-widget",3,"controlData","theme","dimensions"],[1,"svg-widget",3,"toggleClick","controlData","theme","dimensions"]],template:function(e,t){if(e&1&&(wg(0),_w(1,_e,1,2,"widget-title",1),Pi(2,"div",2,0),Qh("resizeChange",function(l){return t.onResized(l)}),xw(4,Ee,4,1,"ng-container",null,Sw),ul(),_w(6,Te,1,0,"div",3)),e&2){let n=NT(t.runtime==null?null:t.runtime.options());EE(),Mw(n?.showLabel?1:-1),EE(),pT(t.noTitleClass()),EE(2),Aw(t.switchControls()),EE(2),Mw(t.dashboard.isDashboardStatic()?-1:6);}},dependencies:[u,be,Ce,fe,x],styles:[".widgets-container[_ngcontent-%COMP%]{display:block;position:absolute;left:0;right:0;top:15%;height:85%;width:100%;overflow:hidden;z-index:20}.widgets-container-no-title[_ngcontent-%COMP%]{display:block;position:absolute;left:0;right:0;padding:3px 0 0;height:100%;width:100%;overflow:hidden;z-index:20}.svg-widget[_ngcontent-%COMP%]{display:flex}.widgetOverlay[_ngcontent-%COMP%]{position:absolute;width:100%;height:100%;right:0;bottom:0;color:transparent;z-index:21}"]})}return i})();
|
|
1
|
+
import {f}from'./chunk-H9_eqTYx.js';import {u}from'./chunk-Be5KcT7R.js';import {d1 as Hj,w,du as p,dv as rt,a as G,cu as T,aR as lt$1,aZ as R,v as vt,D as Dt,aH as j,F as Fa,dn as ge$1,cw as z,cv as G$1,J as JD,dC as x,dT as wg,_ as _w,P as Pi,k as Qh,X as xw,cs as Sw,u as ul,dU as NT,e as EE,M as Mw,t as pT,Y as Aw,dV as Vj,cn as wd,ci as dl,dW as Zh,cp as Uh,cj as fl,cV as Td,T as TT,an as Hh,d as ig,bp as gl,bs as dp,c as $h,g as qw,dX as xT,B as Bh,cS as pl,cT as hl,h as Fw,l as ud,m as dd}from'./main-F7NMHHV4.js';import {c}from'./chunk-CRy9Da7a.js';function ye(i){return Math.max(i,1)/35}function v(i,u,o){let e=Math.max(u,0),t=ye(o),n=i==="2"?0:48*t,l=i==="2"?12*t:6*t,d=i==="2"?12*t:n,C=Math.max(0,e-d-l);return {labelX:d,labelWidth:C,labelFontSize:14*t,shapeLaneWidth:n,switchTrackX:6*t,switchTrackY:6*t,switchTrackWidth:37.714306*t,switchTrackHeight:22*t,switchTrackRadius:11*t,switchKnobOffX:17.5*t,switchKnobOnX:32.5*t,switchKnobY:17*t,switchKnobRadius:10*t,switchStrokeWidth:1.5*t,lightCenterX:24.5*t,lightCenterY:17.5*t,lightRadius:13.5*t,lightStrokeWidth:3*t,buttonX:6*t,buttonY:5*t,buttonWidth:Math.max(0,e-12*t),buttonHeight:25.025183*t,buttonRadius:3.6672263*t}}function ge(i,u,o,e){if(o.length===0)return 0;let t=Math.max(1,Math.floor(u/o.length)),n=1,l=t,d=1;for(;n<=l;){let C=Math.floor((n+l)/2);if(o.every(w=>{let L=v(w.type,i,C);return e(w.ctrlLabel??"",L.labelFontSize)<=L.labelWidth})){d=C,n=C+1;continue}l=C-1;}return Math.min(d,t)}var fe=(()=>{class i{data=Hj(null,{alias:"controlData"});theme=Hj(null);dimensions=Hj.required();toggleClick=Vj();ctrlState=null;ctrlColor="";oldTheme=null;offColor=null;labelColor=null;valueColor=null;constructor(){}ngDoCheck(){let o=this.data();if(!o)return;o.value!=this.ctrlState&&(this.ctrlState=o.value),o.color!=this.ctrlColor&&(this.ctrlColor=o.color,this.getColors(o.color));let e=this.theme();this.oldTheme!=e&&(this.oldTheme=e,this.getColors(o.color));}toggle(o){let e=this.data();e&&(e.value=o,this.toggleClick.emit(e));}get layout(){let o=this.dimensions();return v("3",o.width,o.height)}get isEnabled(){return !!this.ctrlState}getColors(o){let e=this.theme();if(e)switch(o){case "contrast":this.offColor=e.contrastDimmer,this.labelColor=e.contrastDim,this.valueColor=e.contrast;break;case "blue":this.offColor=e.blueDimmer,this.labelColor=e.blueDim,this.valueColor=e.blue;break;case "green":this.offColor=e.greenDimmer,this.labelColor=e.greenDim,this.valueColor=e.green;break;case "pink":this.offColor=e.pinkDimmer,this.labelColor=e.pinkDim,this.valueColor=e.pink;break;case "orange":this.offColor=e.orangeDimmer,this.labelColor=e.orangeDim,this.valueColor=e.orange;break;case "purple":this.offColor=e.purpleDimmer,this.labelColor=e.purpleDim,this.valueColor=e.purple;break;case "grey":this.offColor=e.greyDimmer,this.labelColor=e.greyDim,this.valueColor=e.grey;break;case "yellow":this.offColor=e.yellowDimmer,this.labelColor=e.yellowDim,this.valueColor=e.yellow;break;default:this.offColor=e.contrastDimmer,this.labelColor=e.contrastDim,this.valueColor=e.contrast;break}}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=JD({type:i,selectors:[["app-svg-boolean-light"]],inputs:{data:[1,"controlData","data"],theme:[1,"theme"],dimensions:[1,"dimensions"]},outputs:{toggleClick:"toggleClick"},decls:21,vars:33,consts:[["version","1.1","id","svg9","xmlns","http://www.w3.org/2000/svg",0,"xmlns","svg","http://www.w3.org/2000/svg"],["id","defs1"],["id","lightSpecular","cx","36%","cy","32%","r","68%"],["offset","0","stop-color","#ffffff","stop-opacity","0.5"],["offset","0.55","stop-color","#ffffff","stop-opacity","0.16"],["offset","1","stop-color","#ffffff","stop-opacity","0"],["id","lightDepth","cx","68%","cy","70%","r","68%"],["offset","0","stop-color","#000000","stop-opacity","0"],["offset","0.62","stop-color","#000000","stop-opacity","0.05"],["offset","1","stop-color","#000000","stop-opacity","0.22"],["id","lightRim","x1","0","y1","0","x2","1","y2","1"],["offset","0","stop-color","#ffffff","stop-opacity","0.36"],["offset","0.45","stop-color","#ffffff","stop-opacity","0.09"],["offset","1","stop-color","#000000","stop-opacity","0.3"],["y","0"],["xmlns","http://www.w3.org/1999/xhtml",2,"width","100%","height","100%","display","flex","align-items","center","justify-content","flex-start","font-family","Roboto,sans-serif","font-weight","700","line-height","1","white-space","nowrap","overflow","hidden","text-overflow","clip"],[2,"stroke","url(#lightRim)","stroke-opacity","0.4","stroke-dasharray","none"],["fill","url(#lightSpecular)"],["fill","url(#lightDepth)"],["fill","#ffffff"]],template:function(e,t){e&1&&(wd(),dl(0,"svg",0)(1,"defs",1)(2,"radialGradient",2),Uh(3,"stop",3)(4,"stop",4)(5,"stop",5),fl(),dl(6,"radialGradient",6),Uh(7,"stop",7)(8,"stop",8)(9,"stop",9),fl(),dl(10,"linearGradient",10),Uh(11,"stop",11)(12,"stop",12)(13,"stop",13),fl()(),dl(14,"foreignObject",14),Td(),dl(15,"div",15),TT(16),fl()(),wd(),Uh(17,"circle",16)(18,"circle",17)(19,"circle",18)(20,"ellipse",19),fl()),e&2&&(Hh("height",t.dimensions().height)("width",t.dimensions().width)("viewBox","0 0 "+t.dimensions().width+" "+t.dimensions().height),EE(14),Hh("x",t.layout.labelX)("width",t.layout.labelWidth)("height",t.dimensions().height),EE(),ig("color",t.isEnabled?t.valueColor:t.labelColor)("opacity",t.isEnabled?1:.6)("font-size",t.layout.labelFontSize,"px")("text-shadow",t.isEnabled?"0 0 4px currentColor, 0 0 4px currentColor":"none"),EE(),gl(" ",t.data()?.ctrlLabel," "),EE(),Hh("cx",t.layout.lightCenterX)("cy",t.layout.lightCenterY)("r",t.layout.lightRadius)("fill",t.isEnabled?t.valueColor:t.offColor)("stroke-width",t.layout.lightStrokeWidth),EE(),Hh("cx",t.layout.lightCenterX)("cy",t.layout.lightCenterY)("r",t.layout.lightRadius)("opacity",t.isEnabled?.62:.42),EE(),Hh("cx",t.layout.lightCenterX)("cy",t.layout.lightCenterY)("r",t.layout.lightRadius)("opacity",t.isEnabled?.62:.48),EE(),Hh("cx",t.layout.lightCenterX-t.layout.lightRadius*.32)("cy",t.layout.lightCenterY-t.layout.lightRadius*.34)("rx",t.layout.lightRadius*.34)("ry",t.layout.lightRadius*.2)("opacity",t.isEnabled?.2:.12));},encapsulation:2})}return i})();var Ce=(()=>{class i{data=Hj(null,{alias:"controlData"});theme=Hj(null);dimensions=Hj.required();toggleClick=Vj();oldTheme=null;emitIntervalId=null;pressed=false;isSwiping=false;pointerStartX=0;pointerStartY=0;labelColorEnabled=null;labelColorDisabled=null;valueColor=null;ctrlColor="";ngDoCheck(){let o=this.data();if(!o)return;o.color!=this.ctrlColor&&(this.ctrlColor=o.color,this.getColors(o.color));let e=this.theme();this.oldTheme!=e&&(this.oldTheme=e,this.getColors(o.color));}handleClickDown(o){let e=this.data();if(!e)return;this.isSwiping=false,this.pointerStartX=o.clientX,this.pointerStartY=o.clientY,this.clearTimers(),this.pressed=true;let t=dp(e);t.value=this.pressed,this.toggleClick.emit(t),this.emitIntervalId=setInterval(()=>{this.toggleClick.emit(t);},100);}handlePointerMove(o){let e=Math.abs(o.clientX-this.pointerStartX),t=Math.abs(o.clientY-this.pointerStartY);(e>30||t>30)&&(this.isSwiping=true,this.pressed=false,this.clearTimers());}handleClickUp(){this.isSwiping&&(this.isSwiping=false),this.pressed=false,this.clearTimers();}handlePointerCancel(){this.isSwiping=false,this.pressed=false,this.clearTimers();}get layout(){let o=this.dimensions();return v("2",o.width,o.height)}get isPressed(){return this.pressed}getColors(o){let e=this.theme();if(e)switch(o){case "contrast":this.labelColorEnabled="black",this.labelColorDisabled=e.contrastDim,this.valueColor=e.contrast;break;case "blue":this.labelColorEnabled=e.contrast,this.labelColorDisabled=e.blueDim,this.valueColor=e.blue;break;case "green":this.labelColorEnabled=e.contrast,this.labelColorDisabled=e.greenDim,this.valueColor=e.green;break;case "pink":this.labelColorEnabled=e.contrast,this.labelColorDisabled=e.pinkDim,this.valueColor=e.pink;break;case "orange":this.labelColorEnabled=e.contrast,this.labelColorDisabled=e.orangeDim,this.valueColor=e.orange;break;case "purple":this.labelColorEnabled=e.contrast,this.labelColorDisabled=e.purpleDim,this.valueColor=e.purple;break;case "grey":this.labelColorEnabled=e.contrast,this.labelColorDisabled=e.greyDim,this.valueColor=e.grey;break;case "yellow":this.labelColorEnabled=e.contrast,this.labelColorDisabled=e.yellowDim,this.valueColor=e.yellow;break;default:this.labelColorEnabled="black",this.labelColorDisabled=e.contrastDim,this.valueColor=e.contrast;break}}clearTimers(){this.emitIntervalId&&(clearInterval(this.emitIntervalId),this.emitIntervalId=null);}ngOnDestroy(){this.clearTimers();}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=JD({type:i,selectors:[["app-svg-boolean-button"]],inputs:{data:[1,"controlData","data"],theme:[1,"theme"],dimensions:[1,"dimensions"]},outputs:{toggleClick:"toggleClick"},decls:6,vars:19,consts:[["version","1.1","id","svg9","xmlns","http://www.w3.org/2000/svg",0,"xmlns","svg","http://www.w3.org/2000/svg",3,"pointerup","pointerleave","pointerdown","pointermove","pointercancel"],["x","0","y","0","pointer-events","all",2,"display","inline","opacity","1","fill","transparent","fill-opacity","1","stroke","none","stroke-width","0"],[2,"display","inline","mix-blend-mode","normal","stroke","black","stroke-width","1.5","stroke-opacity","0.2"],["y","0",2,"pointer-events","none"],["xmlns","http://www.w3.org/1999/xhtml",2,"width","100%","height","100%","display","flex","align-items","center","justify-content","center","font-family","Roboto,sans-serif","font-weight","700","line-height","1","white-space","nowrap","overflow","hidden","text-overflow","clip"]],template:function(e,t){e&1&&(wd(),dl(0,"svg",0),Zh("pointerup",function(){return t.handleClickUp()})("pointerleave",function(){return t.handleClickUp()})("pointerdown",function(l){return t.handleClickDown(l)})("pointermove",function(l){return t.handlePointerMove(l)})("pointercancel",function(){return t.handlePointerCancel()}),Uh(1,"rect",1)(2,"rect",2),dl(3,"foreignObject",3),Td(),dl(4,"div",4),TT(5),fl()()()),e&2&&(Hh("height",t.dimensions().height)("width",t.dimensions().width)("viewBox","0 0 "+t.dimensions().width+" "+t.dimensions().height),EE(),Hh("width",t.dimensions().width)("height",t.dimensions().height),EE(),Hh("x",t.layout.buttonX)("y",t.layout.buttonY)("width",t.layout.buttonWidth)("height",t.layout.buttonHeight)("rx",t.layout.buttonRadius)("fill",t.isPressed?t.valueColor:t.labelColorDisabled),EE(),Hh("x",t.layout.labelX)("width",t.layout.labelWidth)("height",t.dimensions().height),EE(),ig("color",t.isPressed?t.labelColorEnabled:t.labelColorDisabled)("font-size",t.layout.labelFontSize,"px"),EE(),gl(" ",t.data()?.ctrlLabel," "));},encapsulation:2})}return i})();var be=(()=>{class i{data=Hj(null,{alias:"controlData"});theme=Hj(null);dimensions=Hj.required();toggleClick=Vj();ctrlState=null;oldTheme=null;swipeGuard=f();offColor=null;labelColor=null;valueColor=null;ctrlColor="";constructor(){}ngDoCheck(){let o=this.data();if(!o)return;o.value!=this.ctrlState&&(this.ctrlState=o.value),o.color!=this.ctrlColor&&(this.ctrlColor=o.color,this.getColors(o.color));let e=this.theme();this.oldTheme!=e&&(this.oldTheme=e,this.getColors(o.color));}onPointerDown(o){this.swipeGuard.onPointerDown(o);}onPointerMove(o){this.swipeGuard.onPointerMove(o);}onPointerUp(o,e){this.swipeGuard.onPointerUp(o)&&this.toggle(e);}onPointerCancel(o){this.swipeGuard.onPointerCancel(o);}get layout(){let o=this.dimensions();return v("1",o.width,o.height)}get isEnabled(){return !!this.ctrlState}get nextState(){return !this.isEnabled}toggle(o){let e=this.data();e&&(e.value=o,this.toggleClick.emit(e));}getColors(o){let e=this.theme();if(e)switch(o){case "contrast":this.offColor=e.contrastDimmer,this.labelColor=e.contrastDim,this.valueColor=e.contrast;break;case "blue":this.offColor=e.blueDimmer,this.labelColor=e.blueDim,this.valueColor=e.blue;break;case "green":this.offColor=e.greenDimmer,this.labelColor=e.greenDim,this.valueColor=e.green;break;case "pink":this.offColor=e.pinkDimmer,this.labelColor=e.pinkDim,this.valueColor=e.pink;break;case "orange":this.offColor=e.orangeDimmer,this.labelColor=e.orangeDim,this.valueColor=e.orange;break;case "purple":this.offColor=e.purpleDimmer,this.labelColor=e.purpleDim,this.valueColor=e.purple;break;case "grey":this.offColor=e.greyDimmer,this.labelColor=e.greyDim,this.valueColor=e.grey;break;case "yellow":this.offColor=e.yellowDimmer,this.labelColor=e.yellowDim,this.valueColor=e.yellow;break;default:this.offColor=e.contrastDimmer,this.labelColor=e.contrastDim,this.valueColor=e.contrast;break}}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=JD({type:i,selectors:[["app-svg-boolean-switch"]],inputs:{data:[1,"controlData","data"],theme:[1,"theme"],dimensions:[1,"dimensions"]},outputs:{toggleClick:"toggleClick"},decls:12,vars:28,consts:[["version","1.1","id","svg9","xmlns","http://www.w3.org/2000/svg",0,"xmlns","svg","http://www.w3.org/2000/svg",3,"pointerdown","pointermove","pointerup","pointercancel"],["id","defs1"],["id","linearGradient32"],["offset","0",2,"stop-color","#000000","stop-opacity","0.88486844"],["offset","1",2,"stop-color","#f7f7f7","stop-opacity","0.17763157"],[0,"xlink","href","#linearGradient32","id","linearGradient33","x1","0","y1","0","x2","1","y2","1"],["x","0","y","0","pointer-events","all",2,"display","inline","opacity","0.001","fill","black","fill-opacity","0.001","stroke","none","stroke-width","0"],["y","0",2,"pointer-events","none"],[2,"width","100%","height","100%","display","flex","align-items","center","justify-content","flex-start","font-family","Roboto,sans-serif","font-weight","700","line-height","1","white-space","nowrap","overflow","hidden","text-overflow","clip"],[2,"stroke-width","1.5","stroke","black","stroke-opacity","0.12"],[2,"stroke","url(#linearGradient33)","stroke-opacity","0.4","stroke-dasharray","none"]],template:function(e,t){e&1&&(wd(),dl(0,"svg",0),Zh("pointerdown",function(l){return t.onPointerDown(l)})("pointermove",function(l){return t.onPointerMove(l)})("pointerup",function(l){return t.onPointerUp(l,t.nextState)})("pointercancel",function(l){return t.onPointerCancel(l)}),dl(1,"defs",1)(2,"linearGradient",2),Uh(3,"stop",3)(4,"stop",4),fl(),Uh(5,"linearGradient",5),fl(),Uh(6,"rect",6),dl(7,"foreignObject",7),Td(),dl(8,"div",8),TT(9),fl()(),wd(),Uh(10,"rect",9)(11,"circle",10),fl()),e&2&&(Hh("height",t.dimensions().height)("width",t.dimensions().width)("viewBox","0 0 "+t.dimensions().width+" "+t.dimensions().height),EE(6),Hh("width",t.dimensions().width)("height",t.dimensions().height),EE(),Hh("x",t.layout.labelX)("width",t.layout.labelWidth)("height",t.dimensions().height),EE(),ig("color",t.isEnabled?t.valueColor:t.labelColor)("opacity",t.isEnabled?1:.6)("font-size",t.layout.labelFontSize,"px")("text-shadow",t.isEnabled?"0 0 4px currentColor, 0 0 4px currentColor":"none"),EE(),gl(" ",t.data()?.ctrlLabel," "),EE(),Hh("x",t.layout.switchTrackX)("y",t.layout.switchTrackY)("width",t.layout.switchTrackWidth)("height",t.layout.switchTrackHeight)("rx",t.layout.switchTrackRadius)("fill",t.isEnabled?t.labelColor:t.offColor),EE(),Hh("cx",t.isEnabled?t.layout.switchKnobOnX:t.layout.switchKnobOffX)("cy",t.layout.switchKnobY)("r",t.layout.switchKnobRadius)("fill",t.isEnabled?t.valueColor:t.offColor)("stroke-width",t.layout.switchStrokeWidth));},encapsulation:2})}return i})();function _e(i,u){if(i&1&&$h(0,"widget-title",1),i&2){let o=qw(),e=xT(0);Bh("text",(e==null?null:e.displayName)??"")("color",o.labelColor());}}function De(i,u){if(i&1){let o=Fw();Pi(0,"app-svg-boolean-switch",5),Qh("toggleClick",function(t){ud(o);let n=qw(2);return dd(n.toggle(t))}),ul();}if(i&2){let o=qw().$implicit,e=qw();Bh("controlData",o)("theme",e.theme())("dimensions",e.ctrlDimensions);}}function Se(i,u){if(i&1){let o=Fw();Pi(0,"app-svg-boolean-button",5),Qh("toggleClick",function(t){ud(o);let n=qw(2);return dd(n.toggle(t))}),ul();}if(i&2){let o=qw().$implicit,e=qw();Bh("controlData",o)("theme",e.theme())("dimensions",e.ctrlDimensions);}}function ke(i,u){if(i&1){let o=Fw();Pi(0,"app-svg-boolean-light",5),Qh("toggleClick",function(t){ud(o);let n=qw(2);return dd(n.toggle(t))}),ul();}if(i&2){let o=qw().$implicit,e=qw();Bh("controlData",o)("theme",e.theme())("dimensions",e.ctrlDimensions);}}function Ee(i,u){if(i&1&&(pl(0),_w(1,De,1,3,"app-svg-boolean-switch",4)(2,Se,1,3,"app-svg-boolean-button",4)(3,ke,1,3,"app-svg-boolean-light",4),hl()),i&2){let o,e=u.$implicit;EE(),Mw((o=e.type)==="1"?1:o==="2"?2:o==="3"?3:-1);}}function Te(i,u){i&1&&$h(0,"div",3);}var lt=(()=>{class i{id=Hj.required();type=Hj.required();theme=Hj.required();static DEFAULT_CONFIG={displayName:"Switch Panel Label",showLabel:true,filterSelfPaths:true,paths:[],enableTimeout:false,dataTimeout:5,color:"contrast",zonesOnlyPaths:false,putEnable:true,putMomentary:false,multiChildCtrls:[]};runtime=w(p,{optional:true});streams=w(rt,{optional:true});dashboard=w(G);signalkRequestsService=w(T);toast=w(lt$1);canvas=w(R);switchControls=vt([]);labelColor=vt("");noTitleClass=Dt(()=>this.runtime?.options()?.showLabel===false?"widgets-container-no-title":"widgets-container");nbCtrl=null;ctrlDimensions={width:0,height:0};hostSize={width:0,height:0};skRequestSub=new j;measureCtx=typeof document<"u"?document.createElement("canvas").getContext("2d"):null;constructor(){Fa(()=>{let o=this.theme(),e=this.runtime?.options();!o||!e||ge$1(()=>{this.labelColor.set(c(e.color??"contrast",o).dim);});}),Fa(()=>{let o=this.runtime?.options();if(!o)return;let e=(o.multiChildCtrls||[]).map(t=>z(G$1({},t),{isNumeric:t.isNumeric??false}));this.nbCtrl=e.length,ge$1(()=>{this.switchControls.set(e),this.updateCtrlDimensions();let t=this.streams;t&&e.forEach(n=>{let l=o.paths;if(!l?.length)return;let d=l.findIndex(R=>R.pathID===n.pathID);d<0||!l[d]?.path||t.observe(String(d),R=>{let w=R?.data?.value,L=n.isNumeric?[0,1,null].includes(w)?!!w:n.value:w;this.switchControls.update(E=>{let N=E.findIndex(we=>we.pathID===n.pathID);if(N===-1)return E;let ve=z(G$1({},E[N]),{value:L});return [...E.slice(0,N),ve,...E.slice(N+1)]});});});});});}onResized(o){this.hostSize={width:o.contentRect.width,height:o.contentRect.height},this.updateCtrlDimensions();}updateCtrlDimensions(){let o=this.hostSize.width,e=this.hostSize.height,t=this.switchControls();if(!o||!e||!t.length){this.ctrlDimensions={width:o,height:0};return}let n=this.measureCtx?ge(o,e,t,(l,d)=>(this.measureCtx.font=`700 ${d}px ${this.canvas.DEFAULT_FONT}`,this.measureCtx.measureText(l).width)):Math.max(1,Math.floor(e/t.length));this.ctrlDimensions={width:o,height:n};}toggle(o){let e=this.runtime?.options();if(!e?.putEnable)return;let t=e.paths;if(!t)return;let n=t.findIndex(d=>d.pathID===o.pathID);if(n<0)return;let l=t[n].path;l&&(o.isNumeric?this.signalkRequestsService.putRequest(l,o.value?1:0,this.id()):this.signalkRequestsService.putRequest(l,o.value,this.id()));}ngOnDestroy(){this.skRequestSub?.unsubscribe();}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=JD({type:i,selectors:[["widget-boolean-switch"]],inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"]},decls:7,vars:5,consts:[["widgetContainer",""],[3,"text","color"],["kipResizeObserver","",3,"resizeChange"],[1,"widgetOverlay"],[1,"svg-widget",3,"controlData","theme","dimensions"],[1,"svg-widget",3,"toggleClick","controlData","theme","dimensions"]],template:function(e,t){if(e&1&&(wg(0),_w(1,_e,1,2,"widget-title",1),Pi(2,"div",2,0),Qh("resizeChange",function(l){return t.onResized(l)}),xw(4,Ee,4,1,"ng-container",null,Sw),ul(),_w(6,Te,1,0,"div",3)),e&2){let n=NT(t.runtime==null?null:t.runtime.options());EE(),Mw(n?.showLabel?1:-1),EE(),pT(t.noTitleClass()),EE(2),Aw(t.switchControls()),EE(2),Mw(t.dashboard.isDashboardStatic()?-1:6);}},dependencies:[u,be,Ce,fe,x],styles:[".widgets-container[_ngcontent-%COMP%]{display:block;position:absolute;left:0;right:0;top:15%;height:85%;width:100%;overflow:hidden;z-index:20}.widgets-container-no-title[_ngcontent-%COMP%]{display:block;position:absolute;left:0;right:0;padding:3px 0 0;height:100%;width:100%;overflow:hidden;z-index:20}.svg-widget[_ngcontent-%COMP%]{display:flex}.widgetOverlay[_ngcontent-%COMP%]{position:absolute;width:100%;height:100%;right:0;bottom:0;color:transparent;z-index:21}"]})}return i})();
|
|
2
2
|
export{lt as WidgetBooleanSwitchComponent};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import {dx as n$1}from'./main-
|
|
1
|
+
import {dx as n$1}from'./main-F7NMHHV4.js';function k(g,s,l,m,f,r,b=false){let a=[],c=[...g].sort((o,n)=>(o.lower??-1/0)-(n.lower??-1/0));for(let o of c){let n=f,t=r,i;switch(o.state){case n$1.Emergency:i=s.zoneEmergency;break;case n$1.Alarm:i=s.zoneAlarm;break;case n$1.Warn:i=s.zoneWarn;break;case n$1.Alert:i=s.zoneAlert;break;case n$1.Nominal:i=s.zoneNominal;break;default:i="rgba(0,0,0,0)";}if(o.lower==null?n=f:n=m.convertToUnit(l,o.lower)??f,o.upper==null?t=r:t=m.convertToUnit(l,o.upper)??r,!(!Number.isFinite(n)||!Number.isFinite(t))&&!(t<f||n>r)){if(n=Math.max(n,f),t>r){t=r,a.push({from:n,to:t,color:i});break}a.push({from:n,to:t,color:i});}}return b&&(a=a.map(o=>({from:r-o.to,to:r-o.from,color:o.color}))),a}export{k};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import {e as e$1}from'./chunk-DPnbM-aB.js';import {g as ge$1}from'./chunk-TakPRI3t.js';import {e9 as a,d1 as Hj,w,du as p,aS as De,bu as ut,ea as K,aY as xe,$ as $j,v as vt,D as Dt,dx as n$1,F as Fa,dn as ge,a_ as Gp,av as _t,cv as G,J as JD,y as yt,dC as x,_ as _w,cn as wd,c as $h,M as Mw,e as EE,s as sg,f as eg,K as Kw,g as qw,B as Bh,P as Pi,T as TT,u as ul}from'./main-YKDNK5VZ.js';import {c,e}from'./chunk-BIb-xYiS.js';function H(i){return function(){return i}}var Mt=Math.abs,_=Math.atan2,z=Math.cos,qt=Math.max,rt=Math.min,$=Math.sin,W=Math.sqrt,S=1e-12,Z=Math.PI,tt=Z/2,Xt=2*Z;function jt(i){return i>1?0:i<-1?Z:Math.acos(i)}function Tt(i){return i>=1?tt:i<=-1?-tt:Math.asin(i)}var Ct=Math.PI,At=2*Ct,L=1e-6,ae=At-L;function Zt(i){this._+=i[0];for(let t=1,a=i.length;t<a;++t)this._+=arguments[t]+i[t];}function re(i){let t=Math.floor(i);if(!(t>=0))throw new Error(`invalid digits: ${i}`);if(t>15)return Zt;let a=10**t;return function(r){this._+=r[0];for(let e=1,n=r.length;e<n;++e)this._+=Math.round(arguments[e]*a)/a+r[e];}}var F=class{constructor(t){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=t==null?Zt:re(t);}moveTo(t,a){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+a}`;}closePath(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`);}lineTo(t,a){this._append`L${this._x1=+t},${this._y1=+a}`;}quadraticCurveTo(t,a,r,e){this._append`Q${+t},${+a},${this._x1=+r},${this._y1=+e}`;}bezierCurveTo(t,a,r,e,n,o){this._append`C${+t},${+a},${+r},${+e},${this._x1=+n},${this._y1=+o}`;}arcTo(t,a,r,e,n){if(t=+t,a=+a,r=+r,e=+e,n=+n,n<0)throw new Error(`negative radius: ${n}`);let o=this._x1,l=this._y1,m=r-t,d=e-a,s=o-t,g=l-a,c=s*s+g*g;if(this._x1===null)this._append`M${this._x1=t},${this._y1=a}`;else if(c>L)if(!(Math.abs(g*m-d*s)>L)||!n)this._append`L${this._x1=t},${this._y1=a}`;else {let y=r-o,v=e-l,k=m*m+d*d,R=y*y+v*v,x=Math.sqrt(k),h=Math.sqrt(c),M=n*Math.tan((Ct-Math.acos((k+c-R)/(2*x*h)))/2),T=M/h,f=M/x;Math.abs(T-1)>L&&this._append`L${t+T*s},${a+T*g}`,this._append`A${n},${n},0,0,${+(g*y>s*v)},${this._x1=t+f*m},${this._y1=a+f*d}`;}}arc(t,a,r,e,n,o){if(t=+t,a=+a,r=+r,o=!!o,r<0)throw new Error(`negative radius: ${r}`);let l=r*Math.cos(e),m=r*Math.sin(e),d=t+l,s=a+m,g=1^o,c=o?e-n:n-e;this._x1===null?this._append`M${d},${s}`:(Math.abs(this._x1-d)>L||Math.abs(this._y1-s)>L)&&this._append`L${d},${s}`,r&&(c<0&&(c=c%At+At),c>ae?this._append`A${r},${r},0,1,${g},${t-l},${a-m}A${r},${r},0,1,${g},${this._x1=d},${this._y1=s}`:c>L&&this._append`A${r},${r},0,${+(c>=Ct)},${g},${this._x1=t+r*Math.cos(n)},${this._y1=a+r*Math.sin(n)}`);}rect(t,a,r,e){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+a}h${r=+r}v${+e}h${-r}Z`;}toString(){return this._}};function Jt(i){let t=3;return i.digits=function(a){if(!arguments.length)return t;if(a==null)t=null;else {let r=Math.floor(a);if(!(r>=0))throw new RangeError(`invalid digits: ${a}`);t=r;}return i},()=>new F(t)}function ne(i){return i.innerRadius}function ie(i){return i.outerRadius}function se(i){return i.startAngle}function oe(i){return i.endAngle}function le(i){return i&&i.padAngle}function ce(i,t,a,r,e,n,o,l){var m=a-i,d=r-t,s=o-e,g=l-n,c=g*m-s*d;if(!(c*c<S))return c=(s*(t-n)-g*(i-e))/c,[i+c*m,t+c*d]}function nt(i,t,a,r,e,n,o){var l=i-a,m=t-r,d=(o?n:-n)/W(l*l+m*m),s=d*m,g=-d*l,c=i+s,y=t+g,v=a+s,k=r+g,R=(c+v)/2,x=(y+k)/2,h=v-c,M=k-y,T=h*h+M*M,f=e-n,u=c*k-v*y,N=(M<0?-1:1)*W(qt(0,f*f*T-u*u)),w=(u*M-h*N)/T,E=(-u*h-M*N)/T,B=(u*M+h*N)/T,C=(-u*h+M*N)/T,I=w-R,p=E-x,b=B-R,O=C-x;return I*I+p*p>b*b+O*O&&(w=B,E=C),{cx:w,cy:E,x01:-s,y01:-g,x11:w*(e/f-1),y11:E*(e/f-1)}}function Bt(){var i=ne,t=ie,a=H(0),r=null,e=se,n=oe,o=le,l=null,m=Jt(d);function d(){var s,g,c=+i.apply(this,arguments),y=+t.apply(this,arguments),v=e.apply(this,arguments)-tt,k=n.apply(this,arguments)-tt,R=Mt(k-v),x=k>v;if(l||(l=s=m()),y<c&&(g=y,y=c,c=g),!(y>S))l.moveTo(0,0);else if(R>Xt-S)l.moveTo(y*z(v),y*$(v)),l.arc(0,0,y,v,k,!x),c>S&&(l.moveTo(c*z(k),c*$(k)),l.arc(0,0,c,k,v,x));else {var h=v,M=k,T=v,f=k,u=R,N=R,w=o.apply(this,arguments)/2,E=w>S&&(r?+r.apply(this,arguments):W(c*c+y*y)),B=rt(Mt(y-c)/2,+a.apply(this,arguments)),C=B,I=B,p,b;if(E>S){var O=Tt(E/c*$(w)),U=Tt(E/y*$(w));(u-=O*2)>S?(O*=x?1:-1,T+=O,f-=O):(u=0,T=f=(v+k)/2),(N-=U*2)>S?(U*=x?1:-1,h+=U,M-=U):(N=0,h=M=(v+k)/2);}var A=y*z(h),P=y*$(h),K=c*z(f),V=c*$(f);if(B>S){var Y=y*z(M),q=y*$(M),it=c*z(T),st=c*$(T),G;if(R<Z)if(G=ce(A,P,it,st,Y,q,K,V)){var ot=A-G[0],lt=P-G[1],ct=Y-G[0],dt=q-G[1],_t=1/$(jt((ot*ct+lt*dt)/(W(ot*ot+lt*lt)*W(ct*ct+dt*dt)))/2),Rt=W(G[0]*G[0]+G[1]*G[1]);C=rt(B,(c-Rt)/(_t-1)),I=rt(B,(y-Rt)/(_t+1));}else C=I=0;}N>S?I>S?(p=nt(it,st,A,P,y,I,x),b=nt(Y,q,K,V,y,I,x),l.moveTo(p.cx+p.x01,p.cy+p.y01),I<B?l.arc(p.cx,p.cy,I,_(p.y01,p.x01),_(b.y01,b.x01),!x):(l.arc(p.cx,p.cy,I,_(p.y01,p.x01),_(p.y11,p.x11),!x),l.arc(0,0,y,_(p.cy+p.y11,p.cx+p.x11),_(b.cy+b.y11,b.cx+b.x11),!x),l.arc(b.cx,b.cy,I,_(b.y11,b.x11),_(b.y01,b.x01),!x))):(l.moveTo(A,P),l.arc(0,0,y,h,M,!x)):l.moveTo(A,P),!(c>S)||!(u>S)?l.lineTo(K,V):C>S?(p=nt(K,V,Y,q,c,-C,x),b=nt(A,P,it,st,c,-C,x),l.lineTo(p.cx+p.x01,p.cy+p.y01),C<B?l.arc(p.cx,p.cy,C,_(p.y01,p.x01),_(b.y01,b.x01),!x):(l.arc(p.cx,p.cy,C,_(p.y01,p.x01),_(p.y11,p.x11),!x),l.arc(0,0,c,_(p.cy+p.y11,p.cx+p.x11),_(b.cy+b.y11,b.cx+b.x11),x),l.arc(b.cx,b.cy,C,_(b.y11,b.x11),_(b.y01,b.x01),!x))):l.arc(0,0,c,f,T,x);}if(l.closePath(),s)return l=null,s+""||null}return d.centroid=function(){var s=(+i.apply(this,arguments)+ +t.apply(this,arguments))/2,g=(+e.apply(this,arguments)+ +n.apply(this,arguments))/2-Z/2;return [z(g)*s,$(g)*s]},d.innerRadius=function(s){return arguments.length?(i=typeof s=="function"?s:H(+s),d):i},d.outerRadius=function(s){return arguments.length?(t=typeof s=="function"?s:H(+s),d):t},d.cornerRadius=function(s){return arguments.length?(a=typeof s=="function"?s:H(+s),d):a},d.padRadius=function(s){return arguments.length?(r=s==null?null:typeof s=="function"?s:H(+s),d):r},d.startAngle=function(s){return arguments.length?(e=typeof s=="function"?s:H(+s),d):e},d.endAngle=function(s){return arguments.length?(n=typeof s=="function"?s:H(+s),d):n},d.padAngle=function(s){return arguments.length?(o=typeof s=="function"?s:H(+s),d):o},d.context=function(s){return arguments.length?(l=s??null,d):l},d}var ue=["bmsSvg"];function pe(i,t){if(i&1&&$h(0,"widget-title",1),i&2){let a=qw();Bh("text",a.displayLabel())("color",a.labelColor());}}function me(i,t){i&1&&(Pi(0,"div",3)(1,"div",4),TT(2,"No batteries detected"),ul(),Pi(3,"div",5),TT(4,"Check Signal K battery paths or select batteries in widget settings."),ul()());}var ee=class i{static BMS_DESCRIPTOR=a("widget-bms");static ROOT_PATTERN=`${i.BMS_DESCRIPTOR?.selfRootPath??"self.electrical.batteries"}.*`;id=Hj.required();type=Hj.required();theme=Hj.required();renderMode=Hj(null);static DEFAULT_CONFIG={color:"contrast",ignoreZones:false,bms:{trackedDevices:[],groups:[],banks:[]}};static VIEWBOX_WIDTH=200;static MIN_VIEWBOX_HEIGHT=1;static BANK_CARD_WIDTH=200;static BATTERY_CARD_HEIGHT=50;static BATTERY_CARD_WIDTH=200;static CARD_GAP=8;static BANK_HEADER_HEIGHT=80;static BANK_MIN_HEIGHT=75;static SINGLE_ROW_BANK_HEIGHT=100;static IN_BANK_COLUMNS=2;static IN_BANK_COLUMN_GAP=5;static IN_BANK_PADDING_X=0;static BANK_GAUGE_RADIUS=50;static BANK_GAUGE_BG_STROKE=10;static BANK_GAUGE_VALUE_STROKE=10;static COMPACT_UNASSIGNED_BATTERY_SCALE=.82;static PATH_BATCH_WINDOW_MS=500;runtime=w(p);data=w(De);units=w(ut);iconRegistry=w(K);destroyRef=w(xe);svgRef=$j.required("bmsSvg");svg;root;bankLayer;batteryLayer;bankGaugeBackgroundPath=this.buildSemiGaugeArcPath(i.BANK_GAUGE_RADIUS,1);glowFilterId="";renderFrameId=null;pendingRenderSnapshot=null;pathBatchTimerId=null;initialPathPaintDone=false;pendingPathUpdates=new Map;powerAvailableIconTemplate=null;powerRenewalIconTemplate=null;discoveredBatteryIds=vt([]);trackedBatteryDeviceIds=vt([]);banks=vt([]);cardMode=vt({displayMode:"full",metrics:[]});batteries=vt({});visibleBatteryIds=Dt(()=>{let t=this.trackedBatteryDeviceIds();return t.length?t:this.discoveredBatteryIds()});visibleBatteries=Dt(()=>{let t=this.visibleBatteryIds(),a=this.batteries();return t.map(r=>a[r]).filter(r=>!!r)});bankSummaries=Dt(()=>{let t=this.banks(),a=this.batteries();return t.map(r=>this.buildBankSummary(r,a))});activeDisplayMode=Dt(()=>this.renderMode()??this.cardMode().displayMode??"full");isCompactCardMode=Dt(()=>this.activeDisplayMode()==="compact");colorRole=Dt(()=>this.runtime.options()?.color??"contrast");ignoreZones=Dt(()=>this.runtime.options()?.ignoreZones??false);displayLabel=Dt(()=>{let t=this.bankSummaries();if(t.length===1)return t[0].name||"Bank";if(t.length>1)return "Batteries";let a=this.visibleBatteries();return a.length!==1?"Batteries":this.resolveBatteryTitleText(a[0])});labelColor=Dt(()=>{let t=this.theme();return t?c(this.colorRole(),t).dim:"var(--kip-contrast-dim-color)"});widgetColors=Dt(()=>{let t=this.theme();return t?c(this.colorRole(),t):null});batteryDisplayModels=Dt(()=>{let t=this.visibleBatteries(),a=this.theme(),r=this.widgetColors(),e$1=this.ignoreZones(),n={};for(let o of t){let l=e(o.stateOfChargeState,r?.dimmer??"var(--kip-contrast-dimmer-color)",a,e$1),m=e(o.stateOfChargeState,r?.dim??"var(--kip-contrast-dim-color)",a,e$1),d=e(o.currentState,"var(--kip-contrast-dim-color)",a,e$1),s=e(o.currentState,"var(--kip-contrast-color)",a,e$1);n[o.id]={id:o.id,titleText:this.resolveBatteryTitleText(o),chargeWidth:(i.BATTERY_CARD_WIDTH-3)*(o.stateOfCharge??0),chargeBarColorCompact:l,chargeBarColorRegular:m,currentTextColorCompact:d,currentTextColorRegular:s,currentText:`${this.formatCurrent(o.current)}`.trim(),detailLineCompact:`${this.formatVoltage(o.voltage)}\xA0\xA0\xA0\xA0${this.formatTemperature(o.temperature)}`,detailLineRegular:`${this.formatVoltage(o.voltage)}\xA0\xA0\xA0\xA0${this.formatPower(o.power)}\xA0\xA0\xA0\xA0${this.formatTemperature(o.temperature)}`.trim(),socText:this.formatSoc(o.stateOfCharge),socGlowEnabled:!e$1&&(o.stateOfChargeState===n$1.Warn||o.stateOfChargeState===n$1.Alarm||o.stateOfChargeState===n$1.Alert),remainingCapacityText:o.capacityActual?`${this.formatEnergy(o.capacityRemaining)}`:"",remainingTimeText:`${this.formatDuration(o.timeRemaining)}`.trim(),iconKey:o.current!=null&&o.current>0?"power_renewal":"power_available"};}return n});bankDisplayModels=Dt(()=>{let t=this.bankSummaries(),a=this.widgetColors(),r={};for(let e of t)r[e.id]={id:e.id,titleText:e.name||"Bank",currentText:this.formatCurrent(e.totalCurrent),powerText:this.formatPower(e.totalPower),socText:this.formatSoc(e.avgSoc),remainingTimeText:`${this.formatDuration(e.timeRemaining)}`.trim(),remainingCapacityText:e.remainingCapacity?`${this.formatEnergy(e.remainingCapacity)}`:"",gaugeValuePath:this.buildSemiGaugeArcPath(i.BANK_GAUGE_RADIUS,e.avgSoc),gaugeValueColor:a?.color??"var(--kip-contrast-color)",zoneState:null,zoneColor:null};return r});hasBatteries=Dt(()=>this.visibleBatteries().length>0);hasBanks=Dt(()=>this.bankSummaries().length>0);constructor(){Fa(()=>{let a=this.runtime.options();a&&ge(()=>this.applyConfig(a));}),Fa(()=>{let a=this.bankSummaries(),r=this.visibleBatteries(),e=this.widgetColors(),n=this.batteryDisplayModels(),o=this.bankDisplayModels();!this.svg||!e||this.requestRender({banks:a,batteries:r,batteryDisplayModels:n,bankDisplayModels:o,widgetColors:e});});let t=this.data.subscribePathTreeWithInitial(i.ROOT_PATTERN);if(t.initial.length){for(let a of t.initial)this.enqueuePathUpdate(a,true);this.flushPendingPathUpdates(),this.initialPathPaintDone=true;}t.live$.pipe(Gp(this.destroyRef)).subscribe(a=>{this.enqueuePathUpdate(a);});}ngAfterViewInit(){this.initializeSvg(),this.loadPowerIcons(),this.requestRender();}ngOnDestroy(){this.pathBatchTimerId!==null&&(clearTimeout(this.pathBatchTimerId),this.pathBatchTimerId=null),this.renderFrameId!==null&&(cancelAnimationFrame(this.renderFrameId),this.renderFrameId=null),this.pendingRenderSnapshot=null;}initializeSvg(){this.svg=ge$1(this.svgRef().nativeElement),this.svg.attr("viewBox",`0 0 ${i.VIEWBOX_WIDTH} ${i.MIN_VIEWBOX_HEIGHT}`).attr("preserveAspectRatio","xMidYMid meet").attr("role","img").attr("aria-label","Battery Management System View"),this.glowFilterId=`bms-soc-glow-${this.id()}`;let a=this.svg.append("defs").append("filter").attr("id",this.glowFilterId).attr("x","-30%").attr("y","-30%").attr("width","160%").attr("height","160%");a.append("feFlood").attr("class","bms-soc-glow-flood").attr("flood-color","var(--kip-widget-card-background-color)").attr("flood-opacity",.9).attr("result","color"),a.append("feComposite").attr("in","color").attr("in2","SourceGraphic").attr("operator","in").attr("result","coloredGlow"),a.append("feGaussianBlur").attr("in","coloredGlow").attr("stdDeviation",2).attr("result","blur");let r=a.append("feMerge");r.append("feMergeNode").attr("in","blur"),r.append("feMergeNode").attr("in","blur"),r.append("feMergeNode").attr("in","SourceGraphic"),this.root=this.svg.append("g").attr("class","bms-root"),this.bankLayer=this.root.append("g").attr("class","bms-banks"),this.batteryLayer=this.root.append("g").attr("class","bms-batteries");}loadPowerIcons(){this.loadNamedIcon("power_available",t=>{this.powerAvailableIconTemplate=t;}),this.loadNamedIcon("power_renewal",t=>{this.powerRenewalIconTemplate=t;});}loadNamedIcon(t,a){this.iconRegistry.getNamedSvgIcon(t).pipe(_t(1)).subscribe({next:r=>{a(r),this.requestRender();},error:()=>{}});}applyConfig(t){let a=this.resolveBmsConfig(t);this.trackedBatteryDeviceIds.set([...new Set((a.trackedDevices??[]).map(r=>r.id))]),this.banks.set(a.banks),this.cardMode.set(this.normalizeCardMode(a.cardMode));}resolveBmsConfig(t){let a=t.bms,r=this.normalizeTrackedDevices(a?.trackedDevices),e=this.normalizeBanksFromGroups(a?.groups),n=this.normalizeBanksFromLegacy(a?.banks);return {trackedDevices:r,groups:e,banks:e.length>0?e:n,cardMode:this.normalizeCardMode(a?.cardMode)}}normalizeTrackedDevices(t){if(!Array.isArray(t))return [];let a=new Map;return t.forEach(r=>{if(!r||typeof r!="object")return;let e=r,n=typeof e.id=="string"?e.id.trim():"",o=typeof e.source=="string"?e.source.trim():"default";if(!n||!o)return;let l=typeof e.key=="string"&&e.key.trim().length>0?e.key.trim():`${n}||${o}`;a.set(l,{id:n,source:o,key:l});}),[...a.values()].sort((r,e)=>r.key.localeCompare(e.key))}normalizeCardMode(t){let a=t&&typeof t=="object"?t:null,r=this.normalizeStringList(a?.metrics);return {displayMode:a?.displayMode==="compact"?"compact":"full",metrics:r}}normalizeStringList(t){if(!Array.isArray(t))return [];let a=new Set;return t.forEach(r=>{if(typeof r!="string")return;let e=r.trim();e.length>0&&a.add(e);}),[...a].sort((r,e)=>r.localeCompare(e))}normalizeBanksFromGroups(t){return Array.isArray(t)?t.map(a=>{let r=this.normalizeOptionalString(a?.id)??`bank-${Date.now()}`,e=this.normalizeOptionalString(a?.name)??r,n=this.normalizeStringList(a?.memberIds);return {id:r,name:e,batteryIds:n,connectionMode:this.normalizeConnectionMode(a?.connectionMode)}}).filter(a=>a.id.length>0):[]}normalizeBanksFromLegacy(t){return Array.isArray(t)?t.map(a=>{let r=this.normalizeOptionalString(a?.id)??`bank-${Date.now()}`,e=this.normalizeOptionalString(a?.name)??r,n=this.normalizeStringList(a?.batteryIds);return {id:r,name:e,batteryIds:n,connectionMode:this.normalizeConnectionMode(a?.connectionMode)}}).filter(a=>a.id.length>0):[]}normalizeOptionalString(t){if(typeof t!="string")return null;let a=t.trim();return a.length>0?a:null}normalizeConnectionMode(t){return t==="series"?"series":"parallel"}enqueuePathUpdate(t,a=false){let r=this.parseBatteryPath(t.path);if(!r)return;let{id:e,key:n}=r,o=t.update?.data?.value??null,l=t.update?.state??null,m=`${e}::${n}`;if(this.pendingPathUpdates.set(m,{id:e,key:n,value:o,state:l}),!a){if(!this.initialPathPaintDone){this.initialPathPaintDone=true,this.flushPendingPathUpdates();return}this.pathBatchTimerId===null&&(this.pathBatchTimerId=window.setTimeout(()=>{this.pathBatchTimerId=null,this.flushPendingPathUpdates();},i.PATH_BATCH_WINDOW_MS));}}flushPendingPathUpdates(){if(!this.pendingPathUpdates.size)return;let t=Array.from(this.pendingPathUpdates.values());this.pendingPathUpdates.clear(),new Set(t.map(r=>r.id)).forEach(r=>this.trackDiscoveredBattery(r)),this.batteries.update(r=>{let e=r,n=false;for(let o of t){let l=e[o.id]??{id:o.id},m=G({},l),d=this.applyBatteryValue(m,o.key,o.value,o.state),s=false;if(m.voltage!=null&&m.current!=null){let g=Number.isFinite(m.voltage)&&Number.isFinite(m.current)?m.voltage*m.current:null;Object.is(m.power,g)||(m.power=g,s=true);}!d&&!s||(n||(e=G({},e),n=true),e[o.id]=m);}return n?e:r});}parseBatteryPath(t){let a=t.match(/self\.electrical\.batteries\.([^.]+)\.(.+)$/);return a?{id:a[1],key:a[2]}:null}trackDiscoveredBattery(t){let a=this.discoveredBatteryIds();if(a.includes(t))return;let r=[...a,t].sort();this.discoveredBatteryIds.set(r);}applyBatteryValue(t,a,r,e){switch(a){case "name":{let n=r;return t.name===n?false:(t.name=n,true)}case "location":{let n=r;return t.location===n?false:(t.location=n,true)}case "associatedBus":{let n=r;return t.associatedBus===n?false:(t.associatedBus=n,true)}case "chemistry":{let n=r;return t.chemistry===n?false:(t.chemistry=n,true)}case "voltage":{let n=this.toNumber(r);return Object.is(t.voltage,n)?false:(t.voltage=n,true)}case "current":{let n=this.toNumber(r),o=!Object.is(t.currentState??null,e??null);return Object.is(t.current,n)&&!o?false:(t.current=n,t.currentState=e,true)}case "temperature":{let n=this.toNumber(r);return Object.is(t.temperature,n)?false:(t.temperature=n,true)}case "capacity.nominal":{let n=this.toNumber(r);return Object.is(t.capacityNominal,n)?false:(t.capacityNominal=n,true)}case "capacity.actual":{let n=this.toNumber(r);return Object.is(t.capacityActual,n)?false:(t.capacityActual=n,true)}case "capacity.remaining":{let n=this.toNumber(r);return Object.is(t.capacityRemaining,n)?false:(t.capacityRemaining=n,true)}case "capacity.stateOfCharge":{let n=this.toNumber(r),o=!Object.is(t.stateOfChargeState??null,e??null);return Object.is(t.stateOfCharge,n)&&!o?false:(t.stateOfCharge=n,t.stateOfChargeState=e,true)}case "capacity.timeRemaining":{let n=this.toNumber(r);return Object.is(t.timeRemaining,n)?false:(t.timeRemaining=n,true)}default:return false}}buildBankSummary(t,a){let r=t.batteryIds.map(s=>a[s]).filter(s=>!!s),e=this.normalizeConnectionMode(t.connectionMode),n=this.calculateBankCurrent(r,e),o=this.sumNumbers(r.map(s=>s.power)),l=this.sumNumbers(r.map(s=>s.capacityRemaining)),m=this.calculateBankSoc(r),d=this.calculateBankTimeRemaining(r,e);return {id:t.id,name:t.name,batteryIds:t.batteryIds,totalCurrent:n,totalPower:o,remainingCapacity:l,avgSoc:m,timeRemaining:d}}calculateBankSoc(t){let a=this.sumNumbers(t.map(n=>n.capacityRemaining)),r=this.sumNumbers(t.map(n=>n.capacityActual));if(a!=null&&r!=null&&r>0)return Math.max(0,Math.min(1,a/r));let e=this.sumNumbers(t.map(n=>n.capacityNominal));return a!=null&&e!=null&&e>0?Math.max(0,Math.min(1,a/e)):this.averageNumbers(t.map(n=>n.stateOfCharge))}calculateBankCurrent(t,a){let r=t.map(e=>e.current);return a==="series"?this.averageNumbers(r):this.sumNumbers(r)}calculateBankTimeRemaining(t,a){let r=t.map(e=>e.timeRemaining);return a==="series"?this.minNumber(r):this.averageNumbers(r)}requestRender(t){this.svg&&(this.pendingRenderSnapshot=t??this.buildRenderSnapshot(),this.pendingRenderSnapshot&&this.renderFrameId===null&&(this.renderFrameId=requestAnimationFrame(()=>{this.renderFrameId=null;let a=this.pendingRenderSnapshot;this.pendingRenderSnapshot=null,a&&this.render(a);})));}buildRenderSnapshot(){let t=this.widgetColors();return t?{banks:this.bankSummaries(),batteries:this.visibleBatteries(),batteryDisplayModels:this.batteryDisplayModels(),bankDisplayModels:this.bankDisplayModels(),widgetColors:t}:null}render(t){if(!this.bankLayer||!this.batteryLayer)return;let{banks:a,batteries:r,bankDisplayModels:e,batteryDisplayModels:n,widgetColors:o}=t,l=this.buildRenderLayout(a,r,e,n,this.isCompactCardMode()),d=this.isCompactCardMode()?e$1:e$1,s=Math.max(i.MIN_VIEWBOX_HEIGHT,l.contentHeight);this.svg?.attr("viewBox",`0 0 ${i.VIEWBOX_WIDTH} ${s}`),this.root?.attr("transform",null);let g=this.bankLayer.selectAll("g.bank-card").data(l.banks,u=>u.id),c=g.enter().append("g").attr("class","bank-card"),y=c.append("text").attr("class","bank-card-power");y.append("tspan").attr("class","bank-card-power-value"),y.append("tspan").attr("class","bank-card-power-unit");let v=c.append("text").attr("class","bank-card-current");v.append("tspan").attr("class","bank-card-current-value"),v.append("tspan").attr("class","bank-card-current-unit");let k=c.append("g").attr("class","bank-gauge");k.append("path").attr("class","bank-gauge-bg"),k.append("path").attr("class","bank-gauge-value");let R=k.append("text").attr("class","bank-gauge-soc");R.append("tspan").attr("class","bank-gauge-soc-value"),R.append("tspan").attr("class","bank-gauge-soc-unit");let x=c.append("text").attr("class","bank-actualCapacity");x.append("tspan").attr("class","bank-actualCapacity-value"),x.append("tspan").attr("class","bank-actualCapacity-unit"),c.append("text").attr("class","bank-remaining"),c.append("g").attr("class","bank-bms-batteries"),c.append("text").attr("class","bank-title");let h=c.merge(g);h.attr("transform",u=>`translate(${u.x},${u.y})`),l.banks.length>1?h.select("text.bank-title").attr("x",d.titleX).attr("y",d.titleY).attr("fill","var(--kip-contrast-dim-color)").attr("font-size",d.titleFontSize).text(u=>u.displayModel.titleText):h.select("text.bank-title").text(""),h.select("text.bank-card-current").attr("x",d.lineOneX).attr("y",d.lineOneY).attr("fill","var(--kip-contrast-color)").attr("font-size",d.lineOneFontSize),h.select("tspan.bank-card-current-value").text(u=>this.splitMetricText(u.displayModel.currentText,"A").valueText),h.select("tspan.bank-card-current-unit").attr("dx",1).attr("font-size",12).attr("fill","var(--kip-contrast-color)").text(u=>this.splitMetricText(u.displayModel.currentText,"A").unitText),h.select("text.bank-card-power").attr("x",5).attr("y",42).attr("fill","var(--kip-contrast-color)").attr("font-size",10).attr("opacity",.8),h.select("tspan.bank-card-power-value").text(u=>this.splitMetricText(u.displayModel.powerText,"W").valueText),h.select("tspan.bank-card-power-unit").attr("dx",1).attr("font-size",6).attr("fill","var(--kip-contrast-color)").text(u=>this.splitMetricText(u.displayModel.powerText,"W").unitText),h.select("g.bank-gauge").attr("transform","translate(143, 60)"),h.select("path.bank-gauge-bg").attr("d",this.bankGaugeBackgroundPath).attr("fill","none").attr("stroke","var(--kip-contrast-dimmer-color)").attr("stroke-width",i.BANK_GAUGE_BG_STROKE).attr("stroke-linecap","round"),h.select("path.bank-gauge-value").attr("d",u=>u.displayModel.gaugeValuePath).attr("fill","none").attr("stroke",u=>u.displayModel.gaugeValueColor).attr("stroke-width",i.BANK_GAUGE_VALUE_STROKE).attr("stroke-linecap","round"),h.select("text.bank-gauge-soc").attr("x",0).attr("y",-5).attr("text-anchor","middle").attr("fill","var(--kip-contrast-color)").attr("font-size",d.primaryFontSize).attr("font-weight",d.primaryFontWeight),h.select("tspan.bank-gauge-soc-value").text(u=>this.splitMetricText(u.displayModel.socText,"%").valueText),h.select("tspan.bank-gauge-soc-unit").attr("dx",1).attr("font-size",22).attr("font-weight",500).attr("fill","var(--kip-contrast-color)").text(u=>this.splitMetricText(u.displayModel.socText,"%").unitText),h.select("text.bank-remaining").attr("x",143).attr("y",26).attr("fill","var(--kip-contrast-dim-color)").attr("text-anchor","middle").attr("font-size",8).text(u=>u.displayModel.remainingTimeText),h.select("text.bank-actualCapacity").attr("x",143).attr("y",66).attr("fill","var(--kip-contrast-dim-color)").attr("text-anchor","middle").attr("font-size",8),h.select("tspan.bank-actualCapacity-value").text(u=>this.splitMetricText(u.displayModel.remainingCapacityText,"kWh").valueText),h.select("tspan.bank-actualCapacity-unit").attr("dx",1).attr("font-size",6).attr("fill","var(--kip-contrast-dim-color)").text(u=>this.splitMetricText(u.displayModel.remainingCapacityText,"kWh").unitText),h.select("g.bank-bms-batteries").each((u,N,w)=>{let B=ge$1(w[N]).selectAll("g.battery-card").data(u.batteries,p=>p.key),C=B.enter().append("g").attr("class","battery-card battery-card--in-bank");this.appendBatteryCardSkeleton(C);let I=C.merge(B);this.renderBatteryCards(I,o,t.batteries.length>1),B.exit().remove();}),g.exit().remove();let M=this.batteryLayer.selectAll("g.battery-card").data(l.unassignedBatteries,u=>u.key),T=M.enter().append("g").attr("class","battery-card battery-card--unassigned");this.appendBatteryCardSkeleton(T);let f=T.merge(M);this.renderBatteryCards(f,o,true),M.exit().remove(),this.root?.attr("data-theme","ready");}buildRenderLayout(t,a,r,e,n){let o=new Map(a.map(f=>[f.id,f])),l=new Set,m=this.computeInBankBatterySlotWidth(),d=Math.max(.35,Math.min(1,m/i.BATTERY_CARD_WIDTH)),s=i.BATTERY_CARD_HEIGHT*d,g=0,c=t.map(f=>{let u=new Set,N=f.batteryIds.map(A=>o.get(A)).filter(A=>!A||u.has(A.id)?false:(u.add(A.id),true));N.forEach(A=>l.add(A.id));let w=Math.ceil(N.length/i.IN_BANK_COLUMNS),E=i.SINGLE_ROW_BANK_HEIGHT,B=!n&&w===1,C=B?Math.max(0,E-s-i.CARD_GAP):i.BANK_HEADER_HEIGHT,I=w>0?w*s+(w-1)*i.CARD_GAP:0,p=Math.max(i.BANK_MIN_HEIGHT,C+I+i.CARD_GAP),b=B?E:p,O=N.map((A,P)=>{let K=P%i.IN_BANK_COLUMNS,V=Math.floor(P/i.IN_BANK_COLUMNS),Y=i.IN_BANK_PADDING_X+K*(m+i.IN_BANK_COLUMN_GAP),q=C+7+V*(s+i.CARD_GAP);return {id:A.id,displayModel:e[A.id],key:`${f.id}::${A.id}`,x:Y,y:q,scale:d,inBank:true,compact:true}}),U={id:f.id,name:f.name,batteryIds:f.batteryIds,totalCurrent:f.totalCurrent,totalPower:f.totalPower,avgSoc:f.avgSoc,remainingCapacity:f.remainingCapacity,timeRemaining:f.timeRemaining,displayModel:r[f.id],x:0,y:g,width:i.BANK_CARD_WIDTH,height:b,batteries:O};return g+=b+i.CARD_GAP,U}),y=c.length>0?g:0,v=n?i.COMPACT_UNASSIGNED_BATTERY_SCALE:1,k=i.BATTERY_CARD_HEIGHT*v,R=a.filter(f=>!l.has(f.id)).sort((f,u)=>f.id.localeCompare(u.id)).map((f,u)=>({id:f.id,displayModel:e[f.id],key:f.id,x:0,y:y+u*(k+i.CARD_GAP),scale:v,inBank:false,compact:n})),x=c[c.length-1],h=x?x.y+x.height:0,M=R[R.length-1],T=M?M.y+k:0;return {banks:c,unassignedBatteries:R,contentHeight:Math.max(h,T)}}computeInBankBatterySlotWidth(){return (i.BANK_CARD_WIDTH-i.IN_BANK_PADDING_X*2-i.IN_BANK_COLUMN_GAP)/i.IN_BANK_COLUMNS}appendBatteryCardSkeleton(t){t.append("rect").attr("class","bms-battery").attr("rx",4).attr("ry",4),t.append("rect").attr("class","bms-battery-tip").attr("rx",1).attr("ry",1),t.append("rect").attr("class","bms-charge-fill").attr("rx",3).attr("ry",3),t.append("g").attr("class","bms-state-icon"),t.append("text").attr("class","bms-ampere"),t.append("text").attr("class","bms-volt-power");let a=t.append("text").attr("class","bms-soc");a.append("tspan").attr("class","bms-soc-value"),a.append("tspan").attr("class","bms-soc-unit"),t.append("text").attr("class","bms-actualCapacity"),t.append("text").attr("class","bms-remaining"),t.append("text").attr("class","bms-title");}renderBatteryCards(t,a,r){t.attr("transform",e=>`translate(${e.x},${e.y}) scale(${e.scale})`),t.select("rect.bms-battery").attr("width",e=>e.inBank?i.BATTERY_CARD_WIDTH:e.compact?i.BATTERY_CARD_WIDTH-i.CARD_GAP:i.BATTERY_CARD_WIDTH).attr("height",i.BATTERY_CARD_HEIGHT).attr("fill",e=>e.compact?"var(--mat-sys-background)":"var(--kip-contrast-dimmer-color)").attr("stroke","var(--kip-contrast-dimmer-color)").attr("stroke-width",0),t.select("rect.bms-battery-tip").attr("x",i.BATTERY_CARD_WIDTH).attr("y",i.BATTERY_CARD_HEIGHT/2-10).attr("width",4).attr("height",20).attr("fill",e=>e.compact?"var(--mat-sys-background)":"var(--kip-contrast-dimmer-color)").attr("stroke",a.color).attr("stroke-width",0),t.select("rect.bms-charge-fill").attr("x",1.5).attr("y",1.5).attr("width",e=>e.displayModel.chargeWidth).attr("height",i.BATTERY_CARD_HEIGHT-3).attr("fill",e=>e.compact?e.displayModel.chargeBarColorCompact:e.displayModel.chargeBarColorRegular),r?t.select("text.bms-title").attr("x",5).attr("y",e=>e.compact?11:14).attr("fill","var(--kip-contrast-dim-color)").attr("font-size",e=>e.compact?8:12).attr("filter",e=>e.displayModel.socGlowEnabled?`url(#${this.glowFilterId})`:null).text(e=>e.displayModel.titleText):t.select("text.bms-title").text(""),t.select("text.bms-ampere").attr("x",10).attr("y",33).attr("fill",e=>e.compact?e.displayModel.currentTextColorCompact:e.displayModel.currentTextColorRegular).attr("font-size",16).attr("filter",e=>e.displayModel.socGlowEnabled?`url(#${this.glowFilterId})`:null).text(e=>e.displayModel.currentText),t.select("text.bms-volt-power").attr("x",10).attr("y",45).attr("fill","var(--kip-contrast-dim-color)").attr("font-size",8).attr("opacity",.8).attr("filter",e=>e.displayModel.socGlowEnabled?`url(#${this.glowFilterId})`:null).text(e=>e.compact?e.displayModel.detailLineCompact:e.displayModel.detailLineRegular),t.select("text.bms-soc").attr("x",i.BATTERY_CARD_WIDTH-33).attr("y",34).attr("fill",e=>e.compact?"var(--kip-contrast-dim-color)":"var(--kip-contrast-color)").attr("text-anchor","middle").attr("font-size",25).attr("font-weight",700).attr("filter",e=>e.displayModel.socGlowEnabled?`url(#${this.glowFilterId})`:null),t.select("tspan.bms-soc-value").text(e=>this.splitMetricText(e.displayModel.socText,"%").valueText),t.select("tspan.bms-soc-unit").attr("dx",1).attr("font-size",16).attr("font-weight",500).text(e=>this.splitMetricText(e.displayModel.socText,"%").unitText),t.select("text.bms-actualCapacity").attr("x",i.BATTERY_CARD_WIDTH-33).attr("y",45).attr("fill","var(--kip-contrast-dim-color)").attr("text-anchor","middle").attr("font-size",8).attr("filter",e=>e.displayModel.socGlowEnabled?`url(#${this.glowFilterId})`:null).text(e=>e.compact?"":e.displayModel.remainingCapacityText),t.select("text.bms-remaining").attr("x",i.BATTERY_CARD_WIDTH-33).attr("y",12).attr("fill","var(--kip-contrast-dim-color)").attr("text-anchor","middle").attr("font-size",6).attr("filter",e=>e.displayModel.socGlowEnabled?`url(#${this.glowFilterId})`:null).text(e=>e.compact?"":e.displayModel.remainingTimeText),t.select("g.bms-state-icon").attr("transform",`translate(${i.BATTERY_CARD_WIDTH/2-18}, ${i.BATTERY_CARD_HEIGHT/2-18})`).attr("display",e=>e.compact&&e.scale<.45?"none":null).attr("color",e=>e.compact?a.dim:a.color).attr("filter",e=>e.displayModel.socGlowEnabled?`url(#${this.glowFilterId})`:null).each((e,n,o)=>{let l=ge$1(o[n]),m=e.displayModel.iconKey,d=m==="power_renewal"?this.powerRenewalIconTemplate:this.powerAvailableIconTemplate;if(!d){l.selectAll("*").remove(),l.attr("data-icon-key",null);return}let s=l.node();if(!s||l.attr("data-icon-key")===m&&s.firstElementChild)return;l.selectAll("*").remove();let c=d.cloneNode(true);c.removeAttribute("id"),c.setAttribute("width","36"),c.setAttribute("height","36"),c.getAttribute("viewBox")||c.setAttribute("viewBox","0 0 24 24"),s.appendChild(c),l.attr("data-icon-key",m);});}formatVoltage(t){return t==null?"-- V":`${t.toFixed(1)}V`}formatCurrent(t){return t==null?"-- A":`${t.toFixed(1)}A`}formatPower(t){return t==null?"":`${t.toFixed(0)}W`}formatEnergy(t){return t==null?"":(t=this.units.convertToUnit("kWh",t),`${t}kWh`)}formatSoc(t){return t==null?"--%":`${Math.round(t*100)}%`}resolveBatteryTitleText(t){return t.name||`Battery ${t.id}`}formatDuration(t){if(t==null)return "";let a=this.units.convertToUnit("D HH:MM:SS",t);return a==null?"":typeof a=="string"?a:`${a}`}formatTemperature(t){if(t==null||typeof t!="number")return "";let a=this.units.getDefaults().Temperature,r=this.units.convertToUnit(a,t);return r===null?"":`${r.toFixed(1)} ${a==="celsius"?"\xB0C":"\xB0F"}`}splitMetricText(t,a){if(!t)return {valueText:"",unitText:""};let r=t.trim();return r?r.endsWith(a)?{valueText:r.slice(0,Math.max(0,r.length-a.length)).trim(),unitText:a}:{valueText:r,unitText:""}:{valueText:"",unitText:""}}sumNumbers(t){let a=t.filter(r=>typeof r=="number");return a.length?a.reduce((r,e)=>r+e,0):null}averageNumbers(t){let a=t.filter(r=>typeof r=="number");return a.length?a.reduce((r,e)=>r+e,0)/a.length:null}minNumber(t){let a=t.filter(r=>typeof r=="number");return a.length?Math.min(...a):null}toNumber(t){return t==null||typeof t!="number"?null:t}buildSemiGaugeArcPath(t,a){let r=Math.max(0,Math.min(1,a??0)),e=-Math.PI*.55,n=Math.PI*1.1,o=e+n*r;if(r<=0){let l=t*Math.cos(e),m=t*Math.sin(e);return `M ${l} ${m}`}return Bt()({innerRadius:t,outerRadius:t,startAngle:e,endAngle:o})??""}static \u0275fac=function(a){return new(a||i)};static \u0275cmp=JD({type:i,selectors:[["widget-bms"]],viewQuery:function(a,r){a&1&&eg(r.svgRef,ue,5),a&2&&Kw();},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"],renderMode:[1,"renderMode"]},decls:4,vars:4,consts:[["bmsSvg",""],[3,"text","color"],["aria-hidden","false",1,"bms-svg"],[1,"bms-empty"],[1,"bms-empty-title"],[1,"bms-empty-sub"]],template:function(a,r){a&1&&(_w(0,pe,1,2,"widget-title",1),wd(),$h(1,"svg",2,0),_w(3,me,5,0,"div",3)),a&2&&(Mw(r.hasBanks()?0:-1),EE(),sg("bms-svg--full",!r.hasBanks()),EE(2),Mw(r.hasBatteries()?-1:3));},dependencies:[yt,x],styles:["[_nghost-%COMP%]{display:block;height:100%;width:100%;position:relative;overflow:hidden}.bms-svg[_ngcontent-%COMP%]{display:block;position:absolute;left:0;right:0;top:15%;height:85%;width:100%;overflow:hidden;padding:0 10px 10px}.bms-svg.bms-svg--full[_ngcontent-%COMP%]{top:0;height:100%;padding-top:10px}.bms-card-metric[_ngcontent-%COMP%]{fill:var(--mat-sys-on-surface);font-size:30px;font-weight:700}.bms-card-sub[_ngcontent-%COMP%]{fill:var(--mat-sys-on-surface);font-size:18px;opacity:.9}.bms-card-meta[_ngcontent-%COMP%]{fill:var(--mat-sys-on-surface);font-size:15px;opacity:.75}.bms-card-footer[_ngcontent-%COMP%]{fill:var(--mat-sys-on-surface);font-size:16px;opacity:.8}.bms-flow-line[_ngcontent-%COMP%]{stroke:var(--kip-zone-nominal-color);stroke-width:3px;stroke-dasharray:6 6;animation:_ngcontent-%COMP%_flow-dash 2s linear infinite}.bms-flow-line--out[_ngcontent-%COMP%]{stroke:var(--kip-zone-warn-color)}.bms-flow-line--in[_ngcontent-%COMP%]{stroke:var(--kip-zone-nominal-color)}.bms-flow-line--neutral[_ngcontent-%COMP%]{stroke:var(--kip-widget-card-border-color);animation:none}.bms-empty[_ngcontent-%COMP%]{position:absolute;inset:0;margin:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;text-align:center;color:var(--mat-sys-on-surface);background:color-mix(in srgb,var(--kip-widget-card-background-color) 92%,transparent)}.bms-empty-title[_ngcontent-%COMP%]{font-size:18px;font-weight:600}.bms-empty-sub[_ngcontent-%COMP%]{font-size:14px;opacity:.8}@keyframes _ngcontent-%COMP%_flow-dash{to{stroke-dashoffset:-12}}"]})};export{ee as WidgetBmsComponent};
|
|
1
|
+
import {e as e$1}from'./chunk-CzEDfe2A.js';import {g as ge$1}from'./chunk-TakPRI3t.js';import {e9 as a,d1 as Hj,w,du as p,aS as De,bu as ut,ea as K,aY as xe,$ as $j,v as vt,D as Dt,dx as n$1,F as Fa,dn as ge,a_ as Gp,av as _t,cv as G,J as JD,y as yt,dC as x,_ as _w,cn as wd,c as $h,M as Mw,e as EE,s as sg,f as eg,K as Kw,g as qw,B as Bh,P as Pi,T as TT,u as ul}from'./main-F7NMHHV4.js';import {c,e}from'./chunk-CRy9Da7a.js';function H(i){return function(){return i}}var Mt=Math.abs,_=Math.atan2,z=Math.cos,qt=Math.max,rt=Math.min,$=Math.sin,W=Math.sqrt,S=1e-12,Z=Math.PI,tt=Z/2,Xt=2*Z;function jt(i){return i>1?0:i<-1?Z:Math.acos(i)}function Tt(i){return i>=1?tt:i<=-1?-tt:Math.asin(i)}var Ct=Math.PI,At=2*Ct,L=1e-6,ae=At-L;function Zt(i){this._+=i[0];for(let t=1,a=i.length;t<a;++t)this._+=arguments[t]+i[t];}function re(i){let t=Math.floor(i);if(!(t>=0))throw new Error(`invalid digits: ${i}`);if(t>15)return Zt;let a=10**t;return function(r){this._+=r[0];for(let e=1,n=r.length;e<n;++e)this._+=Math.round(arguments[e]*a)/a+r[e];}}var F=class{constructor(t){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=t==null?Zt:re(t);}moveTo(t,a){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+a}`;}closePath(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`);}lineTo(t,a){this._append`L${this._x1=+t},${this._y1=+a}`;}quadraticCurveTo(t,a,r,e){this._append`Q${+t},${+a},${this._x1=+r},${this._y1=+e}`;}bezierCurveTo(t,a,r,e,n,o){this._append`C${+t},${+a},${+r},${+e},${this._x1=+n},${this._y1=+o}`;}arcTo(t,a,r,e,n){if(t=+t,a=+a,r=+r,e=+e,n=+n,n<0)throw new Error(`negative radius: ${n}`);let o=this._x1,l=this._y1,m=r-t,d=e-a,s=o-t,g=l-a,c=s*s+g*g;if(this._x1===null)this._append`M${this._x1=t},${this._y1=a}`;else if(c>L)if(!(Math.abs(g*m-d*s)>L)||!n)this._append`L${this._x1=t},${this._y1=a}`;else {let y=r-o,v=e-l,k=m*m+d*d,R=y*y+v*v,x=Math.sqrt(k),h=Math.sqrt(c),M=n*Math.tan((Ct-Math.acos((k+c-R)/(2*x*h)))/2),T=M/h,f=M/x;Math.abs(T-1)>L&&this._append`L${t+T*s},${a+T*g}`,this._append`A${n},${n},0,0,${+(g*y>s*v)},${this._x1=t+f*m},${this._y1=a+f*d}`;}}arc(t,a,r,e,n,o){if(t=+t,a=+a,r=+r,o=!!o,r<0)throw new Error(`negative radius: ${r}`);let l=r*Math.cos(e),m=r*Math.sin(e),d=t+l,s=a+m,g=1^o,c=o?e-n:n-e;this._x1===null?this._append`M${d},${s}`:(Math.abs(this._x1-d)>L||Math.abs(this._y1-s)>L)&&this._append`L${d},${s}`,r&&(c<0&&(c=c%At+At),c>ae?this._append`A${r},${r},0,1,${g},${t-l},${a-m}A${r},${r},0,1,${g},${this._x1=d},${this._y1=s}`:c>L&&this._append`A${r},${r},0,${+(c>=Ct)},${g},${this._x1=t+r*Math.cos(n)},${this._y1=a+r*Math.sin(n)}`);}rect(t,a,r,e){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+a}h${r=+r}v${+e}h${-r}Z`;}toString(){return this._}};function Jt(i){let t=3;return i.digits=function(a){if(!arguments.length)return t;if(a==null)t=null;else {let r=Math.floor(a);if(!(r>=0))throw new RangeError(`invalid digits: ${a}`);t=r;}return i},()=>new F(t)}function ne(i){return i.innerRadius}function ie(i){return i.outerRadius}function se(i){return i.startAngle}function oe(i){return i.endAngle}function le(i){return i&&i.padAngle}function ce(i,t,a,r,e,n,o,l){var m=a-i,d=r-t,s=o-e,g=l-n,c=g*m-s*d;if(!(c*c<S))return c=(s*(t-n)-g*(i-e))/c,[i+c*m,t+c*d]}function nt(i,t,a,r,e,n,o){var l=i-a,m=t-r,d=(o?n:-n)/W(l*l+m*m),s=d*m,g=-d*l,c=i+s,y=t+g,v=a+s,k=r+g,R=(c+v)/2,x=(y+k)/2,h=v-c,M=k-y,T=h*h+M*M,f=e-n,u=c*k-v*y,N=(M<0?-1:1)*W(qt(0,f*f*T-u*u)),w=(u*M-h*N)/T,E=(-u*h-M*N)/T,B=(u*M+h*N)/T,C=(-u*h+M*N)/T,I=w-R,p=E-x,b=B-R,O=C-x;return I*I+p*p>b*b+O*O&&(w=B,E=C),{cx:w,cy:E,x01:-s,y01:-g,x11:w*(e/f-1),y11:E*(e/f-1)}}function Bt(){var i=ne,t=ie,a=H(0),r=null,e=se,n=oe,o=le,l=null,m=Jt(d);function d(){var s,g,c=+i.apply(this,arguments),y=+t.apply(this,arguments),v=e.apply(this,arguments)-tt,k=n.apply(this,arguments)-tt,R=Mt(k-v),x=k>v;if(l||(l=s=m()),y<c&&(g=y,y=c,c=g),!(y>S))l.moveTo(0,0);else if(R>Xt-S)l.moveTo(y*z(v),y*$(v)),l.arc(0,0,y,v,k,!x),c>S&&(l.moveTo(c*z(k),c*$(k)),l.arc(0,0,c,k,v,x));else {var h=v,M=k,T=v,f=k,u=R,N=R,w=o.apply(this,arguments)/2,E=w>S&&(r?+r.apply(this,arguments):W(c*c+y*y)),B=rt(Mt(y-c)/2,+a.apply(this,arguments)),C=B,I=B,p,b;if(E>S){var O=Tt(E/c*$(w)),U=Tt(E/y*$(w));(u-=O*2)>S?(O*=x?1:-1,T+=O,f-=O):(u=0,T=f=(v+k)/2),(N-=U*2)>S?(U*=x?1:-1,h+=U,M-=U):(N=0,h=M=(v+k)/2);}var A=y*z(h),P=y*$(h),K=c*z(f),V=c*$(f);if(B>S){var Y=y*z(M),q=y*$(M),it=c*z(T),st=c*$(T),G;if(R<Z)if(G=ce(A,P,it,st,Y,q,K,V)){var ot=A-G[0],lt=P-G[1],ct=Y-G[0],dt=q-G[1],_t=1/$(jt((ot*ct+lt*dt)/(W(ot*ot+lt*lt)*W(ct*ct+dt*dt)))/2),Rt=W(G[0]*G[0]+G[1]*G[1]);C=rt(B,(c-Rt)/(_t-1)),I=rt(B,(y-Rt)/(_t+1));}else C=I=0;}N>S?I>S?(p=nt(it,st,A,P,y,I,x),b=nt(Y,q,K,V,y,I,x),l.moveTo(p.cx+p.x01,p.cy+p.y01),I<B?l.arc(p.cx,p.cy,I,_(p.y01,p.x01),_(b.y01,b.x01),!x):(l.arc(p.cx,p.cy,I,_(p.y01,p.x01),_(p.y11,p.x11),!x),l.arc(0,0,y,_(p.cy+p.y11,p.cx+p.x11),_(b.cy+b.y11,b.cx+b.x11),!x),l.arc(b.cx,b.cy,I,_(b.y11,b.x11),_(b.y01,b.x01),!x))):(l.moveTo(A,P),l.arc(0,0,y,h,M,!x)):l.moveTo(A,P),!(c>S)||!(u>S)?l.lineTo(K,V):C>S?(p=nt(K,V,Y,q,c,-C,x),b=nt(A,P,it,st,c,-C,x),l.lineTo(p.cx+p.x01,p.cy+p.y01),C<B?l.arc(p.cx,p.cy,C,_(p.y01,p.x01),_(b.y01,b.x01),!x):(l.arc(p.cx,p.cy,C,_(p.y01,p.x01),_(p.y11,p.x11),!x),l.arc(0,0,c,_(p.cy+p.y11,p.cx+p.x11),_(b.cy+b.y11,b.cx+b.x11),x),l.arc(b.cx,b.cy,C,_(b.y11,b.x11),_(b.y01,b.x01),!x))):l.arc(0,0,c,f,T,x);}if(l.closePath(),s)return l=null,s+""||null}return d.centroid=function(){var s=(+i.apply(this,arguments)+ +t.apply(this,arguments))/2,g=(+e.apply(this,arguments)+ +n.apply(this,arguments))/2-Z/2;return [z(g)*s,$(g)*s]},d.innerRadius=function(s){return arguments.length?(i=typeof s=="function"?s:H(+s),d):i},d.outerRadius=function(s){return arguments.length?(t=typeof s=="function"?s:H(+s),d):t},d.cornerRadius=function(s){return arguments.length?(a=typeof s=="function"?s:H(+s),d):a},d.padRadius=function(s){return arguments.length?(r=s==null?null:typeof s=="function"?s:H(+s),d):r},d.startAngle=function(s){return arguments.length?(e=typeof s=="function"?s:H(+s),d):e},d.endAngle=function(s){return arguments.length?(n=typeof s=="function"?s:H(+s),d):n},d.padAngle=function(s){return arguments.length?(o=typeof s=="function"?s:H(+s),d):o},d.context=function(s){return arguments.length?(l=s??null,d):l},d}var ue=["bmsSvg"];function pe(i,t){if(i&1&&$h(0,"widget-title",1),i&2){let a=qw();Bh("text",a.displayLabel())("color",a.labelColor());}}function me(i,t){i&1&&(Pi(0,"div",3)(1,"div",4),TT(2,"No batteries detected"),ul(),Pi(3,"div",5),TT(4,"Check Signal K battery paths or select batteries in widget settings."),ul()());}var ee=class i{static BMS_DESCRIPTOR=a("widget-bms");static ROOT_PATTERN=`${i.BMS_DESCRIPTOR?.selfRootPath??"self.electrical.batteries"}.*`;id=Hj.required();type=Hj.required();theme=Hj.required();renderMode=Hj(null);static DEFAULT_CONFIG={color:"contrast",ignoreZones:false,bms:{trackedDevices:[],groups:[],banks:[]}};static VIEWBOX_WIDTH=200;static MIN_VIEWBOX_HEIGHT=1;static BANK_CARD_WIDTH=200;static BATTERY_CARD_HEIGHT=50;static BATTERY_CARD_WIDTH=200;static CARD_GAP=8;static BANK_HEADER_HEIGHT=80;static BANK_MIN_HEIGHT=75;static SINGLE_ROW_BANK_HEIGHT=100;static IN_BANK_COLUMNS=2;static IN_BANK_COLUMN_GAP=5;static IN_BANK_PADDING_X=0;static BANK_GAUGE_RADIUS=50;static BANK_GAUGE_BG_STROKE=10;static BANK_GAUGE_VALUE_STROKE=10;static COMPACT_UNASSIGNED_BATTERY_SCALE=.82;static PATH_BATCH_WINDOW_MS=500;runtime=w(p);data=w(De);units=w(ut);iconRegistry=w(K);destroyRef=w(xe);svgRef=$j.required("bmsSvg");svg;root;bankLayer;batteryLayer;bankGaugeBackgroundPath=this.buildSemiGaugeArcPath(i.BANK_GAUGE_RADIUS,1);glowFilterId="";renderFrameId=null;pendingRenderSnapshot=null;pathBatchTimerId=null;initialPathPaintDone=false;pendingPathUpdates=new Map;powerAvailableIconTemplate=null;powerRenewalIconTemplate=null;discoveredBatteryIds=vt([]);trackedBatteryDeviceIds=vt([]);banks=vt([]);cardMode=vt({displayMode:"full",metrics:[]});batteries=vt({});visibleBatteryIds=Dt(()=>{let t=this.trackedBatteryDeviceIds();return t.length?t:this.discoveredBatteryIds()});visibleBatteries=Dt(()=>{let t=this.visibleBatteryIds(),a=this.batteries();return t.map(r=>a[r]).filter(r=>!!r)});bankSummaries=Dt(()=>{let t=this.banks(),a=this.batteries();return t.map(r=>this.buildBankSummary(r,a))});activeDisplayMode=Dt(()=>this.renderMode()??this.cardMode().displayMode??"full");isCompactCardMode=Dt(()=>this.activeDisplayMode()==="compact");colorRole=Dt(()=>this.runtime.options()?.color??"contrast");ignoreZones=Dt(()=>this.runtime.options()?.ignoreZones??false);displayLabel=Dt(()=>{let t=this.bankSummaries();if(t.length===1)return t[0].name||"Bank";if(t.length>1)return "Batteries";let a=this.visibleBatteries();return a.length!==1?"Batteries":this.resolveBatteryTitleText(a[0])});labelColor=Dt(()=>{let t=this.theme();return t?c(this.colorRole(),t).dim:"var(--kip-contrast-dim-color)"});widgetColors=Dt(()=>{let t=this.theme();return t?c(this.colorRole(),t):null});batteryDisplayModels=Dt(()=>{let t=this.visibleBatteries(),a=this.theme(),r=this.widgetColors(),e$1=this.ignoreZones(),n={};for(let o of t){let l=e(o.stateOfChargeState,r?.dimmer??"var(--kip-contrast-dimmer-color)",a,e$1),m=e(o.stateOfChargeState,r?.dim??"var(--kip-contrast-dim-color)",a,e$1),d=e(o.currentState,"var(--kip-contrast-dim-color)",a,e$1),s=e(o.currentState,"var(--kip-contrast-color)",a,e$1);n[o.id]={id:o.id,titleText:this.resolveBatteryTitleText(o),chargeWidth:(i.BATTERY_CARD_WIDTH-3)*(o.stateOfCharge??0),chargeBarColorCompact:l,chargeBarColorRegular:m,currentTextColorCompact:d,currentTextColorRegular:s,currentText:`${this.formatCurrent(o.current)}`.trim(),detailLineCompact:`${this.formatVoltage(o.voltage)}\xA0\xA0\xA0\xA0${this.formatTemperature(o.temperature)}`,detailLineRegular:`${this.formatVoltage(o.voltage)}\xA0\xA0\xA0\xA0${this.formatPower(o.power)}\xA0\xA0\xA0\xA0${this.formatTemperature(o.temperature)}`.trim(),socText:this.formatSoc(o.stateOfCharge),socGlowEnabled:!e$1&&(o.stateOfChargeState===n$1.Warn||o.stateOfChargeState===n$1.Alarm||o.stateOfChargeState===n$1.Alert),remainingCapacityText:o.capacityActual?`${this.formatEnergy(o.capacityRemaining)}`:"",remainingTimeText:`${this.formatDuration(o.timeRemaining)}`.trim(),iconKey:o.current!=null&&o.current>0?"power_renewal":"power_available"};}return n});bankDisplayModels=Dt(()=>{let t=this.bankSummaries(),a=this.widgetColors(),r={};for(let e of t)r[e.id]={id:e.id,titleText:e.name||"Bank",currentText:this.formatCurrent(e.totalCurrent),powerText:this.formatPower(e.totalPower),socText:this.formatSoc(e.avgSoc),remainingTimeText:`${this.formatDuration(e.timeRemaining)}`.trim(),remainingCapacityText:e.remainingCapacity?`${this.formatEnergy(e.remainingCapacity)}`:"",gaugeValuePath:this.buildSemiGaugeArcPath(i.BANK_GAUGE_RADIUS,e.avgSoc),gaugeValueColor:a?.color??"var(--kip-contrast-color)",zoneState:null,zoneColor:null};return r});hasBatteries=Dt(()=>this.visibleBatteries().length>0);hasBanks=Dt(()=>this.bankSummaries().length>0);constructor(){Fa(()=>{let a=this.runtime.options();a&&ge(()=>this.applyConfig(a));}),Fa(()=>{let a=this.bankSummaries(),r=this.visibleBatteries(),e=this.widgetColors(),n=this.batteryDisplayModels(),o=this.bankDisplayModels();!this.svg||!e||this.requestRender({banks:a,batteries:r,batteryDisplayModels:n,bankDisplayModels:o,widgetColors:e});});let t=this.data.subscribePathTreeWithInitial(i.ROOT_PATTERN);if(t.initial.length){for(let a of t.initial)this.enqueuePathUpdate(a,true);this.flushPendingPathUpdates(),this.initialPathPaintDone=true;}t.live$.pipe(Gp(this.destroyRef)).subscribe(a=>{this.enqueuePathUpdate(a);});}ngAfterViewInit(){this.initializeSvg(),this.loadPowerIcons(),this.requestRender();}ngOnDestroy(){this.pathBatchTimerId!==null&&(clearTimeout(this.pathBatchTimerId),this.pathBatchTimerId=null),this.renderFrameId!==null&&(cancelAnimationFrame(this.renderFrameId),this.renderFrameId=null),this.pendingRenderSnapshot=null;}initializeSvg(){this.svg=ge$1(this.svgRef().nativeElement),this.svg.attr("viewBox",`0 0 ${i.VIEWBOX_WIDTH} ${i.MIN_VIEWBOX_HEIGHT}`).attr("preserveAspectRatio","xMidYMid meet").attr("role","img").attr("aria-label","Battery Management System View"),this.glowFilterId=`bms-soc-glow-${this.id()}`;let a=this.svg.append("defs").append("filter").attr("id",this.glowFilterId).attr("x","-30%").attr("y","-30%").attr("width","160%").attr("height","160%");a.append("feFlood").attr("class","bms-soc-glow-flood").attr("flood-color","var(--kip-widget-card-background-color)").attr("flood-opacity",.9).attr("result","color"),a.append("feComposite").attr("in","color").attr("in2","SourceGraphic").attr("operator","in").attr("result","coloredGlow"),a.append("feGaussianBlur").attr("in","coloredGlow").attr("stdDeviation",2).attr("result","blur");let r=a.append("feMerge");r.append("feMergeNode").attr("in","blur"),r.append("feMergeNode").attr("in","blur"),r.append("feMergeNode").attr("in","SourceGraphic"),this.root=this.svg.append("g").attr("class","bms-root"),this.bankLayer=this.root.append("g").attr("class","bms-banks"),this.batteryLayer=this.root.append("g").attr("class","bms-batteries");}loadPowerIcons(){this.loadNamedIcon("power_available",t=>{this.powerAvailableIconTemplate=t;}),this.loadNamedIcon("power_renewal",t=>{this.powerRenewalIconTemplate=t;});}loadNamedIcon(t,a){this.iconRegistry.getNamedSvgIcon(t).pipe(_t(1)).subscribe({next:r=>{a(r),this.requestRender();},error:()=>{}});}applyConfig(t){let a=this.resolveBmsConfig(t);this.trackedBatteryDeviceIds.set([...new Set((a.trackedDevices??[]).map(r=>r.id))]),this.banks.set(a.banks),this.cardMode.set(this.normalizeCardMode(a.cardMode));}resolveBmsConfig(t){let a=t.bms,r=this.normalizeTrackedDevices(a?.trackedDevices),e=this.normalizeBanksFromGroups(a?.groups),n=this.normalizeBanksFromLegacy(a?.banks);return {trackedDevices:r,groups:e,banks:e.length>0?e:n,cardMode:this.normalizeCardMode(a?.cardMode)}}normalizeTrackedDevices(t){if(!Array.isArray(t))return [];let a=new Map;return t.forEach(r=>{if(!r||typeof r!="object")return;let e=r,n=typeof e.id=="string"?e.id.trim():"",o=typeof e.source=="string"?e.source.trim():"default";if(!n||!o)return;let l=typeof e.key=="string"&&e.key.trim().length>0?e.key.trim():`${n}||${o}`;a.set(l,{id:n,source:o,key:l});}),[...a.values()].sort((r,e)=>r.key.localeCompare(e.key))}normalizeCardMode(t){let a=t&&typeof t=="object"?t:null,r=this.normalizeStringList(a?.metrics);return {displayMode:a?.displayMode==="compact"?"compact":"full",metrics:r}}normalizeStringList(t){if(!Array.isArray(t))return [];let a=new Set;return t.forEach(r=>{if(typeof r!="string")return;let e=r.trim();e.length>0&&a.add(e);}),[...a].sort((r,e)=>r.localeCompare(e))}normalizeBanksFromGroups(t){return Array.isArray(t)?t.map(a=>{let r=this.normalizeOptionalString(a?.id)??`bank-${Date.now()}`,e=this.normalizeOptionalString(a?.name)??r,n=this.normalizeStringList(a?.memberIds);return {id:r,name:e,batteryIds:n,connectionMode:this.normalizeConnectionMode(a?.connectionMode)}}).filter(a=>a.id.length>0):[]}normalizeBanksFromLegacy(t){return Array.isArray(t)?t.map(a=>{let r=this.normalizeOptionalString(a?.id)??`bank-${Date.now()}`,e=this.normalizeOptionalString(a?.name)??r,n=this.normalizeStringList(a?.batteryIds);return {id:r,name:e,batteryIds:n,connectionMode:this.normalizeConnectionMode(a?.connectionMode)}}).filter(a=>a.id.length>0):[]}normalizeOptionalString(t){if(typeof t!="string")return null;let a=t.trim();return a.length>0?a:null}normalizeConnectionMode(t){return t==="series"?"series":"parallel"}enqueuePathUpdate(t,a=false){let r=this.parseBatteryPath(t.path);if(!r)return;let{id:e,key:n}=r,o=t.update?.data?.value??null,l=t.update?.state??null,m=`${e}::${n}`;if(this.pendingPathUpdates.set(m,{id:e,key:n,value:o,state:l}),!a){if(!this.initialPathPaintDone){this.initialPathPaintDone=true,this.flushPendingPathUpdates();return}this.pathBatchTimerId===null&&(this.pathBatchTimerId=window.setTimeout(()=>{this.pathBatchTimerId=null,this.flushPendingPathUpdates();},i.PATH_BATCH_WINDOW_MS));}}flushPendingPathUpdates(){if(!this.pendingPathUpdates.size)return;let t=Array.from(this.pendingPathUpdates.values());this.pendingPathUpdates.clear(),new Set(t.map(r=>r.id)).forEach(r=>this.trackDiscoveredBattery(r)),this.batteries.update(r=>{let e=r,n=false;for(let o of t){let l=e[o.id]??{id:o.id},m=G({},l),d=this.applyBatteryValue(m,o.key,o.value,o.state),s=false;if(m.voltage!=null&&m.current!=null){let g=Number.isFinite(m.voltage)&&Number.isFinite(m.current)?m.voltage*m.current:null;Object.is(m.power,g)||(m.power=g,s=true);}!d&&!s||(n||(e=G({},e),n=true),e[o.id]=m);}return n?e:r});}parseBatteryPath(t){let a=t.match(/self\.electrical\.batteries\.([^.]+)\.(.+)$/);return a?{id:a[1],key:a[2]}:null}trackDiscoveredBattery(t){let a=this.discoveredBatteryIds();if(a.includes(t))return;let r=[...a,t].sort();this.discoveredBatteryIds.set(r);}applyBatteryValue(t,a,r,e){switch(a){case "name":{let n=r;return t.name===n?false:(t.name=n,true)}case "location":{let n=r;return t.location===n?false:(t.location=n,true)}case "associatedBus":{let n=r;return t.associatedBus===n?false:(t.associatedBus=n,true)}case "chemistry":{let n=r;return t.chemistry===n?false:(t.chemistry=n,true)}case "voltage":{let n=this.toNumber(r);return Object.is(t.voltage,n)?false:(t.voltage=n,true)}case "current":{let n=this.toNumber(r),o=!Object.is(t.currentState??null,e??null);return Object.is(t.current,n)&&!o?false:(t.current=n,t.currentState=e,true)}case "temperature":{let n=this.toNumber(r);return Object.is(t.temperature,n)?false:(t.temperature=n,true)}case "capacity.nominal":{let n=this.toNumber(r);return Object.is(t.capacityNominal,n)?false:(t.capacityNominal=n,true)}case "capacity.actual":{let n=this.toNumber(r);return Object.is(t.capacityActual,n)?false:(t.capacityActual=n,true)}case "capacity.remaining":{let n=this.toNumber(r);return Object.is(t.capacityRemaining,n)?false:(t.capacityRemaining=n,true)}case "capacity.stateOfCharge":{let n=this.toNumber(r),o=!Object.is(t.stateOfChargeState??null,e??null);return Object.is(t.stateOfCharge,n)&&!o?false:(t.stateOfCharge=n,t.stateOfChargeState=e,true)}case "capacity.timeRemaining":{let n=this.toNumber(r);return Object.is(t.timeRemaining,n)?false:(t.timeRemaining=n,true)}default:return false}}buildBankSummary(t,a){let r=t.batteryIds.map(s=>a[s]).filter(s=>!!s),e=this.normalizeConnectionMode(t.connectionMode),n=this.calculateBankCurrent(r,e),o=this.sumNumbers(r.map(s=>s.power)),l=this.sumNumbers(r.map(s=>s.capacityRemaining)),m=this.calculateBankSoc(r),d=this.calculateBankTimeRemaining(r,e);return {id:t.id,name:t.name,batteryIds:t.batteryIds,totalCurrent:n,totalPower:o,remainingCapacity:l,avgSoc:m,timeRemaining:d}}calculateBankSoc(t){let a=this.sumNumbers(t.map(n=>n.capacityRemaining)),r=this.sumNumbers(t.map(n=>n.capacityActual));if(a!=null&&r!=null&&r>0)return Math.max(0,Math.min(1,a/r));let e=this.sumNumbers(t.map(n=>n.capacityNominal));return a!=null&&e!=null&&e>0?Math.max(0,Math.min(1,a/e)):this.averageNumbers(t.map(n=>n.stateOfCharge))}calculateBankCurrent(t,a){let r=t.map(e=>e.current);return a==="series"?this.averageNumbers(r):this.sumNumbers(r)}calculateBankTimeRemaining(t,a){let r=t.map(e=>e.timeRemaining);return a==="series"?this.minNumber(r):this.averageNumbers(r)}requestRender(t){this.svg&&(this.pendingRenderSnapshot=t??this.buildRenderSnapshot(),this.pendingRenderSnapshot&&this.renderFrameId===null&&(this.renderFrameId=requestAnimationFrame(()=>{this.renderFrameId=null;let a=this.pendingRenderSnapshot;this.pendingRenderSnapshot=null,a&&this.render(a);})));}buildRenderSnapshot(){let t=this.widgetColors();return t?{banks:this.bankSummaries(),batteries:this.visibleBatteries(),batteryDisplayModels:this.batteryDisplayModels(),bankDisplayModels:this.bankDisplayModels(),widgetColors:t}:null}render(t){if(!this.bankLayer||!this.batteryLayer)return;let{banks:a,batteries:r,bankDisplayModels:e,batteryDisplayModels:n,widgetColors:o}=t,l=this.buildRenderLayout(a,r,e,n,this.isCompactCardMode()),d=this.isCompactCardMode()?e$1:e$1,s=Math.max(i.MIN_VIEWBOX_HEIGHT,l.contentHeight);this.svg?.attr("viewBox",`0 0 ${i.VIEWBOX_WIDTH} ${s}`),this.root?.attr("transform",null);let g=this.bankLayer.selectAll("g.bank-card").data(l.banks,u=>u.id),c=g.enter().append("g").attr("class","bank-card"),y=c.append("text").attr("class","bank-card-power");y.append("tspan").attr("class","bank-card-power-value"),y.append("tspan").attr("class","bank-card-power-unit");let v=c.append("text").attr("class","bank-card-current");v.append("tspan").attr("class","bank-card-current-value"),v.append("tspan").attr("class","bank-card-current-unit");let k=c.append("g").attr("class","bank-gauge");k.append("path").attr("class","bank-gauge-bg"),k.append("path").attr("class","bank-gauge-value");let R=k.append("text").attr("class","bank-gauge-soc");R.append("tspan").attr("class","bank-gauge-soc-value"),R.append("tspan").attr("class","bank-gauge-soc-unit");let x=c.append("text").attr("class","bank-actualCapacity");x.append("tspan").attr("class","bank-actualCapacity-value"),x.append("tspan").attr("class","bank-actualCapacity-unit"),c.append("text").attr("class","bank-remaining"),c.append("g").attr("class","bank-bms-batteries"),c.append("text").attr("class","bank-title");let h=c.merge(g);h.attr("transform",u=>`translate(${u.x},${u.y})`),l.banks.length>1?h.select("text.bank-title").attr("x",d.titleX).attr("y",d.titleY).attr("fill","var(--kip-contrast-dim-color)").attr("font-size",d.titleFontSize).text(u=>u.displayModel.titleText):h.select("text.bank-title").text(""),h.select("text.bank-card-current").attr("x",d.lineOneX).attr("y",d.lineOneY).attr("fill","var(--kip-contrast-color)").attr("font-size",d.lineOneFontSize),h.select("tspan.bank-card-current-value").text(u=>this.splitMetricText(u.displayModel.currentText,"A").valueText),h.select("tspan.bank-card-current-unit").attr("dx",1).attr("font-size",12).attr("fill","var(--kip-contrast-color)").text(u=>this.splitMetricText(u.displayModel.currentText,"A").unitText),h.select("text.bank-card-power").attr("x",5).attr("y",42).attr("fill","var(--kip-contrast-color)").attr("font-size",10).attr("opacity",.8),h.select("tspan.bank-card-power-value").text(u=>this.splitMetricText(u.displayModel.powerText,"W").valueText),h.select("tspan.bank-card-power-unit").attr("dx",1).attr("font-size",6).attr("fill","var(--kip-contrast-color)").text(u=>this.splitMetricText(u.displayModel.powerText,"W").unitText),h.select("g.bank-gauge").attr("transform","translate(143, 60)"),h.select("path.bank-gauge-bg").attr("d",this.bankGaugeBackgroundPath).attr("fill","none").attr("stroke","var(--kip-contrast-dimmer-color)").attr("stroke-width",i.BANK_GAUGE_BG_STROKE).attr("stroke-linecap","round"),h.select("path.bank-gauge-value").attr("d",u=>u.displayModel.gaugeValuePath).attr("fill","none").attr("stroke",u=>u.displayModel.gaugeValueColor).attr("stroke-width",i.BANK_GAUGE_VALUE_STROKE).attr("stroke-linecap","round"),h.select("text.bank-gauge-soc").attr("x",0).attr("y",-5).attr("text-anchor","middle").attr("fill","var(--kip-contrast-color)").attr("font-size",d.primaryFontSize).attr("font-weight",d.primaryFontWeight),h.select("tspan.bank-gauge-soc-value").text(u=>this.splitMetricText(u.displayModel.socText,"%").valueText),h.select("tspan.bank-gauge-soc-unit").attr("dx",1).attr("font-size",22).attr("font-weight",500).attr("fill","var(--kip-contrast-color)").text(u=>this.splitMetricText(u.displayModel.socText,"%").unitText),h.select("text.bank-remaining").attr("x",143).attr("y",26).attr("fill","var(--kip-contrast-dim-color)").attr("text-anchor","middle").attr("font-size",8).text(u=>u.displayModel.remainingTimeText),h.select("text.bank-actualCapacity").attr("x",143).attr("y",66).attr("fill","var(--kip-contrast-dim-color)").attr("text-anchor","middle").attr("font-size",8),h.select("tspan.bank-actualCapacity-value").text(u=>this.splitMetricText(u.displayModel.remainingCapacityText,"kWh").valueText),h.select("tspan.bank-actualCapacity-unit").attr("dx",1).attr("font-size",6).attr("fill","var(--kip-contrast-dim-color)").text(u=>this.splitMetricText(u.displayModel.remainingCapacityText,"kWh").unitText),h.select("g.bank-bms-batteries").each((u,N,w)=>{let B=ge$1(w[N]).selectAll("g.battery-card").data(u.batteries,p=>p.key),C=B.enter().append("g").attr("class","battery-card battery-card--in-bank");this.appendBatteryCardSkeleton(C);let I=C.merge(B);this.renderBatteryCards(I,o,t.batteries.length>1),B.exit().remove();}),g.exit().remove();let M=this.batteryLayer.selectAll("g.battery-card").data(l.unassignedBatteries,u=>u.key),T=M.enter().append("g").attr("class","battery-card battery-card--unassigned");this.appendBatteryCardSkeleton(T);let f=T.merge(M);this.renderBatteryCards(f,o,true),M.exit().remove(),this.root?.attr("data-theme","ready");}buildRenderLayout(t,a,r,e,n){let o=new Map(a.map(f=>[f.id,f])),l=new Set,m=this.computeInBankBatterySlotWidth(),d=Math.max(.35,Math.min(1,m/i.BATTERY_CARD_WIDTH)),s=i.BATTERY_CARD_HEIGHT*d,g=0,c=t.map(f=>{let u=new Set,N=f.batteryIds.map(A=>o.get(A)).filter(A=>!A||u.has(A.id)?false:(u.add(A.id),true));N.forEach(A=>l.add(A.id));let w=Math.ceil(N.length/i.IN_BANK_COLUMNS),E=i.SINGLE_ROW_BANK_HEIGHT,B=!n&&w===1,C=B?Math.max(0,E-s-i.CARD_GAP):i.BANK_HEADER_HEIGHT,I=w>0?w*s+(w-1)*i.CARD_GAP:0,p=Math.max(i.BANK_MIN_HEIGHT,C+I+i.CARD_GAP),b=B?E:p,O=N.map((A,P)=>{let K=P%i.IN_BANK_COLUMNS,V=Math.floor(P/i.IN_BANK_COLUMNS),Y=i.IN_BANK_PADDING_X+K*(m+i.IN_BANK_COLUMN_GAP),q=C+7+V*(s+i.CARD_GAP);return {id:A.id,displayModel:e[A.id],key:`${f.id}::${A.id}`,x:Y,y:q,scale:d,inBank:true,compact:true}}),U={id:f.id,name:f.name,batteryIds:f.batteryIds,totalCurrent:f.totalCurrent,totalPower:f.totalPower,avgSoc:f.avgSoc,remainingCapacity:f.remainingCapacity,timeRemaining:f.timeRemaining,displayModel:r[f.id],x:0,y:g,width:i.BANK_CARD_WIDTH,height:b,batteries:O};return g+=b+i.CARD_GAP,U}),y=c.length>0?g:0,v=n?i.COMPACT_UNASSIGNED_BATTERY_SCALE:1,k=i.BATTERY_CARD_HEIGHT*v,R=a.filter(f=>!l.has(f.id)).sort((f,u)=>f.id.localeCompare(u.id)).map((f,u)=>({id:f.id,displayModel:e[f.id],key:f.id,x:0,y:y+u*(k+i.CARD_GAP),scale:v,inBank:false,compact:n})),x=c[c.length-1],h=x?x.y+x.height:0,M=R[R.length-1],T=M?M.y+k:0;return {banks:c,unassignedBatteries:R,contentHeight:Math.max(h,T)}}computeInBankBatterySlotWidth(){return (i.BANK_CARD_WIDTH-i.IN_BANK_PADDING_X*2-i.IN_BANK_COLUMN_GAP)/i.IN_BANK_COLUMNS}appendBatteryCardSkeleton(t){t.append("rect").attr("class","bms-battery").attr("rx",4).attr("ry",4),t.append("rect").attr("class","bms-battery-tip").attr("rx",1).attr("ry",1),t.append("rect").attr("class","bms-charge-fill").attr("rx",3).attr("ry",3),t.append("g").attr("class","bms-state-icon"),t.append("text").attr("class","bms-ampere"),t.append("text").attr("class","bms-volt-power");let a=t.append("text").attr("class","bms-soc");a.append("tspan").attr("class","bms-soc-value"),a.append("tspan").attr("class","bms-soc-unit"),t.append("text").attr("class","bms-actualCapacity"),t.append("text").attr("class","bms-remaining"),t.append("text").attr("class","bms-title");}renderBatteryCards(t,a,r){t.attr("transform",e=>`translate(${e.x},${e.y}) scale(${e.scale})`),t.select("rect.bms-battery").attr("width",e=>e.inBank?i.BATTERY_CARD_WIDTH:e.compact?i.BATTERY_CARD_WIDTH-i.CARD_GAP:i.BATTERY_CARD_WIDTH).attr("height",i.BATTERY_CARD_HEIGHT).attr("fill",e=>e.compact?"var(--mat-sys-background)":"var(--kip-contrast-dimmer-color)").attr("stroke","var(--kip-contrast-dimmer-color)").attr("stroke-width",0),t.select("rect.bms-battery-tip").attr("x",i.BATTERY_CARD_WIDTH).attr("y",i.BATTERY_CARD_HEIGHT/2-10).attr("width",4).attr("height",20).attr("fill",e=>e.compact?"var(--mat-sys-background)":"var(--kip-contrast-dimmer-color)").attr("stroke",a.color).attr("stroke-width",0),t.select("rect.bms-charge-fill").attr("x",1.5).attr("y",1.5).attr("width",e=>e.displayModel.chargeWidth).attr("height",i.BATTERY_CARD_HEIGHT-3).attr("fill",e=>e.compact?e.displayModel.chargeBarColorCompact:e.displayModel.chargeBarColorRegular),r?t.select("text.bms-title").attr("x",5).attr("y",e=>e.compact?11:14).attr("fill","var(--kip-contrast-dim-color)").attr("font-size",e=>e.compact?8:12).attr("filter",e=>e.displayModel.socGlowEnabled?`url(#${this.glowFilterId})`:null).text(e=>e.displayModel.titleText):t.select("text.bms-title").text(""),t.select("text.bms-ampere").attr("x",10).attr("y",33).attr("fill",e=>e.compact?e.displayModel.currentTextColorCompact:e.displayModel.currentTextColorRegular).attr("font-size",16).attr("filter",e=>e.displayModel.socGlowEnabled?`url(#${this.glowFilterId})`:null).text(e=>e.displayModel.currentText),t.select("text.bms-volt-power").attr("x",10).attr("y",45).attr("fill","var(--kip-contrast-dim-color)").attr("font-size",8).attr("opacity",.8).attr("filter",e=>e.displayModel.socGlowEnabled?`url(#${this.glowFilterId})`:null).text(e=>e.compact?e.displayModel.detailLineCompact:e.displayModel.detailLineRegular),t.select("text.bms-soc").attr("x",i.BATTERY_CARD_WIDTH-33).attr("y",34).attr("fill",e=>e.compact?"var(--kip-contrast-dim-color)":"var(--kip-contrast-color)").attr("text-anchor","middle").attr("font-size",25).attr("font-weight",700).attr("filter",e=>e.displayModel.socGlowEnabled?`url(#${this.glowFilterId})`:null),t.select("tspan.bms-soc-value").text(e=>this.splitMetricText(e.displayModel.socText,"%").valueText),t.select("tspan.bms-soc-unit").attr("dx",1).attr("font-size",16).attr("font-weight",500).text(e=>this.splitMetricText(e.displayModel.socText,"%").unitText),t.select("text.bms-actualCapacity").attr("x",i.BATTERY_CARD_WIDTH-33).attr("y",45).attr("fill","var(--kip-contrast-dim-color)").attr("text-anchor","middle").attr("font-size",8).attr("filter",e=>e.displayModel.socGlowEnabled?`url(#${this.glowFilterId})`:null).text(e=>e.compact?"":e.displayModel.remainingCapacityText),t.select("text.bms-remaining").attr("x",i.BATTERY_CARD_WIDTH-33).attr("y",12).attr("fill","var(--kip-contrast-dim-color)").attr("text-anchor","middle").attr("font-size",6).attr("filter",e=>e.displayModel.socGlowEnabled?`url(#${this.glowFilterId})`:null).text(e=>e.compact?"":e.displayModel.remainingTimeText),t.select("g.bms-state-icon").attr("transform",`translate(${i.BATTERY_CARD_WIDTH/2-18}, ${i.BATTERY_CARD_HEIGHT/2-18})`).attr("display",e=>e.compact&&e.scale<.45?"none":null).attr("color",e=>e.compact?a.dim:a.color).attr("filter",e=>e.displayModel.socGlowEnabled?`url(#${this.glowFilterId})`:null).each((e,n,o)=>{let l=ge$1(o[n]),m=e.displayModel.iconKey,d=m==="power_renewal"?this.powerRenewalIconTemplate:this.powerAvailableIconTemplate;if(!d){l.selectAll("*").remove(),l.attr("data-icon-key",null);return}let s=l.node();if(!s||l.attr("data-icon-key")===m&&s.firstElementChild)return;l.selectAll("*").remove();let c=d.cloneNode(true);c.removeAttribute("id"),c.setAttribute("width","36"),c.setAttribute("height","36"),c.getAttribute("viewBox")||c.setAttribute("viewBox","0 0 24 24"),s.appendChild(c),l.attr("data-icon-key",m);});}formatVoltage(t){return t==null?"-- V":`${t.toFixed(1)}V`}formatCurrent(t){return t==null?"-- A":`${t.toFixed(1)}A`}formatPower(t){return t==null?"":`${t.toFixed(0)}W`}formatEnergy(t){return t==null?"":(t=this.units.convertToUnit("kWh",t),`${t}kWh`)}formatSoc(t){return t==null?"--%":`${Math.round(t*100)}%`}resolveBatteryTitleText(t){return t.name||`Battery ${t.id}`}formatDuration(t){if(t==null)return "";let a=this.units.convertToUnit("D HH:MM:SS",t);return a==null?"":typeof a=="string"?a:`${a}`}formatTemperature(t){if(t==null||typeof t!="number")return "";let a=this.units.getDefaults().Temperature,r=this.units.convertToUnit(a,t);return r===null?"":`${r.toFixed(1)} ${a==="celsius"?"\xB0C":"\xB0F"}`}splitMetricText(t,a){if(!t)return {valueText:"",unitText:""};let r=t.trim();return r?r.endsWith(a)?{valueText:r.slice(0,Math.max(0,r.length-a.length)).trim(),unitText:a}:{valueText:r,unitText:""}:{valueText:"",unitText:""}}sumNumbers(t){let a=t.filter(r=>typeof r=="number");return a.length?a.reduce((r,e)=>r+e,0):null}averageNumbers(t){let a=t.filter(r=>typeof r=="number");return a.length?a.reduce((r,e)=>r+e,0)/a.length:null}minNumber(t){let a=t.filter(r=>typeof r=="number");return a.length?Math.min(...a):null}toNumber(t){return t==null||typeof t!="number"?null:t}buildSemiGaugeArcPath(t,a){let r=Math.max(0,Math.min(1,a??0)),e=-Math.PI*.55,n=Math.PI*1.1,o=e+n*r;if(r<=0){let l=t*Math.cos(e),m=t*Math.sin(e);return `M ${l} ${m}`}return Bt()({innerRadius:t,outerRadius:t,startAngle:e,endAngle:o})??""}static \u0275fac=function(a){return new(a||i)};static \u0275cmp=JD({type:i,selectors:[["widget-bms"]],viewQuery:function(a,r){a&1&&eg(r.svgRef,ue,5),a&2&&Kw();},inputs:{id:[1,"id"],type:[1,"type"],theme:[1,"theme"],renderMode:[1,"renderMode"]},decls:4,vars:4,consts:[["bmsSvg",""],[3,"text","color"],["aria-hidden","false",1,"bms-svg"],[1,"bms-empty"],[1,"bms-empty-title"],[1,"bms-empty-sub"]],template:function(a,r){a&1&&(_w(0,pe,1,2,"widget-title",1),wd(),$h(1,"svg",2,0),_w(3,me,5,0,"div",3)),a&2&&(Mw(r.hasBanks()?0:-1),EE(),sg("bms-svg--full",!r.hasBanks()),EE(2),Mw(r.hasBatteries()?-1:3));},dependencies:[yt,x],styles:["[_nghost-%COMP%]{display:block;height:100%;width:100%;position:relative;overflow:hidden}.bms-svg[_ngcontent-%COMP%]{display:block;position:absolute;left:0;right:0;top:15%;height:85%;width:100%;overflow:hidden;padding:0 10px 10px}.bms-svg.bms-svg--full[_ngcontent-%COMP%]{top:0;height:100%;padding-top:10px}.bms-card-metric[_ngcontent-%COMP%]{fill:var(--mat-sys-on-surface);font-size:30px;font-weight:700}.bms-card-sub[_ngcontent-%COMP%]{fill:var(--mat-sys-on-surface);font-size:18px;opacity:.9}.bms-card-meta[_ngcontent-%COMP%]{fill:var(--mat-sys-on-surface);font-size:15px;opacity:.75}.bms-card-footer[_ngcontent-%COMP%]{fill:var(--mat-sys-on-surface);font-size:16px;opacity:.8}.bms-flow-line[_ngcontent-%COMP%]{stroke:var(--kip-zone-nominal-color);stroke-width:3px;stroke-dasharray:6 6;animation:_ngcontent-%COMP%_flow-dash 2s linear infinite}.bms-flow-line--out[_ngcontent-%COMP%]{stroke:var(--kip-zone-warn-color)}.bms-flow-line--in[_ngcontent-%COMP%]{stroke:var(--kip-zone-nominal-color)}.bms-flow-line--neutral[_ngcontent-%COMP%]{stroke:var(--kip-widget-card-border-color);animation:none}.bms-empty[_ngcontent-%COMP%]{position:absolute;inset:0;margin:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;text-align:center;color:var(--mat-sys-on-surface);background:color-mix(in srgb,var(--kip-widget-card-background-color) 92%,transparent)}.bms-empty-title[_ngcontent-%COMP%]{font-size:18px;font-weight:600}.bms-empty-sub[_ngcontent-%COMP%]{font-size:14px;opacity:.8}@keyframes _ngcontent-%COMP%_flow-dash{to{stroke-dashoffset:-12}}"]})};export{ee as WidgetBmsComponent};
|
package/public/index.html
CHANGED
|
@@ -62,5 +62,5 @@
|
|
|
62
62
|
</div>
|
|
63
63
|
</app-root>
|
|
64
64
|
</div>
|
|
65
|
-
<script src="polyfills-5MJXXCNC.js" type="module"></script><script src="main-
|
|
65
|
+
<script src="polyfills-5MJXXCNC.js" type="module"></script><script src="main-F7NMHHV4.js" type="module"></script></body>
|
|
66
66
|
</html>
|