@yamcs/opi 1.3.6 → 1.3.7
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/dist/opi.js
CHANGED
|
@@ -18,5 +18,5 @@ function Vu(p){let t=document.createElement("canvas").getContext("2d");t.fillSty
|
|
|
18
18
|
`))r=r.concat(this.wrapLine(t,s,i));return r}wrapLine(t,e,i){if(!e)return[""];let r=[],s,o,n,a=0;for(;e.length;){for(o=e.length;t.measureText(e.substr(0,o),this.font).width>i;o--);if(s=e.substr(0,o),o!==e.length)for(n=0;s.indexOf(" ",n)!==-1;n=s.indexOf(" ",n)+1);r.push(s.substr(0,n||s.length)),a=Math.max(a,t.measureText(r[r.length-1],this.font).width),e=e.substr(r[r.length-1].length,e.length)}return r}get font(){return this.properties.getValue(Ha).scale(this.scale)}get horizAlignment(){return this.properties.getValue(Da)}get vertAlignment(){return this.properties.getValue(Na)}get wrapWords(){return this.properties.getValue(Fa)}};var Ga="alpha",$a="fill_level",Ua="horizontal_fill",Ya="line_color",Xa="line_style",za="line_width",de="points",Gi=class extends V{constructor(t,e){super(t,e),this.properties.add(new P(Ga,255)),this.properties.add(new P(za)),this.properties.add(new B($a)),this.properties.add(new w(Ua)),this.properties.add(new S(Ya)),this.properties.add(new P(Xa)),this.properties.add(new vt(de,[]))}init(){this.addPropertyListener("x",(t,e)=>{let i=this.properties.getValue(de),r=Jt(i,t-e,0);this.properties.setValue(de,r),this.requestRepaint()}),this.addPropertyListener("y",(t,e)=>{let i=this.properties.getValue(de),r=Jt(i,0,t-e);this.properties.setValue(de,r),this.requestRepaint()})}draw(t){let{scale:e}=this;t.ctx.globalAlpha=this.alpha/255;let i=v.fromPoints(this.points).closePath();if(!this.transparent){let r=this.alarmSensitiveBackgroundColor;t.fillPath({path:i,color:r})}this.lineWidth&&(this.lineStyle===0?t.strokePath({path:i,lineWidth:this.lineWidth,color:this.lineColor}):this.lineStyle===2?t.strokePath({path:i,lineWidth:this.lineWidth,color:this.lineColor,dash:[6*e,2*e]}):console.warn(`Unsupported polygon line style ${this.lineStyle}`)),this.fillLevel&&this.drawFill(t,i),t.ctx.globalAlpha=1}drawFill(t,e){let i=this.y,r=this.width,s=this.height;this.horizontalFill?r*=this.fillLevel/100:(s*=this.fillLevel/100,i+=s),t.ctx.save();let o=this.x-this.lineWidth/2,n=i-this.lineWidth/2,a=r+this.lineWidth,l=s+this.lineWidth;t.ctx.beginPath(),t.ctx.rect(o,n,a,l),t.ctx.clip();let c=this.alarmSensitiveForegroundColor;t.fillPath({path:e,color:c}),t.ctx.restore()}get alpha(){return this.properties.getValue(Ga)}get lineWidth(){return this.scale*this.properties.getValue(za)}get fillLevel(){return this.properties.getValue($a)}get horizontalFill(){return this.properties.getValue(Ua)}get lineColor(){return this.properties.getValue(Ya)}get lineStyle(){return this.properties.getValue(Xa)}get points(){return Nt(this.properties.getValue(de),this.scale)}};var qa="alpha",Ka="arrows",ja="arrow_length",Za="fill_arrow",Ja="fill_level",Qa="horizontal_fill",tl="line_width",el="points",$i=class extends V{constructor(t,e){super(t,e),this.properties.add(new P(qa,255)),this.properties.add(new P(tl)),this.properties.add(new B(Ja)),this.properties.add(new w(Qa)),this.properties.add(new vt(el,[])),this.properties.add(new P(ja)),this.properties.add(new w(Za)),this.properties.add(new P(Ka))}draw(t){let e=t.ctx;e.globalAlpha=this.alpha/255,this.transparent&&(e.globalAlpha=0),this.drawShape(e,this.backgroundColor),this.fillLevel&&this.drawFill(e),e.globalAlpha=1}drawFill(t){let e=this.y,i=this.width,r=this.height;this.horizontalFill?i*=this.fillLevel/100:(r*=this.fillLevel/100,e+=r),t.save();let s=this.x-this.lineWidth/2,o=e-this.lineWidth/2,n=i+this.lineWidth,a=r+this.lineWidth;t.beginPath(),t.rect(s,o,n,a),t.clip(),this.drawShape(t,this.foregroundColor),t.restore()}drawShape(t,e){t.strokeStyle=e.toString(),t.lineWidth=this.lineWidth,t.beginPath();for(let i=0;i<this.points.length;i++)i===0?t.moveTo(this.points[i].x,this.points[i].y):t.lineTo(this.points[i].x,this.points[i].y);if(t.stroke(),this.points.length>=2){let i=this.points[0],r=this.points[this.points.length-1];if(this.arrows===2||this.arrows===3){let s=this.calculateArrowPoints(this.points[this.points.length-2],r);if(s[2]=r,this.fillArrow){t.fillStyle=e.toString(),t.beginPath();for(let o=0;o<s.length;o++)o===0?t.moveTo(s[o].x,s[o].y):t.lineTo(s[o].x,s[o].y);t.fill()}else t.strokeStyle=e.toString(),t.lineWidth=this.lineWidth,t.beginPath(),t.moveTo(r.x,r.y),t.lineTo(s[0].x,s[0].y),t.moveTo(r.x,r.y),t.lineTo(s[1].x,s[1].y),t.stroke()}if(this.arrows===1||this.arrows===3){let s=this.calculateArrowPoints(this.points[1],i);if(s[2]=i,this.fillArrow){t.fillStyle=e.toString(),t.beginPath();for(let o=0;o<s.length;o++)o===0?t.moveTo(s[o].x,s[o].y):t.lineTo(s[o].x,s[o].y);t.fill()}else t.strokeStyle=e.toString(),t.lineWidth=this.lineWidth,t.beginPath(),t.moveTo(i.x,i.y),t.lineTo(s[0].x,s[0].y),t.moveTo(i.x,i.y),t.lineTo(s[1].x,s[1].y),t.stroke()}}}calculateArrowPoints(t,e){let i=Ne(e,t),r=Math.PI/10,s=new lt(this.arrowLength,i.theta-r),o=new lt(this.arrowLength,i.theta+r),n=new lt(Math.floor(this.arrowLength*Math.cos(r)),i.theta),a=yt(s.toPoint(),e.x,e.y),l=yt(o.toPoint(),e.x,e.y),c=yt(n.toPoint(),e.x,e.y);return[a,l,c]}get alpha(){return this.properties.getValue(qa)}get lineWidth(){return this.scale*this.properties.getValue(tl)}get fillLevel(){return this.properties.getValue(Ja)}get horizontalFill(){return this.properties.getValue(Qa)}get points(){let t=Nt(this.properties.getValue(el),this.scale);return ys(t)}get arrows(){return this.properties.getValue(Ka)}get fillArrow(){return this.properties.getValue(Za)}get arrowLength(){return this.properties.getValue(ja)}};var il="alpha",rl="bg_gradient_color",sl="fg_gradient_color",ol="fill_level",nl="gradient",al="horizontal_fill",ll="line_color",hl="line_width",cl="line_style",Ui=class extends V{constructor(t,e){super(t,e),this.fillRoundRectangleBackgroundBorder=!1,this.properties.add(new P(il,255)),this.properties.add(new S(rl)),this.properties.add(new S(sl)),this.properties.add(new w(nl)),this.properties.add(new P(hl)),this.properties.add(new B(ol)),this.properties.add(new w(al)),this.properties.add(new S(ll)),this.properties.add(new P(cl))}draw(t){t.ctx.globalAlpha=this.alpha/255,this.drawBackground(t),this.fillLevel&&this.drawFill(t),t.ctx.globalAlpha=1}drawBackground(t){if(!this.transparent){let e=this.alarmSensitiveBackgroundColor;if(this.gradient){let i=this.horizontalFill?this.x:this.x+this.width,r=this.horizontalFill?this.y+this.height:this.y,s=t.createLinearGradient(this.x,this.y,i,r);s.addColorStop(0,this.backgroundGradientStartColor.toString()),s.addColorStop(1,e.toString()),t.fillRect({...this.area,gradient:s})}else t.fillRect({...this.area,color:e})}this.lineWidth&&(this.lineStyle===0?t.strokeRect({...this.area,color:this.lineColor,lineWidth:this.lineWidth,crispen:!0}):this.lineStyle===1?t.strokeRect({...this.area,color:this.lineColor,lineWidth:this.lineWidth,crispen:!0,dash:[6*this.scale,2*this.scale]}):console.warn(`Unsupported rectangle line style ${this.lineStyle}`))}drawFill(t){let e=D(this,this.lineWidth);if(t.ctx.save(),this.horizontalFill){let r=e.width*(this.fillLevel/100);t.ctx.beginPath(),t.ctx.rect(e.x,e.y,r,e.height)}else{let r=e.height*(this.fillLevel/100),s=e.y+e.height-r;t.ctx.beginPath(),t.ctx.rect(e.x,s,e.width,e.height)}t.ctx.clip();let i=this.alarmSensitiveForegroundColor;if(this.gradient){let r=this.horizontalFill?e.x:e.x+e.width,s=this.horizontalFill?e.y+e.height:e.y,o=t.createLinearGradient(e.x,e.y,r,s);o.addColorStop(0,this.foregroundGradientStartColor.toString()),o.addColorStop(1,i.toString()),t.fillRect({...e,gradient:o})}else t.fillRect({...e,color:i});t.ctx.restore()}get alpha(){return this.properties.getValue(il)}get lineWidth(){return this.scale*this.properties.getValue(hl)}get fillLevel(){return this.properties.getValue(ol)}get horizontalFill(){return this.properties.getValue(al)}get lineColor(){return this.properties.getValue(ll)}get lineStyle(){return this.properties.getValue(cl)}get gradient(){return this.properties.getValue(nl)}get backgroundGradientStartColor(){return this.properties.getValue(rl)}get foregroundGradientStartColor(){return this.properties.getValue(sl)}};var pl="alpha",dl="bg_gradient_color",ul="corner_width",gl="corner_height",ml="fg_gradient_color",fl="fill_level",xl="gradient",wl="horizontal_fill",yl="line_color",bl="line_width",Pl="line_style",Yi=class extends V{constructor(t,e){super(t,e),this.fillRoundRectangleBackgroundBorder=!1,this.properties.add(new P(pl,255)),this.properties.add(new S(dl)),this.properties.add(new S(ml)),this.properties.add(new w(xl)),this.properties.add(new P(bl)),this.properties.add(new B(fl)),this.properties.add(new w(wl)),this.properties.add(new S(yl)),this.properties.add(new P(ul)),this.properties.add(new P(gl)),this.properties.add(new P(Pl))}draw(t){t.ctx.globalAlpha=this.alpha/255,this.drawBackground(t),this.fillLevel&&this.drawFill(t),t.ctx.globalAlpha=1}drawBackground(t){if(!this.transparent){let e=this.alarmSensitiveBackgroundColor;if(this.gradient){let i=this.horizontalFill?this.x:this.x+this.width,r=this.horizontalFill?this.y+this.height:this.y,s=t.createLinearGradient(this.x,this.y,i,r);s.addColorStop(0,this.backgroundGradientStartColor.toString()),s.addColorStop(1,e.toString()),t.fillRect({...this.area,rx:this.cornerWidth/2,ry:this.cornerHeight/2,gradient:s})}else t.fillRect({...this.area,rx:this.cornerWidth/2,ry:this.cornerHeight/2,color:e})}this.lineWidth&&(this.lineStyle===0?t.strokeRect({...this.area,rx:this.cornerWidth/2,ry:this.cornerHeight/2,color:this.lineColor,lineWidth:this.lineWidth,crispen:!0}):this.lineStyle===1?t.strokeRect({...this.area,rx:this.cornerWidth/2,ry:this.cornerHeight/2,color:this.lineColor,lineWidth:this.lineWidth,crispen:!0,dash:[6*this.scale,2*this.scale]}):console.warn(`Unsupported RoundedRectangle line style ${this.lineStyle}`))}drawFill(t){let e=this.cornerWidth/2,i=this.cornerHeight/2,r=D(this,this.lineWidth);if(t.ctx.save(),this.horizontalFill){let o=r.width*(this.fillLevel/100);t.ctx.beginPath(),t.ctx.rect(r.x,r.y,o,r.height)}else{let o=r.height*(this.fillLevel/100),n=r.y+r.height-o;t.ctx.beginPath(),t.ctx.rect(r.x,n,r.width,r.height)}t.ctx.clip();let s=this.alarmSensitiveForegroundColor;if(this.gradient){let o=this.horizontalFill?r.x:r.x+r.width,n=this.horizontalFill?r.y+r.height:r.y,a=t.createLinearGradient(r.x,r.y,o,n);a.addColorStop(0,this.foregroundGradientStartColor.toString()),a.addColorStop(1,s.toString()),t.fillRect({...r,rx:e,ry:i,gradient:a})}else t.fillRect({...r,rx:e,ry:i,color:s});t.ctx.restore()}get alpha(){return this.properties.getValue(pl)}get lineWidth(){return this.scale*this.properties.getValue(bl)}get fillLevel(){return this.properties.getValue(fl)}get horizontalFill(){return this.properties.getValue(wl)}get lineColor(){return this.properties.getValue(yl)}get lineStyle(){return this.properties.getValue(Pl)}get gradient(){return this.properties.getValue(xl)}get cornerWidth(){return this.scale*this.properties.getValue(ul)}get cornerHeight(){return this.scale*this.properties.getValue(gl)}get backgroundGradientStartColor(){return this.properties.getValue(dl)}get foregroundGradientStartColor(){return this.properties.getValue(ml)}};var vl="bitReverse",_l="effect_3d",Rl="horizontal",Tl="led_border",Cl="led_border_color",Sl="led_packed",Ll="numBits",Al="off_color",El="on_color",Ol="startBit",Vl="square_led",Xi=class extends V{constructor(t,e){super(t,e),this.properties.add(new w(vl)),this.properties.add(new w(_l)),this.properties.add(new w(Rl)),this.properties.add(new P(Ll)),this.properties.add(new S(Al)),this.properties.add(new S(El)),this.properties.add(new P(Ol)),this.properties.add(new w(Vl)),this.properties.add(new P(Tl,3)),this.properties.add(new S(Cl,g.DARK_GRAY)),this.properties.add(new w(Sl,!1))}getLedColor(t){let e=!1;if(this.pv?.value!==void 0)for(let i=this.startBit;i<this.startBit+this.numBits;i++){let r=0;if(this.bitReverse?r=i-this.startBit:r=this.numBits-1-(i-this.startBit),r===t){e=(this.pv?.value>>i&1)>0;break}}return e?this.onColor:this.offColor}draw(t){if(this.numBits<1)return;let e=this.bounds;this.borderAlarmSensitive&&(e=D(e,2*this.scale)),this.horizontal?this.drawHorizontal(t,e):this.drawVertical(t,e)}drawHorizontal(t,e){let i,r;this.ledPacked?(i=Math.floor((e.width-this.ledBorder)/this.numBits+this.ledBorder),r=i-this.ledBorder):(i=Math.floor(e.width/this.numBits),r=i);let s=0;i>e.height||this.squareLed?s=e.height:s=i;for(let o=0;o<this.numBits;o++)if(this.squareLed){let n={x:e.x+o*r,y:e.y,width:i,height:s};this.effect3d?this.drawSquare3d(t,n,o):this.drawSquare2d(t,n,o)}else{let n=Math.min(i,s),a={x:e.x+o*r,y:e.y,width:n,height:n};this.effect3d?this.drawCircle3d(t,a,o):this.drawCircle2d(t,a,o)}}drawVertical(t,e){let i,r;this.ledPacked?(i=Math.floor((e.height-this.ledBorder)/this.numBits+this.ledBorder),r=i-this.ledBorder):(i=Math.floor(e.height/this.numBits),r=i);let s=0;i>e.width||this.squareLed?s=e.width:s=i;for(let o=0;o<this.numBits;o++)if(this.squareLed){let n={x:e.x,y:e.y+o*r,width:s,height:i};this.effect3d?this.drawSquare3d(t,n,o):this.drawSquare2d(t,n,o)}else{let n=Math.min(s,i),a={x:e.x,y:e.y+o*r,width:n,height:n};this.effect3d?this.drawCircle3d(t,a,o):this.drawCircle2d(t,a,o)}}drawCircle2d(t,e,i){let r=e.x+e.width/2,s=e.y+e.height/2,o=e.width/2,n=e.height/2;this.ledBorder>0&&(o-=this.ledBorder/2,n-=this.ledBorder/2),t.fillEllipse({cx:r,cy:s,rx:o,ry:n,color:this.getLedColor(i)}),t.strokeEllipse({cx:r,cy:s,rx:o,ry:n,color:this.ledBorderColor,lineWidth:this.ledBorder})}drawCircle3d(t,e,i){let r=e.x+e.width/2,s=e.y+e.height/2,o=e.width/2,n=e.height/2;t.fillEllipse({cx:r,cy:s,rx:o,ry:n,color:g.WHITE});let a=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y+e.height);a.addColorStop(0,this.ledBorderColor.toString()),a.addColorStop(1,this.ledBorderColor.withAlpha(0).toString()),t.fillEllipse({cx:r,cy:s,rx:o,ry:n,gradient:a});let l=e.width-2*this.ledBorder,c=e.height-2*this.ledBorder;o=l/2,n=c/2,t.fillEllipse({cx:r,cy:s,rx:o,ry:n,color:this.getLedColor(i)}),a=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y+e.height),a.addColorStop(0,g.WHITE.toString()),a.addColorStop(1,this.ledBorderColor.withAlpha(0).toString()),t.fillEllipse({cx:r,cy:s,rx:o,ry:n,gradient:a})}drawSquare2d(t,e,i){let r=wt(e.x,e.y,e.width,e.height,this.ledBorder);t.fillRect({...r,color:this.getLedColor(i)}),t.strokeRect({...r,color:this.ledBorderColor,lineWidth:this.ledBorder})}drawSquare3d(t,e,i){t.fillRect({...e,color:this.ledBorderColor});let r=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y);r.addColorStop(0,"rgba(0,0,0,0.078)"),r.addColorStop(1,"rgba(0,0,0,0.39)"),t.fillPath({gradient:r,path:new v(e.x,e.y).lineTo(e.x+this.ledBorder,e.y+this.ledBorder).lineTo(e.x+this.ledBorder,e.y+e.height-this.ledBorder).lineTo(e.x,e.y+e.height)}),r=t.createLinearGradient(e.x,e.y,e.x,e.y+e.height),r.addColorStop(0,"rgba(0,0,0,0.078)"),r.addColorStop(1,"rgba(0,0,0,0.39)"),t.fillPath({gradient:r,path:new v(e.x,e.y).lineTo(e.x+this.ledBorder,e.y+this.ledBorder).lineTo(e.x+e.width-this.ledBorder,e.y+this.ledBorder).lineTo(e.x+e.width,e.y)}),r=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y),r.addColorStop(0,"rgba(255,255,255,0.078)"),r.addColorStop(1,"rgba(255,255,255,0.39)"),t.fillPath({gradient:r,path:new v(e.x+e.width,e.y).lineTo(e.x+e.width-this.ledBorder,e.y+this.ledBorder).lineTo(e.x+e.width-this.ledBorder,e.y+e.height-this.ledBorder).lineTo(e.x+e.width,e.y+e.height)}),r=t.createLinearGradient(e.x,e.y,e.x,e.y+e.height),r.addColorStop(0,"rgba(255,255,255,0.078)"),r.addColorStop(1,"rgba(255,255,255,0.39)"),t.fillPath({gradient:r,path:new v(e.x,e.y+e.height).lineTo(e.x+this.ledBorder,e.y+e.height-this.ledBorder).lineTo(e.x+e.width-this.ledBorder,e.y+e.height-this.ledBorder).lineTo(e.x+e.width,e.y+e.height)});let s=e.x+this.ledBorder,o=e.y+this.ledBorder,n=e.width-2*this.ledBorder,a=e.height-2*this.ledBorder,l=this.getLedColor(i);t.fillRect({x:s,y:o,width:n,height:a,color:l}),r=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y+e.height),r.addColorStop(0,"rgba(255,255,255,0.784)"),r.addColorStop(1,l.withAlpha(0).toString()),t.fillRect({x:s,y:o,width:n,height:a,gradient:r})}get bitReverse(){return this.properties.getValue(vl)}get horizontal(){return this.properties.getValue(Rl)}get numBits(){return this.properties.getValue(Ll)}get startBit(){return this.properties.getValue(Ol)}get ledPacked(){return this.properties.getValue(Sl)}get ledBorder(){return this.scale*this.properties.getValue(Tl)}get ledBorderColor(){return this.properties.getValue(Cl)}get offColor(){return this.properties.getValue(Al)}get onColor(){return this.properties.getValue(El)}get effect3d(){return this.properties.getValue(_l)}get squareLed(){return this.properties.getValue(Vl)}};var st=class{prefix="";suffix="";comma=0;minInt=1;minFrac=0;maxFrac=0;constructor(t){for(let a=0;a<t.length;a++)if(t.charAt(a)=="#"||t.charAt(a)=="0"){this.prefix=t.substring(0,a),t=t.substring(a);break}this.suffix=t.replace(/[#]|[0]|[,]|[.]/g,"");let e=t.replace(/[^0#,.]/g,""),i="",r="",s=e.indexOf(".");s!==-1?(i=e.substring(0,s),r=e.substring(s+1)):i=e;let o=i.lastIndexOf(",");o!==-1&&(this.comma=i.length-1-o),i=i.replace(/[,]/g,""),r=r.replace(/[,]|[.]+/g,""),this.maxFrac=r.length;let n=i.replace(/[^0]/g,"");n.length>this.minInt&&(this.minInt=n.length),n=r.replace(/[^0]/g,""),this.minFrac=n.length}format(t){let e=this.formatBack(t).toLowerCase();if(isNaN(e)||e.length==0)return t;if(e.indexOf("e")!=-1){let f=Number(e);if(f===1/0||f===-1/0||(e=f+"",e.indexOf("e")!==-1))return e}let i=!1;e.charAt(0)==="-"?(i=!0,e=e.substring(1)):e.charAt(0)==="+"&&(e=e.substring(1));let r=e.indexOf("."),s="",o="";r!=-1?(s=e.substring(0,r),o=e.substring(r+1)):s=e,o=o.replace(/[.]/,"");let n=this.suffix&&this.suffix.charAt(0)==="%",a=this.minInt,l=this.minFrac,c=this.maxFrac;if(n&&(a-=2,l+=2,c+=2),o.length>c){let f=+("0."+o);f=c==0?Math.round(f):f.toFixed(c),o=f.toString(10).substr(2);let _=f>=1?1:0,b,T=s.length-1;for(;_;)if(T==-1){s="1"+s;break}else b=Number(s.charAt(T)),b===9?(b="0",_=1):(b=++b+"",_=0),s=s.substring(0,T)+b+s.substring(T+1,s.length),T--}for(let f=o.length;f<l;f++)o=o+"0";for(;o.length>l&&o.charAt(o.length-1)=="0";)o=o.substring(0,o.length-1);for(let f=s.length;f<a;f++)s="0"+s;for(;s.length>a&&s.charAt(0)=="0";)s=s.substring(1);n&&(s+=o.substring(0,2),o=o.substring(2));let h=0;for(let f=s.length;f>0;f--)h!=0&&h%this.comma==0&&(s=s.substring(0,f)+","+s.substring(f),h=0),h++;let u;return o.length>0?u=this.prefix+s+"."+o+this.suffix:u=this.prefix+s+this.suffix,i&&(u="-"+u),u}formatBack(t){if(t+="",!t)return"";if(!isNaN(t))return this.getNumericString(t);let e=t,i=!1;t.charAt(0)==="-"&&(e=e.substr(1),i=!0);let r=e.indexOf(this.prefix),s=this.suffix==""?e.length:e.indexOf(this.suffix,this.prefix.length+1);return r==0&&s>0&&(e=e.substr(0,s),e=e.substr(this.prefix.length),e=e.replace(/,/g,""),i&&(e="-"+e),!isNaN(e))?this.getNumericString(e):t}getNumericString(t){let i=Number(t)+"";if(t.indexOf(".")>-1&&i.indexOf(".")<0){for(var r=t.indexOf(".")+1;r<t.length;r++)if(t.charAt(r)!=="0")return t;return i}return t}};var sg=1,og=8,Q=2,ue=class{constructor(t,e,i){this.rampWidth=t;this.startAngle=e;this.endAngle=i}lolo=10;loloColor=g.RED;showLoLo=!0;lo=25;loColor=g.ORANGE;showLo=!0;hi=75;hiColor=g.ORANGE;showHi=!0;hihi=90;hihiColor=g.RED;showHiHi=!0;minimum=0;maximum=100;gradient=!0;logScale=!1;effect3d=!0;labelsOutside=!0;range={min:this.minimum,max:this.maximum};lengthInDegrees=0;radius=0;draw(t,e,i){if(this.labelsOutside){let r=sg+og;this.radius=e.width/2-r}else this.radius=e.width/2-1;this.range=this.getRenderedRange(),this.endAngle-this.startAngle>0?this.lengthInDegrees=360-(this.endAngle-this.startAngle):this.lengthInDegrees=this.startAngle-this.endAngle,this.drawRamp(t,i)}drawRamp(t,e){let i=e.x+e.width/2,r=e.y+e.height/2,s=e.width/2,o=e.height/2,n,a=360-this.endAngle;if(this.endAngle-this.startAngle>0?n=this.startAngle-90:n=this.startAngle+90,this.showLoLo){let _=n,b=360-this.getValuePosition(this.lolo,!0);t.strokeEllipse({cx:i,cy:r,rx:s-this.rampWidth/2,ry:o-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:$(_),endAngle:$(b),color:this.loloColor})}if(this.showLo){let _;this.showLoLo?_=this.lolo:_=this.minimum;let b=360-this.getValuePosition(_,!0),T=360-this.getValuePosition(this.lo,!0);if(this.effect3d&&this.gradient&&this.showLoLo){let W=$(this.getValuePosition(_,!0)-Q),O=bt(e.width/2,W,e),L=$(this.getValuePosition(this.lo,!0)+Q),M=bt(e.width/2,L,e),N=t.createLinearGradient(O.x,O.y,M.x,M.y);N.addColorStop(0,this.loloColor.toString()),N.addColorStop(1,this.loColor.toString()),t.strokeEllipse({cx:i,cy:r,rx:s-this.rampWidth/2,ry:o-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:$(b-Q/2),endAngle:$(T+Q/2),gradient:N})}else t.strokeEllipse({cx:i,cy:r,rx:s-this.rampWidth/2,ry:o-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:$(b),endAngle:$(T),color:this.loColor})}let l=this.minimum;this.showLo?l=this.lo:this.showLoLo&&(l=this.lolo);let c=this.maximum;this.showHi?c=this.hi:this.showHiHi&&(c=this.hihi);let h=(l+c)/2,u=360-this.getValuePosition(l,!0),f=360-this.getValuePosition(h,!0);if(this.effect3d&&this.gradient&&(this.showLoLo||this.showLo)){let _=$(this.getValuePosition(l,!0)-Q),b=bt(e.width/2,_,e),T=$(this.getValuePosition(h,!0)+Q),W=bt(e.width/2,T,e),O=t.createLinearGradient(b.x,b.y,W.x,W.y);O.addColorStop(0,(this.showLo?this.loColor:this.loloColor).toString()),O.addColorStop(1,g.GREEN.toString()),t.strokeEllipse({cx:i,cy:r,rx:s-this.rampWidth/2,ry:o-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:$(u-Q/2),endAngle:$(f+Q/2),gradient:O})}else t.strokeEllipse({cx:i,cy:r,rx:s-this.rampWidth/2,ry:o-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:$(u),endAngle:$(f),color:g.GREEN});if(u=360-this.getValuePosition(h,!0),f=360-this.getValuePosition(c,!0),this.effect3d&&this.gradient&&(this.showHi||this.showHiHi)){let _=$(this.getValuePosition(h,!0)-Q),b=bt(e.width/2,_,e),T=$(this.getValuePosition(c,!0)+Q),W=bt(e.width/2,T,e),O=t.createLinearGradient(b.x,b.y,W.x,W.y);O.addColorStop(0,g.GREEN.toString()),O.addColorStop(1,(this.showHi?this.hiColor:this.hihiColor).toString());let L=f!==a?Q/2:0;t.strokeEllipse({cx:i,cy:r,rx:s-this.rampWidth/2,ry:o-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:$(u-Q/2),endAngle:$(f+L),gradient:O})}else t.strokeEllipse({cx:i,cy:r,rx:s-this.rampWidth/2,ry:o-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:$(u),endAngle:$(f),color:g.GREEN});if(this.showHi){let _;this.showHiHi?_=this.hihi:_=this.maximum;let b=360-this.getValuePosition(this.hi,!0),T=360-this.getValuePosition(_,!0);if(this.effect3d&&this.gradient&&this.showHiHi){let W=$(this.getValuePosition(this.hi,!0)-Q),O=bt(e.width/2,W,e),L=$(this.getValuePosition(_,!0)+Q),M=bt(e.width/2,L,e),N=t.createLinearGradient(O.x,O.y,M.x,M.y);N.addColorStop(0,this.hiColor.toString()),N.addColorStop(1,this.hihiColor.toString());let F=T!==a?Q/2:0;t.strokeEllipse({cx:i,cy:r,rx:s-this.rampWidth/2,ry:o-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:$(b-Q/2),endAngle:$(T+F),gradient:N})}else t.strokeEllipse({cx:i,cy:r,rx:s-this.rampWidth/2,ry:o-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:$(b),endAngle:$(T),color:this.hiColor})}if(this.showHiHi){u=360-this.getValuePosition(this.hihi,!0),f=a;let _=this.gradient?Q/2:0;t.strokeEllipse({cx:i,cy:r,rx:s-this.rampWidth/2,ry:o-this.rampWidth/2,lineWidth:this.rampWidth,startAngle:$(u-_),endAngle:$(f),color:this.hihiColor})}}getRadius(){return this.radius}getValuePosition(t,e=!1){e&&(t=this.getValueInRange(t));let i;return this.logScale?i=this.startAngle-(Math.log10(t)-Math.log10(this.range.min))/(Math.log10(this.range.max)-Math.log10(this.range.min))*this.lengthInDegrees:i=this.startAngle-(t-this.range.min)/(this.range.max-this.range.min)*this.lengthInDegrees,i<0&&(i+=360),i}getValueInRange(t){return this.range.min<=t&&t<=this.range.max?t:t>this.range.max?this.range.max:this.range.min}getRenderedRange(){let t={min:this.minimum,max:this.maximum};return this.logScale&&(this.minimum<=0&&(t.min=.1),t.max<=this.minimum&&(t.max=t.min+100)),t}};var Ml=new g(100,100,100),ng=16,ag=8,lg=5,hg=-1,Il="color_hi",Bl="color_hihi",Wl="color_lo",kl="color_lolo",Hl="effect_3d",Dl="font",Nl="value_label_format",Fl="level_hi",Gl="level_hihi",$l="level_lo",Ul="level_lolo",Yl="limits_from_pv",Xl="log_scale",zl="minimum",ql="maximum",Kl="needle_color",jl="ramp_gradient",Zl="show_ramp",kr=225,cg=315;var zi=class extends V{constructor(t,e){super(t,e),this.properties.add(new S(Il)),this.properties.add(new S(Bl)),this.properties.add(new S(Wl)),this.properties.add(new S(kl)),this.properties.add(new w(Hl)),this.properties.add(new k(Dl)),this.properties.add(new B(Fl)),this.properties.add(new B(Gl)),this.properties.add(new B($l)),this.properties.add(new B(Ul)),this.properties.add(new w(Xl)),this.properties.add(new w(Yl)),this.properties.add(new B(ql)),this.properties.add(new B(zl)),this.properties.add(new S(Kl)),this.properties.add(new w(jl)),this.properties.add(new w(Zl,!0)),this.properties.add(new R(Nl))}draw(t){let e;this.limitsFromPv&&this.pv&&!this.pv.disconnected?e={min:this.pv.lowerDisplayLimit??this.minimum,lolo:this.pv.lowerAlarmLimit,lo:this.pv.lowerWarningLimit,hi:this.pv.upperWarningLimit,hihi:this.pv.upperAlarmLimit,max:this.pv.upperDisplayLimit??this.maximum}:e={min:this.minimum,lolo:this.levelLoLo,lo:this.levelLo,hi:this.levelHi,hihi:this.levelHiHi,max:this.maximum},this.logScale&&(e.min=Math.max(.1,e.min),e.max<=e.min&&(e.max=e.min+100));let i=Math.min(this.width,this.height),r=i;this.drawBackground(t,i,r),this.showRamp&&this.drawRamp(t,i,r,e),this.drawLabel(t,i,r),this.drawNeedle(t,i,r,e),this.drawNeedleCenter(t,i,r)}drawBackground(t,e,i){if(t.fillEllipse({cx:this.x+e/2,cy:this.y+i/2,rx:e/2,ry:i/2,color:g.GRAY}),this.effect3d){let s=t.createLinearGradient(this.x,this.y,this.x+this.width,this.y+this.height);s.addColorStop(0,Ml.toString()),s.addColorStop(1,g.WHITE.toString()),t.fillEllipse({cx:this.x+e/2,cy:this.y+i/2,rx:e/2,ry:i/2,gradient:s})}let r=(this.effect3d?2:1)*this.scale;if(t.fillEllipse({cx:this.x+e/2,cy:this.y+i/2,rx:e/2-r,ry:i/2-r,color:this.backgroundColor}),this.effect3d){let s=e/2,o=9.5/10,n=1/2,a=8.5/10,l=$(0),c=$(35),h={x:Math.floor(this.x+e/2-s*a*Math.cos(l)),y:Math.floor(this.y+i/2-s*o),width:Math.floor(2*s*a*Math.cos(l)),height:Math.floor(s*o+s*n)},u=t.createLinearGradient(h.x,h.y,h.x,h.y+h.height);u.addColorStop(0,g.WHITE.withAlpha(90/255).toString()),u.addColorStop(1,g.WHITE.withAlpha(0).toString()),t.fillEllipse({cx:h.x+h.width/2,cy:h.y+h.height/2,rx:h.width/2,ry:h.height/2,gradient:u}),h={x:Math.floor(this.x+e/2-s*a*Math.sin(c)),y:Math.floor(Math.ceil(this.y+i/2+s*n)),width:Math.floor(2*s*a*Math.sin(c)),height:Math.floor(Math.ceil(s*o-s*n))},u=t.createLinearGradient(h.x,h.y,h.x,h.y+h.height),u.addColorStop(0,g.WHITE.withAlpha(0).toString()),u.addColorStop(1,g.WHITE.withAlpha(40/255).toString()),t.fillEllipse({cx:h.x+h.width/2,cy:h.y+h.height/2,rx:h.width/2,ry:h.height/2,gradient:u})}}drawRamp(t,e,i,r){let s=D({x:this.x,y:this.y,width:e,height:i},e/4,i/4),o={...s};o.width=Math.min(s.width,s.height),o.height=s.width;let n=new ue(10*this.scale,225,315);n.lolo=r.lolo,n.loloColor=this.colorLoLo,n.lo=r.lo,n.loColor=this.colorLo,n.hi=r.hi,n.hiColor=this.colorHi,n.hihi=r.hihi,n.hihiColor=this.colorHiHi,n.minimum=r.min,n.maximum=r.max,n.effect3d=this.effect3d,n.gradient=this.rampGradient,n.logScale=this.logScale,n.draw(t,s,o)}drawLabel(t,e,i){let r=q.ARIAL_12_BOLD.scale(this.scale);if(this.pv?.value!==void 0){let s=this.formatLabelValue(this.pv.value),o=t.measureText(s,r);t.fillText({x:this.x+e/2-o.width/2,y:this.y+i*7/8-o.height/2,color:this.foregroundColor,align:"left",baseline:"top",font:r,text:s})}}drawNeedle(t,e,i,r){let s=this.x+e/2,o=this.y+i/2,n;if(this.pv?.value!==void 0){let T=this.getValueInRange(this.pv.value,r);n=360-this.getValuePosition(T,r),r.max>r.min?T>r.max?n+=10:T<r.min&&(n-=10):T>r.min?n-=10:T<r.max&&(n+=10)}else n=360-this.getValuePosition((r.min+r.max)/2,r);let a=$(n),{scale:l}=this,{needleDiameter:c,majorTickLength:h,gapBetweenNeedleScale:u}=this,f=Ct(s,o-c/2+3*l,s,o,a),_=Ct(s+e/2-h-u,o,s,o,a),b=Ct(s,o+c/2-3*l,s,o,a);t.fillPath({color:this.needleColor,path:new v(f.x,f.y).lineTo(_.x,_.y).lineTo(b.x,b.y).closePath()})}drawNeedleCenter(t,e,i){let{needleDiameter:r}=this,s=this.x+e/2,o=this.y+i/2,n=r/2,a=r/2;if(this.effect3d){let l=t.createLinearGradient(s-n,o-a,s+n,o+a);l.addColorStop(0,g.WHITE.toString()),l.addColorStop(1,Ml.toString()),t.fillEllipse({cx:s,cy:o,rx:n,ry:a,gradient:l})}else t.fillEllipse({cx:s,cy:o,rx:n,ry:a,color:g.GRAY})}getValueInRange(t,e){return e.min<=t&&t<=e.max?t:t>e.max?e.max:e.min}getValuePosition(t,e){let i=360-(cg-kr),r;return this.logScale?r=kr-(Math.log10(t)-Math.log10(e.min))/(Math.log10(e.max)-Math.log10(e.min))*i:r=kr-(t-e.min)/(e.max-e.min)*i,r<0&&(r+=360),r}formatLabelValue(t){return this.valueLabelFormat?new st(this.valueLabelFormat).format(t):String(Number(t.toFixed(3)))}get needleDiameter(){return this.scale*ng}get majorTickLength(){return this.scale*ag}get minorTickLength(){return this.scale*lg}get gapBetweenNeedleScale(){return this.scale*hg}get colorLo(){return this.properties.getValue(Wl)}get colorLoLo(){return this.properties.getValue(kl)}get colorHi(){return this.properties.getValue(Il)}get colorHiHi(){return this.properties.getValue(Bl)}get effect3d(){return this.properties.getValue(Hl)}get font(){return this.properties.getValue(Dl).scale(this.scale)}get levelLo(){return this.properties.getValue($l)}get levelLoLo(){return this.properties.getValue(Ul)}get levelHi(){return this.properties.getValue(Fl)}get levelHiHi(){return this.properties.getValue(Gl)}get limitsFromPv(){return this.properties.getValue(Yl)}get logScale(){return this.properties.getValue(Xl)}get minimum(){return this.properties.getValue(zl)}get maximum(){return this.properties.getValue(ql)}get needleColor(){return this.properties.getValue(Kl)}get rampGradient(){return this.properties.getValue(jl)}get showRamp(){return this.properties.getValue(Zl)}get valueLabelFormat(){return this.properties.getValue(Nl)}};var Jl="bit",Ql="data_type",th="off_image",eh="off_label",ih="font",rh="on_image",sh="on_label",oh="show_boolean_label",qi=class extends V{onImageElement;onImageLoaded=!1;offImageElement;offImageLoaded=!1;constructor(t,e){super(t,e),this.properties.add(new P(Jl)),this.properties.add(new P(Ql)),this.properties.add(new R(th)),this.properties.add(new R(eh)),this.properties.add(new R(rh)),this.properties.add(new R(sh)),this.properties.add(new k(ih)),this.properties.add(new w(oh))}init(){this.onImageElement=new Image,this.onImageElement.onload=()=>{this.onImageLoaded=!0,this.requestRepaint()},this.offImageElement=new Image,this.offImageElement.onload=()=>{this.offImageLoaded=!0,this.requestRepaint()},this.onImage&&(this.onImageElement.src=this.resolvePath(this.onImage)),this.offImage&&(this.offImageElement.src=this.resolvePath(this.offImage))}get booleanValue(){return this.bit<0?!!this.pv?.toNumber():this.pv?.value!==void 0?(this.pv?.value>>this.bit&1)>0:!1}get image(){return this.booleanValue?this.onImage:this.offImage}get label(){return this.booleanValue?this.onLabel:this.offLabel}draw(t){this.transparent||t.fillRect({x:this.x,y:this.y,width:this.width,height:this.height,color:this.backgroundColor}),this.booleanValue?this.onImageLoaded&&t.ctx.drawImage(this.onImageElement,this.x,this.y,this.width,this.height):this.offImageLoaded&&t.ctx.drawImage(this.offImageElement,this.x,this.y,this.width,this.height),this.showBooleanLabel&&t.fillText({x:this.x+this.width/2,y:this.y+this.height/2,font:this.font,baseline:"middle",align:"center",color:this.foregroundColor,text:this.label})}get bit(){return this.properties.getValue(Jl)}get dataType(){return this.properties.getValue(Ql)}get showBooleanLabel(){return this.properties.getValue(oh)}get font(){return this.properties.getValue(ih).scale(this.scale)}get offLabel(){return this.properties.getValue(eh)}get offImage(){return this.properties.getValue(th)}get onLabel(){return this.properties.getValue(sh)}get onImage(){return this.properties.getValue(rh)}};var pg=["January","February","March","April","May","June","July","August","September","October","November","December"],et=class{constructor(t,e,i,r,s,o,n,a,l,c){this.formatter=t;this.scale=e;this.scaleFont=i;this.minimum=r;this.maximum=s;this.logScale=o;this.majorTickStepHint=n;this.foregroundColor=a;this.showMinorTicks=l;this.showScale=c}labels=[];labelValues=[];labelPositions=[];labelVisibilities=[];gridStepInPixel=0;horizontal=!1;x=0;y=0;scaleFormat="";timeFormat=0;length=0;margin=0;get scaleLength(){return this.length-2*this.margin}getX(){return this.x}getY(){return this.y}getGridPositions(){let t=[...this.labelPositions];return this.horizontal||(t=t.map(e=>this.length-e)),t.pop(),t.shift(),t}setDimensions(t,e,i,r){this.x=t,this.y=e,this.length=i,this.horizontal=r}getValuePosition(t){let{start:e,stop:i}=this.getMinMax(),r=0,s=this.length-2*this.margin;if(this.logScale)t<=0?r=this.margin:r=(Math.log10(t)-Math.log10(e))/(Math.log10(i)-Math.log10(e))*s+this.margin;else{let o=Math.max(Math.abs(e),Math.abs(i));i/=o,e/=o;let n=i-e;r=(t/o-e)/n*s+this.margin}return this.horizontal?r+this.x:this.length-r+this.y}getMinMax(){let t=this.minimum,e=this.maximum;return this.logScale&&(t<=0&&(t=.1),e<=t&&(e=t+100)),{start:t,stop:e}}getPositionValue(t){let e=this.getMinMax(),{start:i,stop:r}=e,s=this.horizontal?t-this.x:this.length+this.y-t,o=this.length-2*this.margin,n;if(this.logScale)n=Math.pow(10,(s-this.margin)*(Math.log10(r)-Math.log10(i))/o+Math.log10(i));else{let a=Math.max(Math.abs(i),Math.abs(r));r/=a,i/=a;let l=r-i;n=((s-this.margin)/o*l+i)*a}return n}calculateMargin(t,e){if(this.showScale){let i=t.measureText(this.format(this.minimum),this.scaleFont),r=t.measureText(this.format(this.maximum),this.scaleFont);return Math.ceil(e?Math.max(i.width,r.width)/2:Math.max(i.height,r.height)/2)}else return 0}measureHorizontalHeight(t){let e=t.measureText("dummy",this.scaleFont);return this.showScale?e.height+this.spaceBetweenMarkAndLabel+this.majorTickLength:0}drawHorizontal(t,e,i,r){let{scale:s}=this;this.length=r,this.horizontal=!0,this.margin=this.calculateMargin(t,this.horizontal);let o=r-2*this.margin;o>0&&this.updateLabels(t,o);let n=0;for(let l=0;l<this.labels.length;l++){let c=t.measureText(this.labels[l],this.scaleFont);c.height>n&&(n=c.height)}let a=this.showScale?n+this.spaceBetweenMarkAndLabel+this.majorTickLength:0;if(i=i-a,this.x=e,this.y=i,this.logScale)for(let l=0;l<this.labelPositions.length;l++){let c=this.x+this.labelPositions[l],h=this.y,u=0;if(this.labelVisibilities[l]?u=this.majorTickLength:u=this.minorTickLength,this.labelVisibilities[l]||this.showMinorTicks){let f=Math.round(c)-s*.5;t.strokePath({path:new v(f,h).lineTo(f,h+u),color:this.foregroundColor,lineWidth:s*1,opacity:100/255})}this.labelVisibilities[l]&&t.fillText({x:c,y:this.y+this.spaceBetweenMarkAndLabel+this.majorTickLength,align:"center",baseline:"top",font:this.scaleFont,color:this.foregroundColor,text:this.labels[l]})}else for(let l=0;l<this.labels.length;l++){let c=e+this.labelPositions[l];this.labelVisibilities[l]&&t.fillText({x:c,y:i+this.majorTickLength+this.spaceBetweenMarkAndLabel,align:"center",baseline:"top",font:this.scaleFont,color:this.foregroundColor,text:this.labels[l]});let h=Math.round(c)-s*.5;t.strokePath({path:new v(h,i).lineTo(h,i+this.majorTickLength),color:this.foregroundColor,lineWidth:s*1,opacity:100/255}),this.showMinorTicks&&this.drawMinorXTicks(t,l,e,i)}return a}drawVertical(t,e,i,r,s,o=!1){let{scale:n}=this;this.length=r,this.horizontal=!1,this.margin=this.calculateMargin(t,this.horizontal);let a=r-2*this.margin;a>0&&this.updateLabels(t,a);let l=0;for(let h=0;h<this.labels.length;h++){let u=t.measureText(this.labels[h],this.scaleFont);u.width>l&&(l=u.width)}let c=this.showScale?l+this.spaceBetweenMarkAndLabel+this.majorTickLength:0;if(s||(e=e-c),this.x=e,this.y=i,this.logScale)for(let h=0;h<this.labelPositions.length;h++){let u;this.labelVisibilities[h]?u=this.majorTickLength:u=this.minorTickLength;let f=e+l+this.spaceBetweenMarkAndLabel-1*n+this.majorTickLength-u,_=Math.round(i+r-this.labelPositions[h])-n*.5;if((this.labelVisibilities[h]||this.showMinorTicks)&&t.strokePath({path:new v(f,_).lineTo(f+u,_),color:this.foregroundColor,lineWidth:n*1,opacity:100/255}),this.labelVisibilities[h]){let b=i+r-this.labelPositions[h];t.fillText({x:e,y:b,align:"left",baseline:"middle",font:this.scaleFont,color:this.foregroundColor,text:this.labels[h]})}}else for(let h=0;h<this.labels.length;h++){let u=i+r-this.labelPositions[h],f=Math.round(u)-n*.5;if(o){if(t.strokePath({path:new v(e,f).lineTo(e+this.majorTickLength,f),color:this.foregroundColor,lineWidth:n*1,opacity:100/255}),this.labelVisibilities[h]){let _=e+this.majorTickLength+this.spaceBetweenMarkAndLabel;t.fillText({x:_,y:u,align:"left",baseline:"middle",font:this.scaleFont,color:this.foregroundColor,text:this.labels[h]})}}else{this.labelVisibilities[h]&&t.fillText({x:e,y:u,align:"left",baseline:"middle",font:this.scaleFont,color:this.foregroundColor,text:this.labels[h]});let _=e+l+this.spaceBetweenMarkAndLabel-n*1;t.strokePath({path:new v(_,f).lineTo(_+this.majorTickLength,f),color:this.foregroundColor,lineWidth:n*1,opacity:100/255}),this.showMinorTicks&&this.drawMinorYTicks(t,h,_,i+r)}}return c}drawMinorXTicks(t,e,i,r){let{gridStepInPixel:s}=this,o,n;s/5>=this.minorTickMarkStepHint?(o=5,n=Math.floor(s/5)):s/4>=this.minorTickMarkStepHint?(o=4,n=Math.floor(s/4)):(o=2,n=Math.floor(s/2));let{labelPositions:a,minorTickLength:l,scale:c}=this;if(e>0)if(e===1&&a[1]-a[0]<s){let h=a[1];for(;h-a[0]>n+3*c;){h=h-n;let u=Math.round(i+h)-c*.5;t.strokePath({path:new v(u,r).lineTo(u,r+l),color:this.foregroundColor,lineWidth:c*1,opacity:100/255})}}else if(e===a.length-1&&a[e]-a[e-1]<s){let h=a[e-1];for(;a[e]-h>n+3*c;){h=h+n;let u=Math.round(i+h)-c*.5;t.strokePath({path:new v(u,r).lineTo(u,r+l),color:this.foregroundColor,lineWidth:c*1,opacity:100/255})}}else for(let h=0;h<o;h++){let u=i+a[e-1]+(a[e]-a[e-1])*h/o;u=Math.round(u)-c*.5,t.strokePath({path:new v(u,r).lineTo(u,r+l),color:this.foregroundColor,lineWidth:c*1,opacity:100/255})}}drawMinorYTicks(t,e,i,r){let{gridStepInPixel:s}=this,o,n;s/5>=this.minorTickMarkStepHint?(o=5,n=Math.floor(s/5)):s/4>=this.minorTickMarkStepHint?(o=4,n=Math.floor(s/4)):(o=2,n=Math.floor(s/2));let{labelPositions:a,minorTickLength:l,majorTickLength:c,scale:h}=this;if(e>0)if(e===1&&a[1]-a[0]<s){let u=a[1];for(;u-a[0]>n+3*h;){u-=n;let f=Math.round(r-u)-h*.5;t.strokePath({path:new v(i+c-l,f).lineTo(i+c,f),color:this.foregroundColor,lineWidth:h*1,opacity:100/255})}}else if(e===a.length-1&&a[e]-a[e-1]<s){let u=a[e-1];for(;a[e]-u>n+3*h;){u+=n;let f=Math.round(r-u)-h*.5;t.strokePath({path:new v(i+c-l,f).lineTo(i+c,f),color:this.foregroundColor,lineWidth:h*1,opacity:100/255})}}else for(let u=0;u<o;u++){let f=r-a[e-1]-(a[e]-a[e-1])*u/o;f=Math.round(f)-h*.5,t.strokePath({path:new v(i+c-l,f).lineTo(i+c,f),color:this.foregroundColor,lineWidth:h*1,opacity:100/255})}}updateLabels(t,e){if(this.labels=[],this.labelValues=[],this.labelPositions=[],this.showScale)if(this.logScale)this.updateLabelsForLogScale(this.minimum,this.maximum,e);else{let i=this.getGridStep(e,this.minimum,this.maximum),r=Math.max(Math.abs(this.minimum),Math.abs(this.maximum)),s=this.maximum/r-this.minimum/r;this.gridStepInPixel=Math.floor(e*(i/r)/s),this.updateLabelsForLinearScale(this.minimum,this.maximum,e,i)}this.updateVisibility(t)}getGridStep(t,e,i){t<=0&&(t=1);let r=!1;if(e>=i)if(i===e)i++;else{r=!0;let h=e;e=i,i=h}let s=Math.abs(i-e),o=this.majorTickStepHint;o>t&&(o=t);let a=s/t*o,l=0;if(a<1){if(a!=0)for(;a<1;)a*=10,l--}else for(;a>=10;)a/=10,l++;let c;return a>7.5?c=10*Math.pow(10,l):a>3.5?c=5*Math.pow(10,l):a>1.5?c=2*Math.pow(10,l):c=Math.pow(10,l),r&&(c=-c),c}updateLabelsForLogScale(t,e,i){t<=0&&(t=.1),e<=t&&(e=t+100);let r=e<t,s=Math.log10(t),o=Math.ceil(s),n=Math.ceil(Math.log10(e)),a=Math.pow(10,o-1),l;t%a<=0||r?l=t-t%a:l=t-t%a+a,r&&t>l?this.addMinMaxTickInfo(t,i,!0):!r&&t<l&&this.addMinMaxTickInfo(t,i,!0);for(let c=o;r?c>=n:c<=n;c+=r?-1:1)if(Math.abs(n-o)>20){let h=Math.pow(10,c);if(h>e)break;this.addTickInfo(h,e,s,i)}else{for(let h=l;(r?h>=Math.pow(10,c-1):h<=Math.pow(10,c))&&!(r?h<e:h>e);h=r?h-a:h+a)this.addTickInfo(h,e,s,i);a=r?a/Math.pow(10,1):a*Math.pow(10,1),l=r?Math.pow(10,c-1):a+Math.pow(10,c)}(r?e<this.labelValues[this.labelValues.length-1]:e>this.labelValues[this.labelValues.length-1])&&this.addMinMaxTickInfo(e,i,!1)}addMinMaxTickInfo(t,e,i){i?(this.labelValues.push(t),this.labels.push(this.format(t)),this.labelPositions.push(this.margin)):(this.labelValues.push(t),this.labels.push(this.format(t)),this.labelPositions.push(this.margin+e))}addTickInfo(t,e,i,r){this.labels.push(this.format(t));let s=Math.floor((Math.log10(t)-i)/(Math.log10(e)-i)*r)+this.margin;this.labelPositions.push(s),this.labelValues.push(t)}updateLabelsForLinearScale(t,e,i,r){let s=e<t,o;t%r<=0?o=t-t%r:o=t-t%r+r,t>o==s&&(this.labelValues.push(t),this.labels.push(this.format(t)),this.labelPositions.push(this.margin));let n=1,a=Math.max(Math.abs(t),Math.abs(e));e/=a,t/=a,r/=a,o/=a;let l=e-t;for(let c=o;e>=t?c<e:c>e;c=o+n++*r){let h=c*a;this.labels.push(this.format(h)),this.labelValues.push(h);let u=Math.floor((c-t)/l*i)+this.margin;this.labelPositions.push(u)}e*=a,this.labelValues.push(e),this.labels.push(this.format(e)),this.labelPositions.push(this.margin+i)}updateVisibility(t){if(this.labelVisibilities=[],!this.labelPositions.length)return;for(let r=0;r<this.labelPositions.length;r++)this.labelVisibilities.push(!0);let e=0,i=null;for(let r=0;r<this.labelPositions.length;r++){let s=!0,o=this.labels[r],n=this.labelPositions[r];r!==0&&(s=this.hasSpaceToDraw(t,e,n,i||"",o));let a=o===i&&r!==0&&r!==this.labelPositions.length-1,l=!0;if(this.logScale){let c=Number(this.labels[r]);l=this.isMajorTick(c)||r===0||r===this.labelPositions.length-1}!s||a||!l?this.labelVisibilities[r]=!1:(e=n,i=o)}}hasSpaceToDraw(t,e,i,r,s){let o=t.measureText(s,this.scaleFont),n=t.measureText(r,this.scaleFont),a=i-e,l=Math.floor(this.horizontal?o.width/2+n.width/2:o.height),c=!0,h=!0;if(i!=this.labelPositions[this.labelPositions.length-1]){c=a>l+this.tickLabelGap;let u=t.measureText(this.labels[this.labels.length-1],this.scaleFont);a=this.labelPositions[this.labelPositions.length-1]-i,l=Math.floor(this.horizontal?o.width/2+u.width/2:o.height),h=a>l+this.tickLabelGap}return c&&h}isMajorTick(t){if(!this.logScale)return!0;let e=Math.log10(t);return e===Math.round(e)}format(t){if(this.timeFormat===0)return this.scaleFormat?new st(this.scaleFormat).format(t):String(Number(t.toFixed(2)));let e=new Date(t),i=this.formatter;switch(this.timeFormat){case 1:return i.formatDate(e,{year:!0,month:!0,day:!0})+`
|
|
19
19
|
`+i.formatTime(e,{hours:!0,minutes:!0,seconds:!0,milliseconds:!1});case 2:return i.formatDate(e,{year:!0,month:!0,day:!0})+`
|
|
20
20
|
`+i.formatTime(e,{hours:!0,minutes:!0,seconds:!0,milliseconds:!0});case 3:return i.formatTime(e,{hours:!0,minutes:!0,seconds:!0,milliseconds:!1});case 4:return i.formatTime(e,{hours:!0,minutes:!0,seconds:!0,milliseconds:!0});case 5:return i.formatTime(e,{hours:!0,minutes:!0,seconds:!1,milliseconds:!1});case 6:return i.formatDate(e,{year:!0,month:!0,day:!0});case 7:let r=this.formatter.utc,s=pg[r?e.getUTCMonth():e.getMonth()],o=r?e.getUTCDate():e.getDate();return`${s} ${o}`;case 8:let n=Math.abs(this.maximum-this.minimum);return n<=5e3?i.formatTime(e,{hours:!1,minutes:!1,seconds:!0,milliseconds:!0}):n<=18e5?i.formatTime(e,{hours:!0,minutes:!0,seconds:!0,milliseconds:!1}):n<=864e5?i.formatTime(e,{hours:!0,minutes:!0,seconds:!1,milliseconds:!1}):n<=6048e5?i.formatDate(e,{year:!1,month:!0,day:!0})+`
|
|
21
|
-
`+i.formatTime(e,{hours:!0,minutes:!0,seconds:!1,milliseconds:!1}):n<=2592e6?i.formatDate(e,{year:!1,month:!0,day:!0}):i.formatDate(e,{year:!0,month:!0,day:!0})}return""}get spaceBetweenMarkAndLabel(){return this.scale*2}get majorTickLength(){return this.scale*6}get minorTickLength(){return this.scale*3}get minorTickMarkStepHint(){return this.scale*4}get tickLabelGap(){return this.horizontal?this.scale*10:this.scale*2}};var nh="color_map",ah="crop_bottom",lh="crop_left",hh="crop_right",ch="crop_top",ph="data_height",dh="data_width",uh="font",gh="graph_area_height",mh="graph_area_width",fh="maximum",xh="minimum",wh="show_ramp",yh="x_axis_axis_color",bh="x_axis_axis_title",Ph="x_axis_major_tick_step_hint",vh="x_axis_maximum",_h="x_axis_minimum",Rh="x_axis_scale_font",Th="x_axis_show_minor_ticks",Ch="x_axis_title_font",Sh="x_axis_visible",Lh="y_axis_axis_color",Ah="y_axis_axis_title",Eh="y_axis_major_tick_step_hint",Oh="y_axis_maximum",Vh="y_axis_minimum",Mh="y_axis_scale_font",Ih="y_axis_show_minor_ticks",Bh="y_axis_title_font",Wh="y_axis_visible",Ki=class extends V{constructor(t,e){super(t,e),this.properties.add(new Gt(nh)),this.properties.add(new P(ah)),this.properties.add(new P(lh)),this.properties.add(new P(hh)),this.properties.add(new P(ch)),this.properties.add(new P(ph)),this.properties.add(new P(dh)),this.properties.add(new P(gh)),this.properties.add(new P(mh)),this.properties.add(new k(uh)),this.properties.add(new B(fh)),this.properties.add(new B(xh)),this.properties.add(new w(wh)),this.properties.add(new S(yh)),this.properties.add(new R(bh)),this.properties.add(new P(Ph)),this.properties.add(new B(vh)),this.properties.add(new B(_h)),this.properties.add(new k(Rh)),this.properties.add(new w(Th)),this.properties.add(new k(Ch)),this.properties.add(new w(Sh)),this.properties.add(new S(Lh)),this.properties.add(new R(Ah)),this.properties.add(new P(Eh)),this.properties.add(new B(Oh)),this.properties.add(new B(Vh)),this.properties.add(new k(Mh)),this.properties.add(new w(Ih)),this.properties.add(new k(Bh)),this.properties.add(new w(Wh))}draw(t){let{scale:e}=this,i=this.area;this.borderAlarmSensitive&&(i=D(i,2*e));let r=this.alarmSensitiveBackgroundColor;t.fillRect({...i,color:r});let{graphAreaWidth:s,graphAreaHeight:o}=this,n=0;this.xAxisVisible&&(n=t.measureText(this.xAxisAxisTitle,this.xAxisTitleFont).height);let a=0;this.yAxisVisible&&(a=t.measureText(this.yAxisAxisTitle,this.yAxisTitleFont).height);let l=new et(this.display.formatter,e,this.xAxisScaleFont,this.xAxisMinimum,this.xAxisMaximum,!1,this.xAxisMajorTickStepHint,this.xAxisAxisColor,this.xAxisShowMinorTicks,this.xAxisVisible),c=l.calculateMargin(t,!0),h=new et(this.display.formatter,e,this.yAxisScaleFont,this.yAxisMinimum,this.yAxisMaximum,!1,this.yAxisMajorTickStepHint,this.yAxisAxisColor,this.yAxisShowMinorTicks,this.yAxisVisible),u=h.calculateMargin(t,!1),f=l.measureHorizontalHeight(t),_=o+2*u,b=h.drawVertical(t,i.x+a,i.y,_,!0),T=s+2*c,W=i.x+a+b-c,O=i.y+_+f-u;l.drawHorizontal(t,W,O,T);let L=e*1,M=Math.round(i.x+a+b)-L/2,N=Math.round(i.y+u)-L/2;t.strokePath({path:new v(M,N).lineTo(M,N+o),color:this.yAxisAxisColor,opacity:100/255,lineWidth:L});let F=M,X=N+o+L;t.strokePath({path:new v(F,X).lineTo(F+s,X),color:this.xAxisAxisColor,opacity:100/255,lineWidth:L});let{dataWidth:j,dataHeight:pt,colorMap:it}=this,{minimum:dt,maximum:ot}=this,[Bt,ge]=it.getMinMax();if(this.value&&this.value.length){let tt=document.createElement("canvas"),{cropLeft:mt,cropRight:Rt,cropTop:Wt,cropBottom:Kt}=this;tt.width=j-mt-Rt,tt.height=pt-Wt-Kt;let kt=tt.getContext("2d");for(let ft=mt;ft<j-Rt;ft++)for(let nt=Wt;nt<pt-Kt;nt++){let xt=this.value[nt*j+ft];if(it.autoscale){let we=(xt-dt)/(ot-dt);xt=Bt+we*(ge-Bt)}let[me,fe,xe]=it.lookup(xt);kt.fillStyle=`rgb(${me},${fe},${xe})`,kt.fillRect(ft-mt,nt-Wt,1,1)}let Ht=Math.round(i.x+a+b),Tt=Math.round(i.y+h.margin);t.ctx.drawImage(tt,Ht,Tt,s,o)}if(this.showRamp){let tt=new et(this.display.formatter,e,this.font,dt,ot,!1,50*e,this.alarmSensitiveForegroundColor,!1,!0),mt=i.y+h.margin,Rt=o,Wt=tt.drawVertical(t,i.x+i.width,mt,Rt,!1,!0),Kt=i.x+a+b+s+this.gap,kt=i.width-a-b-s-Wt-this.gap,Ht=Rt-2*tt.margin,Tt=document.createElement("canvas");Tt.width=kt,Tt.height=Ht;let ft=Tt.getContext("2d");for(let nt=0;nt<Ht;nt++){let xt=ot-nt/Ht*(ot-dt);if(it.autoscale){let we=(xt-dt)/(ot-dt);xt=Bt+we*(ge-Bt)}let[me,fe,xe]=it.lookup(xt);ft.fillStyle=`rgb(${me},${fe},${xe})`,ft.fillRect(0,nt,kt,1)}t.ctx.drawImage(Tt,Kt,mt+tt.margin)}if(this.xAxisVisible){let tt=i.x+b+s/2;this.yAxisVisible&&(tt+=a),t.fillText({x:tt,y:i.y+i.height,align:"center",baseline:"bottom",font:this.xAxisTitleFont,color:this.xAxisAxisColor,text:this.xAxisAxisTitle})}this.yAxisVisible&&(t.ctx.save(),t.ctx.translate(i.x+a/2,i.y+_/2),t.ctx.rotate(-Math.PI/2),t.fillText({x:0,y:0,align:"center",baseline:"middle",font:this.yAxisTitleFont,color:this.yAxisAxisColor,text:this.yAxisAxisTitle}),t.ctx.restore())}get gap(){return this.scale*3}get colorMap(){return this.properties.getValue(nh)}get cropBottom(){return this.properties.getValue(ah)}get cropLeft(){return this.properties.getValue(lh)}get cropRight(){return this.properties.getValue(hh)}get cropTop(){return this.properties.getValue(ch)}get dataHeight(){return this.properties.getValue(ph)}get dataWidth(){return this.properties.getValue(dh)}get font(){return this.properties.getValue(uh).scale(this.scale)}get graphAreaHeight(){return this.scale*this.properties.getValue(gh)}get graphAreaWidth(){return this.scale*this.properties.getValue(mh)}get maximum(){return this.properties.getValue(fh)}get minimum(){return this.properties.getValue(xh)}get showRamp(){return this.properties.getValue(wh)}get xAxisAxisColor(){return this.properties.getValue(yh)}get xAxisAxisTitle(){return this.properties.getValue(bh)}get xAxisMajorTickStepHint(){return this.scale*this.properties.getValue(Ph)}get xAxisMaximum(){return this.properties.getValue(vh)}get xAxisMinimum(){return this.properties.getValue(_h)}get xAxisScaleFont(){return this.properties.getValue(Rh).scale(this.scale)}get xAxisShowMinorTicks(){return this.properties.getValue(Th)}get xAxisTitleFont(){return this.properties.getValue(Ch).scale(this.scale)}get xAxisVisible(){return this.properties.getValue(Sh)}get yAxisAxisColor(){return this.properties.getValue(Lh)}get yAxisAxisTitle(){return this.properties.getValue(Ah)}get yAxisMajorTickStepHint(){return this.scale*this.properties.getValue(Eh)}get yAxisMaximum(){return this.properties.getValue(Oh)}get yAxisMinimum(){return this.properties.getValue(Vh)}get yAxisScaleFont(){return this.properties.getValue(Mh).scale(this.scale)}get yAxisShowMinorTicks(){return this.properties.getValue(Ih)}get yAxisTitleFont(){return this.properties.getValue(Bh).scale(this.scale)}get yAxisVisible(){return this.properties.getValue(Wh)}};var kh="bit",Hh="data_type",Dh="effect_3d",Nh="state_count",Fh="square_led",Gh="off_color",$h="off_label",Uh="off_state",Yh="font",Xh="on_color",zh="on_label",qh="on_state",Kh="bulb_border",jh="bulb_border_color",Zh="state_color_fallback",Jh="state_label_fallback",Qh="show_boolean_label",ji=class extends V{areaRegion;states=[];constructor(t,e){super(t,e),this.properties.add(new P(kh)),this.properties.add(new P(Hh)),this.properties.add(new w(Dh)),this.properties.add(new w(Fh)),this.properties.add(new P(Nh,2)),this.properties.add(new S(Gh)),this.properties.add(new R($h)),this.properties.add(new R(Uh)),this.properties.add(new S(Xh)),this.properties.add(new R(zh)),this.properties.add(new R(qh)),this.properties.add(new k(Yh)),this.properties.add(new w(Qh)),this.properties.add(new S(Zh)),this.properties.add(new R(Jh)),this.properties.add(new P(Kh,3)),this.properties.add(new S(jh,g.DARK_GRAY))}async parseNode(t){if(await super.parseNode(t),this.stateCount>2)for(let e=0;e<this.stateCount;e++){let i=new S(`state_color_${e}`);i.value=t.getColor(`state_color_${e}`),this.properties.add(i);let r=new R(`state_label_${e}`);r.value=t.getString(`state_label_${e}`),this.properties.add(r);let s=new B(`state_value_${e}`);s.value=t.getFloat(`state_value_${e}`),this.properties.add(s),this.states.push({label:this.properties.getValue(r.name),color:this.properties.getValue(i.name),value:this.properties.getValue(s.name)})}}init(){this.areaRegion={id:`${this.wuid}-area`,click:()=>{let t={pvName:this.pvName};this.display.fireEvent("openpv",t)},cursor:"pointer",tooltip:()=>this.tooltip}}get booleanValue(){return this.dataType===0?this.bit<0?!!(this.pv?.toNumber()??this.value):this.pv?.value!==void 0?(this.pv?.value>>this.bit&1)>0:this.value!==void 0?(this.value>>this.bit&1)>0:!1:this.dataType===1?(this.pv?.toString()??this.value)===this.onState:!1}get bulbColor(){if(this.stateCount<=2)return this.booleanValue?this.onColor:this.offColor;for(let t of this.states)if(t.value===(this.pv?.value??this.value))return t.color;return this.stateColorFallback}get label(){if(this.stateCount===2)return this.booleanValue?this.onLabel:this.offLabel;for(let t of this.states)if(t.value===(this.pv?.value??this.value))return t.label;return this.stateLabelFallback}draw(t){let e=D(this.bounds,3*this.scale);if(this.squareLed?this.effect3d?this.drawSquare3d(t,e):this.drawSquare2d(t,e):this.effect3d?this.drawCircle3d(t,e):this.drawCircle2d(t,e),this.showBooleanLabel){let i=this.bulbColor;i.red*299+i.green*587+i.blue*114>105e3?i=g.BLACK:i=g.WHITE,t.fillText({x:e.x+e.width/2,y:e.y+e.height/2,font:this.font,baseline:"middle",align:"center",color:i,text:this.label})}}drawCircle2d(t,e){let i=e.x+e.width/2,r=e.y+e.height/2,s=e.width/2,o=e.height/2;this.bulbBorder>0&&(s-=this.bulbBorder/2,o-=this.bulbBorder/2),t.fillEllipse({cx:i,cy:r,rx:s,ry:o,color:this.bulbColor}),t.strokeEllipse({cx:i,cy:r,rx:s,ry:o,color:this.bulbBorderColor,lineWidth:this.bulbBorder}),this.pv&&this.pv.navigable&&!this.pv.disconnected&&t.addHitRegion(this.areaRegion).addEllipse(i,r,s,o,0,0,2*Math.PI)}drawCircle3d(t,e){let i=e.x+e.width/2,r=e.y+e.height/2,s=e.width/2,o=e.height/2;t.fillEllipse({cx:i,cy:r,rx:s,ry:o,color:g.WHITE});let n=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y+e.height);n.addColorStop(0,this.bulbBorderColor.toString()),n.addColorStop(1,this.bulbBorderColor.withAlpha(0).toString()),t.fillEllipse({cx:i,cy:r,rx:s,ry:o,gradient:n});let a=e.width-2*this.bulbBorder,l=e.height-2*this.bulbBorder;s=a/2,o=l/2,t.fillEllipse({cx:i,cy:r,rx:s,ry:o,color:this.bulbColor}),n=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y+e.height),n.addColorStop(0,g.WHITE.toString()),n.addColorStop(1,this.bulbBorderColor.withAlpha(0).toString()),t.fillEllipse({cx:i,cy:r,rx:s,ry:o,gradient:n}),this.pv&&this.pv.navigable&&!this.pv.disconnected&&t.addHitRegion(this.areaRegion).addEllipse(i,r,s,o,0,0,2*Math.PI)}drawSquare2d(t,e){let i=wt(e.x,e.y,e.width,e.height,this.bulbBorder);t.fillRect({...i,color:this.bulbColor}),t.strokeRect({...i,color:this.bulbBorderColor,lineWidth:this.bulbBorder}),this.pv&&this.pv.navigable&&!this.pv.disconnected&&t.addHitRegion(this.areaRegion).addRect(e.x,e.y,e.width,e.height)}drawSquare3d(t,e){t.fillRect({...e,color:this.bulbBorderColor}),this.pv&&this.pv.navigable&&!this.pv.disconnected&&t.addHitRegion(this.areaRegion).addRect(e.x,e.y,e.width,e.height);let i=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y);i.addColorStop(0,"rgba(0,0,0,0.078)"),i.addColorStop(1,"rgba(0,0,0,0.39)"),t.fillPath({gradient:i,path:new v(e.x,e.y).lineTo(e.x+this.bulbBorder,e.y+this.bulbBorder).lineTo(e.x+this.bulbBorder,e.y+e.height-this.bulbBorder).lineTo(e.x,e.y+e.height)}),i=t.createLinearGradient(e.x,e.y,e.x,e.y+e.height),i.addColorStop(0,"rgba(0,0,0,0.078)"),i.addColorStop(1,"rgba(0,0,0,0.39)"),t.fillPath({gradient:i,path:new v(e.x,e.y).lineTo(e.x+this.bulbBorder,e.y+this.bulbBorder).lineTo(e.x+e.width-this.bulbBorder,e.y+this.bulbBorder).lineTo(e.x+e.width,e.y)}),i=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y),i.addColorStop(0,"rgba(255,255,255,0.078)"),i.addColorStop(1,"rgba(255,255,255,0.39)"),t.fillPath({gradient:i,path:new v(e.x+e.width,e.y).lineTo(e.x+e.width-this.bulbBorder,e.y+this.bulbBorder).lineTo(e.x+e.width-this.bulbBorder,e.y+e.height-this.bulbBorder).lineTo(e.x+e.width,e.y+e.height)}),i=t.createLinearGradient(e.x,e.y,e.x,e.y+e.height),i.addColorStop(0,"rgba(255,255,255,0.078)"),i.addColorStop(1,"rgba(255,255,255,0.39)"),t.fillPath({gradient:i,path:new v(e.x,e.y+e.height).lineTo(e.x+this.bulbBorder,e.y+e.height-this.bulbBorder).lineTo(e.x+e.width-this.bulbBorder,e.y+e.height-this.bulbBorder).lineTo(e.x+e.width,e.y+e.height)});let r=e.x+this.bulbBorder,s=e.y+this.bulbBorder,o=e.width-2*this.bulbBorder,n=e.height-2*this.bulbBorder;t.fillRect({x:r,y:s,width:o,height:n,color:this.bulbColor}),i=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y+e.height),i.addColorStop(0,"rgba(255,255,255,0.784)"),i.addColorStop(1,this.bulbColor.withAlpha(0).toString()),t.fillRect({x:r,y:s,width:o,height:n,gradient:i})}get bit(){return this.properties.getValue(kh)}get dataType(){return this.properties.getValue(Hh)}get squareLed(){return this.properties.getValue(Fh)}get showBooleanLabel(){return this.properties.getValue(Qh)}get font(){return this.properties.getValue(Yh).scale(this.scale)}get effect3d(){return this.properties.getValue(Dh)}get stateCount(){return this.properties.getValue(Nh)}get bulbBorder(){return this.scale*this.properties.getValue(Kh)}get bulbBorderColor(){return this.properties.getValue(jh)}get offLabel(){return this.properties.getValue($h)}get offColor(){return this.properties.getValue(Gh)}get offState(){return this.properties.getValue(Uh)}get onLabel(){return this.properties.getValue(zh)}get onColor(){return this.properties.getValue(Xh)}get onState(){return this.properties.getValue(qh)}get stateLabelFallback(){return this.properties.getValue(Jh)}get stateColorFallback(){return this.properties.getValue(Zh)}};var dg=16,ug=12,gg=-5,mg=45,Zi=$(mg),tc=(1-Math.sin(Zi)/2)/(2*Math.cos(Zi)),ec="color_hi",ic="color_hihi",rc="color_lo",sc="color_lolo",oc="font",nc="level_hi",ac="level_hihi",lc="level_lo",hc="level_lolo",cc="log_scale",pc="minimum",dc="maximum",uc="needle_color",gc="ramp_gradient",mc="scale_font",fc="show_hi",xc="show_hihi",wc="show_lo",yc="show_lolo",bc="show_ramp",Pc="value_label_format",Ji=class extends V{areaRegion;constructor(t,e){super(t,e),this.properties.add(new S(ec)),this.properties.add(new S(ic)),this.properties.add(new S(rc)),this.properties.add(new S(sc)),this.properties.add(new k(oc)),this.properties.add(new P(nc)),this.properties.add(new P(ac)),this.properties.add(new P(lc)),this.properties.add(new P(hc)),this.properties.add(new w(cc)),this.properties.add(new P(dc)),this.properties.add(new P(pc)),this.properties.add(new S(uc)),this.properties.add(new w(gc)),this.properties.add(new k(mc)),this.properties.add(new w(fc)),this.properties.add(new w(xc)),this.properties.add(new w(wc)),this.properties.add(new w(yc)),this.properties.add(new w(bc,!0)),this.properties.add(new R(Pc))}init(){this.areaRegion={id:`${this.wuid}-area`,click:()=>{let t={pvName:this.pvName};this.display.fireEvent("openpv",t)},tooltip:()=>this.tooltip,cursor:"pointer"}}draw(t){t.fillRect({x:this.x,y:this.y,width:this.width,height:this.height,color:this.backgroundColor}),this.showRamp&&this.drawRamp(t),this.pv&&this.pv.navigable&&!this.pv.disconnected&&t.addHitRegion(this.areaRegion).addRect(this.x,this.y,this.width,this.height)}drawRamp(t){let e=String(this.minimum),i=t.measureText(e,this.scaleFont),r=String(this.maximum),s=t.measureText(r,this.scaleFont),o=Math.max(i.width,s.width)/2,n=this.height,a=this.width;n>tc*(a-2*o)&&(n=Math.floor(tc*(a-2*o)));let l=n/(1-Math.sin(Zi)/2),c=Math.floor(this.x-l*(1-Math.cos(Zi))+o),h=this.y,u={x:c,y:h,width:Math.floor(2*l),height:Math.floor(2*l)},{rampWidth:f}=this,_=D(u,u.width/4-f,u.height/4-f);_.width=Math.min(_.width,_.height),_.height=_.width;let b=new ue(f,135,45);b.lolo=this.levelLoLo,b.loloColor=this.colorLoLo,b.showLoLo=!0,b.lo=this.levelLo,b.loColor=this.colorLo,b.showLo=!0,b.hi=this.levelHi,b.hiColor=this.colorHi,b.showHi=!0,b.hihi=this.levelHiHi,b.hihiColor=this.colorHiHi,b.showHiHi=!0,b.minimum=this.minimum,b.maximum=this.maximum,b.gradient=this.rampGradient,b.logScale=this.logScale,b.draw(t,u,_),this.drawNeedle(t,u,b);let T=q.ARIAL_12_BOLD.scale(this.scale);if(this.pv&&this.pv.value!==void 0){let W=this.format(this.pv.value),O=t.measureText(W,T);t.fillText({x:u.x+u.width/2-O.width/2,y:u.y+u.height/2-u.height/4-(b.getRadius()-u.height/4)/2-O.height/2,align:"left",baseline:"top",font:T,text:W,color:this.foregroundColor})}}drawNeedle(t,e,i){let r=e.x+e.width/2,s=e.y+e.height/2,o;if(this.pv&&this.pv.value!==void 0){let _=i.getValueInRange(this.pv.value);o=360-i.getValuePosition(_),this.maximum>this.minimum?_>this.maximum?o+=8:_<this.minimum&&(o-=8):_>this.minimum?o-=8:_<this.maximum&&(o+=8)}else o=360-i.getValuePosition(this.minimum+this.maximum/2);let n=$(o),{needleWidth:a,gapBetweenNeedleScale:l,scale:c}=this,h=Ct(r+e.width/4,s-a/2+3*c,r,s,n),u=Ct(r+i.getRadius()-l,s,r,s,n),f=Ct(r+e.width/4,s+a/2-3*c,r,s,n);t.fillPath({color:this.needleColor,path:new v(h.x,h.y).lineTo(u.x,u.y).lineTo(f.x,f.y).closePath()})}get needleWidth(){return this.scale*dg}get gapBetweenNeedleScale(){return this.scale*gg}get rampWidth(){return this.scale*ug}format(t){return this.valueLabelFormat?new st(this.valueLabelFormat).format(t):String(Number(t.toFixed(2)))}get colorLo(){return this.properties.getValue(rc)}get colorLoLo(){return this.properties.getValue(sc)}get colorHi(){return this.properties.getValue(ec)}get colorHiHi(){return this.properties.getValue(ic)}get font(){return this.properties.getValue(oc).scale(this.scale)}get levelLo(){return this.properties.getValue(lc)}get levelLoLo(){return this.properties.getValue(hc)}get levelHi(){return this.properties.getValue(nc)}get levelHiHi(){return this.properties.getValue(ac)}get logScale(){return this.properties.getValue(cc)}get minimum(){return this.properties.getValue(pc)}get maximum(){return this.properties.getValue(dc)}get needleColor(){return this.properties.getValue(uc)}get rampGradient(){return this.properties.getValue(gc)}get scaleFont(){return this.properties.getValue(mc).scale(this.scale)}get showLo(){return this.properties.getValue(wc)}get showLoLo(){return this.properties.getValue(yc)}get showHi(){return this.properties.getValue(fc)}get showHiHi(){return this.properties.getValue(xc)}get showRamp(){return this.properties.getValue(bc)}get valueLabelFormat(){return this.properties.getValue(Pc)}};var vc="color_hi",_c="color_hihi",Rc="color_lo",Tc="color_lolo",Cc="color_fillbackground",Sc="effect_3d",Lc="fill_color",Ac="fillcolor_alarm_sensitive",Ec="font",Oc="horizontal",Vc="indicator_mode",Mc="level_hi",Ic="level_hihi",Bc="level_lo",Wc="level_lolo",kc="limits_from_pv",Hc="log_scale",Dc="maximum",Nc="major_tick_step_hint",Fc="minimum",Gc="origin",$c="origin_ignored",Uc="scale_font",Yc="scale_format",Xc="show_hi",zc="show_hihi",qc="show_label",Kc="show_lo",jc="show_lolo",Zc="show_markers",Jc="show_minor_ticks",Qc="show_scale",tp="transparent_background",ep="value_label_format",Qi=class extends V{constructor(t,e){super(t,e),this.properties.add(new S(vc)),this.properties.add(new S(_c)),this.properties.add(new S(Rc)),this.properties.add(new S(Tc)),this.properties.add(new S(Cc)),this.properties.add(new w(Sc)),this.properties.add(new S(Lc)),this.properties.add(new w(Ac,!1)),this.properties.add(new k(Ec)),this.properties.add(new w(Oc)),this.properties.add(new w(Vc)),this.properties.add(new B(Mc)),this.properties.add(new B(Ic)),this.properties.add(new B(Bc)),this.properties.add(new B(Wc)),this.properties.add(new w(kc)),this.properties.add(new w(Hc)),this.properties.add(new B(Dc)),this.properties.add(new B(Nc)),this.properties.add(new B(Fc)),this.properties.add(new B(Gc,0)),this.properties.add(new w($c,!0)),this.properties.add(new k(Uc)),this.properties.add(new R(Yc)),this.properties.add(new w(Xc)),this.properties.add(new w(zc)),this.properties.add(new w(qc)),this.properties.add(new w(Kc)),this.properties.add(new w(jc)),this.properties.add(new w(Zc)),this.properties.add(new w(Jc)),this.properties.add(new w(Qc)),this.properties.add(new w(tp)),this.properties.add(new R(ep))}draw(t){let e=this.area;this.borderAlarmSensitive&&(e=D(this.area,2*this.scale));let i=this.alarmSensitiveBackgroundColor;this.transparentBackground||t.fillRect({...e,color:i}),this.horizontal?this.drawHorizontal(t,e):this.drawVertical(t,e)}drawVertical(t,e){let i=this.alarmSensitiveForegroundColor,r=new et(this.display.formatter,this.scale,this.scaleFont,this.min,this.max,this.logScale,this.majorTickStepHint,i,this.showMinorTicks,this.showScale);r.scaleFormat=this.scaleFormat;let s=r.drawVertical(t,e.x,e.y,e.height,!0),o=0;this.showMarkers&&(o=this.drawVerticalMarkers(t,r,e)),this.drawVerticalBar(t,r,{x:e.x+s,y:e.y+r.margin,width:e.width-s-o,height:e.height-2*r.margin})}drawVerticalMarkers(t,e,i){let{lolo:r,lo:s,hi:o,hihi:n}=this,a=q.ARIAL_9.scale(this.scale),l=0;if(this.showLoLo&&r!==void 0){let h=t.measureText("LOLO",a);l=Math.max(l,h.width)}if(this.showLo&&s!==void 0){let h=t.measureText("LO",a);l=Math.max(l,h.width)}if(this.showHi&&o!==void 0){let h=t.measureText("HI",a);l=Math.max(l,h.width)}if(this.showHiHi&&n!==void 0){let h=t.measureText("HIHI",a);l=Math.max(l,h.width)}let c=i.x+i.width;if(this.showLoLo&&r!==void 0){let h=c-l-this.markerGap,u=Math.round(e.getValuePosition(r));t.strokePath({path:new v(h,u).lineTo(h-this.markerTickLength,u),color:this.colorLoLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:h+this.markerGap,y:u,text:"LOLO",align:"left",baseline:"middle",color:this.colorLoLo,font:a})}if(this.showLo&&s!==void 0){let h=c-l-this.markerGap,u=Math.round(e.getValuePosition(s));t.strokePath({path:new v(h,u).lineTo(h-this.markerTickLength,u),color:this.colorLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:h+this.markerGap,y:u,text:"LO",align:"left",baseline:"middle",color:this.colorLo,font:a})}if(this.showHi&&o!==void 0){let h=c-l-this.markerGap,u=Math.round(e.getValuePosition(o));t.strokePath({path:new v(h,u).lineTo(h-this.markerTickLength,u),color:this.colorHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:h+this.markerGap,y:u,text:"HI",align:"left",baseline:"middle",color:this.colorHi,font:a})}if(this.showHiHi&&n!==void 0){let h=c-l-this.markerGap,u=Math.round(e.getValuePosition(n));t.strokePath({path:new v(h,u).lineTo(h-this.markerTickLength,u),color:this.colorHiHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:h+this.markerGap,y:u,text:"HIHI",align:"left",baseline:"middle",color:this.colorHiHi,font:a})}return this.markerTickLength+this.markerGap+l}drawVerticalBar(t,e,i){let{outlineWidth:r}=this;if(t.fillRect({...i,color:this.colorFillbackground}),this.effect3d){let n=t.createLinearGradient(i.x,0,i.x+i.width,0);n.addColorStop(0,g.WHITE.toString()),n.addColorStop(1,this.colorFillbackground.withAlpha(0).toString()),t.fillRect({...i,gradient:n});let a=D(i,r/2);t.strokeRect({...a,color:g.GRAY,lineWidth:r})}let s=this.alarmSensitiveFillColor;if(this.indicatorMode){let n=Math.round(e.getValuePosition(this.getFillValue())),a=i.width,l=this.thumbBreadth,c=Jt([{x:0,y:l/2},{x:a/2,y:0},{x:a-1,y:l/2},{x:a/2,y:l}],i.x,n-l/2),h=v.fromPoints(c);if(this.effect3d){let{x:u,y:f}=c[0],{x:_,y:b}=c[2],T=t.createLinearGradient(u,f,_,b);T.addColorStop(0,g.WHITE.toString()),T.addColorStop(1,s.toString()),t.fillPath({path:h,gradient:T}),t.strokePath({path:h,color:g.GRAY,lineWidth:r})}else t.fillPath({path:h,color:s})}else{let n=this.originIgnored?this.min:this.origin,a=this.getFillValue();if(a<n){let u=n;n=a,a=u}let l=Math.round(e.getValuePosition(n)),c=Math.round(e.getValuePosition(a)),h=D({...i,y:l,height:c-l},r);if(t.fillRect({...h,color:s}),this.effect3d){let u=t.createLinearGradient(h.x,0,h.x+h.width,0);u.addColorStop(0,g.WHITE.toString()),u.addColorStop(1,s.withAlpha(0).toString()),t.fillRect({...h,gradient:u})}}let o=this.pv?.value;this.showLabel&&o!==void 0&&t.fillText({x:i.x+i.width/2,y:i.y+i.height/2,align:"center",baseline:"middle",color:this.alarmSensitiveForegroundColor,font:this.font,text:this.format(o)})}drawHorizontal(t,e){let i=this.alarmSensitiveForegroundColor,r=new et(this.display.formatter,this.scale,this.scaleFont,this.min,this.max,this.logScale,this.majorTickStepHint,i,this.showMinorTicks,this.showScale);r.scaleFormat=this.scaleFormat;let s=r.drawHorizontal(t,e.x,e.y+e.height,e.width),o=0;this.showMarkers&&(o=this.drawHorizontalMarkers(t,r,e)),this.drawHorizontalBar(t,r,{x:e.x+r.margin,y:e.y+o,width:e.width-2*r.margin,height:e.height-s-o})}drawHorizontalMarkers(t,e,i){let{lolo:r,lo:s,hi:o,hihi:n}=this,a=q.ARIAL_9.scale(this.scale),l=0;if(this.showLoLo&&r!==void 0){let h=t.measureText("LOLO",a);l=Math.max(l,h.height)}if(this.showLo&&s!==void 0){let h=t.measureText("LO",a);l=Math.max(l,h.height)}if(this.showHi&&o!==void 0){let h=t.measureText("HI",a);l=Math.max(l,h.height)}if(this.showHiHi&&n!==void 0){let h=t.measureText("HIHI",a);l=Math.max(l,h.height)}let c=i.y;if(this.showLoLo&&r!==void 0){let h=Math.round(e.getValuePosition(r)),u=c+l+this.markerGap;t.strokePath({path:new v(h,u).lineTo(h,u+this.markerTickLength),color:this.colorLoLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:h,y:c,text:"LOLO",align:"center",baseline:"top",color:this.colorLoLo,font:a})}if(this.showLo&&s!==void 0){let h=Math.round(e.getValuePosition(s)),u=c+l+this.markerGap;t.strokePath({path:new v(h,u).lineTo(h,u+this.markerTickLength),color:this.colorLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:h,y:c,text:"LO",align:"center",baseline:"top",color:this.colorLo,font:a})}if(this.showHi&&o!==void 0){let h=Math.round(e.getValuePosition(o)),u=c+l+this.markerGap;t.strokePath({path:new v(h,u).lineTo(h,u+this.markerTickLength),color:this.colorHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:h,y:c,text:"HI",align:"center",baseline:"top",color:this.colorHi,font:a})}if(this.showHiHi&&n!==void 0){let h=Math.round(e.getValuePosition(n)),u=c+l+this.markerGap;t.strokePath({path:new v(h,u).lineTo(h,u+this.markerTickLength),color:this.colorHiHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:h,y:c,text:"HIHI",align:"center",baseline:"top",color:this.colorHiHi,font:a})}return this.markerTickLength+this.markerGap+l}drawHorizontalBar(t,e,i){let{outlineWidth:r}=this;if(t.fillRect({...i,color:this.colorFillbackground}),this.effect3d){let n=t.createLinearGradient(0,i.y,0,i.y+i.height);n.addColorStop(0,g.WHITE.toString()),n.addColorStop(1,this.colorFillbackground.withAlpha(0).toString()),t.fillRect({...i,gradient:n});let a=D(i,r/2);t.strokeRect({...a,color:g.GRAY,lineWidth:r})}let s=this.alarmSensitiveFillColor;if(this.indicatorMode){let n=Math.round(e.getValuePosition(this.getFillValue())),a=i.height,l=this.thumbBreadth,c=Jt([{x:l/2,y:0},{x:l,y:a/2},{x:l/2,y:a-1},{x:0,y:a/2}],n-l/2,i.y),h=v.fromPoints(c);if(this.effect3d){let{x:u,y:f}=c[0],{x:_,y:b}=c[2],T=t.createLinearGradient(u,f,_,b);T.addColorStop(0,g.WHITE.toString()),T.addColorStop(1,s.toString()),t.fillPath({path:h,gradient:T}),t.strokePath({path:h,color:g.GRAY,lineWidth:r})}else t.fillPath({path:h,color:s})}else{let n=this.originIgnored?this.min:this.origin,a=this.getFillValue();if(a<n){let u=n;n=a,a=u}let l=Math.round(e.getValuePosition(n)),c=Math.round(e.getValuePosition(a)),h=D({...i,x:l,width:c-l},r);if(t.fillRect({...h,color:s}),this.effect3d){let u=t.createLinearGradient(0,h.y,0,h.y+h.height);u.addColorStop(0,g.WHITE.toString()),u.addColorStop(1,s.withAlpha(0).toString()),t.fillRect({...h,gradient:u})}}let o=this.pv?.value;this.showLabel&&o!==void 0&&t.fillText({x:i.x+i.width/2,y:i.y+i.height/2,align:"center",baseline:"middle",color:this.alarmSensitiveForegroundColor,font:this.font,text:this.format(o)})}get min(){return this.limitsFromPv?this.pv?.lowerDisplayLimit??this.minimum:this.minimum}get max(){return this.limitsFromPv?this.pv?.upperDisplayLimit??this.maximum:this.maximum}get lolo(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.lowerAlarmLimit:this.levelLoLo}get lo(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.lowerWarningLimit:this.levelLo}get hi(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.upperWarningLimit:this.levelHi}get hihi(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.upperAlarmLimit:this.levelHiHi}get markerTickLength(){return this.scale*10}get markerTickLineWidth(){return this.scale*2}get markerGap(){return this.scale*3}get thumbBreadth(){return this.scale*13}get outlineWidth(){return this.scale*1}get alarmSensitiveFillColor(){if(this.fillColorAlarmSensitive){if(this.isMajorSeverity())return this.display.majorColor;if(this.isMinorSeverity())return this.display.minorColor}return this.fillColor}getFillValue(){let t=this.pv?.value??this.min;return t=Math.max(this.min,t),t=Math.min(this.max,t),t}format(t){return this.valueLabelFormat?new st(this.valueLabelFormat).format(t):String(Number(t.toFixed(2)))}get colorLo(){return this.properties.getValue(Rc)}get colorLoLo(){return this.properties.getValue(Tc)}get colorHi(){return this.properties.getValue(vc)}get colorHiHi(){return this.properties.getValue(_c)}get colorFillbackground(){return this.properties.getValue(Cc)}get effect3d(){return this.properties.getValue(Sc)}get fillColorAlarmSensitive(){return this.properties.getValue(Ac)}get fillColor(){return this.properties.getValue(Lc)}get font(){return this.properties.getValue(Ec).scale(this.scale)}get horizontal(){return this.properties.getValue(Oc)}get indicatorMode(){return this.properties.getValue(Vc)}get levelLo(){return this.properties.getValue(Bc)}get levelLoLo(){return this.properties.getValue(Wc)}get levelHi(){return this.properties.getValue(Mc)}get levelHiHi(){return this.properties.getValue(Ic)}get limitsFromPv(){return this.properties.getValue(kc)}get logScale(){return this.properties.getValue(Hc)}get minimum(){return this.properties.getValue(Fc)}get majorTickStepHint(){return this.scale*this.properties.getValue(Nc)}get maximum(){return this.properties.getValue(Dc)}get origin(){return this.properties.getValue(Gc)}get originIgnored(){return this.properties.getValue($c)}get scaleFont(){return this.properties.getValue(Uc).scale(this.scale)}get scaleFormat(){return this.properties.getValue(Yc)}get showHi(){return this.properties.getValue(Xc)}get showHiHi(){return this.properties.getValue(zc)}get showLabel(){return this.properties.getValue(qc)}get showLo(){return this.properties.getValue(Kc)}get showLoLo(){return this.properties.getValue(jc)}get showMarkers(){return this.properties.getValue(Zc)}get showMinorTicks(){return this.properties.getValue(Jc)}get showScale(){return this.properties.getValue(Qc)}get transparentBackground(){return this.properties.getValue(tp)}get valueLabelFormat(){return this.properties.getValue(ep)}};var ip="color_hi",rp="color_hihi",sp="color_lo",op="color_lolo",np="color_fillbackground",ap="fill_color",lp="fillcolor_alarm_sensitive",hp="effect_3d",cp="level_hi",pp="level_hihi",dp="level_lo",up="level_lolo",gp="limits_from_pv",mp="log_scale",fp="maximum",xp="major_tick_step_hint",wp="minimum",yp="scale_font",bp="scale_format",Pp="show_hi",vp="show_hihi",_p="show_lo",Rp="show_lolo",Tp="show_markers",Cp="show_minor_ticks",Sp="show_scale",Lp="transparent_background",fg=new g(160,160,160),tr=class extends V{constructor(t,e){super(t,e),this.properties.add(new S(ip)),this.properties.add(new S(rp)),this.properties.add(new S(sp)),this.properties.add(new S(op)),this.properties.add(new S(np)),this.properties.add(new w(hp)),this.properties.add(new S(ap)),this.properties.add(new w(lp,!1)),this.properties.add(new B(cp)),this.properties.add(new B(pp)),this.properties.add(new B(dp)),this.properties.add(new B(up)),this.properties.add(new w(gp)),this.properties.add(new w(mp)),this.properties.add(new B(fp)),this.properties.add(new B(xp)),this.properties.add(new B(wp)),this.properties.add(new k(yp)),this.properties.add(new R(bp)),this.properties.add(new w(Pp)),this.properties.add(new w(vp)),this.properties.add(new w(_p)),this.properties.add(new w(Rp)),this.properties.add(new w(Tp)),this.properties.add(new w(Cp)),this.properties.add(new w(Sp)),this.properties.add(new w(Lp))}draw(t){let{scale:e,min:i,max:r}=this,s=this.area;this.borderAlarmSensitive&&(s=D(s,2*e));let o=this.alarmSensitiveBackgroundColor;this.transparentBackground||t.fillRect({...s,color:o});let n=this.alarmSensitiveForegroundColor,a=new et(this.display.formatter,e,this.scaleFont,i,r,this.logScale,this.majorTickStepHint,n,this.showMinorTicks,this.showScale);a.scaleFormat=this.scaleFormat;let l=a.drawVertical(t,s.x,s.y,s.height,!0),c=0;this.showMarkers&&(c=this.drawMarkers(t,s,a)),this.drawTank(t,s,l,c,a)}drawMarkers(t,e,i){let{lolo:r,lo:s,hi:o,hihi:n}=this,a=q.ARIAL_9.scale(this.scale),l=0;if(this.showLoLo&&r!==void 0){let h=t.measureText("LOLO",a);l=Math.max(l,h.width)}if(this.showLo&&s!==void 0){let h=t.measureText("LO",a);l=Math.max(l,h.width)}if(this.showHi&&o!==void 0){let h=t.measureText("HI",a);l=Math.max(l,h.width)}if(this.showHiHi&&n!==void 0){let h=t.measureText("HIHI",a);l=Math.max(l,h.width)}let c=e.x+e.width-l-this.markerGap-this.markerTickLength;if(this.showLoLo&&r!==void 0){let h=Math.round(i.getValuePosition(r));t.strokePath({path:new v(c,h).lineTo(c+this.markerTickLength,h),color:this.colorLoLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:c+this.markerTickLength+this.markerGap,y:h,text:"LOLO",align:"left",baseline:"middle",color:this.colorLoLo,font:a})}if(this.showLo&&s!==void 0){let h=Math.round(i.getValuePosition(s));t.strokePath({path:new v(c,h).lineTo(c+this.markerTickLength,h),color:this.colorLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:c+this.markerTickLength+this.markerGap,y:h,text:"LO",align:"left",baseline:"middle",color:this.colorLo,font:a})}if(this.showHi&&o!==void 0){let h=Math.round(i.getValuePosition(o));t.strokePath({path:new v(c,h).lineTo(c+this.markerTickLength,h),color:this.colorHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:c+this.markerTickLength+this.markerGap,y:h,text:"HI",align:"left",baseline:"middle",color:this.colorHi,font:a})}if(this.showHiHi&&n!==void 0){let h=Math.round(i.getValuePosition(n));t.strokePath({path:new v(c,h).lineTo(c+this.markerTickLength,h),color:this.colorHiHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:c+this.markerTickLength+this.markerGap,y:h,text:"HIHI",align:"left",baseline:"middle",color:this.colorHiHi,font:a})}return this.markerTickLength+this.markerGap+l}drawTank(t,e,i,r,s){let o=this.alarmSensitiveForegroundColor,{scale:n,outlineWidth:a}=this,l=e.x+i,c=e.y+s.margin,h=e.width-i-r,u=e.height-2*s.margin,f=this.defaultCorner,_=11/20;h<2*f&&(_=12/20);let b=Math.floor(h*_);f>2*b-h-2*a&&(f=2*b-h);let T=s.getValuePosition(this.getFillValue()),W=this.alarmSensitiveFillColor;if(this.effect3d){t.fillRect({x:l,y:c,width:h,height:u,rx:f/2,ry:f/2,color:g.WHITE});let L=t.createLinearGradient(l,c,l+b+2*n,c);L.addColorStop(0,this.colorFillbackground.toString()),L.addColorStop(1,g.WHITE.withAlpha(0).toString()),t.fillRect({x:l,y:c,width:b,height:u,rx:f/2,ry:f/2,gradient:L}),L=t.createLinearGradient(l+h-b-2*n,c,l+h,c),L.addColorStop(0,g.WHITE.withAlpha(0).toString()),L.addColorStop(1,this.colorFillbackground.toString()),t.fillRect({x:l+h-b,y:c,width:b,height:u,rx:f/2,ry:f/2,gradient:L});let M=T,N=c+u-T;L=t.createLinearGradient(l,M,l+b+2*n,M),L.addColorStop(0,W.toString()),L.addColorStop(1,g.WHITE.withAlpha(0).toString()),t.fillRect({x:l,y:M,width:b,height:N,rx:f/2,ry:f/2,gradient:L}),L=t.createLinearGradient(l+h-b-2*n,M,l+h,M),L.addColorStop(0,g.WHITE.withAlpha(0).toString()),L.addColorStop(1,W.toString()),t.fillRect({x:l+h-b,y:M,width:b,height:N,rx:f/2,ry:f/2,gradient:L})}else t.fillRect({x:l,y:c,width:h,height:u,rx:f/2,ry:f/2,color:this.colorFillbackground}),t.fillRect({x:l,y:T,width:h,height:c+u-T,rx:f/2,ry:f/2,color:W});let O=D({x:l,y:c,width:h,height:u},a/2);t.strokeRect({...O,rx:f/2,ry:f/2,color:this.effect3d?fg:o,lineWidth:a})}get min(){return this.limitsFromPv?this.pv?.lowerDisplayLimit??this.minimum:this.minimum}get max(){return this.limitsFromPv?this.pv?.upperDisplayLimit??this.maximum:this.maximum}get lolo(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.lowerAlarmLimit:this.levelLoLo}get lo(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.lowerWarningLimit:this.levelLo}get hi(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.upperWarningLimit:this.levelHi}get hihi(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.upperAlarmLimit:this.levelHiHi}get defaultCorner(){return this.scale*15}get markerTickLength(){return this.scale*10}get markerTickLineWidth(){return this.scale*2}get markerGap(){return this.scale*3}get outlineWidth(){return this.scale*1}get alarmSensitiveFillColor(){if(this.fillColorAlarmSensitive){if(this.isMajorSeverity())return this.display.majorColor;if(this.isMinorSeverity())return this.display.minorColor}return this.fillColor}getFillValue(){let t=this.pv?.value??this.min;return t=Math.max(this.min,t),t=Math.min(this.max,t),t}get colorLo(){return this.properties.getValue(sp)}get colorLoLo(){return this.properties.getValue(op)}get colorHi(){return this.properties.getValue(ip)}get colorHiHi(){return this.properties.getValue(rp)}get colorFillbackground(){return this.properties.getValue(np)}get fillColorAlarmSensitive(){return this.properties.getValue(lp)}get fillColor(){return this.properties.getValue(ap)}get effect3d(){return this.properties.getValue(hp)}get levelLo(){return this.properties.getValue(dp)}get levelLoLo(){return this.properties.getValue(up)}get levelHi(){return this.properties.getValue(cp)}get levelHiHi(){return this.properties.getValue(pp)}get limitsFromPv(){return this.properties.getValue(gp)}get logScale(){return this.properties.getValue(mp)}get minimum(){return this.properties.getValue(wp)}get majorTickStepHint(){return this.scale*this.properties.getValue(xp)}get maximum(){return this.properties.getValue(fp)}get scaleFont(){return this.properties.getValue(yp).scale(this.scale)}get scaleFormat(){return this.properties.getValue(bp)}get showLo(){return this.properties.getValue(_p)}get showLoLo(){return this.properties.getValue(Rp)}get showHi(){return this.properties.getValue(Pp)}get showHiHi(){return this.properties.getValue(vp)}get showMarkers(){return this.properties.getValue(Tp)}get showMinorTicks(){return this.properties.getValue(Cp)}get showScale(){return this.properties.getValue(Sp)}get transparentBackground(){return this.properties.getValue(Lp)}};var Ap="font",Ep="format_type",Op="horizontal_alignment",Vp="precision",Mp="precision_from_pv",Ip="show_lohi",Bp="show_units",Wp="vertical_alignment",er=class extends V{areaRegion;constructor(t,e){super(t,e),this.properties.add(new k(Ap)),this.properties.add(new P(Ep)),this.properties.add(new P(Op)),this.properties.add(new P(Vp)),this.properties.add(new w(Mp)),this.properties.add(new w(Ip,!0)),this.properties.add(new w(Bp,!0)),this.properties.add(new P(Wp))}init(){this.areaRegion={id:`${this.wuid}-area`,click:()=>{let t={pvName:this.pvName};this.display.fireEvent("openpv",t)},tooltip:()=>this.tooltip,cursor:"pointer"}}draw(t){let e=t.ctx;this.backgroundAlarmSensitive&&this.alarm?t.fillRect({...this.area,color:this.alarmSensitiveBackgroundColor}):this.transparent||t.fillRect({...this.area,color:this.backgroundColor}),this.pv&&this.pv.navigable&&!this.pv.disconnected&&t.addHitRegion(this.areaRegion).addRect(this.x,this.y,this.width,this.height);let{scale:i}=this,r=this.area;this.borderAlarmSensitive&&(r=D(r,2*i,2*i));let s=this.text;if(this.pv?.value!==void 0){let h=this.precisionFromPV?this.pv.precision:this.precision;h===-1&&(h=this.pv.precision??-1),s=Ft(this.pv.value,this.formatType,h,this.pv.typeHint)}else this.value!==void 0&&(s=Ft(this.value,this.formatType,this.precision,void 0));this.showUnits&&this.pv?.units&&(s+=" "+this.pv.units),this.showLohi&&(this.pv?.alarmName==="LOLO"||this.pv?.alarmName==="LOW"?s+=" \u2193":(this.pv?.alarmName==="HIHI"||this.pv?.alarmName==="HIGH")&&(s+=" \u2191"));let o=t.measureText(s,this.font,!0);e.font=this.font.getFontString(),e.textBaseline="alphabetic";let a=e.measureText(s).fontBoundingBoxAscent,l={x:r.x,y:r.y,width:o.width,height:o.height};this.horizAlignment===0||(this.horizAlignment===1?l.x+=(r.width-o.width)/2:this.horizAlignment===2&&(l.x+=r.width-o.width)),this.vertAlignment===0||r.height<=o.height||(this.vertAlignment===1?l.y+=r.height/2-o.height/2:this.vertAlignment===2&&(l.y+=r.height-o.height)),e.textAlign="start",e.textBaseline="top",l.y+=l.height/2-a/2,e.save(),e.beginPath();let c=this.area;e.rect(c.x,c.y,c.width,c.height),e.clip(),e.fillStyle=this.alarmSensitiveForegroundColor.toString(),e.fillText(s,l.x,l.y),e.restore()}get font(){return this.properties.getValue(Ap).scale(this.scale)}get formatType(){return this.properties.getValue(Ep)}get horizAlignment(){return this.properties.getValue(Op)}get precision(){return this.properties.getValue(Vp)}get precisionFromPV(){return this.properties.getValue(Mp)}get showLohi(){return this.properties.getValue(Ip)}get showUnits(){return this.properties.getValue(Bp)}get vertAlignment(){return this.properties.getValue(Wp)}};var kp="color_hi",Hp="color_hihi",Dp="color_lo",Np="color_lolo",Fp="color_fillbackground",Gp="fill_color",$p="fillcolor_alarm_sensitive",Up="font",Yp="effect_3d",Xp="level_hi",zp="level_hihi",qp="level_lo",Kp="level_lolo",jp="limits_from_pv",Zp="log_scale",Jp="maximum",Qp="major_tick_step_hint",td="minimum",ed="scale_font",id="scale_format",rd="show_bulb",sd="show_hi",od="show_hihi",nd="show_lo",ad="show_lolo",ld="show_markers",hd="show_minor_ticks",cd="show_scale",pd="transparent_background",dd="unit",ud="value_label_format",gd=new g(160,160,160),ir=class extends V{constructor(t,e){super(t,e),this.properties.add(new S(kp)),this.properties.add(new S(Hp)),this.properties.add(new S(Dp)),this.properties.add(new S(Np)),this.properties.add(new S(Fp)),this.properties.add(new S(Gp)),this.properties.add(new w($p,!1)),this.properties.add(new w(Yp)),this.properties.add(new B(Xp)),this.properties.add(new B(zp)),this.properties.add(new B(qp)),this.properties.add(new B(Kp)),this.properties.add(new w(jp)),this.properties.add(new k(Up)),this.properties.add(new w(Zp)),this.properties.add(new B(Jp)),this.properties.add(new B(Qp)),this.properties.add(new B(td)),this.properties.add(new k(ed)),this.properties.add(new R(id)),this.properties.add(new w(rd)),this.properties.add(new w(sd)),this.properties.add(new w(od)),this.properties.add(new w(nd)),this.properties.add(new w(ad)),this.properties.add(new w(ld)),this.properties.add(new w(hd)),this.properties.add(new w(cd)),this.properties.add(new w(pd)),this.properties.add(new P(dd)),this.properties.add(new R(ud))}draw(t){let{scale:e,min:i,max:r}=this,s=this.area;this.borderAlarmSensitive&&(s=D(this.area,2*this.scale));let o=this.alarmSensitiveBackgroundColor,n=this.alarmSensitiveForegroundColor,a=this.alarmSensitiveFillColor;this.transparentBackground||t.fillRect({...s,color:o});let l=s.height;if(this.showBulb){let O=Math.min(s.width/2,this.bulbMaxDiameter);l=s.height<O?0:s.height-O}let c={...s,height:l},h=new et(this.display.formatter,e,this.scaleFont,i,r,this.logScale,this.majorTickStepHint,n,this.showMinorTicks,this.showScale);h.scaleFormat=this.scaleFormat;let u=0,f="";if(this.unit===0?f="\xB0C":this.unit===1?f="\xB0F":this.unit===2&&(f="K"),f){let O=q.ARIAL_9.scale(e),L=t.measureText(f,O),M=2*e;u=L.height+2*M,t.fillText({x:s.x+s.width/2-this.pipeWidth/2-M,y:s.y+M,baseline:"top",align:"right",color:n,font:O,text:f})}let _=c.x+c.width/2-this.pipeWidth/2-1*e,b={...c,y:c.y+u,height:c.height-u+h.calculateMargin(t,!1)},T=h.drawVertical(t,_,b.y,b.height,!1),W=Math.floor(this.pipeWidth/2);if(c={...c,y:h.getValuePosition(r)-W,height:h.scaleLength+2*W},this.drawPipe(t,c,h),this.showMarkers&&this.drawMarkers(t,s,h),this.showBulb){let O=Math.min(s.width/2,this.bulbMaxDiameter),L=1*e,M=s.x+s.width/2,N=s.y+l+O/2,F=O/2,X=O/2;if(t.fillEllipse({cx:M,cy:N,rx:F,ry:X,color:a}),this.effect3d){let it=t.createLinearGradient(M-F,N-X,M+F,N+X);it.addColorStop(0,g.WHITE.toString()),it.addColorStop(1,a.withAlpha(0).toString()),t.fillEllipse({cx:M,cy:N,rx:F,ry:X,gradient:it})}t.strokeEllipse({cx:M,cy:N,rx:F-L/2,ry:X-L/2,color:this.effect3d?gd:n,lineWidth:L});let j={x:Math.round(c.x+c.width/2-this.pipeWidth/2)+this.outlineWidth,y:Math.floor(h.getValuePosition(i)),width:this.pipeWidth-2*this.outlineWidth,height:e*3};if(this.effect3d){let it=Math.round(c.x+c.width/2-this.pipeWidth/2),dt=it+this.pipeWidth,ot=t.createLinearGradient(it,j.y,dt,j.y);ot.addColorStop(0,g.WHITE.toString()),ot.addColorStop(1,a.toString()),t.fillRect({...j,gradient:ot})}else t.fillRect({...j,color:a});let pt=this.pv?.value;pt&&t.fillText({x:M,y:N,align:"center",baseline:"middle",color:a.contrast(),font:this.font,text:this.format(pt)})}}drawPipe(t,e,i){let{scale:r,outlineWidth:s,min:o,max:n}=this,a=this.alarmSensitiveForegroundColor,l=this.alarmSensitiveFillColor,c={x:Math.round(e.x+e.width/2-this.pipeWidth/2),y:e.y,width:this.pipeWidth,height:e.height},h=this.getFillValue(),u=i.getValuePosition(h);n>o?h>n?u-=10*r:h<o&&(u+=10*r):h>o?u+=10*r:h<n&&(u-=10*r);let f=this.pipeWidth/2,{x:_,y:b,width:T,height:W}=c;if(this.effect3d){let L=t.createLinearGradient(_,b,_+T,b);L.addColorStop(0,g.WHITE.toString()),L.addColorStop(1,this.colorFillbackground.toString()),t.fillRect({...c,rx:f/2,ry:f/2,gradient:L}),L=t.createLinearGradient(_,b,_+T,b),L.addColorStop(0,g.WHITE.toString()),L.addColorStop(1,l.toString()),t.fillRect({x:_,y:u,width:T,height:b+W-u,rx:f/2,ry:f/2,gradient:L})}else t.fillRect({...c,rx:f/2,ry:f/2,color:this.colorFillbackground}),t.fillRect({x:_,y:u,width:T,height:b+W-u,rx:f/2,ry:f/2,color:l});let O=D(c,s/2);t.strokeRect({...O,rx:f/2,ry:f/2,color:this.effect3d?gd:a,lineWidth:s})}drawMarkers(t,e,i){let{lolo:r,lo:s,hi:o,hihi:n}=this,a=q.ARIAL_9.scale(this.scale),l=e.x+e.width/2+this.pipeWidth/2;if(this.showLoLo&&r!==void 0){let c=Math.round(i.getValuePosition(r));t.strokePath({path:new v(l,c).lineTo(l+this.markerTickLength,c),color:this.colorLoLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:l+this.markerTickLength+this.markerGap,y:c,text:"LOLO",align:"left",baseline:"middle",color:this.colorLoLo,font:a})}if(this.showLo&&s!==void 0){let c=Math.round(i.getValuePosition(s));t.strokePath({path:new v(l,c).lineTo(l+this.markerTickLength,c),color:this.colorLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:l+this.markerTickLength+this.markerGap,y:c,text:"LO",align:"left",baseline:"middle",color:this.colorLo,font:a})}if(this.showHi&&o!==void 0){let c=Math.round(i.getValuePosition(o));t.strokePath({path:new v(l,c).lineTo(l+this.markerTickLength,c),color:this.colorHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:l+this.markerTickLength+this.markerGap,y:c,text:"HI",align:"left",baseline:"middle",color:this.colorHi,font:a})}if(this.showHiHi&&n!==void 0){let c=Math.round(i.getValuePosition(n));t.strokePath({path:new v(l,c).lineTo(l+this.markerTickLength,c),color:this.colorHiHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:l+this.markerTickLength+this.markerGap,y:c,text:"HIHI",align:"left",baseline:"middle",color:this.colorHiHi,font:a})}}get min(){return this.limitsFromPv?this.pv?.lowerDisplayLimit??this.minimum:this.minimum}get max(){return this.limitsFromPv?this.pv?.upperDisplayLimit??this.maximum:this.maximum}get lolo(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.lowerAlarmLimit:this.levelLoLo}get lo(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.lowerWarningLimit:this.levelLo}get hi(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.upperWarningLimit:this.levelHi}get hihi(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.upperAlarmLimit:this.levelHiHi}get pipeWidth(){return this.scale*15}get bulbMaxDiameter(){return this.scale*40}get outlineWidth(){return this.scale*1}get markerTickLength(){return this.scale*10}get markerTickLineWidth(){return this.scale*2}get markerGap(){return this.scale*3}get alarmSensitiveFillColor(){if(this.fillColorAlarmSensitive){if(this.isMajorSeverity())return this.display.majorColor;if(this.isMinorSeverity())return this.display.minorColor}return this.fillColor}getFillValue(){let t=this.pv?.value??this.min;return t=Math.max(this.min,t),t=Math.min(this.max,t),t}format(t){return this.valueLabelFormat?new st(this.valueLabelFormat).format(t):String(Number(t.toFixed(3)))}get colorLo(){return this.properties.getValue(Dp)}get colorLoLo(){return this.properties.getValue(Np)}get colorHi(){return this.properties.getValue(kp)}get colorHiHi(){return this.properties.getValue(Hp)}get colorFillbackground(){return this.properties.getValue(Fp)}get fillColorAlarmSensitive(){return this.properties.getValue($p)}get fillColor(){return this.properties.getValue(Gp)}get font(){return this.properties.getValue(Up).scale(this.scale)}get effect3d(){return this.properties.getValue(Yp)}get levelLo(){return this.properties.getValue(qp)}get levelLoLo(){return this.properties.getValue(Kp)}get levelHi(){return this.properties.getValue(Xp)}get levelHiHi(){return this.properties.getValue(zp)}get limitsFromPv(){return this.properties.getValue(jp)}get logScale(){return this.properties.getValue(Zp)}get minimum(){return this.properties.getValue(td)}get majorTickStepHint(){return this.scale*this.properties.getValue(Qp)}get maximum(){return this.properties.getValue(Jp)}get scaleFont(){return this.properties.getValue(ed).scale(this.scale)}get scaleFormat(){return this.properties.getValue(id)}get showBulb(){return this.properties.getValue(rd)}get showMarkers(){return this.properties.getValue(ld)}get showMinorTicks(){return this.properties.getValue(hd)}get showLo(){return this.properties.getValue(nd)}get showLoLo(){return this.properties.getValue(ad)}get showHi(){return this.properties.getValue(sd)}get showHiHi(){return this.properties.getValue(od)}get showScale(){return this.properties.getValue(cd)}get transparentBackground(){return this.properties.getValue(pd)}get unit(){return this.properties.getValue(dd)}get valueLabelFormat(){return this.properties.getValue(ud)}};var md=-323.3062,fd=308.2547,rr=class{constructor(t,e){this.widget=t;this.index=e}linearScale;_effectiveMinimum;_effectiveMaximum;get scale(){return this.widget.scale}getValue(t){return this.widget.properties.getValue(`axis_${this.index}_${t}`)}isDateEnabled(){return this.timeFormat!==0}isHorizontal(){return this.index===0||this.index!==1&&!this.yAxis}isVertical(){return!this.isHorizontal()}isPrimary(){return this.index<=1}get effectiveMinimum(){return this._effectiveMinimum??this.minimum}set effectiveMinimum(t){this._effectiveMinimum=t}get effectiveMaximum(){return this._effectiveMaximum??this.maximum}set effectiveMaximum(t){this._effectiveMaximum=t}performAutoScale(){let t={start:this.minimum,stop:this.maximum},e=this.widget.calculateAutoscaledRange(this,t);e&&(this.effectiveMinimum=e.start,this.effectiveMaximum=e.stop,this.widget.requestRepaint())}applyZoom(t,e){let i=this.effectiveMinimum,r=this.effectiveMaximum,s,o;if(this.logScale){r=Math.log10(r),i=Math.log10(i);let n=Math.log10(t)*e,a=1-e;s=n+i*a,o=n+r*a,s<md&&(s=md),s=Math.pow(10,s),o>fd&&(o=fd),o=Math.pow(10,o)}else{let n=Math.max(Math.abs(i),Math.abs(r));i/=n,r/=n;let a=t/n*e,l=1-e;s=(a+i*l)*n,o=(a+r*l)*n}this.effectiveMinimum=s,this.effectiveMaximum=o,this.widget.requestRepaint()}get autoScale(){return this.getValue("auto_scale")}get autoScaleTreshold(){return this.getValue("auto_scale_treshold")}get axisColor(){return this.getValue("axis_color")}get axisTitle(){return this.getValue("axis_title")}get dashGridLine(){return this.getValue("dash_grid_line")}get gridColor(){return this.getValue("grid_color")}get leftBottomSide(){return this.getValue("left_bottom_side")}get logScale(){return this.getValue("log_scale")}get maximum(){return this.getValue("maximum")}get minimum(){return this.getValue("minimum")}get scaleFont(){return this.getValue("scale_font").scale(this.scale)}get scaleFormat(){return this.getValue("scale_format")}get showGrid(){return this.getValue("show_grid")}get timeFormat(){return this.getValue("time_format")}get titleFont(){return this.getValue("title_font").scale(this.scale)}get visible(){return this.getValue("visible")}get yAxis(){return this.getValue("y_axis")}};var ct=class{constructor(t,e){this.xAxis=t;this.yAxis=e;for(let i of t)this.beforeXRanges.push({min:i.effectiveMinimum,max:i.effectiveMaximum});for(let i of e)this.beforeYRanges.push({min:i.effectiveMinimum,max:i.effectiveMaximum})}beforeXRanges=[];beforeYRanges=[];afterXRanges=[];afterYRanges=[];saveState(){for(let t of this.xAxis)this.afterXRanges.push({min:t.effectiveMinimum,max:t.effectiveMaximum});for(let t of this.yAxis)this.afterYRanges.push({min:t.effectiveMinimum,max:t.effectiveMaximum})}undo(){for(let t=0;t<this.xAxis.length;t++){let e=this.xAxis[t],i=this.beforeXRanges[t];e.effectiveMinimum=i.min,e.effectiveMaximum=i.max}for(let t=0;t<this.yAxis.length;t++){let e=this.yAxis[t],i=this.beforeYRanges[t];e.effectiveMinimum=i.min,e.effectiveMaximum=i.max}}redo(){for(let t=0;t<this.xAxis.length;t++){let e=this.xAxis[t],i=this.afterXRanges[t];e.effectiveMinimum=i.min,e.effectiveMaximum=i.max}for(let t=0;t<this.yAxis.length;t++){let e=this.yAxis[t],i=this.afterYRanges[t];e.effectiveMinimum=i.min,e.effectiveMaximum=i.max}}},sr=class{undoStack=[];redoStack=[];canUndo(){return this.undoStack.length>0}canRedo(){return this.redoStack.length>0}add(t){this.undoStack.push(t),this.redoStack.length=0}undo(){let t=this.undoStack.pop();t&&(t.undo(),this.redoStack.push(t))}redo(){let t=this.redoStack.pop();t&&(t.redo(),this.undoStack.push(t))}};var or=class{constructor(t,e){this.widget=e;this.id=t}id;cursor;selection;grabStart;prevGrabEvent;grabZoomCommand;tooltip(){return this.widget.tooltip}mouseDown(t){let{widget:e}=this;switch(e.toolbar?.currentTool){case"rubberband-zoom":case"horizontal-zoom":case"vertical-zoom":this.grabStart=t;break;case"panning":this.grabZoomCommand=new ct(e.getXAxes(),e.getYAxes());break}}grab(t){switch(this.widget.toolbar?.currentTool){case"rubberband-zoom":case"horizontal-zoom":case"vertical-zoom":this.grabStart&&(this.selection={...this.grabStart.point,width:t.dx,height:t.dy},this.widget.requestRepaint());break;case"panning":this.pan(t),this.prevGrabEvent=t,this.widget.requestRepaint();break}}grabEnd(){let{grabZoomCommand:t,selection:e,widget:i}=this;switch(i.toolbar?.currentTool){case"rubberband-zoom":if(e){let r=new ct(i.getXAxes(),i.getYAxes());this.rangeZoomXAxes(e),this.rangeZoomYAxes(e),r.saveState(),i.toolbar.addCommand(r)}break;case"horizontal-zoom":if(e){let r=new ct(i.getXAxes(),i.getYAxes());this.rangeZoomXAxes(e),r.saveState(),i.toolbar.addCommand(r)}break;case"vertical-zoom":if(e){let r=new ct(i.getXAxes(),i.getYAxes());this.rangeZoomYAxes(e),r.saveState(),i.toolbar.addCommand(r)}break;case"panning":t&&(t.saveState(),i.toolbar.addCommand(t));break}this.selection=void 0,this.prevGrabEvent=void 0,this.grabZoomCommand=void 0,this.widget.requestRepaint()}click(t){let{widget:e}=this;switch(e.toolbar?.currentTool){case"zoom-in":let i=new ct(e.getXAxes(),e.getYAxes());for(let s of e.getAxes()){let o=s.isHorizontal()?t.point.x:t.point.y,n=s.linearScale.getPositionValue(o);s.applyZoom(n,.1)}i.saveState(),e.toolbar.addCommand(i);break;case"zoom-out":let r=new ct(e.getXAxes(),e.getYAxes());for(let s of e.getAxes()){let o=s.isHorizontal()?t.point.x:t.point.y,n=s.linearScale.getPositionValue(o);s.applyZoom(n,-.1)}r.saveState(),e.toolbar.addCommand(r);break}}rangeZoomXAxes(t){for(let e of this.widget.getXAxes()){let i=e.linearScale.getPositionValue(t.x),r=e.linearScale.getPositionValue(t.x+t.width);if(i>r){let o=i;i=r,r=o}let s=e.linearScale.getMinMax();i=Math.max(s.start,i),r=Math.min(s.stop,r),e.effectiveMinimum=i,e.effectiveMaximum=r}}rangeZoomYAxes(t){for(let e of this.widget.getYAxes()){let i=e.linearScale.getPositionValue(t.y),r=e.linearScale.getPositionValue(t.y+t.height);if(i>r){let o=i;i=r,r=o}let s=e.linearScale.getMinMax();i=Math.max(s.start,i),r=Math.min(s.stop,r),e.effectiveMinimum=i,e.effectiveMaximum=r}}pan(t){let{prevGrabEvent:e,widget:i}=this;if(e){let r=e.dx-t.dx;if(r!==0)for(let o of i.getXAxes()){let n=o.linearScale,a=n.getMinMax(),l=n.getValuePosition(a.start)+r,c=n.getValuePosition(a.stop)+r;o.effectiveMinimum=n.getPositionValue(l),o.effectiveMaximum=n.getPositionValue(c)}let s=e.dy-t.dy;if(s!==0)for(let o of i.getYAxes()){let n=o.linearScale,a=n.getMinMax(),l=n.getValuePosition(a.start)+s,c=n.getValuePosition(a.stop)+s;o.effectiveMinimum=n.getPositionValue(l),o.effectiveMaximum=n.getPositionValue(c)}}}};var Hr=class{pointer=0;samples=[];constructor(t){this.samples=Array(t).fill(void 0)}push(t,e){this.samples[this.pointer]={x:t,y:e},this.pointer=(this.pointer+1)%this.samples.length}clear(){this.samples.fill(void 0),this.pointer=0}isFull(){let t=(this.pointer+1)%this.samples.length;return this.samples[t]!==void 0}isEmpty(){return this.tail()===void 0}tail(){return this.pointer===0?this.samples[this.samples.length-1]:this.samples[this.pointer-1]}snapshot(t=!1){if(t)return this.samples.filter(i=>i!==void 0).sort((i,r)=>i.x-r.x);{let e=this.samples.slice(this.pointer).filter(r=>r!==void 0),i=this.samples.slice(0,this.pointer).filter(r=>r!==void 0);return e.concat(i)}}},nr=class{constructor(t,e,i,r,s,o){this.bufferSize=t;this.plotMode=e;this.updateMode=i;this.concatenateData=r;this.chronological=s;this.historicalDataProvider=o;this.traceData=new Hr(t)}traceData;x=0;xPending=!1;y=0;yTimestamp=0;yPending=!1;xArray=[];xArrayPending=!1;yArray=[];yArrayPending=!1;clear(){this.traceData.clear(),this.x=0,this.xPending=!1,this.y=0,this.yPending=!1,this.yTimestamp=0,this.xArray=[],this.xArrayPending=!1,this.yArray=[],this.yArrayPending=!1}snapshot(){return this.historicalDataProvider?this.historicalDataProvider.getSamples():this.traceData.snapshot()}updateX(t){this.x=t,this.xPending=!0,this.maybeAddPoint()}updateY(t,e){this.y=t,this.yTimestamp=e,this.yPending=!0,this.maybeAddPoint()}updateXArray(t){this.xArray=t,this.xArrayPending=!0,this.maybeAddArray()}updateYArray(t){this.yArray=t,this.yArrayPending=!0,this.maybeAddArray()}maybeAddPoint(){if(this.plotMode===1&&this.traceData.isFull())return;let{xPending:t,yPending:e,chronological:i,updateMode:r}=this;r===0?(i&&e||!i&&(t||e))&&this.addPoint():r===1?(i&&e||!i&&t&&e)&&this.addPoint():r===2?(i&&e||!i&&t)&&this.addPoint():r===3&&this.yPending&&this.addPoint()}maybeAddArray(){if(this.plotMode===1&&this.traceData.isFull())return;let{xArrayPending:t,yArrayPending:e,chronological:i,updateMode:r}=this;r===0?(i&&e||!i&&(t||e))&&this.addArray():r===1?(i&&e||!i&&t&&e)&&this.addArray():r===2?(i&&e||!i&&t)&&this.addArray():r===3&&this.yArrayPending&&this.addArray()}addPoint(){this.concatenateData||this.traceData.clear();let t=this.x;if(this.chronological)if(this.updateMode===5)t=new Date().getTime();else if(this.yTimestamp!==void 0)t=this.yTimestamp;else{let e=this.traceData.tail();t=e?e.x+1:0}this.traceData.push(t,this.y),this.xPending=!1,this.yPending=!1}addArray(){this.concatenateData||this.traceData.clear();let{xArray:t,yArray:e}=this;if(this.chronological)if(t=Array(e.length),this.traceData.isEmpty())for(let s=0;s<e.length;s++)t[s]=s;else{let s=this.traceData.tail();for(let o=1;o<e.length;o++)t[o-1]=s.x+o}let i=Math.min(t.length,e.length),r=Math.min(i,this.bufferSize);for(let s=0;s<r;s++)this.traceData.push(t[s],e[s]);this.xArrayPending=!1,this.yArrayPending=!1}};var ar=class{constructor(t,e){this.widget=t;this.i=e}traceData;historicalDataProvider;xPVInstance;yPVInstance;xPVListener=()=>{let t=this.xPVInstance;if(t)if(Array.isArray(t.value))this.traceData?.updateXArray(t.value);else{let e=t.toNumber();e!=null&&this.traceData?.updateX(e)}};yPVListener=()=>{let t=this.yPVInstance;if(t)if(Array.isArray(t.value))this.traceData?.updateYArray(t.value);else{let e=this.widget.getAxis(this.xAxisIndex),i=t.toNumber();if(i!=null)if(e.isDateEnabled()){let r=(t.time||new Date).getTime();this.traceData?.updateY(i,r)}else this.traceData?.updateY(i)}};init(){let{bufferSize:t,plotMode:e,updateMode:i,concatenateData:r,widget:s}=this,o=!this.xPV,{pvEngine:n}=s.display;this.historicalDataProvider=void 0,o&&this.yPV&&(this.historicalDataProvider=n.createHistoricalDataProvider(this.yPV,s)||void 0),this.traceData=new nr(t,e,i,r,o,this.historicalDataProvider),this.xPV&&(this.xPVInstance=n.createPV(this.xPV),this.xPVInstance.addListener(this.xPVListener)),this.yPV&&(this.yPVInstance=n.createPV(this.yPV),this.yPVInstance.addListener(this.yPVListener)),s.addPropertyListener(`trace_${this.i}_x_pv`,()=>{let a=n.createPV(this.xPV);a!==this.xPVInstance&&(this.xPVInstance?.removeListener(this.xPVListener),this.xPVInstance=a,this.xPVInstance.addListener(this.xPVListener))}),s.addPropertyListener(`trace_${this.i}_y_pv`,()=>{let a=n.createPV(this.yPV);a!==this.yPVInstance&&(this.yPVInstance?.removeListener(this.yPVListener),this.yPVInstance=a,this.yPVInstance.addListener(this.yPVListener))})}snapshot(){return this.traceData?.snapshot()||[]}drawTrace(t,e){let{lineWidth:i}=this;if(this.traceType===0)t.strokePath({path:v.fromPoints(e),color:this.traceColor,lineWidth:i});else if(this.traceType===1)t.strokePath({path:v.fromPoints(e),color:this.traceColor,lineWidth:i,dash:[6*this.scale,2*this.scale]});else if(this.traceType!==2){if(this.traceType===3){let s=this.widget.getAxis(this.yAxisIndex).linearScale.getValuePosition(0);for(let o of e)o.y!==null&&t.strokePath({path:new v(o.x,o.y).lineTo(o.x,s),lineWidth:i,color:this.traceColor,opacity:100/255})}else if(this.traceType===4||this.traceType===5){let s=this.widget.getAxis(this.yAxisIndex).linearScale.getValuePosition(0);for(let o=1;o<e.length;o++){let n=e[o-1],a=e[o];n.y!==null&&a.y!==null&&t.fillPath({path:new v(n.x,n.y).lineTo(n.x,s).lineTo(a.x,s).lineTo(a.x,a.y),color:this.traceColor,opacity:100/255})}this.traceType===5&&t.strokePath({path:v.fromPoints(e),color:this.traceColor,lineWidth:i})}else if(this.traceType===6)for(let r=1;r<e.length;r++){let s=e[r-1],o=e[r];s.y!==null&&o.y!==null&&t.strokePath({path:new v(s.x,s.y).lineTo(s.x,o.y).lineTo(o.x,o.y),color:this.traceColor,lineWidth:i})}else if(this.traceType===7)for(let r=1;r<e.length;r++){let s=e[r-1],o=e[r];s.y!==null&&o.y!==null&&t.strokePath({path:new v(s.x,s.y).lineTo(o.x,s.y).lineTo(o.x,o.y),color:this.traceColor,lineWidth:i})}else if(this.traceType===8){let{scale:r}=this;t.strokePath({path:v.fromPoints(e),color:this.traceColor,lineWidth:i,dash:[6*r,2*r,2*r,2*r]})}else if(this.traceType===9){let{scale:r}=this;t.strokePath({path:v.fromPoints(e),color:this.traceColor,lineWidth:i,dash:[6*r,2*r,2*r,2*r,2*r,2*r]})}else if(this.traceType===10){let{scale:r}=this;t.strokePath({path:v.fromPoints(e),color:this.traceColor,lineWidth:i,dash:[2*r,2*r]})}}}drawPoint(t,e){t.ctx.fillStyle=this.traceColor.toString(),t.ctx.strokeStyle=this.traceColor.toString(),t.ctx.lineWidth=1*this.scale;let i=this.pointSize/2,r=e.x,s=e.y;switch(this.pointStyle){case 1:t.ctx.beginPath(),t.ctx.ellipse(r,s,i,i,0,0,2*Math.PI),t.ctx.fill();break;case 2:t.ctx.beginPath(),t.ctx.ellipse(r,s,i,i,0,0,2*Math.PI),t.ctx.stroke();break;case 3:t.ctx.beginPath(),t.ctx.ellipse(r,s,i,i,0,0,2*Math.PI),t.ctx.fill();break;case 4:t.ctx.lineWidth=1*this.scale,t.ctx.beginPath(),t.ctx.moveTo(r-i,s+i),t.ctx.lineTo(r,s-i),t.ctx.lineTo(r+i,s+i),t.ctx.closePath(),t.ctx.stroke();break;case 5:t.ctx.lineWidth=1*this.scale,t.ctx.beginPath(),t.ctx.moveTo(r-i,s+i),t.ctx.lineTo(r,s-i),t.ctx.lineTo(r+i,s+i),t.ctx.closePath(),t.ctx.fill();break;case 6:t.ctx.strokeRect(r-i,s-i,2*i,2*i);break;case 7:t.ctx.fillRect(r-i,s-i,2*i,2*i);break;case 8:t.ctx.beginPath(),t.ctx.moveTo(r-i,s),t.ctx.lineTo(r,s-i),t.ctx.lineTo(r+i,s),t.ctx.lineTo(r,s+i),t.ctx.closePath(),t.ctx.stroke();break;case 9:t.ctx.beginPath(),t.ctx.moveTo(r-i,s),t.ctx.lineTo(r,s-i),t.ctx.lineTo(r+i,s),t.ctx.lineTo(r,s+i),t.ctx.closePath(),t.ctx.stroke();break;case 10:t.ctx.beginPath(),t.ctx.moveTo(r-i,s-i),t.ctx.lineTo(r+i,s+i),t.ctx.moveTo(r+i,s-i),t.ctx.lineTo(r-i,s+i),t.ctx.stroke();break;case 11:t.ctx.beginPath(),t.ctx.moveTo(r-i,s),t.ctx.lineTo(r+i,s),t.ctx.moveTo(r,s-i),t.ctx.lineTo(r,s+i),t.ctx.stroke();break;case 12:t.ctx.beginPath(),t.ctx.moveTo(r,s-i),t.ctx.lineTo(r,s+i),t.ctx.stroke()}}clearData(){this.traceData?.clear()}get scale(){return this.widget.scale}getValue(t){return this.widget.properties.getValue(`trace_${this.i}_${t}`)}get antiAlias(){return this.getValue("anti_alias")}get bufferSize(){return this.getValue("buffer_size")}get concatenateData(){return this.getValue("concatenate_data")}get lineWidth(){return this.scale*this.getValue("line_width")}get name(){return this.getValue("name")}get plotMode(){return this.getValue("plot_mode")}get pointSize(){return this.scale*this.getValue("point_size")}get pointStyle(){return this.getValue("point_style")}get traceColor(){return this.getValue("trace_color")}get traceType(){return this.getValue("trace_type")}get updateDelay(){return this.getValue("update_delay")}get updateMode(){return this.getValue("update_mode")}get visible(){return this.getValue("visible")}get xAxisIndex(){return this.getValue("x_axis_index")}get xPV(){return this.getValue("x_pv")}get yAxisIndex(){return this.getValue("y_axis_index")}get yPV(){return this.getValue("y_pv")}destroy(){this.historicalDataProvider?.disconnect()}};var xg=new g(236,236,236),wg=new g(130,130,130),Dr=class{constructor(t,e,i,r,s){this.imageFile=e;this.disabledImageFile=i;this.action=s;this.loadPromise=new Promise((o,n)=>{this.imageElement.onload=()=>o()}),this.disabledLoadPromise=new Promise((o,n)=>{this.disabledImageElement.onload=()=>o()}),this.region={id:`${t.xyGraph.wuid}-${e}`,mouseDown:()=>{this.toggleButton||(this.pushed=!0,t.xyGraph.requestRepaint())},mouseOut:()=>{this.toggleButton||(this.pushed=!1),t.xyGraph.requestRepaint()},mouseUp:()=>{this.toggleButton||(this.pushed=!1,t.xyGraph.requestRepaint())},click:()=>{this.toggleButton&&(this.pushed=!this.pushed,this.toolButton&&t.toggleTool(this)),this.action(),t.updateState()},tooltip:()=>r}}imageElement=new Image;disabledImageElement=new Image;loadPromise;disabledLoadPromise;toggleButton=!1;toolButton=!1;pushed=!1;disabled=!1;region;loadImage(t){this.imageElement.src=t+this.imageFile,this.disabledImageElement.src=t+this.disabledImageFile}},lr=class{constructor(t){this.xyGraph=t;this.showLegend=this.createToggleButton("ShowLegend.png","Show Legend",()=>{t.properties.setValue("show_legend",this.showLegend.pushed)}),this.showLegend.pushed=t.showLegend,t.addPropertyListener("show_legend",i=>{this.showLegend.pushed=i}),this.autoScale=this.createButton("AutoScale.png","AutoScale.png","Perform Auto Scale",()=>{let i=new ct(t.getXAxes(),t.getYAxes());t.performAutoScale(),i.saveState(),this.addCommand(i)}),this.rubberbandZoom=this.createToolButton("RubberbandZoom.png","Rubberband Zoom",()=>{this.rubberbandZoom.pushed?(this.currentTool="rubberband-zoom",t.setCursor("crosshair"),t.autoScaleAllowed=!1):(this.currentTool="default",t.setCursor(void 0),t.autoScaleAllowed=!0)}),this.horizontalZoom=this.createToolButton("HorizontalZoom.png","Horizontal Zoom",()=>{this.horizontalZoom.pushed?(this.currentTool="horizontal-zoom",t.setCursor("col-resize"),t.autoScaleAllowed=!1):(this.currentTool="default",t.setCursor(void 0),t.autoScaleAllowed=!0)}),this.verticalZoom=this.createToolButton("VerticalZoom.png","Vertical Zoom",()=>{this.verticalZoom.pushed?(this.currentTool="vertical-zoom",t.setCursor("row-resize"),t.autoScaleAllowed=!1):(this.currentTool="default",t.setCursor(void 0),t.autoScaleAllowed=!0)}),this.zoomIn=this.createToolButton("ZoomIn.png","Zoom In",()=>{this.zoomIn.pushed?(this.currentTool="zoom-in",t.setCursor("zoom-in"),t.autoScaleAllowed=!1):(this.currentTool="default",t.setCursor(void 0),t.autoScaleAllowed=!0)}),this.zoomOut=this.createToolButton("ZoomOut.png","Zoom Out",()=>{this.zoomOut.pushed?(this.currentTool="zoom-out",t.setCursor("zoom-out"),t.autoScaleAllowed=!1):(this.currentTool="default",t.setCursor(void 0),t.autoScaleAllowed=!0)}),this.panning=this.createToolButton("Panning.png","Panning",()=>{this.panning.pushed?(this.currentTool="panning",t.setCursor("grab"),t.autoScaleAllowed=!1):(this.currentTool="default",t.setCursor(void 0),t.autoScaleAllowed=!0)}),this.mouseArrow=this.createToolButton("MouseArrow.png","None",()=>{this.currentTool="default",t.setCursor(void 0),t.autoScaleAllowed=!0}),this.undo=this.createButton("Undo.png","Undo_Gray.png","Undo",()=>{this.commandBuffer.undo()}),this.undo.disabled=!0,this.redo=this.createButton("Redo.png","Redo_Gray.png","Redo",()=>{this.commandBuffer.redo()}),this.redo.disabled=!0,this.camera=this.createButton("camera.png","camera.png","Save Snapshot to PNG File",()=>{let i=document.createElement("a");try{i.href=t.toDataURL(),i.download=`${t.name}_export.png`,document.body.appendChild(i),i.click()}finally{document.body.removeChild(i)}}),this.toggleTool(this.mouseArrow);let e=this.buttons.map(i=>i.loadPromise).concat(this.buttons.map(i=>i.disabledLoadPromise));Promise.all(e).finally(()=>{this.imagesLoaded=!0,t.requestRepaint()});for(let i of this.buttons)i.loadImage(t.display.imagesPrefix)}buttons=[];showLegend;autoScale;rubberbandZoom;horizontalZoom;verticalZoom;zoomIn;zoomOut;panning;mouseArrow;undo;redo;camera;imagesLoaded=!1;currentTool="default";commandBuffer=new sr;updateState(){this.undo.disabled=!this.commandBuffer.canUndo(),this.redo.disabled=!this.commandBuffer.canRedo(),this.xyGraph.requestRepaint()}addCommand(t){this.commandBuffer.add(t),this.updateState()}toggleTool(t){let e=t.pushed;for(let i of this.buttons)i.toolButton&&(i.pushed=!1);e?t.pushed=!0:this.mouseArrow.pushed=!0,this.xyGraph.requestRepaint()}createToolButton(t,e,i){let r=this.createToggleButton(t,e,i);return r.toolButton=!0,r}createToggleButton(t,e,i){let r=this.createButton(t,t,e,i);return r.toggleButton=!0,r}createButton(t,e,i,r){let s=new Dr(this,t,e,i,r);return this.buttons.push(s),s}draw(t,e){let{buttonSize:i}=this,r={x:e.x,y:e.y};return this.drawButton(t,r.x,r.y,this.showLegend),r.x+=i,this.maybeWrap(r,e),this.drawButton(t,r.x,r.y,this.autoScale),r.x+=i,this.maybeWrap(r,e,i/2),this.drawSeparator(t,r.x,r.y),r.x+=i/2,this.maybeWrap(r,e),this.drawButton(t,r.x,r.y,this.rubberbandZoom),r.x+=i,this.maybeWrap(r,e),this.drawButton(t,r.x,r.y,this.horizontalZoom),r.x+=i,this.maybeWrap(r,e),this.drawButton(t,r.x,r.y,this.verticalZoom),r.x+=i,this.maybeWrap(r,e),this.drawButton(t,r.x,r.y,this.zoomIn),r.x+=i,this.maybeWrap(r,e),this.drawButton(t,r.x,r.y,this.zoomOut),r.x+=i,this.maybeWrap(r,e),this.drawButton(t,r.x,r.y,this.panning),r.x+=i,this.maybeWrap(r,e),this.drawButton(t,r.x,r.y,this.mouseArrow),r.x+=i,this.maybeWrap(r,e,i/2),this.drawSeparator(t,r.x,r.y),r.x+=i/2,this.maybeWrap(r,e),this.drawButton(t,r.x,r.y,this.undo),r.x+=i,this.maybeWrap(r,e),this.drawButton(t,r.x,r.y,this.redo),r.x+=i,this.maybeWrap(r,e,i/2),this.drawSeparator(t,r.x,r.y),r.x+=i/2,this.maybeWrap(r,e),this.drawButton(t,r.x,r.y,this.camera),r.x+=i,r.y+i-e.y}maybeWrap(t,e,i){i=i??this.buttonSize,t.x+i>e.x+e.width&&(t.x=e.x,t.y+=this.buttonSize)}drawSeparator(t,e,i){let{buttonSize:r}=this,s=1*this.scale,o=Math.round(e+r/4)-s/2;t.strokePath({path:new v(o,i).lineTo(o,i+r),color:wg,lineWidth:s})}drawButton(t,e,i,r){let{buttonSize:s,scale:o}=this;t.fillRect({x:e,y:i,width:s,height:s,color:xg}),this.xyGraph.enabled&&!r.disabled&&t.addHitRegion(r.region).addRect(e,i,s,s);let n=1*o,a=Math.round(i+n/2)-.5,l=Math.round(e+n/2)-.5,c=Math.round(i+s-n+n/2)-.5,h=Math.round(e+s-n+n/2)-.5;if(t.strokePath({color:r.pushed?g.WHITE:g.BLACK,path:new v(h,c).lineTo(h,a).moveTo(h,c).lineTo(l,c),lineWidth:n}),t.strokePath({color:r.pushed?g.BLACK:g.WHITE,path:new v(l,a).lineTo(h-n,a).moveTo(l,a).lineTo(l,c-n),lineWidth:n}),this.imagesLoaded){let u=r.disabled?r.disabledImageElement:r.imageElement,f=u.naturalHeight*o,_=u.naturalWidth*o,b=Math.round(e+(s-_)/2),T=Math.round(i+(s-f)/2);t.ctx.drawImage(u,b,T,_,f)}}get scale(){return this.xyGraph.scale}get buttonSize(){return 25*this.scale}};var Nr="axis_count",xd="plot_area_background_color",wd="show_legend",yd="show_plot_area_border",bd="show_toolbar",Pd="title",vd="title_font",Fr="trace_count",_d="transparent",hr=class extends V{toolbar;plotAreaRegion;axes=[];traces=[];autoScaleAllowed=!0;constructor(t,e){super(t,e),this.properties.add(new P(Nr)),this.properties.add(new S(xd)),this.properties.add(new w(wd)),this.properties.add(new w(yd)),this.properties.add(new w(bd)),this.properties.add(new R(Pd)),this.properties.add(new k(vd)),this.properties.add(new P(Fr)),this.properties.add(new w(_d)),this.properties.addGenerator(()=>{let i=[];this.axes=[];let r=this.properties.getValue(Nr);for(let o=0;o<r;o++)this.axes.push(new rr(this,o)),i.push(new w(`axis_${o}_auto_scale`),new B(`axis_${o}_auto_scale_treshold`),new S(`axis_${o}_axis_color`),new R(`axis_${o}_axis_title`),new w(`axis_${o}_dash_grid_line`),new S(`axis_${o}_grid_color`),new w(`axis_${o}_log_scale`),new B(`axis_${o}_maximum`),new B(`axis_${o}_minimum`),new k(`axis_${o}_scale_font`),new R(`axis_${o}_scale_format`),new w(`axis_${o}_show_grid`),new P(`axis_${o}_time_format`),new k(`axis_${o}_title_font`),new w(`axis_${o}_visible`)),o>1&&i.push(new w(`axis_${o}_left_bottom_side`),new w(`axis_${o}_y_axis`));this.traces=[];let s=this.properties.getValue(Fr);for(let o=0;o<s;o++)this.traces.push(new ar(this,o)),i.push(new w(`trace_${o}_anti_alias`),new P(`trace_${o}_buffer_size`),new w(`trace_${o}_concatenate_data`),new P(`trace_${o}_line_width`),new R(`trace_${o}_name`),new P(`trace_${o}_plot_mode`),new P(`trace_${o}_point_size`),new P(`trace_${o}_point_style`),new S(`trace_${o}_trace_color`),new P(`trace_${o}_trace_type`),new P(`trace_${o}_update_delay`),new P(`trace_${o}_update_mode`),new w(`trace_${o}_visible`),new P(`trace_${o}_x_axis_index`),new R(`trace_${o}_x_pv`),new Pt(`trace_${o}_x_pv_value`,`trace_${o}_x_pv`),new P(`trace_${o}_y_axis_index`),new R(`trace_${o}_y_pv`),new Pt(`trace_${o}_y_pv_value`,`trace_${o}_y_pv`));return i})}init(){this.plotAreaRegion=new or(`${this.wuid}-plotarea`,this),this.traces.forEach(t=>t.init())}draw(t){let{scale:e}=this,i=this.area;if(this.borderAlarmSensitive&&(i=D(this.area,2*e)),!this.transparent){let o=this.alarmSensitiveBackgroundColor;t.fillRect({...i,color:o})}this.showToolbar&&this.drawToolbar(t,i),this.title&&this.drawTitle(t,i);for(let o of this.axes){if(o.autoScale&&this.autoScaleAllowed){let l={start:o.minimum,stop:o.maximum},c=this.calculateAutoscaledRange(o,l);c&&(o.effectiveMinimum=c.start,o.effectiveMaximum=c.stop)}let n=o.effectiveMinimum,a=o.effectiveMaximum;o.linearScale=new et(this.display.formatter,e,o.scaleFont,n,a,o.logScale,50*e,o.axisColor,!0,o.visible),o.linearScale.scaleFormat=o.scaleFormat,o.linearScale.timeFormat=o.timeFormat}this.showLegend&&this.drawLegend(t,i),t.addHitRegion(this.plotAreaRegion).addRect(i.x,i.y,i.width,i.height);let r=this.drawAxes(t,i);this.drawPlotArea(t,r);let s=this.plotAreaRegion?.selection;s&&this.drawZoomSelection(t,r,ws(r,s))}drawToolbar(t,e){this.toolbar||(this.toolbar=new lr(this));let i=3*this.scale,r=D(e,i),s=this.toolbar.draw(t,r);e.y+=i+s+i,e.height-=i+s+i}drawTitle(t,e){let i=t.measureText(this.title,this.titleFont).height;t.fillText({x:e.x+e.width/2,y:e.y+i/2,align:"center",baseline:"middle",color:this.alarmSensitiveForegroundColor,font:this.titleFont,text:this.title});let r=2*this.scale;e.y+=i+r,e.height-=i+r}drawAxes(t,e){let{scale:i}=this,r=5*i,s={...e},o=0,n=0;for(let h of this.getXAxes())if(h.visible){let u=0;h.axisTitle&&(u=r+t.measureText(h.axisTitle,h.titleFont).height),o+=u,n+=u+h.linearScale.measureHorizontalHeight(t)}let a=0,l=0;for(let h of this.getYAxes().reverse()){let u=h.linearScale;if(h.visible){let f=u.calculateMargin(t,!1),_=s.height-n+(n>0?f:0),b=0;h.axisTitle&&(b=t.measureText(h.axisTitle,h.titleFont).height,t.ctx.save(),t.ctx.translate(s.x+r+b/2,e.y+_/2),t.ctx.rotate(-Math.PI/2),t.fillText({x:0,y:0,align:"center",baseline:"middle",font:h.titleFont,color:h.axisColor,text:h.axisTitle}),t.ctx.restore(),b+=r);let T=b+u.drawVertical(t,s.x+b,e.y,_,!0,!1);s.x+=T,s.width-=T,a+=T;let W=u.margin;l=l===0?W:Math.min(l,W);let O=i*1,L=Math.round(s.x)-O/2,M=Math.round(e.y+f)-O/2;t.strokePath({path:new v(L,M).lineTo(L,M+_-2*f),color:h.axisColor,opacity:100/255,lineWidth:O})}else{let f=s.height-n;u.setDimensions(0,e.y,f,!1)}}let c=0;for(let h of this.getXAxes().reverse()){let u=h.linearScale;if(h.visible){let f=u.calculateMargin(t,!0),_=a-f,b=0;if(h.axisTitle){b=t.measureText(h.axisTitle,h.titleFont).height;let N=e.x+a+(e.width-a)/2;t.fillText({x:N,y:s.y+s.height-b/2,align:"center",baseline:"middle",font:h.titleFont,color:h.axisColor,text:h.axisTitle}),b+=r}let T=b+u.drawHorizontal(t,e.x+_,s.y+s.height-b,e.width-_);s.height-=T;let W=u.margin;c=c===0?W:Math.min(c,W);let O=i*1,L=Math.round(e.x+_+f)-O/2,M=Math.round(s.y+s.height)-O/2;t.strokePath({path:new v(L,M).lineTo(L+s.width-f,M),color:h.axisColor,opacity:100/255,lineWidth:O})}else{let f=e.x+a,_=e.width-a;u.setDimensions(f,0,_,!0)}}return s.y+=l,s.width-=c,n>0?s.height-=l:s.height-=2*l,s}drawPlotArea(t,e){let{scale:i}=this,r=1*i;if(this.transparent||t.fillRect({...e,color:this.plotAreaBackgroundColor}),this.showPlotAreaBorder){let{x:s,y:o,width:n,height:a}=D(e,r/2);t.strokePath({path:new v(s,o).lineTo(s+n,o).lineTo(s+n,o+a),color:g.BLACK,lineWidth:r})}for(let s of this.axes.filter(o=>o.visible&&o.showGrid)){let o=s.linearScale;if(s.isHorizontal())for(let n of o.getGridPositions()){let a=Math.round(o.getX()+n)-r/2;t.strokePath({path:new v(a,e.y).lineTo(a,e.y+e.height),color:s.gridColor,lineWidth:r,dash:s.dashGridLine?[6*i,2*i]:void 0})}else for(let n of o.getGridPositions()){let a=Math.round(o.getY()+n)-r/2;t.strokePath({path:new v(e.x,a).lineTo(e.x+e.width,a),color:s.gridColor,lineWidth:r,dash:s.dashGridLine?[6*i,2*i]:void 0})}}t.ctx.save(),t.ctx.beginPath(),t.ctx.rect(e.x,e.y,e.width,e.height),t.ctx.clip();for(let s of this.traces.filter(o=>o.visible)){let o=this.getAxis(s.xAxisIndex).linearScale,n=this.getAxis(s.yAxisIndex).linearScale,a=[];for(let l of s.snapshot()){let c=o.getValuePosition(l.x),h=l.y!==null?n.getValuePosition(l.y):null;a.push({x:c,y:h})}if(a.length){s.drawTrace(t,a);for(let l of a)l.y!==null&&s.drawPoint(t,l)}}t.ctx.restore()}drawZoomSelection(t,e,i){let{scale:r}=this;switch(this.toolbar?.currentTool){case"rubberband-zoom":t.strokeRect({...i,color:g.BLACK,lineWidth:1*r});break;case"horizontal-zoom":let s=i;s.y=e.y,s.height=e.height,t.strokeRect({..._r(s),color:g.BLACK,lineWidth:1*r});break;case"vertical-zoom":let o=i;o.x=e.x,o.width=e.width,t.strokeRect({..._r(o),color:g.BLACK,lineWidth:1*r});break}}drawLegend(t,e){let{scale:i}=this,r=25*i,s=2*i,o=5*i,n=q.ARIAL_10.scale(i);for(let a of this.getYAxes()){let l=this.traces.filter(O=>O.visible&&O.yAxisIndex===a.index),c=[],h=[],u=0,f=0;for(let O of l){let L=r+s+o;O.name&&(L+=t.measureText(O.name,n).width),u+L<e.width?(h.push(O),u+=L):(c.push(h),L=Math.max(L,u),h=[O],u=L)}if(h.length&&(c.push(h),f=Math.max(f,u)),!c.length)continue;let _=r*c.length,b={x:Math.round(e.x+(e.width-f)/2),y:Math.round(e.y+e.height-_),width:f,height:_};e.height-=b.height,this.transparent||t.fillRect({...b,color:this.plotAreaBackgroundColor}),t.strokeRect({...D(b,1*i/2),color:a.axisColor});let T=b.x,W=b.y;for(let O=0;O<c.length;O++){let L=c[O],M=W+O*r,N=M+r/2;for(let F of L){let X=F.pointSize>Math.floor((r-o)/2)?Math.floor(r-o):F.pointSize;switch(F.traceType){case 3:let j=T+r/2;t.strokePath({path:new v(j,M+X).lineTo(j,M+r),lineWidth:F.lineWidth,color:F.traceColor,opacity:100/255}),F.drawPoint(t,{x:j,y:M+X});break;case 4:case 5:let pt=[{x:T,y:M+r/2},{x:T+r/2,y:M+X},{x:T+r,y:M+r/2},{x:T+r,y:M+r},{x:T,y:M+r}];t.fillPath({path:v.fromPoints(pt),color:F.traceColor,opacity:100/255}),F.traceType===5&&t.strokePath({path:v.fromPoints(pt.slice(0,3)),color:F.traceColor,lineWidth:1*i}),F.drawPoint(t,{x:T+r/2,y:M+X});break;default:F.drawTrace(t,[{x:T,y:N},{x:T+r,y:N}]),F.drawPoint(t,{x:T+r/2,y:N})}T+=r+s,F.name&&(t.fillText({x:T,y:N,align:"left",baseline:"middle",color:F.traceColor,font:n,text:F.name}),T+=t.measureText(F.name,n).width),T+=o}}}}setCursor(t){this.plotAreaRegion.cursor=t}calculateAutoscaledRange(t,e){let i,r,s=t.logScale;for(let o of this.traces)if(o.visible&&!(this.axes[o.xAxisIndex]!==t&&this.axes[o.yAxisIndex]!==t))for(let n of o.snapshot()){let a=t.isHorizontal()?n.x:n.y;a!==null&&((i===void 0||i>a)&&(!s||a>0)&&(i=a),(r===void 0||r<a)&&(!s||a>0)&&(r=a))}if(i!==void 0&&r!==void 0)return i===r?{start:Math.min(i,e.start),stop:Math.max(r,e.stop)}:{start:i,stop:r}}performAutoScale(){for(let t of this.axes)t.visible&&t.performAutoScale()}clearGraph(){for(let t of this.traces)t.clearData();this.requestRepaint()}getAxes(){return[...this.axes]}getXAxes(){return this.axes.filter(t=>t.isHorizontal())}getYAxes(){return this.axes.filter(t=>t.isVertical())}getAxis(t){return this.axes[t]}getTrace(t){return this.traces[t]}get axisCount(){return this.properties.getValue(Nr)}get plotAreaBackgroundColor(){return this.properties.getValue(xd)}get showLegend(){return this.properties.getValue(wd)}get showPlotAreaBorder(){return this.properties.getValue(yd)}get showToolbar(){return this.properties.getValue(bd)}get title(){return this.properties.getValue(Pd)}get titleFont(){return this.properties.getValue(vd).scale(this.scale)}get traceCount(){return this.properties.getValue(Fr)}get transparent(){return this.properties.getValue(_d)}destroy(){for(let t of this.traces)t.destroy()}};var cr=class extends gt{async parseNode(t){await super.parseNode(t);for(let e of t.getNodes("widget")){let i=e.getString("widget_type"),r=this.display.createWidget(i,this);r&&(await r.parseNode(e),this.widgets.push(r))}}beforeDrawBorder(t){this.transparent||t.fillRect({x:this.holderX,y:this.holderY,width:this.holderWidth,height:this.holderHeight,color:this.backgroundColor})}draw(t){let e=t.createChild(this.width,this.height);for(let i of this.widgets.filter(r=>r.visible))i.drawHolder(e),i.draw(e),i.drawDecoration(e);for(let i of this.widgets.filter(r=>r.visible))i.drawOverlay(e);t.copy(e,this.x,this.y)}};var Rd="minimum_tab_height",$r="active_tab",Td="horizontal_tabs",Gr="tab_count",Ur=class{constructor(t,e){this.widget=t;this.i=e;this.headerRegion={id:`${t.wuid}-header-${e}`,click:()=>{t.activeTab!==e&&(t.properties.setValue($r,e),t.requestRepaint())},cursor:"pointer"}}headerRegion;get scale(){return this.widget.scale}getValue(t){return this.widget.properties.getValue(`tab_${this.i}_${t}`)}get title(){return this.getValue("title")}get backgroundColor(){return this.getValue("background_color")}get foregroundColor(){return this.getValue("foreground_color")}get enabled(){return this.getValue("enabled")}get font(){return this.getValue("font").scale(this.scale)}},Ie=class extends gt{tabs=[];constructor(t,e){super(t,e),this.properties.add(new P(Rd)),this.properties.add(new P($r)),this.properties.add(new w(Td)),this.properties.add(new P(Gr)),this.properties.addGenerator(()=>{this.tabs=[];let i=this.properties.getValue(Gr),r=[];for(let s=0;s<i;s++)this.tabs.push(new Ur(this,s)),r.push(new R(`tab_${s}_title`),new S(`tab_${s}_background_color`),new S(`tab_${s}_foreground_color`),new w(`tab_${s}_enabled`),new k(`tab_${s}_font`));return r})}async parseNode(t){await super.parseNode(t);for(let e of t.getNodes("widget")){let i=e.getString("widget_type"),r=this.display.createWidget(i,this);r&&(await r.parseNode(e),this.widgets.push(r))}}draw(t){this.horizontalTabs?this.drawHorizontalTabs(t):this.drawVerticalTabs(t)}measureTabOffset(t){return this.horizontalTabs?{x:0,y:this.measureLabelHeight(t)}:{x:this.measureLabelWidth(t),y:0}}measureLabelHeight(t){let{scale:e}=this,i=1*e,r=this.minimumTabHeight;for(let s=0;s<this.tabs.length;s++){let o=this.tabs[s],a=t.measureText(o.title,o.font).height+i;a>r&&(r=a)}return r+this.margin}measureLabelWidth(t){let{scale:e}=this,i=1*e,r=this.minimumTabWidth;for(let s=0;s<this.tabs.length;s++){let o=this.tabs[s],a=t.measureText(o.title,o.font).width+i;a>r&&(r=a)}return r+this.margin}drawHorizontalTabs(t){let{margin:e,gap:i,scale:r}=this,s=this.measureLabelHeight(t),o=1*r,n=this.x;for(let a=0;a<this.tabs.length;a++){let l=this.tabs[a],c=t.measureText(l.title,l.font),h,u,f,_,b;this.activeTab===a?(h=n,u=this.y,f=c.width+o+e+i,_=s,b=l.backgroundColor):(h=n+i,u=this.y+2*r,f=c.width+o+e-i,_=s-2*r,b=this.darken(l.backgroundColor)),t.fillRect({x:h,y:u,width:f,height:_,color:b}),t.addHitRegion(l.headerRegion).addRect(h,u,f,_);let W=t.createLinearGradient(h,u,h,u+_);if(W.addColorStop(0,g.WHITE.toString()),W.addColorStop(1,g.WHITE.withAlpha(0).toString()),t.fillRect({x:h,y:u,width:f,height:_,gradient:W}),t.fillText({x:h+f/2,y:u+_/2,baseline:"middle",align:"center",font:l.font,color:l.foregroundColor,text:l.title}),n+=c.width+o+e-1*r,this.activeTab===a){let O=this.x,L=this.y+s,M=this.width,N=this.height-s;t.fillRect({x:O,y:L,width:M,height:N,color:l.backgroundColor});let F=this.widgets[a],X=t.createChild(M,N);F.drawHolder(X),F.draw(X),F.drawDecoration(X),F.drawOverlay(X),t.copy(X,O,L)}else this.widgets[a].hide()}}drawVerticalTabs(t){let{margin:e,gap:i,scale:r}=this,s=this.measureLabelWidth(t),o=1*r,n=this.y;for(let a=0;a<this.tabs.length;a++){let l=this.tabs[a],c=t.measureText(l.title,l.font),h=Math.max(c.height+o+o,this.minimumTabHeight),u,f,_,b,T;this.activeTab===a?(u=this.x,f=n,_=s,b=h+e+i,T=l.backgroundColor):(u=this.x+2*r,f=n+i,_=s-2*r,b=h+e-i,T=this.darken(l.backgroundColor)),t.fillRect({x:u,y:f,width:_,height:b,color:T}),t.addHitRegion(l.headerRegion).addRect(u,f,_,b);let O=t.createLinearGradient(u,f,u+_,f);if(O.addColorStop(0,g.WHITE.toString()),O.addColorStop(1,g.WHITE.withAlpha(0).toString()),t.fillRect({x:u,y:f,width:_,height:b,gradient:O}),t.fillText({x:u+_/2,y:f+b/2,baseline:"middle",align:"center",font:l.font,color:l.foregroundColor,text:l.title}),n+=h+e-1*r,this.activeTab===a){let L=this.x+s-1*r,M=this.y,N=this.width-s,F=this.height-1*r;t.fillRect({x:L,y:M,width:N,height:F,color:l.backgroundColor});let X=this.widgets[a],j=t.createChild(N,F);X.drawHolder(j),X.draw(j),X.drawDecoration(j),X.drawOverlay(j),t.copy(j,L,M)}else this.widgets[a].destroy()}}darken(t){let e=Math.max(0,t.red-30),i=Math.max(0,t.green-30),r=Math.max(0,t.blue-30);return new g(e,i,r)}get margin(){return this.scale*10}get gap(){return this.scale*2}get minimumTabWidth(){return this.scale*20}get minimumTabHeight(){return this.scale*this.properties.getValue(Rd)}get activeTab(){return this.properties.getValue($r)}get tabCount(){return this.properties.getValue(Gr)}get horizontalTabs(){return this.properties.getValue(Td)}};var pr=class{constructor(t){this.table=t}columnCount=0;cells=[];selectedRowIndex;dirty=!1;modifiedListeners=[];selectionChangedListeners=[];isEmpty(){return!this.cells.length}refresh(){this.dirty=!0}getCells(){return this.cells}getContent(){let t=[];for(let e of this.cells)t.push(e.map(i=>i.text||""));return t}setContent(t){this.cells.length=0;for(let e=0;e<t.length;e++)e===0&&(this.columnCount=t[e].length),this.cells.push(t[e].map(i=>({text:i})));this.dirty=!0}getColumnCount(){return this.columnCount}getRowCount(){return this.cells.length}setSelectedRowIndex(t){this.selectedRowIndex=t,this.selectionChangedListeners.forEach(e=>e()),this.dirty=!0}getSelection(){return this.selectedRowIndex===void 0?[]:[[...this.cells[this.selectedRowIndex].map(e=>e.text??null)]]}getCellText(t,e){let i=this.cells[t];return i?i[e]?.text??null:null}setColumnsCount(t){if(t<this.columnCount)for(let e of this.cells)e.length=t;if(t>this.columnCount){let e=t-this.columnCount;for(let i of this.cells)for(let r=0;r<e;r++)i.push({text:""})}this.columnCount=t,this.dirty=!0}addModifiedListener(t){this.modifiedListeners.push(t)}addSelectionChangedListener(t){this.selectionChangedListeners.push(t)}appendRow(){let t=[];for(let e=0;e<this.columnCount;e++)t[e]={text:""};return this.cells.push(t),this.dirty=!0,this.cells.length-1}deleteRow(t){this.cells.splice(t,1),this.dirty=!0}deleteColumn(t){for(let e of this.cells)e.splice(t,1);this.columnCount--,this.dirty=!0}insertRow(t){let e=[];for(let i=0;i<this.columnCount;i++)e.push({text:""});this.cells.splice(t,0,e),this.dirty=!0}insertColumn(t){for(let e of this.cells)e.splice(t,0,{text:""});this.columnCount++,this.dirty=!0}getCell(t,e){this.cells[t]=this.cells[t]??[];let i=this.cells[t][e]??{};return this.cells[t][e]=i,i}setCellText(t,e,i){let r=this.getCell(t,e);r.text=i,this.dirty=!0}setRowBackground(t,e){let i=this.cells[t];for(let r of i)r.backgroundColor=e;this.dirty=!0}setRowForeground(t,e){let i=this.cells[t];for(let r of i)r.foregroundColor=e;this.dirty=!0}setCellBackground(t,e,i){let r=this.getCell(t,e);r.backgroundColor=i,this.dirty=!0}setCellForeground(t,e,i){let r=this.getCell(t,e);r.foregroundColor=i,this.dirty=!0}setColumnCellEditorData(t,e){}};var Cd="columns_count",Sd="column_headers",Ld="column_header_visible",Ad="default_content",Ed="font",dr=class extends V{tableWrapper;table;spreadsheet;constructor(t,e){super(t,e),this.properties.add(new P(Cd)),this.properties.add(new te(Sd)),this.properties.add(new w(Ld)),this.properties.add(new te(Ad)),this.properties.add(new k(Ed)),this.spreadsheet=new pr(this)}init(){this.tableWrapper=document.createElement("div"),this.tableWrapper.style.display="none",this.tableWrapper.style.overflow="auto",this.table=document.createElement("table"),this.table.style.tableLayout="fixed",this.table.style.borderSpacing="0",this.table.style.borderCollapse="collapse",this.tableWrapper.appendChild(this.table),this.display.rootPanel.appendChild(this.tableWrapper),this.table.addEventListener("click",t=>{let e=t.target;if(e.tagName==="TD"){let i=e.parentElement;i.rowIndex>0&&this.spreadsheet.setSelectedRowIndex(i.rowIndex-1)}else this.spreadsheet.setSelectedRowIndex(void 0);this.requestRepaint()}),this.spreadsheet.setContent(this.defaultContent)}draw(t){if(this.tableWrapper){let{x:e,y:i,width:r,height:s}=this.display.measureAbsoluteArea(this);this.tableWrapper.style.backgroundColor="white",this.tableWrapper.style.position="absolute",this.tableWrapper.style.display="block",this.tableWrapper.style.left=`${e}px`,this.tableWrapper.style.top=`${i}px`,this.tableWrapper.style.width=`${r}px`,this.tableWrapper.style.height=`${s}px`,this.tableWrapper.style.border="1px solid rgba(0, 0, 0, 0.1)",this.table.style.font=this.font.getFontString(),this.spreadsheet.dirty&&(this.generateTableContent(),this.spreadsheet.dirty=!1)}}generateTableContent(){let t=this.table.rows.length;for(let i=t-1;i>=0;i--)this.table.deleteRow(i);if(this.columnHeaderVisible){let i=this.table.insertRow();for(let r=0;r<this.columnsCount;r++){let s=this.columnHeaders[r],o=i.insertCell();o.style.color="#aaa",o.style.textAlign="left",o.style.width=Number(s[1])*this.scale+"px",o.style.overflow="hidden",o.style.padding=`${4*this.scale}px`,o.style.borderBottom="1px solid rgba(0, 0, 0, 0.1)",r!==0&&(o.style.borderLeft="1px solid rgba(0, 0, 0, 0.1)");let n=document.createTextNode(s[0]);o.appendChild(n)}i.insertCell()}let e=this.spreadsheet.getCells();for(let i=0;i<e.length;i++){let r=e[i],s=i===this.spreadsheet.selectedRowIndex,o=this.table.insertRow();for(let n=0;n<this.columnsCount;n++){let a=o.insertCell();if(a.style.textAlign="left",a.style.overflow="hidden",a.style.wordWrap="break-word",a.style.textOverflow="ellipsis",a.style.padding=`${4*this.scale}px`,n!==0&&(a.style.borderLeft="1px solid rgba(0, 0, 0, 0.1)"),r[n]!==void 0){let l=s?g.BLUE:r[n].backgroundColor;l&&(a.style.backgroundColor=l.toString());let c=s?g.WHITE:r[n].foregroundColor;c&&(a.style.color=c.toString());let h=document.createTextNode(r[n].text||"");a.appendChild(h)}}o.insertCell()}}hide(){this.tableWrapper&&(this.tableWrapper.style.display="none")}destroy(){this.tableWrapper&&(this.display.rootPanel.removeChild(this.tableWrapper),this.tableWrapper=void 0,this.table=void 0)}get columnsCount(){return this.properties.getValue(Cd)}get columnHeaders(){return this.properties.getValue(Sd)}get columnHeaderVisible(){return this.properties.getValue(Ld)}get defaultContent(){return this.properties.getValue(Ad)}get font(){return this.properties.getValue(Ed).scale(this.scale)}};var Od="url",ur=class extends V{iframe;prevUrl;constructor(t,e){super(t,e),this.properties.add(new R(Od))}init(){this.iframe=document.createElement("iframe"),this.iframe.src="",this.iframe.style.display="none",this.iframe.style.border="0",this.display.rootPanel.appendChild(this.iframe)}draw(t){if(this.iframe){let{x:e,y:i,width:r,height:s}=this.display.measureAbsoluteArea(this);this.iframe.style.position="absolute",this.iframe.style.display="block",this.iframe.style.left=`${e}px`,this.iframe.style.top=`${i}px`,this.iframe.style.width=`${r}px`,this.iframe.style.height=`${s}px`,this.url&&this.prevUrl!==this.url&&(this.iframe.src=this.url,this.prevUrl=this.url)}}hide(){this.iframe&&(this.iframe.style.display="none")}destroy(){this.iframe&&(this.display.rootPanel.removeChild(this.iframe),this.iframe=void 0)}get url(){return this.properties.getValue(Od)}};var yg="Action Button",bg="Arc",Pg="Boolean Button",vg="Boolean Switch",_g="Byte Monitor",Rg="Check Box",Tg="Choice Button",Cg="Combo",Sg="Combo Box",Lg="Ellipse",Ag="Gauge",Eg="Grouping Container",Og="Image",Vg="Image Boolean Button",Mg="Image Boolean Indicator",Ig="Intensity Graph",Bg="Label",Wg="LED",kg="Linking Container",Hg="Menu Button",Dg="Meter",Ng="Button",Fg="Polygon",Gg="Polyline",$g="Progress Bar",Ug="Radio Box",Yg="Rectangle",Xg="Rounded Rectangle",zg="Scrollbar",qg="Tabbed Container",Kg="Table",jg="Tank",Zg="Text Input",Jg="Text Update",Qg="Thermometer",tm="Web Browser",em="XY Graph",Yr=class{constructor(t){this.targetElement=t;this.rootPanel=document.createElement("div"),this.rootPanel.className="display-root",this.rootPanel.style.overflow="hidden",this.rootPanel.style.position="relative",this.rootPanel.style.fontSize="0",t.appendChild(this.rootPanel);let e=document.createElement("canvas");this.rootPanel.appendChild(e),this.g=new Ge(e),this.ctx=this.g.ctx,this.formatter=new He(!1),this.pvEngine=new vi(this),this.pvEngine.addProvider(new Ri),this.pvEngine.addProvider(new Ti(this.formatter)),this.pvEngine.addProvider(new bi),this.displayRegion={id:"display-root",click:()=>{for(let i of this.rootPanel.getElementsByTagName("input"))i.blur();for(let i of this.rootPanel.getElementsByTagName("textarea"))i.blur();for(let i of this.rootPanel.getElementsByTagName("select"))i.blur()}},this.pathResolver=new Ae(this),this.consoleHandler=new ve,this.dialogHandler=new _e,window.setTimeout(()=>this.step()),new ke(this,e,this.g.hitCanvas)}rootPanel;g;ctx;pvEngine;pathResolver;fontResolver;consoleHandler;dialogHandler;formatter;repaintRequested=!1;_editMode=!1;_showGrid=!1;_showOutline=!1;_showRuler=!1;_selection=[];_scale=1;_transparent=!1;_disconnectedColor=new g(160,32,240);_invalidColor=new g(255,0,255);_majorColor=new g(255,0,0);_minorColor=new g(255,128,0);refreshCycle=100;imagesPrefix="";absPrefix="";relPrefix="";instance;eventListeners={closedisplay:[],opendisplay:[],openpv:[],runcommand:[],runprocedure:[],runstack:[],selection:[],scale:[]};displayRegion;addProvider(t){this.pvEngine.addProvider(t)}addScriptLibrary(t,e){this.pvEngine.addScriptLibrary(t,e)}setPathResolver(t){this.pathResolver=t}getPathResolver(){return this.pathResolver}setConsoleHandler(t){this.consoleHandler=t}getConsoleHandler(){return this.consoleHandler}setDialogHandler(t){this.dialogHandler=t}getDialogHandler(){return this.dialogHandler}setFontResolver(t){this.fontResolver=t}getFontResolver(){return this.fontResolver}step(){this.repaintRequested&&(this.g.clearHitCanvas(),this.drawScreen(),this.repaintRequested=!1),window.setTimeout(()=>this.step(),this.refreshCycle)}drawScreen(){if(this.instance?(this.rootPanel.style.height=this.instance.holderHeight+"px",this.rootPanel.style.width=this.instance.holderWidth+"px"):(this.rootPanel.style.height="0px",this.rootPanel.style.width="0px"),this.g.resize(this.rootPanel.clientWidth,this.rootPanel.clientHeight),this.transparent&&this.g.clearCanvas(),this.editMode){let e=document.createElement("canvas"),i=e.getContext("2d");e.width=16,e.height=16,i.fillStyle="#d6d6d6",i.fillRect(0,0,8,8),i.fillRect(8,8,8,8),this.ctx.fillStyle=this.ctx.createPattern(e,"repeat"),this.ctx.fillRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height),this.instance&&this.g.fillRect({...this.instance.bounds,color:this.instance.backgroundColor})}else this.transparent||this.g.fillCanvas(this.instance?.backgroundColor||g.WHITE);if(this.g.addHitRegion(this.displayRegion).addRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height),this.showGrid&&this.instance){let e=document.createElement("canvas"),i=e.getContext("2d");e.width=25,e.height=25,i.fillStyle=this.instance.foregroundColor.toString(),i.fillRect(0,0,2,1),this.ctx.fillStyle=this.ctx.createPattern(e,"repeat"),this.ctx.fillRect(25,25,this.ctx.canvas.width-50,this.ctx.canvas.height-50)}if(this.showRuler){this.ctx.lineWidth=1,this.ctx.strokeStyle="grey",this.ctx.textBaseline="bottom",this.ctx.textAlign="center",this.ctx.fillStyle="grey",this.ctx.font="12px Arial";let e=0;for(;e<=this.ctx.canvas.width;)e+=100,this.ctx.beginPath(),this.ctx.moveTo(e-75+.5,this.ctx.canvas.height),this.ctx.lineTo(e-75+.5,this.ctx.canvas.height-4),this.ctx.moveTo(e-50+.5,this.ctx.canvas.height),this.ctx.lineTo(e-50+.5,this.ctx.canvas.height-6),this.ctx.moveTo(e-25+.5,this.ctx.canvas.height),this.ctx.lineTo(e-25+.5,this.ctx.canvas.height-4),this.ctx.moveTo(e+.5,this.ctx.canvas.height),this.ctx.lineTo(e+.5,this.ctx.canvas.height-8),this.ctx.stroke(),this.ctx.fillText(String(e),e,this.ctx.canvas.height-8);this.ctx.textAlign="right",this.ctx.textBaseline="middle";let i=0;for(;i<=this.ctx.canvas.height;)i+=100,this.ctx.beginPath(),this.ctx.moveTo(this.ctx.canvas.width,i-75+.5),this.ctx.lineTo(this.ctx.canvas.width-4,i-75+.5),this.ctx.moveTo(this.ctx.canvas.width,i-50+.5),this.ctx.lineTo(this.ctx.canvas.width-6,i-50+.5),this.ctx.moveTo(this.ctx.canvas.width,i-25+.5),this.ctx.lineTo(this.ctx.canvas.width-4,i-25+.5),this.ctx.moveTo(this.ctx.canvas.width,i+.5),this.ctx.lineTo(this.ctx.canvas.width-8,i+.5),this.ctx.stroke(),this.ctx.fillText(String(i),this.ctx.canvas.width-8,i)}this.showOutline&&this.instance&&(this.ctx.lineWidth=1,this.ctx.setLineDash([10,5]),this.ctx.strokeStyle="black",this.ctx.strokeRect(-.5,-.5,this.instance.holderWidth+1,this.instance.holderHeight+1),this.ctx.setLineDash([])),this.instance&&this.instance.draw(this.g);for(let e of this.selection){let i=this.findWidget(e);i&&i.drawSelection(this.ctx)}}requestRepaint(){this.repaintRequested=!0}setTooltip(t){this.rootPanel.title=t?.trim()??""}createWidget(t,e){switch(t){case yg:return new ce(this,e);case bg:return new Hi(this,e);case Pg:return new Ci(this,e);case vg:return new Si(this,e);case _g:return new Xi(this,e);case Rg:return new Li(this,e);case Tg:return new Ai(this,e);case Cg:case Sg:return new Ei(this,e);case Lg:return new Di(this,e);case Ag:return new zi(this,e);case Eg:return new cr(this,e);case Og:return new Ni(this,e);case Vg:return new Oi(this,e);case Mg:return new qi(this,e);case Ig:return new Ki(this,e);case Bg:return new Fi(this,e);case Wg:return new ji(this,e);case kg:return new ne(this,e);case Hg:return new Vi(this,e);case Dg:return new Ji(this,e);case Ng:return new Mi(this,e);case Fg:return new Gi(this,e);case Gg:return new $i(this,e);case $g:return new Qi(this,e);case Ug:return new Ii(this,e);case Yg:return new Ui(this,e);case Xg:return new Yi(this,e);case zg:return new Wi(this,e);case qg:return new Ie(this,e);case Kg:return new dr(this,e);case jg:return new tr(this,e);case Zg:return new ki(this,e);case Jg:return new er(this,e);case Qg:return new ir(this,e);case tm:return new ur(this,e);case em:return new hr(this,e);default:console.warn(`Unsupported widget type: ${t}`)}}destroy(){this.instance?.destroy(),this.instance=void 0,this.pvEngine.clearState(),this.requestRepaint()}resolvePath(t,e){return this.pathResolver.resolve(t,e)}setSource(t,e){this.reset();let i=t.lastIndexOf("/")+1;return this.relPrefix=t.substring(0,i),new Promise((r,s)=>{fetch(t,{credentials:"same-origin"}).then(o=>{o.ok&&o.text().then(n=>{this.setSourceString(n,e),r()}).catch(n=>s(n))}).catch(o=>s(o))})}setSourceString(t,e){this.reset(),this.instance=new oe(this,void 0,e);let i=se.parseFromXML(t);this.instance.parseNode(i).then(()=>{this.pvEngine.init(),this.requestRepaint()})}getRefreshCycle(){return this.refreshCycle}setRefreshCycle(t){this.refreshCycle=t}reset(){this.instance&&(this.clearSelection(),this.pvEngine.clearState(),this.instance.destroy(),this.instance=void 0)}measureAbsoluteArea(t){let e=t.bounds,i=t.parent;for(;i;){if(e.x+=i.x,e.y+=i.y,i instanceof Ie){let{x:r,y:s}=i.measureTabOffset(this.g);e.x+=r,e.y+=s}i=i.parent}return e.x+=t.x-t.holderX,e.y+=t.y-t.holderY,e.width+=t.width-t.holderWidth,e.height+=t.height-t.holderHeight,e.x+=this.scale*1,e.y+=this.scale*1,e}addEventListener(t,e){if(!(t in this.eventListeners))throw new Error(`Unknown event '${t}'`);this.eventListeners[t].push(e)}removeEventListener(t,e){if(!(t in this.eventListeners))throw new Error(`Unknown event '${t}'`);this.eventListeners[t]=this.eventListeners[t].filter(i=>i!==e)}fireEvent(t,e){this.eventListeners[t].forEach(r=>r(e))}get showGrid(){return this._showGrid}set showGrid(t){this._showGrid=t,this.requestRepaint()}get showOutline(){return this._showOutline}set showOutline(t){this._showOutline=t,this.requestRepaint()}get showRuler(){return this._showRuler}set showRuler(t){this._showRuler=t,this.requestRepaint()}get selection(){return this._selection}set selection(t){this._selection=t,this.requestRepaint();let e={selected:this._selection.slice()};this.fireEvent("selection",e)}get editMode(){return this._editMode}set editMode(t){this._editMode=t,this.requestRepaint()}get scale(){return this._scale}set scale(t){this._scale=t,this.requestRepaint();let e={scale:t};this.fireEvent("scale",e)}get transparent(){return this._transparent}set transparent(t){this._transparent=t,this.requestRepaint()}get utc(){return this.formatter.utc}set utc(t){this.formatter.utc=t,this.requestRepaint()}get disconnectedColor(){return this._disconnectedColor}set disconnectedColor(t){this._disconnectedColor=t,this.requestRepaint()}get invalidColor(){return this._invalidColor}set invalidColor(t){this._invalidColor=t,this.requestRepaint()}get majorColor(){return this._majorColor}set majorColor(t){this._majorColor=t,this.requestRepaint()}get minorColor(){return this._minorColor}set minorColor(t){this._minorColor=t,this.requestRepaint()}get widgets(){return this.instance?this.instance.widgets:[]}clearSelection(){this.selection.length&&(this.selection=[])}findWidget(t){if(this.instance)return this.instance.findWidget(t)}findWidgetByName(t){if(this.instance)return this.instance.findWidgetByName(t)}getPVNames(){return this.pvEngine.getPVNames()}getPV(t){return this.pvEngine.getPV(t)}setValues(t){this.pvEngine.setExternalValues(t)}copyCanvas(t){t||(t={x:0,y:0,width:this.g.canvas.width,height:this.g.canvas.height});let e=document.createElement("canvas");return e.width=t.width,e.height=t.height,e.getContext("2d").drawImage(this.g.canvas,t.x,t.y,t.width,t.height,0,0,t.width,t.height),e}toDataURL(t="image/png",e){return this.g.ctx.canvas.toDataURL(t,e)}};export{ie as AlarmSeverity,g as Color,Ee as CompiledFormula,ve as DefaultConsoleHandler,_e as DefaultDialogHandler,Ae as DefaultPathResolver,Yr as Display,q as Font,Oe as FormulaCompiler,Xt as PV,V as Widget,Vu as colorFromCssColor};
|
|
21
|
+
`+i.formatTime(e,{hours:!0,minutes:!0,seconds:!1,milliseconds:!1}):n<=2592e6?i.formatDate(e,{year:!1,month:!0,day:!0}):i.formatDate(e,{year:!0,month:!0,day:!0})}return""}get spaceBetweenMarkAndLabel(){return this.scale*2}get majorTickLength(){return this.scale*6}get minorTickLength(){return this.scale*3}get minorTickMarkStepHint(){return this.scale*4}get tickLabelGap(){return this.horizontal?this.scale*10:this.scale*2}};var nh="color_map",ah="crop_bottom",lh="crop_left",hh="crop_right",ch="crop_top",ph="data_height",dh="data_width",uh="font",gh="graph_area_height",mh="graph_area_width",fh="maximum",xh="minimum",wh="show_ramp",yh="x_axis_axis_color",bh="x_axis_axis_title",Ph="x_axis_major_tick_step_hint",vh="x_axis_maximum",_h="x_axis_minimum",Rh="x_axis_scale_font",Th="x_axis_show_minor_ticks",Ch="x_axis_title_font",Sh="x_axis_visible",Lh="y_axis_axis_color",Ah="y_axis_axis_title",Eh="y_axis_major_tick_step_hint",Oh="y_axis_maximum",Vh="y_axis_minimum",Mh="y_axis_scale_font",Ih="y_axis_show_minor_ticks",Bh="y_axis_title_font",Wh="y_axis_visible",Ki=class extends V{constructor(t,e){super(t,e),this.properties.add(new Gt(nh)),this.properties.add(new P(ah)),this.properties.add(new P(lh)),this.properties.add(new P(hh)),this.properties.add(new P(ch)),this.properties.add(new P(ph)),this.properties.add(new P(dh)),this.properties.add(new P(gh)),this.properties.add(new P(mh)),this.properties.add(new k(uh)),this.properties.add(new B(fh)),this.properties.add(new B(xh)),this.properties.add(new w(wh)),this.properties.add(new S(yh)),this.properties.add(new R(bh)),this.properties.add(new P(Ph)),this.properties.add(new B(vh)),this.properties.add(new B(_h)),this.properties.add(new k(Rh)),this.properties.add(new w(Th)),this.properties.add(new k(Ch)),this.properties.add(new w(Sh)),this.properties.add(new S(Lh)),this.properties.add(new R(Ah)),this.properties.add(new P(Eh)),this.properties.add(new B(Oh)),this.properties.add(new B(Vh)),this.properties.add(new k(Mh)),this.properties.add(new w(Ih)),this.properties.add(new k(Bh)),this.properties.add(new w(Wh))}draw(t){let{scale:e}=this,i=this.area;this.borderAlarmSensitive&&(i=D(i,2*e));let r=this.alarmSensitiveBackgroundColor;t.fillRect({...i,color:r});let{graphAreaWidth:s,graphAreaHeight:o}=this,n=0;this.xAxisVisible&&(n=t.measureText(this.xAxisAxisTitle,this.xAxisTitleFont).height);let a=0;this.yAxisVisible&&(a=t.measureText(this.yAxisAxisTitle,this.yAxisTitleFont).height);let l=new et(this.display.formatter,e,this.xAxisScaleFont,this.xAxisMinimum,this.xAxisMaximum,!1,this.xAxisMajorTickStepHint,this.xAxisAxisColor,this.xAxisShowMinorTicks,this.xAxisVisible),c=l.calculateMargin(t,!0),h=new et(this.display.formatter,e,this.yAxisScaleFont,this.yAxisMinimum,this.yAxisMaximum,!1,this.yAxisMajorTickStepHint,this.yAxisAxisColor,this.yAxisShowMinorTicks,this.yAxisVisible),u=h.calculateMargin(t,!1),f=l.measureHorizontalHeight(t),_=o+2*u,b=h.drawVertical(t,i.x+a,i.y,_,!0),T=s+2*c,W=i.x+a+b-c,O=i.y+_+f-u;l.drawHorizontal(t,W,O,T);let L=e*1,M=Math.round(i.x+a+b)-L/2,N=Math.round(i.y+u)-L/2;t.strokePath({path:new v(M,N).lineTo(M,N+o),color:this.yAxisAxisColor,opacity:100/255,lineWidth:L});let F=M,X=N+o+L;t.strokePath({path:new v(F,X).lineTo(F+s,X),color:this.xAxisAxisColor,opacity:100/255,lineWidth:L});let{dataWidth:j,dataHeight:pt,colorMap:it}=this,{minimum:dt,maximum:ot}=this,[Bt,ge]=it.getMinMax();if(this.value&&this.value.length){let tt=document.createElement("canvas"),{cropLeft:mt,cropRight:Rt,cropTop:Wt,cropBottom:Kt}=this;tt.width=j-mt-Rt,tt.height=pt-Wt-Kt;let kt=tt.getContext("2d");for(let ft=mt;ft<j-Rt;ft++)for(let nt=Wt;nt<pt-Kt;nt++){let xt=this.value[nt*j+ft];if(it.autoscale){let we=(xt-dt)/(ot-dt);xt=Bt+we*(ge-Bt)}let[me,fe,xe]=it.lookup(xt);kt.fillStyle=`rgb(${me},${fe},${xe})`,kt.fillRect(ft-mt,nt-Wt,1,1)}let Ht=Math.round(i.x+a+b),Tt=Math.round(i.y+h.margin);t.ctx.drawImage(tt,Ht,Tt,s,o)}if(this.showRamp){let tt=new et(this.display.formatter,e,this.font,dt,ot,!1,50*e,this.alarmSensitiveForegroundColor,!1,!0),mt=i.y+h.margin,Rt=o,Wt=tt.drawVertical(t,i.x+i.width,mt,Rt,!1,!0),Kt=i.x+a+b+s+this.gap,kt=i.width-a-b-s-Wt-this.gap,Ht=Rt-2*tt.margin,Tt=document.createElement("canvas");Tt.width=kt,Tt.height=Ht;let ft=Tt.getContext("2d");for(let nt=0;nt<Ht;nt++){let xt=ot-nt/Ht*(ot-dt);if(it.autoscale){let we=(xt-dt)/(ot-dt);xt=Bt+we*(ge-Bt)}let[me,fe,xe]=it.lookup(xt);ft.fillStyle=`rgb(${me},${fe},${xe})`,ft.fillRect(0,nt,kt,1)}t.ctx.drawImage(Tt,Kt,mt+tt.margin)}if(this.xAxisVisible){let tt=i.x+b+s/2;this.yAxisVisible&&(tt+=a),t.fillText({x:tt,y:i.y+i.height,align:"center",baseline:"bottom",font:this.xAxisTitleFont,color:this.xAxisAxisColor,text:this.xAxisAxisTitle})}this.yAxisVisible&&(t.ctx.save(),t.ctx.translate(i.x+a/2,i.y+_/2),t.ctx.rotate(-Math.PI/2),t.fillText({x:0,y:0,align:"center",baseline:"middle",font:this.yAxisTitleFont,color:this.yAxisAxisColor,text:this.yAxisAxisTitle}),t.ctx.restore())}get gap(){return this.scale*3}get colorMap(){return this.properties.getValue(nh)}get cropBottom(){return this.properties.getValue(ah)}get cropLeft(){return this.properties.getValue(lh)}get cropRight(){return this.properties.getValue(hh)}get cropTop(){return this.properties.getValue(ch)}get dataHeight(){return this.properties.getValue(ph)}get dataWidth(){return this.properties.getValue(dh)}get font(){return this.properties.getValue(uh).scale(this.scale)}get graphAreaHeight(){return this.scale*this.properties.getValue(gh)}get graphAreaWidth(){return this.scale*this.properties.getValue(mh)}get maximum(){return this.properties.getValue(fh)}get minimum(){return this.properties.getValue(xh)}get showRamp(){return this.properties.getValue(wh)}get xAxisAxisColor(){return this.properties.getValue(yh)}get xAxisAxisTitle(){return this.properties.getValue(bh)}get xAxisMajorTickStepHint(){return this.scale*this.properties.getValue(Ph)}get xAxisMaximum(){return this.properties.getValue(vh)}get xAxisMinimum(){return this.properties.getValue(_h)}get xAxisScaleFont(){return this.properties.getValue(Rh).scale(this.scale)}get xAxisShowMinorTicks(){return this.properties.getValue(Th)}get xAxisTitleFont(){return this.properties.getValue(Ch).scale(this.scale)}get xAxisVisible(){return this.properties.getValue(Sh)}get yAxisAxisColor(){return this.properties.getValue(Lh)}get yAxisAxisTitle(){return this.properties.getValue(Ah)}get yAxisMajorTickStepHint(){return this.scale*this.properties.getValue(Eh)}get yAxisMaximum(){return this.properties.getValue(Oh)}get yAxisMinimum(){return this.properties.getValue(Vh)}get yAxisScaleFont(){return this.properties.getValue(Mh).scale(this.scale)}get yAxisShowMinorTicks(){return this.properties.getValue(Ih)}get yAxisTitleFont(){return this.properties.getValue(Bh).scale(this.scale)}get yAxisVisible(){return this.properties.getValue(Wh)}};var kh="bit",Hh="data_type",Dh="effect_3d",Nh="state_count",Fh="square_led",Gh="off_color",$h="off_label",Uh="off_state",Yh="font",Xh="on_color",zh="on_label",qh="on_state",Kh="bulb_border",jh="bulb_border_color",Zh="state_color_fallback",Jh="state_label_fallback",Qh="show_boolean_label",ji=class extends V{areaRegion;states=[];constructor(t,e){super(t,e),this.properties.add(new P(kh)),this.properties.add(new P(Hh)),this.properties.add(new w(Dh)),this.properties.add(new w(Fh)),this.properties.add(new P(Nh,2)),this.properties.add(new S(Gh)),this.properties.add(new R($h)),this.properties.add(new R(Uh)),this.properties.add(new S(Xh)),this.properties.add(new R(zh)),this.properties.add(new R(qh)),this.properties.add(new k(Yh)),this.properties.add(new w(Qh)),this.properties.add(new S(Zh)),this.properties.add(new R(Jh)),this.properties.add(new P(Kh,3)),this.properties.add(new S(jh,g.DARK_GRAY))}async parseNode(t){if(await super.parseNode(t),this.stateCount>2)for(let e=0;e<this.stateCount;e++){let i=new S(`state_color_${e}`);i.value=t.getColor(`state_color_${e}`),this.properties.add(i);let r=new R(`state_label_${e}`);r.value=t.getString(`state_label_${e}`),this.properties.add(r);let s=new B(`state_value_${e}`);s.value=t.getFloat(`state_value_${e}`),this.properties.add(s),this.states.push({label:this.properties.getValue(r.name),color:this.properties.getValue(i.name),value:this.properties.getValue(s.name)})}}init(){this.areaRegion={id:`${this.wuid}-area`,click:()=>{let t={pvName:this.pvName};this.display.fireEvent("openpv",t)},cursor:"pointer",tooltip:()=>this.tooltip}}get booleanValue(){return this.dataType===0?this.bit<0?!!(this.pv?.toNumber()??this.value):this.pv?.value!==void 0?(this.pv?.value>>this.bit&1)>0:this.value!==void 0?(this.value>>this.bit&1)>0:!1:this.dataType===1?(this.pv?.toString()??this.value)===this.onState:!1}get bulbColor(){if(this.stateCount<=2)return this.booleanValue?this.onColor:this.offColor;for(let t of this.states)if(t.value===(this.pv?.value??this.value))return t.color;return this.stateColorFallback}get label(){if(this.stateCount===2)return this.booleanValue?this.onLabel:this.offLabel;for(let t of this.states)if(t.value===(this.pv?.value??this.value))return t.label;return this.stateLabelFallback}draw(t){let e=D(this.bounds,3*this.scale);if(this.squareLed?this.effect3d?this.drawSquare3d(t,e):this.drawSquare2d(t,e):this.effect3d?this.drawCircle3d(t,e):this.drawCircle2d(t,e),this.showBooleanLabel){let i=this.bulbColor;i.red*299+i.green*587+i.blue*114>105e3?i=g.BLACK:i=g.WHITE,t.fillText({x:e.x+e.width/2,y:e.y+e.height/2,font:this.font,baseline:"middle",align:"center",color:i,text:this.label})}}drawCircle2d(t,e){let i=e.x+e.width/2,r=e.y+e.height/2,s=e.width/2,o=e.height/2;this.bulbBorder>0&&(s-=this.bulbBorder/2,o-=this.bulbBorder/2),t.fillEllipse({cx:i,cy:r,rx:s,ry:o,color:this.bulbColor}),t.strokeEllipse({cx:i,cy:r,rx:s,ry:o,color:this.bulbBorderColor,lineWidth:this.bulbBorder}),this.pv&&this.pv.navigable&&!this.pv.disconnected&&t.addHitRegion(this.areaRegion).addEllipse(i,r,s,o,0,0,2*Math.PI)}drawCircle3d(t,e){let i=e.x+e.width/2,r=e.y+e.height/2,s=e.width/2,o=e.height/2;t.fillEllipse({cx:i,cy:r,rx:s,ry:o,color:g.WHITE});let n=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y+e.height);n.addColorStop(0,this.bulbBorderColor.toString()),n.addColorStop(1,this.bulbBorderColor.withAlpha(0).toString()),t.fillEllipse({cx:i,cy:r,rx:s,ry:o,gradient:n});let a=e.width-2*this.bulbBorder,l=e.height-2*this.bulbBorder;s=a/2,o=l/2,t.fillEllipse({cx:i,cy:r,rx:s,ry:o,color:this.bulbColor}),n=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y+e.height),n.addColorStop(0,g.WHITE.toString()),n.addColorStop(1,this.bulbBorderColor.withAlpha(0).toString()),t.fillEllipse({cx:i,cy:r,rx:s,ry:o,gradient:n}),this.pv&&this.pv.navigable&&!this.pv.disconnected&&t.addHitRegion(this.areaRegion).addEllipse(i,r,s,o,0,0,2*Math.PI)}drawSquare2d(t,e){let i=wt(e.x,e.y,e.width,e.height,this.bulbBorder);t.fillRect({...i,color:this.bulbColor}),t.strokeRect({...i,color:this.bulbBorderColor,lineWidth:this.bulbBorder}),this.pv&&this.pv.navigable&&!this.pv.disconnected&&t.addHitRegion(this.areaRegion).addRect(e.x,e.y,e.width,e.height)}drawSquare3d(t,e){t.fillRect({...e,color:this.bulbBorderColor}),this.pv&&this.pv.navigable&&!this.pv.disconnected&&t.addHitRegion(this.areaRegion).addRect(e.x,e.y,e.width,e.height);let i=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y);i.addColorStop(0,"rgba(0,0,0,0.078)"),i.addColorStop(1,"rgba(0,0,0,0.39)"),t.fillPath({gradient:i,path:new v(e.x,e.y).lineTo(e.x+this.bulbBorder,e.y+this.bulbBorder).lineTo(e.x+this.bulbBorder,e.y+e.height-this.bulbBorder).lineTo(e.x,e.y+e.height)}),i=t.createLinearGradient(e.x,e.y,e.x,e.y+e.height),i.addColorStop(0,"rgba(0,0,0,0.078)"),i.addColorStop(1,"rgba(0,0,0,0.39)"),t.fillPath({gradient:i,path:new v(e.x,e.y).lineTo(e.x+this.bulbBorder,e.y+this.bulbBorder).lineTo(e.x+e.width-this.bulbBorder,e.y+this.bulbBorder).lineTo(e.x+e.width,e.y)}),i=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y),i.addColorStop(0,"rgba(255,255,255,0.078)"),i.addColorStop(1,"rgba(255,255,255,0.39)"),t.fillPath({gradient:i,path:new v(e.x+e.width,e.y).lineTo(e.x+e.width-this.bulbBorder,e.y+this.bulbBorder).lineTo(e.x+e.width-this.bulbBorder,e.y+e.height-this.bulbBorder).lineTo(e.x+e.width,e.y+e.height)}),i=t.createLinearGradient(e.x,e.y,e.x,e.y+e.height),i.addColorStop(0,"rgba(255,255,255,0.078)"),i.addColorStop(1,"rgba(255,255,255,0.39)"),t.fillPath({gradient:i,path:new v(e.x,e.y+e.height).lineTo(e.x+this.bulbBorder,e.y+e.height-this.bulbBorder).lineTo(e.x+e.width-this.bulbBorder,e.y+e.height-this.bulbBorder).lineTo(e.x+e.width,e.y+e.height)});let r=e.x+this.bulbBorder,s=e.y+this.bulbBorder,o=e.width-2*this.bulbBorder,n=e.height-2*this.bulbBorder;t.fillRect({x:r,y:s,width:o,height:n,color:this.bulbColor}),i=t.createLinearGradient(e.x,e.y,e.x+e.width,e.y+e.height),i.addColorStop(0,"rgba(255,255,255,0.784)"),i.addColorStop(1,this.bulbColor.withAlpha(0).toString()),t.fillRect({x:r,y:s,width:o,height:n,gradient:i})}get bit(){return this.properties.getValue(kh)}get dataType(){return this.properties.getValue(Hh)}get squareLed(){return this.properties.getValue(Fh)}get showBooleanLabel(){return this.properties.getValue(Qh)}get font(){return this.properties.getValue(Yh).scale(this.scale)}get effect3d(){return this.properties.getValue(Dh)}get stateCount(){return this.properties.getValue(Nh)}get bulbBorder(){return this.scale*this.properties.getValue(Kh)}get bulbBorderColor(){return this.properties.getValue(jh)}get offLabel(){return this.properties.getValue($h)}get offColor(){return this.properties.getValue(Gh)}get offState(){return this.properties.getValue(Uh)}get onLabel(){return this.properties.getValue(zh)}get onColor(){return this.properties.getValue(Xh)}get onState(){return this.properties.getValue(qh)}get stateLabelFallback(){return this.properties.getValue(Jh)}get stateColorFallback(){return this.properties.getValue(Zh)}};var dg=16,ug=12,gg=-5,mg=45,Zi=$(mg),tc=(1-Math.sin(Zi)/2)/(2*Math.cos(Zi)),ec="color_hi",ic="color_hihi",rc="color_lo",sc="color_lolo",oc="font",nc="level_hi",ac="level_hihi",lc="level_lo",hc="level_lolo",cc="log_scale",pc="minimum",dc="maximum",uc="needle_color",gc="ramp_gradient",mc="scale_font",fc="show_hi",xc="show_hihi",wc="show_lo",yc="show_lolo",bc="show_ramp",Pc="value_label_format",Ji=class extends V{areaRegion;constructor(t,e){super(t,e),this.properties.add(new S(ec)),this.properties.add(new S(ic)),this.properties.add(new S(rc)),this.properties.add(new S(sc)),this.properties.add(new k(oc)),this.properties.add(new P(nc)),this.properties.add(new P(ac)),this.properties.add(new P(lc)),this.properties.add(new P(hc)),this.properties.add(new w(cc)),this.properties.add(new P(dc)),this.properties.add(new P(pc)),this.properties.add(new S(uc)),this.properties.add(new w(gc)),this.properties.add(new k(mc)),this.properties.add(new w(fc)),this.properties.add(new w(xc)),this.properties.add(new w(wc)),this.properties.add(new w(yc)),this.properties.add(new w(bc,!0)),this.properties.add(new R(Pc))}init(){this.areaRegion={id:`${this.wuid}-area`,click:()=>{let t={pvName:this.pvName};this.display.fireEvent("openpv",t)},tooltip:()=>this.tooltip,cursor:"pointer"}}draw(t){t.fillRect({x:this.x,y:this.y,width:this.width,height:this.height,color:this.backgroundColor}),this.showRamp&&this.drawRamp(t),this.pv&&this.pv.navigable&&!this.pv.disconnected&&t.addHitRegion(this.areaRegion).addRect(this.x,this.y,this.width,this.height)}drawRamp(t){let e=String(this.minimum),i=t.measureText(e,this.scaleFont),r=String(this.maximum),s=t.measureText(r,this.scaleFont),o=Math.max(i.width,s.width)/2,n=this.height,a=this.width;n>tc*(a-2*o)&&(n=Math.floor(tc*(a-2*o)));let l=n/(1-Math.sin(Zi)/2),c=Math.floor(this.x-l*(1-Math.cos(Zi))+o),h=this.y,u={x:c,y:h,width:Math.floor(2*l),height:Math.floor(2*l)},{rampWidth:f}=this,_=D(u,u.width/4-f,u.height/4-f);_.width=Math.min(_.width,_.height),_.height=_.width;let b=new ue(f,135,45);b.lolo=this.levelLoLo,b.loloColor=this.colorLoLo,b.showLoLo=!0,b.lo=this.levelLo,b.loColor=this.colorLo,b.showLo=!0,b.hi=this.levelHi,b.hiColor=this.colorHi,b.showHi=!0,b.hihi=this.levelHiHi,b.hihiColor=this.colorHiHi,b.showHiHi=!0,b.minimum=this.minimum,b.maximum=this.maximum,b.gradient=this.rampGradient,b.logScale=this.logScale,b.draw(t,u,_),this.drawNeedle(t,u,b);let T=q.ARIAL_12_BOLD.scale(this.scale);if(this.pv&&this.pv.value!==void 0){let W=this.format(this.pv.value),O=t.measureText(W,T);t.fillText({x:u.x+u.width/2-O.width/2,y:u.y+u.height/2-u.height/4-(b.getRadius()-u.height/4)/2-O.height/2,align:"left",baseline:"top",font:T,text:W,color:this.foregroundColor})}}drawNeedle(t,e,i){let r=e.x+e.width/2,s=e.y+e.height/2,o;if(this.pv&&this.pv.value!==void 0){let _=i.getValueInRange(this.pv.value);o=360-i.getValuePosition(_),this.maximum>this.minimum?_>this.maximum?o+=8:_<this.minimum&&(o-=8):_>this.minimum?o-=8:_<this.maximum&&(o+=8)}else o=360-i.getValuePosition(this.minimum+this.maximum/2);let n=$(o),{needleWidth:a,gapBetweenNeedleScale:l,scale:c}=this,h=Ct(r+e.width/4,s-a/2+3*c,r,s,n),u=Ct(r+i.getRadius()-l,s,r,s,n),f=Ct(r+e.width/4,s+a/2-3*c,r,s,n);t.fillPath({color:this.needleColor,path:new v(h.x,h.y).lineTo(u.x,u.y).lineTo(f.x,f.y).closePath()})}get needleWidth(){return this.scale*dg}get gapBetweenNeedleScale(){return this.scale*gg}get rampWidth(){return this.scale*ug}format(t){return this.valueLabelFormat?new st(this.valueLabelFormat).format(t):String(Number(t.toFixed(2)))}get colorLo(){return this.properties.getValue(rc)}get colorLoLo(){return this.properties.getValue(sc)}get colorHi(){return this.properties.getValue(ec)}get colorHiHi(){return this.properties.getValue(ic)}get font(){return this.properties.getValue(oc).scale(this.scale)}get levelLo(){return this.properties.getValue(lc)}get levelLoLo(){return this.properties.getValue(hc)}get levelHi(){return this.properties.getValue(nc)}get levelHiHi(){return this.properties.getValue(ac)}get logScale(){return this.properties.getValue(cc)}get minimum(){return this.properties.getValue(pc)}get maximum(){return this.properties.getValue(dc)}get needleColor(){return this.properties.getValue(uc)}get rampGradient(){return this.properties.getValue(gc)}get scaleFont(){return this.properties.getValue(mc).scale(this.scale)}get showLo(){return this.properties.getValue(wc)}get showLoLo(){return this.properties.getValue(yc)}get showHi(){return this.properties.getValue(fc)}get showHiHi(){return this.properties.getValue(xc)}get showRamp(){return this.properties.getValue(bc)}get valueLabelFormat(){return this.properties.getValue(Pc)}};var vc="color_hi",_c="color_hihi",Rc="color_lo",Tc="color_lolo",Cc="color_fillbackground",Sc="effect_3d",Lc="fill_color",Ac="fillcolor_alarm_sensitive",Ec="font",Oc="horizontal",Vc="indicator_mode",Mc="level_hi",Ic="level_hihi",Bc="level_lo",Wc="level_lolo",kc="limits_from_pv",Hc="log_scale",Dc="maximum",Nc="major_tick_step_hint",Fc="minimum",Gc="origin",$c="origin_ignored",Uc="scale_font",Yc="scale_format",Xc="show_hi",zc="show_hihi",qc="show_label",Kc="show_lo",jc="show_lolo",Zc="show_markers",Jc="show_minor_ticks",Qc="show_scale",tp="transparent_background",ep="value_label_format",Qi=class extends V{constructor(t,e){super(t,e),this.properties.add(new S(vc)),this.properties.add(new S(_c)),this.properties.add(new S(Rc)),this.properties.add(new S(Tc)),this.properties.add(new S(Cc)),this.properties.add(new w(Sc)),this.properties.add(new S(Lc)),this.properties.add(new w(Ac,!1)),this.properties.add(new k(Ec)),this.properties.add(new w(Oc)),this.properties.add(new w(Vc)),this.properties.add(new B(Mc)),this.properties.add(new B(Ic)),this.properties.add(new B(Bc)),this.properties.add(new B(Wc)),this.properties.add(new w(kc)),this.properties.add(new w(Hc)),this.properties.add(new B(Dc)),this.properties.add(new B(Nc)),this.properties.add(new B(Fc)),this.properties.add(new B(Gc,0)),this.properties.add(new w($c,!0)),this.properties.add(new k(Uc)),this.properties.add(new R(Yc)),this.properties.add(new w(Xc)),this.properties.add(new w(zc)),this.properties.add(new w(qc)),this.properties.add(new w(Kc)),this.properties.add(new w(jc)),this.properties.add(new w(Zc)),this.properties.add(new w(Jc)),this.properties.add(new w(Qc)),this.properties.add(new w(tp)),this.properties.add(new R(ep))}draw(t){let e=this.area;this.borderAlarmSensitive&&(e=D(this.area,2*this.scale));let i=this.alarmSensitiveBackgroundColor;this.transparentBackground||t.fillRect({...e,color:i}),this.horizontal?this.drawHorizontal(t,e):this.drawVertical(t,e)}drawVertical(t,e){let i=this.alarmSensitiveForegroundColor,r=new et(this.display.formatter,this.scale,this.scaleFont,this.min,this.max,this.logScale,this.majorTickStepHint,i,this.showMinorTicks,this.showScale);r.scaleFormat=this.scaleFormat;let s=r.drawVertical(t,e.x,e.y,e.height,!0),o=0;this.showMarkers&&(o=this.drawVerticalMarkers(t,r,e)),this.drawVerticalBar(t,r,{x:e.x+s,y:e.y+r.margin,width:e.width-s-o,height:e.height-2*r.margin})}drawVerticalMarkers(t,e,i){let{lolo:r,lo:s,hi:o,hihi:n}=this,a=q.ARIAL_9.scale(this.scale),l=0;if(this.showLoLo&&r!==void 0){let h=t.measureText("LOLO",a);l=Math.max(l,h.width)}if(this.showLo&&s!==void 0){let h=t.measureText("LO",a);l=Math.max(l,h.width)}if(this.showHi&&o!==void 0){let h=t.measureText("HI",a);l=Math.max(l,h.width)}if(this.showHiHi&&n!==void 0){let h=t.measureText("HIHI",a);l=Math.max(l,h.width)}let c=i.x+i.width;if(this.showLoLo&&r!==void 0){let h=c-l-this.markerGap,u=Math.round(e.getValuePosition(r));t.strokePath({path:new v(h,u).lineTo(h-this.markerTickLength,u),color:this.colorLoLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:h+this.markerGap,y:u,text:"LOLO",align:"left",baseline:"middle",color:this.colorLoLo,font:a})}if(this.showLo&&s!==void 0){let h=c-l-this.markerGap,u=Math.round(e.getValuePosition(s));t.strokePath({path:new v(h,u).lineTo(h-this.markerTickLength,u),color:this.colorLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:h+this.markerGap,y:u,text:"LO",align:"left",baseline:"middle",color:this.colorLo,font:a})}if(this.showHi&&o!==void 0){let h=c-l-this.markerGap,u=Math.round(e.getValuePosition(o));t.strokePath({path:new v(h,u).lineTo(h-this.markerTickLength,u),color:this.colorHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:h+this.markerGap,y:u,text:"HI",align:"left",baseline:"middle",color:this.colorHi,font:a})}if(this.showHiHi&&n!==void 0){let h=c-l-this.markerGap,u=Math.round(e.getValuePosition(n));t.strokePath({path:new v(h,u).lineTo(h-this.markerTickLength,u),color:this.colorHiHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:h+this.markerGap,y:u,text:"HIHI",align:"left",baseline:"middle",color:this.colorHiHi,font:a})}return this.markerTickLength+this.markerGap+l}drawVerticalBar(t,e,i){let{outlineWidth:r}=this;if(t.fillRect({...i,color:this.colorFillbackground}),this.effect3d){let n=t.createLinearGradient(i.x,0,i.x+i.width,0);n.addColorStop(0,g.WHITE.toString()),n.addColorStop(1,this.colorFillbackground.withAlpha(0).toString()),t.fillRect({...i,gradient:n});let a=D(i,r/2);t.strokeRect({...a,color:g.GRAY,lineWidth:r})}let s=this.alarmSensitiveFillColor;if(this.indicatorMode){let n=Math.round(e.getValuePosition(this.getFillValue())),a=i.width,l=this.thumbBreadth,c=Jt([{x:0,y:l/2},{x:a/2,y:0},{x:a-1,y:l/2},{x:a/2,y:l}],i.x,n-l/2),h=v.fromPoints(c);if(this.effect3d){let{x:u,y:f}=c[0],{x:_,y:b}=c[2],T=t.createLinearGradient(u,f,_,b);T.addColorStop(0,g.WHITE.toString()),T.addColorStop(1,s.toString()),t.fillPath({path:h,gradient:T}),t.strokePath({path:h,color:g.GRAY,lineWidth:r})}else t.fillPath({path:h,color:s})}else{let n=this.originIgnored?this.min:this.origin,a=this.getFillValue();if(a<n){let u=n;n=a,a=u}let l=Math.round(e.getValuePosition(n)),c=Math.round(e.getValuePosition(a)),h=D({...i,y:l,height:c-l},r);if(t.fillRect({...h,color:s}),this.effect3d){let u=t.createLinearGradient(h.x,0,h.x+h.width,0);u.addColorStop(0,g.WHITE.toString()),u.addColorStop(1,s.withAlpha(0).toString()),t.fillRect({...h,gradient:u})}}let o=this.pv?.value;this.showLabel&&o!==void 0&&t.fillText({x:i.x+i.width/2,y:i.y+i.height/2,align:"center",baseline:"middle",color:this.alarmSensitiveForegroundColor,font:this.font,text:this.format(o)})}drawHorizontal(t,e){let i=this.alarmSensitiveForegroundColor,r=new et(this.display.formatter,this.scale,this.scaleFont,this.min,this.max,this.logScale,this.majorTickStepHint,i,this.showMinorTicks,this.showScale);r.scaleFormat=this.scaleFormat;let s=r.drawHorizontal(t,e.x,e.y+e.height,e.width),o=0;this.showMarkers&&(o=this.drawHorizontalMarkers(t,r,e)),this.drawHorizontalBar(t,r,{x:e.x+r.margin,y:e.y+o,width:e.width-2*r.margin,height:e.height-s-o})}drawHorizontalMarkers(t,e,i){let{lolo:r,lo:s,hi:o,hihi:n}=this,a=q.ARIAL_9.scale(this.scale),l=0;if(this.showLoLo&&r!==void 0){let h=t.measureText("LOLO",a);l=Math.max(l,h.height)}if(this.showLo&&s!==void 0){let h=t.measureText("LO",a);l=Math.max(l,h.height)}if(this.showHi&&o!==void 0){let h=t.measureText("HI",a);l=Math.max(l,h.height)}if(this.showHiHi&&n!==void 0){let h=t.measureText("HIHI",a);l=Math.max(l,h.height)}let c=i.y;if(this.showLoLo&&r!==void 0){let h=Math.round(e.getValuePosition(r)),u=c+l+this.markerGap;t.strokePath({path:new v(h,u).lineTo(h,u+this.markerTickLength),color:this.colorLoLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:h,y:c,text:"LOLO",align:"center",baseline:"top",color:this.colorLoLo,font:a})}if(this.showLo&&s!==void 0){let h=Math.round(e.getValuePosition(s)),u=c+l+this.markerGap;t.strokePath({path:new v(h,u).lineTo(h,u+this.markerTickLength),color:this.colorLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:h,y:c,text:"LO",align:"center",baseline:"top",color:this.colorLo,font:a})}if(this.showHi&&o!==void 0){let h=Math.round(e.getValuePosition(o)),u=c+l+this.markerGap;t.strokePath({path:new v(h,u).lineTo(h,u+this.markerTickLength),color:this.colorHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:h,y:c,text:"HI",align:"center",baseline:"top",color:this.colorHi,font:a})}if(this.showHiHi&&n!==void 0){let h=Math.round(e.getValuePosition(n)),u=c+l+this.markerGap;t.strokePath({path:new v(h,u).lineTo(h,u+this.markerTickLength),color:this.colorHiHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:h,y:c,text:"HIHI",align:"center",baseline:"top",color:this.colorHiHi,font:a})}return this.markerTickLength+this.markerGap+l}drawHorizontalBar(t,e,i){let{outlineWidth:r}=this;if(t.fillRect({...i,color:this.colorFillbackground}),this.effect3d){let n=t.createLinearGradient(0,i.y,0,i.y+i.height);n.addColorStop(0,g.WHITE.toString()),n.addColorStop(1,this.colorFillbackground.withAlpha(0).toString()),t.fillRect({...i,gradient:n});let a=D(i,r/2);t.strokeRect({...a,color:g.GRAY,lineWidth:r})}let s=this.alarmSensitiveFillColor;if(this.indicatorMode){let n=Math.round(e.getValuePosition(this.getFillValue())),a=i.height,l=this.thumbBreadth,c=Jt([{x:l/2,y:0},{x:l,y:a/2},{x:l/2,y:a-1},{x:0,y:a/2}],n-l/2,i.y),h=v.fromPoints(c);if(this.effect3d){let{x:u,y:f}=c[0],{x:_,y:b}=c[2],T=t.createLinearGradient(u,f,_,b);T.addColorStop(0,g.WHITE.toString()),T.addColorStop(1,s.toString()),t.fillPath({path:h,gradient:T}),t.strokePath({path:h,color:g.GRAY,lineWidth:r})}else t.fillPath({path:h,color:s})}else{let n=this.originIgnored?this.min:this.origin,a=this.getFillValue();if(a<n){let u=n;n=a,a=u}let l=Math.round(e.getValuePosition(n)),c=Math.round(e.getValuePosition(a)),h=D({...i,x:l,width:c-l},r);if(t.fillRect({...h,color:s}),this.effect3d){let u=t.createLinearGradient(0,h.y,0,h.y+h.height);u.addColorStop(0,g.WHITE.toString()),u.addColorStop(1,s.withAlpha(0).toString()),t.fillRect({...h,gradient:u})}}let o=this.pv?.value;this.showLabel&&o!==void 0&&t.fillText({x:i.x+i.width/2,y:i.y+i.height/2,align:"center",baseline:"middle",color:this.alarmSensitiveForegroundColor,font:this.font,text:this.format(o)})}get min(){return this.limitsFromPv?this.pv?.lowerDisplayLimit??this.minimum:this.minimum}get max(){return this.limitsFromPv?this.pv?.upperDisplayLimit??this.maximum:this.maximum}get lolo(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.lowerAlarmLimit:this.levelLoLo}get lo(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.lowerWarningLimit:this.levelLo}get hi(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.upperWarningLimit:this.levelHi}get hihi(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.upperAlarmLimit:this.levelHiHi}get markerTickLength(){return this.scale*10}get markerTickLineWidth(){return this.scale*2}get markerGap(){return this.scale*3}get thumbBreadth(){return this.scale*13}get outlineWidth(){return this.scale*1}get alarmSensitiveFillColor(){if(this.fillColorAlarmSensitive){if(this.isMajorSeverity())return this.display.majorColor;if(this.isMinorSeverity())return this.display.minorColor}return this.fillColor}getFillValue(){let t=this.pv?.value??this.min;return t=Math.max(this.min,t),t=Math.min(this.max,t),t}format(t){return this.valueLabelFormat?new st(this.valueLabelFormat).format(t):String(Number(t.toFixed(2)))}get colorLo(){return this.properties.getValue(Rc)}get colorLoLo(){return this.properties.getValue(Tc)}get colorHi(){return this.properties.getValue(vc)}get colorHiHi(){return this.properties.getValue(_c)}get colorFillbackground(){return this.properties.getValue(Cc)}get effect3d(){return this.properties.getValue(Sc)}get fillColorAlarmSensitive(){return this.properties.getValue(Ac)}get fillColor(){return this.properties.getValue(Lc)}get font(){return this.properties.getValue(Ec).scale(this.scale)}get horizontal(){return this.properties.getValue(Oc)}get indicatorMode(){return this.properties.getValue(Vc)}get levelLo(){return this.properties.getValue(Bc)}get levelLoLo(){return this.properties.getValue(Wc)}get levelHi(){return this.properties.getValue(Mc)}get levelHiHi(){return this.properties.getValue(Ic)}get limitsFromPv(){return this.properties.getValue(kc)}get logScale(){return this.properties.getValue(Hc)}get minimum(){return this.properties.getValue(Fc)}get majorTickStepHint(){return this.scale*this.properties.getValue(Nc)}get maximum(){return this.properties.getValue(Dc)}get origin(){return this.properties.getValue(Gc)}get originIgnored(){return this.properties.getValue($c)}get scaleFont(){return this.properties.getValue(Uc).scale(this.scale)}get scaleFormat(){return this.properties.getValue(Yc)}get showHi(){return this.properties.getValue(Xc)}get showHiHi(){return this.properties.getValue(zc)}get showLabel(){return this.properties.getValue(qc)}get showLo(){return this.properties.getValue(Kc)}get showLoLo(){return this.properties.getValue(jc)}get showMarkers(){return this.properties.getValue(Zc)}get showMinorTicks(){return this.properties.getValue(Jc)}get showScale(){return this.properties.getValue(Qc)}get transparentBackground(){return this.properties.getValue(tp)}get valueLabelFormat(){return this.properties.getValue(ep)}};var ip="color_hi",rp="color_hihi",sp="color_lo",op="color_lolo",np="color_fillbackground",ap="fill_color",lp="fillcolor_alarm_sensitive",hp="effect_3d",cp="level_hi",pp="level_hihi",dp="level_lo",up="level_lolo",gp="limits_from_pv",mp="log_scale",fp="maximum",xp="major_tick_step_hint",wp="minimum",yp="scale_font",bp="scale_format",Pp="show_hi",vp="show_hihi",_p="show_lo",Rp="show_lolo",Tp="show_markers",Cp="show_minor_ticks",Sp="show_scale",Lp="transparent_background",fg=new g(160,160,160),tr=class extends V{constructor(t,e){super(t,e),this.properties.add(new S(ip)),this.properties.add(new S(rp)),this.properties.add(new S(sp)),this.properties.add(new S(op)),this.properties.add(new S(np)),this.properties.add(new w(hp)),this.properties.add(new S(ap)),this.properties.add(new w(lp,!1)),this.properties.add(new B(cp)),this.properties.add(new B(pp)),this.properties.add(new B(dp)),this.properties.add(new B(up)),this.properties.add(new w(gp)),this.properties.add(new w(mp)),this.properties.add(new B(fp)),this.properties.add(new B(xp)),this.properties.add(new B(wp)),this.properties.add(new k(yp)),this.properties.add(new R(bp)),this.properties.add(new w(Pp)),this.properties.add(new w(vp)),this.properties.add(new w(_p)),this.properties.add(new w(Rp)),this.properties.add(new w(Tp)),this.properties.add(new w(Cp)),this.properties.add(new w(Sp)),this.properties.add(new w(Lp))}draw(t){let{scale:e,min:i,max:r}=this,s=this.area;this.borderAlarmSensitive&&(s=D(s,2*e));let o=this.alarmSensitiveBackgroundColor;this.transparentBackground||t.fillRect({...s,color:o});let n=this.alarmSensitiveForegroundColor,a=new et(this.display.formatter,e,this.scaleFont,i,r,this.logScale,this.majorTickStepHint,n,this.showMinorTicks,this.showScale);a.scaleFormat=this.scaleFormat;let l=a.drawVertical(t,s.x,s.y,s.height,!0),c=0;this.showMarkers&&(c=this.drawMarkers(t,s,a)),this.drawTank(t,s,l,c,a)}drawMarkers(t,e,i){let{lolo:r,lo:s,hi:o,hihi:n}=this,a=q.ARIAL_9.scale(this.scale),l=0;if(this.showLoLo&&r!==void 0){let h=t.measureText("LOLO",a);l=Math.max(l,h.width)}if(this.showLo&&s!==void 0){let h=t.measureText("LO",a);l=Math.max(l,h.width)}if(this.showHi&&o!==void 0){let h=t.measureText("HI",a);l=Math.max(l,h.width)}if(this.showHiHi&&n!==void 0){let h=t.measureText("HIHI",a);l=Math.max(l,h.width)}let c=e.x+e.width-l-this.markerGap-this.markerTickLength;if(this.showLoLo&&r!==void 0){let h=Math.round(i.getValuePosition(r));t.strokePath({path:new v(c,h).lineTo(c+this.markerTickLength,h),color:this.colorLoLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:c+this.markerTickLength+this.markerGap,y:h,text:"LOLO",align:"left",baseline:"middle",color:this.colorLoLo,font:a})}if(this.showLo&&s!==void 0){let h=Math.round(i.getValuePosition(s));t.strokePath({path:new v(c,h).lineTo(c+this.markerTickLength,h),color:this.colorLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:c+this.markerTickLength+this.markerGap,y:h,text:"LO",align:"left",baseline:"middle",color:this.colorLo,font:a})}if(this.showHi&&o!==void 0){let h=Math.round(i.getValuePosition(o));t.strokePath({path:new v(c,h).lineTo(c+this.markerTickLength,h),color:this.colorHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:c+this.markerTickLength+this.markerGap,y:h,text:"HI",align:"left",baseline:"middle",color:this.colorHi,font:a})}if(this.showHiHi&&n!==void 0){let h=Math.round(i.getValuePosition(n));t.strokePath({path:new v(c,h).lineTo(c+this.markerTickLength,h),color:this.colorHiHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:c+this.markerTickLength+this.markerGap,y:h,text:"HIHI",align:"left",baseline:"middle",color:this.colorHiHi,font:a})}return this.markerTickLength+this.markerGap+l}drawTank(t,e,i,r,s){let o=this.alarmSensitiveForegroundColor,{scale:n,outlineWidth:a}=this,l=e.x+i,c=e.y+s.margin,h=e.width-i-r,u=e.height-2*s.margin,f=this.defaultCorner,_=11/20;h<2*f&&(_=12/20);let b=Math.floor(h*_);f>2*b-h-2*a&&(f=2*b-h);let T=s.getValuePosition(this.getFillValue()),W=this.alarmSensitiveFillColor;if(this.effect3d){t.fillRect({x:l,y:c,width:h,height:u,rx:f/2,ry:f/2,color:g.WHITE});let L=t.createLinearGradient(l,c,l+b+2*n,c);L.addColorStop(0,this.colorFillbackground.toString()),L.addColorStop(1,g.WHITE.withAlpha(0).toString()),t.fillRect({x:l,y:c,width:b,height:u,rx:f/2,ry:f/2,gradient:L}),L=t.createLinearGradient(l+h-b-2*n,c,l+h,c),L.addColorStop(0,g.WHITE.withAlpha(0).toString()),L.addColorStop(1,this.colorFillbackground.toString()),t.fillRect({x:l+h-b,y:c,width:b,height:u,rx:f/2,ry:f/2,gradient:L});let M=T,N=c+u-T;L=t.createLinearGradient(l,M,l+b+2*n,M),L.addColorStop(0,W.toString()),L.addColorStop(1,g.WHITE.withAlpha(0).toString()),t.fillRect({x:l,y:M,width:b,height:N,rx:f/2,ry:f/2,gradient:L}),L=t.createLinearGradient(l+h-b-2*n,M,l+h,M),L.addColorStop(0,g.WHITE.withAlpha(0).toString()),L.addColorStop(1,W.toString()),t.fillRect({x:l+h-b,y:M,width:b,height:N,rx:f/2,ry:f/2,gradient:L})}else t.fillRect({x:l,y:c,width:h,height:u,rx:f/2,ry:f/2,color:this.colorFillbackground}),t.fillRect({x:l,y:T,width:h,height:c+u-T,rx:f/2,ry:f/2,color:W});let O=D({x:l,y:c,width:h,height:u},a/2);t.strokeRect({...O,rx:f/2,ry:f/2,color:this.effect3d?fg:o,lineWidth:a})}get min(){return this.limitsFromPv?this.pv?.lowerDisplayLimit??this.minimum:this.minimum}get max(){return this.limitsFromPv?this.pv?.upperDisplayLimit??this.maximum:this.maximum}get lolo(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.lowerAlarmLimit:this.levelLoLo}get lo(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.lowerWarningLimit:this.levelLo}get hi(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.upperWarningLimit:this.levelHi}get hihi(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.upperAlarmLimit:this.levelHiHi}get defaultCorner(){return this.scale*15}get markerTickLength(){return this.scale*10}get markerTickLineWidth(){return this.scale*2}get markerGap(){return this.scale*3}get outlineWidth(){return this.scale*1}get alarmSensitiveFillColor(){if(this.fillColorAlarmSensitive){if(this.isMajorSeverity())return this.display.majorColor;if(this.isMinorSeverity())return this.display.minorColor}return this.fillColor}getFillValue(){let t=this.pv?.value??this.min;return t=Math.max(this.min,t),t=Math.min(this.max,t),t}get colorLo(){return this.properties.getValue(sp)}get colorLoLo(){return this.properties.getValue(op)}get colorHi(){return this.properties.getValue(ip)}get colorHiHi(){return this.properties.getValue(rp)}get colorFillbackground(){return this.properties.getValue(np)}get fillColorAlarmSensitive(){return this.properties.getValue(lp)}get fillColor(){return this.properties.getValue(ap)}get effect3d(){return this.properties.getValue(hp)}get levelLo(){return this.properties.getValue(dp)}get levelLoLo(){return this.properties.getValue(up)}get levelHi(){return this.properties.getValue(cp)}get levelHiHi(){return this.properties.getValue(pp)}get limitsFromPv(){return this.properties.getValue(gp)}get logScale(){return this.properties.getValue(mp)}get minimum(){return this.properties.getValue(wp)}get majorTickStepHint(){return this.scale*this.properties.getValue(xp)}get maximum(){return this.properties.getValue(fp)}get scaleFont(){return this.properties.getValue(yp).scale(this.scale)}get scaleFormat(){return this.properties.getValue(bp)}get showLo(){return this.properties.getValue(_p)}get showLoLo(){return this.properties.getValue(Rp)}get showHi(){return this.properties.getValue(Pp)}get showHiHi(){return this.properties.getValue(vp)}get showMarkers(){return this.properties.getValue(Tp)}get showMinorTicks(){return this.properties.getValue(Cp)}get showScale(){return this.properties.getValue(Sp)}get transparentBackground(){return this.properties.getValue(Lp)}};var Ap="font",Ep="format_type",Op="horizontal_alignment",Vp="precision",Mp="precision_from_pv",Ip="show_lohi",Bp="show_units",Wp="vertical_alignment",er=class extends V{areaRegion;tooltipRegion;constructor(t,e){super(t,e),this.properties.add(new k(Ap)),this.properties.add(new P(Ep)),this.properties.add(new P(Op)),this.properties.add(new P(Vp)),this.properties.add(new w(Mp)),this.properties.add(new w(Ip,!0)),this.properties.add(new w(Bp,!0)),this.properties.add(new P(Wp))}init(){this.areaRegion={id:`${this.wuid}-area`,click:()=>{let t={pvName:this.pvName};this.display.fireEvent("openpv",t)},tooltip:()=>this.tooltip,cursor:"pointer"},this.tooltipRegion={id:`${this.wuid}-tooltip`,tooltip:()=>this.tooltip}}draw(t){let e=t.ctx;this.backgroundAlarmSensitive&&this.alarm?t.fillRect({...this.area,color:this.alarmSensitiveBackgroundColor}):this.transparent||t.fillRect({...this.area,color:this.backgroundColor}),this.pv&&this.pv.navigable&&!this.pv.disconnected?t.addHitRegion(this.areaRegion).addRect(this.x,this.y,this.width,this.height):this.tooltip&&t.addHitRegion(this.tooltipRegion).addRect(this.x,this.y,this.width,this.height);let{scale:i}=this,r=this.area;this.borderAlarmSensitive&&(r=D(r,2*i,2*i));let s=this.text;if(this.pv?.value!==void 0){let h=this.precisionFromPV?this.pv.precision:this.precision;h===-1&&(h=this.pv.precision??-1),s=Ft(this.pv.value,this.formatType,h,this.pv.typeHint)}else this.value!==void 0&&(s=Ft(this.value,this.formatType,this.precision,void 0));this.showUnits&&this.pv?.units&&(s+=" "+this.pv.units),this.showLohi&&(this.pv?.alarmName==="LOLO"||this.pv?.alarmName==="LOW"?s+=" \u2193":(this.pv?.alarmName==="HIHI"||this.pv?.alarmName==="HIGH")&&(s+=" \u2191"));let o=t.measureText(s,this.font,!0);e.font=this.font.getFontString(),e.textBaseline="alphabetic";let a=e.measureText(s).fontBoundingBoxAscent,l={x:r.x,y:r.y,width:o.width,height:o.height};this.horizAlignment===0||(this.horizAlignment===1?l.x+=(r.width-o.width)/2:this.horizAlignment===2&&(l.x+=r.width-o.width)),this.vertAlignment===0||r.height<=o.height||(this.vertAlignment===1?l.y+=r.height/2-o.height/2:this.vertAlignment===2&&(l.y+=r.height-o.height)),e.textAlign="start",e.textBaseline="top",l.y+=l.height/2-a/2,e.save(),e.beginPath();let c=this.area;e.rect(c.x,c.y,c.width,c.height),e.clip(),e.fillStyle=this.alarmSensitiveForegroundColor.toString(),e.fillText(s,l.x,l.y),e.restore()}get font(){return this.properties.getValue(Ap).scale(this.scale)}get formatType(){return this.properties.getValue(Ep)}get horizAlignment(){return this.properties.getValue(Op)}get precision(){return this.properties.getValue(Vp)}get precisionFromPV(){return this.properties.getValue(Mp)}get showLohi(){return this.properties.getValue(Ip)}get showUnits(){return this.properties.getValue(Bp)}get vertAlignment(){return this.properties.getValue(Wp)}};var kp="color_hi",Hp="color_hihi",Dp="color_lo",Np="color_lolo",Fp="color_fillbackground",Gp="fill_color",$p="fillcolor_alarm_sensitive",Up="font",Yp="effect_3d",Xp="level_hi",zp="level_hihi",qp="level_lo",Kp="level_lolo",jp="limits_from_pv",Zp="log_scale",Jp="maximum",Qp="major_tick_step_hint",td="minimum",ed="scale_font",id="scale_format",rd="show_bulb",sd="show_hi",od="show_hihi",nd="show_lo",ad="show_lolo",ld="show_markers",hd="show_minor_ticks",cd="show_scale",pd="transparent_background",dd="unit",ud="value_label_format",gd=new g(160,160,160),ir=class extends V{constructor(t,e){super(t,e),this.properties.add(new S(kp)),this.properties.add(new S(Hp)),this.properties.add(new S(Dp)),this.properties.add(new S(Np)),this.properties.add(new S(Fp)),this.properties.add(new S(Gp)),this.properties.add(new w($p,!1)),this.properties.add(new w(Yp)),this.properties.add(new B(Xp)),this.properties.add(new B(zp)),this.properties.add(new B(qp)),this.properties.add(new B(Kp)),this.properties.add(new w(jp)),this.properties.add(new k(Up)),this.properties.add(new w(Zp)),this.properties.add(new B(Jp)),this.properties.add(new B(Qp)),this.properties.add(new B(td)),this.properties.add(new k(ed)),this.properties.add(new R(id)),this.properties.add(new w(rd)),this.properties.add(new w(sd)),this.properties.add(new w(od)),this.properties.add(new w(nd)),this.properties.add(new w(ad)),this.properties.add(new w(ld)),this.properties.add(new w(hd)),this.properties.add(new w(cd)),this.properties.add(new w(pd)),this.properties.add(new P(dd)),this.properties.add(new R(ud))}draw(t){let{scale:e,min:i,max:r}=this,s=this.area;this.borderAlarmSensitive&&(s=D(this.area,2*this.scale));let o=this.alarmSensitiveBackgroundColor,n=this.alarmSensitiveForegroundColor,a=this.alarmSensitiveFillColor;this.transparentBackground||t.fillRect({...s,color:o});let l=s.height;if(this.showBulb){let O=Math.min(s.width/2,this.bulbMaxDiameter);l=s.height<O?0:s.height-O}let c={...s,height:l},h=new et(this.display.formatter,e,this.scaleFont,i,r,this.logScale,this.majorTickStepHint,n,this.showMinorTicks,this.showScale);h.scaleFormat=this.scaleFormat;let u=0,f="";if(this.unit===0?f="\xB0C":this.unit===1?f="\xB0F":this.unit===2&&(f="K"),f){let O=q.ARIAL_9.scale(e),L=t.measureText(f,O),M=2*e;u=L.height+2*M,t.fillText({x:s.x+s.width/2-this.pipeWidth/2-M,y:s.y+M,baseline:"top",align:"right",color:n,font:O,text:f})}let _=c.x+c.width/2-this.pipeWidth/2-1*e,b={...c,y:c.y+u,height:c.height-u+h.calculateMargin(t,!1)},T=h.drawVertical(t,_,b.y,b.height,!1),W=Math.floor(this.pipeWidth/2);if(c={...c,y:h.getValuePosition(r)-W,height:h.scaleLength+2*W},this.drawPipe(t,c,h),this.showMarkers&&this.drawMarkers(t,s,h),this.showBulb){let O=Math.min(s.width/2,this.bulbMaxDiameter),L=1*e,M=s.x+s.width/2,N=s.y+l+O/2,F=O/2,X=O/2;if(t.fillEllipse({cx:M,cy:N,rx:F,ry:X,color:a}),this.effect3d){let it=t.createLinearGradient(M-F,N-X,M+F,N+X);it.addColorStop(0,g.WHITE.toString()),it.addColorStop(1,a.withAlpha(0).toString()),t.fillEllipse({cx:M,cy:N,rx:F,ry:X,gradient:it})}t.strokeEllipse({cx:M,cy:N,rx:F-L/2,ry:X-L/2,color:this.effect3d?gd:n,lineWidth:L});let j={x:Math.round(c.x+c.width/2-this.pipeWidth/2)+this.outlineWidth,y:Math.floor(h.getValuePosition(i)),width:this.pipeWidth-2*this.outlineWidth,height:e*3};if(this.effect3d){let it=Math.round(c.x+c.width/2-this.pipeWidth/2),dt=it+this.pipeWidth,ot=t.createLinearGradient(it,j.y,dt,j.y);ot.addColorStop(0,g.WHITE.toString()),ot.addColorStop(1,a.toString()),t.fillRect({...j,gradient:ot})}else t.fillRect({...j,color:a});let pt=this.pv?.value;pt&&t.fillText({x:M,y:N,align:"center",baseline:"middle",color:a.contrast(),font:this.font,text:this.format(pt)})}}drawPipe(t,e,i){let{scale:r,outlineWidth:s,min:o,max:n}=this,a=this.alarmSensitiveForegroundColor,l=this.alarmSensitiveFillColor,c={x:Math.round(e.x+e.width/2-this.pipeWidth/2),y:e.y,width:this.pipeWidth,height:e.height},h=this.getFillValue(),u=i.getValuePosition(h);n>o?h>n?u-=10*r:h<o&&(u+=10*r):h>o?u+=10*r:h<n&&(u-=10*r);let f=this.pipeWidth/2,{x:_,y:b,width:T,height:W}=c;if(this.effect3d){let L=t.createLinearGradient(_,b,_+T,b);L.addColorStop(0,g.WHITE.toString()),L.addColorStop(1,this.colorFillbackground.toString()),t.fillRect({...c,rx:f/2,ry:f/2,gradient:L}),L=t.createLinearGradient(_,b,_+T,b),L.addColorStop(0,g.WHITE.toString()),L.addColorStop(1,l.toString()),t.fillRect({x:_,y:u,width:T,height:b+W-u,rx:f/2,ry:f/2,gradient:L})}else t.fillRect({...c,rx:f/2,ry:f/2,color:this.colorFillbackground}),t.fillRect({x:_,y:u,width:T,height:b+W-u,rx:f/2,ry:f/2,color:l});let O=D(c,s/2);t.strokeRect({...O,rx:f/2,ry:f/2,color:this.effect3d?gd:a,lineWidth:s})}drawMarkers(t,e,i){let{lolo:r,lo:s,hi:o,hihi:n}=this,a=q.ARIAL_9.scale(this.scale),l=e.x+e.width/2+this.pipeWidth/2;if(this.showLoLo&&r!==void 0){let c=Math.round(i.getValuePosition(r));t.strokePath({path:new v(l,c).lineTo(l+this.markerTickLength,c),color:this.colorLoLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:l+this.markerTickLength+this.markerGap,y:c,text:"LOLO",align:"left",baseline:"middle",color:this.colorLoLo,font:a})}if(this.showLo&&s!==void 0){let c=Math.round(i.getValuePosition(s));t.strokePath({path:new v(l,c).lineTo(l+this.markerTickLength,c),color:this.colorLo,lineWidth:this.markerTickLineWidth}),t.fillText({x:l+this.markerTickLength+this.markerGap,y:c,text:"LO",align:"left",baseline:"middle",color:this.colorLo,font:a})}if(this.showHi&&o!==void 0){let c=Math.round(i.getValuePosition(o));t.strokePath({path:new v(l,c).lineTo(l+this.markerTickLength,c),color:this.colorHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:l+this.markerTickLength+this.markerGap,y:c,text:"HI",align:"left",baseline:"middle",color:this.colorHi,font:a})}if(this.showHiHi&&n!==void 0){let c=Math.round(i.getValuePosition(n));t.strokePath({path:new v(l,c).lineTo(l+this.markerTickLength,c),color:this.colorHiHi,lineWidth:this.markerTickLineWidth}),t.fillText({x:l+this.markerTickLength+this.markerGap,y:c,text:"HIHI",align:"left",baseline:"middle",color:this.colorHiHi,font:a})}}get min(){return this.limitsFromPv?this.pv?.lowerDisplayLimit??this.minimum:this.minimum}get max(){return this.limitsFromPv?this.pv?.upperDisplayLimit??this.maximum:this.maximum}get lolo(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.lowerAlarmLimit:this.levelLoLo}get lo(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.lowerWarningLimit:this.levelLo}get hi(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.upperWarningLimit:this.levelHi}get hihi(){return this.limitsFromPv&&this.pv&&!this.pv.disconnected?this.pv.upperAlarmLimit:this.levelHiHi}get pipeWidth(){return this.scale*15}get bulbMaxDiameter(){return this.scale*40}get outlineWidth(){return this.scale*1}get markerTickLength(){return this.scale*10}get markerTickLineWidth(){return this.scale*2}get markerGap(){return this.scale*3}get alarmSensitiveFillColor(){if(this.fillColorAlarmSensitive){if(this.isMajorSeverity())return this.display.majorColor;if(this.isMinorSeverity())return this.display.minorColor}return this.fillColor}getFillValue(){let t=this.pv?.value??this.min;return t=Math.max(this.min,t),t=Math.min(this.max,t),t}format(t){return this.valueLabelFormat?new st(this.valueLabelFormat).format(t):String(Number(t.toFixed(3)))}get colorLo(){return this.properties.getValue(Dp)}get colorLoLo(){return this.properties.getValue(Np)}get colorHi(){return this.properties.getValue(kp)}get colorHiHi(){return this.properties.getValue(Hp)}get colorFillbackground(){return this.properties.getValue(Fp)}get fillColorAlarmSensitive(){return this.properties.getValue($p)}get fillColor(){return this.properties.getValue(Gp)}get font(){return this.properties.getValue(Up).scale(this.scale)}get effect3d(){return this.properties.getValue(Yp)}get levelLo(){return this.properties.getValue(qp)}get levelLoLo(){return this.properties.getValue(Kp)}get levelHi(){return this.properties.getValue(Xp)}get levelHiHi(){return this.properties.getValue(zp)}get limitsFromPv(){return this.properties.getValue(jp)}get logScale(){return this.properties.getValue(Zp)}get minimum(){return this.properties.getValue(td)}get majorTickStepHint(){return this.scale*this.properties.getValue(Qp)}get maximum(){return this.properties.getValue(Jp)}get scaleFont(){return this.properties.getValue(ed).scale(this.scale)}get scaleFormat(){return this.properties.getValue(id)}get showBulb(){return this.properties.getValue(rd)}get showMarkers(){return this.properties.getValue(ld)}get showMinorTicks(){return this.properties.getValue(hd)}get showLo(){return this.properties.getValue(nd)}get showLoLo(){return this.properties.getValue(ad)}get showHi(){return this.properties.getValue(sd)}get showHiHi(){return this.properties.getValue(od)}get showScale(){return this.properties.getValue(cd)}get transparentBackground(){return this.properties.getValue(pd)}get unit(){return this.properties.getValue(dd)}get valueLabelFormat(){return this.properties.getValue(ud)}};var md=-323.3062,fd=308.2547,rr=class{constructor(t,e){this.widget=t;this.index=e}linearScale;_effectiveMinimum;_effectiveMaximum;get scale(){return this.widget.scale}getValue(t){return this.widget.properties.getValue(`axis_${this.index}_${t}`)}isDateEnabled(){return this.timeFormat!==0}isHorizontal(){return this.index===0||this.index!==1&&!this.yAxis}isVertical(){return!this.isHorizontal()}isPrimary(){return this.index<=1}get effectiveMinimum(){return this._effectiveMinimum??this.minimum}set effectiveMinimum(t){this._effectiveMinimum=t}get effectiveMaximum(){return this._effectiveMaximum??this.maximum}set effectiveMaximum(t){this._effectiveMaximum=t}performAutoScale(){let t={start:this.minimum,stop:this.maximum},e=this.widget.calculateAutoscaledRange(this,t);e&&(this.effectiveMinimum=e.start,this.effectiveMaximum=e.stop,this.widget.requestRepaint())}applyZoom(t,e){let i=this.effectiveMinimum,r=this.effectiveMaximum,s,o;if(this.logScale){r=Math.log10(r),i=Math.log10(i);let n=Math.log10(t)*e,a=1-e;s=n+i*a,o=n+r*a,s<md&&(s=md),s=Math.pow(10,s),o>fd&&(o=fd),o=Math.pow(10,o)}else{let n=Math.max(Math.abs(i),Math.abs(r));i/=n,r/=n;let a=t/n*e,l=1-e;s=(a+i*l)*n,o=(a+r*l)*n}this.effectiveMinimum=s,this.effectiveMaximum=o,this.widget.requestRepaint()}get autoScale(){return this.getValue("auto_scale")}get autoScaleTreshold(){return this.getValue("auto_scale_treshold")}get axisColor(){return this.getValue("axis_color")}get axisTitle(){return this.getValue("axis_title")}get dashGridLine(){return this.getValue("dash_grid_line")}get gridColor(){return this.getValue("grid_color")}get leftBottomSide(){return this.getValue("left_bottom_side")}get logScale(){return this.getValue("log_scale")}get maximum(){return this.getValue("maximum")}get minimum(){return this.getValue("minimum")}get scaleFont(){return this.getValue("scale_font").scale(this.scale)}get scaleFormat(){return this.getValue("scale_format")}get showGrid(){return this.getValue("show_grid")}get timeFormat(){return this.getValue("time_format")}get titleFont(){return this.getValue("title_font").scale(this.scale)}get visible(){return this.getValue("visible")}get yAxis(){return this.getValue("y_axis")}};var ct=class{constructor(t,e){this.xAxis=t;this.yAxis=e;for(let i of t)this.beforeXRanges.push({min:i.effectiveMinimum,max:i.effectiveMaximum});for(let i of e)this.beforeYRanges.push({min:i.effectiveMinimum,max:i.effectiveMaximum})}beforeXRanges=[];beforeYRanges=[];afterXRanges=[];afterYRanges=[];saveState(){for(let t of this.xAxis)this.afterXRanges.push({min:t.effectiveMinimum,max:t.effectiveMaximum});for(let t of this.yAxis)this.afterYRanges.push({min:t.effectiveMinimum,max:t.effectiveMaximum})}undo(){for(let t=0;t<this.xAxis.length;t++){let e=this.xAxis[t],i=this.beforeXRanges[t];e.effectiveMinimum=i.min,e.effectiveMaximum=i.max}for(let t=0;t<this.yAxis.length;t++){let e=this.yAxis[t],i=this.beforeYRanges[t];e.effectiveMinimum=i.min,e.effectiveMaximum=i.max}}redo(){for(let t=0;t<this.xAxis.length;t++){let e=this.xAxis[t],i=this.afterXRanges[t];e.effectiveMinimum=i.min,e.effectiveMaximum=i.max}for(let t=0;t<this.yAxis.length;t++){let e=this.yAxis[t],i=this.afterYRanges[t];e.effectiveMinimum=i.min,e.effectiveMaximum=i.max}}},sr=class{undoStack=[];redoStack=[];canUndo(){return this.undoStack.length>0}canRedo(){return this.redoStack.length>0}add(t){this.undoStack.push(t),this.redoStack.length=0}undo(){let t=this.undoStack.pop();t&&(t.undo(),this.redoStack.push(t))}redo(){let t=this.redoStack.pop();t&&(t.redo(),this.undoStack.push(t))}};var or=class{constructor(t,e){this.widget=e;this.id=t}id;cursor;selection;grabStart;prevGrabEvent;grabZoomCommand;tooltip(){return this.widget.tooltip}mouseDown(t){let{widget:e}=this;switch(e.toolbar?.currentTool){case"rubberband-zoom":case"horizontal-zoom":case"vertical-zoom":this.grabStart=t;break;case"panning":this.grabZoomCommand=new ct(e.getXAxes(),e.getYAxes());break}}grab(t){switch(this.widget.toolbar?.currentTool){case"rubberband-zoom":case"horizontal-zoom":case"vertical-zoom":this.grabStart&&(this.selection={...this.grabStart.point,width:t.dx,height:t.dy},this.widget.requestRepaint());break;case"panning":this.pan(t),this.prevGrabEvent=t,this.widget.requestRepaint();break}}grabEnd(){let{grabZoomCommand:t,selection:e,widget:i}=this;switch(i.toolbar?.currentTool){case"rubberband-zoom":if(e){let r=new ct(i.getXAxes(),i.getYAxes());this.rangeZoomXAxes(e),this.rangeZoomYAxes(e),r.saveState(),i.toolbar.addCommand(r)}break;case"horizontal-zoom":if(e){let r=new ct(i.getXAxes(),i.getYAxes());this.rangeZoomXAxes(e),r.saveState(),i.toolbar.addCommand(r)}break;case"vertical-zoom":if(e){let r=new ct(i.getXAxes(),i.getYAxes());this.rangeZoomYAxes(e),r.saveState(),i.toolbar.addCommand(r)}break;case"panning":t&&(t.saveState(),i.toolbar.addCommand(t));break}this.selection=void 0,this.prevGrabEvent=void 0,this.grabZoomCommand=void 0,this.widget.requestRepaint()}click(t){let{widget:e}=this;switch(e.toolbar?.currentTool){case"zoom-in":let i=new ct(e.getXAxes(),e.getYAxes());for(let s of e.getAxes()){let o=s.isHorizontal()?t.point.x:t.point.y,n=s.linearScale.getPositionValue(o);s.applyZoom(n,.1)}i.saveState(),e.toolbar.addCommand(i);break;case"zoom-out":let r=new ct(e.getXAxes(),e.getYAxes());for(let s of e.getAxes()){let o=s.isHorizontal()?t.point.x:t.point.y,n=s.linearScale.getPositionValue(o);s.applyZoom(n,-.1)}r.saveState(),e.toolbar.addCommand(r);break}}rangeZoomXAxes(t){for(let e of this.widget.getXAxes()){let i=e.linearScale.getPositionValue(t.x),r=e.linearScale.getPositionValue(t.x+t.width);if(i>r){let o=i;i=r,r=o}let s=e.linearScale.getMinMax();i=Math.max(s.start,i),r=Math.min(s.stop,r),e.effectiveMinimum=i,e.effectiveMaximum=r}}rangeZoomYAxes(t){for(let e of this.widget.getYAxes()){let i=e.linearScale.getPositionValue(t.y),r=e.linearScale.getPositionValue(t.y+t.height);if(i>r){let o=i;i=r,r=o}let s=e.linearScale.getMinMax();i=Math.max(s.start,i),r=Math.min(s.stop,r),e.effectiveMinimum=i,e.effectiveMaximum=r}}pan(t){let{prevGrabEvent:e,widget:i}=this;if(e){let r=e.dx-t.dx;if(r!==0)for(let o of i.getXAxes()){let n=o.linearScale,a=n.getMinMax(),l=n.getValuePosition(a.start)+r,c=n.getValuePosition(a.stop)+r;o.effectiveMinimum=n.getPositionValue(l),o.effectiveMaximum=n.getPositionValue(c)}let s=e.dy-t.dy;if(s!==0)for(let o of i.getYAxes()){let n=o.linearScale,a=n.getMinMax(),l=n.getValuePosition(a.start)+s,c=n.getValuePosition(a.stop)+s;o.effectiveMinimum=n.getPositionValue(l),o.effectiveMaximum=n.getPositionValue(c)}}}};var Hr=class{pointer=0;samples=[];constructor(t){this.samples=Array(t).fill(void 0)}push(t,e){this.samples[this.pointer]={x:t,y:e},this.pointer=(this.pointer+1)%this.samples.length}clear(){this.samples.fill(void 0),this.pointer=0}isFull(){let t=(this.pointer+1)%this.samples.length;return this.samples[t]!==void 0}isEmpty(){return this.tail()===void 0}tail(){return this.pointer===0?this.samples[this.samples.length-1]:this.samples[this.pointer-1]}snapshot(t=!1){if(t)return this.samples.filter(i=>i!==void 0).sort((i,r)=>i.x-r.x);{let e=this.samples.slice(this.pointer).filter(r=>r!==void 0),i=this.samples.slice(0,this.pointer).filter(r=>r!==void 0);return e.concat(i)}}},nr=class{constructor(t,e,i,r,s,o){this.bufferSize=t;this.plotMode=e;this.updateMode=i;this.concatenateData=r;this.chronological=s;this.historicalDataProvider=o;this.traceData=new Hr(t)}traceData;x=0;xPending=!1;y=0;yTimestamp=0;yPending=!1;xArray=[];xArrayPending=!1;yArray=[];yArrayPending=!1;clear(){this.traceData.clear(),this.x=0,this.xPending=!1,this.y=0,this.yPending=!1,this.yTimestamp=0,this.xArray=[],this.xArrayPending=!1,this.yArray=[],this.yArrayPending=!1}snapshot(){return this.historicalDataProvider?this.historicalDataProvider.getSamples():this.traceData.snapshot()}updateX(t){this.x=t,this.xPending=!0,this.maybeAddPoint()}updateY(t,e){this.y=t,this.yTimestamp=e,this.yPending=!0,this.maybeAddPoint()}updateXArray(t){this.xArray=t,this.xArrayPending=!0,this.maybeAddArray()}updateYArray(t){this.yArray=t,this.yArrayPending=!0,this.maybeAddArray()}maybeAddPoint(){if(this.plotMode===1&&this.traceData.isFull())return;let{xPending:t,yPending:e,chronological:i,updateMode:r}=this;r===0?(i&&e||!i&&(t||e))&&this.addPoint():r===1?(i&&e||!i&&t&&e)&&this.addPoint():r===2?(i&&e||!i&&t)&&this.addPoint():r===3&&this.yPending&&this.addPoint()}maybeAddArray(){if(this.plotMode===1&&this.traceData.isFull())return;let{xArrayPending:t,yArrayPending:e,chronological:i,updateMode:r}=this;r===0?(i&&e||!i&&(t||e))&&this.addArray():r===1?(i&&e||!i&&t&&e)&&this.addArray():r===2?(i&&e||!i&&t)&&this.addArray():r===3&&this.yArrayPending&&this.addArray()}addPoint(){this.concatenateData||this.traceData.clear();let t=this.x;if(this.chronological)if(this.updateMode===5)t=new Date().getTime();else if(this.yTimestamp!==void 0)t=this.yTimestamp;else{let e=this.traceData.tail();t=e?e.x+1:0}this.traceData.push(t,this.y),this.xPending=!1,this.yPending=!1}addArray(){this.concatenateData||this.traceData.clear();let{xArray:t,yArray:e}=this;if(this.chronological)if(t=Array(e.length),this.traceData.isEmpty())for(let s=0;s<e.length;s++)t[s]=s;else{let s=this.traceData.tail();for(let o=1;o<e.length;o++)t[o-1]=s.x+o}let i=Math.min(t.length,e.length),r=Math.min(i,this.bufferSize);for(let s=0;s<r;s++)this.traceData.push(t[s],e[s]);this.xArrayPending=!1,this.yArrayPending=!1}};var ar=class{constructor(t,e){this.widget=t;this.i=e}traceData;historicalDataProvider;xPVInstance;yPVInstance;xPVListener=()=>{let t=this.xPVInstance;if(t)if(Array.isArray(t.value))this.traceData?.updateXArray(t.value);else{let e=t.toNumber();e!=null&&this.traceData?.updateX(e)}};yPVListener=()=>{let t=this.yPVInstance;if(t)if(Array.isArray(t.value))this.traceData?.updateYArray(t.value);else{let e=this.widget.getAxis(this.xAxisIndex),i=t.toNumber();if(i!=null)if(e.isDateEnabled()){let r=(t.time||new Date).getTime();this.traceData?.updateY(i,r)}else this.traceData?.updateY(i)}};init(){let{bufferSize:t,plotMode:e,updateMode:i,concatenateData:r,widget:s}=this,o=!this.xPV,{pvEngine:n}=s.display;this.historicalDataProvider=void 0,o&&this.yPV&&(this.historicalDataProvider=n.createHistoricalDataProvider(this.yPV,s)||void 0),this.traceData=new nr(t,e,i,r,o,this.historicalDataProvider),this.xPV&&(this.xPVInstance=n.createPV(this.xPV),this.xPVInstance.addListener(this.xPVListener)),this.yPV&&(this.yPVInstance=n.createPV(this.yPV),this.yPVInstance.addListener(this.yPVListener)),s.addPropertyListener(`trace_${this.i}_x_pv`,()=>{let a=n.createPV(this.xPV);a!==this.xPVInstance&&(this.xPVInstance?.removeListener(this.xPVListener),this.xPVInstance=a,this.xPVInstance.addListener(this.xPVListener))}),s.addPropertyListener(`trace_${this.i}_y_pv`,()=>{let a=n.createPV(this.yPV);a!==this.yPVInstance&&(this.yPVInstance?.removeListener(this.yPVListener),this.yPVInstance=a,this.yPVInstance.addListener(this.yPVListener))})}snapshot(){return this.traceData?.snapshot()||[]}drawTrace(t,e){let{lineWidth:i}=this;if(this.traceType===0)t.strokePath({path:v.fromPoints(e),color:this.traceColor,lineWidth:i});else if(this.traceType===1)t.strokePath({path:v.fromPoints(e),color:this.traceColor,lineWidth:i,dash:[6*this.scale,2*this.scale]});else if(this.traceType!==2){if(this.traceType===3){let s=this.widget.getAxis(this.yAxisIndex).linearScale.getValuePosition(0);for(let o of e)o.y!==null&&t.strokePath({path:new v(o.x,o.y).lineTo(o.x,s),lineWidth:i,color:this.traceColor,opacity:100/255})}else if(this.traceType===4||this.traceType===5){let s=this.widget.getAxis(this.yAxisIndex).linearScale.getValuePosition(0);for(let o=1;o<e.length;o++){let n=e[o-1],a=e[o];n.y!==null&&a.y!==null&&t.fillPath({path:new v(n.x,n.y).lineTo(n.x,s).lineTo(a.x,s).lineTo(a.x,a.y),color:this.traceColor,opacity:100/255})}this.traceType===5&&t.strokePath({path:v.fromPoints(e),color:this.traceColor,lineWidth:i})}else if(this.traceType===6)for(let r=1;r<e.length;r++){let s=e[r-1],o=e[r];s.y!==null&&o.y!==null&&t.strokePath({path:new v(s.x,s.y).lineTo(s.x,o.y).lineTo(o.x,o.y),color:this.traceColor,lineWidth:i})}else if(this.traceType===7)for(let r=1;r<e.length;r++){let s=e[r-1],o=e[r];s.y!==null&&o.y!==null&&t.strokePath({path:new v(s.x,s.y).lineTo(o.x,s.y).lineTo(o.x,o.y),color:this.traceColor,lineWidth:i})}else if(this.traceType===8){let{scale:r}=this;t.strokePath({path:v.fromPoints(e),color:this.traceColor,lineWidth:i,dash:[6*r,2*r,2*r,2*r]})}else if(this.traceType===9){let{scale:r}=this;t.strokePath({path:v.fromPoints(e),color:this.traceColor,lineWidth:i,dash:[6*r,2*r,2*r,2*r,2*r,2*r]})}else if(this.traceType===10){let{scale:r}=this;t.strokePath({path:v.fromPoints(e),color:this.traceColor,lineWidth:i,dash:[2*r,2*r]})}}}drawPoint(t,e){t.ctx.fillStyle=this.traceColor.toString(),t.ctx.strokeStyle=this.traceColor.toString(),t.ctx.lineWidth=1*this.scale;let i=this.pointSize/2,r=e.x,s=e.y;switch(this.pointStyle){case 1:t.ctx.beginPath(),t.ctx.ellipse(r,s,i,i,0,0,2*Math.PI),t.ctx.fill();break;case 2:t.ctx.beginPath(),t.ctx.ellipse(r,s,i,i,0,0,2*Math.PI),t.ctx.stroke();break;case 3:t.ctx.beginPath(),t.ctx.ellipse(r,s,i,i,0,0,2*Math.PI),t.ctx.fill();break;case 4:t.ctx.lineWidth=1*this.scale,t.ctx.beginPath(),t.ctx.moveTo(r-i,s+i),t.ctx.lineTo(r,s-i),t.ctx.lineTo(r+i,s+i),t.ctx.closePath(),t.ctx.stroke();break;case 5:t.ctx.lineWidth=1*this.scale,t.ctx.beginPath(),t.ctx.moveTo(r-i,s+i),t.ctx.lineTo(r,s-i),t.ctx.lineTo(r+i,s+i),t.ctx.closePath(),t.ctx.fill();break;case 6:t.ctx.strokeRect(r-i,s-i,2*i,2*i);break;case 7:t.ctx.fillRect(r-i,s-i,2*i,2*i);break;case 8:t.ctx.beginPath(),t.ctx.moveTo(r-i,s),t.ctx.lineTo(r,s-i),t.ctx.lineTo(r+i,s),t.ctx.lineTo(r,s+i),t.ctx.closePath(),t.ctx.stroke();break;case 9:t.ctx.beginPath(),t.ctx.moveTo(r-i,s),t.ctx.lineTo(r,s-i),t.ctx.lineTo(r+i,s),t.ctx.lineTo(r,s+i),t.ctx.closePath(),t.ctx.stroke();break;case 10:t.ctx.beginPath(),t.ctx.moveTo(r-i,s-i),t.ctx.lineTo(r+i,s+i),t.ctx.moveTo(r+i,s-i),t.ctx.lineTo(r-i,s+i),t.ctx.stroke();break;case 11:t.ctx.beginPath(),t.ctx.moveTo(r-i,s),t.ctx.lineTo(r+i,s),t.ctx.moveTo(r,s-i),t.ctx.lineTo(r,s+i),t.ctx.stroke();break;case 12:t.ctx.beginPath(),t.ctx.moveTo(r,s-i),t.ctx.lineTo(r,s+i),t.ctx.stroke()}}clearData(){this.traceData?.clear()}get scale(){return this.widget.scale}getValue(t){return this.widget.properties.getValue(`trace_${this.i}_${t}`)}get antiAlias(){return this.getValue("anti_alias")}get bufferSize(){return this.getValue("buffer_size")}get concatenateData(){return this.getValue("concatenate_data")}get lineWidth(){return this.scale*this.getValue("line_width")}get name(){return this.getValue("name")}get plotMode(){return this.getValue("plot_mode")}get pointSize(){return this.scale*this.getValue("point_size")}get pointStyle(){return this.getValue("point_style")}get traceColor(){return this.getValue("trace_color")}get traceType(){return this.getValue("trace_type")}get updateDelay(){return this.getValue("update_delay")}get updateMode(){return this.getValue("update_mode")}get visible(){return this.getValue("visible")}get xAxisIndex(){return this.getValue("x_axis_index")}get xPV(){return this.getValue("x_pv")}get yAxisIndex(){return this.getValue("y_axis_index")}get yPV(){return this.getValue("y_pv")}destroy(){this.historicalDataProvider?.disconnect()}};var xg=new g(236,236,236),wg=new g(130,130,130),Dr=class{constructor(t,e,i,r,s){this.imageFile=e;this.disabledImageFile=i;this.action=s;this.loadPromise=new Promise((o,n)=>{this.imageElement.onload=()=>o()}),this.disabledLoadPromise=new Promise((o,n)=>{this.disabledImageElement.onload=()=>o()}),this.region={id:`${t.xyGraph.wuid}-${e}`,mouseDown:()=>{this.toggleButton||(this.pushed=!0,t.xyGraph.requestRepaint())},mouseOut:()=>{this.toggleButton||(this.pushed=!1),t.xyGraph.requestRepaint()},mouseUp:()=>{this.toggleButton||(this.pushed=!1,t.xyGraph.requestRepaint())},click:()=>{this.toggleButton&&(this.pushed=!this.pushed,this.toolButton&&t.toggleTool(this)),this.action(),t.updateState()},tooltip:()=>r}}imageElement=new Image;disabledImageElement=new Image;loadPromise;disabledLoadPromise;toggleButton=!1;toolButton=!1;pushed=!1;disabled=!1;region;loadImage(t){this.imageElement.src=t+this.imageFile,this.disabledImageElement.src=t+this.disabledImageFile}},lr=class{constructor(t){this.xyGraph=t;this.showLegend=this.createToggleButton("ShowLegend.png","Show Legend",()=>{t.properties.setValue("show_legend",this.showLegend.pushed)}),this.showLegend.pushed=t.showLegend,t.addPropertyListener("show_legend",i=>{this.showLegend.pushed=i}),this.autoScale=this.createButton("AutoScale.png","AutoScale.png","Perform Auto Scale",()=>{let i=new ct(t.getXAxes(),t.getYAxes());t.performAutoScale(),i.saveState(),this.addCommand(i)}),this.rubberbandZoom=this.createToolButton("RubberbandZoom.png","Rubberband Zoom",()=>{this.rubberbandZoom.pushed?(this.currentTool="rubberband-zoom",t.setCursor("crosshair"),t.autoScaleAllowed=!1):(this.currentTool="default",t.setCursor(void 0),t.autoScaleAllowed=!0)}),this.horizontalZoom=this.createToolButton("HorizontalZoom.png","Horizontal Zoom",()=>{this.horizontalZoom.pushed?(this.currentTool="horizontal-zoom",t.setCursor("col-resize"),t.autoScaleAllowed=!1):(this.currentTool="default",t.setCursor(void 0),t.autoScaleAllowed=!0)}),this.verticalZoom=this.createToolButton("VerticalZoom.png","Vertical Zoom",()=>{this.verticalZoom.pushed?(this.currentTool="vertical-zoom",t.setCursor("row-resize"),t.autoScaleAllowed=!1):(this.currentTool="default",t.setCursor(void 0),t.autoScaleAllowed=!0)}),this.zoomIn=this.createToolButton("ZoomIn.png","Zoom In",()=>{this.zoomIn.pushed?(this.currentTool="zoom-in",t.setCursor("zoom-in"),t.autoScaleAllowed=!1):(this.currentTool="default",t.setCursor(void 0),t.autoScaleAllowed=!0)}),this.zoomOut=this.createToolButton("ZoomOut.png","Zoom Out",()=>{this.zoomOut.pushed?(this.currentTool="zoom-out",t.setCursor("zoom-out"),t.autoScaleAllowed=!1):(this.currentTool="default",t.setCursor(void 0),t.autoScaleAllowed=!0)}),this.panning=this.createToolButton("Panning.png","Panning",()=>{this.panning.pushed?(this.currentTool="panning",t.setCursor("grab"),t.autoScaleAllowed=!1):(this.currentTool="default",t.setCursor(void 0),t.autoScaleAllowed=!0)}),this.mouseArrow=this.createToolButton("MouseArrow.png","None",()=>{this.currentTool="default",t.setCursor(void 0),t.autoScaleAllowed=!0}),this.undo=this.createButton("Undo.png","Undo_Gray.png","Undo",()=>{this.commandBuffer.undo()}),this.undo.disabled=!0,this.redo=this.createButton("Redo.png","Redo_Gray.png","Redo",()=>{this.commandBuffer.redo()}),this.redo.disabled=!0,this.camera=this.createButton("camera.png","camera.png","Save Snapshot to PNG File",()=>{let i=document.createElement("a");try{i.href=t.toDataURL(),i.download=`${t.name}_export.png`,document.body.appendChild(i),i.click()}finally{document.body.removeChild(i)}}),this.toggleTool(this.mouseArrow);let e=this.buttons.map(i=>i.loadPromise).concat(this.buttons.map(i=>i.disabledLoadPromise));Promise.all(e).finally(()=>{this.imagesLoaded=!0,t.requestRepaint()});for(let i of this.buttons)i.loadImage(t.display.imagesPrefix)}buttons=[];showLegend;autoScale;rubberbandZoom;horizontalZoom;verticalZoom;zoomIn;zoomOut;panning;mouseArrow;undo;redo;camera;imagesLoaded=!1;currentTool="default";commandBuffer=new sr;updateState(){this.undo.disabled=!this.commandBuffer.canUndo(),this.redo.disabled=!this.commandBuffer.canRedo(),this.xyGraph.requestRepaint()}addCommand(t){this.commandBuffer.add(t),this.updateState()}toggleTool(t){let e=t.pushed;for(let i of this.buttons)i.toolButton&&(i.pushed=!1);e?t.pushed=!0:this.mouseArrow.pushed=!0,this.xyGraph.requestRepaint()}createToolButton(t,e,i){let r=this.createToggleButton(t,e,i);return r.toolButton=!0,r}createToggleButton(t,e,i){let r=this.createButton(t,t,e,i);return r.toggleButton=!0,r}createButton(t,e,i,r){let s=new Dr(this,t,e,i,r);return this.buttons.push(s),s}draw(t,e){let{buttonSize:i}=this,r={x:e.x,y:e.y};return this.drawButton(t,r.x,r.y,this.showLegend),r.x+=i,this.maybeWrap(r,e),this.drawButton(t,r.x,r.y,this.autoScale),r.x+=i,this.maybeWrap(r,e,i/2),this.drawSeparator(t,r.x,r.y),r.x+=i/2,this.maybeWrap(r,e),this.drawButton(t,r.x,r.y,this.rubberbandZoom),r.x+=i,this.maybeWrap(r,e),this.drawButton(t,r.x,r.y,this.horizontalZoom),r.x+=i,this.maybeWrap(r,e),this.drawButton(t,r.x,r.y,this.verticalZoom),r.x+=i,this.maybeWrap(r,e),this.drawButton(t,r.x,r.y,this.zoomIn),r.x+=i,this.maybeWrap(r,e),this.drawButton(t,r.x,r.y,this.zoomOut),r.x+=i,this.maybeWrap(r,e),this.drawButton(t,r.x,r.y,this.panning),r.x+=i,this.maybeWrap(r,e),this.drawButton(t,r.x,r.y,this.mouseArrow),r.x+=i,this.maybeWrap(r,e,i/2),this.drawSeparator(t,r.x,r.y),r.x+=i/2,this.maybeWrap(r,e),this.drawButton(t,r.x,r.y,this.undo),r.x+=i,this.maybeWrap(r,e),this.drawButton(t,r.x,r.y,this.redo),r.x+=i,this.maybeWrap(r,e,i/2),this.drawSeparator(t,r.x,r.y),r.x+=i/2,this.maybeWrap(r,e),this.drawButton(t,r.x,r.y,this.camera),r.x+=i,r.y+i-e.y}maybeWrap(t,e,i){i=i??this.buttonSize,t.x+i>e.x+e.width&&(t.x=e.x,t.y+=this.buttonSize)}drawSeparator(t,e,i){let{buttonSize:r}=this,s=1*this.scale,o=Math.round(e+r/4)-s/2;t.strokePath({path:new v(o,i).lineTo(o,i+r),color:wg,lineWidth:s})}drawButton(t,e,i,r){let{buttonSize:s,scale:o}=this;t.fillRect({x:e,y:i,width:s,height:s,color:xg}),this.xyGraph.enabled&&!r.disabled&&t.addHitRegion(r.region).addRect(e,i,s,s);let n=1*o,a=Math.round(i+n/2)-.5,l=Math.round(e+n/2)-.5,c=Math.round(i+s-n+n/2)-.5,h=Math.round(e+s-n+n/2)-.5;if(t.strokePath({color:r.pushed?g.WHITE:g.BLACK,path:new v(h,c).lineTo(h,a).moveTo(h,c).lineTo(l,c),lineWidth:n}),t.strokePath({color:r.pushed?g.BLACK:g.WHITE,path:new v(l,a).lineTo(h-n,a).moveTo(l,a).lineTo(l,c-n),lineWidth:n}),this.imagesLoaded){let u=r.disabled?r.disabledImageElement:r.imageElement,f=u.naturalHeight*o,_=u.naturalWidth*o,b=Math.round(e+(s-_)/2),T=Math.round(i+(s-f)/2);t.ctx.drawImage(u,b,T,_,f)}}get scale(){return this.xyGraph.scale}get buttonSize(){return 25*this.scale}};var Nr="axis_count",xd="plot_area_background_color",wd="show_legend",yd="show_plot_area_border",bd="show_toolbar",Pd="title",vd="title_font",Fr="trace_count",_d="transparent",hr=class extends V{toolbar;plotAreaRegion;axes=[];traces=[];autoScaleAllowed=!0;constructor(t,e){super(t,e),this.properties.add(new P(Nr)),this.properties.add(new S(xd)),this.properties.add(new w(wd)),this.properties.add(new w(yd)),this.properties.add(new w(bd)),this.properties.add(new R(Pd)),this.properties.add(new k(vd)),this.properties.add(new P(Fr)),this.properties.add(new w(_d)),this.properties.addGenerator(()=>{let i=[];this.axes=[];let r=this.properties.getValue(Nr);for(let o=0;o<r;o++)this.axes.push(new rr(this,o)),i.push(new w(`axis_${o}_auto_scale`),new B(`axis_${o}_auto_scale_treshold`),new S(`axis_${o}_axis_color`),new R(`axis_${o}_axis_title`),new w(`axis_${o}_dash_grid_line`),new S(`axis_${o}_grid_color`),new w(`axis_${o}_log_scale`),new B(`axis_${o}_maximum`),new B(`axis_${o}_minimum`),new k(`axis_${o}_scale_font`),new R(`axis_${o}_scale_format`),new w(`axis_${o}_show_grid`),new P(`axis_${o}_time_format`),new k(`axis_${o}_title_font`),new w(`axis_${o}_visible`)),o>1&&i.push(new w(`axis_${o}_left_bottom_side`),new w(`axis_${o}_y_axis`));this.traces=[];let s=this.properties.getValue(Fr);for(let o=0;o<s;o++)this.traces.push(new ar(this,o)),i.push(new w(`trace_${o}_anti_alias`),new P(`trace_${o}_buffer_size`),new w(`trace_${o}_concatenate_data`),new P(`trace_${o}_line_width`),new R(`trace_${o}_name`),new P(`trace_${o}_plot_mode`),new P(`trace_${o}_point_size`),new P(`trace_${o}_point_style`),new S(`trace_${o}_trace_color`),new P(`trace_${o}_trace_type`),new P(`trace_${o}_update_delay`),new P(`trace_${o}_update_mode`),new w(`trace_${o}_visible`),new P(`trace_${o}_x_axis_index`),new R(`trace_${o}_x_pv`),new Pt(`trace_${o}_x_pv_value`,`trace_${o}_x_pv`),new P(`trace_${o}_y_axis_index`),new R(`trace_${o}_y_pv`),new Pt(`trace_${o}_y_pv_value`,`trace_${o}_y_pv`));return i})}init(){this.plotAreaRegion=new or(`${this.wuid}-plotarea`,this),this.traces.forEach(t=>t.init())}draw(t){let{scale:e}=this,i=this.area;if(this.borderAlarmSensitive&&(i=D(this.area,2*e)),!this.transparent){let o=this.alarmSensitiveBackgroundColor;t.fillRect({...i,color:o})}this.showToolbar&&this.drawToolbar(t,i),this.title&&this.drawTitle(t,i);for(let o of this.axes){if(o.autoScale&&this.autoScaleAllowed){let l={start:o.minimum,stop:o.maximum},c=this.calculateAutoscaledRange(o,l);c&&(o.effectiveMinimum=c.start,o.effectiveMaximum=c.stop)}let n=o.effectiveMinimum,a=o.effectiveMaximum;o.linearScale=new et(this.display.formatter,e,o.scaleFont,n,a,o.logScale,50*e,o.axisColor,!0,o.visible),o.linearScale.scaleFormat=o.scaleFormat,o.linearScale.timeFormat=o.timeFormat}this.showLegend&&this.drawLegend(t,i),t.addHitRegion(this.plotAreaRegion).addRect(i.x,i.y,i.width,i.height);let r=this.drawAxes(t,i);this.drawPlotArea(t,r);let s=this.plotAreaRegion?.selection;s&&this.drawZoomSelection(t,r,ws(r,s))}drawToolbar(t,e){this.toolbar||(this.toolbar=new lr(this));let i=3*this.scale,r=D(e,i),s=this.toolbar.draw(t,r);e.y+=i+s+i,e.height-=i+s+i}drawTitle(t,e){let i=t.measureText(this.title,this.titleFont).height;t.fillText({x:e.x+e.width/2,y:e.y+i/2,align:"center",baseline:"middle",color:this.alarmSensitiveForegroundColor,font:this.titleFont,text:this.title});let r=2*this.scale;e.y+=i+r,e.height-=i+r}drawAxes(t,e){let{scale:i}=this,r=5*i,s={...e},o=0,n=0;for(let h of this.getXAxes())if(h.visible){let u=0;h.axisTitle&&(u=r+t.measureText(h.axisTitle,h.titleFont).height),o+=u,n+=u+h.linearScale.measureHorizontalHeight(t)}let a=0,l=0;for(let h of this.getYAxes().reverse()){let u=h.linearScale;if(h.visible){let f=u.calculateMargin(t,!1),_=s.height-n+(n>0?f:0),b=0;h.axisTitle&&(b=t.measureText(h.axisTitle,h.titleFont).height,t.ctx.save(),t.ctx.translate(s.x+r+b/2,e.y+_/2),t.ctx.rotate(-Math.PI/2),t.fillText({x:0,y:0,align:"center",baseline:"middle",font:h.titleFont,color:h.axisColor,text:h.axisTitle}),t.ctx.restore(),b+=r);let T=b+u.drawVertical(t,s.x+b,e.y,_,!0,!1);s.x+=T,s.width-=T,a+=T;let W=u.margin;l=l===0?W:Math.min(l,W);let O=i*1,L=Math.round(s.x)-O/2,M=Math.round(e.y+f)-O/2;t.strokePath({path:new v(L,M).lineTo(L,M+_-2*f),color:h.axisColor,opacity:100/255,lineWidth:O})}else{let f=s.height-n;u.setDimensions(0,e.y,f,!1)}}let c=0;for(let h of this.getXAxes().reverse()){let u=h.linearScale;if(h.visible){let f=u.calculateMargin(t,!0),_=a-f,b=0;if(h.axisTitle){b=t.measureText(h.axisTitle,h.titleFont).height;let N=e.x+a+(e.width-a)/2;t.fillText({x:N,y:s.y+s.height-b/2,align:"center",baseline:"middle",font:h.titleFont,color:h.axisColor,text:h.axisTitle}),b+=r}let T=b+u.drawHorizontal(t,e.x+_,s.y+s.height-b,e.width-_);s.height-=T;let W=u.margin;c=c===0?W:Math.min(c,W);let O=i*1,L=Math.round(e.x+_+f)-O/2,M=Math.round(s.y+s.height)-O/2;t.strokePath({path:new v(L,M).lineTo(L+s.width-f,M),color:h.axisColor,opacity:100/255,lineWidth:O})}else{let f=e.x+a,_=e.width-a;u.setDimensions(f,0,_,!0)}}return s.y+=l,s.width-=c,n>0?s.height-=l:s.height-=2*l,s}drawPlotArea(t,e){let{scale:i}=this,r=1*i;if(this.transparent||t.fillRect({...e,color:this.plotAreaBackgroundColor}),this.showPlotAreaBorder){let{x:s,y:o,width:n,height:a}=D(e,r/2);t.strokePath({path:new v(s,o).lineTo(s+n,o).lineTo(s+n,o+a),color:g.BLACK,lineWidth:r})}for(let s of this.axes.filter(o=>o.visible&&o.showGrid)){let o=s.linearScale;if(s.isHorizontal())for(let n of o.getGridPositions()){let a=Math.round(o.getX()+n)-r/2;t.strokePath({path:new v(a,e.y).lineTo(a,e.y+e.height),color:s.gridColor,lineWidth:r,dash:s.dashGridLine?[6*i,2*i]:void 0})}else for(let n of o.getGridPositions()){let a=Math.round(o.getY()+n)-r/2;t.strokePath({path:new v(e.x,a).lineTo(e.x+e.width,a),color:s.gridColor,lineWidth:r,dash:s.dashGridLine?[6*i,2*i]:void 0})}}t.ctx.save(),t.ctx.beginPath(),t.ctx.rect(e.x,e.y,e.width,e.height),t.ctx.clip();for(let s of this.traces.filter(o=>o.visible)){let o=this.getAxis(s.xAxisIndex).linearScale,n=this.getAxis(s.yAxisIndex).linearScale,a=[];for(let l of s.snapshot()){let c=o.getValuePosition(l.x),h=l.y!==null?n.getValuePosition(l.y):null;a.push({x:c,y:h})}if(a.length){s.drawTrace(t,a);for(let l of a)l.y!==null&&s.drawPoint(t,l)}}t.ctx.restore()}drawZoomSelection(t,e,i){let{scale:r}=this;switch(this.toolbar?.currentTool){case"rubberband-zoom":t.strokeRect({...i,color:g.BLACK,lineWidth:1*r});break;case"horizontal-zoom":let s=i;s.y=e.y,s.height=e.height,t.strokeRect({..._r(s),color:g.BLACK,lineWidth:1*r});break;case"vertical-zoom":let o=i;o.x=e.x,o.width=e.width,t.strokeRect({..._r(o),color:g.BLACK,lineWidth:1*r});break}}drawLegend(t,e){let{scale:i}=this,r=25*i,s=2*i,o=5*i,n=q.ARIAL_10.scale(i);for(let a of this.getYAxes()){let l=this.traces.filter(O=>O.visible&&O.yAxisIndex===a.index),c=[],h=[],u=0,f=0;for(let O of l){let L=r+s+o;O.name&&(L+=t.measureText(O.name,n).width),u+L<e.width?(h.push(O),u+=L):(c.push(h),L=Math.max(L,u),h=[O],u=L)}if(h.length&&(c.push(h),f=Math.max(f,u)),!c.length)continue;let _=r*c.length,b={x:Math.round(e.x+(e.width-f)/2),y:Math.round(e.y+e.height-_),width:f,height:_};e.height-=b.height,this.transparent||t.fillRect({...b,color:this.plotAreaBackgroundColor}),t.strokeRect({...D(b,1*i/2),color:a.axisColor});let T=b.x,W=b.y;for(let O=0;O<c.length;O++){let L=c[O],M=W+O*r,N=M+r/2;for(let F of L){let X=F.pointSize>Math.floor((r-o)/2)?Math.floor(r-o):F.pointSize;switch(F.traceType){case 3:let j=T+r/2;t.strokePath({path:new v(j,M+X).lineTo(j,M+r),lineWidth:F.lineWidth,color:F.traceColor,opacity:100/255}),F.drawPoint(t,{x:j,y:M+X});break;case 4:case 5:let pt=[{x:T,y:M+r/2},{x:T+r/2,y:M+X},{x:T+r,y:M+r/2},{x:T+r,y:M+r},{x:T,y:M+r}];t.fillPath({path:v.fromPoints(pt),color:F.traceColor,opacity:100/255}),F.traceType===5&&t.strokePath({path:v.fromPoints(pt.slice(0,3)),color:F.traceColor,lineWidth:1*i}),F.drawPoint(t,{x:T+r/2,y:M+X});break;default:F.drawTrace(t,[{x:T,y:N},{x:T+r,y:N}]),F.drawPoint(t,{x:T+r/2,y:N})}T+=r+s,F.name&&(t.fillText({x:T,y:N,align:"left",baseline:"middle",color:F.traceColor,font:n,text:F.name}),T+=t.measureText(F.name,n).width),T+=o}}}}setCursor(t){this.plotAreaRegion.cursor=t}calculateAutoscaledRange(t,e){let i,r,s=t.logScale;for(let o of this.traces)if(o.visible&&!(this.axes[o.xAxisIndex]!==t&&this.axes[o.yAxisIndex]!==t))for(let n of o.snapshot()){let a=t.isHorizontal()?n.x:n.y;a!==null&&((i===void 0||i>a)&&(!s||a>0)&&(i=a),(r===void 0||r<a)&&(!s||a>0)&&(r=a))}if(i!==void 0&&r!==void 0)return i===r?{start:Math.min(i,e.start),stop:Math.max(r,e.stop)}:{start:i,stop:r}}performAutoScale(){for(let t of this.axes)t.visible&&t.performAutoScale()}clearGraph(){for(let t of this.traces)t.clearData();this.requestRepaint()}getAxes(){return[...this.axes]}getXAxes(){return this.axes.filter(t=>t.isHorizontal())}getYAxes(){return this.axes.filter(t=>t.isVertical())}getAxis(t){return this.axes[t]}getTrace(t){return this.traces[t]}get axisCount(){return this.properties.getValue(Nr)}get plotAreaBackgroundColor(){return this.properties.getValue(xd)}get showLegend(){return this.properties.getValue(wd)}get showPlotAreaBorder(){return this.properties.getValue(yd)}get showToolbar(){return this.properties.getValue(bd)}get title(){return this.properties.getValue(Pd)}get titleFont(){return this.properties.getValue(vd).scale(this.scale)}get traceCount(){return this.properties.getValue(Fr)}get transparent(){return this.properties.getValue(_d)}destroy(){for(let t of this.traces)t.destroy()}};var cr=class extends gt{async parseNode(t){await super.parseNode(t);for(let e of t.getNodes("widget")){let i=e.getString("widget_type"),r=this.display.createWidget(i,this);r&&(await r.parseNode(e),this.widgets.push(r))}}beforeDrawBorder(t){this.transparent||t.fillRect({x:this.holderX,y:this.holderY,width:this.holderWidth,height:this.holderHeight,color:this.backgroundColor})}draw(t){let e=t.createChild(this.width,this.height);for(let i of this.widgets.filter(r=>r.visible))i.drawHolder(e),i.draw(e),i.drawDecoration(e);for(let i of this.widgets.filter(r=>r.visible))i.drawOverlay(e);t.copy(e,this.x,this.y)}};var Rd="minimum_tab_height",$r="active_tab",Td="horizontal_tabs",Gr="tab_count",Ur=class{constructor(t,e){this.widget=t;this.i=e;this.headerRegion={id:`${t.wuid}-header-${e}`,click:()=>{t.activeTab!==e&&(t.properties.setValue($r,e),t.requestRepaint())},cursor:"pointer"}}headerRegion;get scale(){return this.widget.scale}getValue(t){return this.widget.properties.getValue(`tab_${this.i}_${t}`)}get title(){return this.getValue("title")}get backgroundColor(){return this.getValue("background_color")}get foregroundColor(){return this.getValue("foreground_color")}get enabled(){return this.getValue("enabled")}get font(){return this.getValue("font").scale(this.scale)}},Ie=class extends gt{tabs=[];constructor(t,e){super(t,e),this.properties.add(new P(Rd)),this.properties.add(new P($r)),this.properties.add(new w(Td)),this.properties.add(new P(Gr)),this.properties.addGenerator(()=>{this.tabs=[];let i=this.properties.getValue(Gr),r=[];for(let s=0;s<i;s++)this.tabs.push(new Ur(this,s)),r.push(new R(`tab_${s}_title`),new S(`tab_${s}_background_color`),new S(`tab_${s}_foreground_color`),new w(`tab_${s}_enabled`),new k(`tab_${s}_font`));return r})}async parseNode(t){await super.parseNode(t);for(let e of t.getNodes("widget")){let i=e.getString("widget_type"),r=this.display.createWidget(i,this);r&&(await r.parseNode(e),this.widgets.push(r))}}draw(t){this.horizontalTabs?this.drawHorizontalTabs(t):this.drawVerticalTabs(t)}measureTabOffset(t){return this.horizontalTabs?{x:0,y:this.measureLabelHeight(t)}:{x:this.measureLabelWidth(t),y:0}}measureLabelHeight(t){let{scale:e}=this,i=1*e,r=this.minimumTabHeight;for(let s=0;s<this.tabs.length;s++){let o=this.tabs[s],a=t.measureText(o.title,o.font).height+i;a>r&&(r=a)}return r+this.margin}measureLabelWidth(t){let{scale:e}=this,i=1*e,r=this.minimumTabWidth;for(let s=0;s<this.tabs.length;s++){let o=this.tabs[s],a=t.measureText(o.title,o.font).width+i;a>r&&(r=a)}return r+this.margin}drawHorizontalTabs(t){let{margin:e,gap:i,scale:r}=this,s=this.measureLabelHeight(t),o=1*r,n=this.x;for(let a=0;a<this.tabs.length;a++){let l=this.tabs[a],c=t.measureText(l.title,l.font),h,u,f,_,b;this.activeTab===a?(h=n,u=this.y,f=c.width+o+e+i,_=s,b=l.backgroundColor):(h=n+i,u=this.y+2*r,f=c.width+o+e-i,_=s-2*r,b=this.darken(l.backgroundColor)),t.fillRect({x:h,y:u,width:f,height:_,color:b}),t.addHitRegion(l.headerRegion).addRect(h,u,f,_);let W=t.createLinearGradient(h,u,h,u+_);if(W.addColorStop(0,g.WHITE.toString()),W.addColorStop(1,g.WHITE.withAlpha(0).toString()),t.fillRect({x:h,y:u,width:f,height:_,gradient:W}),t.fillText({x:h+f/2,y:u+_/2,baseline:"middle",align:"center",font:l.font,color:l.foregroundColor,text:l.title}),n+=c.width+o+e-1*r,this.activeTab===a){let O=this.x,L=this.y+s,M=this.width,N=this.height-s;t.fillRect({x:O,y:L,width:M,height:N,color:l.backgroundColor});let F=this.widgets[a],X=t.createChild(M,N);F.drawHolder(X),F.draw(X),F.drawDecoration(X),F.drawOverlay(X),t.copy(X,O,L)}else this.widgets[a].hide()}}drawVerticalTabs(t){let{margin:e,gap:i,scale:r}=this,s=this.measureLabelWidth(t),o=1*r,n=this.y;for(let a=0;a<this.tabs.length;a++){let l=this.tabs[a],c=t.measureText(l.title,l.font),h=Math.max(c.height+o+o,this.minimumTabHeight),u,f,_,b,T;this.activeTab===a?(u=this.x,f=n,_=s,b=h+e+i,T=l.backgroundColor):(u=this.x+2*r,f=n+i,_=s-2*r,b=h+e-i,T=this.darken(l.backgroundColor)),t.fillRect({x:u,y:f,width:_,height:b,color:T}),t.addHitRegion(l.headerRegion).addRect(u,f,_,b);let O=t.createLinearGradient(u,f,u+_,f);if(O.addColorStop(0,g.WHITE.toString()),O.addColorStop(1,g.WHITE.withAlpha(0).toString()),t.fillRect({x:u,y:f,width:_,height:b,gradient:O}),t.fillText({x:u+_/2,y:f+b/2,baseline:"middle",align:"center",font:l.font,color:l.foregroundColor,text:l.title}),n+=h+e-1*r,this.activeTab===a){let L=this.x+s-1*r,M=this.y,N=this.width-s,F=this.height-1*r;t.fillRect({x:L,y:M,width:N,height:F,color:l.backgroundColor});let X=this.widgets[a],j=t.createChild(N,F);X.drawHolder(j),X.draw(j),X.drawDecoration(j),X.drawOverlay(j),t.copy(j,L,M)}else this.widgets[a].destroy()}}darken(t){let e=Math.max(0,t.red-30),i=Math.max(0,t.green-30),r=Math.max(0,t.blue-30);return new g(e,i,r)}get margin(){return this.scale*10}get gap(){return this.scale*2}get minimumTabWidth(){return this.scale*20}get minimumTabHeight(){return this.scale*this.properties.getValue(Rd)}get activeTab(){return this.properties.getValue($r)}get tabCount(){return this.properties.getValue(Gr)}get horizontalTabs(){return this.properties.getValue(Td)}};var pr=class{constructor(t){this.table=t}columnCount=0;cells=[];selectedRowIndex;dirty=!1;modifiedListeners=[];selectionChangedListeners=[];isEmpty(){return!this.cells.length}refresh(){this.dirty=!0}getCells(){return this.cells}getContent(){let t=[];for(let e of this.cells)t.push(e.map(i=>i.text||""));return t}setContent(t){this.cells.length=0;for(let e=0;e<t.length;e++)e===0&&(this.columnCount=t[e].length),this.cells.push(t[e].map(i=>({text:i})));this.dirty=!0}getColumnCount(){return this.columnCount}getRowCount(){return this.cells.length}setSelectedRowIndex(t){this.selectedRowIndex=t,this.selectionChangedListeners.forEach(e=>e()),this.dirty=!0}getSelection(){return this.selectedRowIndex===void 0?[]:[[...this.cells[this.selectedRowIndex].map(e=>e.text??null)]]}getCellText(t,e){let i=this.cells[t];return i?i[e]?.text??null:null}setColumnsCount(t){if(t<this.columnCount)for(let e of this.cells)e.length=t;if(t>this.columnCount){let e=t-this.columnCount;for(let i of this.cells)for(let r=0;r<e;r++)i.push({text:""})}this.columnCount=t,this.dirty=!0}addModifiedListener(t){this.modifiedListeners.push(t)}addSelectionChangedListener(t){this.selectionChangedListeners.push(t)}appendRow(){let t=[];for(let e=0;e<this.columnCount;e++)t[e]={text:""};return this.cells.push(t),this.dirty=!0,this.cells.length-1}deleteRow(t){this.cells.splice(t,1),this.dirty=!0}deleteColumn(t){for(let e of this.cells)e.splice(t,1);this.columnCount--,this.dirty=!0}insertRow(t){let e=[];for(let i=0;i<this.columnCount;i++)e.push({text:""});this.cells.splice(t,0,e),this.dirty=!0}insertColumn(t){for(let e of this.cells)e.splice(t,0,{text:""});this.columnCount++,this.dirty=!0}getCell(t,e){this.cells[t]=this.cells[t]??[];let i=this.cells[t][e]??{};return this.cells[t][e]=i,i}setCellText(t,e,i){let r=this.getCell(t,e);r.text=i,this.dirty=!0}setRowBackground(t,e){let i=this.cells[t];for(let r of i)r.backgroundColor=e;this.dirty=!0}setRowForeground(t,e){let i=this.cells[t];for(let r of i)r.foregroundColor=e;this.dirty=!0}setCellBackground(t,e,i){let r=this.getCell(t,e);r.backgroundColor=i,this.dirty=!0}setCellForeground(t,e,i){let r=this.getCell(t,e);r.foregroundColor=i,this.dirty=!0}setColumnCellEditorData(t,e){}};var Cd="columns_count",Sd="column_headers",Ld="column_header_visible",Ad="default_content",Ed="font",dr=class extends V{tableWrapper;table;spreadsheet;constructor(t,e){super(t,e),this.properties.add(new P(Cd)),this.properties.add(new te(Sd)),this.properties.add(new w(Ld)),this.properties.add(new te(Ad)),this.properties.add(new k(Ed)),this.spreadsheet=new pr(this)}init(){this.tableWrapper=document.createElement("div"),this.tableWrapper.style.display="none",this.tableWrapper.style.overflow="auto",this.table=document.createElement("table"),this.table.style.tableLayout="fixed",this.table.style.borderSpacing="0",this.table.style.borderCollapse="collapse",this.tableWrapper.appendChild(this.table),this.display.rootPanel.appendChild(this.tableWrapper),this.table.addEventListener("click",t=>{let e=t.target;if(e.tagName==="TD"){let i=e.parentElement;i.rowIndex>0&&this.spreadsheet.setSelectedRowIndex(i.rowIndex-1)}else this.spreadsheet.setSelectedRowIndex(void 0);this.requestRepaint()}),this.spreadsheet.setContent(this.defaultContent)}draw(t){if(this.tableWrapper){let{x:e,y:i,width:r,height:s}=this.display.measureAbsoluteArea(this);this.tableWrapper.style.backgroundColor="white",this.tableWrapper.style.position="absolute",this.tableWrapper.style.display="block",this.tableWrapper.style.left=`${e}px`,this.tableWrapper.style.top=`${i}px`,this.tableWrapper.style.width=`${r}px`,this.tableWrapper.style.height=`${s}px`,this.tableWrapper.style.border="1px solid rgba(0, 0, 0, 0.1)",this.table.style.font=this.font.getFontString(),this.spreadsheet.dirty&&(this.generateTableContent(),this.spreadsheet.dirty=!1)}}generateTableContent(){let t=this.table.rows.length;for(let i=t-1;i>=0;i--)this.table.deleteRow(i);if(this.columnHeaderVisible){let i=this.table.insertRow();for(let r=0;r<this.columnsCount;r++){let s=this.columnHeaders[r],o=i.insertCell();o.style.color="#aaa",o.style.textAlign="left",o.style.width=Number(s[1])*this.scale+"px",o.style.overflow="hidden",o.style.padding=`${4*this.scale}px`,o.style.borderBottom="1px solid rgba(0, 0, 0, 0.1)",r!==0&&(o.style.borderLeft="1px solid rgba(0, 0, 0, 0.1)");let n=document.createTextNode(s[0]);o.appendChild(n)}i.insertCell()}let e=this.spreadsheet.getCells();for(let i=0;i<e.length;i++){let r=e[i],s=i===this.spreadsheet.selectedRowIndex,o=this.table.insertRow();for(let n=0;n<this.columnsCount;n++){let a=o.insertCell();if(a.style.textAlign="left",a.style.overflow="hidden",a.style.wordWrap="break-word",a.style.textOverflow="ellipsis",a.style.padding=`${4*this.scale}px`,n!==0&&(a.style.borderLeft="1px solid rgba(0, 0, 0, 0.1)"),r[n]!==void 0){let l=s?g.BLUE:r[n].backgroundColor;l&&(a.style.backgroundColor=l.toString());let c=s?g.WHITE:r[n].foregroundColor;c&&(a.style.color=c.toString());let h=document.createTextNode(r[n].text||"");a.appendChild(h)}}o.insertCell()}}hide(){this.tableWrapper&&(this.tableWrapper.style.display="none")}destroy(){this.tableWrapper&&(this.display.rootPanel.removeChild(this.tableWrapper),this.tableWrapper=void 0,this.table=void 0)}get columnsCount(){return this.properties.getValue(Cd)}get columnHeaders(){return this.properties.getValue(Sd)}get columnHeaderVisible(){return this.properties.getValue(Ld)}get defaultContent(){return this.properties.getValue(Ad)}get font(){return this.properties.getValue(Ed).scale(this.scale)}};var Od="url",ur=class extends V{iframe;prevUrl;constructor(t,e){super(t,e),this.properties.add(new R(Od))}init(){this.iframe=document.createElement("iframe"),this.iframe.src="",this.iframe.style.display="none",this.iframe.style.border="0",this.display.rootPanel.appendChild(this.iframe)}draw(t){if(this.iframe){let{x:e,y:i,width:r,height:s}=this.display.measureAbsoluteArea(this);this.iframe.style.position="absolute",this.iframe.style.display="block",this.iframe.style.left=`${e}px`,this.iframe.style.top=`${i}px`,this.iframe.style.width=`${r}px`,this.iframe.style.height=`${s}px`,this.url&&this.prevUrl!==this.url&&(this.iframe.src=this.url,this.prevUrl=this.url)}}hide(){this.iframe&&(this.iframe.style.display="none")}destroy(){this.iframe&&(this.display.rootPanel.removeChild(this.iframe),this.iframe=void 0)}get url(){return this.properties.getValue(Od)}};var yg="Action Button",bg="Arc",Pg="Boolean Button",vg="Boolean Switch",_g="Byte Monitor",Rg="Check Box",Tg="Choice Button",Cg="Combo",Sg="Combo Box",Lg="Ellipse",Ag="Gauge",Eg="Grouping Container",Og="Image",Vg="Image Boolean Button",Mg="Image Boolean Indicator",Ig="Intensity Graph",Bg="Label",Wg="LED",kg="Linking Container",Hg="Menu Button",Dg="Meter",Ng="Button",Fg="Polygon",Gg="Polyline",$g="Progress Bar",Ug="Radio Box",Yg="Rectangle",Xg="Rounded Rectangle",zg="Scrollbar",qg="Tabbed Container",Kg="Table",jg="Tank",Zg="Text Input",Jg="Text Update",Qg="Thermometer",tm="Web Browser",em="XY Graph",Yr=class{constructor(t){this.targetElement=t;this.rootPanel=document.createElement("div"),this.rootPanel.className="display-root",this.rootPanel.style.overflow="hidden",this.rootPanel.style.position="relative",this.rootPanel.style.fontSize="0",t.appendChild(this.rootPanel);let e=document.createElement("canvas");this.rootPanel.appendChild(e),this.g=new Ge(e),this.ctx=this.g.ctx,this.formatter=new He(!1),this.pvEngine=new vi(this),this.pvEngine.addProvider(new Ri),this.pvEngine.addProvider(new Ti(this.formatter)),this.pvEngine.addProvider(new bi),this.displayRegion={id:"display-root",click:()=>{for(let i of this.rootPanel.getElementsByTagName("input"))i.blur();for(let i of this.rootPanel.getElementsByTagName("textarea"))i.blur();for(let i of this.rootPanel.getElementsByTagName("select"))i.blur()}},this.pathResolver=new Ae(this),this.consoleHandler=new ve,this.dialogHandler=new _e,window.setTimeout(()=>this.step()),new ke(this,e,this.g.hitCanvas)}rootPanel;g;ctx;pvEngine;pathResolver;fontResolver;consoleHandler;dialogHandler;formatter;repaintRequested=!1;_editMode=!1;_showGrid=!1;_showOutline=!1;_showRuler=!1;_selection=[];_scale=1;_transparent=!1;_disconnectedColor=new g(160,32,240);_invalidColor=new g(255,0,255);_majorColor=new g(255,0,0);_minorColor=new g(255,128,0);refreshCycle=100;imagesPrefix="";absPrefix="";relPrefix="";instance;eventListeners={closedisplay:[],opendisplay:[],openpv:[],runcommand:[],runprocedure:[],runstack:[],selection:[],scale:[]};displayRegion;addProvider(t){this.pvEngine.addProvider(t)}addScriptLibrary(t,e){this.pvEngine.addScriptLibrary(t,e)}setPathResolver(t){this.pathResolver=t}getPathResolver(){return this.pathResolver}setConsoleHandler(t){this.consoleHandler=t}getConsoleHandler(){return this.consoleHandler}setDialogHandler(t){this.dialogHandler=t}getDialogHandler(){return this.dialogHandler}setFontResolver(t){this.fontResolver=t}getFontResolver(){return this.fontResolver}step(){this.repaintRequested&&(this.g.clearHitCanvas(),this.drawScreen(),this.repaintRequested=!1),window.setTimeout(()=>this.step(),this.refreshCycle)}drawScreen(){if(this.instance?(this.rootPanel.style.height=this.instance.holderHeight+"px",this.rootPanel.style.width=this.instance.holderWidth+"px"):(this.rootPanel.style.height="0px",this.rootPanel.style.width="0px"),this.g.resize(this.rootPanel.clientWidth,this.rootPanel.clientHeight),this.transparent&&this.g.clearCanvas(),this.editMode){let e=document.createElement("canvas"),i=e.getContext("2d");e.width=16,e.height=16,i.fillStyle="#d6d6d6",i.fillRect(0,0,8,8),i.fillRect(8,8,8,8),this.ctx.fillStyle=this.ctx.createPattern(e,"repeat"),this.ctx.fillRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height),this.instance&&this.g.fillRect({...this.instance.bounds,color:this.instance.backgroundColor})}else this.transparent||this.g.fillCanvas(this.instance?.backgroundColor||g.WHITE);if(this.g.addHitRegion(this.displayRegion).addRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height),this.showGrid&&this.instance){let e=document.createElement("canvas"),i=e.getContext("2d");e.width=25,e.height=25,i.fillStyle=this.instance.foregroundColor.toString(),i.fillRect(0,0,2,1),this.ctx.fillStyle=this.ctx.createPattern(e,"repeat"),this.ctx.fillRect(25,25,this.ctx.canvas.width-50,this.ctx.canvas.height-50)}if(this.showRuler){this.ctx.lineWidth=1,this.ctx.strokeStyle="grey",this.ctx.textBaseline="bottom",this.ctx.textAlign="center",this.ctx.fillStyle="grey",this.ctx.font="12px Arial";let e=0;for(;e<=this.ctx.canvas.width;)e+=100,this.ctx.beginPath(),this.ctx.moveTo(e-75+.5,this.ctx.canvas.height),this.ctx.lineTo(e-75+.5,this.ctx.canvas.height-4),this.ctx.moveTo(e-50+.5,this.ctx.canvas.height),this.ctx.lineTo(e-50+.5,this.ctx.canvas.height-6),this.ctx.moveTo(e-25+.5,this.ctx.canvas.height),this.ctx.lineTo(e-25+.5,this.ctx.canvas.height-4),this.ctx.moveTo(e+.5,this.ctx.canvas.height),this.ctx.lineTo(e+.5,this.ctx.canvas.height-8),this.ctx.stroke(),this.ctx.fillText(String(e),e,this.ctx.canvas.height-8);this.ctx.textAlign="right",this.ctx.textBaseline="middle";let i=0;for(;i<=this.ctx.canvas.height;)i+=100,this.ctx.beginPath(),this.ctx.moveTo(this.ctx.canvas.width,i-75+.5),this.ctx.lineTo(this.ctx.canvas.width-4,i-75+.5),this.ctx.moveTo(this.ctx.canvas.width,i-50+.5),this.ctx.lineTo(this.ctx.canvas.width-6,i-50+.5),this.ctx.moveTo(this.ctx.canvas.width,i-25+.5),this.ctx.lineTo(this.ctx.canvas.width-4,i-25+.5),this.ctx.moveTo(this.ctx.canvas.width,i+.5),this.ctx.lineTo(this.ctx.canvas.width-8,i+.5),this.ctx.stroke(),this.ctx.fillText(String(i),this.ctx.canvas.width-8,i)}this.showOutline&&this.instance&&(this.ctx.lineWidth=1,this.ctx.setLineDash([10,5]),this.ctx.strokeStyle="black",this.ctx.strokeRect(-.5,-.5,this.instance.holderWidth+1,this.instance.holderHeight+1),this.ctx.setLineDash([])),this.instance&&this.instance.draw(this.g);for(let e of this.selection){let i=this.findWidget(e);i&&i.drawSelection(this.ctx)}}requestRepaint(){this.repaintRequested=!0}setTooltip(t){this.rootPanel.title=t?.trim()??""}createWidget(t,e){switch(t){case yg:return new ce(this,e);case bg:return new Hi(this,e);case Pg:return new Ci(this,e);case vg:return new Si(this,e);case _g:return new Xi(this,e);case Rg:return new Li(this,e);case Tg:return new Ai(this,e);case Cg:case Sg:return new Ei(this,e);case Lg:return new Di(this,e);case Ag:return new zi(this,e);case Eg:return new cr(this,e);case Og:return new Ni(this,e);case Vg:return new Oi(this,e);case Mg:return new qi(this,e);case Ig:return new Ki(this,e);case Bg:return new Fi(this,e);case Wg:return new ji(this,e);case kg:return new ne(this,e);case Hg:return new Vi(this,e);case Dg:return new Ji(this,e);case Ng:return new Mi(this,e);case Fg:return new Gi(this,e);case Gg:return new $i(this,e);case $g:return new Qi(this,e);case Ug:return new Ii(this,e);case Yg:return new Ui(this,e);case Xg:return new Yi(this,e);case zg:return new Wi(this,e);case qg:return new Ie(this,e);case Kg:return new dr(this,e);case jg:return new tr(this,e);case Zg:return new ki(this,e);case Jg:return new er(this,e);case Qg:return new ir(this,e);case tm:return new ur(this,e);case em:return new hr(this,e);default:console.warn(`Unsupported widget type: ${t}`)}}destroy(){this.instance?.destroy(),this.instance=void 0,this.pvEngine.clearState(),this.requestRepaint()}resolvePath(t,e){return this.pathResolver.resolve(t,e)}setSource(t,e){this.reset();let i=t.lastIndexOf("/")+1;return this.relPrefix=t.substring(0,i),new Promise((r,s)=>{fetch(t,{credentials:"same-origin"}).then(o=>{o.ok&&o.text().then(n=>{this.setSourceString(n,e),r()}).catch(n=>s(n))}).catch(o=>s(o))})}setSourceString(t,e){this.reset(),this.instance=new oe(this,void 0,e);let i=se.parseFromXML(t);this.instance.parseNode(i).then(()=>{this.pvEngine.init(),this.requestRepaint()})}getRefreshCycle(){return this.refreshCycle}setRefreshCycle(t){this.refreshCycle=t}reset(){this.instance&&(this.clearSelection(),this.pvEngine.clearState(),this.instance.destroy(),this.instance=void 0)}measureAbsoluteArea(t){let e=t.bounds,i=t.parent;for(;i;){if(e.x+=i.x,e.y+=i.y,i instanceof Ie){let{x:r,y:s}=i.measureTabOffset(this.g);e.x+=r,e.y+=s}i=i.parent}return e.x+=t.x-t.holderX,e.y+=t.y-t.holderY,e.width+=t.width-t.holderWidth,e.height+=t.height-t.holderHeight,e.x+=this.scale*1,e.y+=this.scale*1,e}addEventListener(t,e){if(!(t in this.eventListeners))throw new Error(`Unknown event '${t}'`);this.eventListeners[t].push(e)}removeEventListener(t,e){if(!(t in this.eventListeners))throw new Error(`Unknown event '${t}'`);this.eventListeners[t]=this.eventListeners[t].filter(i=>i!==e)}fireEvent(t,e){this.eventListeners[t].forEach(r=>r(e))}get showGrid(){return this._showGrid}set showGrid(t){this._showGrid=t,this.requestRepaint()}get showOutline(){return this._showOutline}set showOutline(t){this._showOutline=t,this.requestRepaint()}get showRuler(){return this._showRuler}set showRuler(t){this._showRuler=t,this.requestRepaint()}get selection(){return this._selection}set selection(t){this._selection=t,this.requestRepaint();let e={selected:this._selection.slice()};this.fireEvent("selection",e)}get editMode(){return this._editMode}set editMode(t){this._editMode=t,this.requestRepaint()}get scale(){return this._scale}set scale(t){this._scale=t,this.requestRepaint();let e={scale:t};this.fireEvent("scale",e)}get transparent(){return this._transparent}set transparent(t){this._transparent=t,this.requestRepaint()}get utc(){return this.formatter.utc}set utc(t){this.formatter.utc=t,this.requestRepaint()}get disconnectedColor(){return this._disconnectedColor}set disconnectedColor(t){this._disconnectedColor=t,this.requestRepaint()}get invalidColor(){return this._invalidColor}set invalidColor(t){this._invalidColor=t,this.requestRepaint()}get majorColor(){return this._majorColor}set majorColor(t){this._majorColor=t,this.requestRepaint()}get minorColor(){return this._minorColor}set minorColor(t){this._minorColor=t,this.requestRepaint()}get widgets(){return this.instance?this.instance.widgets:[]}clearSelection(){this.selection.length&&(this.selection=[])}findWidget(t){if(this.instance)return this.instance.findWidget(t)}findWidgetByName(t){if(this.instance)return this.instance.findWidgetByName(t)}getPVNames(){return this.pvEngine.getPVNames()}getPV(t){return this.pvEngine.getPV(t)}setValues(t){this.pvEngine.setExternalValues(t)}copyCanvas(t){t||(t={x:0,y:0,width:this.g.canvas.width,height:this.g.canvas.height});let e=document.createElement("canvas");return e.width=t.width,e.height=t.height,e.getContext("2d").drawImage(this.g.canvas,t.x,t.y,t.width,t.height,0,0,t.width,t.height),e}toDataURL(t="image/png",e){return this.g.ctx.canvas.toDataURL(t,e)}};export{ie as AlarmSeverity,g as Color,Ee as CompiledFormula,ve as DefaultConsoleHandler,_e as DefaultDialogHandler,Ae as DefaultPathResolver,Yr as Display,q as Font,Oe as FormulaCompiler,Xt as PV,V as Widget,Vu as colorFromCssColor};
|
|
22
22
|
//# sourceMappingURL=opi.js.map
|